From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leo Liu Subject: [PATCH 07/21] drm/amdgpu: add JPEG v2.0 function supports Date: Tue, 12 Nov 2019 13:03:15 -0500 Message-ID: <20191112180329.3927-8-leo.liu@amd.com> References: <20191112180329.3927-1-leo.liu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191112180329.3927-1-leo.liu-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: Leo Liu SXQgZ290IHNlcGFyYXRlZCBmcm9tIFZDTjIuMCB3aXRoIGEgbmV3IGpwZWdfdjJfMF9pcF9ibG9j awoKU2lnbmVkLW9mZi1ieTogTGVvIExpdSA8bGVvLmxpdUBhbWQuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9qcGVnX3YyXzAuYyB8IDgwOSArKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuaCB8ICA0MiArKwogMyBmaWxlcyBj aGFuZ2VkLCA4NTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjJfMC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192Ml8wLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L01ha2VmaWxlCmluZGV4IDI5MzZjMjkyMzc5ZC4uZDQwYWY2NTE5MzU2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQpAQCAtMTU0LDcgKzE1NCw4IEBAIGFtZGdwdS15 ICs9IFwKIAl2Y25fdjJfMC5vIFwKIAl2Y25fdjJfNS5vIFwKIAlhbWRncHVfanBlZy5vIFwKLQlq cGVnX3YxXzAubworCWpwZWdfdjFfMC5vIFwKKwlqcGVnX3YyXzAubwogCiAjIGFkZCBBVEhVQiBi bG9jawogYW1kZ3B1LXkgKz0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvanBlZ192Ml8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxNDNlZjY5MDViOAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjJfMC5jCkBA IC0wLDAgKzEsODA5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8gRGV2 aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiYW1kZ3B1Lmgi CisjaW5jbHVkZSAiYW1kZ3B1X2pwZWcuaCIKKyNpbmNsdWRlICJhbWRncHVfcG0uaCIKKyNpbmNs dWRlICJzb2MxNS5oIgorI2luY2x1ZGUgInNvYzE1ZC5oIgorCisjaW5jbHVkZSAidmNuL3Zjbl8y XzBfMF9vZmZzZXQuaCIKKyNpbmNsdWRlICJ2Y24vdmNuXzJfMF8wX3NoX21hc2suaCIKKyNpbmNs dWRlICJpdnNyY2lkL3Zjbi9pcnFzcmNzX3Zjbl8yXzAuaCIKKworI2RlZmluZSBtbVVWRF9KUkJD X0VYVEVSTkFMX1JFR19JTlRFUk5BTF9PRkZTRVQgCQkJMHgxYmZmZgorI2RlZmluZSBtbVVWRF9K UEVHX0dQQ09NX0NNRF9JTlRFUk5BTF9PRkZTRVQJCQkJMHg0MDI5CisjZGVmaW5lIG1tVVZEX0pQ RUdfR1BDT01fREFUQTBfSU5URVJOQUxfT0ZGU0VUCQkJCTB4NDAyYQorI2RlZmluZSBtbVVWRF9K UEVHX0dQQ09NX0RBVEExX0lOVEVSTkFMX09GRlNFVAkJCQkweDQwMmIKKyNkZWZpbmUgbW1VVkRf TE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9MT1dfSU5URVJOQUxfT0ZGU0VUCQkweDQwZWEK KyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFM X09GRlNFVCAJMHg0MGViCisjZGVmaW5lIG1tVVZEX0xNSV9KUkJDX0lCX1ZNSURfSU5URVJOQUxf T0ZGU0VUCQkJCTB4NDBjZgorI2RlZmluZSBtbVVWRF9MTUlfSlBFR19WTUlEX0lOVEVSTkFMX09G RlNFVAkJCQkweDQwZDEKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFSX0xPV19J TlRFUk5BTF9PRkZTRVQgCQkweDQwZTgKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRf QkFSX0hJR0hfSU5URVJOQUxfT0ZGU0VUCQkweDQwZTkKKyNkZWZpbmUgbW1VVkRfSlJCQ19JQl9T SVpFX0lOVEVSTkFMX09GRlNFVAkJCQkweDQwODIKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfUkJf TUVNX1JEXzY0QklUX0JBUl9MT1dfSU5URVJOQUxfT0ZGU0VUCQkweDQwZWMKKyNkZWZpbmUgbW1V VkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFMX09GRlNFVCAJMHg0 MGVkCisjZGVmaW5lIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1FUl9JTlRFUk5BTF9PRkZTRVQJ CQkweDQwODUKKyNkZWZpbmUgbW1VVkRfSlJCQ19SQl9SRUZfREFUQV9JTlRFUk5BTF9PRkZTRVQJ CQkJMHg0MDg0CisjZGVmaW5lIG1tVVZEX0pSQkNfU1RBVFVTX0lOVEVSTkFMX09GRlNFVAkJCQkw eDQwODkKKyNkZWZpbmUgbW1VVkRfSlBFR19QSVRDSF9JTlRFUk5BTF9PRkZTRVQJCQkJMHg0MDFm CisKKyNkZWZpbmUgSlJCQ19ERUNfRVhURVJOQUxfUkVHX1dSSVRFX0FERFIJCQkJMHgxODAwMAor CitzdGF0aWMgdm9pZCBqcGVnX3YyXzBfc2V0X2RlY19yaW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KTsKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9zZXRfaXJxX2Z1bmNzKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3N0YXRpYyBpbnQganBlZ192Ml8wX3NldF9wb3dlcmdh dGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJZW51bSBhbWRfcG93ZXJnYXRpbmdfc3RhdGUg c3RhdGUpOworCisvKioKKyAqIGpwZWdfdjJfMF9lYXJseV9pbml0IC0gc2V0IGZ1bmN0aW9uIHBv aW50ZXJzCisgKgorICogQGhhbmRsZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICogU2V0 IHJpbmcgYW5kIGlycSBmdW5jdGlvbiBwb2ludGVycworICovCitzdGF0aWMgaW50IGpwZWdfdjJf MF9lYXJseV9pbml0KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWFkZXYtPmpwZWcubnVtX2pw ZWdfaW5zdCA9IDE7CisKKwlqcGVnX3YyXzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOworCWpw ZWdfdjJfMF9zZXRfaXJxX2Z1bmNzKGFkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog anBlZ192Ml8wX3N3X2luaXQgLSBzdyBpbml0IGZvciBKUEVHIGJsb2NrCisgKgorICogQGhhbmRs ZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICogTG9hZCBmaXJtd2FyZSBhbmQgc3cgaW5p dGlhbGl6YXRpb24KKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBfc3dfaW5pdCh2b2lkICpoYW5k bGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOworCWludCByOworCisJLyog SlBFRyBUUkFQICovCisJciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIFNPQzE1X0lIX0NMSUVO VElEX1ZDTiwKKwkJVkNOXzJfMF9fU1JDSURfX0pQRUdfREVDT0RFLCAmYWRldi0+anBlZy5pbnN0 LT5pcnEpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBhbWRncHVfanBlZ19zd19pbml0 KGFkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBhbWRncHVfanBlZ19yZXN1bWUo YWRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmluZyA9ICZhZGV2LT5qcGVnLmluc3Qt PnJpbmdfZGVjOworCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7CisJcmluZy0+ZG9vcmJlbGxf aW5kZXggPSAoYWRldi0+ZG9vcmJlbGxfaW5kZXgudmNuLnZjbl9yaW5nMF8xIDw8IDEpICsgMTsK KwlzcHJpbnRmKHJpbmctPm5hbWUsICJqcGVnX2RlYyIpOworCXIgPSBhbWRncHVfcmluZ19pbml0 KGFkZXYsIHJpbmcsIDUxMiwgJmFkZXYtPmpwZWcuaW5zdC0+aXJxLCAwKTsKKwlpZiAocikKKwkJ cmV0dXJuIHI7CisKKwlhZGV2LT5qcGVnLmludGVybmFsLmpwZWdfcGl0Y2ggPSBtbVVWRF9KUEVH X1BJVENIX0lOVEVSTkFMX09GRlNFVDsKKwlhZGV2LT5qcGVnLmluc3QtPmV4dGVybmFsLmpwZWdf cGl0Y2ggPSBTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pQRUdfUElUQ0gpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N3X2ZpbmkgLSBzdyBmaW5pIGZvciBK UEVHIGJsb2NrCisgKgorICogQGhhbmRsZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICog SlBFRyBzdXNwZW5kIGFuZCBmcmVlIHVwIHN3IGFsbG9jYXRpb24KKyAqLworc3RhdGljIGludCBq cGVnX3YyXzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCit7CisJaW50IHI7CisJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlyID0g YW1kZ3B1X2pwZWdfc3VzcGVuZChhZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0g YW1kZ3B1X2pwZWdfc3dfZmluaShhZGV2KTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIGpw ZWdfdjJfMF9od19pbml0IC0gc3RhcnQgYW5kIHRlc3QgSlBFRyBibG9jaworICoKKyAqIEBoYW5k bGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBf aHdfaW5pdCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n ID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJaW50IHI7CisKKwlhZGV2LT5uYmlvLmZ1 bmNzLT52Y25fZG9vcmJlbGxfcmFuZ2UoYWRldiwgcmluZy0+dXNlX2Rvb3JiZWxsLAorCQkoYWRl di0+ZG9vcmJlbGxfaW5kZXgudmNuLnZjbl9yaW5nMF8xIDw8IDEpLCAwKTsKKworCXIgPSBhbWRn cHVfcmluZ190ZXN0X2hlbHBlcihyaW5nKTsKKwlpZiAoIXIpCisJCURSTV9JTkZPKCJKUEVHIGRl Y29kZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuXG4iKTsKKworCXJldHVybiByOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9od19maW5pIC0gc3RvcCB0aGUgaGFyZHdhcmUgYmxvY2sKKyAqCisg KiBAaGFuZGxlOiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBTdG9wIHRoZSBKUEVHIGJs b2NrLCBtYXJrIHJpbmcgYXMgbm90IHJlYWR5IGFueSBtb3JlCisgKi8KK3N0YXRpYyBpbnQganBl Z192Ml8wX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCXN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZyA9ICZhZGV2LT5qcGVnLmluc3QtPnJpbmdfZGVjOworCisJaWYgKGFkZXYtPmpwZWcu Y3VyX3N0YXRlICE9IEFNRF9QR19TVEFURV9HQVRFICYmCisJICAgICAgUlJFRzMyX1NPQzE1KEpQ RUcsIDAsIG1tVVZEX0pSQkNfU1RBVFVTKSkKKwkJanBlZ192Ml8wX3NldF9wb3dlcmdhdGluZ19z dGF0ZShhZGV2LCBBTURfUEdfU1RBVEVfR0FURSk7CisKKwlyaW5nLT5zY2hlZC5yZWFkeSA9IGZh bHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N1c3BlbmQgLSBzdXNw ZW5kIEpQRUcgYmxvY2sKKyAqCisgKiBAaGFuZGxlOiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAq CisgKiBIVyBmaW5pIGFuZCBzdXNwZW5kIEpQRUcgYmxvY2sKKyAqLworc3RhdGljIGludCBqcGVn X3YyXzBfc3VzcGVuZCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJaW50IHI7CisKKwlyID0ganBl Z192Ml8wX2h3X2ZpbmkoYWRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IGFtZGdw dV9qcGVnX3N1c3BlbmQoYWRldik7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBqcGVnX3Yy XzBfcmVzdW1lIC0gcmVzdW1lIEpQRUcgYmxvY2sKKyAqCisgKiBAaGFuZGxlOiBhbWRncHVfZGV2 aWNlIHBvaW50ZXIKKyAqCisgKiBSZXN1bWUgZmlybXdhcmUgYW5kIGh3IGluaXQgSlBFRyBibG9j aworICovCitzdGF0aWMgaW50IGpwZWdfdjJfMF9yZXN1bWUodm9pZCAqaGFuZGxlKQoreworCWlu dCByOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNl ICopaGFuZGxlOworCisJciA9IGFtZGdwdV9qcGVnX3Jlc3VtZShhZGV2KTsKKwlpZiAocikKKwkJ cmV0dXJuIHI7CisKKwlyID0ganBlZ192Ml8wX2h3X2luaXQoYWRldik7CisKKwlyZXR1cm4gcjsK K30KKworc3RhdGljIGludCBqcGVnX3YyXzBfZGlzYWJsZV9wb3dlcl9nYXRpbmcoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJdWludDMyX3QgZGF0YTsKKwlpbnQgciA9IDA7CisKKwlk YXRhID0gMSA8PCBVVkRfUEdGU01fQ09ORklHX19VVkRKX1BXUl9DT05GSUdfX1NISUZUOworCVdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX1BHRlNNX0NPTkZJRyksIGRhdGEp OworCisJU09DMTVfV0FJVF9PTl9SUkVHKEpQRUcsIDAsCisJCW1tVVZEX1BHRlNNX1NUQVRVUywg VVZEX1BHRlNNX1NUQVRVU19VVkRKX1BXUl9PTiwKKwkJVVZEX1BHRlNNX1NUQVRVU19fVVZESl9Q V1JfU1RBVFVTX01BU0ssIHIpOworCisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHU6IEpQ RUcgZGlzYWJsZSBwb3dlciBnYXRpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJ LyogUmVtb3ZpbmcgdGhlIGFudGkgaGFuZyBtZWNoYW5pc20gdG8gaW5kaWNhdGUgdGhlIFVWREog dGlsZSBpcyBPTiAqLworCWRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBt bVVWRF9KUEVHX1BPV0VSX1NUQVRVUykpICYgfjB4MTsKKwlXUkVHMzIoU09DMTVfUkVHX09GRlNF VChKUEVHLCAwLCBtbVVWRF9KUEVHX1BPV0VSX1NUQVRVUyksIGRhdGEpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX2VuYWJsZV9wb3dlcl9nYXRpbmcoc3RydWN0IGFt ZGdwdV9kZXZpY2UqIGFkZXYpCit7CisJdWludDMyX3QgZGF0YTsKKwlpbnQgciA9IDA7CisKKwlk YXRhID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlBFR19QT1dFUl9T VEFUVVMpKTsKKwlkYXRhICY9IH5VVkRfSlBFR19QT1dFUl9TVEFUVVNfX0pQRUdfUE9XRVJfU1RB VFVTX01BU0s7CisJZGF0YSB8PSAgMHgxOyAvL1VWRF9KUEVHX1BPV0VSX1NUQVRVU19fSlBFR19Q T1dFUl9TVEFUVVNfVElMRVNfT0ZGOworCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAs IG1tVVZEX0pQRUdfUE9XRVJfU1RBVFVTKSwgZGF0YSk7CisKKwlkYXRhID0gMiA8PCBVVkRfUEdG U01fQ09ORklHX19VVkRKX1BXUl9DT05GSUdfX1NISUZUOworCVdSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEpQRUcsIDAsIG1tVVZEX1BHRlNNX0NPTkZJRyksIGRhdGEpOworCisJU09DMTVfV0FJVF9P Tl9SUkVHKEpQRUcsIDAsIG1tVVZEX1BHRlNNX1NUQVRVUywKKwkJKDIgPDwgVVZEX1BHRlNNX1NU QVRVU19fVVZESl9QV1JfU1RBVFVTX19TSElGVCksCisJCVVWRF9QR0ZTTV9TVEFUVVNfX1VWREpf UFdSX1NUQVRVU19NQVNLLCByKTsKKworCWlmIChyKSB7CisJCURSTV9FUlJPUigiYW1kZ3B1OiBK UEVHIGVuYWJsZSBwb3dlciBnYXRpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dhdGlu ZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSogYWRldikKK3sKKwl1aW50MzJfdCBkYXRhOworCisJZGF0 YSA9IFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbUpQRUdfQ0dDX0NUUkwpOworCWRhdGEgfD0gMSA8 PCBKUEVHX0NHQ19DVFJMX19EWU5fQ0xPQ0tfTU9ERV9fU0hJRlQ7CisKKwlkYXRhIHw9IDEgPDwg SlBFR19DR0NfQ1RSTF9fQ0xLX0dBVEVfRExZX1RJTUVSX19TSElGVDsKKwlkYXRhIHw9IDQgPDwg SlBFR19DR0NfQ1RSTF9fQ0xLX09GRl9ERUxBWV9fU0hJRlQ7CisJV1JFRzMyX1NPQzE1KEpQRUcs IDAsIG1tSlBFR19DR0NfQ1RSTCwgZGF0YSk7CisKKwlkYXRhID0gUlJFRzMyX1NPQzE1KEpQRUcs IDAsIG1tSlBFR19DR0NfR0FURSk7CisJZGF0YSAmPSB+KEpQRUdfQ0dDX0dBVEVfX0pQRUdfREVD X01BU0sKKwkJfCBKUEVHX0NHQ19HQVRFX19KUEVHMl9ERUNfTUFTSworCQl8IEpQRUdfQ0dDX0dB VEVfX0pQRUdfRU5DX01BU0sKKwkJfCBKUEVHX0NHQ19HQVRFX19KTUNJRl9NQVNLCisJCXwgSlBF R19DR0NfR0FURV9fSlJCQk1fTUFTSyk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19D R0NfR0FURSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9lbmFibGVfY2xvY2tf Z2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlKiBhZGV2KQoreworCXVpbnQzMl90IGRhdGE7CisK KwlkYXRhID0gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19DR0NfQ1RSTCk7CisJZGF0YSB8 PSAxIDw8IEpQRUdfQ0dDX0NUUkxfX0RZTl9DTE9DS19NT0RFX19TSElGVDsKKworCWRhdGEgfD0g MSA8PCBKUEVHX0NHQ19DVFJMX19DTEtfR0FURV9ETFlfVElNRVJfX1NISUZUOworCWRhdGEgfD0g NCA8PCBKUEVHX0NHQ19DVFJMX19DTEtfT0ZGX0RFTEFZX19TSElGVDsKKwlXUkVHMzJfU09DMTUo SlBFRywgMCwgbW1KUEVHX0NHQ19DVFJMLCBkYXRhKTsKKworCWRhdGEgPSBSUkVHMzJfU09DMTUo SlBFRywgMCwgbW1KUEVHX0NHQ19HQVRFKTsKKwlkYXRhIHw9IChKUEVHX0NHQ19HQVRFX19KUEVH X0RFQ19NQVNLCisJCXxKUEVHX0NHQ19HQVRFX19KUEVHMl9ERUNfTUFTSworCQl8SlBFR19DR0Nf R0FURV9fSlBFR19FTkNfTUFTSworCQl8SlBFR19DR0NfR0FURV9fSk1DSUZfTUFTSworCQl8SlBF R19DR0NfR0FURV9fSlJCQk1fTUFTSyk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19D R0NfR0FURSwgZGF0YSk7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N0YXJ0IC0gc3RhcnQgSlBF RyBibG9jaworICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBTZXR1 cCBhbmQgc3RhcnQgdGhlIEpQRUcgYmxvY2sKKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBfc3Rh cnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IGFtZGdwdV9yaW5nICpy aW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJaW50IHI7CisKKwkvKiBkaXNhYmxl IHBvd2VyIGdhdGluZyAqLworCXIgPSBqcGVnX3YyXzBfZGlzYWJsZV9wb3dlcl9nYXRpbmcoYWRl dik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogSlBFRyBkaXNhYmxlIENHQyAqLworCWpw ZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dhdGluZyhhZGV2KTsKKworCVdSRUczMl9TT0MxNShKUEVH LCAwLCBtbUpQRUdfREVDX0dGWDEwX0FERFJfQ09ORklHLCBhZGV2LT5nZnguY29uZmlnLmdiX2Fk ZHJfY29uZmlnKTsKKworCS8qIGVuYWJsZSBKTUkgY2hhbm5lbCAqLworCVdSRUczMl9QKFNPQzE1 X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSk1JX0NOVEwpLCAwLAorCQl+VVZEX0pNSV9DTlRM X19TT0ZUX1JFU0VUX01BU0spOworCisJLyogZW5hYmxlIFN5c3RlbSBJbnRlcnJ1cHQgZm9yIEpS QkMgKi8KKwlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tSlBFR19TWVNfSU5U X0VOKSwKKwkJSlBFR19TWVNfSU5UX0VOX19ESlJCQ19NQVNLLAorCQl+SlBFR19TWVNfSU5UX0VO X19ESlJCQ19NQVNLKTsKKworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19S Ql9WTUlELCAwKTsKKwlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9DTlRMLCAo MHgwMDAwMDAwMUwgfCAweDAwMDAwMDAyTCkpOworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVW RF9MTUlfSlJCQ19SQl82NEJJVF9CQVJfTE9XLAorCQlsb3dlcl8zMl9iaXRzKHJpbmctPmdwdV9h ZGRyKSk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCXzY0QklUX0JB Ul9ISUdILAorCQl1cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7CisJV1JFRzMyX1NPQzE1 KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBUUiwgMCk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAs IG1tVVZEX0pSQkNfUkJfV1BUUiwgMCk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pS QkNfUkJfQ05UTCwgMHgwMDAwMDAwMkwpOworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9K UkJDX1JCX1NJWkUsIHJpbmctPnJpbmdfc2l6ZSAvIDQpOworCXJpbmctPndwdHIgPSBSUkVHMzJf U09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9XUFRSKTsKKworCXJldHVybiAwOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9zdG9wIC0gc3RvcCBKUEVHIGJsb2NrCisgKgorICogQGFkZXY6IGFt ZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIHN0b3AgdGhlIEpQRUcgYmxvY2sKKyAqLworc3Rh dGljIGludCBqcGVnX3YyXzBfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlp bnQgcjsKKworCS8qIHJlc2V0IEpNSSAqLworCVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoSlBF RywgMCwgbW1VVkRfSk1JX0NOVEwpLAorCQlVVkRfSk1JX0NOVExfX1NPRlRfUkVTRVRfTUFTSywK KwkJflVWRF9KTUlfQ05UTF9fU09GVF9SRVNFVF9NQVNLKTsKKworCS8qIGVuYWJsZSBKUEVHIENH QyAqLworCWpwZWdfdjJfMF9lbmFibGVfY2xvY2tfZ2F0aW5nKGFkZXYpOworCisJLyogZW5hYmxl IHBvd2VyIGdhdGluZyAqLworCXIgPSBqcGVnX3YyXzBfZW5hYmxlX3Bvd2VyX2dhdGluZyhhZGV2 KTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19nZXRfcnB0 ciAtIGdldCByZWFkIHBvaW50ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgor ICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcmVhZCBwb2ludGVyCisgKi8KK3N0 YXRpYyB1aW50NjRfdCBqcGVnX3YyXzBfZGVjX3JpbmdfZ2V0X3JwdHIoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsK KworCXJldHVybiBSUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKK30K KworLyoqCisgKiBqcGVnX3YyXzBfZGVjX3JpbmdfZ2V0X3dwdHIgLSBnZXQgd3JpdGUgcG9pbnRl cgorICoKKyAqIEByaW5nOiBhbWRncHVfcmluZyBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUg Y3VycmVudCBoYXJkd2FyZSB3cml0ZSBwb2ludGVyCisgKi8KK3N0YXRpYyB1aW50NjRfdCBqcGVn X3YyXzBfZGVjX3JpbmdfZ2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKworCWlmIChyaW5nLT51c2Vf ZG9vcmJlbGwpCisJCXJldHVybiBhZGV2LT53Yi53YltyaW5nLT53cHRyX29mZnNdOworCWVsc2UK KwkJcmV0dXJuIFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1dQVFIpOworfQor CisvKioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19zZXRfd3B0ciAtIHNldCB3cml0ZSBwb2ludGVy CisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKKyAqCisgKiBDb21taXRzIHRoZSB3 cml0ZSBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZQorICovCitzdGF0aWMgdm9pZCBqcGVnX3YyXzBf ZGVjX3Jpbmdfc2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKworCWlmIChyaW5nLT51c2VfZG9vcmJl bGwpIHsKKwkJYWRldi0+d2Iud2JbcmluZy0+d3B0cl9vZmZzXSA9IGxvd2VyXzMyX2JpdHMocmlu Zy0+d3B0cik7CisJCVdET09SQkVMTDMyKHJpbmctPmRvb3JiZWxsX2luZGV4LCBsb3dlcl8zMl9i aXRzKHJpbmctPndwdHIpKTsKKwl9IGVsc2UgeworCQlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1V VkRfSlJCQ19SQl9XUFRSLCBsb3dlcl8zMl9iaXRzKHJpbmctPndwdHIpKTsKKwl9Cit9CisKKy8q KgorICoganBlZ192Ml8wX2RlY19yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBhIHN0YXJ0IGNv bW1hbmQKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdyaXRlIGEg c3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KKyAqLwordm9pZCBqcGVnX3YyXzBfZGVjX3Jpbmdf aW5zZXJ0X3N0YXJ0KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKK3sKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCBQQUNLRVRKKG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0lOVEVSTkFMX09GRlNF VCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4 NjhlMDQpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSihKUkJDX0RFQ19FWFRF Uk5BTF9SRUdfV1JJVEVfQUREUiwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIDB4ODAwMTAwMDApOworfQorCisvKioKKyAqIGpwZWdfdjJfMF9kZWNf cmluZ19pbnNlcnRfZW5kIC0gaW5zZXJ0IGEgZW5kIGNvbW1hbmQKKyAqCisgKiBAcmluZzogYW1k Z3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdyaXRlIGEgZW5kIGNvbW1hbmQgdG8gdGhlIHJpbmcu CisgKi8KK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX2luc2VydF9lbmQoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKQoreworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJC Q19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193cml0 ZShyaW5nLCBQQUNLRVRKKEpSQkNfREVDX0VYVEVSTkFMX1JFR19XUklURV9BRERSLAorCQkwLCAw LCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMDAxMDAwMCk7 Cit9CisKKy8qKgorICoganBlZ192Ml8wX2RlY19yaW5nX2VtaXRfZmVuY2UgLSBlbWl0IGFuIGZl bmNlICYgdHJhcCBjb21tYW5kCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKKyAq IEBmZW5jZTogZmVuY2UgdG8gZW1pdAorICoKKyAqIFdyaXRlIGEgZmVuY2UgYW5kIGEgdHJhcCBj b21tYW5kIHRvIHRoZSByaW5nLgorICovCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2Zl bmNlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdTY0IGFkZHIsIHU2NCBzZXEsCisJCQkJdW5z aWduZWQgZmxhZ3MpCit7CisJV0FSTl9PTihmbGFncyAmIEFNREdQVV9GRU5DRV9GTEFHXzY0QklU KTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlBFR19HUENPTV9E QVRBMF9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCBzZXEpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywJUEFDS0VU SihtbVVWRF9KUEVHX0dQQ09NX0RBVEExX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VU Sl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHNlcSk7CisKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0xNSV9KUkJDX1JCX01FTV9XUl82NEJJVF9CQVJf TE9XX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOworCisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywJUEFDS0VUSihtbVVWRF9MTUlfSlJCQ19SQl9NRU1fV1JfNjRCSVRfQkFSX0hJR0hf SU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhhZGRyKSk7CisKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLAlQQUNLRVRKKG1tVVZEX0pQRUdfR1BDT01fQ01EX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwg MCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisKKwlh bWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0pQRUdfR1BDT01fQ01EX0lOVEVS TkFMX09GRlNFVCwKKwkJMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0swLCBQQUNLRVRKX1RZUEU0 KSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLAlQQUNLRVRKKG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0lOVEVSTkFMX09GRlNFVCwKKwkJ MCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4M2ZiYyk7 CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVRKKEpSQkNfREVDX0VYVEVSTkFMX1JF R19XUklURV9BRERSLAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywgMHgxKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwg MCwgUEFDS0VUSl9UWVBFNykpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2liIC0gZXhlY3V0ZSBpbmRpcmVjdCBidWZm ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICogQGliOiBpbmRpcmVjdCBi dWZmZXIgdG8gZXhlY3V0ZQorICoKKyAqIFdyaXRlIHJpbmcgY29tbWFuZHMgdG8gZXhlY3V0ZSB0 aGUgaW5kaXJlY3QgYnVmZmVyLgorICovCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2li KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJCQlzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iLAor CQkJCXN0cnVjdCBhbWRncHVfaWIgKmliLAorCQkJCXVpbnQzMl90IGZsYWdzKQoreworCXVuc2ln bmVkIHZtaWQgPSBBTURHUFVfSk9CX0dFVF9WTUlEKGpvYik7CisKKwlhbWRncHVfcmluZ193cml0 ZShyaW5nLCBQQUNLRVRKKG1tVVZEX0xNSV9KUkJDX0lCX1ZNSURfSU5URVJOQUxfT0ZGU0VULAor CQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgKHZtaWQg fCAodm1pZCA8PCA0KSkpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSihtbVVW RF9MTUlfSlBFR19WTUlEX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkpKTsKKworCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFS X0xPV19JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCBsb3dlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikpOworCisJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywJUEFDS0VUSihtbVVWRF9MTUlfSlJCQ19JQl82NEJJVF9CQVJfSElH SF9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywJUEFDS0VUSihtbVVWRF9KUkJDX0lCX1NJWkVfSU5URVJOQUxfT0ZGU0VU LAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWIt Pmxlbmd0aF9kdyk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0xN SV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9XX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwg UEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMo cmluZy0+Z3B1X2FkZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1V VkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFMX09GRlNFVCwKKwkJ MCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMy X2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tF VEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0swLCBQQUNLRVRKX1RZUEUyKSk7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNL RVRKKG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1FUl9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAs IFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsK KworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJCQ19SQl9SRUZfREFU QV9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDIpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywJUEFDS0VUSiht bVVWRF9KUkJDX1NUQVRVU19JTlRFUk5BTF9PRkZTRVQsCisJCTAsIFBBQ0tFVEpfQ09ORElUSU9O X0NIRUNLMywgUEFDS0VUSl9UWVBFMykpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4Mik7 Cit9CisKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX2VtaXRfcmVnX3dhaXQoc3RydWN0IGFtZGdw dV9yaW5nICpyaW5nLCB1aW50MzJfdCByZWcsCisJCQkJdWludDMyX3QgdmFsLCB1aW50MzJfdCBt YXNrKQoreworCXVpbnQzMl90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywgUEFDS0VUSihtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVJfSU5URVJO QUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHgwMTQwMDIwMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1t VVZEX0pSQkNfUkJfUkVGX0RBVEFfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdmFsKTsKKworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VU LAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJaWYgKHJlZ19vZmZzZXQgPj0gMHgxMDAwMCAm JiByZWdfb2Zmc2V0IDw9IDB4MTA1ZmYpIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCQlQQUNLRVRKKChyZWdfb2Zmc2V0ID4+IDIp LCAwLCAwLCBQQUNLRVRKX1RZUEUzKSk7CisJfSBlbHNlIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgcmVnX29mZnNldCk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEooSlJC Q19ERUNfRVhURVJOQUxfUkVHX1dSSVRFX0FERFIsCisJCQkwLCAwLCBQQUNLRVRKX1RZUEUzKSk7 CisJfQorCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1hc2spOworfQorCit2b2lkIGpwZWdfdjJf MF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJCQl1 bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKQoreworCXN0cnVjdCBhbWRncHVfdm1odWIg Kmh1YiA9ICZyaW5nLT5hZGV2LT52bWh1YltyaW5nLT5mdW5jcy0+dm1odWJdOworCXVpbnQzMl90 IGRhdGEwLCBkYXRhMSwgbWFzazsKKworCXBkX2FkZHIgPSBhbWRncHVfZ21jX2VtaXRfZmx1c2hf Z3B1X3RsYihyaW5nLCB2bWlkLCBwZF9hZGRyKTsKKworCS8qIHdhaXQgZm9yIHJlZ2lzdGVyIHdy aXRlICovCisJZGF0YTAgPSBodWItPmN0eDBfcHRiX2FkZHJfbG8zMiArIHZtaWQgKiAyOworCWRh dGExID0gbG93ZXJfMzJfYml0cyhwZF9hZGRyKTsKKwltYXNrID0gMHhmZmZmZmZmZjsKKwlqcGVn X3YyXzBfZGVjX3JpbmdfZW1pdF9yZWdfd2FpdChyaW5nLCBkYXRhMCwgZGF0YTEsIG1hc2spOwor fQorCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3dyZWcoc3RydWN0IGFtZGdwdV9yaW5n ICpyaW5nLCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwl1aW50MzJfdCByZWdfb2Zm c2V0ID0gKHJlZyA8PCAyKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1V VkRfSlJCQ19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJaWYgKHJlZ19vZmZzZXQgPj0gMHgxMDAwMCAmJiByZWdfb2Zmc2V0IDw9IDB4MTA1 ZmYpIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisJCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsCisJCQlQQUNLRVRKKChyZWdfb2Zmc2V0ID4+IDIpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7CisJfSBlbHNlIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgcmVnX29mZnNldCk7CisJ CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEooSlJCQ19ERUNfRVhURVJOQUxfUkVHX1dS SVRFX0FERFIsCisJCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJfQorCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIHZhbCk7Cit9CisKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX25vcChzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IGNvdW50KQoreworCWludCBpOworCisJV0FSTl9P TihyaW5nLT53cHRyICUgMiB8fCBjb3VudCAlIDIpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50 IC8gMjsgaSsrKSB7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwgMCwg UEFDS0VUSl9UWVBFNikpOworCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKKwl9Cit9CisK K3N0YXRpYyBib29sIGpwZWdfdjJfMF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKwor CXJldHVybiAoKFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1NUQVRVUykgJgorCQlV VkRfSlJCQ19TVEFUVVNfX1JCX0pPQl9ET05FX01BU0spID09CisJCVVWRF9KUkJDX1NUQVRVU19f UkJfSk9CX0RPTkVfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX3dhaXRfZm9yX2lk bGUodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVj dCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCWludCByZXQgPSAwOworCisJU09DMTVfV0FJVF9P Tl9SUkVHKEpQRUcsIDAsIG1tVVZEX0pSQkNfU1RBVFVTLCBVVkRfSlJCQ19TVEFUVVNfX1JCX0pP Ql9ET05FX01BU0ssCisJCVVWRF9KUkJDX1NUQVRVU19fUkJfSk9CX0RPTkVfTUFTSywgcmV0KTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX3NldF9jbG9ja2dhdGlu Z19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJCSAgZW51bSBhbWRfY2xvY2tnYXRpbmdfc3RhdGUg c3RhdGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKiloYW5kbGU7CisJYm9vbCBlbmFibGUgPSAoc3RhdGUgPT0gQU1EX0NHX1NUQVRFX0dB VEUpID8gdHJ1ZSA6IGZhbHNlOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAoanBlZ192Ml8wX2lz X2lkbGUoaGFuZGxlKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWpwZWdfdjJfMF9lbmFibGVfY2xv Y2tfZ2F0aW5nKGFkZXYpOworCX0gZWxzZSB7CisJCWpwZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dh dGluZyhhZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqcGVnX3YyXzBf c2V0X3Bvd2VyZ2F0aW5nX3N0YXRlKHZvaWQgKmhhbmRsZSwKKwkJCQkJZW51bSBhbWRfcG93ZXJn YXRpbmdfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJaW50IHJldDsKKworCWlmIChzdGF0ZSA9PSBh ZGV2LT5qcGVnLmN1cl9zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdGUgPT0gQU1EX1BH X1NUQVRFX0dBVEUpCisJCXJldCA9IGpwZWdfdjJfMF9zdG9wKGFkZXYpOworCWVsc2UKKwkJcmV0 ID0ganBlZ192Ml8wX3N0YXJ0KGFkZXYpOworCisJaWYgKCFyZXQpCisJCWFkZXYtPmpwZWcuY3Vy X3N0YXRlID0gc3RhdGU7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGpwZWdfdjJf MF9zZXRfaW50ZXJydXB0X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQlz dHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNvdXJjZSwKKwkJCQkJdW5zaWduZWQgdHlwZSwKKwkJCQkJ ZW51bSBhbWRncHVfaW50ZXJydXB0X3N0YXRlIHN0YXRlKQoreworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGpwZWdfdjJfMF9wcm9jZXNzX2ludGVycnVwdChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKKwkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNvdXJjZSwKKwkJCQkg ICAgICBzdHJ1Y3QgYW1kZ3B1X2l2X2VudHJ5ICplbnRyeSkKK3sKKwlEUk1fREVCVUcoIklIOiBK UEVHIFRSQVBcbiIpOworCisJc3dpdGNoIChlbnRyeS0+c3JjX2lkKSB7CisJY2FzZSBWQ05fMl8w X19TUkNJRF9fSlBFR19ERUNPREU6CisJCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2LT5qcGVn Lmluc3QtPnJpbmdfZGVjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbmhh bmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwKKwkJCSAgZW50cnktPnNyY19pZCwgZW50cnktPnNy Y19kYXRhWzBdKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIGpwZWdfdjJfMF9pcF9mdW5jcyA9IHsKKwkubmFtZSA9ICJq cGVnX3YyXzAiLAorCS5lYXJseV9pbml0ID0ganBlZ192Ml8wX2Vhcmx5X2luaXQsCisJLmxhdGVf aW5pdCA9IE5VTEwsCisJLnN3X2luaXQgPSBqcGVnX3YyXzBfc3dfaW5pdCwKKwkuc3dfZmluaSA9 IGpwZWdfdjJfMF9zd19maW5pLAorCS5od19pbml0ID0ganBlZ192Ml8wX2h3X2luaXQsCisJLmh3 X2ZpbmkgPSBqcGVnX3YyXzBfaHdfZmluaSwKKwkuc3VzcGVuZCA9IGpwZWdfdjJfMF9zdXNwZW5k LAorCS5yZXN1bWUgPSBqcGVnX3YyXzBfcmVzdW1lLAorCS5pc19pZGxlID0ganBlZ192Ml8wX2lz X2lkbGUsCisJLndhaXRfZm9yX2lkbGUgPSBqcGVnX3YyXzBfd2FpdF9mb3JfaWRsZSwKKwkuY2hl Y2tfc29mdF9yZXNldCA9IE5VTEwsCisJLnByZV9zb2Z0X3Jlc2V0ID0gTlVMTCwKKwkuc29mdF9y ZXNldCA9IE5VTEwsCisJLnBvc3Rfc29mdF9yZXNldCA9IE5VTEwsCisJLnNldF9jbG9ja2dhdGlu Z19zdGF0ZSA9IGpwZWdfdjJfMF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUsCisJLnNldF9wb3dlcmdh dGluZ19zdGF0ZSA9IGpwZWdfdjJfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGpwZWdfdjJfMF9kZWNfcmluZ192bV9m dW5jcyA9IHsKKwkudHlwZSA9IEFNREdQVV9SSU5HX1RZUEVfVkNOX0pQRUcsCisJLmFsaWduX21h c2sgPSAweGYsCisJLnZtaHViID0gQU1ER1BVX01NSFVCXzAsCisJLmdldF9ycHRyID0ganBlZ192 Ml8wX2RlY19yaW5nX2dldF9ycHRyLAorCS5nZXRfd3B0ciA9IGpwZWdfdjJfMF9kZWNfcmluZ19n ZXRfd3B0ciwKKwkuc2V0X3dwdHIgPSBqcGVnX3YyXzBfZGVjX3Jpbmdfc2V0X3dwdHIsCisJLmVt aXRfZnJhbWVfc2l6ZSA9CisJCVNPQzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1dSRUcgKiA2ICsKKwkJ U09DMTVfRkxVU0hfR1BVX1RMQl9OVU1fUkVHX1dBSVQgKiA4ICsKKwkJOCArIC8qIGpwZWdfdjJf MF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoICovCisJCTE4ICsgMTggKyAvKiBqcGVnX3YyXzBfZGVj X3JpbmdfZW1pdF9mZW5jZSB4MiB2bSBmZW5jZSAqLworCQk4ICsgMTYsCisJLmVtaXRfaWJfc2l6 ZSA9IDIyLCAvKiBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9pYiAqLworCS5lbWl0X2liID0ganBl Z192Ml8wX2RlY19yaW5nX2VtaXRfaWIsCisJLmVtaXRfZmVuY2UgPSBqcGVnX3YyXzBfZGVjX3Jp bmdfZW1pdF9mZW5jZSwKKwkuZW1pdF92bV9mbHVzaCA9IGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0 X3ZtX2ZsdXNoLAorCS50ZXN0X3JpbmcgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X3Jpbmcs CisJLnRlc3RfaWIgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X2liLAorCS5pbnNlcnRfbm9w ID0ganBlZ192Ml8wX2RlY19yaW5nX25vcCwKKwkuaW5zZXJ0X3N0YXJ0ID0ganBlZ192Ml8wX2Rl Y19yaW5nX2luc2VydF9zdGFydCwKKwkuaW5zZXJ0X2VuZCA9IGpwZWdfdjJfMF9kZWNfcmluZ19p bnNlcnRfZW5kLAorCS5wYWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3BhZF9pYiwKKwkuYmVn aW5fdXNlID0gYW1kZ3B1X2pwZWdfcmluZ19iZWdpbl91c2UsCisJLmVuZF91c2UgPSBhbWRncHVf anBlZ19yaW5nX2VuZF91c2UsCisJLmVtaXRfd3JlZyA9IGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0 X3dyZWcsCisJLmVtaXRfcmVnX3dhaXQgPSBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9yZWdfd2Fp dCwKKwkuZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXQgPSBhbWRncHVfcmluZ19lbWl0X3JlZ193cml0 ZV9yZWdfd2FpdF9oZWxwZXIsCit9OworCitzdGF0aWMgdm9pZCBqcGVnX3YyXzBfc2V0X2RlY19y aW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWFkZXYtPmpwZWcuaW5z dC0+cmluZ19kZWMuZnVuY3MgPSAmanBlZ192Ml8wX2RlY19yaW5nX3ZtX2Z1bmNzOworCURSTV9J TkZPKCJKUEVHIGRlY29kZSBpcyBlbmFibGVkIGluIFZNIG1vZGVcbiIpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3JjX2Z1bmNzIGpwZWdfdjJfMF9pcnFfZnVuY3MgPSB7 CisJLnNldCA9IGpwZWdfdjJfMF9zZXRfaW50ZXJydXB0X3N0YXRlLAorCS5wcm9jZXNzID0ganBl Z192Ml8wX3Byb2Nlc3NfaW50ZXJydXB0LAorfTsKKworc3RhdGljIHZvaWQganBlZ192Ml8wX3Nl dF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJYWRldi0+anBlZy5p bnN0LT5pcnEubnVtX3R5cGVzID0gMTsKKwlhZGV2LT5qcGVnLmluc3QtPmlycS5mdW5jcyA9ICZq cGVnX3YyXzBfaXJxX2Z1bmNzOworfQorCitjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3Zl cnNpb24ganBlZ192Ml8wX2lwX2Jsb2NrID0KK3sKKwkJLnR5cGUgPSBBTURfSVBfQkxPQ0tfVFlQ RV9KUEVHLAorCQkubWFqb3IgPSAyLAorCQkubWlub3IgPSAwLAorCQkucmV2ID0gMCwKKwkJLmZ1 bmNzID0gJmpwZWdfdjJfMF9pcF9mdW5jcywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pw ZWdfdjJfMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTVhMzQ0 ZWQzNDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBl Z192Ml8wLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2Vk IE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBf X0pQRUdfVjJfMF9IX18KKyNkZWZpbmUgX19KUEVHX1YyXzBfSF9fCisKK3ZvaWQganBlZ192Ml8w X2RlY19yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpOwordm9pZCBq cGVnX3YyXzBfZGVjX3JpbmdfaW5zZXJ0X2VuZChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpOwor dm9pZCBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9mZW5jZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcsIHU2NCBhZGRyLCB1NjQgc2VxLAorCQkJCXVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQganBlZ192 Ml8wX2RlY19yaW5nX2VtaXRfaWIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCBzdHJ1Y3QgYW1k Z3B1X2pvYiAqam9iLAorCQkJCXN0cnVjdCBhbWRncHVfaWIgKmliLCB1aW50MzJfdCBmbGFncyk7 Cit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3JlZ193YWl0KHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywgdWludDMyX3QgcmVnLAorCQkJCXVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzayk7 Cit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoKHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywKKwkJCQl1bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKTsKK3ZvaWQganBl Z192Ml8wX2RlY19yaW5nX2VtaXRfd3JlZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQz Ml90IHJlZywgdWludDMyX3QgdmFsKTsKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX25vcChzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IGNvdW50KTsKKworZXh0ZXJuIGNvbnN0IHN0 cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBqcGVnX3YyXzBfaXBfYmxvY2s7CisKKyNlbmRp ZiAvKiBfX0pQRUdfVjJfMF9IX18gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9hbWQtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA1DCC43331 for ; Tue, 12 Nov 2019 18:04:18 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8FDAF2067B for ; Tue, 12 Nov 2019 18:04:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8FDAF2067B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DCA496EBB1; Tue, 12 Nov 2019 18:04:16 +0000 (UTC) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-eopbgr790079.outbound.protection.outlook.com [40.107.79.79]) by gabe.freedesktop.org (Postfix) with ESMTPS id 817A26EBA5 for ; Tue, 12 Nov 2019 18:04:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eYkeIPoEYS+6Y56RhC4mnlcbBmN3bK8ouoqweqUZooYBng1rV+grxlDSrhf41IbPI4NWgGVCWysTmCS+bRXoGS0Vy/20mz1Gmku9Jq6x/bY2QiUlGh7AU9QJ3NAURf/cPnp6v6CRDjFGkJsZiyj27R3caoO5AtCKSqkCQ0Ssx2Sql6Xi06dNpEUmFRvNpWkhvj45Eifpml5tpZiDuzlUbLaKNmAFZ19JwOtqA1O43rGTcMoIqSOoEAZc1Z1gK/hbNFFSLZkNpLgpoVJu4WyOcnJdkdW4PMavyQi6ETEGcn3yoMeygDeCa4nvG7/boiEZ0iVapcvQL742ctmvNivYcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=An6SLu7GQ7+66OLROY8XIXFQtsg7a6J8V7ZjtqR/e8o=; b=VTa6qAHkeP8WZLANVqKVgK7Cvk4+8lMctMrF3LWK7t9OXWIIvKu2denp2dAVU/muA5eLOufO4aYRpS9CfMl8+/3maKKA0m8Qse45+d6XXSm9xhwnelrG2Sdi/vG58IgYytGel9vCrx+95t8cjwd4kXDuXy6/MQ79s9IPv2+RE/IXExl7egAoITbCMIwz0gjl2RcLzgMMEr7UpxEiNP77o/kfEPFqHj/Rr/bccxhuxCF47G7f9DMv7lxauqPAawc3RdzoSxPhnXV72Il1kaRYwhRDPtNd6lV7N3d5o7X+yMckCYjMXSLmH4eEQKbnrtv45o8DpOsYUWxJ578DZu+wGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from DM5PR12MB2456.namprd12.prod.outlook.com (52.132.141.37) by DM5PR12MB2405.namprd12.prod.outlook.com (52.132.140.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.24; Tue, 12 Nov 2019 18:04:11 +0000 Received: from DM5PR12MB2456.namprd12.prod.outlook.com ([fe80::75bf:bd52:2f61:656b]) by DM5PR12MB2456.namprd12.prod.outlook.com ([fe80::75bf:bd52:2f61:656b%7]) with mapi id 15.20.2451.023; Tue, 12 Nov 2019 18:04:11 +0000 From: Leo Liu To: amd-gfx@lists.freedesktop.org Subject: [PATCH 07/21] drm/amdgpu: add JPEG v2.0 function supports Date: Tue, 12 Nov 2019 13:03:15 -0500 Message-Id: <20191112180329.3927-8-leo.liu@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191112180329.3927-1-leo.liu@amd.com> References: <20191112180329.3927-1-leo.liu@amd.com> X-ClientProxiedBy: YTOPR0101CA0059.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b00:14::36) To DM5PR12MB2456.namprd12.prod.outlook.com (2603:10b6:4:b4::37) MIME-Version: 1.0 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [165.204.55.251] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 65a7ffe9-73dd-4c3e-fb7d-08d7679ab8b0 X-MS-TrafficTypeDiagnostic: DM5PR12MB2405: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-Forefront-PRVS: 021975AE46 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(376002)(346002)(136003)(396003)(366004)(199004)(189003)(4326008)(6512007)(76176011)(66066001)(47776003)(2351001)(478600001)(51416003)(52116002)(14454004)(6916009)(44832011)(486006)(186003)(476003)(2616005)(6506007)(386003)(7736002)(26005)(25786009)(2361001)(14444005)(36756003)(86362001)(305945005)(446003)(11346002)(6116002)(8676002)(3846002)(99286004)(16586007)(66476007)(50226002)(66946007)(30864003)(2906002)(6486002)(6436002)(8936002)(81166006)(50466002)(5660300002)(316002)(1076003)(48376002)(81156014)(66556008); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB2405; H:DM5PR12MB2456.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HauMs3ZpdipJVQRPRQVDvSWw6SbpTOy2Q634VjcTOf+zjyWptDAwwnNthdspISz+zcC6voZGQRjb7InilS6MKU1YW2cCWR7X6RUnAkuBD3xt2ZcwHO8JZfSa6vJGH5vLCTdQJQt5jSdfS9ohlyq1VgpUWNk7SsEAnqIpb5I1bZmO0ShZ4FrPLDKWxQD2TqWvC3gxT1lhWTCfLAuvyrOfrNfNwFSu0V/WSpnAqUBhPSq2pnNb9owTXSeoSAKVMt6ily8g9S1ycxGXR/MQWp1xM6JuolJHq96AzxQwY3Da0+lpXhpsq959aM76b3q3Ez9FoJv1vGXe2J0t2W7zu4J+RzQLsGzicK3I8LlloR9uhXy775RXelV+hsC5OF8m4RebTu+63pVaXKJ2kv8BzGt0n6IvISSr0M9nzDDuEResNJMtindj/PhGkQyEyl8bqV82 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65a7ffe9-73dd-4c3e-fb7d-08d7679ab8b0 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2019 18:04:11.9634 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cbFcXoGAZjVB/zGqsk7nZl1SK+CAJJPXA4TzfdwcdamAm0BYIBGyx4aiyfvFWacT X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2405 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=An6SLu7GQ7+66OLROY8XIXFQtsg7a6J8V7ZjtqR/e8o=; b=N7AJS/VYLVwYffArHaw1Tk3BLdG50177s22c8oJ+ri7YtVhWxKZ32eYqlmk2kN/nMDLLg2y7cOX1IFw4DurUCkPng4YkioeY3DKLuW/WQnKsnhMyOKUxoPm0NjAqtyuRfki6MwFHsY/K/CZ0+KrKMoVZRFJfXtdPxZhJ0zfg2gU= X-Mailman-Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Leo.Liu@amd.com; X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Leo Liu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191112180315.s2id2HQxWF34WGeN2WsFgI5x6S4czEw7Kd0DLemwRuw@z> SXQgZ290IHNlcGFyYXRlZCBmcm9tIFZDTjIuMCB3aXRoIGEgbmV3IGpwZWdfdjJfMF9pcF9ibG9j awoKU2lnbmVkLW9mZi1ieTogTGVvIExpdSA8bGVvLmxpdUBhbWQuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9qcGVnX3YyXzAuYyB8IDgwOSArKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuaCB8ICA0MiArKwogMyBmaWxlcyBj aGFuZ2VkLCA4NTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjJfMC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBlZ192Ml8wLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L01ha2VmaWxlCmluZGV4IDI5MzZjMjkyMzc5ZC4uZDQwYWY2NTE5MzU2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZQpAQCAtMTU0LDcgKzE1NCw4IEBAIGFtZGdwdS15 ICs9IFwKIAl2Y25fdjJfMC5vIFwKIAl2Y25fdjJfNS5vIFwKIAlhbWRncHVfanBlZy5vIFwKLQlq cGVnX3YxXzAubworCWpwZWdfdjFfMC5vIFwKKwlqcGVnX3YyXzAubwogCiAjIGFkZCBBVEhVQiBi bG9jawogYW1kZ3B1LXkgKz0gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvanBlZ192Ml8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxNDNlZjY5MDViOAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pwZWdfdjJfMC5jCkBA IC0wLDAgKzEsODA5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8gRGV2 aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAor ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiYW1kZ3B1Lmgi CisjaW5jbHVkZSAiYW1kZ3B1X2pwZWcuaCIKKyNpbmNsdWRlICJhbWRncHVfcG0uaCIKKyNpbmNs dWRlICJzb2MxNS5oIgorI2luY2x1ZGUgInNvYzE1ZC5oIgorCisjaW5jbHVkZSAidmNuL3Zjbl8y XzBfMF9vZmZzZXQuaCIKKyNpbmNsdWRlICJ2Y24vdmNuXzJfMF8wX3NoX21hc2suaCIKKyNpbmNs dWRlICJpdnNyY2lkL3Zjbi9pcnFzcmNzX3Zjbl8yXzAuaCIKKworI2RlZmluZSBtbVVWRF9KUkJD X0VYVEVSTkFMX1JFR19JTlRFUk5BTF9PRkZTRVQgCQkJMHgxYmZmZgorI2RlZmluZSBtbVVWRF9K UEVHX0dQQ09NX0NNRF9JTlRFUk5BTF9PRkZTRVQJCQkJMHg0MDI5CisjZGVmaW5lIG1tVVZEX0pQ RUdfR1BDT01fREFUQTBfSU5URVJOQUxfT0ZGU0VUCQkJCTB4NDAyYQorI2RlZmluZSBtbVVWRF9K UEVHX0dQQ09NX0RBVEExX0lOVEVSTkFMX09GRlNFVAkJCQkweDQwMmIKKyNkZWZpbmUgbW1VVkRf TE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9MT1dfSU5URVJOQUxfT0ZGU0VUCQkweDQwZWEK KyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfUkJfTUVNX1dSXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFM X09GRlNFVCAJMHg0MGViCisjZGVmaW5lIG1tVVZEX0xNSV9KUkJDX0lCX1ZNSURfSU5URVJOQUxf T0ZGU0VUCQkJCTB4NDBjZgorI2RlZmluZSBtbVVWRF9MTUlfSlBFR19WTUlEX0lOVEVSTkFMX09G RlNFVAkJCQkweDQwZDEKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFSX0xPV19J TlRFUk5BTF9PRkZTRVQgCQkweDQwZTgKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRf QkFSX0hJR0hfSU5URVJOQUxfT0ZGU0VUCQkweDQwZTkKKyNkZWZpbmUgbW1VVkRfSlJCQ19JQl9T SVpFX0lOVEVSTkFMX09GRlNFVAkJCQkweDQwODIKKyNkZWZpbmUgbW1VVkRfTE1JX0pSQkNfUkJf TUVNX1JEXzY0QklUX0JBUl9MT1dfSU5URVJOQUxfT0ZGU0VUCQkweDQwZWMKKyNkZWZpbmUgbW1V VkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFMX09GRlNFVCAJMHg0 MGVkCisjZGVmaW5lIG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1FUl9JTlRFUk5BTF9PRkZTRVQJ CQkweDQwODUKKyNkZWZpbmUgbW1VVkRfSlJCQ19SQl9SRUZfREFUQV9JTlRFUk5BTF9PRkZTRVQJ CQkJMHg0MDg0CisjZGVmaW5lIG1tVVZEX0pSQkNfU1RBVFVTX0lOVEVSTkFMX09GRlNFVAkJCQkw eDQwODkKKyNkZWZpbmUgbW1VVkRfSlBFR19QSVRDSF9JTlRFUk5BTF9PRkZTRVQJCQkJMHg0MDFm CisKKyNkZWZpbmUgSlJCQ19ERUNfRVhURVJOQUxfUkVHX1dSSVRFX0FERFIJCQkJMHgxODAwMAor CitzdGF0aWMgdm9pZCBqcGVnX3YyXzBfc2V0X2RlY19yaW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KTsKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9zZXRfaXJxX2Z1bmNzKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3N0YXRpYyBpbnQganBlZ192Ml8wX3NldF9wb3dlcmdh dGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJZW51bSBhbWRfcG93ZXJnYXRpbmdfc3RhdGUg c3RhdGUpOworCisvKioKKyAqIGpwZWdfdjJfMF9lYXJseV9pbml0IC0gc2V0IGZ1bmN0aW9uIHBv aW50ZXJzCisgKgorICogQGhhbmRsZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICogU2V0 IHJpbmcgYW5kIGlycSBmdW5jdGlvbiBwb2ludGVycworICovCitzdGF0aWMgaW50IGpwZWdfdjJf MF9lYXJseV9pbml0KHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCWFkZXYtPmpwZWcubnVtX2pw ZWdfaW5zdCA9IDE7CisKKwlqcGVnX3YyXzBfc2V0X2RlY19yaW5nX2Z1bmNzKGFkZXYpOworCWpw ZWdfdjJfMF9zZXRfaXJxX2Z1bmNzKGFkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog anBlZ192Ml8wX3N3X2luaXQgLSBzdyBpbml0IGZvciBKUEVHIGJsb2NrCisgKgorICogQGhhbmRs ZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICogTG9hZCBmaXJtd2FyZSBhbmQgc3cgaW5p dGlhbGl6YXRpb24KKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBfc3dfaW5pdCh2b2lkICpoYW5k bGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKiloYW5kbGU7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOworCWludCByOworCisJLyog SlBFRyBUUkFQICovCisJciA9IGFtZGdwdV9pcnFfYWRkX2lkKGFkZXYsIFNPQzE1X0lIX0NMSUVO VElEX1ZDTiwKKwkJVkNOXzJfMF9fU1JDSURfX0pQRUdfREVDT0RFLCAmYWRldi0+anBlZy5pbnN0 LT5pcnEpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBhbWRncHVfanBlZ19zd19pbml0 KGFkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBhbWRncHVfanBlZ19yZXN1bWUo YWRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmluZyA9ICZhZGV2LT5qcGVnLmluc3Qt PnJpbmdfZGVjOworCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7CisJcmluZy0+ZG9vcmJlbGxf aW5kZXggPSAoYWRldi0+ZG9vcmJlbGxfaW5kZXgudmNuLnZjbl9yaW5nMF8xIDw8IDEpICsgMTsK KwlzcHJpbnRmKHJpbmctPm5hbWUsICJqcGVnX2RlYyIpOworCXIgPSBhbWRncHVfcmluZ19pbml0 KGFkZXYsIHJpbmcsIDUxMiwgJmFkZXYtPmpwZWcuaW5zdC0+aXJxLCAwKTsKKwlpZiAocikKKwkJ cmV0dXJuIHI7CisKKwlhZGV2LT5qcGVnLmludGVybmFsLmpwZWdfcGl0Y2ggPSBtbVVWRF9KUEVH X1BJVENIX0lOVEVSTkFMX09GRlNFVDsKKwlhZGV2LT5qcGVnLmluc3QtPmV4dGVybmFsLmpwZWdf cGl0Y2ggPSBTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX0pQRUdfUElUQ0gpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N3X2ZpbmkgLSBzdyBmaW5pIGZvciBK UEVHIGJsb2NrCisgKgorICogQGhhbmRsZTogYW1kZ3B1X2RldmljZSBwb2ludGVyCisgKgorICog SlBFRyBzdXNwZW5kIGFuZCBmcmVlIHVwIHN3IGFsbG9jYXRpb24KKyAqLworc3RhdGljIGludCBq cGVnX3YyXzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCit7CisJaW50IHI7CisJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisKKwlyID0g YW1kZ3B1X2pwZWdfc3VzcGVuZChhZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0g YW1kZ3B1X2pwZWdfc3dfZmluaShhZGV2KTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIGpw ZWdfdjJfMF9od19pbml0IC0gc3RhcnQgYW5kIHRlc3QgSlBFRyBibG9jaworICoKKyAqIEBoYW5k bGU6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBf aHdfaW5pdCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAo c3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n ID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJaW50IHI7CisKKwlhZGV2LT5uYmlvLmZ1 bmNzLT52Y25fZG9vcmJlbGxfcmFuZ2UoYWRldiwgcmluZy0+dXNlX2Rvb3JiZWxsLAorCQkoYWRl di0+ZG9vcmJlbGxfaW5kZXgudmNuLnZjbl9yaW5nMF8xIDw8IDEpLCAwKTsKKworCXIgPSBhbWRn cHVfcmluZ190ZXN0X2hlbHBlcihyaW5nKTsKKwlpZiAoIXIpCisJCURSTV9JTkZPKCJKUEVHIGRl Y29kZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuXG4iKTsKKworCXJldHVybiByOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9od19maW5pIC0gc3RvcCB0aGUgaGFyZHdhcmUgYmxvY2sKKyAqCisg KiBAaGFuZGxlOiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBTdG9wIHRoZSBKUEVHIGJs b2NrLCBtYXJrIHJpbmcgYXMgbm90IHJlYWR5IGFueSBtb3JlCisgKi8KK3N0YXRpYyBpbnQganBl Z192Ml8wX2h3X2Zpbmkodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCXN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZyA9ICZhZGV2LT5qcGVnLmluc3QtPnJpbmdfZGVjOworCisJaWYgKGFkZXYtPmpwZWcu Y3VyX3N0YXRlICE9IEFNRF9QR19TVEFURV9HQVRFICYmCisJICAgICAgUlJFRzMyX1NPQzE1KEpQ RUcsIDAsIG1tVVZEX0pSQkNfU1RBVFVTKSkKKwkJanBlZ192Ml8wX3NldF9wb3dlcmdhdGluZ19z dGF0ZShhZGV2LCBBTURfUEdfU1RBVEVfR0FURSk7CisKKwlyaW5nLT5zY2hlZC5yZWFkeSA9IGZh bHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N1c3BlbmQgLSBzdXNw ZW5kIEpQRUcgYmxvY2sKKyAqCisgKiBAaGFuZGxlOiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAq CisgKiBIVyBmaW5pIGFuZCBzdXNwZW5kIEpQRUcgYmxvY2sKKyAqLworc3RhdGljIGludCBqcGVn X3YyXzBfc3VzcGVuZCh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJaW50IHI7CisKKwlyID0ganBl Z192Ml8wX2h3X2ZpbmkoYWRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IGFtZGdw dV9qcGVnX3N1c3BlbmQoYWRldik7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBqcGVnX3Yy XzBfcmVzdW1lIC0gcmVzdW1lIEpQRUcgYmxvY2sKKyAqCisgKiBAaGFuZGxlOiBhbWRncHVfZGV2 aWNlIHBvaW50ZXIKKyAqCisgKiBSZXN1bWUgZmlybXdhcmUgYW5kIGh3IGluaXQgSlBFRyBibG9j aworICovCitzdGF0aWMgaW50IGpwZWdfdjJfMF9yZXN1bWUodm9pZCAqaGFuZGxlKQoreworCWlu dCByOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNl ICopaGFuZGxlOworCisJciA9IGFtZGdwdV9qcGVnX3Jlc3VtZShhZGV2KTsKKwlpZiAocikKKwkJ cmV0dXJuIHI7CisKKwlyID0ganBlZ192Ml8wX2h3X2luaXQoYWRldik7CisKKwlyZXR1cm4gcjsK K30KKworc3RhdGljIGludCBqcGVnX3YyXzBfZGlzYWJsZV9wb3dlcl9nYXRpbmcoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJdWludDMyX3QgZGF0YTsKKwlpbnQgciA9IDA7CisKKwlk YXRhID0gMSA8PCBVVkRfUEdGU01fQ09ORklHX19VVkRKX1BXUl9DT05GSUdfX1NISUZUOworCVdS RUczMihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tVVZEX1BHRlNNX0NPTkZJRyksIGRhdGEp OworCisJU09DMTVfV0FJVF9PTl9SUkVHKEpQRUcsIDAsCisJCW1tVVZEX1BHRlNNX1NUQVRVUywg VVZEX1BHRlNNX1NUQVRVU19VVkRKX1BXUl9PTiwKKwkJVVZEX1BHRlNNX1NUQVRVU19fVVZESl9Q V1JfU1RBVFVTX01BU0ssIHIpOworCisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHU6IEpQ RUcgZGlzYWJsZSBwb3dlciBnYXRpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJ LyogUmVtb3ZpbmcgdGhlIGFudGkgaGFuZyBtZWNoYW5pc20gdG8gaW5kaWNhdGUgdGhlIFVWREog dGlsZSBpcyBPTiAqLworCWRhdGEgPSBSUkVHMzIoU09DMTVfUkVHX09GRlNFVChKUEVHLCAwLCBt bVVWRF9KUEVHX1BPV0VSX1NUQVRVUykpICYgfjB4MTsKKwlXUkVHMzIoU09DMTVfUkVHX09GRlNF VChKUEVHLCAwLCBtbVVWRF9KUEVHX1BPV0VSX1NUQVRVUyksIGRhdGEpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX2VuYWJsZV9wb3dlcl9nYXRpbmcoc3RydWN0IGFt ZGdwdV9kZXZpY2UqIGFkZXYpCit7CisJdWludDMyX3QgZGF0YTsKKwlpbnQgciA9IDA7CisKKwlk YXRhID0gUlJFRzMyKFNPQzE1X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSlBFR19QT1dFUl9T VEFUVVMpKTsKKwlkYXRhICY9IH5VVkRfSlBFR19QT1dFUl9TVEFUVVNfX0pQRUdfUE9XRVJfU1RB VFVTX01BU0s7CisJZGF0YSB8PSAgMHgxOyAvL1VWRF9KUEVHX1BPV0VSX1NUQVRVU19fSlBFR19Q T1dFUl9TVEFUVVNfVElMRVNfT0ZGOworCVdSRUczMihTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAs IG1tVVZEX0pQRUdfUE9XRVJfU1RBVFVTKSwgZGF0YSk7CisKKwlkYXRhID0gMiA8PCBVVkRfUEdG U01fQ09ORklHX19VVkRKX1BXUl9DT05GSUdfX1NISUZUOworCVdSRUczMihTT0MxNV9SRUdfT0ZG U0VUKEpQRUcsIDAsIG1tVVZEX1BHRlNNX0NPTkZJRyksIGRhdGEpOworCisJU09DMTVfV0FJVF9P Tl9SUkVHKEpQRUcsIDAsIG1tVVZEX1BHRlNNX1NUQVRVUywKKwkJKDIgPDwgVVZEX1BHRlNNX1NU QVRVU19fVVZESl9QV1JfU1RBVFVTX19TSElGVCksCisJCVVWRF9QR0ZTTV9TVEFUVVNfX1VWREpf UFdSX1NUQVRVU19NQVNLLCByKTsKKworCWlmIChyKSB7CisJCURSTV9FUlJPUigiYW1kZ3B1OiBK UEVHIGVuYWJsZSBwb3dlciBnYXRpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dhdGlu ZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSogYWRldikKK3sKKwl1aW50MzJfdCBkYXRhOworCisJZGF0 YSA9IFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbUpQRUdfQ0dDX0NUUkwpOworCWRhdGEgfD0gMSA8 PCBKUEVHX0NHQ19DVFJMX19EWU5fQ0xPQ0tfTU9ERV9fU0hJRlQ7CisKKwlkYXRhIHw9IDEgPDwg SlBFR19DR0NfQ1RSTF9fQ0xLX0dBVEVfRExZX1RJTUVSX19TSElGVDsKKwlkYXRhIHw9IDQgPDwg SlBFR19DR0NfQ1RSTF9fQ0xLX09GRl9ERUxBWV9fU0hJRlQ7CisJV1JFRzMyX1NPQzE1KEpQRUcs IDAsIG1tSlBFR19DR0NfQ1RSTCwgZGF0YSk7CisKKwlkYXRhID0gUlJFRzMyX1NPQzE1KEpQRUcs IDAsIG1tSlBFR19DR0NfR0FURSk7CisJZGF0YSAmPSB+KEpQRUdfQ0dDX0dBVEVfX0pQRUdfREVD X01BU0sKKwkJfCBKUEVHX0NHQ19HQVRFX19KUEVHMl9ERUNfTUFTSworCQl8IEpQRUdfQ0dDX0dB VEVfX0pQRUdfRU5DX01BU0sKKwkJfCBKUEVHX0NHQ19HQVRFX19KTUNJRl9NQVNLCisJCXwgSlBF R19DR0NfR0FURV9fSlJCQk1fTUFTSyk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19D R0NfR0FURSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGpwZWdfdjJfMF9lbmFibGVfY2xvY2tf Z2F0aW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlKiBhZGV2KQoreworCXVpbnQzMl90IGRhdGE7CisK KwlkYXRhID0gUlJFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19DR0NfQ1RSTCk7CisJZGF0YSB8 PSAxIDw8IEpQRUdfQ0dDX0NUUkxfX0RZTl9DTE9DS19NT0RFX19TSElGVDsKKworCWRhdGEgfD0g MSA8PCBKUEVHX0NHQ19DVFJMX19DTEtfR0FURV9ETFlfVElNRVJfX1NISUZUOworCWRhdGEgfD0g NCA8PCBKUEVHX0NHQ19DVFJMX19DTEtfT0ZGX0RFTEFZX19TSElGVDsKKwlXUkVHMzJfU09DMTUo SlBFRywgMCwgbW1KUEVHX0NHQ19DVFJMLCBkYXRhKTsKKworCWRhdGEgPSBSUkVHMzJfU09DMTUo SlBFRywgMCwgbW1KUEVHX0NHQ19HQVRFKTsKKwlkYXRhIHw9IChKUEVHX0NHQ19HQVRFX19KUEVH X0RFQ19NQVNLCisJCXxKUEVHX0NHQ19HQVRFX19KUEVHMl9ERUNfTUFTSworCQl8SlBFR19DR0Nf R0FURV9fSlBFR19FTkNfTUFTSworCQl8SlBFR19DR0NfR0FURV9fSk1DSUZfTUFTSworCQl8SlBF R19DR0NfR0FURV9fSlJCQk1fTUFTSyk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tSlBFR19D R0NfR0FURSwgZGF0YSk7Cit9CisKKy8qKgorICoganBlZ192Ml8wX3N0YXJ0IC0gc3RhcnQgSlBF RyBibG9jaworICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBTZXR1 cCBhbmQgc3RhcnQgdGhlIEpQRUcgYmxvY2sKKyAqLworc3RhdGljIGludCBqcGVnX3YyXzBfc3Rh cnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IGFtZGdwdV9yaW5nICpy aW5nID0gJmFkZXYtPmpwZWcuaW5zdC0+cmluZ19kZWM7CisJaW50IHI7CisKKwkvKiBkaXNhYmxl IHBvd2VyIGdhdGluZyAqLworCXIgPSBqcGVnX3YyXzBfZGlzYWJsZV9wb3dlcl9nYXRpbmcoYWRl dik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogSlBFRyBkaXNhYmxlIENHQyAqLworCWpw ZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dhdGluZyhhZGV2KTsKKworCVdSRUczMl9TT0MxNShKUEVH LCAwLCBtbUpQRUdfREVDX0dGWDEwX0FERFJfQ09ORklHLCBhZGV2LT5nZnguY29uZmlnLmdiX2Fk ZHJfY29uZmlnKTsKKworCS8qIGVuYWJsZSBKTUkgY2hhbm5lbCAqLworCVdSRUczMl9QKFNPQzE1 X1JFR19PRkZTRVQoSlBFRywgMCwgbW1VVkRfSk1JX0NOVEwpLCAwLAorCQl+VVZEX0pNSV9DTlRM X19TT0ZUX1JFU0VUX01BU0spOworCisJLyogZW5hYmxlIFN5c3RlbSBJbnRlcnJ1cHQgZm9yIEpS QkMgKi8KKwlXUkVHMzJfUChTT0MxNV9SRUdfT0ZGU0VUKEpQRUcsIDAsIG1tSlBFR19TWVNfSU5U X0VOKSwKKwkJSlBFR19TWVNfSU5UX0VOX19ESlJCQ19NQVNLLAorCQl+SlBFR19TWVNfSU5UX0VO X19ESlJCQ19NQVNLKTsKKworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9MTUlfSlJCQ19S Ql9WTUlELCAwKTsKKwlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9DTlRMLCAo MHgwMDAwMDAwMUwgfCAweDAwMDAwMDAyTCkpOworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVW RF9MTUlfSlJCQ19SQl82NEJJVF9CQVJfTE9XLAorCQlsb3dlcl8zMl9iaXRzKHJpbmctPmdwdV9h ZGRyKSk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0xNSV9KUkJDX1JCXzY0QklUX0JB Ul9ISUdILAorCQl1cHBlcl8zMl9iaXRzKHJpbmctPmdwdV9hZGRyKSk7CisJV1JFRzMyX1NPQzE1 KEpQRUcsIDAsIG1tVVZEX0pSQkNfUkJfUlBUUiwgMCk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAs IG1tVVZEX0pSQkNfUkJfV1BUUiwgMCk7CisJV1JFRzMyX1NPQzE1KEpQRUcsIDAsIG1tVVZEX0pS QkNfUkJfQ05UTCwgMHgwMDAwMDAwMkwpOworCVdSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9K UkJDX1JCX1NJWkUsIHJpbmctPnJpbmdfc2l6ZSAvIDQpOworCXJpbmctPndwdHIgPSBSUkVHMzJf U09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9XUFRSKTsKKworCXJldHVybiAwOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9zdG9wIC0gc3RvcCBKUEVHIGJsb2NrCisgKgorICogQGFkZXY6IGFt ZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIHN0b3AgdGhlIEpQRUcgYmxvY2sKKyAqLworc3Rh dGljIGludCBqcGVnX3YyXzBfc3RvcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlp bnQgcjsKKworCS8qIHJlc2V0IEpNSSAqLworCVdSRUczMl9QKFNPQzE1X1JFR19PRkZTRVQoSlBF RywgMCwgbW1VVkRfSk1JX0NOVEwpLAorCQlVVkRfSk1JX0NOVExfX1NPRlRfUkVTRVRfTUFTSywK KwkJflVWRF9KTUlfQ05UTF9fU09GVF9SRVNFVF9NQVNLKTsKKworCS8qIGVuYWJsZSBKUEVHIENH QyAqLworCWpwZWdfdjJfMF9lbmFibGVfY2xvY2tfZ2F0aW5nKGFkZXYpOworCisJLyogZW5hYmxl IHBvd2VyIGdhdGluZyAqLworCXIgPSBqcGVnX3YyXzBfZW5hYmxlX3Bvd2VyX2dhdGluZyhhZGV2 KTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19nZXRfcnB0 ciAtIGdldCByZWFkIHBvaW50ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgor ICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcmVhZCBwb2ludGVyCisgKi8KK3N0 YXRpYyB1aW50NjRfdCBqcGVnX3YyXzBfZGVjX3JpbmdfZ2V0X3JwdHIoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsK KworCXJldHVybiBSUkVHMzJfU09DMTUoSlBFRywgMCwgbW1VVkRfSlJCQ19SQl9SUFRSKTsKK30K KworLyoqCisgKiBqcGVnX3YyXzBfZGVjX3JpbmdfZ2V0X3dwdHIgLSBnZXQgd3JpdGUgcG9pbnRl cgorICoKKyAqIEByaW5nOiBhbWRncHVfcmluZyBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUg Y3VycmVudCBoYXJkd2FyZSB3cml0ZSBwb2ludGVyCisgKi8KK3N0YXRpYyB1aW50NjRfdCBqcGVn X3YyXzBfZGVjX3JpbmdfZ2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKworCWlmIChyaW5nLT51c2Vf ZG9vcmJlbGwpCisJCXJldHVybiBhZGV2LT53Yi53YltyaW5nLT53cHRyX29mZnNdOworCWVsc2UK KwkJcmV0dXJuIFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1JCX1dQVFIpOworfQor CisvKioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19zZXRfd3B0ciAtIHNldCB3cml0ZSBwb2ludGVy CisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKKyAqCisgKiBDb21taXRzIHRoZSB3 cml0ZSBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZQorICovCitzdGF0aWMgdm9pZCBqcGVnX3YyXzBf ZGVjX3Jpbmdfc2V0X3dwdHIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKQoreworCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKworCWlmIChyaW5nLT51c2VfZG9vcmJl bGwpIHsKKwkJYWRldi0+d2Iud2JbcmluZy0+d3B0cl9vZmZzXSA9IGxvd2VyXzMyX2JpdHMocmlu Zy0+d3B0cik7CisJCVdET09SQkVMTDMyKHJpbmctPmRvb3JiZWxsX2luZGV4LCBsb3dlcl8zMl9i aXRzKHJpbmctPndwdHIpKTsKKwl9IGVsc2UgeworCQlXUkVHMzJfU09DMTUoSlBFRywgMCwgbW1V VkRfSlJCQ19SQl9XUFRSLCBsb3dlcl8zMl9iaXRzKHJpbmctPndwdHIpKTsKKwl9Cit9CisKKy8q KgorICoganBlZ192Ml8wX2RlY19yaW5nX2luc2VydF9zdGFydCAtIGluc2VydCBhIHN0YXJ0IGNv bW1hbmQKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdyaXRlIGEg c3RhcnQgY29tbWFuZCB0byB0aGUgcmluZy4KKyAqLwordm9pZCBqcGVnX3YyXzBfZGVjX3Jpbmdf aW5zZXJ0X3N0YXJ0KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKK3sKKwlhbWRncHVfcmluZ193 cml0ZShyaW5nLCBQQUNLRVRKKG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0lOVEVSTkFMX09GRlNF VCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4 NjhlMDQpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSihKUkJDX0RFQ19FWFRF Uk5BTF9SRUdfV1JJVEVfQUREUiwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIDB4ODAwMTAwMDApOworfQorCisvKioKKyAqIGpwZWdfdjJfMF9kZWNf cmluZ19pbnNlcnRfZW5kIC0gaW5zZXJ0IGEgZW5kIGNvbW1hbmQKKyAqCisgKiBAcmluZzogYW1k Z3B1X3JpbmcgcG9pbnRlcgorICoKKyAqIFdyaXRlIGEgZW5kIGNvbW1hbmQgdG8gdGhlIHJpbmcu CisgKi8KK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX2luc2VydF9lbmQoc3RydWN0IGFtZGdwdV9y aW5nICpyaW5nKQoreworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJC Q19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7 CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHg2OGUwNCk7CisKKwlhbWRncHVfcmluZ193cml0 ZShyaW5nLCBQQUNLRVRKKEpSQkNfREVDX0VYVEVSTkFMX1JFR19XUklURV9BRERSLAorCQkwLCAw LCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgwMDAxMDAwMCk7 Cit9CisKKy8qKgorICoganBlZ192Ml8wX2RlY19yaW5nX2VtaXRfZmVuY2UgLSBlbWl0IGFuIGZl bmNlICYgdHJhcCBjb21tYW5kCisgKgorICogQHJpbmc6IGFtZGdwdV9yaW5nIHBvaW50ZXIKKyAq IEBmZW5jZTogZmVuY2UgdG8gZW1pdAorICoKKyAqIFdyaXRlIGEgZmVuY2UgYW5kIGEgdHJhcCBj b21tYW5kIHRvIHRoZSByaW5nLgorICovCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2Zl bmNlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywgdTY0IGFkZHIsIHU2NCBzZXEsCisJCQkJdW5z aWduZWQgZmxhZ3MpCit7CisJV0FSTl9PTihmbGFncyAmIEFNREdQVV9GRU5DRV9GTEFHXzY0QklU KTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlBFR19HUENPTV9E QVRBMF9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCBzZXEpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywJUEFDS0VU SihtbVVWRF9KUEVHX0dQQ09NX0RBVEExX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VU Sl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHNlcSk7CisKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0xNSV9KUkJDX1JCX01FTV9XUl82NEJJVF9CQVJf TE9XX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9y aW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMoYWRkcikpOworCisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywJUEFDS0VUSihtbVVWRF9MTUlfSlJCQ19SQl9NRU1fV1JfNjRCSVRfQkFSX0hJR0hf SU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdf d3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhhZGRyKSk7CisKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLAlQQUNLRVRKKG1tVVZEX0pQRUdfR1BDT01fQ01EX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwg MCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisKKwlh bWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0pQRUdfR1BDT01fQ01EX0lOVEVS TkFMX09GRlNFVCwKKwkJMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0swLCBQQUNLRVRKX1RZUEU0 KSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShy aW5nLAlQQUNLRVRKKG1tVVZEX0pSQkNfRVhURVJOQUxfUkVHX0lOVEVSTkFMX09GRlNFVCwKKwkJ MCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4M2ZiYyk7 CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVRKKEpSQkNfREVDX0VYVEVSTkFMX1JF R19XUklURV9BRERSLAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3Jp dGUocmluZywgMHgxKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwg MCwgUEFDS0VUSl9UWVBFNykpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDApOworfQorCisv KioKKyAqIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2liIC0gZXhlY3V0ZSBpbmRpcmVjdCBidWZm ZXIKKyAqCisgKiBAcmluZzogYW1kZ3B1X3JpbmcgcG9pbnRlcgorICogQGliOiBpbmRpcmVjdCBi dWZmZXIgdG8gZXhlY3V0ZQorICoKKyAqIFdyaXRlIHJpbmcgY29tbWFuZHMgdG8gZXhlY3V0ZSB0 aGUgaW5kaXJlY3QgYnVmZmVyLgorICovCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X2li KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJCQlzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iLAor CQkJCXN0cnVjdCBhbWRncHVfaWIgKmliLAorCQkJCXVpbnQzMl90IGZsYWdzKQoreworCXVuc2ln bmVkIHZtaWQgPSBBTURHUFVfSk9CX0dFVF9WTUlEKGpvYik7CisKKwlhbWRncHVfcmluZ193cml0 ZShyaW5nLCBQQUNLRVRKKG1tVVZEX0xNSV9KUkJDX0lCX1ZNSURfSU5URVJOQUxfT0ZGU0VULAor CQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgKHZtaWQg fCAodm1pZCA8PCA0KSkpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUSihtbVVW RF9MTUlfSlBFR19WTUlEX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwgUEFDS0VUSl9UWVBFMCkp OworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsICh2bWlkIHwgKHZtaWQgPDwgNCkpKTsKKworCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1VVkRfTE1JX0pSQkNfSUJfNjRCSVRfQkFS X0xPV19JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVf cmluZ193cml0ZShyaW5nLCBsb3dlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikpOworCisJYW1kZ3B1 X3Jpbmdfd3JpdGUocmluZywJUEFDS0VUSihtbVVWRF9MTUlfSlJCQ19JQl82NEJJVF9CQVJfSElH SF9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywJUEFDS0VUSihtbVVWRF9KUkJDX0lCX1NJWkVfSU5URVJOQUxfT0ZGU0VU LAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgaWIt Pmxlbmd0aF9kdyk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1tVVZEX0xN SV9KUkJDX1JCX01FTV9SRF82NEJJVF9CQVJfTE9XX0lOVEVSTkFMX09GRlNFVCwKKwkJMCwgMCwg UEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIGxvd2VyXzMyX2JpdHMo cmluZy0+Z3B1X2FkZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1V VkRfTE1JX0pSQkNfUkJfTUVNX1JEXzY0QklUX0JBUl9ISUdIX0lOVEVSTkFMX09GRlNFVCwKKwkJ MCwgMCwgUEFDS0VUSl9UWVBFMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMy X2JpdHMocmluZy0+Z3B1X2FkZHIpKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tF VEooMCwgMCwgUEFDS0VUSl9DT05ESVRJT05fQ0hFQ0swLCBQQUNLRVRKX1RZUEUyKSk7CisJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNL RVRKKG1tVVZEX0pSQkNfUkJfQ09ORF9SRF9USU1FUl9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAs IFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCAweDAxNDAwMjAwKTsK KworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJCQ19SQl9SRUZfREFU QV9JTlRFUk5BTF9PRkZTRVQsCisJCTAsIDAsIFBBQ0tFVEpfVFlQRTApKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCAweDIpOworCisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywJUEFDS0VUSiht bVVWRF9KUkJDX1NUQVRVU19JTlRFUk5BTF9PRkZTRVQsCisJCTAsIFBBQ0tFVEpfQ09ORElUSU9O X0NIRUNLMywgUEFDS0VUSl9UWVBFMykpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4Mik7 Cit9CisKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX2VtaXRfcmVnX3dhaXQoc3RydWN0IGFtZGdw dV9yaW5nICpyaW5nLCB1aW50MzJfdCByZWcsCisJCQkJdWludDMyX3QgdmFsLCB1aW50MzJfdCBt YXNrKQoreworCXVpbnQzMl90IHJlZ19vZmZzZXQgPSAocmVnIDw8IDIpOworCisJYW1kZ3B1X3Jp bmdfd3JpdGUocmluZywgUEFDS0VUSihtbVVWRF9KUkJDX1JCX0NPTkRfUkRfVElNRVJfSU5URVJO QUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHgwMTQwMDIwMCk7CisKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLAlQQUNLRVRKKG1t VVZEX0pSQkNfUkJfUkVGX0RBVEFfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdmFsKTsKKworCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIFBBQ0tFVEoobW1VVkRfSlJCQ19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VU LAorCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJaWYgKHJlZ19vZmZzZXQgPj0gMHgxMDAwMCAm JiByZWdfb2Zmc2V0IDw9IDB4MTA1ZmYpIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCisJCQlQQUNLRVRKKChyZWdfb2Zmc2V0ID4+IDIp LCAwLCAwLCBQQUNLRVRKX1RZUEUzKSk7CisJfSBlbHNlIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgcmVnX29mZnNldCk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEooSlJC Q19ERUNfRVhURVJOQUxfUkVHX1dSSVRFX0FERFIsCisJCQkwLCAwLCBQQUNLRVRKX1RZUEUzKSk7 CisJfQorCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1hc2spOworfQorCit2b2lkIGpwZWdfdjJf MF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJCQl1 bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKQoreworCXN0cnVjdCBhbWRncHVfdm1odWIg Kmh1YiA9ICZyaW5nLT5hZGV2LT52bWh1YltyaW5nLT5mdW5jcy0+dm1odWJdOworCXVpbnQzMl90 IGRhdGEwLCBkYXRhMSwgbWFzazsKKworCXBkX2FkZHIgPSBhbWRncHVfZ21jX2VtaXRfZmx1c2hf Z3B1X3RsYihyaW5nLCB2bWlkLCBwZF9hZGRyKTsKKworCS8qIHdhaXQgZm9yIHJlZ2lzdGVyIHdy aXRlICovCisJZGF0YTAgPSBodWItPmN0eDBfcHRiX2FkZHJfbG8zMiArIHZtaWQgKiAyOworCWRh dGExID0gbG93ZXJfMzJfYml0cyhwZF9hZGRyKTsKKwltYXNrID0gMHhmZmZmZmZmZjsKKwlqcGVn X3YyXzBfZGVjX3JpbmdfZW1pdF9yZWdfd2FpdChyaW5nLCBkYXRhMCwgZGF0YTEsIG1hc2spOwor fQorCit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3dyZWcoc3RydWN0IGFtZGdwdV9yaW5n ICpyaW5nLCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwl1aW50MzJfdCByZWdfb2Zm c2V0ID0gKHJlZyA8PCAyKTsKKworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEoobW1V VkRfSlJCQ19FWFRFUk5BTF9SRUdfSU5URVJOQUxfT0ZGU0VULAorCQkwLCAwLCBQQUNLRVRKX1RZ UEUwKSk7CisJaWYgKHJlZ19vZmZzZXQgPj0gMHgxMDAwMCAmJiByZWdfb2Zmc2V0IDw9IDB4MTA1 ZmYpIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMCk7CisJCWFtZGdwdV9yaW5nX3dyaXRl KHJpbmcsCisJCQlQQUNLRVRKKChyZWdfb2Zmc2V0ID4+IDIpLCAwLCAwLCBQQUNLRVRKX1RZUEUw KSk7CisJfSBlbHNlIHsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgcmVnX29mZnNldCk7CisJ CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsCVBBQ0tFVEooSlJCQ19ERUNfRVhURVJOQUxfUkVHX1dS SVRFX0FERFIsCisJCQkwLCAwLCBQQUNLRVRKX1RZUEUwKSk7CisJfQorCWFtZGdwdV9yaW5nX3dy aXRlKHJpbmcsIHZhbCk7Cit9CisKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX25vcChzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IGNvdW50KQoreworCWludCBpOworCisJV0FSTl9P TihyaW5nLT53cHRyICUgMiB8fCBjb3VudCAlIDIpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50 IC8gMjsgaSsrKSB7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVEooMCwgMCwgMCwg UEFDS0VUSl9UWVBFNikpOworCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCAwKTsKKwl9Cit9CisK K3N0YXRpYyBib29sIGpwZWdfdjJfMF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKwor CXJldHVybiAoKFJSRUczMl9TT0MxNShKUEVHLCAwLCBtbVVWRF9KUkJDX1NUQVRVUykgJgorCQlV VkRfSlJCQ19TVEFUVVNfX1JCX0pPQl9ET05FX01BU0spID09CisJCVVWRF9KUkJDX1NUQVRVU19f UkJfSk9CX0RPTkVfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX3dhaXRfZm9yX2lk bGUodm9pZCAqaGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVj dCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCWludCByZXQgPSAwOworCisJU09DMTVfV0FJVF9P Tl9SUkVHKEpQRUcsIDAsIG1tVVZEX0pSQkNfU1RBVFVTLCBVVkRfSlJCQ19TVEFUVVNfX1JCX0pP Ql9ET05FX01BU0ssCisJCVVWRF9KUkJDX1NUQVRVU19fUkJfSk9CX0RPTkVfTUFTSywgcmV0KTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQganBlZ192Ml8wX3NldF9jbG9ja2dhdGlu Z19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJCSAgZW51bSBhbWRfY2xvY2tnYXRpbmdfc3RhdGUg c3RhdGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKiloYW5kbGU7CisJYm9vbCBlbmFibGUgPSAoc3RhdGUgPT0gQU1EX0NHX1NUQVRFX0dB VEUpID8gdHJ1ZSA6IGZhbHNlOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAoanBlZ192Ml8wX2lz X2lkbGUoaGFuZGxlKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWpwZWdfdjJfMF9lbmFibGVfY2xv Y2tfZ2F0aW5nKGFkZXYpOworCX0gZWxzZSB7CisJCWpwZWdfdjJfMF9kaXNhYmxlX2Nsb2NrX2dh dGluZyhhZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqcGVnX3YyXzBf c2V0X3Bvd2VyZ2F0aW5nX3N0YXRlKHZvaWQgKmhhbmRsZSwKKwkJCQkJZW51bSBhbWRfcG93ZXJn YXRpbmdfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CisJaW50IHJldDsKKworCWlmIChzdGF0ZSA9PSBh ZGV2LT5qcGVnLmN1cl9zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdGUgPT0gQU1EX1BH X1NUQVRFX0dBVEUpCisJCXJldCA9IGpwZWdfdjJfMF9zdG9wKGFkZXYpOworCWVsc2UKKwkJcmV0 ID0ganBlZ192Ml8wX3N0YXJ0KGFkZXYpOworCisJaWYgKCFyZXQpCisJCWFkZXYtPmpwZWcuY3Vy X3N0YXRlID0gc3RhdGU7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGpwZWdfdjJf MF9zZXRfaW50ZXJydXB0X3N0YXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCQlz dHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNvdXJjZSwKKwkJCQkJdW5zaWduZWQgdHlwZSwKKwkJCQkJ ZW51bSBhbWRncHVfaW50ZXJydXB0X3N0YXRlIHN0YXRlKQoreworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGpwZWdfdjJfMF9wcm9jZXNzX2ludGVycnVwdChzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKKwkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMgKnNvdXJjZSwKKwkJCQkg ICAgICBzdHJ1Y3QgYW1kZ3B1X2l2X2VudHJ5ICplbnRyeSkKK3sKKwlEUk1fREVCVUcoIklIOiBK UEVHIFRSQVBcbiIpOworCisJc3dpdGNoIChlbnRyeS0+c3JjX2lkKSB7CisJY2FzZSBWQ05fMl8w X19TUkNJRF9fSlBFR19ERUNPREU6CisJCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2LT5qcGVn Lmluc3QtPnJpbmdfZGVjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbmhh bmRsZWQgaW50ZXJydXB0OiAlZCAlZFxuIiwKKwkJCSAgZW50cnktPnNyY19pZCwgZW50cnktPnNy Y19kYXRhWzBdKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzIGpwZWdfdjJfMF9pcF9mdW5jcyA9IHsKKwkubmFtZSA9ICJq cGVnX3YyXzAiLAorCS5lYXJseV9pbml0ID0ganBlZ192Ml8wX2Vhcmx5X2luaXQsCisJLmxhdGVf aW5pdCA9IE5VTEwsCisJLnN3X2luaXQgPSBqcGVnX3YyXzBfc3dfaW5pdCwKKwkuc3dfZmluaSA9 IGpwZWdfdjJfMF9zd19maW5pLAorCS5od19pbml0ID0ganBlZ192Ml8wX2h3X2luaXQsCisJLmh3 X2ZpbmkgPSBqcGVnX3YyXzBfaHdfZmluaSwKKwkuc3VzcGVuZCA9IGpwZWdfdjJfMF9zdXNwZW5k LAorCS5yZXN1bWUgPSBqcGVnX3YyXzBfcmVzdW1lLAorCS5pc19pZGxlID0ganBlZ192Ml8wX2lz X2lkbGUsCisJLndhaXRfZm9yX2lkbGUgPSBqcGVnX3YyXzBfd2FpdF9mb3JfaWRsZSwKKwkuY2hl Y2tfc29mdF9yZXNldCA9IE5VTEwsCisJLnByZV9zb2Z0X3Jlc2V0ID0gTlVMTCwKKwkuc29mdF9y ZXNldCA9IE5VTEwsCisJLnBvc3Rfc29mdF9yZXNldCA9IE5VTEwsCisJLnNldF9jbG9ja2dhdGlu Z19zdGF0ZSA9IGpwZWdfdjJfMF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUsCisJLnNldF9wb3dlcmdh dGluZ19zdGF0ZSA9IGpwZWdfdjJfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGpwZWdfdjJfMF9kZWNfcmluZ192bV9m dW5jcyA9IHsKKwkudHlwZSA9IEFNREdQVV9SSU5HX1RZUEVfVkNOX0pQRUcsCisJLmFsaWduX21h c2sgPSAweGYsCisJLnZtaHViID0gQU1ER1BVX01NSFVCXzAsCisJLmdldF9ycHRyID0ganBlZ192 Ml8wX2RlY19yaW5nX2dldF9ycHRyLAorCS5nZXRfd3B0ciA9IGpwZWdfdjJfMF9kZWNfcmluZ19n ZXRfd3B0ciwKKwkuc2V0X3dwdHIgPSBqcGVnX3YyXzBfZGVjX3Jpbmdfc2V0X3dwdHIsCisJLmVt aXRfZnJhbWVfc2l6ZSA9CisJCVNPQzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1dSRUcgKiA2ICsKKwkJ U09DMTVfRkxVU0hfR1BVX1RMQl9OVU1fUkVHX1dBSVQgKiA4ICsKKwkJOCArIC8qIGpwZWdfdjJf MF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoICovCisJCTE4ICsgMTggKyAvKiBqcGVnX3YyXzBfZGVj X3JpbmdfZW1pdF9mZW5jZSB4MiB2bSBmZW5jZSAqLworCQk4ICsgMTYsCisJLmVtaXRfaWJfc2l6 ZSA9IDIyLCAvKiBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9pYiAqLworCS5lbWl0X2liID0ganBl Z192Ml8wX2RlY19yaW5nX2VtaXRfaWIsCisJLmVtaXRfZmVuY2UgPSBqcGVnX3YyXzBfZGVjX3Jp bmdfZW1pdF9mZW5jZSwKKwkuZW1pdF92bV9mbHVzaCA9IGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0 X3ZtX2ZsdXNoLAorCS50ZXN0X3JpbmcgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X3Jpbmcs CisJLnRlc3RfaWIgPSBhbWRncHVfanBlZ19kZWNfcmluZ190ZXN0X2liLAorCS5pbnNlcnRfbm9w ID0ganBlZ192Ml8wX2RlY19yaW5nX25vcCwKKwkuaW5zZXJ0X3N0YXJ0ID0ganBlZ192Ml8wX2Rl Y19yaW5nX2luc2VydF9zdGFydCwKKwkuaW5zZXJ0X2VuZCA9IGpwZWdfdjJfMF9kZWNfcmluZ19p bnNlcnRfZW5kLAorCS5wYWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3BhZF9pYiwKKwkuYmVn aW5fdXNlID0gYW1kZ3B1X2pwZWdfcmluZ19iZWdpbl91c2UsCisJLmVuZF91c2UgPSBhbWRncHVf anBlZ19yaW5nX2VuZF91c2UsCisJLmVtaXRfd3JlZyA9IGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0 X3dyZWcsCisJLmVtaXRfcmVnX3dhaXQgPSBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9yZWdfd2Fp dCwKKwkuZW1pdF9yZWdfd3JpdGVfcmVnX3dhaXQgPSBhbWRncHVfcmluZ19lbWl0X3JlZ193cml0 ZV9yZWdfd2FpdF9oZWxwZXIsCit9OworCitzdGF0aWMgdm9pZCBqcGVnX3YyXzBfc2V0X2RlY19y aW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCWFkZXYtPmpwZWcuaW5z dC0+cmluZ19kZWMuZnVuY3MgPSAmanBlZ192Ml8wX2RlY19yaW5nX3ZtX2Z1bmNzOworCURSTV9J TkZPKCJKUEVHIGRlY29kZSBpcyBlbmFibGVkIGluIFZNIG1vZGVcbiIpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGFtZGdwdV9pcnFfc3JjX2Z1bmNzIGpwZWdfdjJfMF9pcnFfZnVuY3MgPSB7 CisJLnNldCA9IGpwZWdfdjJfMF9zZXRfaW50ZXJydXB0X3N0YXRlLAorCS5wcm9jZXNzID0ganBl Z192Ml8wX3Byb2Nlc3NfaW50ZXJydXB0LAorfTsKKworc3RhdGljIHZvaWQganBlZ192Ml8wX3Nl dF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJYWRldi0+anBlZy5p bnN0LT5pcnEubnVtX3R5cGVzID0gMTsKKwlhZGV2LT5qcGVnLmluc3QtPmlycS5mdW5jcyA9ICZq cGVnX3YyXzBfaXJxX2Z1bmNzOworfQorCitjb25zdCBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrX3Zl cnNpb24ganBlZ192Ml8wX2lwX2Jsb2NrID0KK3sKKwkJLnR5cGUgPSBBTURfSVBfQkxPQ0tfVFlQ RV9KUEVHLAorCQkubWFqb3IgPSAyLAorCQkubWlub3IgPSAwLAorCQkucmV2ID0gMCwKKwkJLmZ1 bmNzID0gJmpwZWdfdjJfMF9pcF9mdW5jcywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9qcGVnX3YyXzAuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2pw ZWdfdjJfMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTVhMzQ0 ZWQzNDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvanBl Z192Ml8wLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2Vk IE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBf X0pQRUdfVjJfMF9IX18KKyNkZWZpbmUgX19KUEVHX1YyXzBfSF9fCisKK3ZvaWQganBlZ192Ml8w X2RlY19yaW5nX2luc2VydF9zdGFydChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpOwordm9pZCBq cGVnX3YyXzBfZGVjX3JpbmdfaW5zZXJ0X2VuZChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpOwor dm9pZCBqcGVnX3YyXzBfZGVjX3JpbmdfZW1pdF9mZW5jZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcsIHU2NCBhZGRyLCB1NjQgc2VxLAorCQkJCXVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQganBlZ192 Ml8wX2RlY19yaW5nX2VtaXRfaWIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLCBzdHJ1Y3QgYW1k Z3B1X2pvYiAqam9iLAorCQkJCXN0cnVjdCBhbWRncHVfaWIgKmliLCB1aW50MzJfdCBmbGFncyk7 Cit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3JlZ193YWl0KHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywgdWludDMyX3QgcmVnLAorCQkJCXVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzayk7 Cit2b2lkIGpwZWdfdjJfMF9kZWNfcmluZ19lbWl0X3ZtX2ZsdXNoKHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywKKwkJCQl1bnNpZ25lZCB2bWlkLCB1aW50NjRfdCBwZF9hZGRyKTsKK3ZvaWQganBl Z192Ml8wX2RlY19yaW5nX2VtaXRfd3JlZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQz Ml90IHJlZywgdWludDMyX3QgdmFsKTsKK3ZvaWQganBlZ192Ml8wX2RlY19yaW5nX25vcChzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IGNvdW50KTsKKworZXh0ZXJuIGNvbnN0IHN0 cnVjdCBhbWRncHVfaXBfYmxvY2tfdmVyc2lvbiBqcGVnX3YyXzBfaXBfYmxvY2s7CisKKyNlbmRp ZiAvKiBfX0pQRUdfVjJfMF9IX18gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9hbWQtZ2Z4