From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,1/3] ACPI / adxl: Add address translation interface using ACPI DSM From: "Luck, Tony" Message-Id: <20181012180123.GA5625@agluck-desk> Date: Fri, 12 Oct 2018 11:01:23 -0700 To: Borislav Petkov Cc: "Rafael J. Wysocki" , Qiuxu Zhuo , Aristeu Rozanski , Mauro Carvalho Chehab , linux-edac@vger.kernel.org, linux-acpi@vger.kernel.org List-ID: U29tZSBuZXcgc2VydmVycyBwcm92aWRlIGFuIGludGVyZmFjZSBzbyB0aGF0IHRoZSBPUyBjYW4g YXNrIHRoZQpCSU9TIHRvIHRyYW5zbGF0ZSBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEg bWVtb3J5IGFkZHJlc3MKKHNvY2tldCwgbWVtb3J5IGNvbnRyb2xsZXIsIGNoYW5uZWwsIHJhbmss IGRpbW0sIGV0Yy4pLiBUaGlzIGlzCnVzZWZ1bCBmb3IgRURBQyBkcml2ZXJzIHRoYXQgd2FudCB0 byB0YWtlIHRoZSBhZGRyZXNzIG9mIGFuIGVycm9yCnJlcG9ydGVkIGluIGEgbWFjaGluZSBjaGVj ayBiYW5rIGFuZCBsZXQgdGhlIHVzZXIga25vdyB3aGljaApESU1NIG1heSBuZWVkIHRvIGJlIHJl cGxhY2VkLgoKU3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIGF0 OgoKICAgIGh0dHBzOi8vY2RyZHYyLmludGVsLmNvbS92MS9kbC9nZXRDb250ZW50LzYwMzM1NAoK W0Jhc2VkIG9uIGVhcmxpZXIgY29kZSBieSBRaXV4dSBaaHVvIDxxaXV4dS56aHVvQGludGVsLmNv bT5dCgpUZXN0ZWQtYnk6IFFpdXh1IFpodW8gPHFpdXh1LnpodW9AaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+Ci0tLQoKICAgQm9yaXM6CglB ZGQgdmVyYiB0byBmaXJzdCBsaW5lIGNvbW1pdCBkZXNjcmlwdGlvbgoJRG9uJ3QgbmVlZCAjaWZk ZWYgQ09ORklHX0FDUElfQURYTCBndWFyZCBhbnkgbW9yZQoJQ29tbWVudCBmb3IgYWxsb2NhdGlv biBvZiBleHRyYSBlbGVtZW50IGZvciBOVUxMIHRlcm1pbmF0b3IKCU1lcmdlIGFkeGxfZGV0ZWN0 KCkgaW50byBhZHhsX2luaXQoKQoKICAgVG9ueToKCU1ha2UgY291cGxlIG9mIGVycm9yIG1lc3Nh Z2VzIG1vcmUgZGVzY3JpcHRpdmUKLS0tCiBkcml2ZXJzL2FjcGkvS2NvbmZpZyAgICAgfCAgMTAg KysKIGRyaXZlcnMvYWNwaS9NYWtlZmlsZSAgICB8ICAgMyArCiBkcml2ZXJzL2FjcGkvYWNwaV9h ZHhsLmMgfCAxOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNs dWRlL2xpbnV4L2FkeGwuaCAgICAgfCAgMjUgKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMjMwIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FjcGkvYWNwaV9hZHhsLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2FkeGwuaAoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZGQxZWVhOTBm NjdmLi4zMjdjOTNiNTFjYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBi L2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC00OTgsNiArNDk4LDE2IEBAIGNvbmZpZyBBQ1BJX0VY VExPRwogCSAgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5IHdpdGgg Y29ycmVzcG9uZGluZwogCSAgdHJhY2Vwb2ludCB3aGljaCBjYXJyaWVzIHRoYXQgaW5mb3JtYXRp b24gdG8gdXNlcnNwYWNlLgogCitjb25maWcgQUNQSV9BRFhMCisJYm9vbCAiUGh5c2ljYWwgYWRk cmVzcyB0byBESU1NIGFkZHJlc3MgdHJhbnNsYXRpb24iCisJZGVmX2Jvb2wgbgorCWhlbHAKKwkg IEVuYWJsZSBpbnRlcmZhY2UgdGhhdCBjYWxscyBpbnRvIEJJT1MgdXNpbmcgYSBEU00gKGRldmlj ZQorCSAgc3BlY2lmaWMgbWV0aG9kKSB0byBjb252ZXJ0IHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNz ZXMKKwkgIHRvIERJTU0gKHNvY2tldCwgY2hhbm5lbCwgcmFuaywgZGltbSwgZXRjLikuCisJICBP bmx5IGF2YWlsYWJsZSBvbiBzb21lIHNlcnZlcnMuCisJICBVc2VkIGJ5IG5ld2VyIEVEQUMgZHJp dmVycy4KKwogbWVudWNvbmZpZyBQTUlDX09QUkVHSU9OCiAJYm9vbCAiUE1JQyAoUG93ZXIgTWFu YWdlbWVudCBJbnRlZ3JhdGVkIENpcmN1aXQpIG9wZXJhdGlvbiByZWdpb24gc3VwcG9ydCIKIAlo ZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFr ZWZpbGUKaW5kZXggNmQ1OWFhMTA5YTkxLi5lZGMwMzkzMTNjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTYxLDYgKzYx LDkgQEAgYWNwaS0kKENPTkZJR19BQ1BJX0xQSVQpCSs9IGFjcGlfbHBpdC5vCiBhY3BpLSQoQ09O RklHX0FDUElfR0VORVJJQ19HU0kpICs9IGlycS5vCiBhY3BpLSQoQ09ORklHX0FDUElfV0FUQ0hE T0cpCSs9IGFjcGlfd2F0Y2hkb2cubwogCisjIEFkZHJlc3MgdHJhbnNsYXRpb24KK2FjcGktJChD T05GSUdfQUNQSV9BRFhMKQkrPSBhY3BpX2FkeGwubworCiAjIFRoZXNlIGFyZSAocG90ZW50aWFs bHkpIHNlcGFyYXRlIG1vZHVsZXMKIAogIyBJUE1JIG1heSBiZSB1c2VkIGJ5IG90aGVyIGRyaXZl cnMsIHNvIGl0IGhhcyB0byBpbml0aWFsaXNlIGJlZm9yZSB0aGVtCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2FjcGkvYWNwaV9hZHhsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9hZHhsLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42ODMyMzVmOTYwMTEKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9hZHhsLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQWRkcmVzcyB0cmFuc2xhdGlv biBpbnRlcmZhY2UgdmlhIEFDUEkgRFNNLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEludGVsIENv cnBvcmF0aW9uCisgKgorICogU3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UgaXMgYXZh aWxhYmxlIGF0OgorICoKKyAqCWh0dHBzOi8vY2RyZHYyLmludGVsLmNvbS92MS9kbC9nZXRDb250 ZW50LzYwMzM1NAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGlu dXgvYWR4bC5oPgorCisjZGVmaW5lIEFEWExfUkVWSVNJT04JCQkweDEKKyNkZWZpbmUgQURYTF9J RFhfR0VUX0FERFJfUEFSQU1TCTB4MQorI2RlZmluZSBBRFhMX0lEWF9GT1JXQVJEX1RSQU5TTEFU RQkweDIKKyNkZWZpbmUgQUNQSV9BRFhMX1BBVEgJCQkiXFxfU0IuQURYTCIKKworLyoKKyAqIFRo ZSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgcHJvdmlkZSBhIGxpbWl0IG9uIGhvdyBtYW55CisgKiBj b21wb25lbnRzIGFyZSBpbiBhIG1lbW9yeSBhZGRyZXNzLiBCdXQgc2luY2Ugd2UgYWxsb2NhdGUK KyAqIG1lbW9yeSBiYXNlZCBvbiB0aGUgbnVtYmVyIHRoZSBCSU9TIHRlbGxzIHVzLCB3ZSBzaG91 bGQKKyAqIGRlZmVuZCBhZ2FpbnN0IGluc2FuZSB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgQURYTF9N QVhfQ09NUE9ORU5UUwkJNTAwCisKKyN1bmRlZiBwcl9mbXQKKyNkZWZpbmUgcHJfZm10KGZtdCkg IkFEWEw6ICIgZm10CisKK3N0YXRpYyBhY3BpX2hhbmRsZSBoYW5kbGU7CitzdGF0aWMgdW5pb24g YWNwaV9vYmplY3QgKnBhcmFtczsKK3N0YXRpYyBjb25zdCBndWlkX3QgYWR4bF9ndWlkID0KKwlH VUlEX0lOSVQoMHhBQTNDMDUwQSwgMHg3RUE0LCAweDRDMUYsCisJCSAgMHhBRiwgMHhEQSwgMHgx MiwgMHg2NywgMHhERiwgMHhEMywgMHhENCwgMHg4RCk7CisKK3N0YXRpYyBpbnQgYWR4bF9jb3Vu dDsKK3N0YXRpYyBjaGFyICoqYWR4bF9jb21wb25lbnRfbmFtZXM7CisKK3N0YXRpYyB1bmlvbiBh Y3BpX29iamVjdCAqYWR4bF9kc20oaW50IGNtZCwgdW5pb24gYWNwaV9vYmplY3QgYXJndltdKQor eworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmosICpvOworCisJb2JqID0gYWNwaV9ldmFsdWF0ZV9k c21fdHlwZWQoaGFuZGxlLCAmYWR4bF9ndWlkLCBBRFhMX1JFVklTSU9OLAorCQkJCSAgICAgIGNt ZCwgYXJndiwgQUNQSV9UWVBFX1BBQ0tBR0UpOworCWlmICghb2JqKSB7CisJCXByX2luZm8oIkVt cHR5IG9ialxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChvYmotPnBhY2thZ2UuY291 bnQgIT0gMikgeworCQlwcl9pbmZvKCJCYWQgcGtnIGNvdW50ICVkXG4iLCBvYmotPnBhY2thZ2Uu Y291bnQpOworCQlnb3RvIGVycjsKKwl9CisKKwlvID0gb2JqLT5wYWNrYWdlLmVsZW1lbnRzOwor CWlmIChvLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCXByX2luZm8oIkJhZCAxc3Qg ZWxlbWVudCB0eXBlICVkXG4iLCBvLT50eXBlKTsKKwkJZ290byBlcnI7CisJfQorCWlmIChvLT5p bnRlZ2VyLnZhbHVlKSB7CisJCXByX2luZm8oIkJhZCByZXQgdmFsICVsbHVcbiIsIG8tPmludGVn ZXIudmFsdWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlvID0gb2JqLT5wYWNrYWdlLmVsZW1lbnRz ICsgMTsKKwlpZiAoby0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlwcl9pbmZvKCJC YWQgMm5kIGVsZW1lbnQgdHlwZSAlZFxuIiwgby0+dHlwZSk7CisJCWdvdG8gZXJyOworCX0KKwly ZXR1cm4gb2JqOworCitlcnI6CisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIE5VTEw7Cit9CisK Ky8qKgorICogYWR4bF9nZXRfY29tcG9uZW50X25hbWVzIC0gZ2V0IGxpc3Qgb2YgbWVtb3J5IGNv bXBvbmVudCBuYW1lcworICogUmV0dXJucyBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzdHJpbmcg bmFtZXMKKyAqCisgKiBHaXZlIHRoZSBjYWxsZXIgYSBwb2ludGVyIHRvIHRoZSBsaXN0IG9mIG1l bW9yeSBjb21wb25lbnQgbmFtZXMKKyAqIGUuZy4geyAiU3lzdGVtQWRkcmVzcyIsICJQcm9jZXNz b3JTb2NrZXRJZCIsICJDaGFubmVsSWQiLCAuLi4gTlVMTCB9CisgKiBDYWxsZXIgc2hvdWxkIGNv dW50IGhvdyBtYW55IHN0cmluZ3MgaW4gb3JkZXIgdG8gYWxsb2NhdGUgYSBidWZmZXIKKyAqIGZv ciB0aGUgcmV0dXJuIGZyb20gYWR4bF9kZWNvZGUoKS4KKyAqLworY29uc3QgY2hhciAqIGNvbnN0 ICphZHhsX2dldF9jb21wb25lbnRfbmFtZXModm9pZCkKK3sKKwlyZXR1cm4gKGNvbnN0IGNoYXIg KiBjb25zdCAqKWFkeGxfY29tcG9uZW50X25hbWVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWR4 bF9nZXRfY29tcG9uZW50X25hbWVzKTsKKworLyoqCisgKiBhZHhsX2RlY29kZSAtIGFzayBCSU9T IHRvIGRlY29kZSBhIHN5c3RlbSBhZGRyZXNzIHRvIG1lbW9yeSBhZGRyZXNzCisgKiBAYWRkcjog dGhlIGFkZHJlc3MgdG8gZGVjb2RlCisgKiBAY29tcG9uZW50X3ZhbHVlczogcG9pbnRlciB0byBh cnJheSBvZiB2YWx1ZXMgZm9yIGVhY2ggY29tcG9uZW50CisgKiBSZXR1cm5zIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqCisgKiBUaGUgaW5kZXggb2YgZWFj aCB2YWx1ZSByZXR1cm5lZCBpbiB0aGUgYXJyYXkgbWF0Y2hlcyB0aGUgaW5kZXggb2YKKyAqIGVh Y2ggY29tcG9uZW50IG5hbWUgcmV0dXJuZWQgYnkgYWR4bF9nZXRfY29tcG9uZW50X25hbWVzKCku CisgKiBDb21wb25lbnRzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGZvciB0aGlzIGFkZHJlc3MgdHJh bnNsYXRpb24gKGUuZy4KKyAqIG1pcnJvciBjaGFubmVsIG51bWJlciBmb3IgYSBub24tbWlycm9y ZWQgYWRkcmVzcykgYXJlIHNldCB0byB+MHVsbC4KKyAqLworaW50IGFkeGxfZGVjb2RlKHU2NCBh ZGRyLCB1NjQgY29tcG9uZW50X3ZhbHVlc1tdKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IGFyZ3Y0 WzJdLCAqcmVzdWx0cywgKnI7CisJaW50IGksIGNudDsKKworCWlmICghYWR4bF9jb21wb25lbnRf bmFtZXMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWFyZ3Y0WzBdLnR5cGUgPSBBQ1BJX1RZ UEVfUEFDS0FHRTsKKwlhcmd2NFswXS5wYWNrYWdlLmNvdW50ID0gMTsKKwlhcmd2NFswXS5wYWNr YWdlLmVsZW1lbnRzID0gJmFyZ3Y0WzFdOworCWFyZ3Y0WzFdLmludGVnZXIudHlwZSA9IEFDUElf VFlQRV9JTlRFR0VSOworCWFyZ3Y0WzFdLmludGVnZXIudmFsdWUgPSBhZGRyOworCisJcmVzdWx0 cyA9IGFkeGxfZHNtKEFEWExfSURYX0ZPUldBUkRfVFJBTlNMQVRFLCBhcmd2NCk7CisJaWYgKCFy ZXN1bHRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSByZXN1bHRzLT5wYWNrYWdlLmVsZW1l bnRzICsgMTsKKwljbnQgPSByLT5wYWNrYWdlLmNvdW50OworCWlmIChjbnQgIT0gYWR4bF9jb3Vu dCkgeworCQlBQ1BJX0ZSRUUocmVzdWx0cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyID0g ci0+cGFja2FnZS5lbGVtZW50czsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJY29t cG9uZW50X3ZhbHVlc1tpXSA9IHJbaV0uaW50ZWdlci52YWx1ZTsKKworCUFDUElfRlJFRShyZXN1 bHRzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWR4bF9kZWNvZGUpOwor CitzdGF0aWMgaW50IF9faW5pdCBhZHhsX2luaXQodm9pZCkKK3sKKwljaGFyICpwYXRoID0gQUNQ SV9BRFhMX1BBVEg7CisJdW5pb24gYWNwaV9vYmplY3QgKnA7CisJYWNwaV9zdGF0dXMgc3RhdHVz OworCWludCBpOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIHBhdGgsICZoYW5k bGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcl9pbmZvKCJObyBBQ1BJIGhh bmRsZSBmb3IgcGF0aCAlc1xuIiwgcGF0aCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlm ICghYWNwaV9oYXNfbWV0aG9kKGhhbmRsZSwgIl9EU00iKSkgeworCQlwcl9pbmZvKCJObyBEU00g bWV0aG9kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFhY3BpX2NoZWNrX2Rz bShoYW5kbGUsICZhZHhsX2d1aWQsIEFEWExfUkVWSVNJT04sCisJCQkgICAgQURYTF9JRFhfR0VU X0FERFJfUEFSQU1TIHwKKwkJCSAgICBBRFhMX0lEWF9GT1JXQVJEX1RSQU5TTEFURSkpIHsKKwkJ cHJfaW5mbygiRFNNIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IGZvcndhcmQgdHJhbnNsYXRlXG4i KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGFyYW1zID0gYWR4bF9kc20oQURYTF9JRFhf R0VUX0FERFJfUEFSQU1TLCBOVUxMKTsKKwlpZiAoIXBhcmFtcykgeworCQlwcl9pbmZvKCJGYWls ZWQgdG8gZ2V0IGNvbXBvbmVudCBuYW1lc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CXAgPSBwYXJhbXMtPnBhY2thZ2UuZWxlbWVudHMgKyAxOworCWFkeGxfY291bnQgPSBwLT5wYWNr YWdlLmNvdW50OworCWlmIChhZHhsX2NvdW50ID4gQURYTF9NQVhfQ09NUE9ORU5UUykgeworCQlw cl9pbmZvKCJJbnNhbmUgbnVtYmVyIG9mIGFkZHJlc3MgY29tcG9uZW50IG5hbWVzICVkXG4iLCBh ZHhsX2NvdW50KTsKKwkJQUNQSV9GUkVFKHBhcmFtcyk7CisJCXJldHVybiAtRU5PREVWOworCX0K KwlwID0gcC0+cGFja2FnZS5lbGVtZW50czsKKworCS8qCisJICogQWxsb2NhdGUgb25lIGV4dHJh IGZvciBOVUxMIHRlcm1pbmF0aW9uLgorCSAqLworCWFkeGxfY29tcG9uZW50X25hbWVzID0ga2Nh bGxvYyhhZHhsX2NvdW50ICsgMSwgc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICgh YWR4bF9jb21wb25lbnRfbmFtZXMpIHsKKwkJQUNQSV9GUkVFKHBhcmFtcyk7CisJCXJldHVybiAt RU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZHhsX2NvdW50OyBpKyspCisJCWFkeGxf Y29tcG9uZW50X25hbWVzW2ldID0gcFtpXS5zdHJpbmcucG9pbnRlcjsKKworCXJldHVybiAwOwor fQorc3Vic3lzX2luaXRjYWxsKGFkeGxfaW5pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L2FkeGwuaCBiL2luY2x1ZGUvbGludXgvYWR4bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNjAyMzcwNGU1ZDBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9s aW51eC9hZHhsLmgKQEAgLTAsMCArMSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgKi8KKy8qCisgKiBBZGRyZXNzIHRyYW5zbGF0aW9uIGludGVyZmFjZSB2aWEgQUNQ SSBEU00uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisj aWZuZGVmIF9MSU5VWF9BRFhMX0gKKyNkZWZpbmUgX0xJTlVYX0FEWExfSAorCisjaWZkZWYgQ09O RklHX0FDUElfQURYTAorY29uc3QgY2hhciAqIGNvbnN0ICphZHhsX2dldF9jb21wb25lbnRfbmFt ZXModm9pZCk7CitpbnQgYWR4bF9kZWNvZGUodTY0IGFkZHIsIHU2NCBjb21wb25lbnRfdmFsdWVz W10pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqIGNvbnN0ICphZHhsX2dldF9j b21wb25lbnRfbmFtZXModm9pZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgYWR4bF9kZWNvZGUodTY0IGFkZHIsIHU2NCBjb21wb25lbnRfdmFsdWVzW10pCit7CisJ cmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTElOVVhfQURYTF9I ICovCg==