From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/2] Embedded USB Debugger (EUD) driver From: Prakruthi Deepak Heragu Message-Id: <1536096853-30473-3-git-send-email-pheragu@codeaurora.org> Date: Tue, 4 Sep 2018 14:34:13 -0700 To: linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org, ckadabi@codeaurora.org, tsoni@codeaurora.org, rnayak@codeaurora.org, bryanh@codeaurora.org, psodagud@codeaurora.org, Prakruthi Deepak Heragu , Satya Durga Srinivasu Prabhala List-ID: QWRkIHN1cHBvcnQgZm9yIGNvbnRyb2wgcGVyaXBoZXJhbCBvZiBFVUQgKEVtYmVkZGVkIFVTQiBE ZWJ1Z2dlcikgdG8KbGlzdGVuIHRvIGV2ZW50cyBzdWNoIGFzIFVTQiBhdHRhY2gvZGV0YWNoLCBj aGFyZ2VyIGVuYWJsZS9kaXNhYmxlLCBwZXQKRVVEIHRvIGluZGljYXRlIHNvZnR3YXJlIGlzIGZ1 bmN0aW9uYWwuCgpTaWduZWQtb2ZmLWJ5OiBTYXR5YSBEdXJnYSBTcmluaXZhc3UgUHJhYmhhbGEg PHNhdHlhcEBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogUHJha3J1dGhpIERlZXBhayBI ZXJhZ3UgPHBoZXJhZ3VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9zb2MvcWNvbS9LY29u ZmlnICB8ICAxMiArKwogZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZSB8ICAgMSArCiBkcml2ZXJz L3NvYy9xY29tL2V1ZC5jICAgIHwgMzM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzUxIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9xY29tL2V1ZC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zb2MvcWNvbS9LY29uZmlnIGIvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnCmluZGV4IDU4NTZl NzkuLjEyNjY5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZpZworKysgYi9k cml2ZXJzL3NvYy9xY29tL0tjb25maWcKQEAgLTEzNiw0ICsxMzYsMTYgQEAgY29uZmlnIFFDT01f QVBSCiAgICAgICAgICAgYXBwbGljYXRpb24gcHJvY2Vzc29yIGFuZCBRRFNQNi4gQVBSIGlzCiAg ICAgICAgICAgdXNlZCBieSBhdWRpbyBkcml2ZXIgdG8gY29uZmlndXJlIFFEU1A2CiAgICAgICAg ICAgQVNNLCBBRE0gYW5kIEFGRSBtb2R1bGVzLgorCitjb25maWcgUUNPTV9FVUQKKwl0cmlzdGF0 ZSAiUVRJIEVtYmVkZGVkIFVTQiBEZWJ1Z2dlciAoRVVEKSIKKwlkZXBlbmRzIG9uIEFSQ0hfUUNP TQorCWhlbHAKKwkgIFRoZSBFbWJlZGRlZCBVU0IgRGVidWdnZXIgKEVVRCkgZHJpdmVyIGlzIGEg ZHJpdmVyIGZvciB0aGUKKwkgIGNvbnRyb2wgcGVyaXBoZXJhbCB3aGljaCB3YWl0cyBvbiBldmVu dHMgbGlrZSBVU0IgYXR0YWNoL2RldGFjaAorCSAgYW5kIGNoYXJnZXIgZW5hYmxlL2Rpc2FibGUu IFRoZSBjb250cm9sIHBlcmlwaGVyYWwgZnVydGhlciBoZWxwcworCSAgc3VwcG9ydCB0aGUgVVNC LWJhc2VkIGRlYnVnIGFuZCB0cmFjZSBjYXBhYmlsaXRpZXMuCisJICBUaGlzIG1vZHVsZSBlbmFi bGVzIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLgorCSAgRW1iZWRkZWQg VVNCIERlYnVnZ2VyIChFVUQpLgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KIGVuZG1lbnUKZGlmZiAt LWdpdCBhL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9xY29tL01ha2Vm aWxlCmluZGV4IDE5ZGNmOTUuLmRkNDcwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3Fjb20v TWFrZWZpbGUKKysrIGIvZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZQpAQCAtMTUsMyArMTUsNCBA QCBvYmotJChDT05GSUdfUUNPTV9TTVAyUCkJKz0gc21wMnAubwogb2JqLSQoQ09ORklHX1FDT01f U01TTSkJKz0gc21zbS5vCiBvYmotJChDT05GSUdfUUNPTV9XQ05TU19DVFJMKSArPSB3Y25zc19j dHJsLm8KIG9iai0kKENPTkZJR19RQ09NX0FQUikgKz0gYXByLm8KK29iai0kKENPTkZJR19RQ09N X0VVRCkgKz0gZXVkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3Fjb20vZXVkLmMgYi9kcml2 ZXJzL3NvYy9xY29tL2V1ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2 YTBlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NvYy9xY29tL2V1ZC5jCkBAIC0wLDAg KzEsMzM4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPgorI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5o PgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o PgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorCisjZGVmaW5lIEVVRF9FTkFCTEVf Q01EIDEKKyNkZWZpbmUgRVVEX0RJU0FCTEVfQ01EIDAKKworI2RlZmluZSBFVURfUkVHX0lOVDFf RU5fTUFTSwkweDAwMjQKKyNkZWZpbmUgRVVEX1JFR19JTlRfU1RBVFVTXzEJMHgwMDQ0CisjZGVm aW5lIEVVRF9SRUdfQ1RMX09VVF8xCTB4MDA3NAorI2RlZmluZSBFVURfUkVHX1ZCVVNfSU5UX0NM UgkweDAwODAKKyNkZWZpbmUgRVVEX1JFR19DSEdSX0lOVF9DTFIJMHgwMDg0CisjZGVmaW5lIEVV RF9SRUdfQ1NSX0VVRF9FTgkweDEwMTQKKyNkZWZpbmUgRVVEX1JFR19TV19BVFRBQ0hfREVUCTB4 MTAxOAorCisjZGVmaW5lIEVVRF9JTlRfVkJVUwkJQklUKDIpCisjZGVmaW5lIEVVRF9JTlRfQ0hH UgkJQklUKDMpCisjZGVmaW5lIEVVRF9JTlRfU0FGRV9NT0RFCUJJVCg0KQorCitzdHJ1Y3QgZXVk X2NoaXAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCWludAkJCQlldWRfaXJxOworCXVuc2ln bmVkIGludAkJCWV4dGNvbl9pZDsKKwl1bnNpZ25lZCBpbnQJCQlpbnRfc3RhdHVzOworCWJvb2wJ CQkJdXNiX2F0dGFjaDsKKwlib29sCQkJCWNoZ3JfZW5hYmxlOworCXZvaWQgX19pb21lbQkJCSpl dWRfcmVnX2Jhc2U7CisJc3RydWN0IGV4dGNvbl9kZXYJCSpleHRjb247CisJc3RydWN0IHdvcmtf c3RydWN0CQlldWRfd29yazsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXVkX2V4 dGNvbl9jYWJsZVtdID0geworCUVYVENPTl9VU0IsCisJRVhUQ09OX0NIR19VU0JfU0RQLAorCUVY VENPTl9OT05FLAorfTsKKworLyoKKyAqIE9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHNwZWNp ZnkgZXVkLmVuYWJsZT0xIHRvIGVuYWJsZSBFVUQuCisgKiBFVUQgaXMgZGlzYWJsZWQgYnkgZGVm YXVsdC4KKyAqLworc3RhdGljIGludCBlbmFibGU7CitzdGF0aWMgYm9vbCBldWRfcmVhZHk7Citz dGF0aWMgc3RydWN0IGV1ZF9jaGlwICpldWRfcHJpdmF0ZTsKKworc3RhdGljIHZvaWQgZW5hYmxl X2V1ZChzdHJ1Y3QgZXVkX2NoaXAgKnByaXYpCit7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqdXNi X3BzeSA9IE5VTEw7CisJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgcHZhbCA9IHswfTsKKwl1 bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCB0dmFsID0gezB9OworCWludCByZXQ7CisKKwl1c2Jf cHN5ID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKCJ1c2IiKTsKKwlpZiAoIXVzYl9wc3kpCisJ CXJldHVybjsKKworCXJldCA9IHBvd2VyX3N1cHBseV9nZXRfcHJvcGVydHkodXNiX3BzeSwKKwkJ CVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsICZwdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm47 CisKKwlyZXQgPSBwb3dlcl9zdXBwbHlfZ2V0X3Byb3BlcnR5KHVzYl9wc3ksCisJCQlQT1dFUl9T VVBQTFlfUFJPUF9SRUFMX1RZUEUsICZ0dmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlp ZiAocHZhbC5pbnR2YWwgJiYgKHR2YWwuaW50dmFsID09IFBPV0VSX1NVUFBMWV9UWVBFX1VTQiB8 fAorCSAgICB0dmFsLmludHZhbCA9PSBQT1dFUl9TVVBQTFlfVFlQRV9VU0JfQ0RQKSkgeworCQkv KiB3cml0ZSBpbnRvIENTUiB0byBlbmFibGUgRVVEICovCisJCXdyaXRlbF9yZWxheGVkKEJJVCgw KSwgcHJpdi0+ZXVkX3JlZ19iYXNlICsgRVVEX1JFR19DU1JfRVVEX0VOKTsKKwkJLyogRW5hYmxl IHZidXMsIGNoZ3IgJiBzYWZlIG1vZGUgd2FybmluZyBpbnRlcnJ1cHRzICovCisJCXdyaXRlbF9y ZWxheGVkKEVVRF9JTlRfVkJVUyB8IEVVRF9JTlRfQ0hHUiB8IEVVRF9JTlRfU0FGRV9NT0RFLAor CQkJCXByaXYtPmV1ZF9yZWdfYmFzZSArIEVVRF9SRUdfSU5UMV9FTl9NQVNLKTsKKworCQkvKiBF bnN1cmUgUmVnaXN0ZXIgV3JpdGVzIENvbXBsZXRlICovCisJCXdtYigpOworCisJCS8qCisJCSAq IFNldCB0aGUgZGVmYXVsdCBjYWJsZSBzdGF0ZSB0byB1c2IgY29ubmVjdCBhbmQgY2hhcmdlcgor CQkgKiBlbmFibGUKKwkJICovCisJCXJldCA9IGV4dGNvbl9zZXRfc3RhdGVfc3luYyhwcml2LT5l eHRjb24sIEVYVENPTl9VU0IsIHRydWUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuOworCQlyZXQg PSBleHRjb25fc2V0X3N0YXRlX3N5bmMocHJpdi0+ZXh0Y29uLAorCQkJCUVYVENPTl9DSEdfVVNC X1NEUCwgdHJ1ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJcmV0dXJu OworCX0KKworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2V1ZChzdHJ1Y3QgZXVkX2NoaXAgKnBy aXYpCit7CisJLyogd3JpdGUgaW50byBDU1IgdG8gZGlzYWJsZSBFVUQgKi8KKwl3cml0ZWxfcmVs YXhlZCgwLCBwcml2LT5ldWRfcmVnX2Jhc2UgKyBFVURfUkVHX0NTUl9FVURfRU4pOworfQorCitz dGF0aWMgaW50IHBhcmFtX2V1ZF9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2Vy bmVsX3BhcmFtICprcCkKK3sKKwlpbnQgZW5hYmxlID0gMDsKKworCWlmIChzc2NhbmYodmFsLCAi JWR1IiwgJmVuYWJsZSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxlICE9 IEVVRF9FTkFCTEVfQ01EICYmIGVuYWJsZSAhPSBFVURfRElTQUJMRV9DTUQpCisJCXJldHVybiAt RUlOVkFMOworCisJKigodWludCAqKWtwLT5hcmcpID0gZW5hYmxlOworCWlmICghZXVkX3JlYWR5 KQorCQlyZXR1cm4gMDsKKworCWlmIChlbmFibGUgPT0gRVVEX0VOQUJMRV9DTUQpCisJCWVuYWJs ZV9ldWQoZXVkX3ByaXZhdGUpOworCWVsc2UgaWYgKGVuYWJsZSA9PSBFVURfRElTQUJMRV9DTUQp CisJCWRpc2FibGVfZXVkKGV1ZF9wcml2YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgZXVkX3BhcmFtX29wcyA9IHsKKwkuc2V0ID0g cGFyYW1fZXVkX3NldCwKKwkuZ2V0ID0gcGFyYW1fZ2V0X2ludCwKK307CisKK21vZHVsZV9wYXJh bV9jYihlbmFibGUsICZldWRfcGFyYW1fb3BzLCAmZW5hYmxlLCAwNjQ0KTsKKworc3RhdGljIHZv aWQgZXVkX2V2ZW50X25vdGlmaWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZXVkX3dvcmspCit7CisJ c3RydWN0IGV1ZF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGV1ZF93b3JrLCBzdHJ1Y3QgZXVk X2NoaXAsCisJCQkJCWV1ZF93b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKGNoaXAtPmludF9zdGF0 dXMgPT0gRVVEX0lOVF9WQlVTKSB7CisJCXJldCA9IGV4dGNvbl9zZXRfc3RhdGVfc3luYyhjaGlw LT5leHRjb24sIGNoaXAtPmV4dGNvbl9pZCwKKwkJCQkJY2hpcC0+dXNiX2F0dGFjaCk7CisJCWlm IChyZXQpCisJCQlyZXR1cm47CisJfSBlbHNlIGlmIChjaGlwLT5pbnRfc3RhdHVzID09IEVVRF9J TlRfQ0hHUikgeworCQlyZXQgPSBleHRjb25fc2V0X3N0YXRlX3N5bmMoY2hpcC0+ZXh0Y29uLCBj aGlwLT5leHRjb25faWQsCisJCQkJCWNoaXAtPmNoZ3JfZW5hYmxlKTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9hdHRhY2hfZGV0YWNoKHN0cnVjdCBl dWRfY2hpcCAqY2hpcCkKK3sKKwl1MzIgcmVnOworCisJY2hpcC0+ZXh0Y29uX2lkID0gRVhUQ09O X1VTQjsKKwkvKiByZWFkIGN0bF9vdXRfMVs0XSB0byBmaW5kIFVTQiBhdHRhY2ggb3IgZGV0YWNo IGV2ZW50ICovCisJcmVnID0gcmVhZGxfcmVsYXhlZChjaGlwLT5ldWRfcmVnX2Jhc2UgKyBFVURf UkVHX0NUTF9PVVRfMSk7CisJaWYgKHJlZyAmIEJJVCg0KSkKKwkJY2hpcC0+dXNiX2F0dGFjaCA9 IHRydWU7CisJZWxzZQorCQljaGlwLT51c2JfYXR0YWNoID0gZmFsc2U7CisKKwlzY2hlZHVsZV93 b3JrKCZjaGlwLT5ldWRfd29yayk7CisKKwkvKiBzZXQgYW5kIGNsZWFyIHZidXNfaW50X2Nsclsw XSB0byBjbGVhciBpbnRlcnJ1cHQgKi8KKwl3cml0ZWxfcmVsYXhlZChCSVQoMCksIGNoaXAtPmV1 ZF9yZWdfYmFzZSArIEVVRF9SRUdfVkJVU19JTlRfQ0xSKTsKKwkvKiBFbnN1cmUgUmVnaXN0ZXIg V3JpdGVzIENvbXBsZXRlICovCisJd21iKCk7CisJd3JpdGVsX3JlbGF4ZWQoMCwgY2hpcC0+ZXVk X3JlZ19iYXNlICsgRVVEX1JFR19WQlVTX0lOVF9DTFIpOworfQorCitzdGF0aWMgdm9pZCBjaGdy X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBldWRfY2hpcCAqY2hpcCkKK3sKKwl1MzIgcmVnOworCisJ Y2hpcC0+ZXh0Y29uX2lkID0gRVhUQ09OX0NIR19VU0JfU0RQOworCS8qIHJlYWQgY3RsX291dF8x WzZdIHRvIGZpbmQgY2hhcmdlciBlbmFibGUgb3IgZGlzYWJsZSBldmVudCAqLworCXJlZyA9IHJl YWRsX3JlbGF4ZWQoY2hpcC0+ZXVkX3JlZ19iYXNlICsgRVVEX1JFR19DVExfT1VUXzEpOworCWlm IChyZWcgJiBCSVQoNikpCisJCWNoaXAtPmNoZ3JfZW5hYmxlID0gdHJ1ZTsKKwllbHNlCisJCWNo aXAtPmNoZ3JfZW5hYmxlID0gZmFsc2U7CisKKwlzY2hlZHVsZV93b3JrKCZjaGlwLT5ldWRfd29y ayk7CisKKwkvKiBzZXQgYW5kIGNsZWFyIGNoZ3JfaW50X2NsclswXSB0byBjbGVhciBpbnRlcnJ1 cHQgKi8KKwl3cml0ZWxfcmVsYXhlZChCSVQoMCksIGNoaXAtPmV1ZF9yZWdfYmFzZSArIEVVRF9S RUdfQ0hHUl9JTlRfQ0xSKTsKKwkvKiBFbnN1cmUgUmVnaXN0ZXIgV3JpdGVzIENvbXBsZXRlICov CisJd21iKCk7CisJd3JpdGVsX3JlbGF4ZWQoMCwgY2hpcC0+ZXVkX3JlZ19iYXNlICsgRVVEX1JF R19DSEdSX0lOVF9DTFIpOworfQorCitzdGF0aWMgdm9pZCBwZXRfZXVkKHN0cnVjdCBldWRfY2hp cCAqY2hpcCkKK3sKKwl1MzIgcmVnOworCisJLyogcmVhZCBzd19hdHRhY2hfZGV0WzBdIHRvIGZp bmQgYXR0YWNoL2RldGFjaCBldmVudCAqLworCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY2hpcC0+ZXVk X3JlZ19iYXNlICsgRVVEX1JFR19TV19BVFRBQ0hfREVUKTsKKwlpZiAocmVnICYgQklUKDApKSB7 CisJCS8qIERldGFjaCAmIEF0dGFjaCBwZXQgZm9yIEVVRCAqLworCQl3cml0ZWxfcmVsYXhlZCgw LCBjaGlwLT5ldWRfcmVnX2Jhc2UgKyBFVURfUkVHX1NXX0FUVEFDSF9ERVQpOworCQkvKiBFbnN1 cmUgUmVnaXN0ZXIgV3JpdGVzIENvbXBsZXRlICovCisJCXdtYigpOworCQkvKiBEZWxheSB0byBt YWtlIHN1cmUgZGV0YWNoIHBldCBpcyBkb25lIGJlZm9yZSBhdHRhY2ggcGV0ICovCisJCXVkZWxh eSgxMDApOworCQl3cml0ZWxfcmVsYXhlZChCSVQoMCksIGNoaXAtPmV1ZF9yZWdfYmFzZSArCisJ CQkJCUVVRF9SRUdfU1dfQVRUQUNIX0RFVCk7CisJCS8qIEVuc3VyZSBSZWdpc3RlciBXcml0ZXMg Q29tcGxldGUgKi8KKwkJd21iKCk7CisJfSBlbHNlIHsKKwkJLyogQXR0YWNoIHBldCBmb3IgRVVE ICovCisJCXdyaXRlbF9yZWxheGVkKEJJVCgwKSwgY2hpcC0+ZXVkX3JlZ19iYXNlICsKKwkJCQkJ RVVEX1JFR19TV19BVFRBQ0hfREVUKTsKKwkJLyogRW5zdXJlIFJlZ2lzdGVyIFdyaXRlcyBDb21w bGV0ZSAqLworCQl3bWIoKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfZXVk X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBldWRfY2hpcCAqY2hpcCA9IGRh dGE7CisJdTMyIHJlZzsKKworCS8qIHJlYWQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBmaW5kIG91dCB3 aGljaCBpbnRlcnJ1cHQgdHJpZ2dlcmVkICovCisJcmVnID0gcmVhZGxfcmVsYXhlZChjaGlwLT5l dWRfcmVnX2Jhc2UgKyBFVURfUkVHX0lOVF9TVEFUVVNfMSk7CisJaWYgKHJlZyAmIEVVRF9JTlRf VkJVUykgeworCQljaGlwLT5pbnRfc3RhdHVzID0gRVVEX0lOVF9WQlVTOworCQl1c2JfYXR0YWNo X2RldGFjaChjaGlwKTsKKwl9IGVsc2UgaWYgKHJlZyAmIEVVRF9JTlRfQ0hHUikgeworCQljaGlw LT5pbnRfc3RhdHVzID0gRVVEX0lOVF9DSEdSOworCQljaGdyX2VuYWJsZV9kaXNhYmxlKGNoaXAp OworCX0gZWxzZSBpZiAocmVnICYgRVVEX0lOVF9TQUZFX01PREUpIHsKKwkJcGV0X2V1ZChjaGlw KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcmV0dXJuIElSUV9IQU5E TEVEOworfQorCitzdGF0aWMgaW50IG1zbV9ldWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXVkX2NoaXAgKmNoaXA7CisJc3RydWN0IHJlc291cmNlICpy ZXM7CisJaW50IHJldDsKKworCWNoaXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKSB7CisJCXJldCA9IC1FTk9NRU07CisJ CXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2hpcCk7CisK KwljaGlwLT5leHRjb24gPSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwgZXVk X2V4dGNvbl9jYWJsZSk7CisJaWYgKElTX0VSUihjaGlwLT5leHRjb24pKQorCQlyZXR1cm4gUFRS X0VSUihjaGlwLT5leHRjb24pOworCisJcmV0ID0gZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKCZw ZGV2LT5kZXYsIGNoaXAtPmV4dGNvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYg KCFyZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljaGlwLT5l dWRfcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlp ZiAoSVNfRVJSKGNoaXAtPmV1ZF9yZWdfYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGNoaXAtPmV1 ZF9yZWdfYmFzZSk7CisKKwljaGlwLT5ldWRfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAw KTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgY2hpcC0+ZXVkX2lycSwg aGFuZGxlX2V1ZF9pcnEsCisJCQkJSVJRRl9UUklHR0VSX0hJR0gsIE5VTEwsIGNoaXApOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwg dHJ1ZSk7CisJZW5hYmxlX2lycV93YWtlKGNoaXAtPmV1ZF9pcnEpOworCisJSU5JVF9XT1JLKCZj aGlwLT5ldWRfd29yaywgZXVkX2V2ZW50X25vdGlmaWVyKTsKKworCWV1ZF9wcml2YXRlID0gY2hp cDsKKwlldWRfcmVhZHkgPSB0cnVlOworCisJLyogRW5hYmxlIEVVRCAqLworCWlmIChlbmFibGUp CisJCWVuYWJsZV9ldWQoZXVkX3ByaXZhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgbXNtX2V1ZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1 Y3QgZXVkX2NoaXAgKmNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChl bmFibGUpCisJCWRpc2FibGVfZXVkKGV1ZF9wcml2YXRlKTsKKwlkZXZpY2VfaW5pdF93YWtldXAo JnBkZXYtPmRldiwgZmFsc2UpOworCWRpc2FibGVfaXJxX3dha2UoY2hpcC0+ZXVkX2lycSk7CisJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXNtX2V1ZF9kdF9tYXRjaFtdID0geworCXsu Y29tcGF0aWJsZSA9ICJxY29tLG1zbS1ldWQifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBtc21fZXVkX2R0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbXNtX2V1ZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1zbV9ldWRfcHJvYmUsCisJLnJlbW92 ZQkJPSBtc21fZXVkX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gIm1zbS1ldWQi LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtc21fZXVkX2R0X21hdGNoLAorCX0sCit9OworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihtc21fZXVkX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigi UVRJIEVVRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK