From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmoWx-0004Za-Go for qemu-devel@nongnu.org; Mon, 06 Oct 2008 07:45:39 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmoWv-0004Xm-Om for qemu-devel@nongnu.org; Mon, 06 Oct 2008 07:45:39 -0400 Received: from [199.232.76.173] (port=52912 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmoWv-0004XR-GT for qemu-devel@nongnu.org; Mon, 06 Oct 2008 07:45:37 -0400 Received: from mis011-2.exch011.intermedia.net ([64.78.17.183]:20629) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KmoWt-0003Q3-Fu for qemu-devel@nongnu.org; Mon, 06 Oct 2008 07:45:37 -0400 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C927A8.DBBED8BF" Date: Mon, 6 Oct 2008 04:43:58 -0700 Message-ID: From: "Gal Hammer" Subject: [Qemu-devel] [PATCH] USB over network 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 This is a multi-part message in MIME format. ------_=_NextPart_001_01C927A8.DBBED8BF Content-Type: multipart/alternative; boundary="----_=_NextPart_002_01C927A8.DBBED8BF" ------_=_NextPart_002_01C927A8.DBBED8BF Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, =20 Attached is a preliminary patch which add QEmu the ability to use local USB devices over network. It should work with DOK devices and might work with web cameras. =20 Thanks, =20 Gal. =20 ------_=_NextPart_002_01C927A8.DBBED8BF Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,

 

Attached is a preliminary  patch which add = QEmu the ability to use local USB devices over network. It should work with DOK = devices and might work with web cameras.

 

Thanks,

 

         &= nbsp;      Gal.

 

------_=_NextPart_002_01C927A8.DBBED8BF-- ------_=_NextPart_001_01C927A8.DBBED8BF Content-Type: application/octet-stream; name="usb-over-ip.patch" Content-Transfer-Encoding: base64 Content-Description: usb-over-ip.patch Content-Disposition: attachment; filename="usb-over-ip.patch" ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMzUwNjFhNC4uZmY4NjExZiAx MDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTc4LDcgKzc4LDcgQEAgT0JK Uys9c3NkMDMwMy5vIHNzZDAzMjMubyBhZHM3ODQ2Lm8gc3RlbGxhcmlzX2lucHV0Lm8gdHdsOTIy MzAubwogT0JKUys9dG1wMTA1Lm8gbG04MzJ4Lm8KIE9CSlMrPXNjc2ktZGlzay5vIGNkcm9tLm8K IE9CSlMrPXNjc2ktZ2VuZXJpYy5vCi1PQkpTKz11c2IubyB1c2ItaHViLm8gdXNiLWxpbnV4Lm8g dXNiLWhpZC5vIHVzYi1tc2QubyB1c2Itd2Fjb20ubworT0JKUys9dXNiLm8gdXNiLWh1Yi5vIHVz Yi1saW51eC5vIHVzYi1oaWQubyB1c2ItbXNkLm8gdXNiLXdhY29tLm8gdXNiLXJlbW90ZS5vCiBP QkpTKz11c2Itc2VyaWFsLm8gdXNiLW5ldC5vCiBPQkpTKz1zZC5vIHNzaS1zZC5vCiBPQkpTKz1i dC5vIGJ0LWhvc3QubyBidC12aGNpLm8gYnQtbDJjYXAubyBidC1zZHAubyBidC1oY2kubyBidC1o aWQubyB1c2ItYnQubwpkaWZmIC0tZ2l0IGEvaHcvdXNiLmggYi9ody91c2IuaAppbmRleCA0MjA0 ODA4Li44ZTJjNTIwIDEwMDY0NAotLS0gYS9ody91c2IuaAorKysgYi9ody91c2IuaApAQCAtMjQy LDYgKzI0Miw3IEBAIFVTQkRldmljZSAqdXNiX2h1Yl9pbml0KGludCBuYl9wb3J0cyk7CiBVU0JE ZXZpY2UgKnVzYl9ob3N0X2RldmljZV9vcGVuKGNvbnN0IGNoYXIgKmRldm5hbWUpOwogaW50IHVz Yl9ob3N0X2RldmljZV9jbG9zZShjb25zdCBjaGFyICpkZXZuYW1lKTsKIHZvaWQgdXNiX2hvc3Rf aW5mbyh2b2lkKTsKK2ludCB1c2JfcmVtb3RlX3N0YXJ0KGNvbnN0IGNoYXIgKmhvc3Rfc3RyKTsK IAogLyogdXNiLWhpZC5jICovCiBVU0JEZXZpY2UgKnVzYl9tb3VzZV9pbml0KHZvaWQpOwpkaWZm IC0tZ2l0IGEvcWVtdS11c2JkLmMgYi9xZW11LXVzYmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi41NWJjMzM0Ci0tLSAvZGV2L251bGwKKysrIGIvcWVtdS11c2JkLmMKQEAg LTAsMCArMSwxMDU5IEBACisvKgorKiBMaW51eCByZW1vdGUgVVNCIHJlZGlyZWN0b3IKKyoKKyog Q29weXJpZ2h0IChjKSAyMDAzLTIwMDggRmFicmljZSBCZWxsYXJkCisqCisqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKKyogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyogaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwor KiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsIGFuZC9vciBzZWxsCisqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworKiBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKgorKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyoKKyogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMCisqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisqIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MgSU4KKyogVEhFIFNPRlRXQVJFLgorKi8KKworI2luY2x1ZGUgPGVycm5vLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5j bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxu ZXRpbmV0L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUg PGxpbnV4L3VzYl9jaDkuaD4KKwordHlwZWRlZiBzdHJ1Y3QgTklDSW5mbyBOSUNJbmZvOwordHlw ZWRlZiBzdHJ1Y3QgSENJSW5mbyBIQ0lJbmZvOwordHlwZWRlZiBzdHJ1Y3QgbXVzYl9zIG11c2Jf czsKK3R5cGVkZWYgc3RydWN0IElSUVN0YXRlICpxZW11X2lycTsKKworI2luY2x1ZGUgImh3L3Vz Yi5oIgorI2luY2x1ZGUgInVzYi1yZW1vdGUuaCIKKworI2RlZmluZSBVU0JERVZGU19QQVRIICIv cHJvYy9idXMvdXNiIgorI2RlZmluZSBQUk9EVUNUX05BTUVfU1ogMzIKKworLy8jZGVmaW5lIERF QlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkcHJpbnRmIHByaW50ZgorI2Vsc2UKKyNkZWZp bmUgZHByaW50ZiguLi4pCisjZW5kaWYKKworI2RlZmluZSBNQVgoYSwgYikgKCgoYSkgPiAoYikp ID8gKGEpIDogKGIpKQorCisjZGVmaW5lIHNvY2tldF9lcnJvcigpIGVycm5vCisjZGVmaW5lIGNs b3Nlc29ja2V0KHMpIGNsb3NlKHMpCisKK3R5cGVkZWYgc3RydWN0IFVTQkRldmljZVggeworICAg IGludCAgICAgZmQ7CisgICAgaW50ICAgICBzb2NrOworCisgICAgY2hhciAgICBkZXZuYW1lW1BS T0RVQ1RfTkFNRV9TWl07CisgICAgdWludDhfdCBkZXNjclsxMDI0XTsKKyAgICBpbnQgICAgIGRl c2NyX2xlbjsKKyAgICBpbnQgICAgIGNsb3Npbmc7CisKKyAgICAvKiBIb3N0IHNpZGUgYWRkcmVz cyAqLworICAgIGludCAgICAgYnVzX251bTsKKyAgICBpbnQgICAgIGFkZHI7CisKKyAgICAvKiBO ZXR3b3JrIGJ1ZmZlciAqLworICAgIGNoYXIgICAgKnRhaWxfcHRyOworICAgIGNoYXIgICAgYnVm ZmVyWzB4MTAwMF07CisKKyAgICBzdHJ1Y3QgVVNCRGV2aWNlWCAqbmV4dDsKKworfSBVU0JEZXZp Y2VYOworCit2b2lkICpxZW11X21hbGxvY3ooc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRy OworICAgIHB0ciA9IG1hbGxvYyhzaXplKTsKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIHB0cjsKK30KKwor dm9pZCBxZW11X2ZyZWUodm9pZCAqcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKwordm9pZCBw c3RyY3B5KGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBjb25zdCBjaGFyICpzdHIpCit7CisgICAg aW50IGM7CisgICAgY2hhciAqcSA9IGJ1ZjsKKworICAgIGlmIChidWZfc2l6ZSA8PSAwKQorICAg ICAgICByZXR1cm47CisKKyAgICBmb3IoOzspIHsKKyAgICAgICAgYyA9ICpzdHIrKzsKKyAgICAg ICAgaWYgKGMgPT0gMCB8fCBxID49IGJ1ZiArIGJ1Zl9zaXplIC0gMSkKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAqcSsrID0gYzsKKyAgICB9CisgICAgKnEgPSAnXDAnOworfQorCitzdGF0 aWMgc29ja2V0X3NldF9ub25ibG9jayhpbnQgcykKK3sKKyAgICBpbnQgZjsKKyAgICBmID0gZmNu dGwocywgRl9HRVRGTCk7CisgICAgZmNudGwocywgRl9TRVRGTCwgZiB8IE9fTk9OQkxPQ0spOwor fQorCit0eXBlZGVmIGludCBVU0JTY2FuRnVuYyh2b2lkICpvcGFxdWUsIGludCBidXNfbnVtLCBp bnQgYWRkciwgaW50IGNsYXNzX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlbmRv cl9pZCwgaW50IHByb2R1Y3RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpwcm9kdWN0X25hbWUsIGludCBzcGVlZCk7CisKK3N0YXRpYyBpbnQgdXNiX2hvc3RfZmluZF9k ZXZpY2UoaW50ICpwYnVzX251bSwgaW50ICpwYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqcHJvZHVjdF9uYW1lLCBpbnQgcHJvZHVjdF9uYW1lX3NpemUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUpOworCitzdGF0 aWMgVVNCRGV2aWNlWCAqaG9zdGRldl9saXN0OworCitzdGF0aWMgdm9pZCBob3N0ZGV2X2xpbmso VVNCRGV2aWNlWCAqZGV2KQoreworICAgIGRldi0+bmV4dCA9IGhvc3RkZXZfbGlzdDsKKyAgICBo b3N0ZGV2X2xpc3QgPSBkZXY7Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RkZXZfdW5saW5rKFVTQkRl dmljZVggKmRldikKK3sKKyAgICBVU0JEZXZpY2VYICpwZGV2ID0gaG9zdGRldl9saXN0OworICAg IFVTQkRldmljZVggKipwcmV2ID0gJmhvc3RkZXZfbGlzdDsKKworICAgIHdoaWxlIChwZGV2KSB7 CisgICAgICAgIGlmIChwZGV2ID09IGRldikgeworICAgICAgICAgICAgKnByZXYgPSBkZXYtPm5l eHQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwcmV2ID0gJnBk ZXYtPm5leHQ7CisgICAgICAgIHBkZXYgPSBwZGV2LT5uZXh0OworICAgIH0KK30KKworc3RhdGlj IFVTQkRldmljZVggKmhvc3RkZXZfZmluZChpbnQgYnVzX251bSwgaW50IGFkZHIpCit7CisgICAg VVNCRGV2aWNlWCAqcyA9IGhvc3RkZXZfbGlzdDsKKyAgICB3aGlsZSAocykgeworICAgICAgICBp ZiAocy0+YnVzX251bSA9PSBidXNfbnVtICYmIHMtPmFkZHIgPT0gYWRkcikKKyAgICAgICAgICAg IHJldHVybiBzOworICAgICAgICBzID0gcy0+bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7 Cit9CisKKy8qIAorKiBBc3luYyBVUkIgc3RhdGUuCisqIFdlIGFsd2F5cyBhbGxvY2F0ZSBvbmUg aXNvYyBkZXNjcmlwdG9yIGV2ZW4gZm9yIGJ1bGsgdHJhbnNmZXJzCisqIHRvIHNpbXBsaWZ5IGFs bG9jYXRpb24gYW5kIGNhc3RzLiAKKyovCit0eXBlZGVmIHN0cnVjdCBBc3luY1VSQgoreworICAg IHN0cnVjdCB1c2JkZXZmc191cmIgdXJiOworICAgIHN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0 X2Rlc2MgaXNvY3BkOworCisgICAgVVNCUGFja2V0ICAgKnBhY2tldDsKKyAgICBVU0JEZXZpY2VY ICAqZGV2OworfSBBc3luY1VSQjsKKworc3RhdGljIEFzeW5jVVJCICphc3luY19hbGxvYyh2b2lk KQoreworICAgIHJldHVybiAoQXN5bmNVUkIgKikgcWVtdV9tYWxsb2N6KHNpemVvZihBc3luY1VS QikpOworfQorCitzdGF0aWMgdm9pZCBhc3luY19mcmVlKEFzeW5jVVJCICphdXJiKQoreworICAg IHFlbXVfZnJlZShhdXJiKTsKK30KKworc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGUoVVNCRGV2 aWNlWCAqcykKK3sKKyAgICBVTlJCX1NVQk1JVF9VUkIgbnVyYjsKKyAgICBBc3luY1VSQiAqYXVy YjsKKyAgICBpbnQgcmV0OworCisgICAgd2hpbGUgKDEpIHsKKworICAgICAgICByZXQgPSBpb2N0 bChzLT5mZCwgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSwgJmF1cmIpOworICAgICAgICBpZiAocmV0 IDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgICAgICAg ICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9ERVYgJiYgIXMtPmNsb3Np bmcpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoImh1c2I6IGRldmljZSAlZC4lZCBkaXNjb25u ZWN0ZWRcbiIsIHMtPmJ1c19udW0sIHMtPmFkZHIpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHByaW50ZigiaHVzYjogYXN5bmMuIHJlYXAg dXJiIGZhaWxlZCBlcnJubyAlZFxuIiwgZXJybm8pOworICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICB9CisKKyAgICAgICAgZHByaW50ZigiaHVzYjogYXN5bmMgY29tcGxldGVkLiBhdXJiICVw IHN0YXR1cyAlZCBhbGVuICVkXG4iLCAKKyAgICAgICAgICAgIGF1cmIsIGF1cmItPnVyYi5zdGF0 dXMsIGF1cmItPnVyYi5hY3R1YWxfbGVuZ3RoKTsKKworICAgICAgICBudXJiLmhlYWRlci5tYWdp YyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAgICAgIG51cmIuaGVhZGVyLm9wY29kZSA9IFVOUkJf T1BDT0RFX1NVQk1JVF9VUkI7CisgICAgICAgIG51cmIuaGVhZGVyLnNpemUgPSBzaXplb2YobnVy YikgKyBhdXJiLT51cmIuYnVmZmVyX2xlbmd0aDsKKworICAgICAgICBudXJiLnVyYi5vcGFxdWUg PSAodWludDY0X3QpKGF1cmItPnBhY2tldCk7CisKKyAgICAgICAgbnVyYi51cmIudHlwZSA9IGF1 cmItPnVyYi50eXBlOworICAgICAgICBudXJiLnVyYi5zdGF0dXMgPSBhdXJiLT51cmIuc3RhdHVz OworICAgICAgICBudXJiLnVyYi5sZW5ndGggPSBhdXJiLT51cmIuYWN0dWFsX2xlbmd0aDsKKwor ICAgICAgICByZXQgPSBzZW5kKHMtPnNvY2ssICZudXJiLCBzaXplb2YobnVyYiksIDApOworICAg ICAgICBpZiAocmV0ID4gMCkgeworICAgICAgICAgICAgcmV0ID0gc2VuZChzLT5zb2NrLCBhdXJi LT51cmIuYnVmZmVyLCBhdXJiLT51cmIuYnVmZmVyX2xlbmd0aCwgMCk7CisgICAgICAgIH0KKwor ICAgICAgICBxZW11X2ZyZWUoYXVyYi0+dXJiLmJ1ZmZlcik7CisgICAgICAgIGFzeW5jX2ZyZWUo YXVyYik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhc3luY19jYW5jZWwoVVNCUGFja2V0ICp1 bnVzZWQsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBBc3luY1VSQiAqYXVyYiA9IG9wYXF1ZTsKKyAg ICBVU0JEZXZpY2VYICpzID0gYXVyYi0+ZGV2OworCisgICAgZHByaW50ZigiaHVzYjogYXN5bmMg Y2FuY2VsLiBhdXJiICVwXG4iLCBhdXJiKTsKKworICAgIC8qIE1hcmsgaXQgYXMgZGVhZCAoc2Vl IGFzeW5jX2NvbXBsZXRlIGFib3ZlKSAqLworICAgIGF1cmItPnBhY2tldCA9IE5VTEw7CisKKyAg ICBpbnQgciA9IGlvY3RsKHMtPmZkLCBVU0JERVZGU19ESVNDQVJEVVJCLCBhdXJiKTsKKyAgICBp ZiAociA8IDApIHsKKyAgICAgICAgZHByaW50ZigiaHVzYjogYXN5bmMuIGRpc2NhcmQgdXJiIGZh aWxlZCBlcnJubyAlZFxuIiwgZXJybm8pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdXNiX2hv c3RfaGFuZGxlX2Rlc3Ryb3koVVNCRGV2aWNlWCAqcykKK3sKKyAgICBzLT5jbG9zaW5nID0gMTsK KworICAgIGhvc3RkZXZfdW5saW5rKHMpOworCisgICAgYXN5bmNfY29tcGxldGUocyk7CisKKyAg ICBpZiAocy0+ZmQgPj0gMCkKKyAgICAgICAgY2xvc2Uocy0+ZmQpOworCisgICAgcWVtdV9mcmVl KHMpOworfQorCitzdGF0aWMgaW50IGN0cmxfZXJyb3Iodm9pZCkKK3sKKyAgICBpZiAoZXJybm8g PT0gRVRJTUVET1VUKQorICAgICAgICByZXR1cm4gVVNCX1JFVF9OQUs7CisgICAgZWxzZSAKKyAg ICAgICAgcmV0dXJuIFVTQl9SRVRfU1RBTEw7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2hvc3Rfc2V0 X2NvbmZpZyhVU0JEZXZpY2VYICpzLCBpbnQgY29uZmlnKQoreworICAgIGludCByZXQgPSBpb2N0 bChzLT5mZCwgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiwgJmNvbmZpZyk7CisKKyAgICBkcHJp bnRmKCJodXNiOiBjdHJsIHNldCBjb25maWcgJWQgcmV0ICVkIGVycm5vICVkXG4iLCBjb25maWcs IHJldCwgZXJybm8pOworCisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiBjdHJsX2Vy cm9yKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfaG9zdF9zZXRfaW50 ZXJmYWNlKFVTQkRldmljZVggKnMsIGludCBpZmFjZSwgaW50IGFsdCkKK3sKKyAgICBzdHJ1Y3Qg dXNiZGV2ZnNfc2V0aW50ZXJmYWNlIHNpOworICAgIGludCByZXQ7CisKKyAgICBzaS5pbnRlcmZh Y2UgID0gaWZhY2U7CisgICAgc2kuYWx0c2V0dGluZyA9IGFsdDsKKyAgICByZXQgPSBpb2N0bChz LT5mZCwgVVNCREVWRlNfU0VUSU5URVJGQUNFLCAmc2kpOworCisgICAgZHByaW50ZigiaHVzYjog Y3RybCBzZXQgaWZhY2UgJWQgYWx0c2V0ICVkIHJldCAlZCBlcnJubyAlZFxuIiwgCisgICAgICAg IGlmYWNlLCBhbHQsIHJldCwgZXJybm8pOworCisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJl dHVybiBjdHJsX2Vycm9yKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFVTQkRldmlj ZVggKnVzYmRfaG9zdF9kZXZpY2Vfb3Blbl9hZGRyKGludCBidXNfbnVtLCBpbnQgYWRkciwgY29u c3QgY2hhciAqcHJvZF9uYW1lKQoreworICAgIFVTQkRldmljZVggKmRldiA9IE5VTEw7CisgICAg aW50IGZkID0gLTEsIHNvY2sgPSAtMTsKKyAgICB1bnNpZ25lZCBsb25nIG9wdCA9IDE7CisgICAg Y2hhciBidWZbMTAyNF07CisKKyAgICBkZXYgPSBxZW11X21hbGxvY3ooc2l6ZW9mKFVTQkRldmlj ZVgpKTsKKyAgICBpZiAoIWRldikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZGV2LT5idXNf bnVtID0gYnVzX251bTsKKyAgICBkZXYtPmFkZHIgPSBhZGRyOworCisgICAgcHJpbnRmKCJodXNi OiBvcGVuIGRldmljZSAlZC4lZFxuIiwgYnVzX251bSwgYWRkcik7CisKKyAgICBzbnByaW50Zihi dWYsIHNpemVvZihidWYpLCBVU0JERVZGU19QQVRIICIvJTAzZC8lMDNkIiwKKyAgICAgICAgYnVz X251bSwgYWRkcik7CisgICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSIHwgT19OT05CTE9DSyk7Cisg ICAgaWYgKGZkIDwgMCkgeworICAgICAgICBwZXJyb3IoYnVmKTsKKyAgICAgICAgZ290byBmYWls OworICAgIH0KKworICAgIHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOwor ICAgIGlmIChzb2NrIDwgMCkgeworICAgICAgICBwZXJyb3IoInNvY2tldCIpOworICAgICAgICBn b3RvIGZhaWw7CisgICAgfQorCisgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQ X05PREVMQVksIChjb25zdCBjaGFyKikmb3B0LCBzaXplb2Yob3B0KSk7CisKKyAgICAvKiByZWFk IHRoZSBkZXZpY2UgZGVzY3JpcHRpb24gKi8KKyAgICBkZXYtPmRlc2NyX2xlbiA9IHJlYWQoZmQs IGRldi0+ZGVzY3IsIHNpemVvZihkZXYtPmRlc2NyKSk7CisgICAgaWYgKGRldi0+ZGVzY3JfbGVu IDw9IDApIHsKKyAgICAgICAgcGVycm9yKCJodXNiOiByZWFkaW5nIGRldmljZSBkYXRhIGZhaWxl ZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICB7Cisg ICAgICAgIGludCB4OworICAgICAgICBwcmludGYoIj09PSBiZWdpbiBkdW1waW5nIGRldmljZSBk ZXNjcmlwdG9yIGRhdGEgPT09XG4iKTsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRldi0+ZGVz Y3JfbGVuOyB4KyspCisgICAgICAgICAgICBwcmludGYoIiUwMnggIiwgZGV2LT5kZXNjclt4XSk7 CisgICAgICAgIHByaW50ZigiXG49PT0gZW5kIGR1bXBpbmcgZGV2aWNlIGRlc2NyaXB0b3IgZGF0 YSA9PT1cbiIpOworICAgIH0KKyNlbmRpZgorCisgICAgZGV2LT5mZCA9IGZkOworICAgIGRldi0+ c29jayA9IHNvY2s7CisgICAgZGV2LT50YWlsX3B0ciA9IGRldi0+YnVmZmVyOworCisgICAgaWYg KCFwcm9kX25hbWUgfHwgcHJvZF9uYW1lWzBdID09ICdcMCcpCisgICAgICAgIHNucHJpbnRmKGRl di0+ZGV2bmFtZSwgc2l6ZW9mKGRldi0+ZGV2bmFtZSksICJob3N0OiVkLiVkIiwgYnVzX251bSwg YWRkcik7CisgICAgZWxzZQorICAgICAgICBwc3RyY3B5KGRldi0+ZGV2bmFtZSwgc2l6ZW9mKGRl di0+ZGV2bmFtZSksIHByb2RfbmFtZSk7CisKKyAgICBob3N0ZGV2X2xpbmsoZGV2KTsKKworICAg IHJldHVybiBkZXY7CisKK2ZhaWw6CisgICAgaWYgKGRldikgeworICAgICAgICBxZW11X2ZyZWUo ZGV2KTsKKyAgICB9CisgICAgY2xvc2UoZmQpOworICAgIGNsb3NlKHNvY2spOworICAgIHJldHVy biBOVUxMOworfQorCitVU0JEZXZpY2VYICp1c2JkX2hvc3RfZGV2aWNlX29wZW4oY29uc3QgY2hh ciAqZGV2bmFtZSkKK3sKKyAgICBpbnQgYnVzX251bSwgYWRkcjsKKyAgICBjaGFyIHByb2R1Y3Rf bmFtZVtQUk9EVUNUX05BTUVfU1pdOworCisgICAgaWYgKHVzYl9ob3N0X2ZpbmRfZGV2aWNlKCZi dXNfbnVtLCAmYWRkciwgcHJvZHVjdF9uYW1lLCBzaXplb2YocHJvZHVjdF9uYW1lKSwKKyAgICAg ICAgZGV2bmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChob3N0ZGV2 X2ZpbmQoYnVzX251bSwgYWRkcikpIHsKKyAgICAgICAgcHJpbnRmKCJodXNiOiBob3N0IHVzYiBk ZXZpY2UgJWQuJWQgaXMgYWxyZWFkeSBvcGVuXG4iLCBidXNfbnVtLCBhZGRyKTsKKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHVzYmRfaG9zdF9kZXZpY2Vfb3Blbl9h ZGRyKGJ1c19udW0sIGFkZHIsIHByb2R1Y3RfbmFtZSk7Cit9CisKK2ludCB1c2JkX2hvc3RfZGV2 aWNlX2Nsb3NlKGNvbnN0IGNoYXIgKmRldm5hbWUpCit7CisgICAgY2hhciBwcm9kdWN0X25hbWVb UFJPRFVDVF9OQU1FX1NaXTsKKyAgICBpbnQgYnVzX251bSwgYWRkcjsKKyAgICBVU0JEZXZpY2VY ICpzOworCisgICAgaWYgKHVzYl9ob3N0X2ZpbmRfZGV2aWNlKCZidXNfbnVtLCAmYWRkciwgcHJv ZHVjdF9uYW1lLCBzaXplb2YocHJvZHVjdF9uYW1lKSwKKyAgICAgICAgZGV2bmFtZSkgPCAwKQor ICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzID0gaG9zdGRldl9maW5kKGJ1c19udW0sIGFkZHIp OworICAgIGlmIChzKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAt MTsKK30KKworc3RhdGljIGludCBnZXRfdGFnX3ZhbHVlKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAq dGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0b3BjaGFycykKK3sK KyAgICBjb25zdCBjaGFyICpwOworICAgIGNoYXIgKnE7CisgICAgcCA9IHN0cnN0cihzdHIsIHRh Zyk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcCArPSBzdHJsZW4odGFn KTsKKyAgICB3aGlsZSAoaXNzcGFjZSgqcCkpCisgICAgICAgIHArKzsKKyAgICBxID0gYnVmOwor ICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICFzdHJjaHIoc3RvcGNoYXJzLCAqcCkpIHsKKyAgICAg ICAgaWYgKChxIC0gYnVmKSA8IChidWZfc2l6ZSAtIDEpKQorICAgICAgICAgICAgKnErKyA9ICpw OworICAgICAgICBwKys7CisgICAgfQorICAgICpxID0gJ1wwJzsKKyAgICByZXR1cm4gcSAtIGJ1 ZjsKK30KKworc3RhdGljIGludCB1c2JfaG9zdF9zY2FuKHZvaWQgKm9wYXF1ZSwgVVNCU2NhbkZ1 bmMgKmZ1bmMpCit7CisgICAgRklMRSAqZjsKKyAgICBjaGFyIGxpbmVbMTAyNF07CisgICAgY2hh ciBidWZbMTAyNF07CisgICAgaW50IGJ1c19udW0sIGFkZHIsIHNwZWVkLCBkZXZpY2VfY291bnQs IGNsYXNzX2lkLCBwcm9kdWN0X2lkLCB2ZW5kb3JfaWQ7CisgICAgaW50IHJldDsKKyAgICBjaGFy IHByb2R1Y3RfbmFtZVs1MTJdOworCisgICAgZiA9IGZvcGVuKFVTQkRFVkZTX1BBVEggIi9kZXZp Y2VzIiwgInIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgcHJpbnRmKCJodXNiOiBjb3VsZCBu b3Qgb3BlbiAlc1xuIiwgVVNCREVWRlNfUEFUSCAiL2RldmljZXMiKTsKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQorICAgIGRldmljZV9jb3VudCA9IDA7CisgICAgYnVzX251bSA9IGFkZHIgPSBz cGVlZCA9IGNsYXNzX2lkID0gcHJvZHVjdF9pZCA9IHZlbmRvcl9pZCA9IDA7CisgICAgcmV0ID0g MDsKKyAgICBmb3IoOzspIHsKKyAgICAgICAgaWYgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwg ZikgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoc3RybGVuKGxpbmUp ID4gMCkKKyAgICAgICAgICAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPSAnXDAnOworICAgICAg ICBpZiAobGluZVswXSA9PSAnVCcgJiYgbGluZVsxXSA9PSAnOicpIHsKKyAgICAgICAgICAgIGlm IChkZXZpY2VfY291bnQgJiYgKHZlbmRvcl9pZCB8fCBwcm9kdWN0X2lkKSkgeworICAgICAgICAg ICAgICAgIC8qIE5ldyBkZXZpY2UuICBBZGQgdGhlIHByZXZpb3VzbHkgZGlzY292ZXJlZCBkZXZp Y2UuICAqLworICAgICAgICAgICAgICAgIHJldCA9IGZ1bmMob3BhcXVlLCBidXNfbnVtLCBhZGRy LCBjbGFzc19pZCwgdmVuZG9yX2lkLAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2lkLCBw cm9kdWN0X25hbWUsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KQorICAgICAgICAg ICAgICAgICAgICBnb3RvIHRoZV9lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo Z2V0X3RhZ192YWx1ZShidWYsIHNpemVvZihidWYpLCBsaW5lLCAiQnVzPSIsICIgIikgPCAwKQor ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGJ1c19udW0gPSBhdG9pKGJ1 Zik7CisgICAgICAgICAgICBpZiAoZ2V0X3RhZ192YWx1ZShidWYsIHNpemVvZihidWYpLCBsaW5l LCAiRGV2Iz0iLCAiICIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAg ICAgICBhZGRyID0gYXRvaShidWYpOworICAgICAgICAgICAgaWYgKGdldF90YWdfdmFsdWUoYnVm LCBzaXplb2YoYnVmKSwgbGluZSwgIlNwZD0iLCAiICIpIDwgMCkKKyAgICAgICAgICAgICAgICBn b3RvIGZhaWw7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChidWYsICI0ODAiKSkKKyAgICAgICAg ICAgICAgICBzcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworICAgICAgICAgICAgZWxzZSBpZiAoIXN0 cmNtcChidWYsICIxLjUiKSkKKyAgICAgICAgICAgICAgICBzcGVlZCA9IFVTQl9TUEVFRF9MT1c7 CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3BlZWQgPSBVU0JfU1BFRURfRlVM TDsKKyAgICAgICAgICAgIHByb2R1Y3RfbmFtZVswXSA9ICdcMCc7CisgICAgICAgICAgICBjbGFz c19pZCA9IDB4ZmY7CisgICAgICAgICAgICBkZXZpY2VfY291bnQrKzsKKyAgICAgICAgICAgIHBy b2R1Y3RfaWQgPSAwOworICAgICAgICAgICAgdmVuZG9yX2lkID0gMDsKKyAgICAgICAgfSBlbHNl IGlmIChsaW5lWzBdID09ICdQJyAmJiBsaW5lWzFdID09ICc6JykgeworICAgICAgICAgICAgaWYg KGdldF90YWdfdmFsdWUoYnVmLCBzaXplb2YoYnVmKSwgbGluZSwgIlZlbmRvcj0iLCAiICIpIDwg MCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB2ZW5kb3JfaWQgPSBz dHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpOworICAgICAgICAgICAgaWYgKGdldF90YWdfdmFsdWUoYnVm LCBzaXplb2YoYnVmKSwgbGluZSwgIlByb2RJRD0iLCAiICIpIDwgMCkKKyAgICAgICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgICAgICBwcm9kdWN0X2lkID0gc3RydG91bChidWYsIE5VTEws IDE2KTsKKyAgICAgICAgfSBlbHNlIGlmIChsaW5lWzBdID09ICdTJyAmJiBsaW5lWzFdID09ICc6 JykgeworICAgICAgICAgICAgaWYgKGdldF90YWdfdmFsdWUoYnVmLCBzaXplb2YoYnVmKSwgbGlu ZSwgIlByb2R1Y3Q9IiwgIiIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgICAgICBwc3RyY3B5KHByb2R1Y3RfbmFtZSwgc2l6ZW9mKHByb2R1Y3RfbmFtZSksIGJ1Zik7 CisgICAgICAgIH0gZWxzZSBpZiAobGluZVswXSA9PSAnRCcgJiYgbGluZVsxXSA9PSAnOicpIHsK KyAgICAgICAgICAgIGlmIChnZXRfdGFnX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGxpbmUsICJD bHM9IiwgIiAoIikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAg IGNsYXNzX2lkID0gc3RydG91bChidWYsIE5VTEwsIDE2KTsKKyAgICAgICAgfQorZmFpbDogOwor ICAgIH0KKyAgICBpZiAoZGV2aWNlX2NvdW50ICYmICh2ZW5kb3JfaWQgfHwgcHJvZHVjdF9pZCkp IHsKKyAgICAgICAgLyogQWRkIHRoZSBsYXN0IGRldmljZS4gICovCisgICAgICAgIHJldCA9IGZ1 bmMob3BhcXVlLCBidXNfbnVtLCBhZGRyLCBjbGFzc19pZCwgdmVuZG9yX2lkLAorICAgICAgICAg ICAgcHJvZHVjdF9pZCwgcHJvZHVjdF9uYW1lLCBzcGVlZCk7CisgICAgfQordGhlX2VuZDoKKyAg ICBmY2xvc2UoZik7CisgICAgcmV0dXJuIHJldDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgRmluZERl dmljZVN0YXRlIHsKKyAgICBpbnQgdmVuZG9yX2lkOworICAgIGludCBwcm9kdWN0X2lkOworICAg IGludCBidXNfbnVtOworICAgIGludCBhZGRyOworICAgIGNoYXIgcHJvZHVjdF9uYW1lW1BST0RV Q1RfTkFNRV9TWl07Cit9IEZpbmREZXZpY2VTdGF0ZTsKKworc3RhdGljIGludCB1c2JfaG9zdF9m aW5kX2RldmljZV9zY2FuKHZvaWQgKm9wYXF1ZSwgaW50IGJ1c19udW0sIGludCBhZGRyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGFzc19pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVuZG9yX2lkLCBpbnQgcHJvZHVjdF9p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9k dWN0X25hbWUsIGludCBzcGVlZCkKK3sKKyAgICBGaW5kRGV2aWNlU3RhdGUgKnMgPSBvcGFxdWU7 CisgICAgaWYgKCh2ZW5kb3JfaWQgPT0gcy0+dmVuZG9yX2lkICYmCisgICAgICAgIHByb2R1Y3Rf aWQgPT0gcy0+cHJvZHVjdF9pZCkgfHwKKyAgICAgICAgKGJ1c19udW0gPT0gcy0+YnVzX251bSAm JgorICAgICAgICBhZGRyID09IHMtPmFkZHIpKSB7CisgICAgICAgICAgICBwc3RyY3B5KHMtPnBy b2R1Y3RfbmFtZSwgUFJPRFVDVF9OQU1FX1NaLCBwcm9kdWN0X25hbWUpOworICAgICAgICAgICAg cy0+YnVzX251bSA9IGJ1c19udW07CisgICAgICAgICAgICBzLT5hZGRyID0gYWRkcjsKKyAgICAg ICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0K K30KKworLyogdGhlIHN5bnRheCBpcyA6CisnYnVzLmFkZHInIChkZWNpbWFsIG51bWJlcnMpIG9y CisndmVuZG9yX2lkOnByb2R1Y3RfaWQnIChoZXhhIG51bWJlcnMpICovCitzdGF0aWMgaW50IHVz Yl9ob3N0X2ZpbmRfZGV2aWNlKGludCAqcGJ1c19udW0sIGludCAqcGFkZHIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByb2R1Y3RfbmFtZSwgaW50IHByb2R1Y3RfbmFt ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXZu YW1lKQoreworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgaW50IHJldDsKKyAgICBGaW5kRGV2aWNl U3RhdGUgZnM7CisKKyAgICBwID0gc3RyY2hyKGRldm5hbWUsICcuJyk7CisgICAgaWYgKHApIHsK KyAgICAgICAgKnBidXNfbnVtID0gc3RydG91bChkZXZuYW1lLCBOVUxMLCAwKTsKKyAgICAgICAg KnBhZGRyID0gc3RydG91bChwICsgMSwgTlVMTCwgMCk7CisgICAgICAgIGZzLmJ1c19udW0gPSAq cGJ1c19udW07CisgICAgICAgIGZzLmFkZHIgPSAqcGFkZHI7CisgICAgICAgIHJldCA9IHVzYl9o b3N0X3NjYW4oJmZzLCB1c2JfaG9zdF9maW5kX2RldmljZV9zY2FuKTsKKyAgICAgICAgaWYgKHJl dCkKKyAgICAgICAgICAgIHBzdHJjcHkocHJvZHVjdF9uYW1lLCBwcm9kdWN0X25hbWVfc2l6ZSwg ZnMucHJvZHVjdF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcCA9IHN0 cmNocihkZXZuYW1lLCAnOicpOworICAgIGlmIChwKSB7CisgICAgICAgIGZzLnZlbmRvcl9pZCA9 IHN0cnRvdWwoZGV2bmFtZSwgTlVMTCwgMTYpOworICAgICAgICBmcy5wcm9kdWN0X2lkID0gc3Ry dG91bChwICsgMSwgTlVMTCwgMTYpOworICAgICAgICByZXQgPSB1c2JfaG9zdF9zY2FuKCZmcywg dXNiX2hvc3RfZmluZF9kZXZpY2Vfc2Nhbik7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAg ICAgICpwYnVzX251bSA9IGZzLmJ1c19udW07CisgICAgICAgICAgICAqcGFkZHIgPSBmcy5hZGRy OworICAgICAgICAgICAgcHN0cmNweShwcm9kdWN0X25hbWUsIHByb2R1Y3RfbmFtZV9zaXplLCBm cy5wcm9kdWN0X25hbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuIC0xOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFVTQiBo b3N0IGRldmljZSBpbmZvICovCisKK3N0cnVjdCB1c2JfY2xhc3NfaW5mbyB7CisgICAgaW50IGNs YXNzOworICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHVzYl9jbGFzc19pbmZvIHVzYl9jbGFzc19pbmZvW10gPSB7CisgICAgeyBVU0JfQ0xBU1Nf QVVESU8sICJBdWRpbyJ9LAorICAgIHsgVVNCX0NMQVNTX0NPTU0sICJDb21tdW5pY2F0aW9uIn0s CisgICAgeyBVU0JfQ0xBU1NfSElELCAiSElEIn0sCisgICAgeyBVU0JfQ0xBU1NfSFVCLCAiSHVi IiB9LAorICAgIHsgVVNCX0NMQVNTX1BIWVNJQ0FMLCAiUGh5c2ljYWwiIH0sCisgICAgeyBVU0Jf Q0xBU1NfUFJJTlRFUiwgIlByaW50ZXIiIH0sCisgICAgeyBVU0JfQ0xBU1NfTUFTU19TVE9SQUdF LCAiU3RvcmFnZSIgfSwKKyAgICB7IFVTQl9DTEFTU19DRENfREFUQSwgIkRhdGEiIH0sCisgICAg eyBVU0JfQ0xBU1NfQVBQX1NQRUMsICJBcHBsaWNhdGlvbiBTcGVjaWZpYyIgfSwKKyAgICB7IFVT Ql9DTEFTU19WRU5ET1JfU1BFQywgIlZlbmRvciBTcGVjaWZpYyIgfSwKKyAgICB7IFVTQl9DTEFT U19TVElMTF9JTUFHRSwgIlN0aWxsIEltYWdlIiB9LAorICAgIHsgVVNCX0NMQVNTX0NTQ0lELCAi U21hcnQgQ2FyZCIgfSwKKyAgICB7IFVTQl9DTEFTU19DT05URU5UX1NFQywgIkNvbnRlbnQgU2Vj dXJpdHkiIH0sCisgICAgeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqdXNi X2NsYXNzX3N0cih1aW50OF90IGNsYXNzKQoreworICAgIGNvbnN0IHN0cnVjdCB1c2JfY2xhc3Nf aW5mbyAqcDsKKyAgICBmb3IocCA9IHVzYl9jbGFzc19pbmZvOyBwLT5jbGFzcyAhPSAtMTsgcCsr KSB7CisgICAgICAgIGlmIChwLT5jbGFzcyA9PSBjbGFzcykKKyAgICAgICAgICAgIGJyZWFrOwor ICAgIH0KKyAgICByZXR1cm4gcC0+Y2xhc3NfbmFtZTsKK30KKworc3RhdGljIHZvaWQgdXNiX2lu Zm9fZGV2aWNlKGludCBidXNfbnVtLCBpbnQgYWRkciwgaW50IGNsYXNzX2lkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCB2ZW5kb3JfaWQsIGludCBwcm9kdWN0X2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2R1Y3RfbmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc3BlZWQpCit7CisgICAgY29uc3QgY2hhciAqY2xhc3Nf c3RyLCAqc3BlZWRfc3RyOworCisgICAgc3dpdGNoKHNwZWVkKSB7CitjYXNlIFVTQl9TUEVFRF9M T1c6CisgICAgc3BlZWRfc3RyID0gIjEuNSI7CisgICAgYnJlYWs7CitjYXNlIFVTQl9TUEVFRF9G VUxMOgorICAgIHNwZWVkX3N0ciA9ICIxMiI7CisgICAgYnJlYWs7CitjYXNlIFVTQl9TUEVFRF9I SUdIOgorICAgIHNwZWVkX3N0ciA9ICI0ODAiOworICAgIGJyZWFrOworZGVmYXVsdDoKKyAgICBz cGVlZF9zdHIgPSAiPyI7CisgICAgYnJlYWs7CisgICAgfQorCisgICAgcHJpbnRmKCIgIERldmlj ZSAlZC4lZCwgc3BlZWQgJXMgTWIvc1xuIiwKKyAgICAgICAgYnVzX251bSwgYWRkciwgc3BlZWRf c3RyKTsKKyAgICBjbGFzc19zdHIgPSB1c2JfY2xhc3Nfc3RyKGNsYXNzX2lkKTsKKyAgICBpZiAo Y2xhc3Nfc3RyKQorICAgICAgICBwcmludGYoIiAgICAlczoiLCBjbGFzc19zdHIpOworICAgIGVs c2UKKyAgICAgICAgcHJpbnRmKCIgICAgQ2xhc3MgJTAyeDoiLCBjbGFzc19pZCk7CisgICAgcHJp bnRmKCIgVVNCIGRldmljZSAlMDR4OiUwNHgiLCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQpOworICAg IGlmIChwcm9kdWN0X25hbWVbMF0gIT0gJ1wwJykKKyAgICAgICAgcHJpbnRmKCIsICVzIiwgcHJv ZHVjdF9uYW1lKTsKKyAgICBwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2hvc3Rf aW5mb19kZXZpY2Uodm9pZCAqb3BhcXVlLCBpbnQgYnVzX251bSwgaW50IGFkZHIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGFzc19pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHZlbmRvcl9pZCwgaW50IHByb2R1Y3RfaWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb2R1Y3RfbmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWVkKQoreworICAgIHVzYl9pbmZvX2Rldmlj ZShidXNfbnVtLCBhZGRyLCBjbGFzc19pZCwgdmVuZG9yX2lkLCBwcm9kdWN0X2lkLAorICAgICAg ICBwcm9kdWN0X25hbWUsIHNwZWVkKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB1c2JfaG9z dF9pbmZvKHZvaWQpCit7CisgICAgdXNiX2hvc3Rfc2NhbihOVUxMLCB1c2JfaG9zdF9pbmZvX2Rl dmljZSk7Cit9CisKK2ludCBoYW5kbGVfc3VibWl0X3VyYihVU0JEZXZpY2VYICpzLCBVTlJCX0hF QURFUiAqaGRyKQoreworICAgIFVOUkJfU1VCTUlUX1VSQiAqbnVyYiA9IChVTlJCX1NVQk1JVF9V UkIgKiloZHI7CisgICAgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiOworICAgIEFzeW5jVVJCICph dXJiOworICAgIGludCByZXQ7CisKKyAgICBhdXJiID0gYXN5bmNfYWxsb2MoKTsKKyAgICBpZiAo IWF1cmIpIHsKKyAgICAgICAgZHByaW50ZigiaHVzYjogYXN5bmMgbWFsbG9jIGZhaWxlZFxuIik7 CisgICAgICAgIHJldHVybiBVU0JfUkVUX05BSzsKKyAgICB9CisKKyAgICBhdXJiLT5wYWNrZXQg PSAoVVNCUGFja2V0KikobnVyYi0+dXJiLm9wYXF1ZSk7CisKKyAgICB1cmIgPSAmYXVyYi0+dXJi OworCisgICAgdXJiLT50eXBlID0gbnVyYi0+dXJiLnR5cGU7CisgICAgdXJiLT5lbmRwb2ludCA9 IG51cmItPnVyYi5lbmRwb2ludDsKKyAgICB1cmItPnN0YXR1cyA9IG51cmItPnVyYi5zdGF0dXM7 CisgICAgdXJiLT5mbGFncyA9IG51cmItPnVyYi5mbGFnczsKKyAgICB1cmItPm51bWJlcl9vZl9w YWNrZXRzID0gbnVyYi0+dXJiLm51bWJlcl9vZl9wYWNrZXRzOworCisgICAgaWYgKHVyYi0+bnVt YmVyX29mX3BhY2tldHMpIHsKKyAgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGgg PSBudXJiLT51cmIubGVuZ3RoOworICAgIH0KKworICAgIHVyYi0+YnVmZmVyX2xlbmd0aCA9IG51 cmItPnVyYi5sZW5ndGg7CisgICAgdXJiLT5idWZmZXIgPSBxZW11X21hbGxvY3oodXJiLT5idWZm ZXJfbGVuZ3RoKTsKKworICAgIG1lbWNweSh1cmItPmJ1ZmZlciwgbnVyYi0+dXJiLmJ1ZmZlciwg bnVyYi0+dXJiLmxlbmd0aCk7CisKKyNpZmRlZiBERUJVRworICAgIHsKKyAgICAgICAgaW50IHg7 CisgICAgICAgIHByaW50ZigiPT09IGJlZ2luIGR1bXBpbmcgdXJiIGJ1ZmZlciBkYXRhID09PVxu Iik7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCB1cmItPmJ1ZmZlcl9sZW5ndGg7ICsreCkKKyAg ICAgICAgICAgIHByaW50ZigiJTAyeCAiLCAoKHVuc2lnbmVkIGNoYXIqKXVyYi0+YnVmZmVyKVt4 XSk7CisgICAgICAgIHByaW50ZigiXG49PT0gZW5kIGR1bXBpbmcgdXJiIGJ1ZmZlciBkYXRhID09 PVxuIik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNf U1VCTUlUVVJCLCB1cmIpOworCisgICAgZHByaW50ZigiaHVzYjogZGF0YSBzdWJtaXQuIGVwIDB4 JXggbGVuICV1IGF1cmIgJXBcbiIsIHVyYi0+ZW5kcG9pbnQsIG51cmItPnVyYi5sZW5ndGgsIGF1 cmIpOworCisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgZHByaW50ZigiaHVzYjogc3VibWl0 IGZhaWxlZC4gZXJybm8gJWRcbiIsIGVycm5vKTsKKyAgICAgICAgYXN5bmNfZnJlZShhdXJiKTsK KworICAgICAgICBzd2l0Y2goZXJybm8pIHsKKyAgICBjYXNlIEVUSU1FRE9VVDoKKyAgICAgICAg cmV0dXJuIFVTQl9SRVRfTkFLOworICAgIGNhc2UgRVBJUEU6CisgICAgZGVmYXVsdDoKKyAgICAg ICAgcmV0dXJuIFVTQl9SRVRfU1RBTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBoYW5k bGVfc2V0X2NvbmZpZyhVU0JEZXZpY2VYICpzLCBVTlJCX0hFQURFUiAqaGRyKQoreworICAgIFVO UkJfU0VUX0NPTkZJRyAqbnVyYiA9IChVTlJCX1NFVF9DT05GSUcgKiloZHI7CisKKyAgICB1c2Jf aG9zdF9zZXRfY29uZmlnKHMsIG51cmItPmNvbmZpZyk7Cit9CisKK2ludCBoYW5kbGVfc2V0X2lu dGVyZmFjZShVU0JEZXZpY2VYICpzLCBVTlJCX0hFQURFUiAqaGRyKQoreworICAgIFVOUkJfU0VU X0lOVEVSRkFDRSAqbnVyYiA9IChVTlJCX1NFVF9JTlRFUkZBQ0UgKiloZHI7CisKKyAgICB1c2Jf aG9zdF9zZXRfaW50ZXJmYWNlKHMsIG51cmItPmlmYWNlLCBudXJiLT5hbHRzZXR0aW5nKTsKK30K KworaW50IGhhbmRsZV9yZWxlYXNlX2ludGVyYWNlKFVTQkRldmljZVggKnMsIFVOUkJfSEVBREVS ICpoZHIpCit7CisgICAgVU5SQl9SRUxFQVNFX0lOVEVSRkFDRSAqbnVyYiA9IChVTlJCX1JFTEVB U0VfSU5URVJGQUNFICopaGRyOworICAgIGludCByZXQ7CisKKyAgICBkcHJpbnRmKCJodXNiOiBy ZWxlYXNpbmcgaW50ZXJmYWNlc1xuIik7CisKKyAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVW RlNfUkVMRUFTRUlOVEVSRkFDRSwgJm51cmItPmlmYWNlKTsKKyAgICBpZiAocmV0IDwgMCkgewor ICAgICAgICBwZXJyb3IoImh1c2I6IGZhaWxlZCB0byByZWxlYXNlIGludGVyZmFjZSIpOworICAg ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQg aGFuZGxlX2RldmljZV9yZXNldChVU0JEZXZpY2VYICpkZXYpCit7CisgICAgZHByaW50ZigiaHVz YjogcmVzZXQgZGV2aWNlICV1LiV1XG4iLCBkZXYtPmJ1c19udW0sIGRldi0+YWRkcik7CisKKyAg ICBpb2N0bChkZXYtPmZkLCBVU0JERVZGU19SRVNFVCk7Cit9CisKK2ludCBoYW5kbGVfY2xhaW1f aW50ZXJmYWNlKFVTQkRldmljZVggKnMsIFVOUkJfSEVBREVSICpoZHIpCit7CisgICAgVU5SQl9D TEFJTV9JTlRFUkZBQ0UgKm51cmIgPSAoVU5SQl9DTEFJTV9JTlRFUkZBQ0UgKiloZHI7CisgICAg aW50IHJldDsKKworICAgIGRwcmludGYoImh1c2I6IGNsYWltaW5nIGludGVyZmFjZS4gaW50ZXJh Y2UgJWRcbiIsIG51cmItPmlmYWNlKTsKKworICAgIHJldCA9IGlvY3RsKHMtPmZkLCBVU0JERVZG U19DTEFJTUlOVEVSRkFDRSwgJm51cmItPmlmYWNlKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICBpZiAoZXJybm8gPT0gRUJVU1kpIHsKKyAgICAgICAgICAgIHByaW50ZigiaHVzYjogdXBk YXRlIGlmYWNlLiBkZXZpY2UgYWxyZWFkeSBncmFiYmVkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIHBlcnJvcigiaHVzYjogZmFpbGVkIHRvIGNsYWltIGludGVyZmFjZSIpOwor ICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQor CitpbnQgaGFuZGxlX2Nvbm5lY3Rpb25faW5mbyhVU0JEZXZpY2VYICpzLCBVTlJCX0hFQURFUiAq aGRyKQoreworICAgIFVOUkJfQ09OTkVDVElPTl9JTkZPICpudXJiID0gKFVOUkJfQ09OTkVDVElP Tl9JTkZPICopaGRyOworCisgICAgc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvIGNpOworICAg IGludCByZXQ7CisKKyAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfQ09OTkVDVElORk8s ICZjaSk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgcGVycm9yKCJ1c2JfaG9zdF9kZXZp Y2Vfb3BlbjogVVNCREVWRlNfQ09OTkVDVElORk8iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgbnVyYi0+ZGV2bnVtID0gY2kuZGV2bnVtOworICAgIG51cmItPnNsb3cgPSBjaS5z bG93OworCisgICAgcHJpbnRmKCJodXNiOiBjb25uZWN0IGluZm8gZGV2bnVtPSVkIHNsb3c9JWRc biIsIGNpLmRldm51bSwgY2kuc2xvdyk7CisKKyAgICByZXQgPSBzZW5kKHMtPnNvY2ssIG51cmIs IHNpemVvZigqbnVyYiksIDApOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGhhbmRsZV9p b19jb250cm9sKFVTQkRldmljZVggKnMsIFVOUkJfSEVBREVSICpoZHIpCit7CisgICAgVU5SQl9J T19DVFJMICpudXJiID0gKFVOUkJfSU9fQ1RSTCAqKWhkcjsKKworICAgIHN0cnVjdCB1c2JkZXZm c19pb2N0bCBjdHJsOworICAgIGludCByZXQ7CisKKyAgICBjdHJsLmlvY3RsX2NvZGUgPSBudXJi LT5pb2N0bF9jb2RlOworICAgIGN0cmwuaWZubyA9IG51cmItPmlmbm87CisKKyAgICByZXQgPSBp b2N0bChzLT5mZCwgVVNCREVWRlNfSU9DVEwsICZjdHJsKTsKKyAgICBpZiAocmV0IDwgMCAmJiBl cnJubyAhPSBFTk9EQVRBKSB7CisgICAgICAgIHBlcnJvcigiVVNCREVWRlNfSU9DVEwiKTsKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBoYW5kbGVf dXNiX2NvbnRyb2woVVNCRGV2aWNlWCAqcywgVU5SQl9IRUFERVIgKmhkcikKK3sKKyAgICBVTlJC X1VTQl9DT05UUk9MICpudXJiID0gKFVOUkJfVVNCX0NPTlRST0wgKiloZHI7CisKKyAgICB1aW50 OF90IGNvbmZpZ3VyYXRpb247CisgICAgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlciBjdDsK KyAgICBpbnQgcmV0OworCisgICAgY3QuYlJlcXVlc3RUeXBlID0gbnVyYi0+dHlwZTsKKyAgICBj dC5iUmVxdWVzdCA9IG51cmItPnJlcXVlc3Q7CisgICAgY3Qud1ZhbHVlID0gbnVyYi0+dmFsdWU7 CisgICAgY3Qud0luZGV4ID0gbnVyYi0+aW5kZXg7CisgICAgY3Qud0xlbmd0aCA9IG51cmItPmxl bmd0aDsKKyAgICBjdC5kYXRhID0gJmNvbmZpZ3VyYXRpb247CisgICAgY3QudGltZW91dCA9IDUw OworCisgICAgcmV0ID0gaW9jdGwocy0+ZmQsIFVTQkRFVkZTX0NPTlRST0wsICZjdCk7CisgICAg aWYgKHJldCA8IDApIHsKKyAgICAgICAgcGVycm9yKCJ1c2JfbGludXhfdXBkYXRlX2VuZHBfdGFi bGUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZHByaW50ZigiVVNCREVWRlNf Q09OVFJPTDogY29uZmlndXJhdGlvbiA9ICVkXG4iLCBjb25maWd1cmF0aW9uKTsKKworICAgIHJl dCA9IHNlbmQocy0+c29jaywgJmNvbmZpZ3VyYXRpb24sIHNpemVvZihjb25maWd1cmF0aW9uKSwg MCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIGhhbmRsZV9udXJiKFVTQkRldmljZVgg KmRldiwgVU5SQl9IRUFERVIgKmhkcikKK3sKKyAgICBzd2l0Y2ggKGhkci0+b3Bjb2RlKQorICAg IHsKKyAgICBjYXNlIFVOUkJfT1BDT0RFX05FV19ERVZJQ0U6CisgICAgICAgIHByaW50ZigiVU5S Ql9PUENPREVfTkVXX0RFVklDRVxuIik7IGV4aXQoMSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgVU5SQl9PUENPREVfQ0xBSU1fSU5URVJGQUNFOgorICAgICAgICBoYW5kbGVfY2xhaW1faW50 ZXJmYWNlKGRldiwgaGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVTlJCX09QQ09ERV9D TEVBUl9IQUxUOgorICAgICAgICBwcmludGYoIlVOUkJfT1BDT0RFX0NMRUFSX0hBTFRcbiIpOyBl eGl0KDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVOUkJfT1BDT0RFX0NPTk5FQ1RJT05f SU5GTzoKKyAgICAgICAgaGFuZGxlX2Nvbm5lY3Rpb25faW5mbyhkZXYsIGhkcik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgVU5SQl9PUENPREVfRElTQ0FSRF9VUkI6CisgICAgICAgIHByaW50 ZigiVU5SQl9PUENPREVfRElTQ0FSRF9VUkJcbiIpOyBleGl0KDEpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFVOUkJfT1BDT0RFX0lPX0NUUkw6CisgICAgICAgIGhhbmRsZV9pb19jb250cm9s KGRldiwgaGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVTlJCX09QQ09ERV9HRVRfSU5U RVJGQUNFOgorICAgICAgICBwcmludGYoIlVOUkJfT1BDT0RFX0dFVF9JTlRFUkZBQ0VcbiIpOyBl eGl0KDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVOUkJfT1BDT0RFX1VTQl9DT05UUk9M OgorICAgICAgICBoYW5kbGVfdXNiX2NvbnRyb2woZGV2LCBoZHIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFVOUkJfT1BDT0RFX1JFTEVBU0VfSU5URVJGQUNFOgorICAgICAgICBoYW5kbGVf cmVsZWFzZV9pbnRlcmFjZShkZXYsIGhkcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVU5S Ql9PUENPREVfUkVTRVRfREVWSUNFOgorICAgICAgICBoYW5kbGVfZGV2aWNlX3Jlc2V0KGRldik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVU5SQl9PUENPREVfU1VCTUlUX1VSQjoKKyAgICAg ICAgaGFuZGxlX3N1Ym1pdF91cmIoZGV2LCBoZHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IFVOUkJfT1BDT0RFX1NFVF9DT05GSUc6CisgICAgICAgIGhhbmRsZV9zZXRfY29uZmlnKGRldiwg aGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVTlJCX09QQ09ERV9TRVRfSU5URVJGQUNF OgorICAgICAgICBoYW5kbGVfc2V0X2ludGVyZmFjZShkZXYsIGhkcik7CisgICAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigidW5rbm93biBvcGNvZGUgJWQhXG4iLCBo ZHItPm9wY29kZSk7IGV4aXQoMSk7CisgICAgfQorfQorCit2b2lkIHJlYWRfZnJvbV9uZXR3b3Jr KFVTQkRldmljZVggKnMpCit7CisgICAgVU5SQl9IRUFERVIgKmhkcjsKKyAgICBjaGFyICpoZWFk X3B0ciA9IHMtPmJ1ZmZlcjsKKyAgICBpbnQgbnJlYWQgPSBzLT50YWlsX3B0ciAtIHMtPmJ1ZmZl cjsKKyAgICBpbnQgc2l6ZTsKKworICAgIHNpemUgPSByZWN2KHMtPnNvY2ssIHMtPnRhaWxfcHRy LCBzaXplb2Yocy0+YnVmZmVyKSAtIG5yZWFkLCAwKTsKKyAgICBpZiAoKHNpemUgPT0gMCkgfHwg KChzaXplIDwgMCkgJiYgKHNvY2tldF9lcnJvcigpICE9IEVXT1VMREJMT0NLKSkpIHsKKyAgICAg ICAgZHByaW50ZigiaG9zdCBkaXNjb25uZWN0ICVkXG4iLCBzb2NrZXRfZXJyb3IoKSk7CisgICAg ICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgbnJlYWQgKz0gc2l6ZTsKKworICAgIHdoaWxlIChu cmVhZCA+IDApIHsKKworICAgICAgICBpZiAobnJlYWQgPCBzaXplb2YoVU5SQl9IRUFERVIpKSB7 CisgICAgICAgICAgICBzLT50YWlsX3B0ciArPSBzaXplOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBoZHIgPSAoVU5SQl9IRUFERVIgKikoaGVhZF9wdHIpOworCisg ICAgICAgIGlmICgoaGRyLT5tYWdpYyAhPSBVU0JfUkVNT1RFX01BR0lDKSB8fCAoaGRyLT5zaXpl ID09IDApKSB7CisgICAgICAgICAgICBwcmludGYoImJhZCBudXJiIGhlYWRlclxuIik7CisgICAg ICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5yZWFkIDwgaGRyLT5z aXplKSB7CisgICAgICAgICAgICBzLT50YWlsX3B0ciArPSBzaXplOworICAgICAgICAgICAgLyog bmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGEgZnJvbSBuZXR3b3JrLiAqLworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVfbnVyYihzLCBoZHIpOworCisgICAg ICAgIG5yZWFkIC09IGhkci0+c2l6ZTsKKyAgICAgICAgaGVhZF9wdHIgKz0gaGRyLT5zaXplOwor ICAgIH0KKworICAgIGlmICgobnJlYWQgPiAwKSAmJiAoaGVhZF9wdHIgIT0gcy0+YnVmZmVyKSkg eworICAgICAgICBtZW1jcHkocy0+YnVmZmVyLCBoZWFkX3B0ciwgbnJlYWQpOworICAgIH0KKwor ICAgIHMtPnRhaWxfcHRyID0gcy0+YnVmZmVyICsgbnJlYWQ7Cit9CisKK3N0YXRpYyBpbnQgY29u bmVjdF90b19ob3N0KGludCBzb2NrLCBjb25zdCBjaGFyICpob3N0LCB1aW50MTZfdCBwb3J0KQor eworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisgICAgaW50IHJldDsKKworICAgIGlmICgh aW5ldF9hdG9uKGhvc3QsICZzaW4uc2luX2FkZHIpKSB7CisgICAgICAgIHByaW50ZigiZXJyb3Ig JXMhXG4iLCBob3N0KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHNpbi5zaW5f cG9ydCA9IGh0b25zKHBvcnQpOworICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAg IHJldCA9IGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4p KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgeworICAgICAgICBwcmludGYoImZhaWxlZCB0byBj b25uZWN0ICVkXG4iLCBzb2NrZXRfZXJyb3IoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCByZWdpc3Rlcl9uZXdfZGV2aWNlKFVTQkRldmljZVggKnMpCit7Cisg ICAgVU5SQl9ORVdfREVWSUNFIG51cmI7CisgICAgaW50IHJldDsKKworICAgIG51cmIuaGVhZGVy Lm1hZ2ljID0gVVNCX1JFTU9URV9NQUdJQzsKKyAgICBudXJiLmhlYWRlci5vcGNvZGUgPSBVTlJC X09QQ09ERV9ORVdfREVWSUNFOworICAgIG51cmIuaGVhZGVyLnNpemUgPSBzaXplb2YobnVyYikg KyBzLT5kZXNjcl9sZW47CisKKyAgICBudXJiLmJ1c19udW0gPSBzLT5idXNfbnVtOworICAgIG51 cmIuYWRkciA9IHMtPmFkZHI7CisgICAgcHN0cmNweShudXJiLmRldl9uYW1lLCBzaXplb2YobnVy Yi5kZXZfbmFtZSksIHMtPmRldm5hbWUpOworICAgIG51cmIuZGVzY3JfbGVuID0gcy0+ZGVzY3Jf bGVuOworCisgICAgcmV0ID0gc2VuZChzLT5zb2NrLCAmbnVyYiwgc2l6ZW9mKG51cmIpLCAwKTsK KyAgICBpZiAocmV0ID4gMCkgeworICAgICAgICByZXQgPSBzZW5kKHMtPnNvY2ssIHMtPmRlc2Ny LCBzLT5kZXNjcl9sZW4sIDApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIG1haW5fbG9vcCgpCit7CisgICAgVVNCRGV2aWNlWCAqZGV2ID0gaG9zdGRldl9saXN0 OworICAgIGZkX3NldCByZmRzLCB3ZmRzOworICAgIGludCByZXQsIG5mZHM7CisKKyAgICBuZmRz ID0gLTE7CisgICAgRkRfWkVSTygmcmZkcyk7CisgICAgRkRfWkVSTygmd2Zkcyk7CisKKyAgICB3 aGlsZSAoZGV2KSB7CisgICAgICAgIEZEX1NFVChkZXYtPnNvY2ssICZyZmRzKTsKKyAgICAgICAg RkRfU0VUKGRldi0+ZmQsICZ3ZmRzKTsKKyAgICAgICAgbmZkcyA9IE1BWChuZmRzLCBNQVgoZGV2 LT5mZCwgZGV2LT5zb2NrKSk7CisgICAgICAgIGRldiA9IGRldi0+bmV4dDsKKyAgICB9CisKKyAg ICByZXQgPSBzZWxlY3QobmZkcyArIDEsICZyZmRzLCAmd2ZkcywgTlVMTCwgTlVMTCk7CisgICAg aWYgKHJldCA+IDApIHsKKyAgICAgICAgZGV2ID0gaG9zdGRldl9saXN0OworICAgICAgICB3aGls ZSAoZGV2KSB7CisgICAgICAgICAgICBpZiAoRkRfSVNTRVQoZGV2LT5zb2NrLCAmcmZkcykpIHsK KyAgICAgICAgICAgICAgICByZWFkX2Zyb21fbmV0d29yayhkZXYpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKEZEX0lTU0VUKGRldi0+ZmQsICZ3ZmRzKSkgeworICAgICAgICAgICAg ICAgIGFzeW5jX2NvbXBsZXRlKGRldik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXYg PSBkZXYtPm5leHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgICBjb25zdCBjaGFyICpob3N0OworICAgIHVpbnQxNl90IHBvcnQ7 CisgICAgY29uc3QgY2hhciAqZGV2aWNlOworCisgICAgaWYgKGFyZ2MgPCA0KSB7CisgICAgICAg IHByaW50ZigiJXM6IGhvc3QgcG9ydCAoYnVzLmFkZHIgfCB2ZW5kb3I6cHJvZHVjdClcblxuIiwg YXJndlswXSk7CisgICAgICAgIHByaW50ZigiXHRidXMuYWRkciAtIChkZWNpbWFsKVxuIik7Cisg ICAgICAgIHByaW50ZigiXHR2ZW5kb3I6cHJvZHVjdCAtIChoZXhhZGVjaW1hbClcbiIpOworICAg ICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworICAgIH0KKworICAgIGhvc3QgPSBhcmd2WzFdOwor ICAgIHBvcnQgPSBhdG9pKGFyZ3ZbMl0pOworICAgIGRldmljZSA9IGFyZ3ZbM107CisKKyAgICBV U0JEZXZpY2VYICpkZXYgPSB1c2JkX2hvc3RfZGV2aWNlX29wZW4oZGV2aWNlKTsKKyAgICBpZiAo IWRldikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbm5lY3RfdG9faG9z dChkZXYtPnNvY2ssIGhvc3QsIHBvcnQpICE9IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K KworICAgIHNvY2tldF9zZXRfbm9uYmxvY2soZGV2LT5zb2NrKTsKKworICAgIGlmIChyZWdpc3Rl cl9uZXdfZGV2aWNlKGRldikgPCAwKSB7CisgICAgICAgIHByaW50ZigiZmFpbGVkIHRvIHJlZ2lz dGVyIGRldmljZSAlcyAlZFxuIiwgZGV2LT5kZXZuYW1lLCBzb2NrZXRfZXJyb3IoKSk7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoaG9zdGRldl9saXN0KSB7CisgICAgICAg IG1haW5fbG9vcCgpOworICAgIH0KKworICAgIHNodXRkb3duKGRldi0+c29jaywgU0hVVF9SRFdS KTsKKyAgICBjbG9zZXNvY2tldChkZXYtPnNvY2spOworCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VT UzsKK30KZGlmZiAtLWdpdCBhL3VzYi1saW51eC5jIGIvdXNiLWxpbnV4LmMKaW5kZXggYzVkYTVi NS4uMjRhN2NiOCAxMDA2NDQKLS0tIGEvdXNiLWxpbnV4LmMKKysrIGIvdXNiLWxpbnV4LmMKQEAg LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAicWVt dS10aW1lci5oIgorI2luY2x1ZGUgInFlbXVfc29ja2V0LmgiCiAjaW5jbHVkZSAiY29uc29sZS5o IgogCiAjaWYgZGVmaW5lZChfX2xpbnV4X18pCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSA8 bGludXgvdXNiZGV2aWNlX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1 ZGUgImh3L3VzYi5oIgorI2luY2x1ZGUgInVzYi1yZW1vdGUuaCIKIAogLyogV2UgcmVkZWZpbmUg aXQgdG8gYXZvaWQgdmVyc2lvbiBwcm9ibGVtcyAqLwogc3RydWN0IHVzYl9jdHJsdHJhbnNmZXIg ewpAQCAtNTgsMTIgKzYwLDE5IEBAIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgewogICAgIHVpbnQx Nl90IHdMZW5ndGg7CiB9OwogCit0eXBlZGVmIGludCBfX2lvY3RsKGludCBmZCwgdW5zaWduZWQg bG9uZyBpbnQgcmVxdWVzdCwgLi4uKTsKKwogdHlwZWRlZiBpbnQgVVNCU2NhbkZ1bmModm9pZCAq b3BhcXVlLCBpbnQgYnVzX251bSwgaW50IGFkZHIsIGludCBjbGFzc19pZCwKICAgICAgICAgICAg ICAgICAgICAgICAgIGludCB2ZW5kb3JfaWQsIGludCBwcm9kdWN0X2lkLAogICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZHVjdF9uYW1lLCBpbnQgc3BlZWQpOwogc3RhdGlj IGludCB1c2JfaG9zdF9maW5kX2RldmljZShpbnQgKnBidXNfbnVtLCBpbnQgKnBhZGRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwcm9kdWN0X25hbWUsIGludCBwcm9k dWN0X25hbWVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZGV2bmFtZSk7CisKK2V4dGVybiBpbnQgdXNiX3JlbW90ZV9pb2N0bChpbnQgZmQsIHVuc2ln bmVkIGxvbmcgaW50IHJlcXVlc3QsIC4uLik7CisKK2V4dGVybiBpbnQgcGFyc2VfaG9zdF9wb3J0 KHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHIsIGNvbnN0IGNoYXIgKnN0cik7CisKIC8vI2RlZmlu ZSBERUJVRwogCiAjaWZkZWYgREVCVUcKQEAgLTExOSw5ICsxMjgsMjAgQEAgdHlwZWRlZiBzdHJ1 Y3QgVVNCSG9zdERldmljZSB7CiAgICAgaW50IGJ1c19udW07CiAgICAgaW50IGFkZHI7CiAKKyAg ICBfX2lvY3RsICppb2N0bDsKKwogICAgIHN0cnVjdCBVU0JIb3N0RGV2aWNlICpuZXh0OwogfSBV U0JIb3N0RGV2aWNlOwogCit0eXBlZGVmIHN0cnVjdCBVU0JSZW1vdGVEZXZpY2UgeworICAgIFVT Qkhvc3REZXZpY2UgaGRldjsKKworICAgIC8qIE5ldHdvcmsgYnVmZmVyICovCisgICAgY2hhciAq cmVhZF9wdHI7CisgICAgY2hhciBidWZmZXJbNDA5Nl07CisKK30gVVNCUmVtb3RlRGV2aWNlOwor CiBzdGF0aWMgaW50IGlzX2lzb2MoVVNCSG9zdERldmljZSAqcywgaW50IGVwKQogewogICAgIHJl dHVybiBzLT5lbmRwX3RhYmxlW2VwIC0gMV0udHlwZSA9PSBVU0JERVZGU19VUkJfVFlQRV9JU087 CkBAIC0yMjksNyArMjQ5LDcgQEAgc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGUodm9pZCAqb3Bh cXVlKQogICAgIHdoaWxlICgxKSB7CiAgICAgCVVTQlBhY2tldCAqcDsKIAotCWludCByID0gaW9j dGwocy0+ZmQsIFVTQkRFVkZTX1JFQVBVUkJOREVMQVksICZhdXJiKTsKKyAgICAgICAgaW50IHIg PSBzLT5pb2N0bChzLT5mZCwgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSwgJmF1cmIpOwogICAgICAg ICBpZiAociA8IDApIHsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAg ICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDcgKzMwMiw3IEBAIHN0YXRpYyB2b2lkIGFzeW5jX2Nh bmNlbChVU0JQYWNrZXQgKnVudXNlZCwgdm9pZCAqb3BhcXVlKQogICAgIC8qIE1hcmsgaXQgYXMg ZGVhZCAoc2VlIGFzeW5jX2NvbXBsZXRlIGFib3ZlKSAqLwogICAgIGF1cmItPnBhY2tldCA9IE5V TEw7CiAKLSAgICBpbnQgciA9IGlvY3RsKHMtPmZkLCBVU0JERVZGU19ESVNDQVJEVVJCLCBhdXJi KTsKKyAgICBpbnQgciA9IHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19ESVNDQVJEVVJCLCBhdXJi KTsKICAgICBpZiAociA8IDApIHsKICAgICAgICAgZHByaW50ZigiaHVzYjogYXN5bmMuIGRpc2Nh cmQgdXJiIGZhaWxlZCBlcnJubyAlZFxuIiwgZXJybm8pOwogICAgIH0KQEAgLTMzOSw3ICszNTks NyBAQCBzdGF0aWMgaW50IHVzYl9ob3N0X2NsYWltX2ludGVyZmFjZXMoVVNCSG9zdERldmljZSAq ZGV2LCBpbnQgY29uZmlndXJhdGlvbikKICAgICAgICAgZm9yIChpbnRlcmZhY2UgPSAwOyBpbnRl cmZhY2UgPCBuYl9pbnRlcmZhY2VzOyBpbnRlcmZhY2UrKykgewogICAgICAgICAgICAgY3RybC5p b2N0bF9jb2RlID0gVVNCREVWRlNfRElTQ09OTkVDVDsKICAgICAgICAgICAgIGN0cmwuaWZubyA9 IGludGVyZmFjZTsKLSAgICAgICAgICAgIHJldCA9IGlvY3RsKGRldi0+ZmQsIFVTQkRFVkZTX0lP Q1RMLCAmY3RybCk7CisgICAgICAgICAgICByZXQgPSBkZXYtPmlvY3RsKGRldi0+ZmQsIFVTQkRF VkZTX0lPQ1RMLCAmY3RybCk7CiAgICAgICAgICAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAhPSBF Tk9EQVRBKSB7CiAgICAgICAgICAgICAgICAgcGVycm9yKCJVU0JERVZGU19ESVNDT05ORUNUIik7 CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwpAQCAtMzUwLDcgKzM3MCw3IEBAIHN0YXRpYyBp bnQgdXNiX2hvc3RfY2xhaW1faW50ZXJmYWNlcyhVU0JIb3N0RGV2aWNlICpkZXYsIGludCBjb25m aWd1cmF0aW9uKQogCiAgICAgLyogWFhYOiBvbmx5IGdyYWIgaWYgYWxsIGludGVyZmFjZXMgYXJl IGZyZWUgKi8KICAgICBmb3IgKGludGVyZmFjZSA9IDA7IGludGVyZmFjZSA8IG5iX2ludGVyZmFj ZXM7IGludGVyZmFjZSsrKSB7Ci0gICAgICAgIHJldCA9IGlvY3RsKGRldi0+ZmQsIFVTQkRFVkZT X0NMQUlNSU5URVJGQUNFLCAmaW50ZXJmYWNlKTsKKyAgICAgICAgcmV0ID0gZGV2LT5pb2N0bChk ZXYtPmZkLCBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSwgJmludGVyZmFjZSk7CiAgICAgICAgIGlm IChyZXQgPCAwKSB7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUJVU1kpIHsKICAgICAgICAg ICAgICAgICBwcmludGYoImh1c2I6IHVwZGF0ZSBpZmFjZS4gZGV2aWNlIGFscmVhZHkgZ3JhYmJl ZFxuIik7CkBAIC0zNzcsNyArMzk3LDcgQEAgc3RhdGljIGludCB1c2JfaG9zdF9yZWxlYXNlX2lu dGVyZmFjZXMoVVNCSG9zdERldmljZSAqcykKICAgICBkcHJpbnRmKCJodXNiOiByZWxlYXNpbmcg aW50ZXJmYWNlc1xuIik7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmludGVyZmFjZXM7IGkr KykgewotICAgICAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFD RSwgJmkpOworICAgICAgICByZXQgPSBzLT5pb2N0bChzLT5mZCwgVVNCREVWRlNfUkVMRUFTRUlO VEVSRkFDRSwgJmkpOwogICAgICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICAgICAgcGVycm9y KCJodXNiOiBmYWlsZWQgdG8gcmVsZWFzZSBpbnRlcmZhY2UiKTsKICAgICAgICAgICAgIHJldHVy biAwOwpAQCAtMzkzLDcgKzQxMyw3IEBAIHN0YXRpYyB2b2lkIHVzYl9ob3N0X2hhbmRsZV9yZXNl dChVU0JEZXZpY2UgKmRldikKIAogICAgIGRwcmludGYoImh1c2I6IHJlc2V0IGRldmljZSAldS4l dVxuIiwgcy0+YnVzX251bSwgcy0+YWRkcik7CiAKLSAgICBpb2N0bChzLT5mZCwgVVNCREVWRlNf UkVTRVQpOworICAgIHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19SRVNFVCk7CiAKICAgICB1c2Jf aG9zdF9jbGFpbV9pbnRlcmZhY2VzKHMsIHMtPmNvbmZpZ3VyYXRpb24pOwogfQpAQCAtNDQwLDcg KzQ2MCw3IEBAIHN0YXRpYyBpbnQgdXNiX2hvc3RfaGFuZGxlX2RhdGEoVVNCSG9zdERldmljZSAq cywgVVNCUGFja2V0ICpwKQogICAgIAl1cmItPmVuZHBvaW50ID0gcC0+ZGV2ZXA7CiAKICAgICBp ZiAoaXNfaGFsdGVkKHMsIHAtPmRldmVwKSkgewotCXJldCA9IGlvY3RsKHMtPmZkLCBVU0JERVZG U19DTEVBUl9IQUxULCAmdXJiLT5lbmRwb2ludCk7CisgICAgICAgIHJldCA9IHMtPmlvY3RsKHMt PmZkLCBVU0JERVZGU19DTEVBUl9IQUxULCAmdXJiLT5lbmRwb2ludCk7CiAgICAgICAgIGlmIChy ZXQgPCAwKSB7CiAgICAgICAgICAgICBkcHJpbnRmKCJodXNiOiBmYWlsZWQgdG8gY2xlYXIgaGFs dC4gZXAgMHgleCBlcnJubyAlZFxuIiwgCiAgICAgICAgICAgICAgICAgICAgdXJiLT5lbmRwb2lu dCwgZXJybm8pOwpAQCAtNDY1LDcgKzQ4NSw3IEBAIHN0YXRpYyBpbnQgdXNiX2hvc3RfaGFuZGxl X2RhdGEoVVNCSG9zdERldmljZSAqcywgVVNCUGFja2V0ICpwKQogCiAgICAgdXJiLT51c2VyY29u dGV4dCA9IHM7CiAKLSAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfU1VCTUlUVVJCLCB1 cmIpOworICAgIHJldCA9IHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19TVUJNSVRVUkIsIHVyYik7 CiAKICAgICBkcHJpbnRmKCJodXNiOiBkYXRhIHN1Ym1pdC4gZXAgMHgleCBsZW4gJXUgYXVyYiAl cFxuIiwgdXJiLT5lbmRwb2ludCwgcC0+bGVuLCBhdXJiKTsKIApAQCAtNTA1LDcgKzUyNSw3IEBA IHN0YXRpYyBpbnQgdXNiX2hvc3Rfc2V0X2NvbmZpZyhVU0JIb3N0RGV2aWNlICpzLCBpbnQgY29u ZmlnKQogewogICAgIHVzYl9ob3N0X3JlbGVhc2VfaW50ZXJmYWNlcyhzKTsKIAotICAgIGludCBy ZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiwgJmNvbmZpZyk7Cisg ICAgaW50IHJldCA9IHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OLCAm Y29uZmlnKTsKICAKICAgICBkcHJpbnRmKCJodXNiOiBjdHJsIHNldCBjb25maWcgJWQgcmV0ICVk IGVycm5vICVkXG4iLCBjb25maWcsIHJldCwgZXJybm8pOwogICAgIApAQCAtNTIzLDcgKzU0Myw3 IEBAIHN0YXRpYyBpbnQgdXNiX2hvc3Rfc2V0X2ludGVyZmFjZShVU0JIb3N0RGV2aWNlICpzLCBp bnQgaWZhY2UsIGludCBhbHQpCiAKICAgICBzaS5pbnRlcmZhY2UgID0gaWZhY2U7CiAgICAgc2ku YWx0c2V0dGluZyA9IGFsdDsKLSAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfU0VUSU5U RVJGQUNFLCAmc2kpOworICAgIHJldCA9IHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19TRVRJTlRF UkZBQ0UsICZzaSk7CiAgICAgCiAgICAgZHByaW50ZigiaHVzYjogY3RybCBzZXQgaWZhY2UgJWQg YWx0c2V0ICVkIHJldCAlZCBlcnJubyAlZFxuIiwgCiAgICAgCWlmYWNlLCBhbHQsIHJldCwgZXJy bm8pOwpAQCAtNTkyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbnQgdXNiX2hvc3RfaGFuZGxlX2NvbnRy b2woVVNCSG9zdERldmljZSAqcywgVVNCUGFja2V0ICpwKQogCiAgICAgdXJiLT51c2VyY29udGV4 dCA9IHM7CiAKLSAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNCREVWRlNfU1VCTUlUVVJCLCB1cmIp OworICAgIHJldCA9IHMtPmlvY3RsKHMtPmZkLCBVU0JERVZGU19TVUJNSVRVUkIsIHVyYik7CiAK ICAgICBkcHJpbnRmKCJodXNiOiBzdWJtaXQgY3RybC4gbGVuICV1IGF1cmIgJXBcbiIsIHVyYi0+ YnVmZmVyX2xlbmd0aCwgYXVyYik7CiAKQEAgLTc4Miw3ICs4MDIsNyBAQCBzdGF0aWMgaW50IHVz Yl9saW51eF91cGRhdGVfZW5kcF90YWJsZShVU0JIb3N0RGV2aWNlICpzKQogICAgIGN0LmRhdGEg PSAmY29uZmlndXJhdGlvbjsKICAgICBjdC50aW1lb3V0ID0gNTA7CiAKLSAgICByZXQgPSBpb2N0 bChzLT5mZCwgVVNCREVWRlNfQ09OVFJPTCwgJmN0KTsKKyAgICByZXQgPSBzLT5pb2N0bChzLT5m ZCwgVVNCREVWRlNfQ09OVFJPTCwgJmN0KTsKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBw ZXJyb3IoInVzYl9saW51eF91cGRhdGVfZW5kcF90YWJsZSIpOwogICAgICAgICByZXR1cm4gMTsK QEAgLTgyMyw3ICs4NDMsNyBAQCBzdGF0aWMgaW50IHVzYl9saW51eF91cGRhdGVfZW5kcF90YWJs ZShVU0JIb3N0RGV2aWNlICpzKQogICAgICAgICBjdC5kYXRhID0gJmFsdF9pbnRlcmZhY2U7CiAg ICAgICAgIGN0LnRpbWVvdXQgPSA1MDsKIAotICAgICAgICByZXQgPSBpb2N0bChzLT5mZCwgVVNC REVWRlNfQ09OVFJPTCwgJmN0KTsKKyAgICAgICAgcmV0ID0gcy0+aW9jdGwocy0+ZmQsIFVTQkRF VkZTX0NPTlRST0wsICZjdCk7CiAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICBw ZXJyb3IoInVzYl9saW51eF91cGRhdGVfZW5kcF90YWJsZSIpOwogICAgICAgICAgICAgcmV0dXJu IDE7CkBAIC05MTYsNiArOTM2LDcgQEAgc3RhdGljIFVTQkRldmljZSAqdXNiX2hvc3RfZGV2aWNl X29wZW5fYWRkcihpbnQgYnVzX251bSwgaW50IGFkZHIsIGNvbnN0IGNoYXIgKnAKICNlbmRpZgog CiAgICAgZGV2LT5mZCA9IGZkOworICAgIGRldi0+aW9jdGwgPSBpb2N0bDsKIAogICAgIC8qIAog ICAgICAqIEluaXRpYWwgY29uZmlndXJhdGlvbiBpcyAtMSB3aGljaCBtYWtlcyB1cyBjbGFpbSBm aXJzdCAKQEAgLTkyNiw3ICs5NDcsNyBAQCBzdGF0aWMgVVNCRGV2aWNlICp1c2JfaG9zdF9kZXZp Y2Vfb3Blbl9hZGRyKGludCBidXNfbnVtLCBpbnQgYWRkciwgY29uc3QgY2hhciAqcAogICAgIGlm ICghdXNiX2hvc3RfY2xhaW1faW50ZXJmYWNlcyhkZXYsIC0xKSkKICAgICAgICAgZ290byBmYWls OwogCi0gICAgcmV0ID0gaW9jdGwoZmQsIFVTQkRFVkZTX0NPTk5FQ1RJTkZPLCAmY2kpOworICAg IHJldCA9IGRldi0+aW9jdGwoZmQsIFVTQkRFVkZTX0NPTk5FQ1RJTkZPLCAmY2kpOwogICAgIGlm IChyZXQgPCAwKSB7CiAgICAgICAgIHBlcnJvcigidXNiX2hvc3RfZGV2aWNlX29wZW46IFVTQkRF VkZTX0NPTk5FQ1RJTkZPIik7CiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTE0ODMsNiArMTUwNCwy NzkgQEAgdm9pZCB1c2JfaG9zdF9pbmZvKHZvaWQpCiAgICAgfQogfQogCitzdGF0aWMgaW50IHVz Yl9yZW1vdGVfcmVjdl9udXJiKFVTQlJlbW90ZURldmljZSAqZGV2LCBpbnQgb3ApCit7CisgICAg VU5SQl9IRUFERVIgKmhkcjsKKyAgICBpbnQgbnJlYWQgPSBkZXYtPnJlYWRfcHRyIC0gZGV2LT5i dWZmZXI7CisgICAgaW50IHNpemU7CisKKyAgICBzaXplID0gcmVjdihkZXYtPmhkZXYuZmQsIGRl di0+cmVhZF9wdHIsIHNpemVvZihkZXYtPmJ1ZmZlcikgLSBucmVhZCwgMCk7CisgICAgaWYgKChz aXplID09IDApIHx8ICgoc2l6ZSA8IDApICYmIChzb2NrZXRfZXJyb3IoKSAhPSBFV09VTERCTE9D SykpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBkZXYtPnJlYWRfcHRyICs9 IHNpemU7CisKKyAgICBucmVhZCA9IGRldi0+cmVhZF9wdHIgLSBkZXYtPmJ1ZmZlcjsKKyAgICBp ZiAobnJlYWQgPCBzaXplb2YoVU5SQl9IRUFERVIpKSB7CisgICAgICAgIHJldHVybiAwOworICAg IH0KKworICAgIGhkciA9IChVTlJCX0hFQURFUiAqKShkZXYtPmJ1ZmZlcik7CisKKyAgICBpZiAo KGhkci0+bWFnaWMgIT0gVVNCX1JFTU9URV9NQUdJQykgfHwgKGhkci0+c2l6ZSA9PSAwKSB8fCAo aGRyLT5vcGNvZGUgIT0gb3ApKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBp ZiAobnJlYWQgPCBoZHItPnNpemUpIHsKKyAgICAgICAgLyogbmVlZCB0byB3YWl0IGZvciBtb3Jl IGRhdGEgZnJvbSBuZXR3b3JrLiAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAv KiByZXdpbmQgYnVmZmVyIGhlYWQgYWZ0ZXIgYWxsIGRhdGEgd2FzIHJlY2VpdmVkLiAqLworICAg IGRldi0+cmVhZF9wdHIgPSBkZXYtPmJ1ZmZlcjsKKworICAgIHJldHVybiAxOworfQorCitzdGF0 aWMgdm9pZCByZW1vdGVfYXN5bmNfY29tcGxldGUodm9pZCAqb3BhcXVlKQoreworICAgIFVTQlJl bW90ZURldmljZSAqcyA9IG9wYXF1ZTsKKyAgICBVTlJCX1NVQk1JVF9VUkIgKm51cmI7CisgICAg QXN5bmNVUkIgKmF1cmI7CisgICAgVVNCUGFja2V0ICpwOworICAgIGludCByZXQsIGxlbjsKKwor ICAgIHJldCA9IHVzYl9yZW1vdGVfcmVjdl9udXJiKHMsIFVOUkJfT1BDT0RFX1NVQk1JVF9VUkIp OworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChy ZXQgPCAwKSB7CisgICAgICAgIHByaW50ZigicnVzYjogZGV2aWNlICVkLiVkIGRpc2Nvbm5lY3Rl ZFxuIiwgcy0+aGRldi5idXNfbnVtLCBzLT5oZGV2LmRldi5hZGRyKTsKKyAgICAgICAgdXNiX2Rl dmljZV9kZWxfYWRkcigwLCBzLT5oZGV2LmRldi5hZGRyKTsKKyAgICAgICAgcmV0dXJuOworICAg IH0KKworICAgIG51cmIgPSAoVU5SQl9TVUJNSVRfVVJCICopKHMtPmJ1ZmZlcik7CisKKyAgICBh dXJiID0gKEFzeW5jVVJCICopKG51cmItPnVyYi5vcGFxdWUpOworCisgICAgYXVyYi0+dXJiLnR5 cGUgPSBudXJiLT51cmIudHlwZTsKKyAgICBhdXJiLT51cmIuc3RhdHVzID0gbnVyYi0+dXJiLnN0 YXR1czsKKyAgICBhdXJiLT51cmIuYWN0dWFsX2xlbmd0aCA9IG51cmItPnVyYi5sZW5ndGg7Cisg ICAKKyAgICBtZW1jcHkoYXVyYi0+dXJiLmJ1ZmZlciwgbnVyYi0+dXJiLmJ1ZmZlciwgYXVyYi0+ dXJiLmJ1ZmZlcl9sZW5ndGgpOworCisgICAgcCA9IGF1cmItPnBhY2tldDsKKworICAgIGRwcmlu dGYoImh1c2I6IGFzeW5jIGNvbXBsZXRlZC4gYXVyYiAlcCBzdGF0dXMgJWQgYWxlbiAlZFxuIiwg CisgICAgICAgIGF1cmIsIGF1cmItPnVyYi5zdGF0dXMsIGF1cmItPnVyYi5hY3R1YWxfbGVuZ3Ro KTsKKworICAgIGlmIChwKSB7CisgICAgICAgIHN3aXRjaCAoYXVyYi0+dXJiLnN0YXR1cykgewor ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBwLT5sZW4gPSBhdXJiLT51cmIuYWN0dWFsX2xl bmd0aDsKKyAgICAgICAgICAgIGlmIChhdXJiLT51cmIudHlwZSA9PSBVU0JERVZGU19VUkJfVFlQ RV9DT05UUk9MKQorICAgICAgICAgICAgICAgIGFzeW5jX2NvbXBsZXRlX2N0cmwoJnMtPmhkZXYs IHApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAtRVBJUEU6CisgICAgICAg ICAgICBzZXRfaGFsdCgmcy0+aGRldiwgcC0+ZGV2ZXApOworICAgICAgICAgICAgLyogZmFsbCB0 aHJvdWdoICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwLT5sZW4gPSBVU0JfUkVU X05BSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdXNiX3BhY2tl dF9jb21wbGV0ZShwKTsKKyAgICB9CisKKyAgICBhc3luY19mcmVlKGF1cmIpOworfQorCitzdGF0 aWMgdm9pZCB1c2JfcmVtb3RlX2RldmljZV9vcGVuKFVTQlJlbW90ZURldmljZSAqcywgVU5SQl9O RVdfREVWSUNFICpudXJiKQoreworICAgIFVTQkhvc3REZXZpY2UgKmRldiA9ICZzLT5oZGV2Owor ICAgIHN0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbyBjaTsKKyAgICBpbnQgcmV0OworCisgICAg ZGV2LT5idXNfbnVtID0gbnVyYi0+YnVzX251bTsKKyAgICBkZXYtPmFkZHIgPSBudXJiLT5hZGRy OworCisgICAgcHJpbnRmKCJydXNiOiBvcGVuIGRldmljZSAlZC4lZFxuIiwgbnVyYi0+YnVzX251 bSwgbnVyYi0+YWRkcik7CisKKyAgICAvKiAicmVhZCIgdGhlIGRldmljZSBkZXNjcmlwdGlvbiAq LworICAgIGRldi0+ZGVzY3JfbGVuID0gbnVyYi0+ZGVzY3JfbGVuOworICAgIG1lbWNweShkZXYt PmRlc2NyLCBudXJiLT5kZXNjciwgbnVyYi0+ZGVzY3JfbGVuKTsKKworI2lmZGVmIERFQlVHCisg ICAgeworICAgICAgICBpbnQgeDsKKyAgICAgICAgcHJpbnRmKCI9PT0gYmVnaW4gZHVtcGluZyBk ZXZpY2UgZGVzY3JpcHRvciBkYXRhID09PVxuIik7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCBk ZXYtPmRlc2NyX2xlbjsgeCsrKQorICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIGRldi0+ZGVz Y3JbeF0pOworICAgICAgICBwcmludGYoIlxuPT09IGVuZCBkdW1waW5nIGRldmljZSBkZXNjcmlw dG9yIGRhdGEgPT09XG4iKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIAorICAgICogSW5pdGlh bCBjb25maWd1cmF0aW9uIGlzIC0xIHdoaWNoIG1ha2VzIHVzIGNsYWltIGZpcnN0IAorICAgICog YXZhaWxhYmxlIGNvbmZpZy4gV2UgdXNlZCB0byBzdGFydCB3aXRoIDEsIHdoaWNoIGRvZXMgbm90 CisgICAgKiBhbHdheXMgd29yay4gSSd2ZSBzZWVuIGRldmljZXMgd2hlcmUgZmlyc3QgY29uZmln IHN0YXJ0cyAKKyAgICAqIHdpdGggMi4KKyAgICAqLworICAgIGlmICghdXNiX2hvc3RfY2xhaW1f aW50ZXJmYWNlcyhkZXYsIC0xKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0ID0gZGV2 LT5pb2N0bChkZXYtPmZkLCBVU0JERVZGU19DT05ORUNUSU5GTywgJmNpKTsKKyAgICBpZiAocmV0 IDwgMCkgeworICAgICAgICBwZXJyb3IoInVzYl9ob3N0X2RldmljZV9vcGVuOiBVU0JERVZGU19D T05ORUNUSU5GTyIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcHJpbnRmKCJy dXNiOiBncmFiYmVkIHVzYiBkZXZpY2UgJWQuJWRcbiIsIG51cmItPmJ1c19udW0sIG51cmItPmFk ZHIpOworCisgICAgcmV0ID0gdXNiX2xpbnV4X3VwZGF0ZV9lbmRwX3RhYmxlKGRldik7CisgICAg aWYgKHJldCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKGNpLnNsb3cpCisgICAgICAg IGRldi0+ZGV2LnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKKyAgICBlbHNlCisgICAgICAgIGRldi0+ ZGV2LnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CisKKyAgICBkZXYtPmRldi5oYW5kbGVfcGFja2V0 ICA9IHVzYl9ob3N0X2hhbmRsZV9wYWNrZXQ7CisgICAgZGV2LT5kZXYuaGFuZGxlX3Jlc2V0ICAg PSB1c2JfaG9zdF9oYW5kbGVfcmVzZXQ7CisgICAgZGV2LT5kZXYuaGFuZGxlX2Rlc3Ryb3kgPSB1 c2JfaG9zdF9oYW5kbGVfZGVzdHJveTsKKworICAgIGlmICghbnVyYi0+ZGV2X25hbWUgfHwgbnVy Yi0+ZGV2X25hbWVbMF0gPT0gJ1wwJykKKyAgICAgICAgc25wcmludGYoZGV2LT5kZXYuZGV2bmFt ZSwgc2l6ZW9mKGRldi0+ZGV2LmRldm5hbWUpLAorICAgICAgICAgICAgImhvc3Q6JWQuJWQiLCBu dXJiLT5idXNfbnVtLCBudXJiLT5hZGRyKTsKKyAgICBlbHNlCisgICAgICAgIHBzdHJjcHkoZGV2 LT5kZXYuZGV2bmFtZSwgc2l6ZW9mKGRldi0+ZGV2LmRldm5hbWUpLAorICAgICAgICAgICAgbnVy Yi0+ZGV2X25hbWUpOworCisgICAgcWVtdV9zZXRfZmRfaGFuZGxlcihkZXYtPmZkLCByZW1vdGVf YXN5bmNfY29tcGxldGUsIE5VTEwsIHMpOworCisgICAgaG9zdGRldl9saW5rKGRldik7CisKKyAg ICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIGRldmljZSB3YXMgYXJyaXZlZCB3ZSBjYW4gYWRk IGl0IHRvIFFFbXUuCisgICAgdXNiX2RldmljZV9hZGRfZGV2KCZkZXYtPmRldik7CisKKyAgICBy ZXR1cm47CitmYWlsOgorICAgIGNsb3NlKGRldi0+ZmQpOworICAgIHFlbXVfZnJlZShkZXYpOwor fQorCitzdGF0aWMgdm9pZCB1c2JfcmVtb3RlX2RldmljZV9pbml0KHZvaWQgKm9wYXF1ZSkKK3sK KyAgICBVU0JSZW1vdGVEZXZpY2UgKnMgPSBvcGFxdWU7CisgICAgVU5SQl9ORVdfREVWSUNFICpu dXJiOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSB1c2JfcmVtb3RlX3JlY3ZfbnVyYihzLCBV TlJCX09QQ09ERV9ORVdfREVWSUNFKTsKKyAgICBpZiAocmV0ID09IDEpIHsKKyAgICAgICAgbnVy YiA9IChVTlJCX05FV19ERVZJQ0UgKikocy0+YnVmZmVyKTsKKyAgICAgICAgdXNiX3JlbW90ZV9k ZXZpY2Vfb3BlbihzLCBudXJiKTsKKyAgICB9IGVsc2UgaWYgKHJldCA9PSAtMSkgeworICAgICAg ICBxZW11X3NldF9mZF9oYW5kbGVyKHMtPmhkZXYuZmQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAg ICAgICBjbG9zZShzLT5oZGV2LmZkKTsKKyAgICAgICAgcWVtdV9mcmVlKHMpOworICAgIH0KK30K Kworc3RhdGljIFVTQlJlbW90ZURldmljZSogdXNiX3JlbW90ZV9kZXZpY2VfbmV3KGludCBzb2Nr KQoreworICAgIFVTQlJlbW90ZURldmljZSAqZGV2OworICAgIGNvbnN0IGludCBub2RlbGF5ID0g MTsKKworICAgIGRldiA9IHFlbXVfbWFsbG9jeihzaXplb2YoVVNCUmVtb3RlRGV2aWNlKSk7Cisg ICAgaWYgKCFkZXYpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc29ja2V0 X3NldF9ub25ibG9jayhzb2NrKTsKKworICAgIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1As IFRDUF9OT0RFTEFZLAorICAgICAgICAoY29uc3QgY2hhciopJm5vZGVsYXksIHNpemVvZihub2Rl bGF5KSk7CisKKyAgICBkZXYtPmhkZXYuZmQgPSBzb2NrOworICAgIGRldi0+aGRldi5pb2N0bCA9 IHVzYl9yZW1vdGVfaW9jdGw7CisKKyAgICBkZXYtPnJlYWRfcHRyID0gZGV2LT5idWZmZXI7CisK KyAgICBxZW11X3NldF9mZF9oYW5kbGVyKGRldi0+aGRldi5mZCwgdXNiX3JlbW90ZV9kZXZpY2Vf aW5pdCwgTlVMTCwgZGV2KTsKKworICAgIHJldHVybiBkZXY7Cit9CisKK3N0YXRpYyB2b2lkIHVz Yl9yZW1vdGVfYWNjZXB0KHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBpbnQgc29jayA9IG9wYXF1ZTsK KyAgICBVU0JSZW1vdGVEZXZpY2UgKmRldjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7 CisgICAgc29ja2xlbl90IGFkZHJsZW47CisgICAgaW50IGNzb2NrOworCisgICAgZm9yICg7Oykg eworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHNhZGRyKTsKKyAgICAgICAgY3NvY2sgPSBhY2Nl cHQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgJmFkZHJsZW4pOworICAgICAgICBp ZiAoKGNzb2NrIDwgMCkgJiYgKGVycm5vICE9IEVJTlRSKSkgeworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9IGVsc2UgaWYgKGNzb2NrID49IDApIHsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgfQorCisgICAgZGV2ID0gdXNiX3JlbW90ZV9kZXZpY2VfbmV3KGNzb2Nr KTsKKyAgICBpZiAoIWRldikgeworICAgICAgICBjbG9zZXNvY2tldChjc29jayk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgZHByaW50ZigicnVzYjogY29ubmVjdGlvbiBmcm9tICVzOiVkXG4iLAor ICAgICAgICAgICAgaW5ldF9udG9hKHNhZGRyLnNpbl9hZGRyKSwgbnRvaHMoc2FkZHIuc2luX3Bv cnQpKTsKKyAgICB9Cit9CisKK2ludCB1c2JfcmVtb3RlX3N0YXJ0KGNvbnN0IGNoYXIgKmhvc3Rf c3RyKQoreworICAgIGNvbnN0IGludCByZXVzZSA9IDE7CisgICAgaW50IHNvY2s7CisgICAgc3Ry dWN0IHNvY2thZGRyX2luIHNhZGRyOworCisgICAgaWYgKHBhcnNlX2hvc3RfcG9ydCgmc2FkZHIs IGhvc3Rfc3RyKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc29jayA9 IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHNvY2sgPT0gLTEpIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJydXNiOiBzb2NrZXQoKSBmYWlsZWQgKCVkKVxuIiwg c29ja2V0X2Vycm9yKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzb2NrZXRf c2V0X25vbmJsb2NrKHNvY2spOworICAgIAorICAgIHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tF VCwgU09fUkVVU0VBRERSLAorICAgICAgICAoY29uc3QgY2hhciAqKSZyZXVzZSwgc2l6ZW9mKHJl dXNlKSk7CisKKyAgICBpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBz aXplb2Yoc2FkZHIpKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJ1c2I6IGJp bmQoKSBmYWlsZWQgKCVkKVxuIiwgc29ja2V0X2Vycm9yKCkpOworICAgICAgICBnb3RvIGZhaWw7 CisgICAgfQorCisgICAgaWYgKGxpc3Rlbihzb2NrLCAxKSA9PSAtMSkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInJ1c2I6IGxpc3RlbigpIGZhaWxlZCAoJWQpXG4iLCBzb2NrZXRfZXJyb3Io KSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBxZW11X3NldF9mZF9oYW5kbGVy KHNvY2ssIHVzYl9yZW1vdGVfYWNjZXB0LCBOVUxMLCBzb2NrKTsKKworICAgIHJldHVybiAxOwor CitmYWlsOgorICAgIGNsb3Nlc29ja2V0KHNvY2spOworICAgIHJldHVybiAwOworfQorCiAjZWxz ZQogCiAjaW5jbHVkZSAiaHcvdXNiLmgiCkBAIC0xNTAzLDQgKzE3OTcsMTAgQEAgaW50IHVzYl9o b3N0X2RldmljZV9jbG9zZShjb25zdCBjaGFyICpkZXZuYW1lKQogICAgIHJldHVybiAwOwogfQog CitpbnQgdXNiX3JlbW90ZV9zdGFydChjb25zdCBjaGFyICpob3N0X3N0cikKK3sKKyAgICB0ZXJt X3ByaW50ZigiVVNCIHJlbW90ZSBkZXZpY2VzIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgIHJldHVy biAwOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3VzYi1yZW1vdGUuYyBiL3VzYi1yZW1vdGUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWMzNDViCi0tLSAvZGV2L251 bGwKKysrIGIvdXNiLXJlbW90ZS5jCkBAIC0wLDAgKzEsMzI0IEBACisvKgorKiBMaW51eCByZW1v dGUgVVNCIHJlZGlyZWN0b3IKKyoKKyogQ29weXJpZ2h0IChjKSAyMDA1IEZhYnJpY2UgQmVsbGFy ZAorKgorKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisqIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uIHRoZSByaWdodHMKKyogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorKiBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyog ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyoKKyogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORyBGUk9NLAorKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisqIFRIRSBTT0ZUV0FSRS4KKyovDQor DQorI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiDQorI2luY2x1ZGUgInFlbXVfc29ja2V0LmgiDQor I2luY2x1ZGUgInVzYi1yZW1vdGUuaCINCisNCisjaWYgZGVmaW5lZChfX2xpbnV4X18pDQorDQor I2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KKyNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4N CisNCisjZGVmaW5lIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkcHJpbnRmIHByaW50 ZgorI2Vsc2UKKyNkZWZpbmUgZHByaW50ZiguLi4pCisjZW5kaWYNCisNCitzdGF0aWMgdm9pZCBm aWxsX251cmIoVU5SQl9VUkIgKm51cmIsIHN0cnVjdCB1c2JkZXZmc191cmIgKnVyYikNCit7DQor ICAgIG51cmItPm9wYXF1ZSA9ICh1aW50NjRfdCl1cmI7CisgICAgbnVyYi0+dHlwZSA9IHVyYi0+ dHlwZTsKKyAgICBudXJiLT5lbmRwb2ludCA9IHVyYi0+ZW5kcG9pbnQ7CisgICAgbnVyYi0+c3Rh dHVzID0gdXJiLT5zdGF0dXM7CisgICAgbnVyYi0+ZmxhZ3MgPSB1cmItPmZsYWdzOworICAgIG51 cmItPmxlbmd0aCA9IHVyYi0+YnVmZmVyX2xlbmd0aDsKKyAgICBudXJiLT5udW1iZXJfb2ZfcGFj a2V0cyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdXNiX3Jl bW90ZV9jbGFpbV9pbnRlcmZhY2UoaW50IGZkLCBpbnQgaW50ZXJmYWNlKQoreworICAgIFVOUkJf Q0xBSU1fSU5URVJGQUNFIG51cmI7CisKKyAgICBudXJiLmhlYWRlci5tYWdpYyA9IFVTQl9SRU1P VEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bjb2RlID0gVU5SQl9PUENPREVfQ0xBSU1fSU5U RVJGQUNFOworICAgIG51cmIuaGVhZGVyLnNpemUgPSBzaXplb2YobnVyYik7CisKKyAgICBudXJi LmlmYWNlID0gaW50ZXJmYWNlOworCisgICAgcmV0dXJuIHNlbmQoZmQsICZudXJiLCBzaXplb2Yo bnVyYiksIDApOworfQorCitzdGF0aWMgaW50IHVzYl9yZW1vdGVfY2xlYXJfaGFsdChpbnQgZmQs IGNoYXIgZW5kcG9pbnQpCit7CisgICAgVU5SQl9DTEVBUl9IQUxUIG51cmI7CisKKyAgICBudXJi LmhlYWRlci5tYWdpYyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bjb2Rl ID0gVU5SQl9PUENPREVfQ0xFQVJfSEFMVDsKKyAgICBudXJiLmhlYWRlci5zaXplID0gc2l6ZW9m KG51cmIpOworCisgICAgbnVyYi5lbmRwb2ludCA9IGVuZHBvaW50OworCisgICAgcmV0dXJuIHNl bmQoZmQsICZudXJiLCBzaXplb2YobnVyYiksIDApOworfQorCitzdGF0aWMgaW50IHVzYl9yZW1v dGVfY29ubmVjdF9pbmZvKGludCBmZCwgc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvICpjaSkK K3sKKyAgICBVTlJCX0NPTk5FQ1RJT05fSU5GTyBudXJiOworICAgIGludCByZXQ7CisKKyAgICBu dXJiLmhlYWRlci5tYWdpYyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bj b2RlID0gVU5SQl9PUENPREVfQ09OTkVDVElPTl9JTkZPOworICAgIG51cmIuaGVhZGVyLnNpemUg PSBzaXplb2YobnVyYik7CisKKyAgICByZXQgPSBzZW5kKGZkLCAmbnVyYiwgc2l6ZW9mKG51cmIp LCAwKTsKKworICAgIGlmIChyZXQgPiAwKSB7CisgICAgICAgIGZkX3NldCByZmRzOworICAgICAg ICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBGRF9aRVJP KCZyZmRzKTsKKyAgICAgICAgRkRfU0VUKGZkLCAmcmZkcyk7CisKKyAgICAgICAgdHYudHZfc2Vj ID0gMTU7CisgICAgICAgIHR2LnR2X3VzZWMgPSAwOworCisgICAgICAgIHJldCA9IHNlbGVjdChm ZCArIDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgICBpZiAoKHJldCA+IDApICYm IEZEX0lTU0VUKGZkLCAmcmZkcykpIHsKKyAgICAgICAgICAgIHJldCA9IHJlY3YoZmQsICZudXJi LCBzaXplb2YobnVyYiksIE1TR19XQUlUQUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm IChyZXQgPiAwKSB7CisgICAgICAgIGNpLT5kZXZudW0gPSBudXJiLmRldm51bTsKKyAgICAgICAg Y2ktPnNsb3cgPSBudXJiLnNsb3c7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCB1c2JfcmVtb3RlX2NvbnRyb2woaW50IGZkLCBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRy YW5zZmVyICpjdCkKK3sKKyAgICBVTlJCX1VTQl9DT05UUk9MIG51cmI7CisgICAgaW50IHJldDsK KworICAgIG51cmIuaGVhZGVyLm1hZ2ljID0gVVNCX1JFTU9URV9NQUdJQzsKKyAgICBudXJiLmhl YWRlci5vcGNvZGUgPSBVTlJCX09QQ09ERV9VU0JfQ09OVFJPTDsKKyAgICBudXJiLmhlYWRlci5z aXplID0gc2l6ZW9mKG51cmIpOworCisgICAgbnVyYi50eXBlID0gY3QtPmJSZXF1ZXN0VHlwZTsK KyAgICBudXJiLnJlcXVlc3QgPSBjdC0+YlJlcXVlc3Q7CisgICAgbnVyYi52YWx1ZSA9IGN0LT53 VmFsdWU7CisgICAgbnVyYi5pbmRleCA9IGN0LT53SW5kZXg7CisgICAgbnVyYi5sZW5ndGggPSBj dC0+d0xlbmd0aDsKKyAgICBudXJiLnRpbWVvdXQgPSBjdC0+dGltZW91dDsKKworICAgIHJldCA9 IHNlbmQoZmQsICZudXJiLCBzaXplb2YobnVyYiksIDApOworCisgICAgaWYgKHJldCA+IDApIHsK KyAgICAgICAgZmRfc2V0IHJmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAg ICBpbnQgcmV0OworCisgICAgICAgIEZEX1pFUk8oJnJmZHMpOworICAgICAgICBGRF9TRVQoZmQs ICZyZmRzKTsKKworICAgICAgICB0di50dl9zZWMgPSAxNTsKKyAgICAgICAgdHYudHZfdXNlYyA9 IDA7CisKKyAgICAgICAgcmV0ID0gc2VsZWN0KGZkICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0 dik7CisgICAgICAgIGlmICgocmV0ID4gMCkgJiYgRkRfSVNTRVQoZmQsICZyZmRzKSkgeworICAg ICAgICAgICAgcmV0ID0gcmVjdihmZCwgY3QtPmRhdGEsIGN0LT53TGVuZ3RoLCBNU0dfV0FJVEFM TCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHVzYl9yZW1vdGVfZGlzY2FyZF91cmIoaW50IGZkLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmIp Cit7CisgICAgVU5SQl9ESVNDQVJEX1VSQiBudXJiOworICAgIGludCByZXQ7CisKKyAgICBudXJi LmhlYWRlci5tYWdpYyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bjb2Rl ID0gVU5SQl9PUENPREVfRElTQ0FSRF9VUkI7CisgICAgbnVyYi5oZWFkZXIuc2l6ZSA9IHNpemVv ZihudXJiKSArIHVyYi0+YnVmZmVyX2xlbmd0aDsKKworICAgIGZpbGxfbnVyYigmbnVyYi51cmIs IHVyYik7CisKKyAgICByZXQgPSBzZW5kKGZkLCAmbnVyYiwgc2l6ZW9mKG51cmIpLCAwKTsKKyAg ICBpZiAocmV0ID4gMCkgeworICAgICAgICByZXQgPSBzZW5kKGZkLCB1cmItPmJ1ZmZlciwgdXJi LT5idWZmZXJfbGVuZ3RoLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHVzYl9yZW1vdGVfdXNiX2lvY3RsKGludCBmZCwgc3RydWN0IHVzYmRldmZzX2lvY3Rs ICpjdHJsKQoreworICAgIFVOUkJfSU9fQ1RSTCBudXJiOworCisgICAgbnVyYi5oZWFkZXIubWFn aWMgPSBVU0JfUkVNT1RFX01BR0lDOworICAgIG51cmIuaGVhZGVyLm9wY29kZSA9IFVOUkJfT1BD T0RFX0lPX0NUUkw7CisgICAgbnVyYi5oZWFkZXIuc2l6ZSA9IHNpemVvZihudXJiKTsKKworICAg IG51cmIuaWZubyA9IGN0cmwtPmlmbm87CisgICAgbnVyYi5pb2N0bF9jb2RlID0gY3RybC0+aW9j dGxfY29kZTsKKyAgICBudXJiLmRhdGEgPSAodWludDY0X3QpKGN0cmwtPmRhdGEpOworCisgICAg cmV0dXJuIHNlbmQoZmQsICZudXJiLCBzaXplb2YobnVyYiksIDApOworfQorCitzdGF0aWMgaW50 IHVzYl9yZW1vdGVfcmVhZF91cmIoaW50IGZkLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1cmIpCit7 CisgICAgLyogQ291bGQgYmUgbmljZSB0byBpbXBsZW1lbnQgYnV0IHRoZSBuZXR3b3JrIGJ1ZmZl ciBpcyBvdXQgb2YgcmVhY2ggd2hlbgorICAgIHdlIGhhdmUgb25seSB0aGUgZmlsZSBkZXNjcmlw dG9yIGlkZW50aWZpZXIuICovCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHVzYl9y ZW1vdGVfcmVsZWFzZV9pbnRlcmZhY2UoaW50IGZkLCBpbnQgaW50ZXJmYWNlKQoreworICAgIFVO UkJfUkVMRUFTRV9JTlRFUkZBQ0UgbnVyYjsKKworICAgIG51cmIuaGVhZGVyLm1hZ2ljID0gVVNC X1JFTU9URV9NQUdJQzsKKyAgICBudXJiLmhlYWRlci5vcGNvZGUgPSBVTlJCX09QQ09ERV9SRUxF QVNFX0lOVEVSRkFDRTsKKyAgICBudXJiLmhlYWRlci5zaXplID0gc2l6ZW9mKG51cmIpOworCisg ICAgbnVyYi5pZmFjZSA9IGludGVyZmFjZTsKKworICAgIHJldHVybiBzZW5kKGZkLCAmbnVyYiwg c2l6ZW9mKG51cmIpLCAwKTsKK30KKworc3RhdGljIGludCB1c2JfcmVtb3RlX3Jlc2V0KGludCBm ZCkKK3sKKyAgICBVTlJCX1JFU0VUX0RFVklDRSBudXJiOworCisgICAgbnVyYi5oZWFkZXIubWFn aWMgPSBVU0JfUkVNT1RFX01BR0lDOworICAgIG51cmIuaGVhZGVyLm9wY29kZSA9IFVOUkJfT1BD T0RFX1JFU0VUX0RFVklDRTsKKyAgICBudXJiLmhlYWRlci5zaXplID0gc2l6ZW9mKG51cmIpOwor CisgICAgcmV0dXJuIHNlbmQoZmQsICZudXJiLCBzaXplb2YobnVyYiksIDApOworfQorCitzdGF0 aWMgaW50IHVzYl9yZW1vdGVfc2V0X2NvbmZpZyhpbnQgZmQsIGludCBjb25maWcpCit7CisgICAg VU5SQl9TRVRfQ09ORklHIG51cmI7CisKKyAgICBudXJiLmhlYWRlci5tYWdpYyA9IFVTQl9SRU1P VEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bjb2RlID0gVU5SQl9PUENPREVfU0VUX0NPTkZJ RzsKKyAgICBudXJiLmhlYWRlci5zaXplID0gc2l6ZW9mKG51cmIpOworCisgICAgbnVyYi5jb25m aWcgPSBjb25maWc7CisKKyAgICByZXR1cm4gc2VuZChmZCwgJm51cmIsIHNpemVvZihudXJiKSwg MCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3JlbW90ZV9zZXRfaW50ZXJmYWNlKGludCBmZCwgc3Ry dWN0IHVzYmRldmZzX3NldGludGVyZmFjZSAqc2kpCit7CisgICAgVU5SQl9TRVRfSU5URVJGQUNF IG51cmI7CisKKyAgICBudXJiLmhlYWRlci5tYWdpYyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAg bnVyYi5oZWFkZXIub3Bjb2RlID0gVU5SQl9PUENPREVfU0VUX0lOVEVSRkFDRTsKKyAgICBudXJi LmhlYWRlci5zaXplID0gc2l6ZW9mKG51cmIpOworCisgICAgbnVyYi5pZmFjZSA9IHNpLT5pbnRl cmZhY2U7CisgICAgbnVyYi5hbHRzZXR0aW5nID0gc2ktPmFsdHNldHRpbmc7CisKKyAgICByZXR1 cm4gc2VuZChmZCwgJm51cmIsIHNpemVvZihudXJiKSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdXNi X3JlbW90ZV9zdWJtaXRfdXJiKGludCBmZCwgc3RydWN0IHVzYmRldmZzX3VyYiAqdXJiKQorewor ICAgIFVOUkJfU1VCTUlUX1VSQiBudXJiOworICAgIGludCByZXQ7CisKKyAgICBudXJiLmhlYWRl ci5tYWdpYyA9IFVTQl9SRU1PVEVfTUFHSUM7CisgICAgbnVyYi5oZWFkZXIub3Bjb2RlID0gVU5S Ql9PUENPREVfU1VCTUlUX1VSQjsKKyAgICBudXJiLmhlYWRlci5zaXplID0gc2l6ZW9mKG51cmIp ICsgdXJiLT5idWZmZXJfbGVuZ3RoOworCisgICAgZmlsbF9udXJiKCZudXJiLnVyYiwgdXJiKTsK KworICAgIHJldCA9IHNlbmQoZmQsICZudXJiLCBzaXplb2YobnVyYiksIDApOworICAgIGlmIChy ZXQgPiAwKSB7CisgICAgICAgIHJldCA9IHNlbmQoZmQsIHVyYi0+YnVmZmVyLCB1cmItPmJ1ZmZl cl9sZW5ndGgsIDApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCB1c2JfcmVt b3RlX2lvY3RsKGludCBmZCwgdW5zaWduZWQgbG9uZyBpbnQgcmVxdWVzdCwgLi4uKQoreworICAg IHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCByZXF1ZXN0KTsKKyAgICBpbnQgcmV0 OworCisgICAgc3dpdGNoIChyZXF1ZXN0KSB7CisgICAgY2FzZSBVU0JERVZGU19DTEFJTUlOVEVS RkFDRToKKyAgICAgICAgcmV0ID0gdXNiX3JlbW90ZV9jbGFpbV9pbnRlcmZhY2UoZmQsICp2YV9h cmcoYXJncywgaW50KikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVTQkRFVkZTX0NMRUFS X0hBTFQ6CisgICAgICAgIHJldCA9IHVzYl9yZW1vdGVfY2xlYXJfaGFsdChmZCwgKnZhX2FyZyhh cmdzLCBjaGFyKikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVTQkRFVkZTX0NPTk5FQ1RJ TkZPOgorICAgICAgICByZXQgPSB1c2JfcmVtb3RlX2Nvbm5lY3RfaW5mbyhmZCwgdmFfYXJnKGFy Z3MsIHN0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbyAqKSk7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgVVNCREVWRlNfQ09OVFJPTDoKKyAgICAgICAgcmV0ID0gdXNiX3JlbW90ZV9jb250cm9s KGZkLCB2YV9hcmcoYXJncywgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlciAqKSk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgVVNCREVWRlNfRElTQ0FSRFVSQjoKKyAgICAgICAgcmV0ID0g dXNiX3JlbW90ZV9kaXNjYXJkX3VyYihmZCwgdmFfYXJnKGFyZ3MsIHN0cnVjdCB1c2JkZXZmc191 cmIgKikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVTQkRFVkZTX0lPQ1RMOgorICAgICAg ICByZXQgPSB1c2JfcmVtb3RlX3VzYl9pb2N0bChmZCwgdmFfYXJnKGFyZ3MsIHN0cnVjdCB1c2Jk ZXZmc19pb2N0bCAqKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVVNCREVWRlNfUkVBUFVS Qk5ERUxBWToKKyAgICAgICAgcmV0ID0gdXNiX3JlbW90ZV9yZWFkX3VyYihmZCwgdmFfYXJnKGFy Z3MsIHN0cnVjdCB1c2JkZXZmc191cmIgKikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVT QkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0U6CisgICAgICAgIHJldCA9IHVzYl9yZW1vdGVfcmVsZWFz ZV9pbnRlcmZhY2UoZmQsICp2YV9hcmcoYXJncywgaW50KikpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFVTQkRFVkZTX1JFU0VUOgorICAgICAgICByZXQgPSB1c2JfcmVtb3RlX3Jlc2V0KGZk KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OOgor ICAgICAgICByZXQgPSB1c2JfcmVtb3RlX3NldF9jb25maWcoZmQsICp2YV9hcmcoYXJncywgaW50 KikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVTQkRFVkZTX1NFVElOVEVSRkFDRToKKyAg ICAgICAgcmV0ID0gdXNiX3JlbW90ZV9zZXRfaW50ZXJmYWNlKGZkLCB2YV9hcmcoYXJncywgc3Ry dWN0IHVzYmRldmZzX3NldGludGVyZmFjZSAqKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug VVNCREVWRlNfU1VCTUlUVVJCOgorICAgICAgICByZXQgPSB1c2JfcmVtb3RlX3N1Ym1pdF91cmIo ZmQsIHZhX2FyZyhhcmdzLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICopKTsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJodXNiOiB1bmtub3duIGlv Y3RsKCkgcmVxdWVzdCAlbGRcbiIsIHJlcXVlc3QpOworICAgICAgICByZXQgPSAtMTsKKyAgICB9 CisKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjZWxzZQorCitp bnQgdXNiX3JlbW90ZV9pb2N0bChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgaW50IHJlcXVlc3QsIC4u LikKK3sKKyAgICByZXR1cm4gLTE7Cit9CisKKyNlbmRpZiAvLyBkZWZpbmVkKF9fbGludXhfXykK ZGlmZiAtLWdpdCBhL3VzYi1yZW1vdGUuaCBiL3VzYi1yZW1vdGUuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi41MjY5NGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdXNiLXJlbW90 ZS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogTGludXggcmVtb3RlIFVTQiByZWRpcmVjdG9y CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEZhYnJpY2UgQmVsbGFyZAorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg cmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAq LworCisjaWZuZGVmIF9VU0JfUkVNT1RFX0gKKyNkZWZpbmUgX1VTQl9SRU1PVEVfSAorCisjZGVm aW5lIFVTQl9SRU1PVEVfTUFHSUMgKCoodWludDMyX3QqKSJSVVNCIikKKworI2RlZmluZSBQUk9E VUNUX05BTUVfU1ogMzIKKworZW51bSB7CisgICAgVU5SQl9PUENPREVfTkVXX0RFVklDRSwKKyAg ICBVTlJCX09QQ09ERV9DTEFJTV9JTlRFUkZBQ0UsCisgICAgVU5SQl9PUENPREVfQ0xFQVJfSEFM VCwKKyAgICBVTlJCX09QQ09ERV9DT05ORUNUSU9OX0lORk8sCisgICAgVU5SQl9PUENPREVfRElT Q0FSRF9VUkIsCisgICAgVU5SQl9PUENPREVfSU9fQ1RSTCwKKyAgICBVTlJCX09QQ09ERV9HRVRf SU5URVJGQUNFLAorICAgIFVOUkJfT1BDT0RFX1VTQl9DT05UUk9MLAorICAgIFVOUkJfT1BDT0RF X1JFTEVBU0VfSU5URVJGQUNFLAorICAgIFVOUkJfT1BDT0RFX1JFU0VUX0RFVklDRSwKKyAgICBV TlJCX09QQ09ERV9TVUJNSVRfVVJCLAorICAgIFVOUkJfT1BDT0RFX1NFVF9DT05GSUcsCisgICAg VU5SQl9PUENPREVfU0VUX0lOVEVSRkFDRSwKK307CisKK3R5cGVkZWYgc3RydWN0IFVOUkJfSEVB REVSIHsKKyAgICB1aW50MzJfdCAgICBtYWdpYzsKKyAgICB1aW50MzJfdCAgICBzaXplOworICAg IHVpbnQzMl90ICAgIG9wY29kZTsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBVTlJCX0hF QURFUiwgKlBVTlJCX0hFQURFUjsKKwordHlwZWRlZiBzdHJ1Y3QgVU5SQl9VUkIgeworICAgIHVp bnQ2NF90ICAgIG9wYXF1ZTsKKyAgICB1aW50OF90ICAgICB0eXBlOworICAgIHVpbnQ4X3QgICAg IGVuZHBvaW50OworICAgIGludDMyX3QgICAgIHN0YXR1czsKKyAgICBpbnQzMl90ICAgICBmbGFn czsKKyAgICBpbnQzMl90ICAgICBudW1iZXJfb2ZfcGFja2V0czsKKyAgICBpbnQzMl90ICAgICBs ZW5ndGg7CisgICAgdWludDhfdCAgICAgYnVmZmVyW107CisKK30gX19hdHRyaWJ1dGVfXygocGFj a2VkKSkgVU5SQl9VUkIsICpQVU5SQl9VUkI7CisKK3R5cGVkZWYgc3RydWN0IFVOUkJfTkVXX0RF VklDRSB7CisgICAgVU5SQl9IRUFERVIgaGVhZGVyOworICAgIGludDMyX3QgICAgIGJ1c19udW07 CisgICAgaW50MzJfdCAgICAgYWRkcjsKKyAgICB1aW50OF90ICAgICBkZXZfbmFtZVtQUk9EVUNU X05BTUVfU1pdOworICAgIGludDMyX3QgICAgIGRlc2NyX2xlbjsKKyAgICB1aW50OF90ICAgICBk ZXNjcltdOworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFVOUkJfTkVXX0RFVklDRSwgKlBV TlJCX05FV19ERVZJQ0U7CisKK3R5cGVkZWYgc3RydWN0IFVOUkJfQ0xBSU1fSU5URVJGQUNFIHsK KyAgICBVTlJCX0hFQURFUiBoZWFkZXI7CisgICAgdWludDMyX3QgICAgaWZhY2U7CisKK30gX19h dHRyaWJ1dGVfXygocGFja2VkKSkgVU5SQl9DTEFJTV9JTlRFUkZBQ0UsICpQVU5SQl9DTEFJTV9J TlRFUkZBQ0U7CisKK3R5cGVkZWYgc3RydWN0IFVOUkJfQ0xFQVJfSEFMVCB7CisgICAgVU5SQl9I RUFERVIgaGVhZGVyOworICAgIHVpbnQ4X3QgICAgIGVuZHBvaW50OworCit9IF9fYXR0cmlidXRl X18oKHBhY2tlZCkpIFVOUkJfQ0xFQVJfSEFMVCwgKlBVTlJCX0NMRUFSX0hBTFQ7CisKK3R5cGVk ZWYgc3RydWN0IFVOUkJfQ09OTkVDVElPTl9JTkZPIHsKKyAgICBVTlJCX0hFQURFUiBoZWFkZXI7 CisgICAgdWludDMyX3QgICAgZGV2bnVtOworICAgIHVpbnQ4X3QgICAgIHNsb3c7CisKK30gX19h dHRyaWJ1dGVfXygocGFja2VkKSkgVU5SQl9DT05ORUNUSU9OX0lORk8sICpQVU5SQl9DT05ORUNU SU9OX0lORk87CisKK3R5cGVkZWYgc3RydWN0IFVOUkJfRElTQ0FSRF9VUkIgeworICAgIFVOUkJf SEVBREVSIGhlYWRlcjsKKyAgICBVTlJCX1VSQiAgICB1cmI7CisKK30gX19hdHRyaWJ1dGVfXygo cGFja2VkKSkgVU5SQl9ESVNDQVJEX1VSQiwgKlBVTlJCX0RJU0NBUkRfVVJCOworCit0eXBlZGVm IHN0cnVjdCBVTlJCX0lPX0NUUkwgeworICAgIFVOUkJfSEVBREVSIGhlYWRlcjsKKyAgICB1aW50 MzJfdCAgICBpZm5vOworICAgIHVpbnQzMl90ICAgIGlvY3RsX2NvZGU7CisgICAgdWludDY0X3Qg ICAgZGF0YTsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBVTlJCX0lPX0NUUkwsICpQVU5S Ql9JT19DVFJMOworCit0eXBlZGVmIHN0cnVjdCBVTlJCX0dFVF9JTlRFUkZBQ0UgeworICAgIFVO UkJfSEVBREVSIGhlYWRlcjsKKyAgICB1aW50OF90ICAgICBjb25maWd1cmF0aW9uOworICAgIHVp bnQzMl90ICAgIG51bWJlcl9vZl9pZmFjZXM7CisgICAgdWludDhfdCAgICAgYWx0X2lmYWNlW107 CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVU5SQl9HRVRfSU5URVJGQUNFLCAqUFVOUkJf R0VUX0lOVEVSRkFDRTsKKwordHlwZWRlZiBzdHJ1Y3QgVU5SQl9VU0JfQ09OVFJPTCB7CisgICAg VU5SQl9IRUFERVIgaGVhZGVyOworICAgIHVpbnQ4X3QgICAgIHR5cGU7CisgICAgdWludDhfdCAg ICAgcmVxdWVzdDsKKyAgICB1aW50MTZfdCAgICB2YWx1ZTsKKyAgICB1aW50MTZfdCAgICBpbmRl eDsKKyAgICB1aW50MTZfdCAgICBsZW5ndGg7CisgICAgdWludDMyX3QgICAgdGltZW91dDsgIC8q IGluIG1pbGxpc2Vjb25kcyAqLworICAgIHVpbnQ4X3QgICAgIGRhdGFbXTsKKworfSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKSBVTlJCX1VTQl9DT05UUk9MLCAqUFVOUkJfVVNCX0NPTlRST0w7CisK K3R5cGVkZWYgc3RydWN0IFVOUkJfU1VCTUlUX1VSQiB7CisgICAgVU5SQl9IRUFERVIgaGVhZGVy OworICAgIFVOUkJfVVJCICAgIHVyYjsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBVTlJC X1NVQk1JVF9VUkIsICpQVU5SQl9TVUJNSVRfVVJCOworCit0eXBlZGVmIHN0cnVjdCBVTlJCX1JF TEVBU0VfSU5URVJGQUNFIHsKKyAgICBVTlJCX0hFQURFUiBoZWFkZXI7CisgICAgdWludDMyX3Qg ICAgaWZhY2U7CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVU5SQl9SRUxFQVNFX0lOVEVS RkFDRSwgKlBVTlJCX1JFTEVBU0VfSU5URVJGQUNFOworCit0eXBlZGVmIHN0cnVjdCBVTlJCX1JF U0VUX0RFVklDRSB7CisgICAgVU5SQl9IRUFERVIgaGVhZGVyOworCit9IF9fYXR0cmlidXRlX18o KHBhY2tlZCkpIFVOUkJfUkVTRVRfREVWSUNFLCAqUFVOUkJfUkVTRVRfREVWSUNFOworCit0eXBl ZGVmIHN0cnVjdCBVTlJCX1NFVF9DT05GSUcgeworICAgIFVOUkJfSEVBREVSIGhlYWRlcjsKKyAg ICB1aW50MzJfdCAgICBjb25maWc7CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVU5SQl9T RVRfQ09ORklHLCAqUFVOUkJfU0VUX0NPTkZJRzsKKwordHlwZWRlZiBzdHJ1Y3QgVU5SQl9TRVRf SU5URVJGQUNFIHsKKyAgICBVTlJCX0hFQURFUiBoZWFkZXI7CisgICAgdWludDMyX3QgICAgaWZh Y2U7CisgICAgdWludDMyX3QgICAgYWx0c2V0dGluZzsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKSBVTlJCX1NFVF9JTlRFUkZBQ0UsICpQVU5SQl9TRVRfSU5URVJGQUNFOworCisjZW5kaWYg Ly8gX1VTQl9SRU1PVEVfSApkaWZmIC0tZ2l0IGEvdmwuYyBiL3ZsLmMKaW5kZXggYzk0ZmRjMC4u YjE0MGJkMyAxMDA2NDQKLS0tIGEvdmwuYworKysgYi92bC5jCkBAIC03OTAyLDYgKzc5MDIsOCBA QCBzdGF0aWMgdm9pZCBoZWxwKGludCBleGl0Y29kZSkKICNlbmRpZgogICAgICAgICAgICAiLXVz YiAgICAgICAgICAgIGVuYWJsZSB0aGUgVVNCIGRyaXZlciAod2lsbCBiZSB0aGUgZGVmYXVsdCBz b29uKVxuIgogICAgICAgICAgICAiLXVzYmRldmljZSBuYW1lIGFkZCB0aGUgaG9zdCBvciBndWVz dCBVU0IgZGV2aWNlICduYW1lJ1xuIgorICAgICAgICAgICAiLXVzYnJlbW90ZSBob3N0bmFtZTpw b3J0XG4iCisgICAgICAgICAgICIgICAgICAgICAgICAgICAgZW5hYmxlIGEgcmVtb3RlIFVTQiBz ZXJ2ZXIgKFVTQiBvdmVyIG5ldHdvcmspXG4iCiAjaWYgZGVmaW5lZChUQVJHRVRfUFBDKSB8fCBk ZWZpbmVkKFRBUkdFVF9TUEFSQykKICAgICAgICAgICAgIi1nIFd4SFt4REVQVEhdICBTZXQgdGhl IGluaXRpYWwgZ3JhcGhpY2FsIHJlc29sdXRpb24gYW5kIGRlcHRoXG4iCiAjZW5kaWYKQEAgLTgw ODAsNiArODA4Miw3IEBAIGVudW0gewogICAgIFFFTVVfT1BUSU9OX3dpbjJrX2hhY2ssCiAgICAg UUVNVV9PUFRJT05fdXNiLAogICAgIFFFTVVfT1BUSU9OX3VzYmRldmljZSwKKyAgICBRRU1VX09Q VElPTl91c2JyZW1vdGUsCiAgICAgUUVNVV9PUFRJT05fc21wLAogICAgIFFFTVVfT1BUSU9OX3Zu YywKICAgICBRRU1VX09QVElPTl9ub19hY3BpLApAQCAtODE4MSw2ICs4MTg0LDcgQEAgc3RhdGlj IGNvbnN0IFFFTVVPcHRpb24gcWVtdV9vcHRpb25zW10gPSB7CiAgICAgeyAicGlkZmlsZSIsIEhB U19BUkcsIFFFTVVfT1BUSU9OX3BpZGZpbGUgfSwKICAgICB7ICJ3aW4yay1oYWNrIiwgMCwgUUVN VV9PUFRJT05fd2luMmtfaGFjayB9LAogICAgIHsgInVzYmRldmljZSIsIEhBU19BUkcsIFFFTVVf T1BUSU9OX3VzYmRldmljZSB9LAorICAgIHsgInVzYnJlbW90ZSIsIEhBU19BUkcsIFFFTVVfT1BU SU9OX3VzYnJlbW90ZSB9LAogICAgIHsgInNtcCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX3NtcCB9 LAogICAgIHsgInZuYyIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX3ZuYyB9LAogI2lmZGVmIENPTkZJ R19DVVJTRVMKQEAgLTg0OTcsNiArODUwMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKICAgICBjb25zdCBjaGFyICpjcHVfbW9kZWw7CiAgICAgY29uc3QgY2hhciAqdXNiX2Rl dmljZXNbTUFYX1VTQl9DTURMSU5FXTsKICAgICBpbnQgdXNiX2RldmljZXNfaW5kZXg7CisgICAg Y29uc3QgY2hhciAqdXNiX2hvc3RuYW1lID0gTlVMTDsKICAgICBpbnQgZmRzWzJdOwogICAgIGlu dCB0Yl9zaXplOwogICAgIGNvbnN0IGNoYXIgKnBpZF9maWxlID0gTlVMTDsKQEAgLTg5OTQsNiAr ODk5OSwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgICAgICAg ICAgdXNiX2RldmljZXNbdXNiX2RldmljZXNfaW5kZXhdID0gb3B0YXJnOwogICAgICAgICAgICAg ICAgIHVzYl9kZXZpY2VzX2luZGV4Kys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIFFFTVVfT1BUSU9OX3VzYnJlbW90ZToKKyAgICAgICAgICAgICAgICB1c2JfZW5h YmxlZCA9IDE7CisgICAgICAgICAgICAgICAgdXNiX2hvc3RuYW1lID0gb3B0YXJnOworICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9zbXA6CiAgICAg ICAgICAgICAgICAgc21wX2NwdXMgPSBhdG9pKG9wdGFyZyk7CiAgICAgICAgICAgICAgICAgaWYg KHNtcF9jcHVzIDwgMSB8fCBzbXBfY3B1cyA+IE1BWF9DUFVTKSB7CkBAIC05NDIyLDYgKzk0MzEs MTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAgICAgICAgICAg ICAgICAgdXNiX2RldmljZXNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg ICAgaWYgKHVzYl9ob3N0bmFtZSkgeworICAgICAgICAgICAgdXNiX3JlbW90ZV9zdGFydCh1c2Jf aG9zdG5hbWUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGRpc3BsYXlfc3RhdGUuZHB5 X3JlZnJlc2gpIHsK ------_=_NextPart_001_01C927A8.DBBED8BF-- From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kmotp-0007ae-PT for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:09:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kmoto-0007Zu-7p for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:09:17 -0400 Received: from [199.232.76.173] (port=50053 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kmotn-0007Zn-Um for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:09:15 -0400 Received: from mail.codesourcery.com ([65.74.133.4]:46202) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Kmotn-0005UE-He for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:09:15 -0400 From: Paul Brook Subject: Re: [Qemu-devel] [PATCH] USB over network Date: Mon, 6 Oct 2008 13:09:09 +0100 References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200810061309.10270.paul@codesourcery.com> 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 Cc: Gal Hammer > Attached is a preliminary patch which add QEmu the ability to use local > USB devices over network. It should work with DOK devices and might work > with web cameras. Apart from anything else, it's missing documentation. It looks like you have to start qemu with magic options on the remote machine? This seems a very bad solution. The remote stub should be a separate application which communicated via a documented protocol. Preferably this should be a standardised protocol that is/can be suppoorted by third party devices. Paul From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kmp72-0004xI-1Q for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:22:56 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kmp71-0004wK-1V for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:22:55 -0400 Received: from [199.232.76.173] (port=42611 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kmp70-0004wA-Ty for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:22:54 -0400 Received: from mail.codesourcery.com ([65.74.133.4]:51998) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Kmp70-0003R8-Kp for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:22:54 -0400 From: Paul Brook Subject: Re: [Qemu-devel] [PATCH] USB over network Date: Mon, 6 Oct 2008 13:22:50 +0100 References: <200810061309.10270.paul@codesourcery.com> In-Reply-To: <200810061309.10270.paul@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200810061322.51341.paul@codesourcery.com> 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 Cc: Gal Hammer On Monday 06 October 2008, Paul Brook wrote: > > Attached is a preliminary patch which add QEmu the ability to use local > > USB devices over network. It should work with DOK devices and might work > > with web cameras. > > Apart from anything else, it's missing documentation. > > It looks like you have to start qemu with magic options on the remote > machine? This seems a very bad solution. The remote stub should be a > separate application which communicated via a documented protocol. > Preferably this should be a standardised protocol that is/can be suppoorted > by third party devices. As a specific example, have you looked at http://usbip.sourceforge.net/ ? It doesn't seem to be particularly active, but it's at least a useful reference point to see whether your remote protocol is sane. Paul From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmpH1-0002tE-UW for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:33:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmpH0-0002sw-Gd for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:33:15 -0400 Received: from [199.232.76.173] (port=47553 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmpH0-0002sr-CU for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:33:14 -0400 Received: from mx1.redhat.com ([66.187.233.31]:34029) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KmpH0-00080u-8H for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:33:14 -0400 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m96CWW5w013157 for ; Mon, 6 Oct 2008 08:32:32 -0400 Received: from file.fab.redhat.com (file.fab.redhat.com [10.33.63.6]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m96CWVDZ011544 for ; Mon, 6 Oct 2008 08:32:31 -0400 Received: from file.fab.redhat.com (localhost.localdomain [127.0.0.1]) by file.fab.redhat.com (8.13.1/8.13.1) with ESMTP id m96CWVoA007301 for ; Mon, 6 Oct 2008 13:32:31 +0100 Received: (from berrange@localhost) by file.fab.redhat.com (8.13.1/8.13.1/Submit) id m96CWVFu007297 for qemu-devel@nongnu.org; Mon, 6 Oct 2008 13:32:31 +0100 Date: Mon, 6 Oct 2008 13:32:31 +0100 From: "Daniel P. Berrange" Subject: Re: [Qemu-devel] [PATCH] USB over network Message-ID: <20081006123230.GP20979@redhat.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Reply-To: "Daniel P. Berrange" , 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 On Mon, Oct 06, 2008 at 04:43:58AM -0700, Gal Hammer wrote: > Hi, > > Attached is a preliminary patch which add QEmu the ability to use local > USB devices over network. It should work with DOK devices and might work > with web cameras. AFAICT, the wire protocol doesn't provide for feature negotiation or versioning, which somewhat limits our ability to extend its capabilities in the future. This is a concern since it is also does not appear to have any kind of security model in the existing impl - QEMU will accept incoming client connections from anywhere. I'd like to see at least an upfront feature negotiation/handshake, such that someone could later add support for authentication and/or encryption, eg by layering in GnuTLS and/or Kerberos via GSSAPI/SASL. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmpQA-0006ip-DH for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:42:42 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmpQ8-0006hG-Rc for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:42:41 -0400 Received: from [199.232.76.173] (port=45751 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmpQ8-0006h7-Gz for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:42:40 -0400 Received: from il.qumranet.com ([212.179.150.194]:38455) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KmpQ7-0004HT-UI for qemu-devel@nongnu.org; Mon, 06 Oct 2008 08:42:40 -0400 Message-ID: <48EA07CD.9090702@il.qumranet.com> Date: Mon, 06 Oct 2008 14:42:53 +0200 From: Dor Laor MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] USB over network References: <200810061309.10270.paul@codesourcery.com> <200810061322.51341.paul@codesourcery.com> In-Reply-To: <200810061322.51341.paul@codesourcery.com> Content-Type: multipart/alternative; boundary="------------000607000507010608020800" 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 Cc: Gal Hammer This is a multi-part message in MIME format. --------------000607000507010608020800 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Paul Brook wrote: > On Monday 06 October 2008, Paul Brook wrote: > >>> Attached is a preliminary patch which add QEmu the ability to use local >>> USB devices over network. It should work with DOK devices and might work >>> with web cameras. >>> >> Apart from anything else, it's missing documentation. >> >> It looks like you have to start qemu with magic options on the remote >> machine? This seems a very bad solution. The remote stub should be a >> separate application which communicated via a documented protocol. >> Preferably this should be a standardised protocol that is/can be suppoorted >> by third party devices. >> > > As a specific example, have you looked at http://usbip.sourceforge.net/ ? > It doesn't seem to be particularly active, but it's at least a useful > reference point to see whether your remote protocol is sane. > > Pau Indeed its missing documentation and the protocol is far from being defined, plus it should be a separate application. But, its a good step forward in usb remoting, the protocol leverage existing knowledge from usbip but it is an opportunity to advance in cumulative steps. The intention is to make the usb remoting transparent to the guest. The application should be stand alone but can share code with qemu, maybe similar to qemu-img application (can it?). Thanks for the feedback, any additional feedback is welcomed. --------------000607000507010608020800 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Paul Brook wrote:
On Monday 06 October 2008, Paul Brook wrote:
  
Attached is a preliminary  patch which add QEmu the ability to use local
USB devices over network. It should work with DOK devices and might work
with web cameras.
      
Apart from anything else, it's missing documentation.

It looks like you have to start qemu with magic options on the remote
machine? This seems a very bad solution. The remote stub should be a
separate application which communicated via a documented protocol.
Preferably this should be a standardised protocol that is/can be suppoorted
by third party devices.
    

As a specific example, have you looked at  http://usbip.sourceforge.net/ ?
It doesn't seem to be particularly active, but it's at least a useful 
reference point to see whether your remote protocol is sane.

Pau

Indeed its missing documentation and the protocol is far from being defined, plus it should be a separate application.
But, its a good step forward in usb remoting, the protocol leverage existing knowledge from usbip but it is an opportunity
to advance in cumulative steps.

The intention is to make the usb remoting transparent to the guest.
The application should be stand alone but can share code with qemu, maybe similar to qemu-img application (can it?).

Thanks for the feedback, any additional feedback is welcomed.
--------------000607000507010608020800-- From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kmpwe-0004Vg-Bm for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:16:16 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kmpwc-0004VQ-GU for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:16:15 -0400 Received: from [199.232.76.173] (port=54317 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kmpwc-0004VN-Cd for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:16:14 -0400 Received: from mis011-3.exch011.intermedia.net ([64.78.17.184]:61636) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kmpwc-0003K4-29 for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:16:14 -0400 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Subject: RE: [Qemu-devel] [PATCH] USB over network Date: Mon, 6 Oct 2008 06:15:58 -0700 Message-ID: In-Reply-To: <200810061309.10270.paul@codesourcery.com> References: <200810061309.10270.paul@codesourcery.com> From: "Gal Hammer" 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 > Apart from anything else, it's missing documentation. I am aware of that. I'll document the work I've done so far and include the open issues that you (and others) wrote. =20 > It looks like you have to start qemu with magic options on the remote > machine? No, qemu should be started with "-usbremote host:port" command line option. This will start a listener which wait for incoming remote connections. The remote connection is established with the qemu-usbd application. The qemu-usbd is executed on the local machine, the one that the USB device is attached to. > This seems a very bad solution. The remote stub should be a separate > application which communicated via a documented protocol. Preferably > this > should be a standardised protocol that is/can be suppoorted by third > party > devices. I wouldn't say that this is a "very bad" solution. A "bad" solution is good enough. :-) At the moment, the protocol is a simple what-usb-linux-want-usb-linux-get approach. I wrote it that way because I couldn't find a standardized protocol for an USB-over-IP (I'm familiar with http://usbip.sourceforge.net project). This also allowed me to use most of the code in usb-linux.c file thereby reducing code duplications. Gal. From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmqCV-0003pB-TG for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:32:39 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmqCU-0003oP-Hf for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:32:39 -0400 Received: from [199.232.76.173] (port=58117 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmqCU-0003oG-8E for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:32:38 -0400 Received: from mail.codesourcery.com ([65.74.133.4]:55280) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KmqCT-0002m0-0B for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:32:37 -0400 From: Paul Brook Subject: Re: [Qemu-devel] [PATCH] USB over network Date: Mon, 6 Oct 2008 14:32:33 +0100 References: <200810061309.10270.paul@codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200810061432.33726.paul@codesourcery.com> 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 Cc: Gal Hammer > > It looks like you have to start qemu with magic options on the remote > > machine? > > No, qemu should be started with "-usbremote host:port" command line > option. This will start a listener which wait for incoming remote > connections. The remote connection is established with the qemu-usbd > application. The qemu-usbd is executed on the local machine, the one > that the USB device is attached to. I don't see any code for building qemu-usbd. > At the moment, the protocol is a simple > what-usb-linux-want-usb-linux-get approach The wire protocol (and the qemu end of the code) should not be linux specific. Was this code really written by Fabrice Bellard? Paul From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmqL6-0006Yq-IB for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:41:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmqL4-0006Xs-Si for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:41:32 -0400 Received: from [199.232.76.173] (port=51337 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmqL4-0006Xm-I3 for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:41:30 -0400 Received: from mail-gx0-f19.google.com ([209.85.217.19]:51129) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KmqL4-0006uj-5I for qemu-devel@nongnu.org; Mon, 06 Oct 2008 09:41:30 -0400 Received: by gxk12 with SMTP id 12so5473882gxk.10 for ; Mon, 06 Oct 2008 06:41:28 -0700 (PDT) Message-ID: <48EA1585.90804@codemonkey.ws> Date: Mon, 06 Oct 2008 08:41:25 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] USB over network References: <200810061309.10270.paul@codesourcery.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 Gal Hammer wrote: >> Apart from anything else, it's missing documentation. >> > > I am aware of that. I'll document the work I've done so far and include > the open issues that you (and others) wrote. > > >> It looks like you have to start qemu with magic options on the remote >> machine? >> > > No, qemu should be started with "-usbremote host:port" command line > option. This will start a listener which wait for incoming remote > connections. The remote connection is established with the qemu-usbd > application. The qemu-usbd is executed on the local machine, the one > that the USB device is attached to. > I think it would be better to support a push instead of a pull model. For instance, something like: -usbdevice remote:host:port That connected to something that was listening on the machine that had the USB device. If you really wanted a server, I'd suggest a syntax like: -usbdevice remote:host:port,server So at a high level, what's functional now, and how much work is needed to be completely functional? Is there anything that isn't going to work because of fundamental issues? Regards, Anthony Liguori > Gal. > > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kmqx1-00016D-LY for qemu-devel@nongnu.org; Mon, 06 Oct 2008 10:20:43 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kmqwz-00014d-HU for qemu-devel@nongnu.org; Mon, 06 Oct 2008 10:20:43 -0400 Received: from [199.232.76.173] (port=44834 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kmqwz-00014a-6G for qemu-devel@nongnu.org; Mon, 06 Oct 2008 10:20:41 -0400 Received: from mis011-1.exch011.intermedia.net ([64.78.17.182]:12508) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kmqwy-0006eD-FM for qemu-devel@nongnu.org; Mon, 06 Oct 2008 10:20:41 -0400 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Subject: RE: [Qemu-devel] [PATCH] USB over network Date: Mon, 6 Oct 2008 07:20:21 -0700 Message-ID: In-Reply-To: <48EA1585.90804@codemonkey.ws> References: <200810061309.10270.paul@codesourcery.com> <48EA1585.90804@codemonkey.ws> From: "Gal Hammer" 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 > I think it would be better to support a push instead of a pull model. > For instance, something like: >=20 > -usbdevice remote:host:port >=20 > That connected to something that was listening on the machine that had > the USB device. If you really wanted a server, I'd suggest a syntax > like: >=20 > -usbdevice remote:host:port,server Thanks for the idea. I'll consider it. Please note that there might be a problem with firewalls or NAT when switching the direction from vnc->qemu to qemu->vnc. =20 > So at a high level, what's functional now, and how much work is needed > to be completely functional? Is there anything that isn't going to > work > because of fundamental issues? It is functional and work with normal bulk transfers (for example DOK). It should work with web cameras (isochronous) but I still need to test it. Gal. From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kmreb-0005Ym-5d for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:05:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmreY-0005Y9-GO for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:05:43 -0400 Received: from [199.232.76.173] (port=59066 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmreY-0005Y6-DJ for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:05:42 -0400 Received: from mail-gx0-f19.google.com ([209.85.217.19]:45124) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KmreX-00025s-T9 for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:05:42 -0400 Received: by gxk12 with SMTP id 12so5621461gxk.10 for ; Mon, 06 Oct 2008 08:05:40 -0700 (PDT) Message-ID: Date: Mon, 6 Oct 2008 18:05:40 +0300 From: "Blue Swirl" Subject: Re: [Qemu-devel] [PATCH] USB over network In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: 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 On 10/6/08, Gal Hammer wrote: > Attached is a preliminary patch which add QEmu the ability to use local USB > devices over network. It should work with DOK devices and might work with > web cameras. How about USB drives or printers, do they work? A few comments: - 'static' can be applied to a lot of functions - instead of including linux/usb_ch9.h, you should define the structures, like in usb-linux.c - while the daemon is linux specific, the remote protocol looks like host OS neutral, so it should not be too tightly tied to usb-linux.c - name __ioctl looks like it could clash with system defines and it's not very descriptive - USB_REMOTE_MAGIC is not endian neutral, or is that the purpose? - upper-case structure names are IMHO ugly Otherwise, great idea! From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KmrwU-0005Qv-UQ for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:24:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KmrwR-0005L8-T5 for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:24:14 -0400 Received: from [199.232.76.173] (port=59569 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KmrwR-0005KK-H7 for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:24:11 -0400 Received: from mx2.suse.de ([195.135.220.15]:47720) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KmrwQ-0001sF-KO for qemu-devel@nongnu.org; Mon, 06 Oct 2008 11:24:11 -0400 Message-ID: <48EA2D91.2060406@suse.de> Date: Mon, 06 Oct 2008 17:24:01 +0200 From: Alexander Graf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] USB over network References: <200810061309.10270.paul@codesourcery.com> <48EA1585.90804@codemonkey.ws> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 Cc: gal@qumranet.com Gal Hammer wrote: >> I think it would be better to support a push instead of a pull model. >> For instance, something like: >> >> -usbdevice remote:host:port >> >> That connected to something that was listening on the machine that had >> the USB device. If you really wanted a server, I'd suggest a syntax >> like: >> >> -usbdevice remote:host:port,server >> > > Thanks for the idea. I'll consider it. Please note that there might be a > problem with firewalls or NAT when switching the direction from > vnc->qemu to qemu->vnc. > If you're worried about VNC, why not integrate this into the VNC protocol? Best case here would of course be to have it in VNC optionally. Alex From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kn82J-0004gt-4z for qemu-devel@nongnu.org; Tue, 07 Oct 2008 04:35:19 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kn82G-0004gY-FH for qemu-devel@nongnu.org; Tue, 07 Oct 2008 04:35:17 -0400 Received: from [199.232.76.173] (port=60153 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kn82G-0004gV-5O for qemu-devel@nongnu.org; Tue, 07 Oct 2008 04:35:16 -0400 Received: from mx20.gnu.org ([199.232.41.8]:19523) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Kn82F-0006UD-IC for qemu-devel@nongnu.org; Tue, 07 Oct 2008 04:35:15 -0400 Received: from mis011-1.exch011.intermedia.net ([64.78.17.182]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kn82E-00081e-IY for qemu-devel@nongnu.org; Tue, 07 Oct 2008 04:35:14 -0400 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: RE: [Qemu-devel] [PATCH] USB over network Date: Tue, 7 Oct 2008 01:34:30 -0700 Message-ID: In-Reply-To: References: From: "Gal Hammer" 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 PiBIb3cgYWJvdXQgVVNCIGRyaXZlcyBvciBwcmludGVycywgZG8gdGhleSB3b3JrPw0KDQpCYXNp Y2FsbHksIGlmIGl0IHdvcmtzIGxvY2FsbHksIGl0IHNob3VsZCB3b3JrIG92ZXIgbmV0d29yay4g VGhlIHJlbW90ZSBmZWF0dXJlIHNob3VsZCBiZSBhcyBnb29kIGFzIHRoZSBxZW11J3MgY3VycmVu dCBzdXBwb3J0IGZvciBVU0IgZW11bGF0aW9uLg0KDQo+IEEgZmV3IGNvbW1lbnRzOg0KPiAtICdz dGF0aWMnIGNhbiBiZSBhcHBsaWVkIHRvIGEgbG90IG9mIGZ1bmN0aW9ucw0KDQpJJ2xsIHNlYXJj aCBmb3IgdGhlc2UuDQoNCj4gLSBpbnN0ZWFkIG9mIGluY2x1ZGluZyBsaW51eC91c2JfY2g5Lmgs IHlvdSBzaG91bGQgZGVmaW5lIHRoZQ0KPiBzdHJ1Y3R1cmVzLCBsaWtlIGluIHVzYi1saW51eC5j DQoNCk5vIHByb2JsZW0uDQoNCj4gLSB3aGlsZSB0aGUgZGFlbW9uIGlzIGxpbnV4IHNwZWNpZmlj LCB0aGUgcmVtb3RlIHByb3RvY29sIGxvb2tzIGxpa2UNCj4gaG9zdCBPUyBuZXV0cmFsLCBzbyBp dCBzaG91bGQgbm90IGJlIHRvbyB0aWdodGx5IHRpZWQgdG8gdXNiLWxpbnV4LmMNCg0KVGhlIHBy b3RvY29sIGlzIHN0aWxsIGluIGl0cyBwcmUtZHJhZnQgc3RhdHVzLg0KDQo+IC0gbmFtZSBfX2lv Y3RsIGxvb2tzIGxpa2UgaXQgY291bGQgY2xhc2ggd2l0aCBzeXN0ZW0gZGVmaW5lcyBhbmQgaXQn cw0KPiBub3QgdmVyeSBkZXNjcmlwdGl2ZQ0KDQpXaWxsIGNoYW5nZWQgKERvIHlvdSBoYXZlIGFu IGlkZWEgaG93IHRvIG5hbWUgaXQ/KS4NCg0KPiAtIFVTQl9SRU1PVEVfTUFHSUMgaXMgbm90IGVu ZGlhbiBuZXV0cmFsLCBvciBpcyB0aGF0IHRoZSBwdXJwb3NlPw0KDQpJIGRpZG4ndCB1bmRlcnN0 YW5kLiBEbyB5b3UgbWVhbiB0aGF0IHRoZSB2YWx1ZSBtaWdodCBjaGFuZ2UgaWYgcWVtdSBpcyBy dW5uaW5nIG9uIGEgZGlmZmVyZW50IHR5cGUgb2YgQ1BVPw0KDQo+IC0gdXBwZXItY2FzZSBzdHJ1 Y3R1cmUgbmFtZXMgYXJlIElNSE8gdWdseQ0KDQpDYW4ndCB0YWtlIHRoZSBXaW5kb3dzJyBjb2Rp bmcgY29udmVyc2lvbiBmcm9tIGEgV2luZG93cyBwcm9ncmFtbWVyIDotKS4gSSdsbCBsb3dlciBj YXNlIHRoZW0uDQogDQo+IE90aGVyd2lzZSwgZ3JlYXQgaWRlYSENCg0KVGhhbmtzLiBCdXQgSSBj YW4ndCB0YWtlIHRoZSBjcmVkaXQgZm9yIGl0Lg0KDQogICAgR2FsLg0KDQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KnGyg-0007co-Ld for qemu-devel@nongnu.org; Tue, 07 Oct 2008 14:08:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KnGyg-0007cR-96 for qemu-devel@nongnu.org; Tue, 07 Oct 2008 14:08:10 -0400 Received: from [199.232.76.173] (port=44522 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KnGyg-0007cN-0Z for qemu-devel@nongnu.org; Tue, 07 Oct 2008 14:08:10 -0400 Received: from fg-out-1718.google.com ([72.14.220.154]:40627) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KnGye-0004sK-W0 for qemu-devel@nongnu.org; Tue, 07 Oct 2008 14:08:09 -0400 Received: by fg-out-1718.google.com with SMTP id l26so4238294fgb.8 for ; Tue, 07 Oct 2008 11:08:05 -0700 (PDT) Message-ID: Date: Tue, 7 Oct 2008 21:08:05 +0300 From: "Blue Swirl" Subject: Re: [Qemu-devel] [PATCH] USB over network In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: 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 On 10/7/08, Gal Hammer wrote: > > How about USB drives or printers, do they work? > > > Basically, if it works locally, it should work over network. The remote feature should be as good as the qemu's current support for USB emulation. > > > > A few comments: > > - 'static' can be applied to a lot of functions > > > I'll search for these. > > > > - instead of including linux/usb_ch9.h, you should define the > > structures, like in usb-linux.c > > > No problem. > > > > - while the daemon is linux specific, the remote protocol looks like > > host OS neutral, so it should not be too tightly tied to usb-linux.c > > > The protocol is still in its pre-draft status. I meant that also Windows and BSD clients could in theory use a USB device from the Linux-only server, so the client end of the protocol should be independent from usb-linux.c. > > - name __ioctl looks like it could clash with system defines and it's > > not very descriptive > > > Will changed (Do you have an idea how to name it?). USBRemoteIOCTLFunc? > > - USB_REMOTE_MAGIC is not endian neutral, or is that the purpose? > > > I didn't understand. Do you mean that the value might change if qemu is running on a different type of CPU? Yes. That would cause problems if the server is different endian from the client. In fact the whole protocol looks like it also assumes that the server and client are same endian.