From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,2/2] Embedded USB Debugger (EUD) driver From: Prakruthi Deepak Heragu Message-Id: <1542310374-18474-3-git-send-email-pheragu@codeaurora.org> Date: Thu, 15 Nov 2018 11:32:54 -0800 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, bryanh@codeaurora.org, psodagud@codeaurora.org, rnayak@codeaurora.org, Prakruthi Deepak Heragu , Satya Durga Srinivasu Prabhala List-ID: QWRkIHN1cHBvcnQgZm9yIGNvbnRyb2wgcGVyaXBoZXJhbCBvZiBFVUQgKEVtYmVkZGVkIFVTQiBE ZWJ1Z2dlcikgdG8KbGlzdGVuIHRvIGV2ZW50cyBzdWNoIGFzIFVTQiBhdHRhY2gvZGV0YWNoLCBj aGFyZ2VyIGVuYWJsZS9kaXNhYmxlLCBwZXQKRVVEIHRvIGluZGljYXRlIHNvZnR3YXJlIGlzIGZ1 bmN0aW9uYWwuIFJldXNpbmcgdGhlIHBsYXRmb3JtIGRldmljZSBrb2JqLApzeXNmcyBlbnRyeSAn ZW5hYmxlJyBpcyBjcmVhdGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIEVVRC4KClNpZ25lZC1vZmYt Ynk6IFNhdHlhIER1cmdhIFNyaW5pdmFzdSBQcmFiaGFsYSA8c2F0eWFwQGNvZGVhdXJvcmEub3Jn PgpTaWduZWQtb2ZmLWJ5OiBQcmFrcnV0aGkgRGVlcGFrIEhlcmFndSA8cGhlcmFndUBjb2RlYXVy b3JhLm9yZz4KLS0tCiBkcml2ZXJzL3NvYy9xY29tL0tjb25maWcgIHwgIDEyICsrCiBkcml2ZXJz L3NvYy9xY29tL01ha2VmaWxlIHwgICAxICsKIGRyaXZlcnMvc29jL3Fjb20vZXVkLmMgICAgfCAz NDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAzNTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c29jL3Fjb20vZXVkLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL0tjb25maWcgYi9k cml2ZXJzL3NvYy9xY29tL0tjb25maWcKaW5kZXggNTg1NmU3OS4uMTI2NjllYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZp ZwpAQCAtMTM2LDQgKzEzNiwxNiBAQCBjb25maWcgUUNPTV9BUFIKICAgICAgICAgICBhcHBsaWNh dGlvbiBwcm9jZXNzb3IgYW5kIFFEU1A2LiBBUFIgaXMKICAgICAgICAgICB1c2VkIGJ5IGF1ZGlv IGRyaXZlciB0byBjb25maWd1cmUgUURTUDYKICAgICAgICAgICBBU00sIEFETSBhbmQgQUZFIG1v ZHVsZXMuCisKK2NvbmZpZyBRQ09NX0VVRAorCXRyaXN0YXRlICJRVEkgRW1iZWRkZWQgVVNCIERl YnVnZ2VyIChFVUQpIgorCWRlcGVuZHMgb24gQVJDSF9RQ09NCisJaGVscAorCSAgVGhlIEVtYmVk ZGVkIFVTQiBEZWJ1Z2dlciAoRVVEKSBkcml2ZXIgaXMgYSBkcml2ZXIgZm9yIHRoZQorCSAgY29u dHJvbCBwZXJpcGhlcmFsIHdoaWNoIHdhaXRzIG9uIGV2ZW50cyBsaWtlIFVTQiBhdHRhY2gvZGV0 YWNoCisJICBhbmQgY2hhcmdlciBlbmFibGUvZGlzYWJsZS4gVGhlIGNvbnRyb2wgcGVyaXBoZXJh bCBmdXJ0aGVyIGhlbHBzCisJICBzdXBwb3J0IHRoZSBVU0ItYmFzZWQgZGVidWcgYW5kIHRyYWNl IGNhcGFiaWxpdGllcy4KKwkgIFRoaXMgbW9kdWxlIGVuYWJsZXMgc3VwcG9ydCBmb3IgUXVhbGNv bW0gVGVjaG5vbG9naWVzLCBJbmMuCisJICBFbWJlZGRlZCBVU0IgRGVidWdnZXIgKEVVRCkuCisJ ICBJZiB1bnN1cmUsIHNheSBOLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNv bS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUKaW5kZXggMTlkY2Y5NS4uZGQ0 NzAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L3NvYy9xY29tL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBAIG9iai0kKENPTkZJR19RQ09NX1NN UDJQKQkrPSBzbXAycC5vCiBvYmotJChDT05GSUdfUUNPTV9TTVNNKQkrPSBzbXNtLm8KIG9iai0k KENPTkZJR19RQ09NX1dDTlNTX0NUUkwpICs9IHdjbnNzX2N0cmwubwogb2JqLSQoQ09ORklHX1FD T01fQVBSKSArPSBhcHIubworb2JqLSQoQ09ORklHX1FDT01fRVVEKSArPSBldWQubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zb2MvcWNvbS9ldWQuYyBiL2RyaXZlcnMvc29jL3Fjb20vZXVkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4ODVkNgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvc29jL3Fjb20vZXVkLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+CisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1 ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisKKyNkZWZpbmUgRVVEX0VO QUJMRV9DTUQgMQorI2RlZmluZSBFVURfRElTQUJMRV9DTUQgMAorCisjZGVmaW5lIEVVRF9SRUdf SU5UMV9FTl9NQVNLCTB4MDAyNAorI2RlZmluZSBFVURfUkVHX0lOVF9TVEFUVVNfMQkweDAwNDQK KyNkZWZpbmUgRVVEX1JFR19DVExfT1VUXzEJMHgwMDc0CisjZGVmaW5lIEVVRF9SRUdfVkJVU19J TlRfQ0xSCTB4MDA4MAorI2RlZmluZSBFVURfUkVHX0NIR1JfSU5UX0NMUgkweDAwODQKKyNkZWZp bmUgRVVEX1JFR19DU1JfRVVEX0VOCTB4MTAxNAorI2RlZmluZSBFVURfUkVHX1NXX0FUVEFDSF9E RVQJMHgxMDE4CisKKyNkZWZpbmUgRVVEX0lOVF9WQlVTCQlCSVQoMikKKyNkZWZpbmUgRVVEX0lO VF9DSEdSCQlCSVQoMykKKyNkZWZpbmUgRVVEX0lOVF9TQUZFX01PREUJQklUKDQpCisjZGVmaW5l IEVVRF9JTlRfQUxMCQkoRVVEX0lOVF9WQlVTfEVVRF9JTlRfQ0hHUnxcCisJCQkJRVVEX0lOVF9T QUZFX01PREUpCisKK3N0cnVjdCBldWRfY2hpcCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJ aW50CQkJCWV1ZF9pcnE7CisJdW5zaWduZWQgaW50CQkJZXh0Y29uX2lkOworCXVuc2lnbmVkIGlu dAkJCWludF9zdGF0dXM7CisJYm9vbAkJCQl1c2JfYXR0YWNoOworCWJvb2wJCQkJY2hncl9lbmFi bGU7CisJdm9pZCBfX2lvbWVtCQkJKmV1ZF9yZWdfYmFzZTsKKwlzdHJ1Y3QgZXh0Y29uX2RldgkJ KmV4dGNvbjsKKwlpbnQJCQkJZW5hYmxlOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJZXVkX3dvcms7 Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV1ZF9leHRjb25fY2FibGVbXSA9IHsK KwlFWFRDT05fVVNCLAorCUVYVENPTl9DSEdfVVNCX1NEUCwKKwlFWFRDT05fTk9ORSwKK307CisK K3N0YXRpYyBpbnQgZW5hYmxlX2V1ZChzdHJ1Y3QgZXVkX2NoaXAgKnByaXYpCit7CisJc3RydWN0 IHBvd2VyX3N1cHBseSAqdXNiX3BzeSA9IE5VTEw7CisJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2 YWwgcHZhbCA9IHswfTsKKwl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCB0dmFsID0gezB9Owor CWludCByZXQ7CisKKwl1c2JfcHN5ID0gcG93ZXJfc3VwcGx5X2dldF9ieV9uYW1lKCJ1c2IiKTsK KwlpZiAoIXVzYl9wc3kpCisJCXJldHVybiAtMTsKKworCXJldCA9IHBvd2VyX3N1cHBseV9nZXRf cHJvcGVydHkodXNiX3BzeSwKKwkJCVBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQsICZwdmFsKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcG93ZXJfc3VwcGx5X2dldF9wcm9w ZXJ0eSh1c2JfcHN5LAorCQkJUE9XRVJfU1VQUExZX1BST1BfUkVBTF9UWVBFLCAmdHZhbCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcHZhbC5pbnR2YWwgfHwgKHR2YWwuaW50 dmFsICE9IFBPV0VSX1NVUFBMWV9UWVBFX1VTQiAmJgorCQl0dmFsLmludHZhbCAhPSBQT1dFUl9T VVBQTFlfVFlQRV9VU0JfQ0RQKSkKKwkJcmV0dXJuIC0xOworCisJLyogd3JpdGUgaW50byBDU1Ig dG8gZW5hYmxlIEVVRCAqLworCXdyaXRlbF9yZWxheGVkKEJJVCgwKSwgcHJpdi0+ZXVkX3JlZ19i YXNlICsgRVVEX1JFR19DU1JfRVVEX0VOKTsKKwkvKiBFbmFibGUgdmJ1cywgY2hnciAmIHNhZmUg bW9kZSB3YXJuaW5nIGludGVycnVwdHMgKi8KKwl3cml0ZWxfcmVsYXhlZChFVURfSU5UX1ZCVVMg fCBFVURfSU5UX0NIR1IgfCBFVURfSU5UX1NBRkVfTU9ERSwKKwkJCXByaXYtPmV1ZF9yZWdfYmFz ZSArIEVVRF9SRUdfSU5UMV9FTl9NQVNLKTsKKworCS8qIEVuc3VyZSBSZWdpc3RlciBXcml0ZXMg Q29tcGxldGUgKi8KKwl3bWIoKTsKKworCS8qCisJICogU2V0IHRoZSBkZWZhdWx0IGNhYmxlIHN0 YXRlIHRvIHVzYiBjb25uZWN0IGFuZCBjaGFyZ2VyCisJICogZW5hYmxlCisJICovCisJcmV0ID0g ZXh0Y29uX3NldF9zdGF0ZV9zeW5jKHByaXYtPmV4dGNvbiwgRVhUQ09OX1VTQiwgdHJ1ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBleHRjb25fc2V0X3N0YXRlX3N5bmMocHJp di0+ZXh0Y29uLAorCQkJRVhUQ09OX0NIR19VU0JfU0RQLCB0cnVlKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfZXVkKHN0 cnVjdCBldWRfY2hpcCAqcHJpdikKK3sKKwkvKiB3cml0ZSBpbnRvIENTUiB0byBkaXNhYmxlIEVV RCAqLworCXdyaXRlbF9yZWxheGVkKDAsIHByaXYtPmV1ZF9yZWdfYmFzZSArIEVVRF9SRUdfQ1NS X0VVRF9FTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV1ZF9lbmFibGVfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK K3sKKwlzdHJ1Y3QgZXVkX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJl dHVybiBzbnByaW50ZihidWYsIHNpemVvZihpbnQpLCAiJWQiLCBjaGlwLT5lbmFibGUpOworfQor CitzdGF0aWMgc3NpemVfdCBldWRfZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNp emVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZXVkX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKwlpbnQgZW5hYmxlID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzc2NhbmYoYnVm LCAiJWR1IiwgJmVuYWJsZSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxl ID09IEVVRF9FTkFCTEVfQ01EKQorCQlyZXQgPSBlbmFibGVfZXVkKGNoaXApOworCWVsc2UgaWYg KGVuYWJsZSA9PSBFVURfRElTQUJMRV9DTUQpCisJCWRpc2FibGVfZXVkKGNoaXApOworCWlmICgh cmV0KQorCQljaGlwLT5lbmFibGUgPSBlbmFibGU7CisJcmV0dXJuIGNvdW50OworfQorCitzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSBldWRfYXR0cmlidXRlID0geworCS5hdHRyLm5hbWUgPSAiZW5h YmxlIiwKKwkuYXR0ci5tb2RlID0gMDY0NCwKKwkuc2hvdyA9IGV1ZF9lbmFibGVfc2hvdywKKwku c3RvcmUgPSBldWRfZW5hYmxlX3N0b3JlLAorfTsKKworc3RhdGljIHZvaWQgZXVkX2V2ZW50X25v dGlmaWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZXVkX3dvcmspCit7CisJc3RydWN0IGV1ZF9jaGlw ICpjaGlwID0gY29udGFpbmVyX29mKGV1ZF93b3JrLCBzdHJ1Y3QgZXVkX2NoaXAsCisJCQkJCWV1 ZF93b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKGNoaXAtPmludF9zdGF0dXMgPT0gRVVEX0lOVF9W QlVTKSB7CisJCXJldCA9IGV4dGNvbl9zZXRfc3RhdGVfc3luYyhjaGlwLT5leHRjb24sIGNoaXAt PmV4dGNvbl9pZCwKKwkJCQkJY2hpcC0+dXNiX2F0dGFjaCk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm47CisJfSBlbHNlIGlmIChjaGlwLT5pbnRfc3RhdHVzID09IEVVRF9JTlRfQ0hHUikgeworCQly ZXQgPSBleHRjb25fc2V0X3N0YXRlX3N5bmMoY2hpcC0+ZXh0Y29uLCBjaGlwLT5leHRjb25faWQs CisJCQkJCWNoaXAtPmNoZ3JfZW5hYmxlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybjsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHVzYl9hdHRhY2hfZGV0YWNoKHN0cnVjdCBldWRfY2hpcCAqY2hpcCkK K3sKKwl1MzIgcmVnOworCisJY2hpcC0+ZXh0Y29uX2lkID0gRVhUQ09OX1VTQjsKKwkvKiByZWFk IGN0bF9vdXRfMVs0XSB0byBmaW5kIFVTQiBhdHRhY2ggb3IgZGV0YWNoIGV2ZW50ICovCisJcmVn ID0gcmVhZGxfcmVsYXhlZChjaGlwLT5ldWRfcmVnX2Jhc2UgKyBFVURfUkVHX0NUTF9PVVRfMSk7 CisJaWYgKHJlZyAmIEJJVCg0KSkKKwkJY2hpcC0+dXNiX2F0dGFjaCA9IHRydWU7CisJZWxzZQor CQljaGlwLT51c2JfYXR0YWNoID0gZmFsc2U7CisKKwlzY2hlZHVsZV93b3JrKCZjaGlwLT5ldWRf d29yayk7CisKKwkvKiBzZXQgYW5kIGNsZWFyIHZidXNfaW50X2NsclswXSB0byBjbGVhciBpbnRl cnJ1cHQgKi8KKwl3cml0ZWxfcmVsYXhlZChCSVQoMCksIGNoaXAtPmV1ZF9yZWdfYmFzZSArIEVV RF9SRUdfVkJVU19JTlRfQ0xSKTsKKwkvKiBFbnN1cmUgUmVnaXN0ZXIgV3JpdGVzIENvbXBsZXRl ICovCisJd21iKCk7CisJd3JpdGVsX3JlbGF4ZWQoMCwgY2hpcC0+ZXVkX3JlZ19iYXNlICsgRVVE X1JFR19WQlVTX0lOVF9DTFIpOworfQorCitzdGF0aWMgdm9pZCBjaGdyX2VuYWJsZV9kaXNhYmxl KHN0cnVjdCBldWRfY2hpcCAqY2hpcCkKK3sKKwl1MzIgcmVnOworCisJY2hpcC0+ZXh0Y29uX2lk ID0gRVhUQ09OX0NIR19VU0JfU0RQOworCS8qIHJlYWQgY3RsX291dF8xWzZdIHRvIGZpbmQgY2hh cmdlciBlbmFibGUgb3IgZGlzYWJsZSBldmVudCAqLworCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY2hp cC0+ZXVkX3JlZ19iYXNlICsgRVVEX1JFR19DVExfT1VUXzEpOworCWlmIChyZWcgJiBCSVQoNikp CisJCWNoaXAtPmNoZ3JfZW5hYmxlID0gdHJ1ZTsKKwllbHNlCisJCWNoaXAtPmNoZ3JfZW5hYmxl ID0gZmFsc2U7CisKKwlzY2hlZHVsZV93b3JrKCZjaGlwLT5ldWRfd29yayk7CisKKwkvKiBzZXQg YW5kIGNsZWFyIGNoZ3JfaW50X2NsclswXSB0byBjbGVhciBpbnRlcnJ1cHQgKi8KKwl3cml0ZWxf cmVsYXhlZChCSVQoMCksIGNoaXAtPmV1ZF9yZWdfYmFzZSArIEVVRF9SRUdfQ0hHUl9JTlRfQ0xS KTsKKwkvKiBFbnN1cmUgUmVnaXN0ZXIgV3JpdGVzIENvbXBsZXRlICovCisJd21iKCk7CisJd3Jp dGVsX3JlbGF4ZWQoMCwgY2hpcC0+ZXVkX3JlZ19iYXNlICsgRVVEX1JFR19DSEdSX0lOVF9DTFIp OworfQorCitzdGF0aWMgdm9pZCBwZXRfZXVkKHN0cnVjdCBldWRfY2hpcCAqY2hpcCkKK3sKKwl1 MzIgcmVnOworCisJLyogcmVhZCBzd19hdHRhY2hfZGV0WzBdIHRvIGZpbmQgYXR0YWNoL2RldGFj aCBldmVudCAqLworCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY2hpcC0+ZXVkX3JlZ19iYXNlICsgRVVE X1JFR19TV19BVFRBQ0hfREVUKTsKKwlpZiAocmVnICYgQklUKDApKSB7CisJCS8qIERldGFjaCAm IEF0dGFjaCBwZXQgZm9yIEVVRCAqLworCQl3cml0ZWxfcmVsYXhlZCgwLCBjaGlwLT5ldWRfcmVn X2Jhc2UgKyBFVURfUkVHX1NXX0FUVEFDSF9ERVQpOworCQkvKiBFbnN1cmUgUmVnaXN0ZXIgV3Jp dGVzIENvbXBsZXRlICovCisJCXdtYigpOworCQkvKiBEZWxheSB0byBtYWtlIHN1cmUgZGV0YWNo IHBldCBpcyBkb25lIGJlZm9yZSBhdHRhY2ggcGV0ICovCisJCXVkZWxheSgxMDApOworCQl3cml0 ZWxfcmVsYXhlZChCSVQoMCksIGNoaXAtPmV1ZF9yZWdfYmFzZSArCisJCQkJCUVVRF9SRUdfU1df QVRUQUNIX0RFVCk7CisJCS8qIEVuc3VyZSBSZWdpc3RlciBXcml0ZXMgQ29tcGxldGUgKi8KKwkJ d21iKCk7CisJfSBlbHNlIHsKKwkJLyogQXR0YWNoIHBldCBmb3IgRVVEICovCisJCXdyaXRlbF9y ZWxheGVkKEJJVCgwKSwgY2hpcC0+ZXVkX3JlZ19iYXNlICsKKwkJCQkJRVVEX1JFR19TV19BVFRB Q0hfREVUKTsKKwkJLyogRW5zdXJlIFJlZ2lzdGVyIFdyaXRlcyBDb21wbGV0ZSAqLworCQl3bWIo KTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfZXVkX2lycShpbnQgaXJxLCB2 b2lkICpkYXRhKQoreworCXN0cnVjdCBldWRfY2hpcCAqY2hpcCA9IGRhdGE7CisJdTMyIHJlZzsK KworCS8qIHJlYWQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBmaW5kIG91dCB3aGljaCBpbnRlcnJ1cHQg dHJpZ2dlcmVkICovCisJcmVnID0gcmVhZGxfcmVsYXhlZChjaGlwLT5ldWRfcmVnX2Jhc2UgKyBF VURfUkVHX0lOVF9TVEFUVVNfMSk7CisJc3dpdGNoIChyZWcgJiBFVURfSU5UX0FMTCkgeworCWNh c2UgRVVEX0lOVF9WQlVTOgorCQljaGlwLT5pbnRfc3RhdHVzID0gRVVEX0lOVF9WQlVTOworCQl1 c2JfYXR0YWNoX2RldGFjaChjaGlwKTsKKwkJYnJlYWs7CisJY2FzZSBFVURfSU5UX0NIR1I6CisJ CWNoaXAtPmludF9zdGF0dXMgPSBFVURfSU5UX0NIR1I7CisJCWNoZ3JfZW5hYmxlX2Rpc2FibGUo Y2hpcCk7CisJCWJyZWFrOworCWNhc2UgRVVEX0lOVF9TQUZFX01PREU6CisJCXBldF9ldWQoY2hp cCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG1zbV9ldWRfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXVkX2NoaXAgKmNoaXA7CisJc3RydWN0IHJl c291cmNlICpyZXM7CisJaW50IHJldDsKKworCWNoaXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWNoaXAtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgY2hpcCk7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmV1 ZF9hdHRyaWJ1dGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwljaGlwLT5leHRjb24g PSBkZXZtX2V4dGNvbl9kZXZfYWxsb2NhdGUoJnBkZXYtPmRldiwgZXVkX2V4dGNvbl9jYWJsZSk7 CisJaWYgKElTX0VSUihjaGlwLT5leHRjb24pKQorCQlyZXR1cm4gUFRSX0VSUihjaGlwLT5leHRj b24pOworCisJcmV0ID0gZGV2bV9leHRjb25fZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGNoaXAt PmV4dGNvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVy biAtRU5PTUVNOworCisJY2hpcC0+ZXVkX3JlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihjaGlwLT5ldWRfcmVnX2Jhc2UpKQorCQly ZXR1cm4gUFRSX0VSUihjaGlwLT5ldWRfcmVnX2Jhc2UpOworCisJY2hpcC0+ZXVkX2lycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2 LT5kZXYsIGNoaXAtPmV1ZF9pcnEsIGhhbmRsZV9ldWRfaXJxLAorCQkJCUlSUUZfVFJJR0dFUl9I SUdILCBOVUxMLCBjaGlwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2aWNlX2lu aXRfd2FrZXVwKCZwZGV2LT5kZXYsIHRydWUpOworCWVuYWJsZV9pcnFfd2FrZShjaGlwLT5ldWRf aXJxKTsKKworCUlOSVRfV09SSygmY2hpcC0+ZXVkX3dvcmssIGV1ZF9ldmVudF9ub3RpZmllcik7 CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIEVVRCAqLworCWlmIChj aGlwLT5lbmFibGUpCisJCWVuYWJsZV9ldWQoY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBtc21fZXVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBldWRfY2hpcCAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJ aWYgKGNoaXAtPmVuYWJsZSkKKwkJZGlzYWJsZV9ldWQoY2hpcCk7CisJZGV2aWNlX3JlbW92ZV9m aWxlKCZwZGV2LT5kZXYsICZldWRfYXR0cmlidXRlKTsKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBk ZXYtPmRldiwgZmFsc2UpOworCWRpc2FibGVfaXJxX3dha2UoY2hpcC0+ZXVkX2lycSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXNtX2V1ZF9k dF9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJxY29tLG1zbS1ldWQifSwKKwl7fSwKK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtc21fZXVkX2R0X21hdGNoKTsKKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXNtX2V1ZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1zbV9l dWRfcHJvYmUsCisJLnJlbW92ZQkJPSBtc21fZXVkX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJ Lm5hbWUJCT0gIm1zbS1ldWQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtc21fZXVkX2R0X21hdGNo LAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtc21fZXVkX2RyaXZlcik7CisKK01P RFVMRV9ERVNDUklQVElPTigiUVRJIEVVRCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsK