From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 15/27] drm/amdgpu: add psp_v12_0 for renoir (v2) Date: Fri, 9 Aug 2019 10:52:50 -0500 Message-ID: <20190809155302.4733-15-alexander.deucher@amd.com> References: <20190809155302.4733-1-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809155302.4733-1-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 , Huang Rui , Aaron Liu RnJvbTogQWFyb24gTGl1IDxhYXJvbi5saXVAYW1kLmNvbT4KCjEuIEFkZCBwc3AgaXAgYmxvY2sK Mi4gVXNlIGRpcmVjdCBsb2FkaW5nIHR5cGUgYnkgZGVmYXVsdCBhbmQgaXQgY2FuIGFsc28gY29u ZmlnIHBzcAogICBsb2FkaW5nIHR5cGUuCjMuIEJ5cGFzcyBzb3MgZncgbG9hZGluZyBhbmQgeGdt aSZyYXMgaW50ZXJmYWNlCgp2MjogZHJvcCBUQSBsb2FkaW5nCgpTaWduZWQtb2ZmLWJ5OiBBYXJv biBMaXUgPGFhcm9uLmxpdUBhbWQuY29tPgpSZXZpZXdlZC1ieTogSHVhbmcgUnVpIDxyYXkuaHVh bmdAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hl ckBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAg IHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmMgICB8ICAx MyArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmggICB8ICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdWNvZGUuYyB8ICAgNyArLQogZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMl8wLmMgICAgfCA1NjUgKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMl8wLmggICAgfCAgMzAg KysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NvYzE1LmMgICAgICAgIHwgICAyICsKIDcg ZmlsZXMgY2hhbmdlZCwgNjE5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YxMl8wLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuaAoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKaW5kZXggOGFmYTBiY2ViNDYwLi44OTU3ZDhkZjhi ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlCkBAIC0xMDAsNyArMTAwLDggQEAg YW1kZ3B1LXkgKz0gXAogCWFtZGdwdV9wc3AubyBcCiAJcHNwX3YzXzEubyBcCiAJcHNwX3YxMF8w Lm8gXAotCXBzcF92MTFfMC5vCisJcHNwX3YxMV8wLm8gXAorCXBzcF92MTJfMC5vCiAKICMgYWRk IFNNQyBibG9jawogYW1kZ3B1LXkgKz0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3BzcC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3BzcC5jCmluZGV4IDRhZDlkMzY2NTNiOS4uNGJjOGI1Mzc3NzU1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAicHNw X3YzXzEuaCIKICNpbmNsdWRlICJwc3BfdjEwXzAuaCIKICNpbmNsdWRlICJwc3BfdjExXzAuaCIK KyNpbmNsdWRlICJwc3BfdjEyXzAuaCIKIAogc3RhdGljIHZvaWQgcHNwX3NldF9mdW5jcyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiAKQEAgLTYzLDYgKzY0LDkgQEAgc3RhdGljIGludCBw c3BfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCiAJCXBzcF92MTFfMF9zZXRfcHNwX2Z1bmNzKHBz cCk7CiAJCXBzcC0+YXV0b2xvYWRfc3VwcG9ydGVkID0gdHJ1ZTsKIAkJYnJlYWs7CisJY2FzZSBD SElQX1JFTk9JUjoKKwkJcHNwX3YxMl8wX3NldF9wc3BfZnVuY3MocHNwKTsKKwkJYnJlYWs7CiAJ ZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTM1OCwzICsxMzYyLDEyIEBAIGNv bnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBwc3BfdjExXzBfaXBfYmxvY2sgPQog CS5yZXYgPSAwLAogCS5mdW5jcyA9ICZwc3BfaXBfZnVuY3MsCiB9OworCitjb25zdCBzdHJ1Y3Qg YW1kZ3B1X2lwX2Jsb2NrX3ZlcnNpb24gcHNwX3YxMl8wX2lwX2Jsb2NrID0KK3sKKwkudHlwZSA9 IEFNRF9JUF9CTE9DS19UWVBFX1BTUCwKKwkubWFqb3IgPSAxMiwKKwkubWlub3IgPSAwLAorCS5y ZXYgPSAwLAorCS5mdW5jcyA9ICZwc3BfaXBfZnVuY3MsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3BzcC5oCmluZGV4IGUwZmMyYTc5MGU1My4uMDAyOWZhMmIyZmY5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5oCkBAIC0yNzAsNiArMjcwLDcgQEAg ZXh0ZXJuIGludCBwc3Bfd2FpdF9mb3Ioc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsIHVpbnQzMl90 IHJlZ19pbmRleCwKIAkJCXVpbnQzMl90IGZpZWxkX3ZhbCwgdWludDMyX3QgbWFzaywgYm9vbCBj aGVja19jaGFuZ2VkKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVy c2lvbiBwc3BfdjEwXzBfaXBfYmxvY2s7CitleHRlcm4gY29uc3Qgc3RydWN0IGFtZGdwdV9pcF9i bG9ja192ZXJzaW9uIHBzcF92MTJfMF9pcF9ibG9jazsKIAogaW50IHBzcF9ncHVfcmVzZXQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogaW50IHBzcF91cGRhdGVfdmNuX3NyYW0oc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCBpbnN0X2lkeCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91Y29kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3Vjb2RlLmMKaW5kZXggZjZiY2U1MGUyYjA5Li5lZTZhOWJlZThmMDggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91Y29kZS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91Y29kZS5jCkBAIC0zNjgsOCArMzY4 LDEzIEBAIGFtZGdwdV91Y29kZV9nZXRfbG9hZF90eXBlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LCBpbnQgbG9hZF90eXBlKQogCQllbHNlCiAJCQlyZXR1cm4gQU1ER1BVX0ZXX0xPQURfUFNQ OwogCWNhc2UgQ0hJUF9BUkNUVVJVUzoKLQljYXNlIENISVBfUkVOT0lSOgogCQlyZXR1cm4gQU1E R1BVX0ZXX0xPQURfRElSRUNUOworCWNhc2UgQ0hJUF9SRU5PSVI6CisJCWlmIChsb2FkX3R5cGUg PT0gQU1ER1BVX0ZXX0xPQURfUFNQKQorCQkJcmV0dXJuIEFNREdQVV9GV19MT0FEX1BTUDsKKwkJ ZWxzZQorCQkJcmV0dXJuIEFNREdQVV9GV19MT0FEX0RJUkVDVDsKKwogCWRlZmF1bHQ6CiAJCURS TV9FUlJPUigiVW5rbm93biBmaXJtd2FyZSBsb2FkIHR5cGVcbiIpOwogCX0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTJfMC5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvcHNwX3YxMl8wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5mMzdiOGFmNGI5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9wc3BfdjEyXzAuYwpAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAqIENvcHlyaWdo dCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu Y2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisg KiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLwor CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlICJhbWRncHUuaCIKKyNpbmNs dWRlICJhbWRncHVfcHNwLmgiCisjaW5jbHVkZSAiYW1kZ3B1X3Vjb2RlLmgiCisjaW5jbHVkZSAi c29jMTVfY29tbW9uLmgiCisjaW5jbHVkZSAicHNwX3YxMl8wLmgiCisKKyNpbmNsdWRlICJtcC9t cF8xMl8wXzBfb2Zmc2V0LmgiCisjaW5jbHVkZSAibXAvbXBfMTJfMF8wX3NoX21hc2suaCIKKyNp bmNsdWRlICJnYy9nY185XzBfb2Zmc2V0LmgiCisjaW5jbHVkZSAic2RtYTAvc2RtYTBfNF8wX29m ZnNldC5oIgorI2luY2x1ZGUgIm5iaW8vbmJpb183XzRfb2Zmc2V0LmgiCisKKyNpbmNsdWRlICJv c3Mvb3Nzc3lzXzRfMF9vZmZzZXQuaCIKKyNpbmNsdWRlICJvc3Mvb3Nzc3lzXzRfMF9zaF9tYXNr LmgiCisKK01PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3Jlbm9pcl9hc2QuYmluIik7CisvKiBhZGRy ZXNzIGJsb2NrICovCisjZGVmaW5lIHNtbk1QMV9GSVJNV0FSRV9GTEFHUwkJMHgzMDEwMDI0CisK K3N0YXRpYyBpbnQgcHNwX3YxMl8wX2luaXRfbWljcm9jb2RlKHN0cnVjdCBwc3BfY29udGV4dCAq cHNwKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcHNwLT5hZGV2OworCWNvbnN0 IGNoYXIgKmNoaXBfbmFtZTsKKwljaGFyIGZ3X25hbWVbMzBdOworCWludCBlcnIgPSAwOworCWNv bnN0IHN0cnVjdCBwc3BfZmlybXdhcmVfaGVhZGVyX3YxXzAgKmFzZF9oZHI7CisKKwlEUk1fREVC VUcoIlxuIik7CisKKwlzd2l0Y2ggKGFkZXYtPmFzaWNfdHlwZSkgeworCWNhc2UgQ0hJUF9SRU5P SVI6CisJCWNoaXBfbmFtZSA9ICJyZW5vaXIiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUco KTsKKwl9CisKKwlzbnByaW50Zihmd19uYW1lLCBzaXplb2YoZndfbmFtZSksICJhbWRncHUvJXNf YXNkLmJpbiIsIGNoaXBfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYWRldi0+cHNw LmFzZF9mdywgZndfbmFtZSwgYWRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDE7CisK KwllcnIgPSBhbWRncHVfdWNvZGVfdmFsaWRhdGUoYWRldi0+cHNwLmFzZF9mdyk7CisJaWYgKGVy cikKKwkJZ290byBvdXQxOworCisJYXNkX2hkciA9IChjb25zdCBzdHJ1Y3QgcHNwX2Zpcm13YXJl X2hlYWRlcl92MV8wICopYWRldi0+cHNwLmFzZF9mdy0+ZGF0YTsKKwlhZGV2LT5wc3AuYXNkX2Z3 X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShhc2RfaGRyLT5oZWFkZXIudWNvZGVfdmVyc2lvbik7CisJ YWRldi0+cHNwLmFzZF9mZWF0dXJlX3ZlcnNpb24gPSBsZTMyX3RvX2NwdShhc2RfaGRyLT51Y29k ZV9mZWF0dXJlX3ZlcnNpb24pOworCWFkZXYtPnBzcC5hc2RfdWNvZGVfc2l6ZSA9IGxlMzJfdG9f Y3B1KGFzZF9oZHItPmhlYWRlci51Y29kZV9zaXplX2J5dGVzKTsKKwlhZGV2LT5wc3AuYXNkX3N0 YXJ0X2FkZHIgPSAodWludDhfdCAqKWFzZF9oZHIgKworCQkJCWxlMzJfdG9fY3B1KGFzZF9oZHIt PmhlYWRlci51Y29kZV9hcnJheV9vZmZzZXRfYnl0ZXMpOworCisJcmV0dXJuIDA7CisKK291dDE6 CisJcmVsZWFzZV9maXJtd2FyZShhZGV2LT5wc3AuYXNkX2Z3KTsKKwlhZGV2LT5wc3AuYXNkX2Z3 ID0gTlVMTDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHNwX3YxMl8wX2Jvb3Rs b2FkZXJfbG9hZF9zeXNkcnYoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCit7CisJaW50IHJldDsK Kwl1aW50MzJfdCBwc3BfZ2Z4ZHJ2X2NvbW1hbmRfcmVnID0gMDsKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IHBzcC0+YWRldjsKKwl1aW50MzJfdCBzb2xfcmVnOworCisJLyogQ2hlY2sg c09TIHNpZ24gb2YgbGlmZSByZWdpc3RlciB0byBjb25maXJtIHN5cyBkcml2ZXIgYW5kIHNPUwor CSAqIGFyZSBhbHJlYWR5IGJlZW4gbG9hZGVkLgorCSAqLworCXNvbF9yZWcgPSBSUkVHMzJfU09D MTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzgxKTsKKwlpZiAoc29sX3JlZykgeworCQlwc3At PnNvc19md192ZXJzaW9uID0gUlJFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR181 OCk7CisJCXByaW50aygic29zIGZ3IHZlcnNpb24gPSAweCV4LlxuIiwgcHNwLT5zb3NfZndfdmVy c2lvbik7CisJCXJldHVybiAwOworCX0KKworCS8qIFdhaXQgZm9yIGJvb3Rsb2FkZXIgdG8gc2ln bmlmeSB0aGF0IGlzIHJlYWR5IGhhdmluZyBiaXQgMzEgb2YgQzJQTVNHXzM1IHNldCB0byAxICov CisJcmV0ID0gcHNwX3dhaXRfZm9yKHBzcCwgU09DMTVfUkVHX09GRlNFVChNUDAsIDAsIG1tTVAw X1NNTl9DMlBNU0dfMzUpLAorCQkJICAgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCwgZmFsc2UpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQ U1BfMV9NRUcpOworCisJLyogQ29weSBQU1AgU3lzdGVtIERyaXZlciBiaW5hcnkgdG8gbWVtb3J5 ICovCisJbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT5zeXNfc3RhcnRfYWRkciwgcHNwLT5z eXNfYmluX3NpemUpOworCisJLyogUHJvdmlkZSB0aGUgc3lzIGRyaXZlciB0byBib290bG9hZGVy ICovCisJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR18zNiwKKwkgICAgICAg KHVpbnQzMl90KShwc3AtPmZ3X3ByaV9tY19hZGRyID4+IDIwKSk7CisJcHNwX2dmeGRydl9jb21t YW5kX3JlZyA9IDEgPDwgMTY7CisJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1T R18zNSwKKwkgICAgICAgcHNwX2dmeGRydl9jb21tYW5kX3JlZyk7CisKKwkvKiB0aGVyZSBtaWdo dCBiZSBoYW5kc2hha2UgaXNzdWUgd2l0aCBoYXJkd2FyZSB3aGljaCBuZWVkcyBkZWxheSAqLwor CW1kZWxheSgyMCk7CisKKwlyZXQgPSBwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VU KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR18zNSksCisJCQkgICAweDgwMDAwMDAwLCAweDgwMDAw MDAwLCBmYWxzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBzcF92MTJfMF9i b290bG9hZGVyX2xvYWRfc29zKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQoreworCWludCByZXQ7 CisJdW5zaWduZWQgaW50IHBzcF9nZnhkcnZfY29tbWFuZF9yZWcgPSAwOworCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gcHNwLT5hZGV2OworCXVpbnQzMl90IHNvbF9yZWc7CisKKwkvKiBD aGVjayBzT1Mgc2lnbiBvZiBsaWZlIHJlZ2lzdGVyIHRvIGNvbmZpcm0gc3lzIGRyaXZlciBhbmQg c09TCisJICogYXJlIGFscmVhZHkgYmVlbiBsb2FkZWQuCisJICovCisJc29sX3JlZyA9IFJSRUcz Ml9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfODEpOworCWlmIChzb2xfcmVnKQorCQly ZXR1cm4gMDsKKworCS8qIFdhaXQgZm9yIGJvb3Rsb2FkZXIgdG8gc2lnbmlmeSB0aGF0IGlzIHJl YWR5IGhhdmluZyBiaXQgMzEgb2YgQzJQTVNHXzM1IHNldCB0byAxICovCisJcmV0ID0gcHNwX3dh aXRfZm9yKHBzcCwgU09DMTVfUkVHX09GRlNFVChNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfMzUp LAorCQkJICAgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCwgZmFsc2UpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwltZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOworCisJ LyogQ29weSBTZWN1cmUgT1MgYmluYXJ5IHRvIFBTUCBtZW1vcnkgKi8KKwltZW1jcHkocHNwLT5m d19wcmlfYnVmLCBwc3AtPnNvc19zdGFydF9hZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7CisKKwkv KiBQcm92aWRlIHRoZSBQU1Agc2VjdXJlIE9TIHRvIGJvb3Rsb2FkZXIgKi8KKwlXUkVHMzJfU09D MTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LAorCSAgICAgICAodWludDMyX3QpKHBzcC0+ ZndfcHJpX21jX2FkZHIgPj4gMjApKTsKKwlwc3BfZ2Z4ZHJ2X2NvbW1hbmRfcmVnID0gMiA8PCAx NjsKKwlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM1LAorCSAgICAgICBw c3BfZ2Z4ZHJ2X2NvbW1hbmRfcmVnKTsKKworCS8qIHRoZXJlIG1pZ2h0IGJlIGhhbmRzaGFrZSBp c3N1ZSB3aXRoIGhhcmR3YXJlIHdoaWNoIG5lZWRzIGRlbGF5ICovCisJbWRlbGF5KDIwKTsKKwly ZXQgPSBwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VUKE1QMCwgMCwgbW1NUDBfU01O X0MyUE1TR184MSksCisJCQkgICBSUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNH XzgxKSwKKwkJCSAgIDAsIHRydWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg cHNwX3YxMl8wX3Jlcm91dGVfaWgoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCit7CisJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBwc3AtPmFkZXY7CisJdWludDMyX3QgdG1wOworCisJLyog Q2hhbmdlIElIIHJpbmcgZm9yIFZNQyAqLworCXRtcCA9IFJFR19TRVRfRklFTEQoMCwgSUhfQ0xJ RU5UX0NGR19EQVRBLCBDUkVESVRfUkVUVVJOX0FERFIsIDB4MTI0NGIpOworCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBJSF9DTElFTlRfQ0ZHX0RBVEEsIENMSUVOVF9UWVBFLCAxKTsKKwl0bXAg PSBSRUdfU0VUX0ZJRUxEKHRtcCwgSUhfQ0xJRU5UX0NGR19EQVRBLCBSSU5HX0lELCAxKTsKKwor CVdSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfNjksIDMpOworCVdSRUczMl9T T0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfNzAsIHRtcCk7CisJV1JFRzMyX1NPQzE1KE1Q MCwgMCwgbW1NUDBfU01OX0MyUE1TR182NCwgR0ZYX0NUUkxfQ01EX0lEX0dCUl9JSF9TRVQpOwor CisJbWRlbGF5KDIwKTsKKwlwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VUKE1QMCwg MCwgbW1NUDBfU01OX0MyUE1TR182NCksCisJCSAgICAgMHg4MDAwMDAwMCwgMHg4MDAwRkZGRiwg ZmFsc2UpOworCisJLyogQ2hhbmdlIElIIHJpbmcgZm9yIFVNQyAqLworCXRtcCA9IFJFR19TRVRf RklFTEQoMCwgSUhfQ0xJRU5UX0NGR19EQVRBLCBDUkVESVRfUkVUVVJOX0FERFIsIDB4MTIxNmIp OworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBJSF9DTElFTlRfQ0ZHX0RBVEEsIFJJTkdfSUQs IDEpOworCisJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR182OSwgNCk7CisJ V1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR183MCwgdG1wKTsKKwlXUkVHMzJf U09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzY0LCBHRlhfQ1RSTF9DTURfSURfR0JSX0lI X1NFVCk7CisKKwltZGVsYXkoMjApOworCXBzcF93YWl0X2Zvcihwc3AsIFNPQzE1X1JFR19PRkZT RVQoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzY0KSwKKwkJICAgICAweDgwMDAwMDAwLCAweDgw MDBGRkZGLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgcHNwX3YxMl8wX3JpbmdfaW5pdChzdHJ1 Y3QgcHNwX2NvbnRleHQgKnBzcCwKKwkJCSAgICAgIGVudW0gcHNwX3JpbmdfdHlwZSByaW5nX3R5 cGUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHBzcF9yaW5nICpyaW5nOworCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gcHNwLT5hZGV2OworCisJcHNwX3YxMl8wX3Jlcm91dGVfaWgo cHNwKTsKKworCXJpbmcgPSAmcHNwLT5rbV9yaW5nOworCisJcmluZy0+cmluZ190eXBlID0gcmlu Z190eXBlOworCisJLyogYWxsb2NhdGUgNGsgUGFnZSBvZiBMb2NhbCBGcmFtZSBCdWZmZXIgbWVt b3J5IGZvciByaW5nICovCisJcmluZy0+cmluZ19zaXplID0gMHgxMDAwOworCXJldCA9IGFtZGdw dV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIHJpbmctPnJpbmdfc2l6ZSwgUEFHRV9TSVpFLAorCQkJ CSAgICAgIEFNREdQVV9HRU1fRE9NQUlOX1ZSQU0sCisJCQkJICAgICAgJmFkZXYtPmZpcm13YXJl LnJidWYsCisJCQkJICAgICAgJnJpbmctPnJpbmdfbWVtX21jX2FkZHIsCisJCQkJICAgICAgKHZv aWQgKiopJnJpbmctPnJpbmdfbWVtKTsKKwlpZiAocmV0KSB7CisJCXJpbmctPnJpbmdfc2l6ZSA9 IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHBz cF92MTJfMF9zdXBwb3J0X3Ztcl9yaW5nKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQoreworCWlm IChhbWRncHVfc3Jpb3ZfdmYocHNwLT5hZGV2KSAmJiBwc3AtPnNvc19md192ZXJzaW9uID4gMHg4 MDA0NSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHBz cF92MTJfMF9yaW5nX2NyZWF0ZShzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwKKwkJCQllbnVtIHBz cF9yaW5nX3R5cGUgcmluZ190eXBlKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBw c3BfcmluZ19yZWcgPSAwOworCXN0cnVjdCBwc3BfcmluZyAqcmluZyA9ICZwc3AtPmttX3Jpbmc7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBwc3AtPmFkZXY7CisKKwlpZiAocHNwX3Yx Ml8wX3N1cHBvcnRfdm1yX3JpbmcocHNwKSkgeworCQkvKiBXcml0ZSBsb3cgYWRkcmVzcyBvZiB0 aGUgcmluZyB0byBDMlBNU0dfMTAyICovCisJCXBzcF9yaW5nX3JlZyA9IGxvd2VyXzMyX2JpdHMo cmluZy0+cmluZ19tZW1fbWNfYWRkcik7CisJCVdSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NN Tl9DMlBNU0dfMTAyLCBwc3BfcmluZ19yZWcpOworCQkvKiBXcml0ZSBoaWdoIGFkZHJlc3Mgb2Yg dGhlIHJpbmcgdG8gQzJQTVNHXzEwMyAqLworCQlwc3BfcmluZ19yZWcgPSB1cHBlcl8zMl9iaXRz KHJpbmctPnJpbmdfbWVtX21jX2FkZHIpOworCQlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9T TU5fQzJQTVNHXzEwMywgcHNwX3JpbmdfcmVnKTsKKworCQkvKiBXcml0ZSB0aGUgcmluZyBpbml0 aWFsaXphdGlvbiBjb21tYW5kIHRvIEMyUE1TR18xMDEgKi8KKwkJV1JFRzMyX1NPQzE1KE1QMCwg MCwgbW1NUDBfU01OX0MyUE1TR18xMDEsCisJCQkJCSAgICAgR0ZYX0NUUkxfQ01EX0lEX0lOSVRf R1BDT01fUklORyk7CisKKwkJLyogdGhlcmUgbWlnaHQgYmUgaGFuZHNoYWtlIGlzc3VlIHdpdGgg aGFyZHdhcmUgd2hpY2ggbmVlZHMgZGVsYXkgKi8KKwkJbWRlbGF5KDIwKTsKKworCQkvKiBXYWl0 IGZvciByZXNwb25zZSBmbGFnIChiaXQgMzEpIGluIEMyUE1TR18xMDEgKi8KKwkJcmV0ID0gcHNw X3dhaXRfZm9yKHBzcCwgU09DMTVfUkVHX09GRlNFVChNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0df MTAxKSwKKwkJCQkgICAweDgwMDAwMDAwLCAweDgwMDBGRkZGLCBmYWxzZSk7CisKKwl9IGVsc2Ug eworCQkvKiBXcml0ZSBsb3cgYWRkcmVzcyBvZiB0aGUgcmluZyB0byBDMlBNU0dfNjkgKi8KKwkJ cHNwX3JpbmdfcmVnID0gbG93ZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9tY19hZGRyKTsKKwkJ V1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR182OSwgcHNwX3JpbmdfcmVnKTsK KwkJLyogV3JpdGUgaGlnaCBhZGRyZXNzIG9mIHRoZSByaW5nIHRvIEMyUE1TR183MCAqLworCQlw c3BfcmluZ19yZWcgPSB1cHBlcl8zMl9iaXRzKHJpbmctPnJpbmdfbWVtX21jX2FkZHIpOworCQlX UkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzcwLCBwc3BfcmluZ19yZWcpOwor CQkvKiBXcml0ZSBzaXplIG9mIHJpbmcgdG8gQzJQTVNHXzcxICovCisJCXBzcF9yaW5nX3JlZyA9 IHJpbmctPnJpbmdfc2l6ZTsKKwkJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1T R183MSwgcHNwX3JpbmdfcmVnKTsKKwkJLyogV3JpdGUgdGhlIHJpbmcgaW5pdGlhbGl6YXRpb24g Y29tbWFuZCB0byBDMlBNU0dfNjQgKi8KKwkJcHNwX3JpbmdfcmVnID0gcmluZ190eXBlOworCQlw c3BfcmluZ19yZWcgPSBwc3BfcmluZ19yZWcgPDwgMTY7CisJCVdSRUczMl9TT0MxNShNUDAsIDAs IG1tTVAwX1NNTl9DMlBNU0dfNjQsIHBzcF9yaW5nX3JlZyk7CisKKwkJLyogdGhlcmUgbWlnaHQg YmUgaGFuZHNoYWtlIGlzc3VlIHdpdGggaGFyZHdhcmUgd2hpY2ggbmVlZHMgZGVsYXkgKi8KKwkJ bWRlbGF5KDIwKTsKKworCQkvKiBXYWl0IGZvciByZXNwb25zZSBmbGFnIChiaXQgMzEpIGluIEMy UE1TR182NCAqLworCQlyZXQgPSBwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VUKE1Q MCwgMCwgbW1NUDBfU01OX0MyUE1TR182NCksCisJCQkJICAgMHg4MDAwMDAwMCwgMHg4MDAwRkZG RiwgZmFsc2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHNwX3YxMl8w X3Jpbmdfc3RvcChzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwKKwkJCSAgICAgIGVudW0gcHNwX3Jp bmdfdHlwZSByaW5nX3R5cGUpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSBwc3AtPmFkZXY7CisKKwkvKiBXcml0ZSB0aGUgcmluZyBkZXN0cm95IGNvbW1h bmQqLworCWlmIChwc3BfdjEyXzBfc3VwcG9ydF92bXJfcmluZyhwc3ApKQorCQlXUkVHMzJfU09D MTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzEwMSwKKwkJCQkgICAgIEdGWF9DVFJMX0NNRF9J RF9ERVNUUk9ZX0dQQ09NX1JJTkcpOworCWVsc2UKKwkJV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1N UDBfU01OX0MyUE1TR182NCwKKwkJCQkgICAgIEdGWF9DVFJMX0NNRF9JRF9ERVNUUk9ZX1JJTkdT KTsKKworCS8qIHRoZXJlIG1pZ2h0IGJlIGhhbmRzaGFrZSBpc3N1ZSB3aXRoIGhhcmR3YXJlIHdo aWNoIG5lZWRzIGRlbGF5ICovCisJbWRlbGF5KDIwKTsKKworCS8qIFdhaXQgZm9yIHJlc3BvbnNl IGZsYWcgKGJpdCAzMSkgKi8KKwlpZiAocHNwX3YxMl8wX3N1cHBvcnRfdm1yX3JpbmcocHNwKSkK KwkJcmV0ID0gcHNwX3dhaXRfZm9yKHBzcCwgU09DMTVfUkVHX09GRlNFVChNUDAsIDAsIG1tTVAw X1NNTl9DMlBNU0dfMTAxKSwKKwkJCQkgICAweDgwMDAwMDAwLCAweDgwMDAwMDAwLCBmYWxzZSk7 CisJZWxzZQorCQlyZXQgPSBwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VUKE1QMCwg MCwgbW1NUDBfU01OX0MyUE1TR182NCksCisJCQkJICAgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCwg ZmFsc2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwc3BfdjEyXzBfcmluZ19k ZXN0cm95KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLAorCQkJCSBlbnVtIHBzcF9yaW5nX3R5cGUg cmluZ190eXBlKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwc3BfcmluZyAqcmluZyA9ICZw c3AtPmttX3Jpbmc7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBwc3AtPmFkZXY7CisK KwlyZXQgPSBwc3BfdjEyXzBfcmluZ19zdG9wKHBzcCwgcmluZ190eXBlKTsKKwlpZiAocmV0KQor CQlEUk1fRVJST1IoIkZhaWwgdG8gc3RvcCBwc3AgcmluZ1xuIik7CisKKwlhbWRncHVfYm9fZnJl ZV9rZXJuZWwoJmFkZXYtPmZpcm13YXJlLnJidWYsCisJCQkgICAgICAmcmluZy0+cmluZ19tZW1f bWNfYWRkciwKKwkJCSAgICAgICh2b2lkICoqKSZyaW5nLT5yaW5nX21lbSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IHBzcF92MTJfMF9jbWRfc3VibWl0KHN0cnVjdCBwc3BfY29u dGV4dCAqcHNwLAorCQkJICAgICAgIHN0cnVjdCBhbWRncHVfZmlybXdhcmVfaW5mbyAqdWNvZGUs CisJCQkgICAgICAgdWludDY0X3QgY21kX2J1Zl9tY19hZGRyLCB1aW50NjRfdCBmZW5jZV9tY19h ZGRyLAorCQkJICAgICAgIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgcHNwX3dyaXRlX3B0 cl9yZWcgPSAwOworCXN0cnVjdCBwc3BfZ2Z4X3JiX2ZyYW1lICp3cml0ZV9mcmFtZSA9IHBzcC0+ a21fcmluZy5yaW5nX21lbTsKKwlzdHJ1Y3QgcHNwX3JpbmcgKnJpbmcgPSAmcHNwLT5rbV9yaW5n OworCXN0cnVjdCBwc3BfZ2Z4X3JiX2ZyYW1lICpyaW5nX2J1ZmZlcl9zdGFydCA9IHJpbmctPnJp bmdfbWVtOworCXN0cnVjdCBwc3BfZ2Z4X3JiX2ZyYW1lICpyaW5nX2J1ZmZlcl9lbmQgPSByaW5n X2J1ZmZlcl9zdGFydCArCisJCXJpbmctPnJpbmdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgcHNwX2dm eF9yYl9mcmFtZSkgLSAxOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcHNwLT5hZGV2 OworCXVpbnQzMl90IHJpbmdfc2l6ZV9kdyA9IHJpbmctPnJpbmdfc2l6ZSAvIDQ7CisJdWludDMy X3QgcmJfZnJhbWVfc2l6ZV9kdyA9IHNpemVvZihzdHJ1Y3QgcHNwX2dmeF9yYl9mcmFtZSkgLyA0 OworCisJLyogS00gKEdQQ09NKSBwcmVwYXJlIHdyaXRlIHBvaW50ZXIgKi8KKwlpZiAocHNwX3Yx Ml8wX3N1cHBvcnRfdm1yX3JpbmcocHNwKSkKKwkJcHNwX3dyaXRlX3B0cl9yZWcgPSBSUkVHMzJf U09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzEwMik7CisJZWxzZQorCQlwc3Bfd3JpdGVf cHRyX3JlZyA9IFJSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfNjcpOworCisJ LyogVXBkYXRlIEtNIFJCIGZyYW1lIHBvaW50ZXIgdG8gbmV3IGZyYW1lICovCisJLyogd3JpdGVf ZnJhbWUgcHRyIGluY3JlbWVudHMgYnkgc2l6ZSBvZiByYl9mcmFtZSBpbiBieXRlcyAqLworCS8q IHBzcF93cml0ZV9wdHJfcmVnIGluY3JlbWVudHMgYnkgc2l6ZSBvZiByYl9mcmFtZSBpbiBEV09S RHMgKi8KKwlpZiAoKHBzcF93cml0ZV9wdHJfcmVnICUgcmluZ19zaXplX2R3KSA9PSAwKQorCQl3 cml0ZV9mcmFtZSA9IHJpbmdfYnVmZmVyX3N0YXJ0OworCWVsc2UKKwkJd3JpdGVfZnJhbWUgPSBy aW5nX2J1ZmZlcl9zdGFydCArIChwc3Bfd3JpdGVfcHRyX3JlZyAvIHJiX2ZyYW1lX3NpemVfZHcp OworCS8qIENoZWNrIGludmFsaWQgd3JpdGVfZnJhbWUgcHRyIGFkZHJlc3MgKi8KKwlpZiAoKHdy aXRlX2ZyYW1lIDwgcmluZ19idWZmZXJfc3RhcnQpIHx8IChyaW5nX2J1ZmZlcl9lbmQgPCB3cml0 ZV9mcmFtZSkpIHsKKwkJRFJNX0VSUk9SKCJyaW5nX2J1ZmZlcl9zdGFydCA9ICVwOyByaW5nX2J1 ZmZlcl9lbmQgPSAlcDsgd3JpdGVfZnJhbWUgPSAlcFxuIiwKKwkJCSAgcmluZ19idWZmZXJfc3Rh cnQsIHJpbmdfYnVmZmVyX2VuZCwgd3JpdGVfZnJhbWUpOworCQlEUk1fRVJST1IoIndyaXRlX2Zy YW1lIGlzIHBvaW50aW5nIHRvIGFkZHJlc3Mgb3V0IG9mIGJvdW5kc1xuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCS8qIEluaXRpYWxpemUgS00gUkIgZnJhbWUgKi8KKwltZW1zZXQod3Jp dGVfZnJhbWUsIDAsIHNpemVvZihzdHJ1Y3QgcHNwX2dmeF9yYl9mcmFtZSkpOworCisJLyogVXBk YXRlIEtNIFJCIGZyYW1lICovCisJd3JpdGVfZnJhbWUtPmNtZF9idWZfYWRkcl9oaSA9IHVwcGVy XzMyX2JpdHMoY21kX2J1Zl9tY19hZGRyKTsKKwl3cml0ZV9mcmFtZS0+Y21kX2J1Zl9hZGRyX2xv ID0gbG93ZXJfMzJfYml0cyhjbWRfYnVmX21jX2FkZHIpOworCXdyaXRlX2ZyYW1lLT5mZW5jZV9h ZGRyX2hpID0gdXBwZXJfMzJfYml0cyhmZW5jZV9tY19hZGRyKTsKKwl3cml0ZV9mcmFtZS0+ZmVu Y2VfYWRkcl9sbyA9IGxvd2VyXzMyX2JpdHMoZmVuY2VfbWNfYWRkcik7CisJd3JpdGVfZnJhbWUt PmZlbmNlX3ZhbHVlID0gaW5kZXg7CisKKwkvKiBVcGRhdGUgdGhlIHdyaXRlIFBvaW50ZXIgaW4g RFdPUkRzICovCisJcHNwX3dyaXRlX3B0cl9yZWcgPSAocHNwX3dyaXRlX3B0cl9yZWcgKyByYl9m cmFtZV9zaXplX2R3KSAlIHJpbmdfc2l6ZV9kdzsKKwlpZiAocHNwX3YxMl8wX3N1cHBvcnRfdm1y X3JpbmcocHNwKSkgeworCQlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzEw MiwgcHNwX3dyaXRlX3B0cl9yZWcpOworCQlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5f QzJQTVNHXzEwMSwgR0ZYX0NUUkxfQ01EX0lEX0NPTlNVTUVfQ01EKTsKKwl9IGVsc2UKKwkJV1JF RzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR182NywgcHNwX3dyaXRlX3B0cl9yZWcp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BzcF92MTJfMF9zcmFtX21hcChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJICB1bnNpZ25lZCBpbnQgKnNyYW1fb2Zmc2V0LCB1 bnNpZ25lZCBpbnQgKnNyYW1fYWRkcl9yZWdfb2Zmc2V0LAorCQkgIHVuc2lnbmVkIGludCAqc3Jh bV9kYXRhX3JlZ19vZmZzZXQsCisJCSAgZW51bSBBTURHUFVfVUNPREVfSUQgdWNvZGVfaWQpCit7 CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHVjb2RlX2lkKSB7CisvKiBUT0RPOiBuZWVkcyB0 byBjb25maXJtICovCisjaWYgMAorCWNhc2UgQU1ER1BVX1VDT0RFX0lEX1NNQzoKKwkJKnNyYW1f b2Zmc2V0ID0gMDsKKwkJKnNyYW1fYWRkcl9yZWdfb2Zmc2V0ID0gMDsKKwkJKnNyYW1fZGF0YV9y ZWdfb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworCWNhc2UgQU1ER1BVX1VDT0RFX0lE X0NQX0NFOgorCQkqc3JhbV9vZmZzZXQgPSAweDA7CisJCSpzcmFtX2FkZHJfcmVnX29mZnNldCA9 IFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfQ0VfVUNPREVfQUREUik7CisJCSpzcmFtX2Rh dGFfcmVnX29mZnNldCA9IFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tQ1BfQ0VfVUNPREVfREFU QSk7CisJCWJyZWFrOworCisJY2FzZSBBTURHUFVfVUNPREVfSURfQ1BfUEZQOgorCQkqc3JhbV9v ZmZzZXQgPSAweDA7CisJCSpzcmFtX2FkZHJfcmVnX29mZnNldCA9IFNPQzE1X1JFR19PRkZTRVQo R0MsIDAsIG1tQ1BfUEZQX1VDT0RFX0FERFIpOworCQkqc3JhbV9kYXRhX3JlZ19vZmZzZXQgPSBT T0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX1BGUF9VQ09ERV9EQVRBKTsKKwkJYnJlYWs7CisK KwljYXNlIEFNREdQVV9VQ09ERV9JRF9DUF9NRToKKwkJKnNyYW1fb2Zmc2V0ID0gMHgwOworCQkq c3JhbV9hZGRyX3JlZ19vZmZzZXQgPSBTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbUNQX0hZUF9N RV9VQ09ERV9BRERSKTsKKwkJKnNyYW1fZGF0YV9yZWdfb2Zmc2V0ID0gU09DMTVfUkVHX09GRlNF VChHQywgMCwgbW1DUF9IWVBfTUVfVUNPREVfREFUQSk7CisJCWJyZWFrOworCisJY2FzZSBBTURH UFVfVUNPREVfSURfQ1BfTUVDMToKKwkJKnNyYW1fb2Zmc2V0ID0gMHgxMDAwMDsKKwkJKnNyYW1f YWRkcl9yZWdfb2Zmc2V0ID0gU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9NRUNfTUUxX1VD T0RFX0FERFIpOworCQkqc3JhbV9kYXRhX3JlZ19vZmZzZXQgPSBTT0MxNV9SRUdfT0ZGU0VUKEdD LCAwLCBtbUNQX01FQ19NRTFfVUNPREVfREFUQSk7CisJCWJyZWFrOworCisJY2FzZSBBTURHUFVf VUNPREVfSURfQ1BfTUVDMjoKKwkJKnNyYW1fb2Zmc2V0ID0gMHgxMDAwMDsKKwkJKnNyYW1fYWRk cl9yZWdfb2Zmc2V0ID0gU09DMTVfUkVHX09GRlNFVChHQywgMCwgbW1DUF9IWVBfTUVDMl9VQ09E RV9BRERSKTsKKwkJKnNyYW1fZGF0YV9yZWdfb2Zmc2V0ID0gU09DMTVfUkVHX09GRlNFVChHQywg MCwgbW1DUF9IWVBfTUVDMl9VQ09ERV9EQVRBKTsKKwkJYnJlYWs7CisKKwljYXNlIEFNREdQVV9V Q09ERV9JRF9STENfRzoKKwkJKnNyYW1fb2Zmc2V0ID0gMHgyMDAwOworCQkqc3JhbV9hZGRyX3Jl Z19vZmZzZXQgPSBTT0MxNV9SRUdfT0ZGU0VUKEdDLCAwLCBtbVJMQ19HUE1fVUNPREVfQUREUik7 CisJCSpzcmFtX2RhdGFfcmVnX29mZnNldCA9IFNPQzE1X1JFR19PRkZTRVQoR0MsIDAsIG1tUkxD X0dQTV9VQ09ERV9EQVRBKTsKKwkJYnJlYWs7CisKKwljYXNlIEFNREdQVV9VQ09ERV9JRF9TRE1B MDoKKwkJKnNyYW1fb2Zmc2V0ID0gMHgwOworCQkqc3JhbV9hZGRyX3JlZ19vZmZzZXQgPSBTT0Mx NV9SRUdfT0ZGU0VUKFNETUEwLCAwLCBtbVNETUEwX1VDT0RFX0FERFIpOworCQkqc3JhbV9kYXRh X3JlZ19vZmZzZXQgPSBTT0MxNV9SRUdfT0ZGU0VUKFNETUEwLCAwLCBtbVNETUEwX1VDT0RFX0RB VEEpOworCQlicmVhazsKKworLyogVE9ETzogbmVlZHMgdG8gY29uZmlybSAqLworI2lmIDAKKwlj YXNlIEFNREdQVV9VQ09ERV9JRF9TRE1BMToKKwkJKnNyYW1fb2Zmc2V0ID0gOworCQkqc3JhbV9h ZGRyX3JlZ19vZmZzZXQgPSA7CisJCWJyZWFrOworCisJY2FzZSBBTURHUFVfVUNPREVfSURfVVZE OgorCQkqc3JhbV9vZmZzZXQgPSA7CisJCSpzcmFtX2FkZHJfcmVnX29mZnNldCA9IDsKKwkJYnJl YWs7CisKKwljYXNlIEFNREdQVV9VQ09ERV9JRF9WQ0U6CisJCSpzcmFtX29mZnNldCA9IDsKKwkJ KnNyYW1fYWRkcl9yZWdfb2Zmc2V0ID0gOworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBBTURH UFVfVUNPREVfSURfTUFYSU1VTToKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVh azsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBwc3BfdjEyXzBfY29tcGFy ZV9zcmFtX2RhdGEoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCisJCQkJICAgICAgIHN0cnVjdCBh bWRncHVfZmlybXdhcmVfaW5mbyAqdWNvZGUsCisJCQkJICAgICAgIGVudW0gQU1ER1BVX1VDT0RF X0lEIHVjb2RlX3R5cGUpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGZ3X3NyYW1f cmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgaW50IGZ3X3NyYW1fYWRkcl9yZWdfb2Zmc2V0ID0gMDsK Kwl1bnNpZ25lZCBpbnQgZndfc3JhbV9kYXRhX3JlZ19vZmZzZXQgPSAwOworCXVuc2lnbmVkIGlu dCB1Y29kZV9zaXplOworCXVpbnQzMl90ICp1Y29kZV9tZW0gPSBOVUxMOworCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gcHNwLT5hZGV2OworCisJZXJyID0gcHNwX3YxMl8wX3NyYW1fbWFw KGFkZXYsICZmd19zcmFtX3JlZ192YWwsICZmd19zcmFtX2FkZHJfcmVnX29mZnNldCwKKwkJCQkm Zndfc3JhbV9kYXRhX3JlZ19vZmZzZXQsIHVjb2RlX3R5cGUpOworCWlmIChlcnIpCisJCXJldHVy biBmYWxzZTsKKworCVdSRUczMihmd19zcmFtX2FkZHJfcmVnX29mZnNldCwgZndfc3JhbV9yZWdf dmFsKTsKKworCXVjb2RlX3NpemUgPSB1Y29kZS0+dWNvZGVfc2l6ZTsKKwl1Y29kZV9tZW0gPSAo dWludDMyX3QgKil1Y29kZS0+a2FkZHI7CisJd2hpbGUgKHVjb2RlX3NpemUpIHsKKwkJZndfc3Jh bV9yZWdfdmFsID0gUlJFRzMyKGZ3X3NyYW1fZGF0YV9yZWdfb2Zmc2V0KTsKKworCQlpZiAoKnVj b2RlX21lbSAhPSBmd19zcmFtX3JlZ192YWwpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJdWNvZGVf bWVtKys7CisJCS8qIDQgYnl0ZXMgKi8KKwkJdWNvZGVfc2l6ZSAtPSA0OworCX0KKworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgaW50IHBzcF92MTJfMF9tb2RlMV9yZXNldChzdHJ1Y3QgcHNw X2NvbnRleHQgKnBzcCkKK3sKKwlpbnQgcmV0OworCXVpbnQzMl90IG9mZnNldDsKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IHBzcC0+YWRldjsKKworCW9mZnNldCA9IFNPQzE1X1JFR19P RkZTRVQoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzY0KTsKKworCXJldCA9IHBzcF93YWl0X2Zv cihwc3AsIG9mZnNldCwgMHg4MDAwMDAwMCwgMHg4MDAwRkZGRiwgZmFsc2UpOworCisJaWYgKHJl dCkgeworCQlEUk1fSU5GTygicHNwIGlzIG5vdCB3b3JraW5nIGNvcnJlY3RseSBiZWZvcmUgbW9k ZTEgcmVzZXQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLypzZW5kIHRoZSBtb2Rl IDEgcmVzZXQgY29tbWFuZCovCisJV1JFRzMyKG9mZnNldCwgR0ZYX0NUUkxfQ01EX0lEX01PREUx X1JTVCk7CisKKwltc2xlZXAoNTAwKTsKKworCW9mZnNldCA9IFNPQzE1X1JFR19PRkZTRVQoTVAw LCAwLCBtbU1QMF9TTU5fQzJQTVNHXzMzKTsKKworCXJldCA9IHBzcF93YWl0X2Zvcihwc3AsIG9m ZnNldCwgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCwgZmFsc2UpOworCisJaWYgKHJldCkgeworCQlE Uk1fSU5GTygicHNwIG1vZGUgMSByZXNldCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJRFJNX0lORk8oInBzcCBtb2RlMSByZXNldCBzdWNjZWVkIFxuIik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwc3BfZnVuY3MgcHNwX3YxMl8wX2Z1bmNz ID0geworCS5pbml0X21pY3JvY29kZSA9IHBzcF92MTJfMF9pbml0X21pY3JvY29kZSwKKwkuYm9v dGxvYWRlcl9sb2FkX3N5c2RydiA9IHBzcF92MTJfMF9ib290bG9hZGVyX2xvYWRfc3lzZHJ2LAor CS5ib290bG9hZGVyX2xvYWRfc29zID0gcHNwX3YxMl8wX2Jvb3Rsb2FkZXJfbG9hZF9zb3MsCisJ LnJpbmdfaW5pdCA9IHBzcF92MTJfMF9yaW5nX2luaXQsCisJLnJpbmdfY3JlYXRlID0gcHNwX3Yx Ml8wX3JpbmdfY3JlYXRlLAorCS5yaW5nX3N0b3AgPSBwc3BfdjEyXzBfcmluZ19zdG9wLAorCS5y aW5nX2Rlc3Ryb3kgPSBwc3BfdjEyXzBfcmluZ19kZXN0cm95LAorCS5jbWRfc3VibWl0ID0gcHNw X3YxMl8wX2NtZF9zdWJtaXQsCisJLmNvbXBhcmVfc3JhbV9kYXRhID0gcHNwX3YxMl8wX2NvbXBh cmVfc3JhbV9kYXRhLAorCS5tb2RlMV9yZXNldCA9IHBzcF92MTJfMF9tb2RlMV9yZXNldCwKK307 CisKK3ZvaWQgcHNwX3YxMl8wX3NldF9wc3BfZnVuY3Moc3RydWN0IHBzcF9jb250ZXh0ICpwc3Ap Cit7CisJcHNwLT5mdW5jcyA9ICZwc3BfdjEyXzBfZnVuY3M7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L3BzcF92MTJfMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMjQxNjkzYWIxOTkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvcHNwX3YxMl8wLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNp Zm5kZWYgX19QU1BfVjEyXzBfSF9fCisjZGVmaW5lIF9fUFNQX1YxMl8wX0hfXworCisjaW5jbHVk ZSAiYW1kZ3B1X3BzcC5oIgorCit2b2lkIHBzcF92MTJfMF9zZXRfcHNwX2Z1bmNzKHN0cnVjdCBw c3BfY29udGV4dCAqcHNwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9zb2MxNS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc29jMTUuYwpp bmRleCA5MGI0MGNjNGY2YjEuLjVjMWZkYmMxMGJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvc29jMTUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9z b2MxNS5jCkBAIC03NDcsNiArNzQ3LDggQEAgaW50IHNvYzE1X3NldF9pcF9ibG9ja3Moc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJCWFtZGdwdV9kZXZpY2VfaXBfYmxvY2tfYWRkKGFkZXYs ICZ2ZWdhMTBfY29tbW9uX2lwX2Jsb2NrKTsKIAkJYW1kZ3B1X2RldmljZV9pcF9ibG9ja19hZGQo YWRldiwgJmdtY192OV8wX2lwX2Jsb2NrKTsKIAkJYW1kZ3B1X2RldmljZV9pcF9ibG9ja19hZGQo YWRldiwgJnZlZ2ExMF9paF9pcF9ibG9jayk7CisJCWlmIChsaWtlbHkoYWRldi0+ZmlybXdhcmUu bG9hZF90eXBlID09IEFNREdQVV9GV19MT0FEX1BTUCkpCisJCQlhbWRncHVfZGV2aWNlX2lwX2Js b2NrX2FkZChhZGV2LCAmcHNwX3YxMl8wX2lwX2Jsb2NrKTsKIAkJYW1kZ3B1X2RldmljZV9pcF9i bG9ja19hZGQoYWRldiwgJmdmeF92OV8wX2lwX2Jsb2NrKTsKIAkJYW1kZ3B1X2RldmljZV9pcF9i bG9ja19hZGQoYWRldiwgJnNkbWFfdjRfMF9pcF9ibG9jayk7CiAJCWlmIChhZGV2LT5lbmFibGVf dmlydHVhbF9kaXNwbGF5IHx8IGFtZGdwdV9zcmlvdl92ZihhZGV2KSkKLS0gCjIuMjAuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4