From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 16/29] xl: split out usb related code Date: Fri, 24 Feb 2017 16:13:01 +0000 Message-ID: <20170224161314.22154-17-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIXu-0006b6-Jq for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:38 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDE5MCAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xzL3hsL3hsX3VzYi5j ICAgICB8IDIyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyMjMgaW5zZXJ0aW9ucygrKSwgMTkxIGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3VzYi5jCgpkaWZmIC0tZ2l0IGEvdG9v bHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCBjMmYyY2EzOGY0Li40NWRk YzI1NWY1IDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtl ZmlsZQpAQCAtMTcsNyArMTcsNyBAQCBDRkxBR1NfWEwgKz0gLVdzaGFkb3cKIAogWExfT0JKUyA9 IHhsLm8geGxfY21kaW1wbC5vIHhsX2NtZHRhYmxlLm8geGxfc3hwLm8geGxfdXRpbHMubwogWExf T0JKUyArPSB4bF90bWVtLm8geGxfcGFyc2UubyB4bF9jcHVwb29sLm8geGxfZmxhc2subwotWExf T0JKUyArPSB4bF92dHBtLm8geGxfYmxvY2subyB4bF9uaWMubworWExfT0JKUyArPSB4bF92dHBt Lm8geGxfYmxvY2subyB4bF9uaWMubyB4bF91c2IubwogCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0g JChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19Y TCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL3hsL3hsX2NtZGlt cGwuYwppbmRleCBlYWI3ODY1YmVmLi4zODZmOTZiNGNjIDEwMDY0NAotLS0gYS90b29scy94bC94 bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCkBAIC0xMjkzLDE5NiArMTI5 Myw2IEBAIGludCBtYWluX2NkX2luc2VydChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgcmV0 dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAotaW50IG1haW5fdXNiY3RybF9hdHRhY2goaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGludCBvcHQsIHJjID0g MDsKLSAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOwotCi0gICAgU1dJVENIX0ZPUkVB Q0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ1c2JjdHJsLWF0dGFjaCIsIDEpIHsKLSAgICAgICAgLyog Tm8gb3B0aW9ucyAqLwotICAgIH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0 aW5kKytdKTsKLQotICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwpOwotCi0g ICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyArK2FyZ3Ys IC0tYXJnYykgewotICAgICAgICBpZiAocGFyc2VfdXNiY3RybF9jb25maWcoJnVzYmN0cmwsICph cmd2KSkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJjID0gbGlieGxfZGV2 aWNlX3VzYmN0cmxfYWRkKGN0eCwgZG9taWQsICZ1c2JjdHJsLCAwKTsKLSAgICBpZiAocmMpIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9kZXZpY2VfdXNiY3RybF9hZGQgZmFpbGVk LlxuIik7Ci0gICAgICAgIHJjID0gMTsKLSAgICB9Ci0KLSAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9kaXNwb3NlKCZ1c2JjdHJsKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWludCBtYWluX3VzYmN0 cmxfZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21pZDsK LSAgICBpbnQgb3B0LCBkZXZpZCwgcmM7Ci0gICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3Ry bDsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidXNiY3RybC1kZXRh Y2giLCAyKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBkb21pZCA9 IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwotICAgIGRldmlkID0gYXRvaShhcmd2W29wdGlu ZCsxXSk7Ci0KLSAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsKLSAgICBp ZiAobGlieGxfZGV2aWRfdG9fZGV2aWNlX3VzYmN0cmwoY3R4LCBkb21pZCwgZGV2aWQsICZ1c2Jj dHJsKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGV2aWNlICVzLlxuIiwg YXJndltvcHRpbmQrMV0pOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByYyA9IGxp YnhsX2RldmljZV91c2JjdHJsX3JlbW92ZShjdHgsIGRvbWlkLCAmdXNiY3RybCwgMCk7Ci0gICAg aWYgKHJjKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX3VzYmN0cmxf cmVtb3ZlIGZhaWxlZC5cbiIpOwotICAgICAgICByYyA9IDE7Ci0gICAgfQotCi0gICAgbGlieGxf ZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNiY3RybCk7Ci0gICAgcmV0dXJuIHJjOwotCi19Ci0K LWludCBtYWluX3VzYmRldl9hdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVp bnQzMl90IGRvbWlkOwotICAgIGludCBvcHQsIHJjOwotICAgIGxpYnhsX2RldmljZV91c2JkZXYg dXNiZGV2OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ1c2JkZXYt YXR0YWNoIiwgMikgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgbGli eGxfZGV2aWNlX3VzYmRldl9pbml0KCZ1c2JkZXYpOwotCi0gICAgZG9taWQgPSB4ZmluZF9kb21h aW4oYXJndltvcHRpbmQrK10pOwotCi0gICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBv cHRpbmQ7IGFyZ2MgPiAwOyArK2FyZ3YsIC0tYXJnYykgewotICAgICAgICBpZiAocGFyc2VfdXNi ZGV2X2NvbmZpZygmdXNiZGV2LCAqYXJndikpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9 Ci0KLSAgICByYyA9IGxpYnhsX2RldmljZV91c2JkZXZfYWRkKGN0eCwgZG9taWQsICZ1c2JkZXYs IDApOwotICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2Rldmlj ZV91c2JkZXZfYWRkIGZhaWxlZC5cbiIpOwotICAgICAgICByYyA9IDE7Ci0gICAgfQotCi0gICAg bGlieGxfZGV2aWNlX3VzYmRldl9kaXNwb3NlKCZ1c2JkZXYpOwotICAgIHJldHVybiByYzsKLX0K LQotaW50IG1haW5fdXNiZGV2X2RldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAg dWludDMyX3QgZG9taWQ7Ci0gICAgaW50IGN0cmwsIHBvcnQ7Ci0gICAgaW50IG9wdCwgcmMgPSAx OwotICAgIGxpYnhsX2RldmljZV91c2JkZXYgdXNiZGV2OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hf T1BUKG9wdCwgIiIsIE5VTEwsICJ1c2JkZXYtZGV0YWNoIiwgMykgewotICAgICAgICAvKiBObyBv cHRpb25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRd KTsKLSAgICBjdHJsID0gYXRvaShhcmd2W29wdGluZCsxXSk7Ci0gICAgcG9ydCA9IGF0b2koYXJn dltvcHRpbmQrMl0pOwotCi0gICAgaWYgKGFyZ2MgLSBvcHRpbmQgPiAzKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBhcmd1bWVudHMuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7 Ci0gICAgfQotCi0gICAgbGlieGxfZGV2aWNlX3VzYmRldl9pbml0KCZ1c2JkZXYpOwotICAgIGlm IChsaWJ4bF9jdHJscG9ydF90b19kZXZpY2VfdXNiZGV2KGN0eCwgZG9taWQsIGN0cmwsIHBvcnQs ICZ1c2JkZXYpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBkZXZpY2UgYXQg Y29udHJvbGxlciAlZCBwb3J0ICVkLlxuIiwKLSAgICAgICAgICAgICAgICBjdHJsLCBwb3J0KTsK LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmMgPSBsaWJ4bF9kZXZpY2VfdXNiZGV2 X3JlbW92ZShjdHgsIGRvbWlkLCAmdXNiZGV2LCAwKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJsaWJ4bF9kZXZpY2VfdXNiZGV2X3JlbW92ZSBmYWlsZWQuXG4iKTsK LSAgICAgICAgcmMgPSAxOwotICAgIH0KLQotICAgIGxpYnhsX2RldmljZV91c2JkZXZfZGlzcG9z ZSgmdXNiZGV2KTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLWludCBtYWluX3VzYmxpc3QoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGxpYnhsX2Rldmlj ZV91c2JjdHJsICp1c2JjdHJsczsKLSAgICBsaWJ4bF91c2JjdHJsaW5mbyB1c2JjdHJsaW5mbzsK LSAgICBpbnQgbnVtY3RybCwgaSwgaiwgb3B0OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgIiIsIE5VTEwsICJ1c2ItbGlzdCIsIDEpIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwot ICAgIH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKLQotICAg IGlmIChhcmdjID4gb3B0aW5kKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBh cmd1bWVudHMuXG4iKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotCi0gICAgdXNiY3RybHMg PSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0KGN0eCwgZG9taWQsICZudW1jdHJsKTsKLSAgICBp ZiAoIXVzYmN0cmxzKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGZvciAoaSA9 IDA7IGkgPCBudW1jdHJsOyArK2kpIHsKLSAgICAgICAgcHJpbnRmKCIlLTZzICUtMTJzICUtM3Mg JS01cyAlLTdzICUtNXNcbiIsCi0gICAgICAgICAgICAgICAgIkRldmlkIiwgIlR5cGUiLCAiQkUi LCAic3RhdGUiLCAidXNiLXZlciIsICJwb3J0cyIpOwotCi0gICAgICAgIGxpYnhsX3VzYmN0cmxp bmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKLQotICAgICAgICBpZiAoIWxpYnhsX2RldmljZV91c2Jj dHJsX2dldGluZm8oY3R4LCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnVzYmN0cmxzW2ldLCAmdXNiY3RybGluZm8pKSB7Ci0gICAgICAgICAgICBwcmludGYoIiUtNmQg JS0xMnMgJS0zZCAlLTVkICUtN2QgJS01ZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgdXNiY3Ry bGluZm8uZGV2aWQsCi0gICAgICAgICAgICAgICAgICAgIGxpYnhsX3VzYmN0cmxfdHlwZV90b19z dHJpbmcodXNiY3RybGluZm8udHlwZSksCi0gICAgICAgICAgICAgICAgICAgIHVzYmN0cmxpbmZv LmJhY2tlbmRfaWQsIHVzYmN0cmxpbmZvLnN0YXRlLAotICAgICAgICAgICAgICAgICAgICB1c2Jj dHJsaW5mby52ZXJzaW9uLCB1c2JjdHJsaW5mby5wb3J0cyk7Ci0KLSAgICAgICAgICAgIGZvciAo aiA9IDE7IGogPD0gdXNiY3RybGluZm8ucG9ydHM7IGorKykgewotICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2JkZXYgdXNiZGV2OwotCi0gICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X3VzYmRldl9pbml0KCZ1c2JkZXYpOwotCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIFBvcnQg JWQ6Iiwgaik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWxpYnhsX2N0cmxwb3J0X3RvX2Rldmlj ZV91c2JkZXYoY3R4LCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNiY3RybGluZm8uZGV2aWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGosICZ1c2JkZXYpKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigiIEJ1cyAlMDN4IERldmljZSAlMDN4XG4iLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNiZGV2LnUuaG9zdGRldi5ob3N0YnVzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgdXNiZGV2LnUuaG9zdGRldi5ob3N0YWRkcik7Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfZGlzcG9zZSgm dXNiZGV2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxpYnhsX3VzYmN0 cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKLSAgICB9Ci0KLSAgICBsaWJ4bF9kZXZpY2Vf dXNiY3RybF9saXN0X2ZyZWUodXNiY3RybHMsIG51bWN0cmwpOwotICAgIHJldHVybiAwOwotfQot CiBpbnQgbWFpbl9jb25zb2xlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICB1aW50MzJf dCBkb21pZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3VzYi5jIGIvdG9vbHMveGwveGxfdXNi LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGM4NzJiOGUyZQotLS0g L2Rldi9udWxsCisrKyBiL3Rvb2xzL3hsL3hsX3VzYi5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgor ICogQ29weXJpZ2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMK KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisg KiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor I2luY2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSA8bGlieGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxs aWJ4bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNp bmNsdWRlICJ4bF9wYXJzZS5oIgorCitpbnQgbWFpbl91c2JjdHJsX2F0dGFjaChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgaW50IG9wdCwgcmMgPSAw OworICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0cmw7CisKKyAgICBTV0lUQ0hfRk9SRUFD SF9PUFQob3B0LCAiIiwgTlVMTCwgInVzYmN0cmwtYXR0YWNoIiwgMSkgeworICAgICAgICAvKiBO byBvcHRpb25zICovCisgICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRp bmQrK10pOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgmdXNiY3RybCk7CisKKyAg ICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9wdGluZDsgYXJnYyA+IDA7ICsrYXJndiwg LS1hcmdjKSB7CisgICAgICAgIGlmIChwYXJzZV91c2JjdHJsX2NvbmZpZygmdXNiY3RybCwgKmFy Z3YpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmMgPSBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9hZGQoY3R4LCBkb21pZCwgJnVzYmN0cmwsIDApOworICAgIGlmIChyYykgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV91c2JjdHJsX2FkZCBmYWlsZWQu XG4iKTsKKyAgICAgICAgcmMgPSAxOworICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2JjdHJs X2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIHJldHVybiByYzsKK30KKworaW50IG1haW5fdXNiY3Ry bF9kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVpbnQzMl90IGRvbWlkOwor ICAgIGludCBvcHQsIGRldmlkLCByYzsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJs OworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ1c2JjdHJsLWRldGFj aCIsIDIpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGRvbWlkID0g eGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7CisgICAgZGV2aWQgPSBhdG9pKGFyZ3Zbb3B0aW5k KzFdKTsKKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwpOworICAgIGlm IChsaWJ4bF9kZXZpZF90b19kZXZpY2VfdXNiY3RybChjdHgsIGRvbWlkLCBkZXZpZCwgJnVzYmN0 cmwpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBkZXZpY2UgJXMuXG4iLCBh cmd2W29wdGluZCsxXSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJjID0gbGli eGxfZGV2aWNlX3VzYmN0cmxfcmVtb3ZlKGN0eCwgZG9taWQsICZ1c2JjdHJsLCAwKTsKKyAgICBp ZiAocmMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9kZXZpY2VfdXNiY3RybF9y ZW1vdmUgZmFpbGVkLlxuIik7CisgICAgICAgIHJjID0gMTsKKyAgICB9CisKKyAgICBsaWJ4bF9k ZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKKyAgICByZXR1cm4gcmM7CisKK30KKwor aW50IG1haW5fdXNiZGV2X2F0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWlu dDMyX3QgZG9taWQ7CisgICAgaW50IG9wdCwgcmM7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiB1 c2JkZXY7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInVzYmRldi1h dHRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBsaWJ4 bF9kZXZpY2VfdXNiZGV2X2luaXQoJnVzYmRldik7CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFp bihhcmd2W29wdGluZCsrXSk7CisKKyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9w dGluZDsgYXJnYyA+IDA7ICsrYXJndiwgLS1hcmdjKSB7CisgICAgICAgIGlmIChwYXJzZV91c2Jk ZXZfY29uZmlnKCZ1c2JkZXYsICphcmd2KSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0K KworICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmRldl9hZGQoY3R4LCBkb21pZCwgJnVzYmRldiwg MCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNl X3VzYmRldl9hZGQgZmFpbGVkLlxuIik7CisgICAgICAgIHJjID0gMTsKKyAgICB9CisKKyAgICBs aWJ4bF9kZXZpY2VfdXNiZGV2X2Rpc3Bvc2UoJnVzYmRldik7CisgICAgcmV0dXJuIHJjOworfQor CitpbnQgbWFpbl91c2JkZXZfZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1 aW50MzJfdCBkb21pZDsKKyAgICBpbnQgY3RybCwgcG9ydDsKKyAgICBpbnQgb3B0LCByYyA9IDE7 CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiB1c2JkZXY7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9P UFQob3B0LCAiIiwgTlVMTCwgInVzYmRldi1kZXRhY2giLCAzKSB7CisgICAgICAgIC8qIE5vIG9w dGlvbnMgKi8KKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0p OworICAgIGN0cmwgPSBhdG9pKGFyZ3Zbb3B0aW5kKzFdKTsKKyAgICBwb3J0ID0gYXRvaShhcmd2 W29wdGluZCsyXSk7CisKKyAgICBpZiAoYXJnYyAtIG9wdGluZCA+IDMpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIGFyZ3VtZW50cy5cbiIpOworICAgICAgICByZXR1cm4gMTsK KyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQoJnVzYmRldik7CisgICAgaWYg KGxpYnhsX2N0cmxwb3J0X3RvX2RldmljZV91c2JkZXYoY3R4LCBkb21pZCwgY3RybCwgcG9ydCwg JnVzYmRldikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGRldmljZSBhdCBj b250cm9sbGVyICVkIHBvcnQgJWQuXG4iLAorICAgICAgICAgICAgICAgIGN0cmwsIHBvcnQpOwor ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByYyA9IGxpYnhsX2RldmljZV91c2JkZXZf cmVtb3ZlKGN0eCwgZG9taWQsICZ1c2JkZXYsIDApOworICAgIGlmIChyYykgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV91c2JkZXZfcmVtb3ZlIGZhaWxlZC5cbiIpOwor ICAgICAgICByYyA9IDE7CisgICAgfQorCisgICAgbGlieGxfZGV2aWNlX3VzYmRldl9kaXNwb3Nl KCZ1c2JkZXYpOworICAgIHJldHVybiByYzsKK30KKworaW50IG1haW5fdXNibGlzdChpbnQgYXJn YywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgbGlieGxfZGV2aWNl X3VzYmN0cmwgKnVzYmN0cmxzOworICAgIGxpYnhsX3VzYmN0cmxpbmZvIHVzYmN0cmxpbmZvOwor ICAgIGludCBudW1jdHJsLCBpLCBqLCBvcHQ7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0 LCAiIiwgTlVMTCwgInVzYi1saXN0IiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisg ICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmQrK10pOworCisgICAg aWYgKGFyZ2MgPiBvcHRpbmQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGFy Z3VtZW50cy5cbiIpOworICAgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICB1c2JjdHJscyA9 IGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QoY3R4LCBkb21pZCwgJm51bWN0cmwpOworICAgIGlm ICghdXNiY3RybHMpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZm9yIChpID0g MDsgaSA8IG51bWN0cmw7ICsraSkgeworICAgICAgICBwcmludGYoIiUtNnMgJS0xMnMgJS0zcyAl LTVzICUtN3MgJS01c1xuIiwKKyAgICAgICAgICAgICAgICAiRGV2aWQiLCAiVHlwZSIsICJCRSIs ICJzdGF0ZSIsICJ1c2ItdmVyIiwgInBvcnRzIik7CisKKyAgICAgICAgbGlieGxfdXNiY3RybGlu Zm9faW5pdCgmdXNiY3RybGluZm8pOworCisgICAgICAgIGlmICghbGlieGxfZGV2aWNlX3VzYmN0 cmxfZ2V0aW5mbyhjdHgsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dXNiY3RybHNbaV0sICZ1c2JjdHJsaW5mbykpIHsKKyAgICAgICAgICAgIHByaW50ZigiJS02ZCAl LTEycyAlLTNkICUtNWQgJS03ZCAlLTVkXG4iLAorICAgICAgICAgICAgICAgICAgICB1c2JjdHJs aW5mby5kZXZpZCwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfdXNiY3RybF90eXBlX3RvX3N0 cmluZyh1c2JjdHJsaW5mby50eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgdXNiY3RybGluZm8u YmFja2VuZF9pZCwgdXNiY3RybGluZm8uc3RhdGUsCisgICAgICAgICAgICAgICAgICAgIHVzYmN0 cmxpbmZvLnZlcnNpb24sIHVzYmN0cmxpbmZvLnBvcnRzKTsKKworICAgICAgICAgICAgZm9yIChq ID0gMTsgaiA8PSB1c2JjdHJsaW5mby5wb3J0czsgaisrKSB7CisgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldiB1c2JkZXY7CisKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dXNiZGV2X2luaXQoJnVzYmRldik7CisKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgUG9ydCAl ZDoiLCBqKTsKKworICAgICAgICAgICAgICAgIGlmICghbGlieGxfY3RybHBvcnRfdG9fZGV2aWNl X3VzYmRldihjdHgsIGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2JjdHJsaW5mby5kZXZpZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiwgJnVzYmRldikpIHsKKyAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgQnVzICUwM3ggRGV2aWNlICUwM3hcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2JkZXYudS5ob3N0ZGV2Lmhvc3RidXMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB1c2JkZXYudS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldl9kaXNwb3NlKCZ1 c2JkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGlieGxfdXNiY3Ry bGluZm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOworICAgIH0KKworICAgIGxpYnhsX2RldmljZV91 c2JjdHJsX2xpc3RfZnJlZSh1c2JjdHJscywgbnVtY3RybCk7CisgICAgcmV0dXJuIDA7Cit9CisK KworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0 OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMS4wCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==