From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Grytsov Subject: [PATCH v6 04/13] xl: add PV display device commands Date: Tue, 12 Sep 2017 16:48:09 +0300 Message-ID: <1505224098-19330-5-git-send-email-al1img@gmail.com> References: <1505224098-19330-1-git-send-email-al1img@gmail.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 1drlYG-0005Sy-2o for xen-devel@lists.xenproject.org; Tue, 12 Sep 2017 13:48:32 +0000 Received: by mail-lf0-f67.google.com with SMTP id y15so5396309lfd.0 for ; Tue, 12 Sep 2017 06:48:30 -0700 (PDT) In-Reply-To: <1505224098-19330-1-git-send-email-al1img@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, Oleksandr Grytsov List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgoKQWRk IGNvbW1hbmRzOiB2ZGlzcGwtYXR0YWNoLCB2ZGlzcGwtbGlzdCwgdmRpc3BsLWRldGFjaAphbmQg ZG9tYWluIGNvbmZpZyB2ZGlzcGwgcGFyc2VyCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgR3J5 dHNvdiA8b2xla3NhbmRyX2dyeXRzb3ZAZXBhbS5jb20+CkFja2VkLWJ5OiBXZWkgTGl1IDx3ZWku bGl1MkBjaXRyaXguY29tPgotLS0KIHRvb2xzL3hsL01ha2VmaWxlICAgICAgfCAgIDEgKwogdG9v bHMveGwveGwuaCAgICAgICAgICB8ICAgMyArCiB0b29scy94bC94bF9jbWR0YWJsZS5jIHwgIDE5 ICsrKysrKwogdG9vbHMveGwveGxfcGFyc2UuYyAgICB8ICA3NSArKysrKysrKysrKysrKysrKysr KysrLQogdG9vbHMveGwveGxfcGFyc2UuaCAgICB8ICAgMiArLQogdG9vbHMveGwveGxfdmRpc3Bs LmMgICB8IDE2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiA2IGZpbGVzIGNoYW5nZWQsIDI2MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3ZkaXNwbC5jCgpkaWZmIC0tZ2l0IGEvdG9v bHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCBjODY4ODk5Li40MWEwOWVk IDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtlZmlsZQpA QCAtMjEsNiArMjEsNyBAQCBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5v IHhsX3VzYi5vCiBYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNpLm8geGxfdmNwdS5vIHhsX2Nk cm9tLm8geGxfbWVtLm8KIFhMX09CSlMgKz0geGxfcHNyLm8geGxfaW5mby5vIHhsX2NvbnNvbGUu byB4bF9taXNjLm8KIFhMX09CSlMgKz0geGxfdm1jb250cm9sLm8geGxfc2F2ZXJlc3RvcmUubyB4 bF9taWdyYXRlLm8KK1hMX09CSlMgKz0geGxfdmRpc3BsLm8KIAogJChYTF9PQkpTKTogQ0ZMQUdT ICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cpCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxB R1NfWEwpCmRpZmYgLS1naXQgYS90b29scy94bC94bC5oIGIvdG9vbHMveGwveGwuaAppbmRleCA1 ZDNkMmE0Li45OGQ2MmU5IDEwMDY0NAotLS0gYS90b29scy94bC94bC5oCisrKyBiL3Rvb2xzL3hs L3hsLmgKQEAgLTE2Nyw2ICsxNjcsOSBAQCBpbnQgbWFpbl9ibG9ja2RldGFjaChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpOwogaW50IG1haW5fdnRwbWF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3Yp OwogaW50IG1haW5fdnRwbWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX3Z0 cG1kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZkaXNwbGF0dGFjaChp bnQgYXJnYywgY2hhciAqKmFyZ3YpOworaW50IG1haW5fdmRpc3BsbGlzdChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpOworaW50IG1haW5fdmRpc3BsZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7 CiBpbnQgbWFpbl91c2JjdHJsX2F0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1h aW5fdXNiY3RybF9kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX3VzYmRl dl9hdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hs X2NtZHRhYmxlLmMgYi90b29scy94bC94bF9jbWR0YWJsZS5jCmluZGV4IGJhMDE1OWQuLmQwMzMw Y2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMKKysrIGIvdG9vbHMveGwveGxf Y21kdGFibGUuYwpAQCAtMzc3LDYgKzM3NywyNSBAQCBzdHJ1Y3QgY21kX3NwZWMgY21kX3RhYmxl W10gPSB7CiAgICAgICAiRGVzdHJveSBhIGRvbWFpbidzIHZpcnR1YWwgVFBNIGRldmljZSIsCiAg ICAgICAiPERvbWFpbj4gPERldklkfHV1aWQ+IiwKICAgICB9LAorICAgIHsgInZkaXNwbC1hdHRh Y2giLAorICAgICAgJm1haW5fdmRpc3BsYXR0YWNoLCAxLCAxLAorICAgICAgIkNyZWF0ZSBhIG5l dyB2aXJ0dWFsIGRpc3BsYXkgZGV2aWNlIiwKKyAgICAgICI8RG9tYWluPiBbYmFja2VuZD08QmFj a0RvbWFpbj5dIFtiZS1hbGxvYz08QmFja0FsbG9jPl0gW2Nvbm5lY3RvcnM9JzxDb25uZWN0b3Jz PiddIiwKKyAgICAgICIgICAgQmFja0FsbG9jICAtIHNldCB0byAxIHRvIGlmIGJhY2tlbmQgYWxs b2NhdGVzIGRpc3BsYXkgYnVmZmVyc1xuIgorICAgICAgIiAgICBDb25uZWN0b3JzIC0gbGlzdCBv ZiBjb25uZWN0b3IncyBkZXNjcmlwdGlvbiBpbiBJRDpXeEggZm9ybWF0LFxuIgorICAgICAgIiAg ICAgICAgICAgICAgICAgd2hlcmU6IElEIC0gdW5pcXVlIGNvbm5lY3RvciBJRCwgVyAtIGNvbm5l Y3RvciB3aWR0aCxcbiIKKyAgICAgICIgICAgICAgICAgICAgICAgIEggLSBjb25uZWN0b3IgaGVp Z2h0OiBjb25uZWN0b3JzPSdpZDA6ODAweDYwMDtpZDE6MTAyNHg3NjgnXG4iCisgICAgfSwKKyAg ICB7ICJ2ZGlzcGwtbGlzdCIsCisgICAgICAmbWFpbl92ZGlzcGxsaXN0LCAwLCAwLAorICAgICAg Ikxpc3QgdmlydHVhbCBkaXNwbGF5IGRldmljZXMgZm9yIGEgZG9tYWluIiwKKyAgICAgICI8RG9t YWluKHMpPiIsCisgICAgfSwKKyAgICB7ICJ2ZGlzcGwtZGV0YWNoIiwKKyAgICAgICZtYWluX3Zk aXNwbGRldGFjaCwgMCwgMSwKKyAgICAgICJEZXN0cm95IGEgZG9tYWluJ3MgdmlydHVhbCBkaXNw bGF5IGRldmljZSIsCisgICAgICAiPERvbWFpbj4gPERldklkPiIsCisgICAgfSwKICAgICB7ICJ1 cHRpbWUiLAogICAgICAgJm1haW5fdXB0aW1lLCAwLCAwLAogICAgICAgIlByaW50IHVwdGltZSBm b3IgYWxsL3NvbWUgZG9tYWlucyIsCmRpZmYgLS1naXQgYS90b29scy94bC94bF9wYXJzZS5jIGIv dG9vbHMveGwveGxfcGFyc2UuYwppbmRleCAwMmRkZDJlLi45OTY1YjgzIDEwMDY0NAotLS0gYS90 b29scy94bC94bF9wYXJzZS5jCisrKyBiL3Rvb2xzL3hsL3hsX3BhcnNlLmMKQEAgLTgwNCw2ICs4 MDQsNTEgQEAgaW50IHBhcnNlX3VzYmRldl9jb25maWcobGlieGxfZGV2aWNlX3VzYmRldiAqdXNi ZGV2LCBjaGFyICp0b2tlbikKICAgICByZXR1cm4gMDsKIH0KIAoraW50IHBhcnNlX3ZkaXNwbF9j b25maWcobGlieGxfZGV2aWNlX3ZkaXNwbCAqdmRpc3BsLCBjaGFyICp0b2tlbikKK3sKKyAgICBj aGFyICpvcGFyZzsKKyAgICBsaWJ4bF9zdHJpbmdfbGlzdCBjb25uZWN0b3JzID0gTlVMTDsKKyAg ICBpbnQgaTsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTUFUQ0hfT1BUSU9OKCJiYWNrZW5kIiwg dG9rZW4sIG9wYXJnKSkgeworICAgICAgICB2ZGlzcGwtPmJhY2tlbmRfZG9tbmFtZSA9IHN0cmR1 cChvcGFyZyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImJlLWFsbG9jIiwgdG9rZW4s IG9wYXJnKSkgeworICAgICAgICB2ZGlzcGwtPmJlX2FsbG9jID0gc3RydG91bChvcGFyZywgTlVM TCwgMCk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImNvbm5lY3RvcnMiLCB0b2tlbiwg b3BhcmcpKSB7CisgICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KG9wYXJnLCAi OyIsICZjb25uZWN0b3JzKTsKKworICAgICAgICB2ZGlzcGwtPm51bV9jb25uZWN0b3JzID0gbGli eGxfc3RyaW5nX2xpc3RfbGVuZ3RoKCZjb25uZWN0b3JzKTsKKyAgICAgICAgdmRpc3BsLT5jb25u ZWN0b3JzID0gY2FsbG9jKHZkaXNwbC0+bnVtX2Nvbm5lY3RvcnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnZkaXNwbC0+Y29ubmVjdG9ycykpOworCisgICAg ICAgIGZvcihpID0gMDsgaSA8IHZkaXNwbC0+bnVtX2Nvbm5lY3RvcnM7IGkrKykKKyAgICAgICAg eworICAgICAgICAgICAgY2hhciAqcmVzb2x1dGlvbjsKKworICAgICAgICAgICAgcmMgPSBzcGxp dF9zdHJpbmdfaW50b19wYWlyKGNvbm5lY3RvcnNbaV0sICI6IiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdmRpc3BsLT5jb25uZWN0b3JzW2ldLmlkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNvbHV0aW9uKTsKKworICAgICAg ICAgICAgcmM9IHNzY2FuZihyZXNvbHV0aW9uLCAiJXV4JXUiLCAmdmRpc3BsLT5jb25uZWN0b3Jz W2ldLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAmdmRpc3BsLT5jb25uZWN0b3JzW2ld LmhlaWdodCk7CisgICAgICAgICAgICBpZiAocmMgIT0gMikgeworICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiQ2FuJ3QgcGFyc2UgY29ubmVjdG9yIHJlc29sdXRpb25cbiIpOworICAg ICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBl bHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBcIiVzXCIgaW4g dmRpc3BsIHNwZWNcbiIsIHRva2VuKTsKKyAgICAgICAgcmMgPSAxOyBnb3RvIG91dDsKKyAgICB9 CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBsaWJ4bF9zdHJpbmdfbGlzdF9kaXNwb3NlKCZj b25uZWN0b3JzKTsKKyAgICByZXR1cm4gcmM7Cit9CisKIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEo Y29uc3QgY2hhciAqY29uZmlnX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqY29uZmlnX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25maWdfbGVu LApAQCAtODEzLDcgKzg1OCw3IEBAIHZvaWQgcGFyc2VfY29uZmlnX2RhdGEoY29uc3QgY2hhciAq Y29uZmlnX3NvdXJjZSwKICAgICBsb25nIGwsIHZjcHVzID0gMDsKICAgICBYTFVfQ29uZmlnICpj b25maWc7CiAgICAgWExVX0NvbmZpZ0xpc3QgKmNwdXMsICp2YmRzLCAqbmljcywgKnBjaXMsICpj dmZicywgKmNwdWlkcywgKnZ0cG1zLAotICAgICAgICAgICAgICAgICAgICp1c2JjdHJscywgKnVz YmRldnMsICpwOWRldnM7CisgICAgICAgICAgICAgICAgICAgKnVzYmN0cmxzLCAqdXNiZGV2cywg KnA5ZGV2cywgKnZkaXNwbHM7CiAgICAgWExVX0NvbmZpZ0xpc3QgKmNoYW5uZWxzLCAqaW9wb3J0 cywgKmlycXMsICppb21lbSwgKnZpcmlkaWFuLCAqZHRkZXZzLAogICAgICAgICAgICAgICAgICAg ICptY2FfY2FwczsKICAgICBpbnQgbnVtX2lvcG9ydHMsIG51bV9pcnFzLCBudW1faW9tZW0sIG51 bV9jcHVzLCBudW1fdmlyaWRpYW4sIG51bV9tY2FfY2FwczsKQEAgLTE0ODksNiArMTUzNCwzNCBA QCB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2UsCiAgICAg ICAgIH0KICAgICB9CiAKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidmRpc3Bs IiwgJnZkaXNwbHMsIDAsIDApKSB7CisgICAgICAgIGRfY29uZmlnLT5udW1fdmRpc3BscyA9IDA7 CisgICAgICAgIGRfY29uZmlnLT52ZGlzcGxzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChidWYg PSB4bHVfY2ZnX2dldF9saXN0aXRlbSh2ZGlzcGxzLCBkX2NvbmZpZy0+bnVtX3ZkaXNwbHMpKSAh PSBOVUxMKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsICp2ZGlzcGw7CisgICAg ICAgICAgICBjaGFyICogYnVmMiA9IHN0cmR1cChidWYpOworICAgICAgICAgICAgY2hhciAqcDsK KyAgICAgICAgICAgIHZkaXNwbCA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52ZGlzcGxz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV92 ZGlzcGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2 aWNlX3ZkaXNwbF9pbml0KTsKKyAgICAgICAgICAgIHAgPSBzdHJ0b2sgKGJ1ZjIsICIsIik7Cisg ICAgICAgICAgICB3aGlsZSAocCAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHdoaWxlICgqcCA9PSAnICcpIHArKzsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VfdmRp c3BsX2NvbmZpZyh2ZGlzcGwsIHApKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoYnVmMik7 CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHAgPSBzdHJ0b2sgKE5VTEwsICIsIik7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBmcmVlKGJ1ZjIpOworICAgICAgICAgICAgaWYgKHZkaXNwbC0+bnVtX2Nvbm5lY3RvcnMg PT0gMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQXQgbGVhc3Qgb25lIGNv bm5lY3RvciBzaG91bGQgYmUgc3BlY2lmaWVkLlxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgx KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICgheGx1X2NmZ19n ZXRfbGlzdCAoY29uZmlnLCAiY2hhbm5lbCIsICZjaGFubmVscywgMCwgMCkpIHsKICAgICAgICAg ZF9jb25maWctPm51bV9jaGFubmVscyA9IDA7CiAgICAgICAgIGRfY29uZmlnLT5jaGFubmVscyA9 IE5VTEw7CmRpZmYgLS1naXQgYS90b29scy94bC94bF9wYXJzZS5oIGIvdG9vbHMveGwveGxfcGFy c2UuaAppbmRleCBkYjhiYzNmLi5jYzQ1OWZiIDEwMDY0NAotLS0gYS90b29scy94bC94bF9wYXJz ZS5oCisrKyBiL3Rvb2xzL3hsL3hsX3BhcnNlLmgKQEAgLTMzLDcgKzMzLDcgQEAgaW50IHBhcnNl X3VzYmN0cmxfY29uZmlnKGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLCBjaGFyICp0b2tl bik7CiBpbnQgcGFyc2VfdXNiZGV2X2NvbmZpZyhsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYs IGNoYXIgKnRva2VuKTsKIGludCBwYXJzZV9jcHVyYW5nZShjb25zdCBjaGFyICpjcHUsIGxpYnhs X2JpdG1hcCAqY3B1bWFwKTsKIGludCBwYXJzZV9uaWNfY29uZmlnKGxpYnhsX2RldmljZV9uaWMg Km5pYywgWExVX0NvbmZpZyAqKmNvbmZpZywgY2hhciAqdG9rZW4pOwotCitpbnQgcGFyc2VfdmRp c3BsX2NvbmZpZyhsaWJ4bF9kZXZpY2VfdmRpc3BsICp2ZGlzcGwsIGNoYXIgKnRva2VuKTsKIAog aW50IG1hdGNoX29wdGlvbl9zaXplKGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IGxlbiwKICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICphcmcsIGNoYXIgKiphcmdvcHQpOwpkaWZmIC0tZ2l0 IGEvdG9vbHMveGwveGxfdmRpc3BsLmMgYi90b29scy94bC94bF92ZGlzcGwuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M5OWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMveGwveGxfdmRpc3BsLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgRVBBTSBTeXN0ZW1zIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBv bmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQg aW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSA8bGli eGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisj aW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgorCitpbnQgbWFpbl92 ZGlzcGxhdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7CisgICAg aW50IHJjOworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGxpYnhsX2RldmljZV92ZGlzcGwgdmRp c3BsOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ2ZGlzcGwtYXR0 YWNoIiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgbGlieGxf ZGV2aWNlX3ZkaXNwbF9pbml0KCZ2ZGlzcGwpOworICAgIGRvbWlkID0gZmluZF9kb21haW4oYXJn dltvcHRpbmQrK10pOworCisgICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7 IGFyZ2MgPiAwOyArK2FyZ3YsIC0tYXJnYykgeworICAgICAgICByYyA9IHBhcnNlX3ZkaXNwbF9j b25maWcoJnZkaXNwbCwgKmFyZ3YpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIH0K KworICAgIGlmICh2ZGlzcGwubnVtX2Nvbm5lY3RvcnMgPT0gMCkgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkF0IGxlYXN0IG9uZSBjb25uZWN0b3Igc2hvdWxkIGJlIHNwZWNpZmllZC5cbiIp OworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7IGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChk cnlydW5fb25seSkgeworICAgICAgICBjaGFyICpqc29uID0gbGlieGxfZGV2aWNlX3ZkaXNwbF90 b19qc29uKGN0eCwgJnZkaXNwbCk7CisgICAgICAgIHByaW50ZigidmRpc3BsOiAlc1xuIiwganNv bik7CisgICAgICAgIGZyZWUoanNvbik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAg IGlmIChsaWJ4bF9kZXZpY2VfdmRpc3BsX2FkZChjdHgsIGRvbWlkLCAmdmRpc3BsLCAwKSkgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV92ZGlzcGxfYWRkIGZhaWxlZC5c biIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7IGdvdG8gb3V0OworICAgIH0KKworICAgIHJj ID0gMDsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV92ZGlzcGxfZGlzcG9zZSgmdmRpc3BsKTsK KyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBtYWluX3ZkaXNwbGxpc3QoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQoreworICAgaW50IG9wdDsKKyAgIGludCBpLCBqLCBuOworICAgbGlieGxfZGV2aWNl X3ZkaXNwbCAqdmRpc3BsczsKKyAgIGxpYnhsX3ZkaXNwbGluZm8gdmRpc3BsaW5mbzsKKworICAg U1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ2ZGlzcGwtbGlzdCIsIDEpIHsKKyAg ICAgICAvKiBObyBvcHRpb25zICovCisgICB9CisKKyAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFy Z2MgLT0gb3B0aW5kOyBhcmdjID4gMDsgLS1hcmdjLCArK2FyZ3YpIHsKKyAgICAgICB1aW50MzJf dCBkb21pZDsKKworICAgICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlkKGN0 eCwgKmFyZ3YsICZkb21pZCkgPCAwKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMg aXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgKmFyZ3YpOworICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICB9CisKKyAgICAgICB2ZGlzcGxzID0gbGlieGxfZGV2aWNlX3ZkaXNw bF9saXN0KGN0eCwgZG9taWQsICZuKTsKKworICAgICAgIGlmICghdmRpc3BscykgY29udGludWU7 CisKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgIGxpYnhsX3Zk aXNwbGluZm9faW5pdCgmdmRpc3BsaW5mbyk7CisgICAgICAgICAgIGlmIChsaWJ4bF9kZXZpY2Vf dmRpc3BsX2dldGluZm8oY3R4LCBkb21pZCwgJnZkaXNwbHNbaV0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZkaXNwbGluZm8pID09IDApIHsKKyAgICAgICAg ICAgICAgIHByaW50ZigiRGV2SWQ6ICVkLCBCRTogJWQsIGhhbmRsZTogJWQsIHN0YXRlOiAlZCwg IgorICAgICAgICAgICAgICAgICAgICAgICJiZS1hbGxvYzogJWQsIEJFLXBhdGg6ICVzLCBGRS1w YXRoOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmRpc3BsaW5mby5kZXZpZCwgdmRp c3BsaW5mby5iYWNrZW5kX2lkLAorICAgICAgICAgICAgICAgICAgICAgICB2ZGlzcGxpbmZvLmZy b250ZW5kX2lkLAorICAgICAgICAgICAgICAgICAgICAgICB2ZGlzcGxpbmZvLnN0YXRlLCB2ZGlz cGxpbmZvLmJlX2FsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICB2ZGlzcGxpbmZvLmJhY2tl bmQsIHZkaXNwbGluZm8uZnJvbnRlbmQpOworCisgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgdmRpc3BsaW5mby5udW1fY29ubmVjdG9yczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJcdENvbm5lY3RvcjogJWQsIGlkOiAlcywgd2lkdGg6ICVkLCBoZWlnaHQ6ICVkLCAi CisgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXEtcnJlZjogJWQsIHJlcS1ldnRjaDogJWQs ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImV2dC1ycmVmOiAlZCwgZXZ0LWV2dGNoOiAl ZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaiwgdmRpc3BsaW5mby5jb25uZWN0b3Jz W2pdLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZGlzcGxpbmZvLmNvbm5lY3RvcnNb al0ud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZkaXNwbGluZm8uY29ubmVjdG9y c1tqXS5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZkaXNwbGluZm8uY29ubmVj dG9yc1tqXS5yZXFfcnJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmRpc3BsaW5mby5j b25uZWN0b3JzW2pdLnJlcV9ldnRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmRpc3Bs aW5mby5jb25uZWN0b3JzW2pdLmV2dF9ycmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2 ZGlzcGxpbmZvLmNvbm5lY3RvcnNbal0uZXZ0X2V2dGNoKTsKKyAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgfQorICAgICAgICAgICBsaWJ4bF92ZGlzcGxpbmZvX2Rpc3Bvc2UoJnZkaXNwbGlu Zm8pOworICAgICAgIH0KKyAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsX2xpc3RfZnJlZSh2ZGlz cGxzLCBuKTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitpbnQgbWFpbl92ZGlzcGxkZXRhY2go aW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVpbnQzMl90IGRvbWlkLCBkZXZpZDsKKyAg ICBpbnQgb3B0LCByYzsKKyAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsIHZkaXNwbDsKKworICAgIFNX SVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidmRpc3BsLWRldGFjaCIsIDIpIHsKKyAg ICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGRvbWlkID0gZmluZF9kb21haW4o YXJndltvcHRpbmQrK10pOworICAgIGRldmlkID0gYXRvaShhcmd2W29wdGluZCsrXSk7CisKKyAg ICBsaWJ4bF9kZXZpY2VfdmRpc3BsX2luaXQoJnZkaXNwbCk7CisKKyAgICBpZiAobGlieGxfZGV2 aWRfdG9fZGV2aWNlX3ZkaXNwbChjdHgsIGRvbWlkLCBkZXZpZCwgJnZkaXNwbCkpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogRGV2aWNlICVkIG5vdCBjb25uZWN0ZWQuXG4iLCBk ZXZpZCk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdmRpc3BsX3JlbW92ZShjdHgsIGRvbWlkLCAmdmRp c3BsLCAwKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9k ZXZpY2VfdmRpc3BsX3JlbW92ZSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlM OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBs aWJ4bF9kZXZpY2VfdmRpc3BsX2Rpc3Bvc2UoJnZkaXNwbCk7CisgICAgcmV0dXJuIHJjOworfQor CisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6 IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjcuNAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=