From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH v10 17/32] ARM: vITS: add command handling stub and MMIO emulation Date: Fri, 26 May 2017 18:35:25 +0100 Message-ID: <20170526173540.10066-18-andre.przywara@arm.com> References: <20170526173540.10066-1-andre.przywara@arm.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 1dEJ9q-0005QB-2j for xen-devel@lists.xenproject.org; Fri, 26 May 2017 17:36:14 +0000 In-Reply-To: <20170526173540.10066-1-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall , Stefano Stabellini Cc: xen-devel@lists.xenproject.org, Vijaya Kumar K , Vijay Kilari , Shanker Donthineni List-Id: xen-devel@lists.xenproject.org RW11bGF0ZSB0aGUgbWVtb3J5IG1hcHBlZCBJVFMgcmVnaXN0ZXJzIGFuZCBwcm92aWRlIGEgc3R1 YiB0byBpbnRyb2R1Y2UKdGhlIElUUyBjb21tYW5kIGhhbmRsaW5nIGZyYW1ld29yayAoYnV0IHdp dGhvdXQgYWN0dWFsbHkgZW11bGF0aW5nIGFueQpjb21tYW5kcyBhdCB0aGlzIHRpbWUpLgpUaGlz IGZpeGVzIGEgbWlzbm9tZXIgaW4gb3VyIHZpcnR1YWwgSVRTIHN0cnVjdHVyZSwgd2hlcmUgdGhl IHNwZWMgaXMKY29uZnVzaW5nbHkgdXNpbmcgSURfYml0cyBpbiBHSVRTX1RZUEVSIHRvIGRlbm90 ZSB0aGUgbnVtYmVyIG9mIGV2ZW50IElEcwooaW4gY29udHJhc3QgdG8gR0lDRF9UWVBFUiwgd2hl cmUgaXQgbWVhbnMgbnVtYmVyIG9mIExQSXMpLgoKU2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdh cmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Ci0tLQogeGVuL2FyY2gvYXJtL3ZnaWMtdjMtaXRz LmMgICAgICAgfCA1NzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiB4 ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaCB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQs IDU4MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL3ZnaWMtdjMtaXRzLmMgYi94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYwppbmRleCAwNjVm ZmUyLi4yYzdmMjJmIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYworKysg Yi94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYwpAQCAtMTksNiArMTksMTYgQEAKICAqIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCiAgKi8KIAorLyoKKyAqIExvY2tpbmcgb3JkZXI6CisgKgorICogaXRzLT52Y21kX2xv Y2sgICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdHMgdGhlIGNvbW1hbmQgcXVldWUpCisg KiAgICAgaXRzLT5pdHNfbG9jayAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0cyB0aGUgdHJh bnNsYXRpb24gdGFibGVzKQorICogICAgICAgICBkLT5pdHNfZGV2aWNlc19sb2NrICAgICAgICAg ICAocHJvdGVjdHMgdGhlIGRldmljZSBSQiB0cmVlKQorICogICAgICAgICAgICAgdi0+dmdpYy5s b2NrICAgICAgICAgICAgICAocHJvdGVjdHMgdGhlIHN0cnVjdCBwZW5kaW5nX2lycSkKKyAqICAg ICAgICAgICAgICAgICBkLT5wZW5kX2xwaV90cmVlX2xvY2sgKHByb3RlY3RzIHRoZSByYWRpeCB0 cmVlKQorICovCisKICNpbmNsdWRlIDx4ZW4vYml0b3BzLmg+CiAjaW5jbHVkZSA8eGVuL2NvbmZp Zy5oPgogI2luY2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgpAQCAtNDMsNyArNTMsNyBAQAogc3Ry dWN0IHZpcnRfaXRzIHsKICAgICBzdHJ1Y3QgZG9tYWluICpkOwogICAgIHVuc2lnbmVkIGludCBk ZXZpZF9iaXRzOwotICAgIHVuc2lnbmVkIGludCBpbnRpZF9iaXRzOworICAgIHVuc2lnbmVkIGlu dCBldmlkX2JpdHM7CiAgICAgc3BpbmxvY2tfdCB2Y21kX2xvY2s7ICAgICAgIC8qIFByb3RlY3Rz IHRoZSB2aXJ0dWFsIGNvbW1hbmQgYnVmZmVyLCB3aGljaCAqLwogICAgIHVpbnQ2NF90IGN3cml0 ZXI7ICAgICAgICAgICAvKiBjb25zaXN0cyBvZiBDV1JJVEVSIGFuZCBDUkVBRFIgYW5kIHRob3Nl ICAgKi8KICAgICB1aW50NjRfdCBjcmVhZHI7ICAgICAgICAgICAgLyogc2hhZG93IHZhcmlhYmxl cyBjd3JpdGVyIGFuZCBjcmVhZHIuICovCkBAIC01Myw2ICs2Myw3IEBAIHN0cnVjdCB2aXJ0X2l0 cyB7CiAgICAgdWludDY0X3QgYmFzZXJfZGV2LCBiYXNlcl9jb2xsOyAgICAgLyogQkFTRVIwIGFu ZCBCQVNFUjEgZm9yIHRoZSBndWVzdCAqLwogICAgIHVuc2lnbmVkIGludCBtYXhfY29sbGVjdGlv bnM7CiAgICAgdW5zaWduZWQgaW50IG1heF9kZXZpY2VzOworICAgIC8qIGNoYW5naW5nICJlbmFi bGVkIiByZXF1aXJlcyB0byBob2xkICpib3RoKiB0aGUgdmNtZF9sb2NrIGFuZCBpdHNfbG9jayAq LwogICAgIGJvb2wgZW5hYmxlZDsKIH07CiAKQEAgLTY3LDYgKzc4LDU3MSBAQCBzdHJ1Y3Qgdml0 c19pdHRlCiAgICAgdWludDE2X3QgcGFkOwogfTsKIAorLyoKKyAqIE91ciBjb2xsZWN0aW9uIHRh YmxlIGVuY29kaW5nOgorICogRWFjaCBlbnRyeSBqdXN0IGNvbnRhaW5zIHRoZSBWQ1BVIElEIG9m IHRoZSByZXNwZWN0aXZlIHZDUFUuCisgKi8KK3R5cGVkZWYgdWludDE2X3QgY29sbF90YWJsZV9l bnRyeV90OworCisvKgorICogT3VyIGRldmljZSB0YWJsZSBlbmNvZGluZ3M6CisgKiBDb250YWlu cyB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgSW50ZXJydXB0IFRyYW5zbGF0aW9u IFRhYmxlIGluCisgKiBiaXRzIFs1MTo4XSwgYW5kIHRoZSBzaXplIG9mIGl0IGlzIGVuY29kZWQg YXMgdGhlIG51bWJlciBvZiBiaXRzIG1pbnVzIG9uZQorICogaW4gdGhlIGxvd2VzdCA1IGJpdHMg b2YgdGhlIHdvcmQuCisgKi8KK3R5cGVkZWYgdWludDY0X3QgZGV2X3RhYmxlX2VudHJ5X3Q7Cisj ZGVmaW5lIERFVl9UQUJMRV9JVFRfQUREUih4KSAoKHgpICYgR0VOTUFTSyg1MSwgOCkpCisjZGVm aW5lIERFVl9UQUJMRV9JVFRfU0laRSh4KSAoQklUKCgoeCkgJiBHRU5NQVNLKDQsIDApKSArIDEp KQorI2RlZmluZSBERVZfVEFCTEVfRU5UUlkoYWRkciwgYml0cykgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICgoKGFkZHIpICYgR0VOTUFTSyg1MSwgOCkpIHwgKCgoYml0cykgLSAxKSAm IEdFTk1BU0soNCwgMCkpKQorCisjZGVmaW5lIEdJVFNfQkFTRVJfUk9fTUFTSyAgICAgICAoR0lU U19CQVNFUl9UWVBFX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MWZMIDw8IEdJVFNfQkFTRVJfRU5UUllfU0laRV9TSElGVCkpCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb25zIHRoYXQgaGFuZGxlIElUUyBj b21tYW5kcyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0 YXRpYyB1aW50NjRfdCBpdHNfY21kX21hc2tfZmllbGQodWludDY0X3QgKml0c19jbWQsIHVuc2ln bmVkIGludCB3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgc2hpZnQsIHVuc2lnbmVkIGludCBzaXplKQoreworICAgIHJldHVybiAoKGl0c19jbWRb d29yZF0pKSA+PiAoc2hpZnQgJiAoQklUKHNpemUpIC0gMSkpOworfQorCisjZGVmaW5lIGl0c19j bWRfZ2V0X2NvbW1hbmQoY21kKSAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMCwgIDAs ICA4KQorI2RlZmluZSBpdHNfY21kX2dldF9kZXZpY2VpZChjbWQpICAgICAgIGl0c19jbWRfbWFz a19maWVsZChjbWQsIDAsIDMyLCAzMikKKyNkZWZpbmUgaXRzX2NtZF9nZXRfc2l6ZShjbWQpICAg ICAgICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAxLCAgMCwgIDUpCisjZGVmaW5lIGl0c19j bWRfZ2V0X2lkKGNtZCkgICAgICAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMSwgIDAs IDMyKQorI2RlZmluZSBpdHNfY21kX2dldF9waHlzaWNhbF9pZChjbWQpICAgIGl0c19jbWRfbWFz a19maWVsZChjbWQsIDEsIDMyLCAzMikKKyNkZWZpbmUgaXRzX2NtZF9nZXRfY29sbGVjdGlvbihj bWQpICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAyLCAgMCwgMTYpCisjZGVmaW5lIGl0c19j bWRfZ2V0X3RhcmdldF9hZGRyKGNtZCkgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwgMTYs IDMyKQorI2RlZmluZSBpdHNfY21kX2dldF92YWxpZGJpdChjbWQpICAgICAgIGl0c19jbWRfbWFz a19maWVsZChjbWQsIDIsIDYzLCAgMSkKKyNkZWZpbmUgaXRzX2NtZF9nZXRfaXR0YWRkcihjbWQp ICAgICAgICAoaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwgOCwgNDQpIDw8IDgpCisKKyNkZWZp bmUgSVRTX0NNRF9CVUZGRVJfU0laRShiYXNlcikgICAgICAoKCgoYmFzZXIpICYgMHhmZikgKyAx KSA8PCAxMikKKyNkZWZpbmUgSVRTX0NNRF9PRkZTRVQocmVnKSAgICAgICAgICAgICAoKHJlZykg JiBHRU5NQVNLKDE5LCA1KSkKKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHZjbWRf bG9jayBoZWxkLgorICogVE9ETzogSW52ZXN0aWdhdGUgd2hldGhlciB3ZSBjYW4gYmUgc21hcnRl ciBoZXJlIGFuZCBkb24ndCBuZWVkIHRvIGhvbGQKKyAqIHRoZSBsb2NrIGFsbCBvZiB0aGUgdGlt ZS4KKyAqLworc3RhdGljIGludCB2Z2ljX2l0c19oYW5kbGVfY21kcyhzdHJ1Y3QgZG9tYWluICpk LCBzdHJ1Y3QgdmlydF9pdHMgKml0cykKK3sKKyAgICBwYWRkcl90IGFkZHIgPSBpdHMtPmNiYXNl ciAmIEdFTk1BU0soNTEsIDEyKTsKKyAgICB1aW50NjRfdCBjb21tYW5kWzRdOworCisgICAgQVNT RVJUKHNwaW5faXNfbG9ja2VkKCZpdHMtPnZjbWRfbG9jaykpOworCisgICAgaWYgKCBpdHMtPmN3 cml0ZXIgPj0gSVRTX0NNRF9CVUZGRVJfU0laRShpdHMtPmNiYXNlcikgKQorICAgICAgICByZXR1 cm4gLTE7CisKKyAgICB3aGlsZSAoIGl0cy0+Y3JlYWRyICE9IGl0cy0+Y3dyaXRlciApCisgICAg eworICAgICAgICBpbnQgcmV0OworCisgICAgICAgIHJldCA9IHZnaWNfYWNjZXNzX2d1ZXN0X21l bW9yeShkLCBhZGRyICsgaXRzLT5jcmVhZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb21tYW5kLCBzaXplb2YoY29tbWFuZCksIGZhbHNlKTsKKyAgICAgICAgaWYg KCByZXQgKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBzd2l0Y2ggKCBpdHNf Y21kX2dldF9jb21tYW5kKGNvbW1hbmQpICkKKyAgICAgICAgeworICAgICAgICBjYXNlIEdJVFNf Q01EX1NZTkM6CisgICAgICAgICAgICAvKiBXZSBoYW5kbGUgSVRTIGNvbW1hbmRzIHN5bmNocm9u b3VzbHksIHNvIHdlIGlnbm9yZSBTWU5DLiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgInZHSVRTOiB1 bmhhbmRsZWQgSVRTIGNvbW1hbmQgJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICAgaXRzX2Nt ZF9nZXRfY29tbWFuZChjb21tYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor CisgICAgICAgIHdyaXRlX3U2NF9hdG9taWMoJml0cy0+Y3JlYWRyLCAoaXRzLT5jcmVhZHIgKyBJ VFNfQ01EX1NJWkUpICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBJVFNfQ01EX0JVRkZFUl9T SVpFKGl0cy0+Y2Jhc2VyKSk7CisKKyAgICAgICAgaWYgKCByZXQgKQorICAgICAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAidkdJVFM6IElUUyBj b21tYW5kIGVycm9yICVkIHdoaWxlIGhhbmRsaW5nIGNvbW1hbmQgJWx1XG4iLAorICAgICAgICAg ICAgICAgICAgICAgcmV0LCBpdHNfY21kX2dldF9jb21tYW5kKGNvbW1hbmQpKTsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJ VFMgcmVnaXN0ZXJzIHJlYWQgYWNjZXNzICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworLyogSWRlbnRpZnlpbmcgYXMgYW4gQVJNIElQLCB1c2luZyAiWCIgYXMgdGhlIHByb2R1 Y3QgSUQuICovCisjZGVmaW5lIEdJVFNfSUlEUl9WQUxVRSAgICAgICAgICAgICAgICAgMHg1ODAw MDM0YworCitzdGF0aWMgaW50IHZnaWNfdjNfaXRzX21taW9fcmVhZChzdHJ1Y3QgdmNwdSAqdiwg bW1pb19pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdp c3Rlcl90ICpyLCB2b2lkICpwcml2KQoreworICAgIHN0cnVjdCB2aXJ0X2l0cyAqaXRzID0gcHJp djsKKyAgICB1aW50NjRfdCByZWc7CisKKyAgICBzd2l0Y2ggKCBpbmZvLT5ncGEgJiAweGZmZmYg KQorICAgIHsKKyAgICBjYXNlIFZSRUczMihHSVRTX0NUTFIpOgorICAgIHsKKyAgICAgICAgLyoK KyAgICAgICAgICogV2UgdHJ5IHRvIGF2b2lkIHdhaXRpbmcgZm9yIHRoZSBjb21tYW5kIHF1ZXVl IGxvY2sgYW5kIHJlcG9ydAorICAgICAgICAgKiBub24tcXVpZXNjZW50IGlmIHRoYXQgbG9jayBp cyBhbHJlYWR5IHRha2VuLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbCBoYXZlX2NtZF9sb2Nr OworCisgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplICE9IERBQlRfV09SRCApIGdvdG8gYmFk X3dpZHRoOworCisgICAgICAgIGhhdmVfY21kX2xvY2sgPSBzcGluX3RyeWxvY2soJml0cy0+dmNt ZF9sb2NrKTsKKyAgICAgICAgcmVnID0gaXRzLT5lbmFibGVkID8gR0lUU19DVExSX0VOQUJMRSA6 IDA7CisKKyAgICAgICAgaWYgKCBoYXZlX2NtZF9sb2NrICYmIGl0cy0+Y3dyaXRlciA9PSBpdHMt PmNyZWFkciApCisgICAgICAgICAgICByZWcgfD0gR0lUU19DVExSX1FVSUVTQ0VOVDsKKworICAg ICAgICBpZiAoIGhhdmVfY21kX2xvY2sgKQorICAgICAgICAgICAgc3Bpbl91bmxvY2soJml0cy0+ dmNtZF9sb2NrKTsKKworICAgICAgICAqciA9IHZnaWNfcmVnMzJfZXh0cmFjdChyZWcsIGluZm8p OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFZSRUczMihHSVRTX0lJRFIpOgor ICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0 aDsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzMyX2V4dHJhY3QoR0lUU19JSURSX1ZBTFVFLCBpbmZv KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZSRUc2NChHSVRTX1RZUEVSKToKKyAgICAg ICAgaWYgKCAhdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93 aWR0aDsKKworICAgICAgICByZWcgPSBHSVRTX1RZUEVSX1BIWVNJQ0FMOworICAgICAgICByZWcg fD0gKHNpemVvZihzdHJ1Y3Qgdml0c19pdHRlKSAtIDEpIDw8IEdJVFNfVFlQRVJfSVRUX1NJWkVf U0hJRlQ7CisgICAgICAgIHJlZyB8PSAoaXRzLT5ldmlkX2JpdHMgLSAxKSA8PCBHSVRTX1RZUEVS X0lEQklUU19TSElGVDsKKyAgICAgICAgcmVnIHw9IChpdHMtPmRldmlkX2JpdHMgLSAxKSA8PCBH SVRTX1RZUEVSX0RFVklEU19TSElGVDsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3Qo cmVnLCBpbmZvKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZSQU5HRTMyKDB4MDAxOCwg MHgwMDFDKToKKyAgICAgICAgZ290byByZWFkX3Jlc2VydmVkOworICAgIGNhc2UgVlJBTkdFMzIo MHgwMDIwLCAweDAwM0MpOgorICAgICAgICBnb3RvIHJlYWRfaW1wbF9kZWZpbmVkOworICAgIGNh c2UgVlJBTkdFMzIoMHgwMDQwLCAweDAwN0MpOgorICAgICAgICBnb3RvIHJlYWRfcmVzZXJ2ZWQ7 CisKKyAgICBjYXNlIFZSRUc2NChHSVRTX0NCQVNFUik6CisgICAgICAgIGlmICggIXZnaWNfcmVn NjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisgICAgICAgIHNw aW5fbG9jaygmaXRzLT5pdHNfbG9jayk7CisgICAgICAgICpyID0gdmdpY19yZWc2NF9leHRyYWN0 KGl0cy0+Y2Jhc2VyLCBpbmZvKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2sp OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1dSSVRFUik6CisgICAg ICAgIGlmICggIXZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRf d2lkdGg7CisKKyAgICAgICAgLyogQ1dSSVRFUiBpcyBvbmx5IHdyaXR0ZW4gYnkgdGhlIGd1ZXN0 LCBzbyBubyBleHRyYSBsb2NraW5nIGhlcmUuICovCisgICAgICAgIHJlZyA9IGl0cy0+Y3dyaXRl cjsKKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QocmVnLCBpbmZvKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFZSRUc2NChHSVRTX0NSRUFEUik6CisgICAgICAgIGlmICggIXZn aWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAg ICAgICAgLyoKKyAgICAgICAgICogTG9ja2xlc3MgYWNjZXNzLCB0byBhdm9pZCB3YWl0aW5nIGZv ciB0aGUgd2hvbGUgY29tbWFuZCBxdWV1ZSB0byBiZQorICAgICAgICAgKiBmaW5pc2hlZCBjb21w bGV0ZWx5LiBYZW4gdXBkYXRlcyBpdHMtPmNyZWFkciBhdG9taWNhbGx5IGFmdGVyIGVhY2gKKyAg ICAgICAgICogY29tbWFuZCBoYXMgYmVlbiBoYW5kbGVkLCB0aGlzIGFsbG93cyBvdGhlciBWQ1BV cyB0byBtb25pdG9yIHRoZQorICAgICAgICAgKiBwcm9ncmVzcy4KKyAgICAgICAgICovCisgICAg ICAgIHJlZyA9IHJlYWRfdTY0X2F0b21pYygmaXRzLT5jcmVhZHIpOworICAgICAgICAqciA9IHZn aWNfcmVnNjRfZXh0cmFjdChyZWcsIGluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug VlJBTkdFNjQoMHgwMDk4LCAweDAwRjgpOgorICAgICAgICBnb3RvIHJlYWRfcmVzZXJ2ZWQ7CisK KyAgICBjYXNlIFZSRUc2NChHSVRTX0JBU0VSMCk6ICAgICAgICAgICAvKiBkZXZpY2UgdGFibGUg Ki8KKyAgICAgICAgaWYgKCAhdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBn b3RvIGJhZF93aWR0aDsKKyAgICAgICAgc3Bpbl9sb2NrKCZpdHMtPml0c19sb2NrKTsKKyAgICAg ICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRzLT5iYXNlcl9kZXYsIGluZm8pOworICAgICAg ICBzcGluX3VubG9jaygmaXRzLT5pdHNfbG9jayk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSBWUkVHNjQoR0lUU19CQVNFUjEpOiAgICAgICAgICAgLyogY29sbGVjdGlvbiB0YWJsZSAqLwor ICAgICAgICBpZiAoICF2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8g YmFkX3dpZHRoOworICAgICAgICBzcGluX2xvY2soJml0cy0+aXRzX2xvY2spOworICAgICAgICAq ciA9IHZnaWNfcmVnNjRfZXh0cmFjdChpdHMtPmJhc2VyX2NvbGwsIGluZm8pOworICAgICAgICBz cGluX3VubG9jaygmaXRzLT5pdHNfbG9jayk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBW UkFOR0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgorICAgICAgICBnb3RvIHJlYWRfYXNf emVyb182NDsKKyAgICBjYXNlIFZSQU5HRTMyKDB4MDE0MCwgMHhCRkZDKToKKyAgICAgICAgZ290 byByZWFkX3Jlc2VydmVkOworICAgIGNhc2UgVlJBTkdFMzIoMHhDMDAwLCAweEZGQ0MpOgorICAg ICAgICBnb3RvIHJlYWRfaW1wbF9kZWZpbmVkOworICAgIGNhc2UgVlJBTkdFMzIoMHhGRkQwLCAw eEZGRTQpOgorICAgICAgICBnb3RvIHJlYWRfaW1wbF9kZWZpbmVkOworCisgICAgY2FzZSBWUkVH MzIoR0lUU19QSURSMik6CisgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplICE9IERBQlRfV09S RCApIGdvdG8gYmFkX3dpZHRoOworICAgICAgICAqciA9IHZnaWNfcmVnMzJfZXh0cmFjdChHSUNf UElEUjJfQVJDSF9HSUN2MywgaW5mbyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBWUkFO R0UzMigweEZGRUMsIDB4RkZGQyk6CisgICAgICAgIGdvdG8gcmVhZF9pbXBsX2RlZmluZWQ7CisK KyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoWEVOTE9HX0dfRVJSCisgICAgICAgICAgICAg ICAiJXB2OiB2R0lUUzogdW5oYW5kbGVkIHJlYWQgciVkIG9mZnNldCAlIzA0bHhcbiIsCisgICAg ICAgICAgICAgICB2LCBpbmZvLT5kYWJ0LnJlZywgKHVuc2lnbmVkIGxvbmcpaW5mby0+Z3BhICYg MHhmZmZmKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7CisKK3Jl YWRfYXNfemVyb182NDoKKyAgICBpZiAoICF2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5k YWJ0KSApIGdvdG8gYmFkX3dpZHRoOworICAgICpyID0gMDsKKworICAgIHJldHVybiAxOworCity ZWFkX2ltcGxfZGVmaW5lZDoKKyAgICBwcmludGsoWEVOTE9HX0dfREVCVUcKKyAgICAgICAgICAg IiVwdjogdkdJVFM6IFJBWiBvbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHJlZ2lzdGVyIG9mZnNl dCAlIzA0bHhcbiIsCisgICAgICAgICAgIHYsIGluZm8tPmdwYSAmIDB4ZmZmZik7CisgICAgKnIg PSAwOworICAgIHJldHVybiAxOworCityZWFkX3Jlc2VydmVkOgorICAgIHByaW50ayhYRU5MT0df R19ERUJVRworICAgICAgICAgICAiJXB2OiB2R0lUUzogUkFaIG9uIHJlc2VydmVkIHJlZ2lzdGVy IG9mZnNldCAlIzA0bHhcbiIsCisgICAgICAgICAgIHYsIGluZm8tPmdwYSAmIDB4ZmZmZik7Cisg ICAgKnIgPSAwOworICAgIHJldHVybiAxOworCitiYWRfd2lkdGg6CisgICAgcHJpbnRrKFhFTkxP R19HX0VSUiAidkdJVFM6IGJhZCByZWFkIHdpZHRoICVkIHIlZCBvZmZzZXQgJSMwNGx4XG4iLAor ICAgICAgICAgICBpbmZvLT5kYWJ0LnNpemUsIGluZm8tPmRhYnQucmVnLCAodW5zaWduZWQgbG9u ZylpbmZvLT5ncGEgJiAweGZmZmYpOworICAgIGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91cygpOwor CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq IElUUyByZWdpc3RlcnMgd3JpdGUgYWNjZXNzICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXRzX2Jhc2VyX3RhYmxlX3NpemUodWludDY0 X3QgYmFzZXIpCit7CisgICAgdW5zaWduZWQgaW50IHJldCwgcGFnZV9zaXplWzRdID0ge1NaXzRL LCBTWl8xNkssIFNaXzY0SywgU1pfNjRLfTsKKworICAgIHJldCA9IHBhZ2Vfc2l6ZVsoYmFzZXIg Pj4gR0lUU19CQVNFUl9QQUdFX1NJWkVfU0hJRlQpICYgM107CisKKyAgICByZXR1cm4gcmV0ICog KChiYXNlciAmIEdJVFNfQkFTRVJfU0laRV9NQVNLKSArIDEpOworfQorCitzdGF0aWMgdW5zaWdu ZWQgaW50IGl0c19iYXNlcl9ucl9lbnRyaWVzKHVpbnQ2NF90IGJhc2VyKQoreworICAgIHVuc2ln bmVkIGludCBlbnRyeV9zaXplID0gR0lUU19CQVNFUl9FTlRSWV9TSVpFKGJhc2VyKTsKKworICAg IHJldHVybiBpdHNfYmFzZXJfdGFibGVfc2l6ZShiYXNlcikgLyBlbnRyeV9zaXplOworfQorCisv KiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBJVFMgbG9jayBoZWxkLiAqLworc3RhdGljIGJvb2wg dmdpY192M192ZXJpZnlfaXRzX3N0YXR1cyhzdHJ1Y3QgdmlydF9pdHMgKml0cywgYm9vbCBzdGF0 dXMpCit7CisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZpdHMtPml0c19sb2NrKSk7CisKKyAg ICBpZiAoICFzdGF0dXMgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoICEoaXRz LT5jYmFzZXIgJiBHSVRTX1ZBTElEX0JJVCkgfHwKKyAgICAgICAgICEoaXRzLT5iYXNlcl9kZXYg JiBHSVRTX1ZBTElEX0JJVCkgfHwKKyAgICAgICAgICEoaXRzLT5iYXNlcl9jb2xsICYgR0lUU19W QUxJRF9CSVQpICkKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfR19XQVJOSU5HICJkJWQg dHJpZWQgdG8gZW5hYmxlIElUUyB3aXRob3V0IGhhdmluZyB0aGUgdGFibGVzIGNvbmZpZ3VyZWQu XG4iLAorICAgICAgICAgICAgICAgaXRzLT5kLT5kb21haW5faWQpOworICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOiBQcm90ZWN0IGFnYWluc3QgYSBn dWVzdCBjcmFmdGluZyBJVFMgdGFibGVzLgorICAgICAqIFRoZSBzcGVjIHNheXMgdGhhdCAiYXQg dGhlIHRpbWUgb2YgdGhlIG5ldyBhbGxvY2F0aW9uIGZvciB1c2UgYnkgdGhlIElUUyIKKyAgICAg KiBhbGwgdGFibGVzIG11c3QgY29udGFpbiB6ZXJvZXMuIFdlIGNvdWxkIGVuZm9yY2UgdGhpcyBo ZXJlIGJ5IGNsZWFyaW5nCisgICAgICogYWxsIHRoZSB0YWJsZXMsIGJ1dCB0aGlzIHdvdWxkIGJl IG1vb3Qgc2luY2UgYXQgdGhlIG1vbWVudCB0aGUgZ3Vlc3QKKyAgICAgKiBjYW4gY2hhbmdlIHRo ZSB0YWJsZXMgYXQgYW55IHBvaW50IGluIHRpbWUgYW55d2F5LiBSaWdodCBub3cgdGhlcmUgYXJl CisgICAgICogZXhwZWN0YXRpb25zIGFib3V0IHRoZSB0YWJsZXMgYmVpbmcgY29uc2lzdGVudCAo YSBWQ1BVIGxvY2sgcHJvdGVjdGluZworICAgICAqIGFuIExQSSksIHdoaWNoIHNob3VsZCBnbyBh d2F5IHdpdGggcHJvcGVyIHBlci1JUlEgbG9ja2luZy4KKyAgICAgKiBTbyBmb3Igbm93IHdlIGln bm9yZSB0aGlzIGlzc3VlIGFuZCByZWx5IG9uIERvbTAgbm90IGRvaW5nIGJhZCB0aGluZ3MuCisg ICAgICovCisgICAgQVNTRVJUKGlzX2hhcmR3YXJlX2RvbWFpbihpdHMtPmQpKTsKKworICAgIHJl dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzYW5pdGl6ZV9pdHNfYmFzZV9yZWcodWludDY0 X3QgKnJlZykKK3sKKyAgICB1aW50NjRfdCByID0gKnJlZzsKKworICAgIC8qIEF2b2lkIG91dGVy IHNoYXJlYWJsZS4gKi8KKyAgICBzd2l0Y2ggKCAociA+PiBHSVRTX0JBU0VSX1NIQVJFQUJJTElU WV9TSElGVCkgJiAweDAzICkKKyAgICB7CisgICAgY2FzZSBHSUNfQkFTRVJfT3V0ZXJTaGFyZWFi bGU6CisgICAgICAgIHIgJj0gfkdJVFNfQkFTRVJfU0hBUkVBQklMSVRZX01BU0s7CisgICAgICAg IHIgfD0gR0lDX0JBU0VSX0lubmVyU2hhcmVhYmxlIDw8IEdJVFNfQkFTRVJfU0hBUkVBQklMSVRZ X1NISUZUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgICAvKiBBdm9pZCBhbnkgaW5uZXIgbm9uLWNhY2hlYWJsZSBtYXBwaW5nLiAqLwor ICAgIHN3aXRjaCAoIChyID4+IEdJVFNfQkFTRVJfSU5ORVJfQ0FDSEVBQklMSVRZX1NISUZUKSAm IDB4MDcgKQorICAgIHsKKyAgICBjYXNlIEdJQ19CQVNFUl9DQUNIRV9uQ25COgorICAgIGNhc2Ug R0lDX0JBU0VSX0NBQ0hFX25DOgorICAgICAgICByICY9IH5HSVRTX0JBU0VSX0lOTkVSX0NBQ0hF QUJJTElUWV9NQVNLOworICAgICAgICByIHw9IEdJQ19CQVNFUl9DQUNIRV9SYVdiIDw8IEdJVFNf QkFTRVJfSU5ORVJfQ0FDSEVBQklMSVRZX1NISUZUOworICAgICAgICBicmVhazsKKyAgICBkZWZh dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBPbmx5IGFsbG93IG5vbi1jYWNo ZWFibGUgb3Igc2FtZS1hcy1pbm5lci4gKi8KKyAgICBzd2l0Y2ggKCAociA+PiBHSVRTX0JBU0VS X09VVEVSX0NBQ0hFQUJJTElUWV9TSElGVCkgJiAweDA3ICkKKyAgICB7CisgICAgY2FzZSBHSUNf QkFTRVJfQ0FDSEVfU2FtZUFzSW5uZXI6CisgICAgY2FzZSBHSUNfQkFTRVJfQ0FDSEVfbkM6Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHIgJj0gfkdJVFNfQkFTRVJfT1VU RVJfQ0FDSEVBQklMSVRZX01BU0s7CisgICAgICAgIHIgfD0gR0lDX0JBU0VSX0NBQ0hFX25DIDw8 IEdJVFNfQkFTRVJfT1VURVJfQ0FDSEVBQklMSVRZX1NISUZUOworICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgICAqcmVnID0gcjsKK30KKworc3RhdGljIGludCB2Z2ljX3YzX2l0c19tbWlvX3dy aXRlKHN0cnVjdCB2Y3B1ICp2LCBtbWlvX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWdpc3Rlcl90IHIsIHZvaWQgKnByaXYpCit7CisgICAgc3RydWN0 IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICBzdHJ1Y3QgdmlydF9pdHMgKml0cyA9IHByaXY7 CisgICAgdWludDY0X3QgcmVnOworICAgIHVpbnQzMl90IHJlZzMyOworCisgICAgc3dpdGNoICgg aW5mby0+Z3BhICYgMHhmZmZmICkKKyAgICB7CisgICAgY2FzZSBWUkVHMzIoR0lUU19DVExSKToK KyAgICB7CisgICAgICAgIHVpbnQzMl90IGN0bHI7CisKKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0 LnNpemUgIT0gREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgLyoKKyAgICAg ICAgICogV2UgbmVlZCB0byB0YWtlIHRoZSB2Y21kX2xvY2sgdG8gcHJldmVudCBhIGd1ZXN0IGZy b20gZGlzYWJsaW5nCisgICAgICAgICAqIHRoZSBJVFMgd2hpbGUgY29tbWFuZHMgYXJlIHN0aWxs IHByb2Nlc3NlZC4KKyAgICAgICAgICovCisgICAgICAgIHNwaW5fbG9jaygmaXRzLT52Y21kX2xv Y2spOworICAgICAgICBzcGluX2xvY2soJml0cy0+aXRzX2xvY2spOworICAgICAgICBjdGxyID0g aXRzLT5lbmFibGVkID8gR0lUU19DVExSX0VOQUJMRSA6IDA7CisgICAgICAgIHJlZzMyID0gY3Rs cjsKKyAgICAgICAgdmdpY19yZWczMl91cGRhdGUoJnJlZzMyLCByLCBpbmZvKTsKKworICAgICAg ICBpZiAoIGN0bHIgXiByZWczMiApCisgICAgICAgICAgICBpdHMtPmVuYWJsZWQgPSB2Z2ljX3Yz X3ZlcmlmeV9pdHNfc3RhdHVzKGl0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnMzIgJiBHSVRTX0NUTFJfRU5BQkxFKTsKKyAgICAgICAg c3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2spOworICAgICAgICBzcGluX3VubG9jaygmaXRzLT52 Y21kX2xvY2spOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBjYXNlIFZSRUczMihH SVRTX0lJRFIpOgorICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZV8zMjsKKworICAgIGNhc2UgVlJF RzMyKEdJVFNfVFlQRVIpOgorICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZV8zMjsKKworICAgIGNh c2UgVlJBTkdFMzIoMHgwMDE4LCAweDAwMUMpOgorICAgICAgICBnb3RvIHdyaXRlX3Jlc2VydmVk OworICAgIGNhc2UgVlJBTkdFMzIoMHgwMDIwLCAweDAwM0MpOgorICAgICAgICBnb3RvIHdyaXRl X2ltcGxfZGVmaW5lZDsKKyAgICBjYXNlIFZSQU5HRTMyKDB4MDA0MCwgMHgwMDdDKToKKyAgICAg ICAgZ290byB3cml0ZV9yZXNlcnZlZDsKKworICAgIGNhc2UgVlJFRzY0KEdJVFNfQ0JBU0VSKToK KyAgICAgICAgaWYgKCAhdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3Rv IGJhZF93aWR0aDsKKworICAgICAgICBzcGluX2xvY2soJml0cy0+aXRzX2xvY2spOworICAgICAg ICAvKiBDaGFuZ2luZyBiYXNlIHJlZ2lzdGVycyB3aXRoIHRoZSBJVFMgZW5hYmxlZCBpcyBVTlBS RURJQ1RBQkxFLiAqLworICAgICAgICBpZiAoIGl0cy0+ZW5hYmxlZCApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHNwaW5fdW5sb2NrKCZpdHMtPml0c19sb2NrKTsKKyAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgInZHSVRTOiB0cmllZCB0 byBjaGFuZ2UgQ0JBU0VSIHdpdGggdGhlIElUUyBlbmFibGVkLlxuIik7CisgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlZyA9IGl0cy0+Y2Jhc2VyOworICAgICAg ICB2Z2ljX3JlZzY0X3VwZGF0ZSgmcmVnLCByLCBpbmZvKTsKKyAgICAgICAgc2FuaXRpemVfaXRz X2Jhc2VfcmVnKCZyZWcpOworCisgICAgICAgIGl0cy0+Y2Jhc2VyID0gcmVnOworICAgICAgICBp dHMtPmNyZWFkciA9IDA7CisgICAgICAgIHNwaW5fdW5sb2NrKCZpdHMtPml0c19sb2NrKTsKKwor ICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1dSSVRFUik6CisgICAg ICAgIGlmICggIXZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRf d2lkdGg7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZpdHMtPnZjbWRfbG9jayk7CisgICAgICAgIHJl ZyA9IElUU19DTURfT0ZGU0VUKGl0cy0+Y3dyaXRlcik7CisgICAgICAgIHZnaWNfcmVnNjRfdXBk YXRlKCZyZWcsIHIsIGluZm8pOworICAgICAgICBpdHMtPmN3cml0ZXIgPSBJVFNfQ01EX09GRlNF VChyZWcpOworCisgICAgICAgIGlmICggaXRzLT5lbmFibGVkICkKKyAgICAgICAgICAgIGlmICgg dmdpY19pdHNfaGFuZGxlX2NtZHMoZCwgaXRzKSApCisgICAgICAgICAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsICJlcnJvciBoYW5kbGluZyBJVFMgY29tbWFuZHNcbiIpOworCisgICAg ICAgIHNwaW5fdW5sb2NrKCZpdHMtPnZjbWRfbG9jayk7CisKKyAgICAgICAgcmV0dXJuIDE7CisK KyAgICBjYXNlIFZSRUc2NChHSVRTX0NSRUFEUik6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3Jl XzY0OworCisgICAgY2FzZSBWUkFOR0UzMigweDAwOTgsIDB4MDBGQyk6CisgICAgICAgIGdvdG8g d3JpdGVfcmVzZXJ2ZWQ7CisKKyAgICBjYXNlIFZSRUc2NChHSVRTX0JBU0VSMCk6ICAgICAgICAg ICAvKiBkZXZpY2UgdGFibGUgKi8KKyAgICAgICAgaWYgKCAhdmdpY19yZWc2NF9jaGVja19hY2Nl c3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKKworICAgICAgICBzcGluX2xvY2soJml0 cy0+aXRzX2xvY2spOworCisgICAgICAgIC8qCisgICAgICAgICAqIENoYW5naW5nIGJhc2UgcmVn aXN0ZXJzIHdpdGggdGhlIElUUyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUsCisgICAgICAgICAq IHdlIGNob29zZSB0byBpZ25vcmUgaXQsIGJ1dCB3YXJuLgorICAgICAgICAgKi8KKyAgICAgICAg aWYgKCBpdHMtPmVuYWJsZWQgKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluX3VubG9jaygm aXRzLT5pdHNfbG9jayk7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgInZH SVRTOiB0cmllZCB0byBjaGFuZ2UgQkFTRVIgd2l0aCB0aGUgSVRTIGVuYWJsZWQuXG4iKTsKKwor ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICByZWcgPSBpdHMtPmJh c2VyX2RldjsKKyAgICAgICAgdmdpY19yZWc2NF91cGRhdGUoJnJlZywgciwgaW5mbyk7CisKKyAg ICAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBpbmRpcmVjdCB0YWJsZXMgZm9yIG5vdy4gKi8KKyAg ICAgICAgcmVnICY9IH4oR0lUU19CQVNFUl9ST19NQVNLIHwgR0lUU19CQVNFUl9JTkRJUkVDVCk7 CisgICAgICAgIHJlZyB8PSAoc2l6ZW9mKGRldl90YWJsZV9lbnRyeV90KSAtIDEpIDw8IEdJVFNf QkFTRVJfRU5UUllfU0laRV9TSElGVDsKKyAgICAgICAgcmVnIHw9IEdJVFNfQkFTRVJfVFlQRV9E RVZJQ0UgPDwgR0lUU19CQVNFUl9UWVBFX1NISUZUOworICAgICAgICBzYW5pdGl6ZV9pdHNfYmFz ZV9yZWcoJnJlZyk7CisKKyAgICAgICAgaWYgKCByZWcgJiBHSVRTX1ZBTElEX0JJVCApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGl0cy0+bWF4X2RldmljZXMgPSBpdHNfYmFzZXJfbnJfZW50cmll cyhyZWcpOworICAgICAgICAgICAgaWYgKCBpdHMtPm1heF9kZXZpY2VzID4gQklUKGl0cy0+ZGV2 aWRfYml0cykgKQorICAgICAgICAgICAgICAgIGl0cy0+bWF4X2RldmljZXMgPSBCSVQoaXRzLT5k ZXZpZF9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpdHMtPm1h eF9kZXZpY2VzID0gMDsKKworICAgICAgICBpdHMtPmJhc2VyX2RldiA9IHJlZzsKKyAgICAgICAg c3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2spOworICAgICAgICByZXR1cm4gMTsKKworICAgIGNh c2UgVlJFRzY0KEdJVFNfQkFTRVIxKTogICAgICAgICAgIC8qIGNvbGxlY3Rpb24gdGFibGUgKi8K KyAgICAgICAgaWYgKCAhdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3Rv IGJhZF93aWR0aDsKKworICAgICAgICBzcGluX2xvY2soJml0cy0+aXRzX2xvY2spOworICAgICAg ICAvKgorICAgICAgICAgKiBDaGFuZ2luZyBiYXNlIHJlZ2lzdGVycyB3aXRoIHRoZSBJVFMgZW5h YmxlZCBpcyBVTlBSRURJQ1RBQkxFLAorICAgICAgICAgKiB3ZSBjaG9vc2UgdG8gaWdub3JlIGl0 LCBidXQgd2Fybi4KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXRzLT5lbmFibGVkICkKKyAg ICAgICAgeworICAgICAgICAgICAgc3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2spOworICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX0lORk8sICJ2R0lUUzogdHJpZWQgdG8gY2hhbmdlIEJBU0VS IHdpdGggdGhlIElUUyBlbmFibGVkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg ICAgfQorCisgICAgICAgIHJlZyA9IGl0cy0+YmFzZXJfY29sbDsKKyAgICAgICAgdmdpY19yZWc2 NF91cGRhdGUoJnJlZywgciwgaW5mbyk7CisgICAgICAgIC8qIE5vIGluZGlyZWN0IHRhYmxlcyBm b3IgdGhlIGNvbGxlY3Rpb24gdGFibGUuICovCisgICAgICAgIHJlZyAmPSB+KEdJVFNfQkFTRVJf Uk9fTUFTSyB8IEdJVFNfQkFTRVJfSU5ESVJFQ1QpOworICAgICAgICByZWcgfD0gKHNpemVvZihj b2xsX3RhYmxlX2VudHJ5X3QpIC0gMSkgPDwgR0lUU19CQVNFUl9FTlRSWV9TSVpFX1NISUZUOwor ICAgICAgICByZWcgfD0gR0lUU19CQVNFUl9UWVBFX0NPTExFQ1RJT04gPDwgR0lUU19CQVNFUl9U WVBFX1NISUZUOworICAgICAgICBzYW5pdGl6ZV9pdHNfYmFzZV9yZWcoJnJlZyk7CisKKyAgICAg ICAgaWYgKCByZWcgJiBHSVRTX1ZBTElEX0JJVCApCisgICAgICAgICAgICBpdHMtPm1heF9jb2xs ZWN0aW9ucyA9IGl0c19iYXNlcl9ucl9lbnRyaWVzKHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIGl0cy0+bWF4X2NvbGxlY3Rpb25zID0gMDsKKyAgICAgICAgaXRzLT5iYXNlcl9jb2xs ID0gcmVnOworICAgICAgICBzcGluX3VubG9jaygmaXRzLT5pdHNfbG9jayk7CisgICAgICAgIHJl dHVybiAxOworCisgICAgY2FzZSBWUkFOR0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgor ICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZV82NDsKKworICAgIGNhc2UgVlJBTkdFMzIoMHgwMTQw LCAweEJGRkMpOgorICAgICAgICBnb3RvIHdyaXRlX3Jlc2VydmVkOworICAgIGNhc2UgVlJBTkdF MzIoMHhDMDAwLCAweEZGQ0MpOgorICAgICAgICBnb3RvIHdyaXRlX2ltcGxfZGVmaW5lZDsKKyAg ICBjYXNlIFZSQU5HRTMyKDB4RkZEMCwgMHhGRkU0KTogICAgICAvKiBJTVBERUYgaWRlbnRpZmlj YXRpb24gcmVnaXN0ZXJzICovCisgICAgICAgIGdvdG8gd3JpdGVfaW1wbF9kZWZpbmVkOworCisg ICAgY2FzZSBWUkVHMzIoR0lUU19QSURSMik6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzMy OworCisgICAgY2FzZSBWUkFOR0UzMigweEZGRUMsIDB4RkZGQyk6ICAgICAgLyogSU1QREVGIGlk ZW50aWZpY2F0aW9uIHJlZ2lzdGVycyAqLworICAgICAgICBnb3RvIHdyaXRlX2ltcGxfZGVmaW5l ZDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ayhYRU5MT0dfR19FUlIKKyAgICAgICAg ICAgICAgICIlcHY6IHZHSVRTOiB1bmhhbmRsZWQgd3JpdGUgciVkIG9mZnNldCAlIzA0bHhcbiIs CisgICAgICAgICAgICAgICB2LCBpbmZvLT5kYWJ0LnJlZywgKHVuc2lnbmVkIGxvbmcpaW5mby0+ Z3BhICYgMHhmZmZmKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7 CisKK3dyaXRlX2lnbm9yZV82NDoKKyAgICBpZiAoICF2Z2ljX3JlZzY0X2NoZWNrX2FjY2Vzcyhp bmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworICAgIHJldHVybiAxOworCit3cml0ZV9pZ25v cmVfMzI6CisgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgIT0gREFCVF9XT1JEICkgZ290byBiYWRf d2lkdGg7CisgICAgcmV0dXJuIDE7CisKK3dyaXRlX2ltcGxfZGVmaW5lZDoKKyAgICBwcmludGso WEVOTE9HX0dfREVCVUcKKyAgICAgICAgICAgIiVwdjogdkdJVFM6IFdJIG9uIGltcGxlbWVudGF0 aW9uIGRlZmluZWQgcmVnaXN0ZXIgb2Zmc2V0ICUjMDRseFxuIiwKKyAgICAgICAgICAgdiwgaW5m by0+Z3BhICYgMHhmZmZmKTsKKyAgICByZXR1cm4gMTsKKword3JpdGVfcmVzZXJ2ZWQ6CisgICAg cHJpbnRrKFhFTkxPR19HX0RFQlVHCisgICAgICAgICAgICIlcHY6IHZHSVRTOiBXSSBvbiBpbXBs ZW1lbnRhdGlvbiBkZWZpbmVkIHJlZ2lzdGVyIG9mZnNldCAlIzA0bHhcbiIsCisgICAgICAgICAg IHYsIGluZm8tPmdwYSAmIDB4ZmZmZik7CisgICAgcmV0dXJuIDE7CisKK2JhZF93aWR0aDoKKyAg ICBwcmludGsoWEVOTE9HX0dfRVJSICJ2R0lUUzogYmFkIHdyaXRlIHdpZHRoICVkIHIlZCBvZmZz ZXQgJSMwOGx4XG4iLAorICAgICAgICAgICBpbmZvLT5kYWJ0LnNpemUsIGluZm8tPmRhYnQucmVn LCAodW5zaWduZWQgbG9uZylpbmZvLT5ncGEgJiAweGZmZmYpOworCisgICAgZG9tYWluX2NyYXNo X3N5bmNocm9ub3VzKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBtbWlvX2hhbmRsZXJfb3BzIHZnaWNfaXRzX21taW9faGFuZGxlciA9IHsKKyAgICAucmVhZCAg PSB2Z2ljX3YzX2l0c19tbWlvX3JlYWQsCisgICAgLndyaXRlID0gdmdpY192M19pdHNfbW1pb193 cml0ZSwKK307CisKIGludCB2Z2ljX3YzX2l0c19pbml0X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpk KQogewogICAgIHNwaW5fbG9ja19pbml0KCZkLT5hcmNoLnZnaWMuaXRzX2RldmljZXNfbG9jayk7 CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMuaCBiL3hlbi9pbmNs dWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oCmluZGV4IDc0NzA3NzkuLjQwZjRlZjUgMTAwNjQ0Ci0t LSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oCisrKyBiL3hlbi9pbmNsdWRlL2Fz bS1hcm0vZ2ljX3YzX2l0cy5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIEdJVFNfQkFTRVI1 ICAgICAgICAgICAgICAgICAgICAgMHgxMjgKICNkZWZpbmUgR0lUU19CQVNFUjYgICAgICAgICAg ICAgICAgICAgICAweDEzMAogI2RlZmluZSBHSVRTX0JBU0VSNyAgICAgICAgICAgICAgICAgICAg IDB4MTM4CisjZGVmaW5lIEdJVFNfUElEUjIgICAgICAgICAgICAgICAgICAgICAgR0lDUl9QSURS MgogCiAvKiBSZWdpc3RlciBiaXRzICovCiAjZGVmaW5lIEdJVFNfVkFMSURfQklUICAgICAgICAg ICAgICAgICAgQklUKDYzKQpAQCAtNTcsNiArNTgsNyBAQAogI2RlZmluZSBHSVRTX1RZUEVSX0lU VF9TSVpFX01BU0sgICAgICAgICgweGZVTCA8PCBHSVRTX1RZUEVSX0lUVF9TSVpFX1NISUZUKQog I2RlZmluZSBHSVRTX1RZUEVSX0lUVF9TSVpFKHIpICAgICAgICAgICgoKChyKSAmIEdJVFNfVFlQ RVJfSVRUX1NJWkVfTUFTSykgPj4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdJVFNfVFlQRVJfSVRUX1NJWkVfU0hJRlQpICsgMSkKKyNkZWZpbmUg R0lUU19UWVBFUl9QSFlTSUNBTCAgICAgICAgICAgICAoMVUgPDwgMCkKIAogI2RlZmluZSBHSVRT X0JBU0VSX0lORElSRUNUICAgICAgICAgICAgIEJJVCg2MikKICNkZWZpbmUgR0lUU19CQVNFUl9J Tk5FUl9DQUNIRUFCSUxJVFlfU0hJRlQgICAgICAgIDU5CkBAIC03Niw2ICs3OCw3IEBACiAgICAg ICAgICAgICAgICAgICAgICAgICAoKChyZWcgPj4gR0lUU19CQVNFUl9FTlRSWV9TSVpFX1NISUZU KSAmIDB4MWYpICsgMSkKICNkZWZpbmUgR0lUU19CQVNFUl9TSEFSRUFCSUxJVFlfU0hJRlQgICAx MAogI2RlZmluZSBHSVRTX0JBU0VSX1BBR0VfU0laRV9TSElGVCAgICAgIDgKKyNkZWZpbmUgR0lU U19CQVNFUl9TSVpFX01BU0sgICAgICAgICAgICAweGZmCiAjZGVmaW5lIEdJVFNfQkFTRVJfU0hB UkVBQklMSVRZX01BU0sgICAoMHgzVUxMIDw8IEdJVFNfQkFTRVJfU0hBUkVBQklMSVRZX1NISUZU KQogI2RlZmluZSBHSVRTX0JBU0VSX09VVEVSX0NBQ0hFQUJJTElUWV9NQVNLICAgKDB4N1VMTCA8 PCBHSVRTX0JBU0VSX09VVEVSX0NBQ0hFQUJJTElUWV9TSElGVCkKICNkZWZpbmUgR0lUU19CQVNF Ul9JTk5FUl9DQUNIRUFCSUxJVFlfTUFTSyAgICgweDdVTEwgPDwgR0lUU19CQVNFUl9JTk5FUl9D QUNIRUFCSUxJVFlfU0hJRlQpCi0tIAoyLjkuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=