From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH v2 22/45] ARM: new VGIC: Add MMIO handling framework Date: Thu, 15 Mar 2018 20:30:27 +0000 Message-ID: <20180315203050.19791-23-andre.przywara@linaro.org> References: <20180315203050.19791-1-andre.przywara@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ewZXB-0003dO-9y for xen-devel@lists.xenproject.org; Thu, 15 Mar 2018 20:31:33 +0000 Received: by mail-wm0-x243.google.com with SMTP id w128so12890883wmw.0 for ; Thu, 15 Mar 2018 13:31:31 -0700 (PDT) In-Reply-To: <20180315203050.19791-1-andre.przywara@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Stefano Stabellini , Julien Grall Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org QWRkIGFuIE1NSU8gaGFuZGxpbmcgZnJhbWV3b3JrIHRvIHRoZSBWR0lDIGVtdWxhdGlvbjoKRWFj aCByZWdpc3RlciBpcyBkZXNjcmliZWQgYnkgaXRzIG9mZnNldCwgc2l6ZSAob3IgbnVtYmVyIG9m IGJpdHMgcGVyCklSUSwgaWYgYXBwbGljYWJsZSkgYW5kIHRoZSByZWFkL3dyaXRlIGhhbmRsZXIg ZnVuY3Rpb25zLiBXZSBwcm92aWRlCmluaXRpYWxpemF0aW9uIG1hY3JvcyB0byBkZXNjcmliZSBl YWNoIEdJQyByZWdpc3RlciBsYXRlciBlYXNpbHkuCgpTZXBhcmF0ZSBkaXNwYXRjaCBmdW5jdGlv bnMgZm9yIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIGFyZSBjb25uZWN0ZWQKdG8gWGVuJ3MgTU1J TyBoYW5kbGluZyBmcmFtZXdvcmsgYW5kIGJpbmFyeS1zZWFyY2ggZm9yIHRoZSByZXNwb25zaWJs ZQpyZWdpc3RlciBoYW5kbGVyIGJhc2VkIG9uIHRoZSBvZmZzZXQgYWRkcmVzcyB3aXRoaW4gdGhl IHJlZ2lvbi4KClRoZSByZWdpc3RlciBoYW5kbGVyIHByb3RvdHlwZSBhcmUgY291cnRlc3kgb2Yg Q2hyaXN0b2ZmZXIgRGFsbC4KClRoaXMgaXMgYmFzZWQgb24gTGludXggY29tbWl0IDQ0OTNiMWM0 ODY2YSwgd3JpdHRlbiBieSBNYXJjIFp5bmdpZXIuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5 d2FyYSA8YW5kcmUucHJ6eXdhcmFAbGluYXJvLm9yZz4KLS0tCkNoYW5nZWxvZyB2MSAuLi4gdjI6 Ci0gYWRqdXN0IGluZGVudGF0aW9uCi0gcmVtb3ZlIHVubmVlZGVkIG1hY3JvcwotIHVzZSB1bnNp Z25lZCB0eXBlcwotIHVzZSBuZXcgaWxvZzIoKSBpbXBsZW1lbnRhdGlvbgoKIHhlbi9hcmNoL2Fy bS92Z2ljL3ZnaWMtbW1pby5jIHwgMTgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogeGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy1tbWlvLmggfCAgODkgKysrKysrKysr KysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI2OSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy1tbWlvLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCB4ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLW1taW8uaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS92Z2ljL3ZnaWMtbW1pby5jIGIveGVuL2FyY2gvYXJtL3ZnaWMvdmdpYy1tbWlvLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODY2MDIzYTg0ZAotLS0gL2Rldi9u dWxsCisrKyBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMtbW1pby5jCkBAIC0wLDAgKzEsMTgwIEBA CisvKgorICogVkdJQyBNTUlPIGhhbmRsaW5nIGZ1bmN0aW9ucworICogSW1wb3J0ZWQgZnJvbSBM aW51eCAoIm5ldyIgS1ZNIFZHSUMpIGFuZCBoZWF2aWx5IGFkYXB0ZWQgdG8gWGVuLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVk ZSA8eGVuL2JpdG9wcy5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vc2No ZWQuaD4KKyNpbmNsdWRlIDxhc20vbmV3X3ZnaWMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVy Lmg+CisKKyNpbmNsdWRlICJ2Z2ljLmgiCisjaW5jbHVkZSAidmdpYy1tbWlvLmgiCisKK3Vuc2ln bmVkIGxvbmcgdmdpY19tbWlvX3JlYWRfcmF6KHN0cnVjdCB2Y3B1ICp2Y3B1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQor eworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBsb25nIHZnaWNfbW1pb19yZWFkX3Jhbyhz dHJ1Y3QgdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRy X3QgYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgICByZXR1cm4gLTFVTDsKK30KKwordm9p ZCB2Z2ljX21taW9fd3JpdGVfd2koc3RydWN0IHZjcHUgKnZjcHUsIHBhZGRyX3QgYWRkciwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgdmFs KQoreworICAgIC8qIElnbm9yZSAqLworfQorCitzdGF0aWMgaW50IG1hdGNoX3JlZ2lvbihjb25z dCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmVsdCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpa2V5OworICAgIGNvbnN0IHN0cnVjdCB2Z2ljX3JlZ2lz dGVyX3JlZ2lvbiAqcmVnaW9uID0gZWx0OworCisgICAgaWYgKCBvZmZzZXQgPCByZWdpb24tPnJl Z19vZmZzZXQgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIG9mZnNldCA+PSByZWdp b24tPnJlZ19vZmZzZXQgKyByZWdpb24tPmxlbiApCisgICAgICAgIHJldHVybiAxOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdpY19yZWdpc3Rlcl9yZWdpb24g KgordmdpY19maW5kX21taW9fcmVnaW9uKGNvbnN0IHN0cnVjdCB2Z2ljX3JlZ2lzdGVyX3JlZ2lv biAqcmVnaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnJfcmVnaW9ucywgdW5zaWdu ZWQgaW50IG9mZnNldCkKK3sKKyAgICByZXR1cm4gYnNlYXJjaCgodm9pZCAqKSh1aW50cHRyX3Qp b2Zmc2V0LCByZWdpb25zLCBucl9yZWdpb25zLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihy ZWdpb25zWzBdKSwgbWF0Y2hfcmVnaW9uKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tfcmVnaW9u KGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IHZnaWNfcmVnaXN0ZXJfcmVnaW9uICpyZWdpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgcGFkZHJfdCBhZGRyLCBpbnQgbGVuKQoreworICAgIHVuc2lnbmVkIGludCBmbGFncywg bnJfaXJxcyA9IGQtPmFyY2gudmdpYy5ucl9zcGlzICsgVkdJQ19OUl9QUklWQVRFX0lSUVM7CisK KyAgICBzd2l0Y2ggKCBsZW4gKQorICAgIHsKKyAgICBjYXNlIHNpemVvZih1aW50OF90KToKKyAg ICAgICAgZmxhZ3MgPSBWR0lDX0FDQ0VTU184Yml0OworICAgICAgICBicmVhazsKKyAgICBjYXNl IHNpemVvZih1aW50MzJfdCk6CisgICAgICAgIGZsYWdzID0gVkdJQ19BQ0NFU1NfMzJiaXQ7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2Ugc2l6ZW9mKHVpbnQ2NF90KToKKyAgICAgICAgZmxhZ3Mg PSBWR0lDX0FDQ0VTU182NGJpdDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICggKHJlZ2lvbi0+YWNjZXNzX2ZsYWdz ICYgZmxhZ3MpICYmIElTX0FMSUdORUQoYWRkciwgbGVuKSApCisgICAgeworICAgICAgICBpZiAo ICFyZWdpb24tPmJpdHNfcGVyX2lycSApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg ICAgICAvKiBEbyB3ZSBhY2Nlc3MgYSBub24tYWxsb2NhdGVkIElSUT8gKi8KKyAgICAgICAgcmV0 dXJuIFZHSUNfQUREUl9UT19JTlRJRChhZGRyLCByZWdpb24tPmJpdHNfcGVyX2lycSkgPCBucl9p cnFzOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCB2Z2ljX3JlZ2lzdGVyX3JlZ2lvbiAqCit2Z2ljX2dldF9tbWlvX3JlZ2lvbihzdHJ1Y3QgdmNw dSAqdmNwdSwgc3RydWN0IHZnaWNfaW9fZGV2aWNlICppb2RldiwKKyAgICAgICAgICAgICAgICAg ICAgIHBhZGRyX3QgYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgICBjb25zdCBzdHJ1Y3Qg dmdpY19yZWdpc3Rlcl9yZWdpb24gKnJlZ2lvbjsKKworICAgIHJlZ2lvbiA9IHZnaWNfZmluZF9t bWlvX3JlZ2lvbihpb2Rldi0+cmVnaW9ucywgaW9kZXYtPm5yX3JlZ2lvbnMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgLSBnZm5fdG9fZ2FkZHIoaW9kZXYtPmJhc2Vf Zm4pKTsKKyAgICBpZiAoICFyZWdpb24gfHwgIWNoZWNrX3JlZ2lvbih2Y3B1LT5kb21haW4sIHJl Z2lvbiwgYWRkciwgbGVuKSApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHJl Z2lvbjsKK30KKworc3RhdGljIGludCBkaXNwYXRjaF9tbWlvX3JlYWQoc3RydWN0IHZjcHUgKnZj cHUsIG1taW9faW5mb190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn aXN0ZXJfdCAqciwgdm9pZCAqcHJpdikKK3sKKyAgICBzdHJ1Y3QgdmdpY19pb19kZXZpY2UgKmlv ZGV2ID0gcHJpdjsKKyAgICBjb25zdCBzdHJ1Y3QgdmdpY19yZWdpc3Rlcl9yZWdpb24gKnJlZ2lv bjsKKyAgICB1bnNpZ25lZCBsb25nIGRhdGEgPSAwOworICAgIHBhZGRyX3QgYWRkciA9IGluZm8t PmdwYTsKKyAgICBpbnQgbGVuID0gMVUgPDwgaW5mby0+ZGFidC5zaXplOworCisgICAgcmVnaW9u ID0gdmdpY19nZXRfbW1pb19yZWdpb24odmNwdSwgaW9kZXYsIGFkZHIsIGxlbik7CisgICAgaWYg KCAhcmVnaW9uICkKKyAgICB7CisgICAgICAgIG1lbXNldChyLCAwLCBsZW4pOworICAgICAgICBy ZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGlvZGV2LT5pb2Rldl90eXBlKQorICAgIHsK KyAgICBjYXNlIElPREVWX0RJU1Q6CisgICAgICAgIGRhdGEgPSByZWdpb24tPnJlYWQodmNwdSwg YWRkciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJT0RFVl9SRURJU1Q6CisgICAg ICAgIGRhdGEgPSByZWdpb24tPnJlYWQoaW9kZXYtPnJlZGlzdF92Y3B1LCBhZGRyLCBsZW4pOwor ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtZW1jcHkociwgJmRhdGEsIGxlbik7CisKKyAg ICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkaXNwYXRjaF9tbWlvX3dyaXRlKHN0cnVjdCB2 Y3B1ICp2Y3B1LCBtbWlvX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWdpc3Rlcl90IHIsIHZvaWQgKnByaXYpCit7CisgICAgc3RydWN0IHZnaWNfaW9fZGV2 aWNlICppb2RldiA9IHByaXY7CisgICAgY29uc3Qgc3RydWN0IHZnaWNfcmVnaXN0ZXJfcmVnaW9u ICpyZWdpb247CisgICAgdW5zaWduZWQgbG9uZyBkYXRhID0gcjsKKyAgICBwYWRkcl90IGFkZHIg PSBpbmZvLT5ncGE7CisgICAgaW50IGxlbiA9IDFVIDw8IGluZm8tPmRhYnQuc2l6ZTsKKworICAg IHJlZ2lvbiA9IHZnaWNfZ2V0X21taW9fcmVnaW9uKHZjcHUsIGlvZGV2LCBhZGRyLCBsZW4pOwor ICAgIGlmICggIXJlZ2lvbiApCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoIChpb2Rl di0+aW9kZXZfdHlwZSkKKyAgICB7CisgICAgY2FzZSBJT0RFVl9ESVNUOgorICAgICAgICByZWdp b24tPndyaXRlKHZjcHUsIGFkZHIsIGxlbiwgZGF0YSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgSU9ERVZfUkVESVNUOgorICAgICAgICByZWdpb24tPndyaXRlKGlvZGV2LT5yZWRpc3RfdmNw dSwgYWRkciwgbGVuLCBkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu IDE7Cit9CisKK3N0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZnaWNfaW9fb3BzID0geworICAgIC5y ZWFkID0gZGlzcGF0Y2hfbW1pb19yZWFkLAorICAgIC53cml0ZSA9IGRpc3BhdGNoX21taW9fd3Jp dGUsCit9OworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxl LXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdpYy92Z2ljLW1t aW8uaCBiL3hlbi9hcmNoL2FybS92Z2ljL3ZnaWMtbW1pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmJmMDYyYTI3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJj aC9hcm0vdmdpYy92Z2ljLW1taW8uaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDE1LCAyMDE2IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLwor I2lmbmRlZiBfX1hFTl9BUk1fVkdJQ19WR0lDX01NSU9fSF9fCisjZGVmaW5lIF9fWEVOX0FSTV9W R0lDX1ZHSUNfTU1JT19IX18KKworc3RydWN0IHZnaWNfcmVnaXN0ZXJfcmVnaW9uIHsKKyAgICB1 bnNpZ25lZCBpbnQgcmVnX29mZnNldDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuOworICAgIHVuc2ln bmVkIGludCBiaXRzX3Blcl9pcnE7CisgICAgdW5zaWduZWQgaW50IGFjY2Vzc19mbGFnczsKKyAg ICB1bnNpZ25lZCBsb25nICgqcmVhZCkoc3RydWN0IHZjcHUgKnZjcHUsIHBhZGRyX3QgYWRkciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7CisgICAgdm9pZCAo KndyaXRlKShzdHJ1Y3QgdmNwdSAqdmNwdSwgcGFkZHJfdCBhZGRyLAorICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgbG9uZyB2YWwpOworfTsKKworZXh0ZXJuIHN0 cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZnaWNfaW9fb3BzOworCisjZGVmaW5lIFZHSUNfQUNDRVNT XzhiaXQgICAgMQorI2RlZmluZSBWR0lDX0FDQ0VTU18zMmJpdCAgIDIKKyNkZWZpbmUgVkdJQ19B Q0NFU1NfNjRiaXQgICA0CisKKy8qCisgKiBHZW5lcmF0ZSBhIG1hc2sgdGhhdCBjb3ZlcnMgdGhl IG51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBhZGRyZXNzCisgKiB1cCB0byAxMDI0IGludGVy cnVwdHMsIGVhY2ggcmVwcmVzZW50ZWQgYnkgPGJpdHM+IGJpdHMuIFRoaXMgYXNzdW1lcworICog dGhhdCA8Yml0cz4gaXMgYSBwb3dlciBvZiB0d28uCisgKi8KKyNkZWZpbmUgVkdJQ19BRERSX0lS UV9NQVNLKGJpdHMpICgoKGJpdHMpICogMTAyNCAvIDgpIC0gMSkKKworLyoKKyAqIChhZGRyICYg bWFzaykgZ2l2ZXMgdXMgdGhlIF9ieXRlXyBvZmZzZXQgZm9yIHRoZSBJTlQgSUQuCisgKiBXZSBt dWx0aXBseSB0aGlzIGJ5IDggdGhlIGdldCB0aGUgX2JpdF8gb2Zmc2V0LCB0aGVuIGRpdmlkZSB0 aGlzIGJ5CisgKiB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gbGVhcm4gdGhlIGFjdHVhbCBJTlQgSUQu CisgKiBCdXQgaW5zdGVhZCBvZiBhIGRpdmlzaW9uICh3aGljaCByZXF1aXJlcyBhICJsb25nIGxv bmcgZGl2IiBpbXBsZW1lbnRhdGlvbiksCisgKiB3ZSBzaGlmdCBieSB0aGUgYmluYXJ5IGxvZ2Fy aXRobSBvZiA8Yml0cz4uCisgKiBUaGlzIGFzc3VtZXMgdGhhdCA8Yml0cz4gaXMgYSBwb3dlciBv ZiB0d28uCisgKi8KKyNkZWZpbmUgVkdJQ19BRERSX1RPX0lOVElEKGFkZHIsIGJpdHMpICAoKChh ZGRyKSAmIFZHSUNfQUREUl9JUlFfTUFTSyhiaXRzKSkgKiBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDggPj4gaWxvZzIoYml0cykpCisKKy8qCisgKiBTb21lIFZH SUMgcmVnaXN0ZXJzIHN0b3JlIHBlci1JUlEgaW5mb3JtYXRpb24sIHdpdGggYSBkaWZmZXJlbnQg bnVtYmVyCisgKiBvZiBiaXRzIHBlciBJUlEuIEZvciB0aG9zZSByZWdpc3RlcnMgdGhpcyBtYWNy byBpcyB1c2VkLgorICogVGhlIF9XSVRIX0xFTkdUSCB2ZXJzaW9uIGluc3RhbnRpYXRlcyByZWdp c3RlcnMgd2l0aCBhIGZpeGVkIGxlbmd0aAorICogYW5kIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3 aXRoIHRoZSBfUEVSX0lSUSB2ZXJzaW9uLgorICovCisjZGVmaW5lIFJFR0lTVEVSX0RFU0NfV0lU SF9CSVRTX1BFUl9JUlEob2ZmLCByZCwgd3IsIGJwaSwgYWNjKSAgXAorICAgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgLnJlZ19vZmZzZXQgPSBvZmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIC5iaXRzX3Blcl9pcnEgPSBicGksICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAubGVuID0gYnBpICogMTAyNCAvIDgsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmFjY2Vzc19mbGFncyA9IGFjYywgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5yZWFkID0gcmQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAud3Jp dGUgPSB3ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB9CisKKyNkZWZpbmUgUkVHSVNURVJfREVTQ19XSVRIX0xFTkdUSChvZmYsIHJkLCB3ciwgbGVu Z3RoLCBhY2MpICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAucmVnX29mZnNldCA9IG9mZiwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJpdHNfcGVyX2ly cSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5s ZW4gPSBsZW5ndGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAuYWNjZXNzX2ZsYWdzID0gYWNjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgLnJlYWQgPSByZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIC53cml0ZSA9IHdyLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwordW5zaWduZWQgbG9uZyB2Z2lj X21taW9fcmVhZF9yYXooc3RydWN0IHZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYWRkcl90IGFkZHIsIHVuc2lnbmVkIGludCBsZW4pOworCit1bnNpZ25lZCBs b25nIHZnaWNfbW1pb19yZWFkX3JhbyhzdHJ1Y3QgdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhZGRyX3QgYWRkciwgdW5zaWduZWQgaW50IGxlbik7CisKK3Zv aWQgdmdpY19tbWlvX3dyaXRlX3dpKHN0cnVjdCB2Y3B1ICp2Y3B1LCBwYWRkcl90IGFkZHIsCisg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nIHZh bCk7CisKKyNlbmRpZgotLSAKMi4xNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3hlbi1kZXZlbA==