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] USB: serial: ftdi_sio: Add support for CBUS GPIO From: Loic Poulain Message-Id: <1533376322-21566-1-git-send-email-loic.poulain@linaro.org> Date: Sat, 4 Aug 2018 11:52:02 +0200 To: andy.shevchenko@gmail.com Cc: linux-usb@vger.kernel.org, ajaykuee@gmail.com, daniel.thompson@linaro.org, Loic Poulain List-ID: U29tZSBGVERJIGRldmljZXMgbGlrZSBGVFggb3IgRlQyMzJSIHN1cHBvcnQgQ0JVUyBCaXQgQmFu ZyBtb2RlIG9uIENCVVMKcGlucywgYWxsb3dpbmcgaG9zdCB0byBjb250cm9sIHRoZW0gdmlhIHNp bXBsZSBVU0IgY29udHJvbCB0cmFuc2ZlcnMuClRvIG1ha2UgdXNlIG9mIGEgQ0JVUyBwaW4gaW4g Qml0IEJhbmcgbW9kZSwgdGhlIHBpbiBtdXN0IGJlIGNvbmZpZ3VyZWQKdG8gSS9PIG1vZGUgaW4g dGhlIEZUREkgRUVQUk9NLiBUaGlzIG1vZGUgcGVyZmVjdGx5IGNvZXhpc3RzIHdpdGggcmVndWxh cgpVU0IgdG8gU2VyaWFsIGZ1bmN0aW9uLgoKSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYSBHUElP IGNvbnRyb2xsZXIgaXMgcmVnaXN0ZXJlZCBvbiBGVERJIHByb2JlCmlmIGF0IGxlYXN0IG9uZSBD QlVTIHBpbiBpcyBjb25maWd1cmVkIGZvciBJL08gbW9kZS4gRm9yIG5vdywgb25seQpGVFggZGV2 aWNlcyBhcmUgc3VwcG9ydGVkLgoKVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBwcmV2aW91cyBTdGVm YW4gQWduZXIgaW1wbGVtZW50YXRpb24gdGVudGF0aXZlCm9uIExLTUwgWzFdLgoKWzFdIE1lc3Nh Z2UtSWQ6IDE0MzQ4MzgzNzctODA0Mi0xLWdpdC1zZW5kLWVtYWlsLXN0ZWZhbkBhZ25lci5jaAoK U2lnbmVkLW9mZi1ieTogTG9pYyBQb3VsYWluIDxsb2ljLnBvdWxhaW5AbGluYXJvLm9yZz4KLS0t CnYyOiBVc2UgbWVzc2FnZS1pZCBmb3IgTEtNTCByZWZlcmVuY2UKICAgIFJld29yayByZWFkX2Vl cHJvbSBhY2NvcmRpbmcgdG8gQW5keSdzIGNvbW1lbnQgYW5kIHJldHVybiByZWFkIGNvdW50CiAg ICBSZW1vdmUgbm9pc3kgbWVzc2FnZXMKICAgIENvbW1lbnQgc3R5bGUgYWxpZ25tZW50CiAgICBB ZGQgZGVmaW5lcyBmb3IgbWFnaWMgdmFsdWVzCiAgICBDYW5ub3QgdXNlIGRldm0sIGJlY2F1c2Ug Z3Bpb2NoaXAgaXMgbGlua2VkIHRvIHRoZSBwb3J0IG5vdCB0byB0aGUgdWRldgogICAgCiBkcml2 ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyAgICB8ICAgOSArKwogZHJpdmVycy91c2Ivc2VyaWFsL2Z0 ZGlfc2lvLmMgfCAyMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBkcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCB8ICA4MyArKysrKysrKysrKysrKysKIDMg ZmlsZXMgY2hhbmdlZCwgMzMwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IDUzM2Yx MjcuLjY0YzlmMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBi L2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC0xODEsNiArMTgxLDE1IEBAIGNvbmZpZyBV U0JfU0VSSUFMX0ZURElfU0lPCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxl LCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmdGRpX3Npby4K IAorY29uZmlnIFVTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPCisJYm9vbCAiVVNCIEZEVEkg Q0JVUyBHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0ZURElfU0lPCisJZGVw ZW5kcyBvbiBHUElPTElCCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGFkZCBzdXBwb3J0IGZv ciB0aGUgQ0JVUyBiaXQtYmFuZyBtb2RlLCBhbGxvd2luZyBDQlVTCisJICBwaW5zIHRvIGFjdCBh cyBHUElPcy4gTm90ZSB0aGF0IHBpbnMgbXVzdCBmaXJzdCBiZSBjb25maWd1cmVkIGZvciBHUElP CisJICBpbiB0aGUgZGV2aWNlJ3MgRUVQUk9NLiBUaGUgRlQyMzJSIGFuZCBGVC1YIHNlcmllcyBz dXBwb3J0IHRoaXMgbW9kZS4KKwogY29uZmlnIFVTQl9TRVJJQUxfVklTT1IKIAl0cmlzdGF0ZSAi VVNCIEhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIG01MHggLyBTb255IENsaWUgRHJpdmVyIgogCWhl bHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91 c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggYjVjZWYzMi4uODU5MmYzOSAxMDA2NDQKLS0tIGEv ZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0 ZGlfc2lvLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNs dWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNp bmNsdWRlIDxsaW51eC9ncGlvL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgog I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAg LTQwLDEyICs0MSwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4 L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKwogI2luY2x1ZGUgImZ0 ZGlfc2lvLmgiCiAjaW5jbHVkZSAiZnRkaV9zaW9faWRzLmgiCiAKICNkZWZpbmUgRFJJVkVSX0FV VEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIEJpbGwgUnlkZXIgPGJy eWRlckBzZ2kuY29tPiwgS3ViYSBPYmVyIDxrdWJhQG1hcmVpbWJyaXVtLm9yZz4sIEFuZHJlYXMg TW9ociwgSm9oYW4gSG92b2xkIDxqaG92b2xkQGdtYWlsLmNvbT4iCiAjZGVmaW5lIERSSVZFUl9E RVNDICJVU0IgRlRESSBTZXJpYWwgQ29udmVydGVycyBEcml2ZXIiCiAKKyNkZWZpbmUgRlRESV9D QlVTX1BJTl9DT1VOVCA0CisKK3N0cnVjdCBmdGRpX2dwaW9jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19j aGlwIGdjOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgaW50IGNi dXNfbWFwW0ZURElfQ0JVU19QSU5fQ09VTlRdOworCXVuc2lnbmVkIGxvbmcgY2J1c19tYXNrOwor fTsKIAogc3RydWN0IGZ0ZGlfcHJpdmF0ZSB7CiAJZW51bSBmdGRpX2NoaXBfdHlwZSBjaGlwX3R5 cGU7CkBAIC03Miw2ICs4Miw4IEBAIHN0cnVjdCBmdGRpX3ByaXZhdGUgewogCXVuc2lnbmVkIGlu dCBsYXRlbmN5OwkJLyogbGF0ZW5jeSBzZXR0aW5nIGluIHVzZSAqLwogCXVuc2lnbmVkIHNob3J0 IG1heF9wYWNrZXRfc2l6ZTsKIAlzdHJ1Y3QgbXV0ZXggY2ZnX2xvY2s7IC8qIEF2b2lkIG1lc3Mg YnkgcGFyYWxsZWwgY2FsbHMgb2YgY29uZmlnIGlvY3RsKCkgYW5kIGNoYW5nZV9zcGVlZCgpICov CisKKwlzdHJ1Y3QgZnRkaV9ncGlvY2hpcCAqZmdjOwogfTsKIAogLyogc3RydWN0IGZ0ZGlfc2lv X3F1aXJrIGlzIHVzZWQgYnkgZGV2aWNlcyByZXF1aXJpbmcgc3BlY2lhbCBhdHRlbnRpb24uICov CkBAIC0xNTI4LDYgKzE1NDAsMjI0IEBAIHN0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCB1 c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfVVNC X1NFUklBTF9GVERJX1NJT19DQlVTX0dQSU8KKworI2RlZmluZSBGVFhfQ0JVU19NVVhfRUVQUk9N X0FERFIgMHgxYQorCitzdGF0aWMgaW50IGZ0ZGlfcmVhZF9lZXByb20oc3RydWN0IHVzYl9kZXZp Y2UgKnVkZXYsIHVuc2lnbmVkIGludCBvZmYsCisJCQkgICAgdm9pZCAqdmFsLCBzaXplX3QgYnl0 ZXMpCit7CisJdW5zaWduZWQgaW50IHJlYWQgPSAwOworCisJaWYgKGJ5dGVzICUgMikgLyogMTYt Yml0IHdvcmQgZWVwcm9tICovCisJCWJ5dGVzLS07CisKKwl3aGlsZSAocmVhZCA8IGJ5dGVzKSB7 CisJCWludCBydjsKKworCQlydiA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBp cGUodWRldiwgMCksCisJCQkJICAgICBGVERJX1NJT19SRUFEX0VFUFJPTV9SRVFVRVNULAorCQkJ CSAgICAgRlRESV9TSU9fUkVBRF9FRVBST01fUkVRVUVTVF9UWVBFLAorCQkJCSAgICAgMCwgKG9m ZiArIHJlYWQpIC8gMiwgdmFsICsgcmVhZCwgMiwKKwkJCQkgICAgIFdEUl9USU1FT1VUKTsKKwkJ aWYgKHJ2IDwgMCkKKwkJCWJyZWFrOworCisJCXJlYWQgKz0gMjsKKwl9CisKKwlyZXR1cm4gcmVh ZDsKK30KKworc3RhdGljIGludCBmdGRpX3NldF9iaXRtb2RlKHN0cnVjdCB1c2Jfc2VyaWFsX3Bv cnQgKnBvcnQsIHU4IGJpdG1hc2ssCisJCQkgICAgdTggYml0bW9kZSkKK3sKKwlzdHJ1Y3QgZnRk aV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fdTE2 IHVyYl92YWx1ZSA9IDA7CisKKwl1cmJfdmFsdWUgPSBiaXRtb2RlIDw8IDggfCBiaXRtYXNrOwor CisJaWYgKHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICB1c2Jfc25k Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgIEZURElfU0lPX1NFVF9CSVRN T0RFX1JFUVVFU1QsCisJCQkgICAgRlRESV9TSU9fU0VUX0JJVE1PREVfUkVRVUVTVF9UWVBFLAor CQkJICAgIHVyYl92YWx1ZSwgcHJpdi0+aW50ZXJmYWNlLCBOVUxMLCAwLAorCQkJICAgIFdEUl9T SE9SVF9USU1FT1VUKSA8IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgZnRkaV9yZWFkX3BpbnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9y dCwgdTggKnZhbCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJp YWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxs b2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYg KHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICB1c2JfcmN2Y3RybHBp cGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgIEZURElfU0lPX1JFQURfUElOU19SRVFV RVNULAorCQkJICAgIEZURElfU0lPX1JFQURfUElOU19SRVFVRVNUX1RZUEUsCisJCQkgICAgMCwg cHJpdi0+aW50ZXJmYWNlLCBidWYsIDEsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJa2ZyZWUoYnVm KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJKnZhbCA9IGJ1ZlswXTsKKwlrZnJlZShidWYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnRkaV9jYnVzX2dwaW9fZGlyX291dChzdHJ1 Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZnRk aV9ncGlvY2hpcCAqZmdjID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCXVuc2lnbmVkIGludCBj YnVzX2lkeCA9IGZnYy0+Y2J1c19tYXBbZ3Bpb107CisKKwkvKgorCSAqIENCVVMgbWFzayBpcyBh biA4LWJpdCByZWdpc3RlciBjb250cm9sbGluZyB0aGUgZGlyZWN0aW9uIGFuZCB2YWx1ZQorCSAq IG9mIENCVVMgcGlucyBpbiBCaXQtQmFuZyBtb2RlLiBjZiBhcHBsaWNhdGlvbiBub3RlIEFOXzM3 My9BTl8yMzJSLTAxLgorCSAqIHwgYml0IDcgfCBiaXQgNiB8IGJpdCA1IHwgYml0IDQgfCBiaXQg MyB8IGJpdCAyIHwgYml0IDEgfCBiaXQgMCB8CisJICogfCBDQlVTMCB8IENCVVMxIHwgQ0JVUzIg fCBDQlVTMyB8IENCVVM0IHwgQ0JVUzUgfCBDQlVTNiB8IENCVVM3IHwKKwkgKiB8ICBJL08gIHwg IEkvTyAgfCAgSS9PICB8ICBJL08gIHwgSGkvTG8gfCBIaS9MbyB8IEhpL0xvIHwgSGkvTG8gfAor CSAqLworCXNldF9iaXQoY2J1c19pZHggKyA0LCAmZmdjLT5jYnVzX21hc2spOyAvKiBkaXJlY3Rp b24gKi8KKwlzZXRfYml0KGNidXNfaWR4LCAmZmdjLT5jYnVzX21hc2spOyAvKiB2YWx1ZSAqLwor CisJcmV0dXJuIGZ0ZGlfc2V0X2JpdG1vZGUoZmdjLT5wb3J0LCBmZ2MtPmNidXNfbWFzaywKKwkJ CQlGVERJX1NJT19CSVRNT0RFX0NCVVMpOworfQorCitzdGF0aWMgaW50IGZ0ZGlfY2J1c19ncGlv X2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3Qg ZnRkaV9ncGlvY2hpcCAqZmdjID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCXVuc2lnbmVkIGlu dCBjYnVzX2lkeCA9IGZnYy0+Y2J1c19tYXBbZ3Bpb107CisKKwljbGVhcl9iaXQoY2J1c19pZHgg KyA0LCAmZmdjLT5jYnVzX21hc2spOworCisJcmV0dXJuIGZ0ZGlfc2V0X2JpdG1vZGUoZmdjLT5w b3J0LCBmZ2MtPmNidXNfbWFzaywKKwkJCQlGVERJX1NJT19CSVRNT0RFX0NCVVMpOworfQorCitz dGF0aWMgaW50IGZ0ZGlfY2J1c19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWdu ZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgZnRkaV9ncGlvY2hpcCAqZmdjID0gZ3Bpb2NoaXBfZ2V0X2Rh dGEoZ2MpOworCXVuc2lnbmVkIGludCBjYnVzX2lkeCA9IGZnYy0+Y2J1c19tYXBbZ3Bpb107CisJ dTggdmFsID0gMDsKKwlpbnQgcnY7CisKKwlydiA9IGZ0ZGlfcmVhZF9waW5zKGZnYy0+cG9ydCwg JnZhbCk7CisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisKKwlyZXR1cm4gISEodmFsICYgQklUKGNi dXNfaWR4KSk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfY2J1c19ncGlvX3NldChzdHJ1Y3QgZ3Bp b19jaGlwICpnYywgdW5zaWduZWQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZnRkaV9ncGlv Y2hpcCAqZmdjID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCisJaWYgKHZhbCkKKwkJc2V0X2Jp dChmZ2MtPmNidXNfbWFwW2dwaW9dLCAmZmdjLT5jYnVzX21hc2spOworCWVsc2UKKwkJY2xlYXJf Yml0KGZnYy0+Y2J1c19tYXBbZ3Bpb10sICZmZ2MtPmNidXNfbWFzayk7CisKKwlmdGRpX3NldF9i aXRtb2RlKGZnYy0+cG9ydCwgZmdjLT5jYnVzX21hc2ssIEZURElfU0lPX0JJVE1PREVfQ0JVUyk7 Cit9CisKK3N0YXRpYyBpbnQgZnRkaV9yZWdpc3Rlcl9jYnVzX2dwaW9jaGlwKHN0cnVjdCB1c2Jf c2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9n ZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBv cnQtPnNlcmlhbC0+ZGV2OworCXN0cnVjdCBmdGRpX2dwaW9jaGlwICpmZ2M7CisJaW50IHJ2ID0g MDsKKworCWZnYyA9IGt6YWxsb2Moc2l6ZW9mKCpmZ2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZn YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocHJpdi0+Y2hpcF90eXBlID09IEZUWCkgewor CQl1bnNpZ25lZCBjaGFyICpjYnVzX211eDsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJLyoKKwkJ ICogRWFjaCBpbmRpdmlkdWFsIENCVVMgcGluIGlzIGNvbnRyb2xsZWQgYnkgYSBzZXBhcmF0ZSA4 LWJpdAorCQkgKiBNVVggY29udHJvbCB2YWx1ZSBzdG9yZWQgaW4gdGhlIEVFUFJPTSwgc3RhcnRp bmcgYXQgMHgxYToKKwkJICogfCAweDFhIENCVVMwIHwgMHgxYiBDQlVTMSB8IDB4MWMgQ0JVUzIg fCAweDFkIENCVVMzIHwgLi4uCisJCSAqIGNmIGFwcGxpY2F0aW9uIG5vdGUgQU5fMjAxLgorCQkg Ki8KKworCQljYnVzX211eCA9IGttYWxsb2MoRlRESV9DQlVTX1BJTl9DT1VOVCwgR0ZQX0tFUk5F TCk7CisJCWlmICghY2J1c19tdXgpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlydiA9IGZ0ZGlf cmVhZF9lZXByb20odWRldiwgRlRYX0NCVVNfTVVYX0VFUFJPTV9BRERSLCBjYnVzX211eCwKKwkJ CQkgICAgICBGVERJX0NCVVNfUElOX0NPVU5UKTsKKwkJaWYgKHJ2IDwgMCkgeworCQkJZGV2X2Vy cigmdWRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgQ0JVUyBjb25maWdcbiIpOworCQkJa2ZyZWUo Y2J1c19tdXgpOworCQkJZ290byBleGl0X3JlbGVhc2U7CisJCX0KKworCQlmb3IgKGkgPSAwOyBp IDwgcnY7IGkrKykgeworCQkJaWYgKGNidXNfbXV4W2ldID09IEZUWF9DQlVTX01VWF9JTykKKwkJ CQlmZ2MtPmNidXNfbWFwW2ZnYy0+Z2MubmdwaW8rK10gPSBpOworCQl9CisKKwkJcnYgPSAwOwor CQlrZnJlZShjYnVzX211eCk7CisJfQorCisJaWYgKCFmZ2MtPmdjLm5ncGlvKQorCQlnb3RvIGV4 aXRfcmVsZWFzZTsKKworCWZnYy0+Z2MubGFiZWwgPSAiZnRkaS1jYnVzLWdwaW8iOworCWZnYy0+ Z2MuZGlyZWN0aW9uX2lucHV0ID0gZnRkaV9jYnVzX2dwaW9fZGlyX2luOworCWZnYy0+Z2MuZGly ZWN0aW9uX291dHB1dCA9IGZ0ZGlfY2J1c19ncGlvX2Rpcl9vdXQ7CisJZmdjLT5nYy5zZXQgPSBm dGRpX2NidXNfZ3Bpb19zZXQ7CisJZmdjLT5nYy5nZXQgPSBmdGRpX2NidXNfZ3Bpb19nZXQ7CisJ ZmdjLT5nYy5jYW5fc2xlZXAgPSB0cnVlOworCWZnYy0+Z2MucGFyZW50ID0gJnVkZXYtPmRldjsK KwlmZ2MtPmdjLmJhc2UgPSAtMTsKKwlmZ2MtPmdjLm93bmVyID0gVEhJU19NT0RVTEU7CisJZmdj LT5wb3J0ID0gcG9ydDsKKworCXJ2ID0gZ3Bpb2NoaXBfYWRkX2RhdGEoJmZnYy0+Z2MsIGZnYyk7 CisJaWYgKHJ2KSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIlVuYWJsZSB0byBhZGQgZ3Bpb2No aXBcbiIpOworCQlnb3RvIGV4aXRfcmVsZWFzZTsKKwl9CisKKwlwcml2LT5mZ2MgPSBmZ2M7CisK KwlkZXZfaW5mbygmdWRldi0+ZGV2LAorCQkgIkZUREkgVVNCIEdQSU8gY29udHJvbGxlciBSZWdp c3RlcmVkLCBiYXNlPSVkLCBuZ3Bpbz0ldVxuIiwKKwkJIGZnYy0+Z2MuYmFzZSwgZmdjLT5nYy5u Z3Bpbyk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZWxlYXNlOgorCWtmcmVlKGZnYyk7CisJcmV0 dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBmdGRpX3VucmVnaXN0ZXJfY2J1c19ncGlvY2hpcChz dHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnBy aXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGZ0ZGlfZ3Bpb2No aXAgKmZnYyA9IHByaXYtPmZnYzsKKworCWlmICghZmdjKQorCQlyZXR1cm47CisKKwlncGlvY2hp cF9yZW1vdmUoJmZnYy0+Z2MpOworCWtmcmVlKGZnYyk7Cit9CisKKyNlbmRpZiAvKiAgQ09ORklH X1VTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPICovCiAKIC8qIERldGVybWluZSB0eXBlIG9m IEZUREkgY2hpcCBiYXNlZCBvbiBVU0IgY29uZmlnIGFuZCBkZXNjcmlwdG9yLiAqLwogc3RhdGlj IHZvaWQgZnRkaV9kZXRlcm1pbmVfdHlwZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQpA QCAtMTgxMyw2ICsyMDQzLDEwIEBAIHN0YXRpYyBpbnQgZnRkaV9zaW9fcG9ydF9wcm9iZShzdHJ1 Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogCQlwcml2LT5sYXRlbmN5ID0gMTY7CiAJd3JpdGVf bGF0ZW5jeV90aW1lcihwb3J0KTsKIAljcmVhdGVfc3lzZnNfYXR0cnMocG9ydCk7CisjaWZkZWYg Q09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPCisJZnRkaV9yZWdpc3Rlcl9jYnVz X2dwaW9jaGlwKHBvcnQpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkzMCw2ICsy MTY0LDEwIEBAIHN0YXRpYyBpbnQgZnRkaV9zaW9fcG9ydF9yZW1vdmUoc3RydWN0IHVzYl9zZXJp YWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9z ZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9T SU9fQ0JVU19HUElPCisJZnRkaV91bnJlZ2lzdGVyX2NidXNfZ3Bpb2NoaXAocG9ydCk7CisjZW5k aWYKKwogCXJlbW92ZV9zeXNmc19hdHRycyhwb3J0KTsKIAogCWtmcmVlKHByaXYpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwv ZnRkaV9zaW8uaAppbmRleCBkY2QwYjZlLi4zYmQyNDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vz Yi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApA QCAtMzYsNiArMzYsMTAgQEAKICNkZWZpbmUgRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIJCTcgLyog U2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fU0VUX0xBVEVOQ1lf VElNRVIJOSAvKiBTZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fR0VU X0xBVEVOQ1lfVElNRVIJMTAgLyogR2V0IHRoZSBsYXRlbmN5IHRpbWVyICovCisjZGVmaW5lIEZU RElfU0lPX1NFVF9CSVRNT0RFCQkxMSAvKiBTZXQgdGhlIGJpdG1vZGUgKi8KKyNkZWZpbmUgRlRE SV9TSU9fUkVBRF9QSU5TCQkxMiAvKiBSZWFkIHBpbnMgaW4gYml0bW9kZSAqLworI2RlZmluZSBG VERJX1NJT19SRUFEX0VFUFJPTQkJMHg5MCAvKiBSZWFkIGVlcHJvbSAqLworI2RlZmluZSBGVERJ X1NJT19XUklURV9FRVBST00JCTB4OTEgLyogV3JpdGUgZWVwcm9tICovCiAKIC8qIEludGVyZmFj ZSBpbmRpY2VzIGZvciBGVDIyMzIsIEZUMjIzMkggYW5kIEZUNDIzMkggZGV2aWNlcyAqLwogI2Rl ZmluZSBJTlRFUkZBQ0VfQQkJMQpAQCAtNDAwLDYgKzQwNCw2MCBAQCBlbnVtIGZ0ZGlfc2lvX2Jh dWRyYXRlIHsKICAqCiAgKi8KIAorIC8qIEZURElfU0lPX1JFQURfRUVQUk9NICovCisjZGVmaW5l IEZURElfU0lPX1JFQURfRUVQUk9NX1JFUVVFU1RfVFlQRSAweGMwCisjZGVmaW5lIEZURElfU0lP X1JFQURfRUVQUk9NX1JFUVVFU1QgRlRESV9TSU9fUkVBRF9FRVBST00KKy8qCisgKiAgQm1SZXF1 ZXN0VHlwZTogICAxMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19SRUFE X0VFUFJPTQorICogIHdWYWx1ZTogICAgICAgICAgMAorICogIHdJbmRleDogICAgICAgICAgV29y ZCBJbmRleAorICogIHdMZW5ndGg6ICAgICAgICAgMgorICogIERhdGE6ICAgICAgICAgICAgcmV0 dXJuIGRhdGEgKGEgd29yZCkKKyAqCisgKi8KKworLyogRlRESV9TSU9fV1JJVEVfRUVQUk9NICov CisjZGVmaW5lIEZURElfU0lPX1dSSVRFX0VFUFJPTV9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmlu ZSBGVERJX1NJT19XUklURV9FRVBST01fUkVRVUVTVCBGVERJX1NJT19XUklURV9FRVBST00KKy8q CisgKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgICBG VERJX1NJT19XUklURV9FRVBST00KKyAqICB3VmFsdWU6ICAgICAgICAgIERhdGEgKHdvcmQpCisg KiAgd0luZGV4OiAgICAgICAgICBXb3JkIEluZGV4CisgKiAgd0xlbmd0aDogICAgICAgICAwCisg KiAgRGF0YTogICAgICAgICAgICBOb25lCisgKgorICovCisKKyAvKiBGVERJX1NJT19TRVRfQklU TU9ERSAqLworI2RlZmluZSBGVERJX1NJT19TRVRfQklUTU9ERV9SRVFVRVNUX1RZUEUgMHg0MAor I2RlZmluZSBGVERJX1NJT19TRVRfQklUTU9ERV9SRVFVRVNUIEZURElfU0lPX1NFVF9CSVRNT0RF CisjZGVmaW5lIEZURElfU0lPX0JJVE1PREVfUkVTRVQgMHgwMAorI2RlZmluZSBGVERJX1NJT19C SVRNT0RFX0NCVVMgMHgyMAorLyoKKyAqICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKKyAq ICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9CSVRNT0RFCisgKiAgd1ZhbHVlOiAgICAg ICAgICBbMC03XSBiaXRtYXNrLCBbOC0xNV0gYml0bW9kZQorICogIHdJbmRleDogICAgICAgICAg UG9ydAorICogIHdMZW5ndGg6ICAgICAgICAgMAorICogIERhdGE6ICAgICAgICAgICAgTm9uZQor ICoKKyAqLworCisvKiBGVERJX1NJT19SRUFEX1BJTlMgKi8KKyNkZWZpbmUgRlRESV9TSU9fUkVB RF9QSU5TX1JFUVVFU1RfVFlQRSAweEMwCisjZGVmaW5lIEZURElfU0lPX1JFQURfUElOU19SRVFV RVNUIEZURElfU0lPX1JFQURfUElOUworLyoKKyAqICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAw MGIKKyAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1JFQURfUElOUworICogIHdWYWx1ZTog ICAgICAgICAgMAorICogIHdJbmRleDogICAgICAgICAgUG9ydAorICogIHdMZW5ndGg6ICAgICAg ICAgMgorICogIERhdGE6ICAgICAgICAgICAgcmV0dXJuIGRhdGEgKGEgd29yZCkKKyAqCisgKi8K KwogLyogRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUyAqLwogLyogUmV0cmlldmUgdGhlIGN1cnJl bnQgdmFsdWUgb2YgdGhlIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLwogCkBAIC01NjMsMyArNjIx LDI4IEBAIGVudW0gZnRkaV9zaW9fYmF1ZHJhdGUgewogICogQjIuLjcJTGVuZ3RoIG9mIG1lc3Nh Z2UgLSAobm90IGluY2x1ZGluZyBCeXRlIDApCiAgKgogICovCisKK2VudW0gZnRkaV9mdHhfY2J1 c19tdXggeworCUZUWF9DQlVTX01VWF9UUklTVEFURSwKKwlGVFhfQ0JVU19NVVhfUlhMRUQsCisJ RlRYX0NCVVNfTVVYX1RYTEVELAorCUZUWF9DQlVTX01VWF9UWFJYTEVELAorCUZUWF9DQlVTX01V WF9QV1JFTiwKKwlGVFhfQ0JVU19NVVhfU0xFRVAsCisJRlRYX0NCVVNfTVVYX0RSSVZFMCwKKwlG VFhfQ0JVU19NVVhfRFJJVkUxLAorCUZUWF9DQlVTX01VWF9JTywKKwlGVFhfQ0JVU19NVVhfVFhE RU4sCisJRlRYX0NCVVNfTVVYX0NMSzI0LAorCUZUWF9DQlVTX01VWF9DTEsxMiwKKwlGVFhfQ0JV U19NVVhfQ0xLNiwKKwlGVFhfQ0JVU19NVVhfQkNEX0NIQVJHRVIsCisJRlRYX0NCVVNfTVVYX0JD RF9DSEFSR0VSX04sCisJRlRYX0NCVVNfTVVYX0kyQ19UWEUsCisJRlRYX0NCVVNfTVVYX0kyQ19S WEYsCisJRlRYX0NCVVNfTVVYX1ZCVVNfU0VOU0UsCisJRlRYX0NCVVNfTVVYX0JJVEJBTkdfV1Is CisJRlRYX0NCVVNfTVVYX0JJVEJBTkdfUkQsCisJRlRYX0NCVVNfTVVYX1RJTUVTVEFNUCwKKwlG VFhfQ0JVU19NVVhfS0VFUF9BV0FLRQorfTsK