From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Patterson Subject: [PATCH 4/6] xen/arm: platforms: Add Tegra platform to support basic IRQ routing Date: Thu, 6 Apr 2017 15:47:52 -0400 Message-ID: <1491508074-31647-5-git-send-email-cjp256@gmail.com> References: <1491508074-31647-1-git-send-email-cjp256@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1491508074-31647-1-git-send-email-cjp256@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.xen.org Cc: Chris Patterson , julien.grall@arm.com, sstabellini@kernel.org, temkink@ainfosec.com List-Id: xen-devel@lists.xenproject.org RnJvbTogIkNocmlzIFBhdHRlcnNvbiIgPHBhdHRlcnNvbmNAYWluZm9zZWMuY29tPgoKVGVncmEg ZGV2aWNlcyBoYXZlIGEgbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVyIChsaWMsIG9yIGljdGxy KSB0aGF0Cm11c3QgYmUgcHJvZ3JhbW1lZCBpbiBwYXJhbGxlbCB3aXRoIHRoZWlyIHByaW1hcnkg R0lDLiBGb3IgYWxsIGludGVudHMKYW5kIHB1cnBvc2VzLCB3ZSB0cmVhdCB0aGVzZSBkZXZpY2Vz IGF0dGFjaGVkIHRvIHRoaXMgY29udHJvbGxlciBhcwpjb25uZWN0ZWQgdG8gdGhlIHByaW1hcnkg R0lDLCBhcyBpdCB3aWxsIGJlIGhhbmRsaW5nIHRoZWlyIGludGVycnVwdHMuCgpUaGlzIGNvbW1p dCBhZGRzIHN1cHBvcnQgZm9yIGV4cG9zaW5nIHRoZSBpY3RsciB0byB0aGUgaGFyZHdhcmUgZG9t YWluOwpidXQgYSBmdXR1cmUgY29tbWl0IHdpbGwgZXh0ZW5kIHRoaXMgdG8gc3VwcG9ydCBleHBv c2luZyBhIHZpcnR1YWxpemVkCnZlcnNpb24gb2YgdGhlIGljdGxyIHRvIHRoZSBoYXJkd2FyZSBk b21haW4sIGFuZCB0byBlbnN1cmUgdGhhdAppbnRlcnJ1cHRzIGFyZSB1bm1hc2tlZCBwcm9wZXJs eSB3aGVuIHJvdXRlZCB0byBhIFhlbiwgb3IgdG8gYSBkb21haW4Kb3RoZXIgdGhhbiB0aGUgaGFy ZHdhcmUgZG9tYWluLgoKQXV0aG9yZWQtYnk6IEt5bGUgVGVta2luIDx0ZW1raW5rQGFpbmZvc2Vj LmNvbT4KU2lnbmVkLW9mZi1ieTogS3lsZSBUZW1raW4gPHRlbWtpbmtAYWluZm9zZWMuY29tPgpT aWduZWQtb2ZmLWJ5OiBDaHJpcyBQYXR0ZXJzb24gPHBhdHRlcnNvbmNAYWluZm9zZWMuY29tPgot LS0KCmNoYW5nZXMgc2luY2UgcmZjOgotIHVzZSBib29sIGluc3RlYWQgb2YgYm9vbF90Ci0gZm9y bWF0dGluZyAmIGNvZGUgc3R5bGUgY2xlYW51cAotIGZpeCBkdCBjb21wYXQgbGFiZWwgKG52aWRp YSx0ZWdyYTEyMCAtPiBudmlkaWEsdGVncmExMjQpIGZvciBLMQotIHNlcGFyYXRlIG1lZGlhdGVk IGxlZ2FjeSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbnRvIGl0cyBvd24gbW9kdWxlCi0gc3BsaXQg dGVncmFfaWN0bHJfc2V0X2ludGVycnVwdF9lbmFibGUoKSBpbnRvCiAgdGVncmFfbGljX3NldF9p bnRlcnJ1cHRfdHlwZV9ub3JtYWwoKSBhbmQKICB0ZWdyYV9saWNfc2V0X2ludGVycnVwdF9lbmFi bGUoKQotIGFkZGVkIGEgY291cGxlIGhlbHBlciBmdW5jdGlvbnMgdG8gcmVkdWNlIGR1cGxpY2F0 ZWQgbG9naWMKLSBhZGRlZCB3cmFwcGVyIHRlZ3JhX2xpY19yZWFkbCBhbmQgd3JpdGVsIGZ1bmN0 aW9ucyBmb3IgZXh0ZXJuYWwgdXNlIChtbGljKQotIHJlLW9yZGVyIGRlZmluZXMgaW4gdGVncmEu aAotIGNsZWFudXAgdGVncmFfaW5pdCgpIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gcGF0Y2ggNgoK LS0tCgogeGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9NYWtlZmlsZSAgICAgICB8ICAgMiArCiB4ZW4v YXJjaC9hcm0vcGxhdGZvcm1zL3RlZ3JhLmMgICAgICAgIHwgMzEzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vcGxhdGZvcm1zL3RlZ3JhLmgg fCAgNTQgKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM2OSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy90ZWdyYS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9wbGF0Zm9ybXMvdGVncmEuaAoKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMvTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vcGxhdGZvcm1z L01ha2VmaWxlCmluZGV4IDQ5ZmE2ODMuLmQ3MDMzZDIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2Fy bS9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9NYWtlZmls ZQpAQCAtNiw1ICs2LDcgQEAgb2JqLSQoQ09ORklHX0FSTV8zMikgKz0gb21hcDUubwogb2JqLSQo Q09ORklHX0FSTV8zMikgKz0gcmNhcjIubwogb2JqLSQoQ09ORklHX0FSTV82NCkgKz0gc2VhdHRs ZS5vCiBvYmotJChDT05GSUdfQVJNXzMyKSArPSBzdW54aS5vCitvYmotJChDT05GSUdfQVJNXzMy KSArPSB0ZWdyYS5vCitvYmotJChDT05GSUdfQVJNXzY0KSArPSB0ZWdyYS5vCiBvYmotJChDT05G SUdfQVJNXzY0KSArPSB4Z2VuZS1zdG9ybS5vCiBvYmotJChDT05GSUdfQVJNXzY0KSArPSB4aWxp bngtenlucW1wLm8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMvdGVncmEuYyBi L3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMvdGVncmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5iZGQ5OTY2Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL3BsYXRm b3Jtcy90ZWdyYS5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogTlZJRElBIFRlZ3JhIHNwZWNp ZmljIHNldHRpbmdzCisgKgorICogSWFuIENhbXBiZWxsOyBDb3B5cmlnaHQgKGMpIDIwMTQgQ2l0 cml4IFN5c3RlbXMKKyAqIEt5bGUgVGVta2luOyBDb3B5cmlnaHQgKGMpIDIwMTYgQXNzdXJlZCBJ bmZvcm1hdGlvbiBTZWN1cml0eSwgSW5jLgorICogQ2hyaXMgUGF0dGVyc29uOyBDb3B5cmlnaHQg KGMpIDIwMTYgQXNzdXJlZCBJbmZvcm1hdGlvbiBTZWN1cml0eSwgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9zdGRib29sLmg+CisjaW5jbHVkZSA8eGVu L3NjaGVkLmg+CisjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgor I2luY2x1ZGUgPGFzbS9naWMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdGZvcm0uaD4KKyNpbmNsdWRl IDxhc20vcGxhdGZvcm1zL3RlZ3JhLmg+CisKKy8qIFBlcm1hbmVudCBtYXBwaW5nIHRvIHRoZSBU ZWdyYSBsZWdhY3kgaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCitzdGF0aWMgdm9pZCBfX2lvbWVt ICp0ZWdyYV9pY3Rscl9iYXNlOworCisvKgorICogTGlzdCBvZiBsZWdhY3kgaW50ZXJydXB0IGNv bnRyb2xsZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gcm91dGUKKyAqIFRlZ3JhIGludGVycnVwdHMu CisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVncmFfaW50ZXJydXB0X2NvbXBhdFtd IF9faW5pdGNvbnN0ID0KK3sKKyAgICAibnZpZGlhLHRlZ3JhMTI0LWljdGxyIiwgIC8qIFRlZ3Jh IEsxIGNvbnRyb2xsZXJzICovCisgICAgIm52aWRpYSx0ZWdyYTIxMC1pY3RsciIgICAvKiBUZWdy YSBYMSBjb250cm9sbGVycyAqLworfTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdp dmVuIElSUSBiZWxvbmdzIHRvIGEgc3VwcG9ydGVkIHRlZ3JhIGludGVycnVwdAorICogY29udHJv bGxlci4KKyAqLworc3RhdGljIGJvb2wgdGVncmFfaXJxX2JlbG9uZ3NfdG9faWN0bHIoY29uc3Qg c3RydWN0IGR0X3Jhd19pcnEgKiByaXJxKSAgeworICAgIGludCBpOworCisgICAgZm9yICggaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhX2ludGVycnVwdF9jb21wYXQpOyBpKysgKSB7CisgICAg ICAgIGlmICggZHRfZGV2aWNlX2lzX2NvbXBhdGlibGUocmlycS0+Y29udHJvbGxlciwgdGVncmFf aW50ZXJydXB0X2NvbXBhdFtpXSkgKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2 ZW4gSVJRIGlzIHJvdXRhYmxlIC0tIHRoYXQgaXMsIGlmIGl0IGlzIGRlc2NlbmRlZAorICogZnJv bSB0aGUgcGxhdGZvcm0ncyBwcmltYXJ5IEdJQy4KKyAqLworc3RhdGljIGJvb2wgdGVncmFfaXJx X2lzX3JvdXRhYmxlKGNvbnN0IHN0cnVjdCBkdF9yYXdfaXJxICogcmlycSkKK3sKKyAgICAvKiBJ ZiB0aGUgSVJRIGNvbm5lY3RzIGRpcmVjdGx5IHRvIG91ciBHSUMsIGl0J3MgdHJpdmlhbGx5IHJv dXRhYmxlLiAqLworICAgIGlmICggcmlycS0+Y29udHJvbGxlciA9PSBkdF9pbnRlcnJ1cHRfY29u dHJvbGxlciApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLyoKKyAgICAgKiBJZiB0aGUg SVJRIGJlbG9uZ3MgdG8gYSBsZWdhY3kgaW50ZXJydXB0IGNvbnRyb2xsZXIsIHRoZW4gaXQncwor ICAgICAqIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHRoZSBHSUMsIGFuZCBpcyByb3V0YWJsZS4KKyAg ICAgKi8KKyAgICBpZiAoIHRlZ3JhX2lycV9iZWxvbmdzX3RvX2ljdGxyKHJpcnEpICkKKyAgICAg ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBQbGF0Zm9y bS1zcGVjaWZpYyByZXNldCBjb2RlIGZvciB0aGUgVGVncmEgZGV2aWNlcy4KKyAqIFNob3VsZCBu b3QgcmV0dXJuLgorICovCitzdGF0aWMgdm9pZCB0ZWdyYV9yZXNldCh2b2lkKQoreworICAgIHZv aWQgX19pb21lbSAqYWRkcjsKKyAgICB1MzIgdmFsOworCisgICAgYWRkciA9IGlvcmVtYXBfbm9j YWNoZShURUdSQV9SRVNFVF9CQVNFLCBURUdSQV9SRVNFVF9TSVpFKTsKKyAgICBpZiAoICFhZGRy ICkKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJUZWdyYTogVW5hYmxlIHRvIG1h cCB0ZWdyYSByZXNldCBhZGRyZXNzLiBSZXNldCBmYWlsZWQhXG4iKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIC8qIFdyaXRlIGludG8gdGhlIHJlc2V0IGRldmljZS4gKi8KKyAgICB2 YWwgPSByZWFkbChhZGRyKSB8IFRFR1JBX1JFU0VUX01BU0s7CisgICAgd3JpdGVsKHZhbCwgYWRk cik7CisKKyAgICAvKiBTaG91bGQgbm90IGdldCBoZXJlICovCisgICAgaW91bm1hcChhZGRyKTsK K30KKworLyoKKyAqIENvbnZlcnQgaXJxIGxpbmUgdG8gaW5kZXggb2Ygc2VydmljaW5nIGxlZ2Fj eSBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0ZWdyYV9s aWNfaXJxX3RvX2ljdGxyX2luZGV4KHVuc2lnbmVkIGludCBpcnEpCit7CisgICAgcmV0dXJuIChp cnEgLSBOUl9MT0NBTF9JUlFTKSAvIFRFR1JBX0lSUVNfUEVSX0lDVExSOworfQorCisvKgorICog Q29udmVydCBpcnEgbGluZSB0byBpbmRleCBvZiBpcnEgd2l0aGluIHNlcnZpY2luZyBpbnRlcnJ1 cHQgY29udHJvbGxlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0ZWdyYV9saWNfaXJxX3Rv X2ljdGxyX2lycV9pbmRleCh1bnNpZ25lZCBpbnQgaXJxKQoreworICAgIHJldHVybiAoaXJxIC0g TlJfTE9DQUxfSVJRUykgJSBURUdSQV9JUlFTX1BFUl9JQ1RMUjsKK30KKworLyoKKyAqIE1hcmsg aW50ZXJydXB0IGFzIG5vcm1hbCByYXRoZXIgdGhhbiBhIGZhc3QgSVJRLgorICovCitzdGF0aWMg dm9pZCB0ZWdyYV9saWNfc2V0X2ludGVycnVwdF90eXBlX25vcm1hbCh1bnNpZ25lZCBpbnQgaXJx KQoreworICAgIHVpbnQzMl90IHByZXZpb3VzX2llcF9jbGFzczsKKyAgICB1bnNpZ25lZCBpbnQg aWN0bHJfaW5kZXggPSB0ZWdyYV9saWNfaXJxX3RvX2ljdGxyX2luZGV4KGlycSk7CisgICAgdW5z aWduZWQgaW50IGljdGxyX2lycV9pbmRleCA9IHRlZ3JhX2xpY19pcnFfdG9faWN0bHJfaXJxX2lu ZGV4KGlycSk7CisgICAgdWludDMyX3QgbWFzayA9IEJJVChpY3Rscl9pcnFfaW5kZXgpOworCisg ICAgLyogTWFyayB0aGUgaW50ZXJydXB0IGFzIGEgbm9ybWFsIGludGVycnVwdC0tIG5vdCBhIGZh c3QgSVJRLiAqLworICAgIHByZXZpb3VzX2llcF9jbGFzcyA9IHRlZ3JhX2xpY19yZWFkbChpY3Rs cl9pbmRleCwgVEVHUkFfSUNUTFJfQ1BVX0lFUF9DTEFTUyk7CisgICAgdGVncmFfbGljX3dyaXRl bChpY3Rscl9pbmRleCwgVEVHUkFfSUNUTFJfQ1BVX0lFUF9DTEFTUywgcHJldmlvdXNfaWVwX2Ns YXNzICYgfm1hc2spOworfQorCisvKgorICogRW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0IGxpbmUg Zm9yIHNwZWNpZmllZCBpcnEuCisgKi8KK3N0YXRpYyB2b2lkIHRlZ3JhX2xpY19zZXRfaW50ZXJy dXB0X2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGVuYWJsZWQpCit7CisgICAgdW5zaWdu ZWQgaW50IGljdGxyX2luZGV4ID0gdGVncmFfbGljX2lycV90b19pY3Rscl9pbmRleChpcnEpOwor ICAgIHVuc2lnbmVkIGludCBpY3Rscl9pcnFfaW5kZXggPSB0ZWdyYV9saWNfaXJxX3RvX2ljdGxy X2lycV9pbmRleChpcnEpOworICAgIHVpbnQzMl90IG1hc2sgPSBCSVQoaWN0bHJfaXJxX2luZGV4 KTsKKworICAgIGlmICggZW5hYmxlZCApCisgICAgICAgIHRlZ3JhX2xpY193cml0ZWwoaWN0bHJf aW5kZXgsIFRFR1JBX0lDVExSX0NQVV9JRVJfU0VULCBtYXNrKTsKKyAgICBlbHNlCisgICAgICAg IHRlZ3JhX2xpY193cml0ZWwoaWN0bHJfaW5kZXgsIFRFR1JBX0lDVExSX0NQVV9JRVJfQ0xSLCBt YXNrKTsKK30KKworLyoKKyAqIFJvdXRlcyBhbiBJUlEgdG8gYSBndWVzdCwgYXBwbHlpbmcgc2Fu ZSB2YWx1ZXMgdG8gdGhlIGljdGxyIG1hc2tzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9y IGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0ZWdyYV9yb3V0ZV9p cnFfdG9fZ3Vlc3Qoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHZpcnEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQg aW50IHByaW9yaXR5KQoreworICAgIC8qIFByb2dyYW0gdGhlIGNvcmUgR0lDIHRvIGRlbGl2ZXIg dGhlIGludGVycnVwdCB0byB0aGUgZ3Vlc3QuICovCisgICAgaW50IHJjID0gZ2ljX3JvdXRlX2ly cV90b19ndWVzdChkLCB2aXJxLCBkZXNjLCBwcmlvcml0eSk7CisKKyAgICAvKiBJZiB3ZSBjb3Vs ZG4ndCByb3V0ZSB0aGUgSVJRIHZpYSB0aGUgR0lDLCBiYWlsIG91dC4gKi8KKyAgICBpZiAoIHJj ICkKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJUZWdyYSBMSUM6IENvdWxkbid0 IHByb2dyYW0gR0lDIHRvIHJvdXRlIHZJUlEgJWQgKCVkKS5cbiIsCisgICAgICAgICAgICAgICBk ZXNjLT5pcnEsIHJjKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIC8qCisgICAg ICogSWYgdGhpcyBpcyBhIGxvY2FsIElSUSwgaXQncyBub3QgbWFza2VkIGJ5IHRoZSBpY3Rsciwg c28gd2UKKyAgICAgKiBkb24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGljdGxyIG1hbmlwdWxhdGlv bi4KKyAgICAgKi8KKyAgICBpZiAoIGRlc2MtPmlycSA8IE5SX0xPQ0FMX0lSUVMgKQorICAgICAg ICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIElmIHRoaXMgaXMgdGhlIGhhcmR3YXJlIGRv bWFpbiwgaXQgd2lsbCBoYXZlIHJlYWwgYWNjZXNzIHRvIHRoZSBpY3RsciwKKyAgICAgKiBhbmQg d2lsbCBwcm9ncmFtIHRoZSBpY3RsciBpdHNlbGYsIHNvIGl0IHNob3VsZCBzdGFydCB3aXRoIHRo ZSBpY3RscgorICAgICAqIGRpc2FibGVkLiBJZiB3ZSdyZSBub3QgdGhlIGh3ZG9tLCB0aGUgZG9t YWluIHdvbid0IGludGVyYWN0IHdpdGggdGhlCisgICAgICogaWN0bHIsIGFuZCB0aGUgaW50ZXJy dXB0IHNob3VsZG4ndCBiZSBtYXNrZWQuICBFaXRoZXIgd2F5LCBmaXJzdAorICAgICAqIHNldCB0 aGUgaW50ZXJydXB0IHR5cGUgdG8gbm9ybWFsIChpZiBwcmV2aW91c2x5IHNldCB0byBmYXN0IElS USkuCisgICAgICovCisgICAgdGVncmFfbGljX3NldF9pbnRlcnJ1cHRfdHlwZV9ub3JtYWwoZGVz Yy0+aXJxKTsKKyAgICB0ZWdyYV9saWNfc2V0X2ludGVycnVwdF9lbmFibGUoZGVzYy0+aXJxLCAh aXNfaGFyZHdhcmVfZG9tYWluKGQpKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIFJv dXRlcyBhbiBJUlEgdG8gWGVuLiBUaGlzIG1ldGhvZCBib3RoIHBlcmZvcm1zIHRoZSBjb3JlIElS USByb3V0aW5nLCBhbmQKKyAqIHNldHMgdXAgYW55IGljdGxyIHJvdXRpbmcgbmVjZXNzYXJ5Lgor ICovCitzdGF0aWMgdm9pZCB0ZWdyYV9yb3V0ZV9pcnFfdG9feGVuKHN0cnVjdCBpcnFfZGVzYyAq ZGVzYywgdW5zaWduZWQgaW50IHByaW9yaXR5KQoreworICAgIHVuc2lnbmVkIGludCBpcnEgPSBk ZXNjLT5pcnE7CisKKyAgICAvKiBQcm9ncmFtIHRoZSBjb3JlIEdJQyB0byBkZWxpdmVyIHRoZSBp bnRlcnJ1cHQgdG8gWGVuLiAqLworICAgIGdpY19yb3V0ZV9pcnFfdG9feGVuKGRlc2MsIHByaW9y aXR5KTsKKworICAgIC8qCisgICAgICogSWYgdGhpcyBpcyBhIGxvY2FsIElSUSwgaXQncyBub3Qg bWFza2VkIGJ5IHRoZSBpY3Rsciwgc28gd2UKKyAgICAgKiBkb24ndCBuZWVkIHRvIHBlcmZvcm0g YW55IGljdGxyIG1hbmlwdWxhdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoIGlycSA8IE5SX0xPQ0FM X0lSUVMgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIEVuYWJsZSB0aGUgaW50 ZXJydXB0IGluIHRoZSBpY3Rsci4gWGVuIG9ubHkgdXNlcyB0aGUgR0lDIHRvCisgICAgICogcGVy Zm9ybSBtYXNraW5nLCBzbyB3ZSdsbCBlbmFibGUgdGhlIGludGVycnVwdCB0byBwcmV2ZW50IGlj dGxyCisgICAgICogZ2F0aW5nIG9mIHRoZSBpbnRlcnJ1cHQuCisgICAgICovCisgICAgdGVncmFf bGljX3NldF9pbnRlcnJ1cHRfdHlwZV9ub3JtYWwoZGVzYy0+aXJxKTsKKyAgICB0ZWdyYV9saWNf c2V0X2ludGVycnVwdF9lbmFibGUoZGVzYy0+aXJxLCB0cnVlKTsKK30KKworLyoKKyAqIFJlYWQg cmVnaXN0ZXIgZnJvbSBzcGVjaWZpZWQgbGVnYWN5IGludGVycnVwdCBpbnRlcnJ1cHQgY29udHJv bGxlci4KKyAqLwordWludDMyX3QgdGVncmFfbGljX3JlYWRsKHVuc2lnbmVkIGludCBpY3Rscl9p bmRleCwgdW5zaWduZWQgaW50IHJlZ2lzdGVyX29mZnNldCkKK3sKKyAgICBBU1NFUlQodGVncmFf aWN0bHJfYmFzZSk7CisgICAgQVNTRVJUKGljdGxyX2luZGV4IDwgVEVHUkFfSUNUTFJfQ09VTlQp OworICAgIEFTU0VSVChyZWdpc3Rlcl9vZmZzZXQgPCBURUdSQV9JQ1RMUl9TSVpFKTsKKyAgICBy ZXR1cm4gcmVhZGwodGVncmFfaWN0bHJfYmFzZSArIGljdGxyX2luZGV4ICogVEVHUkFfSUNUTFJf U0laRSArCisgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX29mZnNldCk7Cit9CisKKy8qCisgKiBX cml0ZSByZWdpc3RlciBmb3Igc3BlY2lmaWVkIGxlZ2FjeSBpbnRlcnJ1cHQgaW50ZXJydXB0IGNv bnRyb2xsZXIuCisgKi8KK3ZvaWQgdGVncmFfbGljX3dyaXRlbCh1bnNpZ25lZCBpbnQgaWN0bHJf aW5kZXgsIHVuc2lnbmVkIGludCByZWdpc3Rlcl9vZmZzZXQsIHVpbnQzMl90IHZhbHVlKQorewor ICAgIEFTU0VSVCh0ZWdyYV9pY3Rscl9iYXNlKTsKKyAgICBBU1NFUlQoaWN0bHJfaW5kZXggPCBU RUdSQV9JQ1RMUl9DT1VOVCk7CisgICAgQVNTRVJUKHJlZ2lzdGVyX29mZnNldCA8IFRFR1JBX0lD VExSX1NJWkUpOworICAgIHdyaXRlbCh2YWx1ZSwgdGVncmFfaWN0bHJfYmFzZSArIGljdGxyX2lu ZGV4ICogVEVHUkFfSUNUTFJfU0laRSArCisgICAgICAgICAgIHJlZ2lzdGVyX29mZnNldCk7Cit9 CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBUZWdyYSBsZWdhY3kgaW50ZXJydXB0IGNvbnRyb2xs ZXIsIHBsYWNpbmcgZWFjaCBpbnRlcnJ1cHQKKyAqIGludG8gYSBkZWZhdWx0IHN0YXRlLiBUaGVz ZSBkZWZhdWx0cyBlbnN1cmUgdGhhdCBzdHJheSBpbnRlcnJ1cHRzIGRvbid0CisgKiBhZmZlY3Qg WGVuLgorICovCitzdGF0aWMgaW50IHRlZ3JhX2xpY19pbml0KHZvaWQpCit7CisgICAgaW50IGk7 CisKKyAgICAvKiBNYXAgaW4gdGhlIHRlZ3JhIGljdGxyLiAqLworICAgIHRlZ3JhX2ljdGxyX2Jh c2UgPSBpb3JlbWFwX25vY2FjaGUoVEVHUkFfSUNUTFJfQkFTRSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRFR1JBX0lDVExSX1NJWkUgKiBURUdSQV9JQ1RMUl9DT1VO VCk7CisKKyAgICBpZiAoICF0ZWdyYV9pY3Rscl9iYXNlICkKKyAgICAgICAgcGFuaWMoIkZhaWxl ZCB0byBtYXAgaW4gdGhlIFRlZ3JhIGxlZ2FjeSBpbnRlcnJ1cHQgY29udHJvbGxlciIpOworCisg ICAgLyogSW5pdGlhbGl6ZSBlYWNoIG9mIHRoZSBsZWdhY3kgaW50ZXJydXB0IGNvbnRyb2xsZXJz LiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgVEVHUkFfSUNUTFJfQ09VTlQ7IGkrKyApIHsKKwor ICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGVuYWJsZXMgZm9yIGV2ZXJ5IGludGVycnVw dC4gKi8KKyAgICAgICAgdGVncmFfbGljX3dyaXRlbChpLCBURUdSQV9JQ1RMUl9DUFVfSUVSX0NM UiwgfjApOworCisgICAgICAgIC8qCisgICAgICAgICAqIE1hcmsgYWxsIG9mIG91ciBpbnRlcnJ1 cHRzIGFzIG5vcm1hbCBBUk0gaW50ZXJydXB0cyAoYXMgb3Bwb3NlZAorICAgICAgICAgKiB0byBG YXN0IEludGVycnVwdHMuKQorICAgICAgICAgKi8KKyAgICAgICAgdGVncmFfbGljX3dyaXRlbChp LCBURUdSQV9JQ1RMUl9DUFVfSUVQX0NMQVNTLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworLyoqCisgKiAgU3RhcnR1cCBjb2RlIGZvciB0aGUgVGVncmEuCisgKi8KK3N0YXRpYyBp bnQgdGVncmFfaW5pdCh2b2lkKQoreworICAgIHJldHVybiB0ZWdyYV9saWNfaW5pdCgpOworfQor CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVncmFfZHRfY29tcGF0W10gX19pbml0Y29u c3QgPQoreworICAgICJudmlkaWEsdGVncmExMjAiLCAgLyogVGVncmEgSzEgKi8KKyAgICAibnZp ZGlhLHRlZ3JhMjEwIiwgIC8qIFRlZ3JhIFgxICovCisgICAgTlVMTAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBkdF9kZXZpY2VfbWF0Y2ggdGVncmFfYmxhY2tsaXN0X2RldltdIF9faW5pdGNv bnN0ID0KK3sKKyAgICAvKgorICAgICAqIFRoZSBVQVJUcyBzaGFyZSBhIHBhZ2Ugd2hpY2ggcnVu cyB0aGUgcmlzayBvZiBtYXBwaW5nIHRoZSBYZW4gY29uc29sZQorICAgICAqIFVBUlQgdG8gZG9t MCwgc28gZG9uJ3QgbWFwIGFueSBvZiB0aGVtLgorICAgICAqLworICAgIERUX01BVENIX0NPTVBB VElCTEUoIm52aWRpYSx0ZWdyYTIwLXVhcnQiKSwKKyAgICB7IC8qIHNlbnRpbmVsICovIH0sCit9 OworCitQTEFURk9STV9TVEFSVCh0ZWdyYSwgIlRlZ3JhIikKKyAgICAuYmxhY2tsaXN0X2RldiA9 IHRlZ3JhX2JsYWNrbGlzdF9kZXYsCisgICAgLmNvbXBhdGlibGUgPSB0ZWdyYV9kdF9jb21wYXQs CisgICAgLmluaXQgPSB0ZWdyYV9pbml0LAorICAgIC5yZXNldCA9IHRlZ3JhX3Jlc2V0LAorICAg IC5pcnFfaXNfcm91dGFibGUgPSB0ZWdyYV9pcnFfaXNfcm91dGFibGUsCisgICAgLnJvdXRlX2ly cV90b194ZW4gPSB0ZWdyYV9yb3V0ZV9pcnFfdG9feGVuLAorICAgIC5yb3V0ZV9pcnFfdG9fZ3Vl c3QgPSB0ZWdyYV9yb3V0ZV9pcnFfdG9fZ3Vlc3QsCitQTEFURk9STV9FTkQKKworLyoKKyAqIExv Y2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMt YmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5p bAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3BsYXRmb3Jt cy90ZWdyYS5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9wbGF0Zm9ybXMvdGVncmEuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWNkNzkyCi0tLSAvZGV2L251bGwKKysrIGIv eGVuL2luY2x1ZGUvYXNtLWFybS9wbGF0Zm9ybXMvdGVncmEuaApAQCAtMCwwICsxLDU0IEBACisv KgorICogTlZJRElBIFRlZ3JhIHBsYXRmb3JtIGRlZmluaXRpb25zCisgKgorICogS3lsZSBUZW1r aW47IENvcHlyaWdodCAoYykgMjAxNiBBc3N1cmVkIEluZm9ybWF0aW9uIFNlY3VyaXR5LCBJbmMu CisgKiBDaHJpcyBQYXR0ZXJzb247IENvcHlyaWdodCAoYykgMjAxNiBBc3N1cmVkIEluZm9ybWF0 aW9uIFNlY3VyaXR5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworI2lmbmRlZiBfX0FTTV9BUk1fUExBVEZPUk1T X1RFR1JBX0gKKyNkZWZpbmUgX19BU01fQVJNX1BMQVRGT1JNU19URUdSQV9ICisKKyNkZWZpbmUg ICBURUdSQV9JQ1RMUl9CQVNFICAgICAgICAgICAgMHg2MDAwNDAwMAorI2RlZmluZSAgIFRFR1JB X0lDVExSX1NJWkUgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lICAgVEVHUkFfSUNUTFJf Q09VTlQgICAgICAgICAgIDYKKyNkZWZpbmUgICBURUdSQV9JUlFTX1BFUl9JQ1RMUiAgICAgICAg MzIKKworI2RlZmluZSAgIFRFR1JBX0lDVExSX0NQVV9JRVIgICAgICAgICAweDIwCisjZGVmaW5l ICAgVEVHUkFfSUNUTFJfQ1BVX0lFUl9TRVQgICAgIDB4MjQKKyNkZWZpbmUgICBURUdSQV9JQ1RM Ul9DUFVfSUVSX0NMUiAgICAgMHgyOAorI2RlZmluZSAgIFRFR1JBX0lDVExSX0NQVV9JRVBfQ0xB U1MgICAweDJDCisKKyNkZWZpbmUgICBURUdSQV9JQ1RMUl9DT1BfSUVSICAgICAgICAgMHgzMAor I2RlZmluZSAgIFRFR1JBX0lDVExSX0NPUF9JRVJfU0VUICAgICAweDM0CisjZGVmaW5lICAgVEVH UkFfSUNUTFJfQ09QX0lFUl9DTFIgICAgIDB4MzgKKyNkZWZpbmUgICBURUdSQV9JQ1RMUl9DT1Bf SUVQX0NMQVNTICAgMHgzYworCisjZGVmaW5lICAgVEVHUkFfUkVTRVRfQkFTRSAgICAgICAgICAg IDB4NzAwMGU0MDAKKyNkZWZpbmUgICBURUdSQV9SRVNFVF9TSVpFICAgICAgICAgICAgNAorI2Rl ZmluZSAgIFRFR1JBX1JFU0VUX01BU0sgICAgICAgICAgICAweDEwCisKK3VpbnQzMl90IHRlZ3Jh X2xpY19yZWFkbCh1bnNpZ25lZCBpbnQgaWN0bHJfaW5kZXgsIHVuc2lnbmVkIGludCByZWdpc3Rl cl9vZmZzZXQpOwordm9pZCB0ZWdyYV9saWNfd3JpdGVsKHVuc2lnbmVkIGludCBpY3Rscl9pbmRl eCwgdW5zaWduZWQgaW50IHJlZ2lzdGVyX29mZnNldCwgdWludDMyX3QgdmFsdWUpOworCisjZW5k aWYgLyogX19BU01fQVJNX1BMQVRGT1JNU19URUdSQV9IICovCisKKy8qCisgKiBMb2NhbCB2YXJp YWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVu ZDoKKyAqLwotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK