From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 087/100] drm/amdgpu/virt: impl mailbox for ai Date: Mon, 20 Mar 2017 16:30:22 -0400 Message-ID: <1490041835-11255-73-git-send-email-alexander.deucher@amd.com> References: <1490041835-11255-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1490041835-11255-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Alex Deucher , Xiangliang Yu RnJvbTogWGlhbmdsaWFuZyBZdSA8WGlhbmdsaWFuZy5ZdUBhbWQuY29tPgoKSW1wbGVtZW50IG1h aWxib3ggcHJvdG9jb2wgZm9yIEFJIHNvIHRoYXQgZ3Vlc3QgdmYgY2FuIGNvbW11bmljYXRlCndp dGggR1BVIGh5cGVydmlzb3IuCgpTaWduZWQtb2ZmLWJ5OiBYaWFuZ2xpYW5nIFl1IDxYaWFuZ2xp YW5nLll1QGFtZC5jb20+ClJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVj aGVyQGFtZC5jb20+ClJldmlld2VkLWJ5OiBNb25rIExpdSA8TW9uay5MaXVAYW1kLmNvbT4KQWNr ZWQtYnk6IENocmlzdGlhbiBLw4PCtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvbXhncHVfYWkuYyB8IDIwNyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9teGdwdV9haS5oIHwgIDQ3 ICsrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbXhncHVf YWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L214Z3B1 X2FpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCmluZGV4IGEzNzdmZGIuLmQyMjc2 OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCkBAIC00MCw3ICs0MCw3IEBAIGFt ZGdwdS0kKENPTkZJR19EUk1fQU1ER1BVX0NJSykrPSBjaWsubyBjaWtfaWgubyBrdl9zbWMubyBr dl9kcG0ubyBcCiBhbWRncHUtJChDT05GSUdfRFJNX0FNREdQVV9TSSkrPSBzaS5vIGdtY192Nl8w Lm8gZ2Z4X3Y2XzAubyBzaV9paC5vIHNpX2RtYS5vIGRjZV92Nl8wLm8gc2lfZHBtLm8gc2lfc21j Lm8KIAogYW1kZ3B1LXkgKz0gXAotCXZpLm8gbXhncHVfdmkubyBuYmlvX3Y2XzEubyBzb2MxNS5v CisJdmkubyBteGdwdV92aS5vIG5iaW9fdjZfMS5vIHNvYzE1Lm8gbXhncHVfYWkubwogCiAjIGFk ZCBHTUMgYmxvY2sKIGFtZGdwdS15ICs9IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L214Z3B1X2FpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9teGdwdV9h aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDVlNTQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9teGdwdV9haS5jCkBAIC0wLDAg KzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywg SW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiYW1kZ3B1LmgiCisjaW5j bHVkZSAidmVnYTEwL3NvYzE1aXAuaCIKKyNpbmNsdWRlICJ2ZWdhMTAvTkJJTy9uYmlvXzZfMV9v ZmZzZXQuaCIKKyNpbmNsdWRlICJ2ZWdhMTAvTkJJTy9uYmlvXzZfMV9zaF9tYXNrLmgiCisjaW5j bHVkZSAidmVnYTEwL0dDL2djXzlfMF9vZmZzZXQuaCIKKyNpbmNsdWRlICJ2ZWdhMTAvR0MvZ2Nf OV8wX3NoX21hc2suaCIKKyNpbmNsdWRlICJzb2MxNS5oIgorI2luY2x1ZGUgInNvYzE1X2NvbW1v bi5oIgorI2luY2x1ZGUgIm14Z3B1X2FpLmgiCisKK3N0YXRpYyB2b2lkIHhncHVfYWlfbWFpbGJv eF9zZW5kX2FjayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1MzIgcmVnOworCWlu dCB0aW1lb3V0ID0gQUlfTUFJTEJPWF9USU1FRE9VVDsKKwl1MzIgbWFzayA9IFJFR19GSUVMRF9N QVNLKEJJRl9CWF9QRjBfTUFJTEJPWF9DT05UUk9MLCBSQ1ZfTVNHX1ZBTElEKTsKKworCXJlZyA9 IFJSRUczMl9OT19LSVEoU09DMTVfUkVHX09GRlNFVChOQklPLCAwLAorCQkJCQkgICAgIG1tQklG X0JYX1BGMF9NQUlMQk9YX0NPTlRST0wpKTsKKwlyZWcgPSBSRUdfU0VUX0ZJRUxEKHJlZywgQklG X0JYX1BGMF9NQUlMQk9YX0NPTlRST0wsIFJDVl9NU0dfQUNLLCAxKTsKKwlXUkVHMzJfTk9fS0lR KFNPQzE1X1JFR19PRkZTRVQoTkJJTywgMCwKKwkJCQkgICAgICAgbW1CSUZfQlhfUEYwX01BSUxC T1hfQ09OVFJPTCksIHJlZyk7CisKKwkvKldhaXQgZm9yIFJDVl9NU0dfVkFMSUQgdG8gYmUgMCov CisJcmVnID0gUlJFRzMyX05PX0tJUShTT0MxNV9SRUdfT0ZGU0VUKE5CSU8sIDAsCisJCQkJCSAg ICAgbW1CSUZfQlhfUEYwX01BSUxCT1hfQ09OVFJPTCkpOworCXdoaWxlIChyZWcgJiBtYXNrKSB7 CisJCWlmICh0aW1lb3V0IDw9IDApIHsKKwkJCXByX2VycigiUkNWX01TR19WQUxJRCBpcyBub3Qg Y2xlYXJlZFxuIik7CisJCQlicmVhazsKKwkJfQorCQltZGVsYXkoMSk7CisJCXRpbWVvdXQgLT0x OworCisJCXJlZyA9IFJSRUczMl9OT19LSVEoU09DMTVfUkVHX09GRlNFVChOQklPLCAwLAorCQkJ CQkJICAgICBtbUJJRl9CWF9QRjBfTUFJTEJPWF9DT05UUk9MKSk7CisJfQorfQorCitzdGF0aWMg dm9pZCB4Z3B1X2FpX21haWxib3hfc2V0X3ZhbGlkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBib29sIHZhbCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gUlJFRzMyX05PX0tJUShTT0MxNV9S RUdfT0ZGU0VUKE5CSU8sIDAsCisJCQkJCSAgICAgbW1CSUZfQlhfUEYwX01BSUxCT1hfQ09OVFJP TCkpOworCXJlZyA9IFJFR19TRVRfRklFTEQocmVnLCBCSUZfQlhfUEYwX01BSUxCT1hfQ09OVFJP TCwKKwkJCSAgICBUUk5fTVNHX1ZBTElELCB2YWwgPyAxIDogMCk7CisJV1JFRzMyX05PX0tJUShT T0MxNV9SRUdfT0ZGU0VUKE5CSU8sIDAsIG1tQklGX0JYX1BGMF9NQUlMQk9YX0NPTlRST0wpLAor CQkgICAgICByZWcpOworfQorCitzdGF0aWMgdm9pZCB4Z3B1X2FpX21haWxib3hfdHJhbnNfbXNn KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICAgIGVudW0gaWRoX3JlcXVlc3Qg cmVxKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBSUkVHMzJfTk9fS0lRKFNPQzE1X1JFR19PRkZT RVQoTkJJTywgMCwKKwkJCQkJICAgICBtbUJJRl9CWF9QRjBfTUFJTEJPWF9NU0dCVUZfVFJOX0RX MCkpOworCXJlZyA9IFJFR19TRVRfRklFTEQocmVnLCBCSUZfQlhfUEYwX01BSUxCT1hfTVNHQlVG X1RSTl9EVzAsCisJCQkgICAgTVNHQlVGX0RBVEEsIHJlcSk7CisJV1JFRzMyX05PX0tJUShTT0Mx NV9SRUdfT0ZGU0VUKE5CSU8sIDAsIG1tQklGX0JYX1BGMF9NQUlMQk9YX01TR0JVRl9UUk5fRFcw KSwKKwkJICAgICAgcmVnKTsKKworCXhncHVfYWlfbWFpbGJveF9zZXRfdmFsaWQoYWRldiwgdHJ1 ZSk7Cit9CisKK3N0YXRpYyBpbnQgeGdwdV9haV9tYWlsYm94X3Jjdl9tc2coc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCisJCQkJICAgZW51bSBpZGhfZXZlbnQgZXZlbnQpCit7CisJdTMyIHJl ZzsKKwl1MzIgbWFzayA9IFJFR19GSUVMRF9NQVNLKEJJRl9CWF9QRjBfTUFJTEJPWF9DT05UUk9M LCBSQ1ZfTVNHX1ZBTElEKTsKKworCWlmIChldmVudCAhPSBJREhfRkxSX05PVElGSUNBVElPTl9D TVBMKSB7CisJCXJlZyA9IFJSRUczMl9OT19LSVEoU09DMTVfUkVHX09GRlNFVChOQklPLCAwLAor CQkJCQkJICAgICBtbUJJRl9CWF9QRjBfTUFJTEJPWF9DT05UUk9MKSk7CisJCWlmICghKHJlZyAm IG1hc2spKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmVnID0gUlJFRzMyX05PX0tJUShT T0MxNV9SRUdfT0ZGU0VUKE5CSU8sIDAsCisJCQkJCSAgICAgbW1CSUZfQlhfUEYwX01BSUxCT1hf TVNHQlVGX1JDVl9EVzApKTsKKwlpZiAocmVnICE9IGV2ZW50KQorCQlyZXR1cm4gLUVOT0VOVDsK KworCXhncHVfYWlfbWFpbGJveF9zZW5kX2FjayhhZGV2KTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHhncHVfYWlfcG9sbF9hY2soc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7 CisJaW50IHIgPSAwLCB0aW1lb3V0ID0gQUlfTUFJTEJPWF9USU1FRE9VVDsKKwl1MzIgbWFzayA9 IFJFR19GSUVMRF9NQVNLKEJJRl9CWF9QRjBfTUFJTEJPWF9DT05UUk9MLCBUUk5fTVNHX0FDSyk7 CisJdTMyIHJlZzsKKworCXJlZyA9IFJSRUczMl9OT19LSVEoU09DMTVfUkVHX09GRlNFVChOQklP LCAwLAorCQkJCQkgICAgIG1tQklGX0JYX1BGMF9NQUlMQk9YX0NPTlRST0wpKTsKKwl3aGlsZSAo IShyZWcgJiBtYXNrKSkgeworCQlpZiAodGltZW91dCA8PSAwKSB7CisJCQlwcl9lcnIoIkRvZXNu J3QgZ2V0IGFjayBmcm9tIHBmLlxuIik7CisJCQlyID0gLUVUSU1FOworCQkJYnJlYWs7CisJCX0K KwkJbXNsZWVwKDEpOworCQl0aW1lb3V0IC09IDE7CisKKwkJcmVnID0gUlJFRzMyX05PX0tJUShT T0MxNV9SRUdfT0ZGU0VUKE5CSU8sIDAsCisJCQkJCQkgICAgIG1tQklGX0JYX1BGMF9NQUlMQk9Y X0NPTlRST0wpKTsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCB4Z3B1X3ZpX3Bv bGxfbXNnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBlbnVtIGlkaF9ldmVudCBldmVudCkK K3sKKwlpbnQgciA9IDAsIHRpbWVvdXQgPSBBSV9NQUlMQk9YX1RJTUVET1VUOworCisJciA9IHhn cHVfYWlfbWFpbGJveF9yY3ZfbXNnKGFkZXYsIGV2ZW50KTsKKwl3aGlsZSAocikgeworCQlpZiAo dGltZW91dCA8PSAwKSB7CisJCQlwcl9lcnIoIkRvZXNuJ3QgZ2V0IGFjayBmcm9tIHBmLlxuIik7 CisJCQlyID0gLUVUSU1FOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEpOworCQl0aW1lb3V0 IC09IDE7CisKKwkJciA9IHhncHVfYWlfbWFpbGJveF9yY3ZfbXNnKGFkZXYsIGV2ZW50KTsKKwl9 CisKKwlyZXR1cm4gcjsKK30KKworCitzdGF0aWMgaW50IHhncHVfYWlfc2VuZF9hY2Nlc3NfcmVx dWVzdHMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCWVudW0gaWRoX3JlcXVlc3Qg cmVxKQoreworCWludCByOworCisJeGdwdV9haV9tYWlsYm94X3RyYW5zX21zZyhhZGV2LCByZXEp OworCisJLyogc3RhcnQgdG8gcG9sbCBhY2sgKi8KKwlyID0geGdwdV9haV9wb2xsX2FjayhhZGV2 KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwl4Z3B1X2FpX21haWxib3hfc2V0X3ZhbGlkKGFk ZXYsIGZhbHNlKTsKKworCS8qIHN0YXJ0IHRvIGNoZWNrIG1zZyBpZiByZXF1ZXN0IGlzIGlkaF9y ZXFfZ3B1X2luaXRfYWNjZXNzICovCisJaWYgKHJlcSA9PSBJREhfUkVRX0dQVV9JTklUX0FDQ0VT UyB8fAorCQlyZXEgPT0gSURIX1JFUV9HUFVfRklOSV9BQ0NFU1MgfHwKKwkJcmVxID09IElESF9S RVFfR1BVX1JFU0VUX0FDQ0VTUykgeworCQlyID0geGdwdV92aV9wb2xsX21zZyhhZGV2LCBJREhf UkVBRFlfVE9fQUNDRVNTX0dQVSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGdwdV9haV9yZXF1ZXN0X2Z1bGxfZ3B1X2FjY2Vzcyhz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkJICAgYm9vbCBpbml0KQoreworCWVudW0g aWRoX3JlcXVlc3QgcmVxOworCisJcmVxID0gaW5pdCA/IElESF9SRVFfR1BVX0lOSVRfQUNDRVNT IDogSURIX1JFUV9HUFVfRklOSV9BQ0NFU1M7CisJcmV0dXJuIHhncHVfYWlfc2VuZF9hY2Nlc3Nf cmVxdWVzdHMoYWRldiwgcmVxKTsKK30KKworc3RhdGljIGludCB4Z3B1X2FpX3JlbGVhc2VfZnVs bF9ncHVfYWNjZXNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQkgICBib29sIGlu aXQpCit7CisJZW51bSBpZGhfcmVxdWVzdCByZXE7CisJaW50IHIgPSAwOworCisJcmVxID0gaW5p dCA/IElESF9SRUxfR1BVX0lOSVRfQUNDRVNTIDogSURIX1JFTF9HUFVfRklOSV9BQ0NFU1M7CisJ ciA9IHhncHVfYWlfc2VuZF9hY2Nlc3NfcmVxdWVzdHMoYWRldiwgcmVxKTsKKworCXJldHVybiBy OworfQorCitjb25zdCBzdHJ1Y3QgYW1kZ3B1X3ZpcnRfb3BzIHhncHVfYWlfdmlydF9vcHMgPSB7 CisJLnJlcV9mdWxsX2dwdQk9IHhncHVfYWlfcmVxdWVzdF9mdWxsX2dwdV9hY2Nlc3MsCisJLnJl bF9mdWxsX2dwdQk9IHhncHVfYWlfcmVsZWFzZV9mdWxsX2dwdV9hY2Nlc3MsCit9OwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbXhncHVfYWkuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L214Z3B1X2FpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYmY4YWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L214Z3B1X2FpLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IEFk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lm bmRlZiBfX01YR1BVX0FJX0hfXworI2RlZmluZSBfX01YR1BVX0FJX0hfXworCisjZGVmaW5lIEFJ X01BSUxCT1hfVElNRURPVVQJMTUwMDAwCisKK2VudW0gaWRoX3JlcXVlc3QgeworCUlESF9SRVFf R1BVX0lOSVRfQUNDRVNTID0gMSwKKwlJREhfUkVMX0dQVV9JTklUX0FDQ0VTUywKKwlJREhfUkVR X0dQVV9GSU5JX0FDQ0VTUywKKwlJREhfUkVMX0dQVV9GSU5JX0FDQ0VTUywKKwlJREhfUkVRX0dQ VV9SRVNFVF9BQ0NFU1MKK307CisKK2VudW0gaWRoX2V2ZW50IHsKKwlJREhfQ0xSX01TR19CVUYJ PSAwLAorCUlESF9SRUFEWV9UT19BQ0NFU1NfR1BVLAorCUlESF9GTFJfTk9USUZJQ0FUSU9OLAor CUlESF9GTFJfTk9USUZJQ0FUSU9OX0NNUEwsCisJSURIX0VWRU5UX01BWAorfTsKKworZXh0ZXJu IGNvbnN0IHN0cnVjdCBhbWRncHVfdmlydF9vcHMgeGdwdV9haV92aXJ0X29wczsKKworI2VuZGlm Ci0tIAoyLjUuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==