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,4/4] usb: musb: Add support for MediaTek musb controller From: min.guo@mediatek.com Message-Id: <1547709348-17506-5-git-send-email-min.guo@mediatek.com> Date: Thu, 17 Jan 2019 15:15:48 +0800 To: Bin Liu , Rob Herring Cc: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, tony@atomide.com, hdegoede@redhat.com, Min Guo , Yonglong Wu List-ID: RnJvbTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+CgpUaGlzIGFkZHMgc3VwcG9ydCBm b3IgTWVkaWFUZWsgbXVzYiBjb250cm9sbGVyIGluCmhvc3QsIHBlcmlwaGVyYWwgYW5kIG90ZyBt b2RlLgpUaGVyZSBhcmUgc29tZSBxdWlyayBvZiBNZWRpYVRlayBtdXNiIGNvbnRyb2xsZXIsIHN1 Y2ggYXM6CiAtVzFDIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCiAtUHJpdmF0ZSBkYXRhIHRv Z2dsZSByZWdpc3RlcnMKIC1ObyBkZWRpY2F0ZWQgRE1BIGludGVycnVwdCBsaW5lCgpTaWduZWQt b2ZmLWJ5OiBNaW4gR3VvIDxtaW4uZ3VvQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWW9u Z2xvbmcgV3UgPHlvbmdsb25nLnd1QG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2ZXJzL3VzYi9tdXNi L0tjb25maWcgICAgIHwgICA4ICstCiBkcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlICAgIHwgICAx ICsKIGRyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYyAgfCA2MjQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyB8 ICA2NCArKysrLQogZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCB8ICAgOSArCiBkcml2ZXJz L3VzYi9tdXNiL211c2JfZG1hLmggIHwgICA5ICsKIGRyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0 LmMgfCAgNDYgKy0tLQogZHJpdmVycy91c2IvbXVzYi9tdXNiX2lvLmggICB8ICAgNiArCiBkcml2 ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIHwgIDU3ICsrLS0KIDkgZmlsZXMgY2hhbmdlZCwgNzY2 IGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL211c2IvbWVkaWF0ZWsuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2Nv bmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCBhZDA4ODk1Li5iNzJiN2MxIDEw MDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVz Yi9LY29uZmlnCkBAIC0xMTUsNiArMTE1LDEyIEBAIGNvbmZpZyBVU0JfTVVTQl9KWjQ3NDAKIAlk ZXBlbmRzIG9uIFVTQl9NVVNCX0dBREdFVAogCWRlcGVuZHMgb24gVVNCX09UR19CTEFDS0xJU1Rf SFVCCiAKK2NvbmZpZyBVU0JfTVVTQl9NRURJQVRFSworCXRyaXN0YXRlICJNZWRpYVRlayBwbGF0 Zm9ybXMiCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVAorCWRlcGVu ZHMgb24gTk9QX1VTQl9YQ0VJVgorCWRlcGVuZHMgb24gR0VORVJJQ19QSFkKKwogY29uZmlnIFVT Ql9NVVNCX0FNMzM1WF9DSElMRAogCXRyaXN0YXRlCiAKQEAgLTE0MSw3ICsxNDcsNyBAQCBjb25m aWcgVVNCX1VYNTAwX0RNQQogCiBjb25maWcgVVNCX0lOVkVOVFJBX0RNQQogCWJvb2wgJ0ludmVu dHJhJwotCWRlcGVuZHMgb24gVVNCX01VU0JfT01BUDJQTFVTCisJZGVwZW5kcyBvbiBVU0JfTVVT Ql9PTUFQMlBMVVMgfHwgVVNCX01VU0JfTUVESUFURUsKIAloZWxwCiAJICBFbmFibGUgRE1BIHRy YW5zZmVycyB1c2luZyBNZW50b3IncyBlbmdpbmUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L211c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlCmluZGV4IDNhODhjNzku LjYzZDgyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKKysrIGIvZHJp dmVycy91c2IvbXVzYi9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBvYmotJChDT05GSUdfVVNC X01VU0JfREE4WFgpCQkJKz0gZGE4eHgubwogb2JqLSQoQ09ORklHX1VTQl9NVVNCX1VYNTAwKQkJ CSs9IHV4NTAwLm8KIG9iai0kKENPTkZJR19VU0JfTVVTQl9KWjQ3NDApCQkJKz0gano0NzQwLm8K IG9iai0kKENPTkZJR19VU0JfTVVTQl9TVU5YSSkJCQkrPSBzdW54aS5vCitvYmotJChDT05GSUdf VVNCX01VU0JfTUVESUFURUspICAgICAgCQkrPSBtZWRpYXRlay5vCiAKIAogb2JqLSQoQ09ORklH X1VTQl9NVVNCX0FNMzM1WF9DSElMRCkJCSs9IG11c2JfYW0zMzV4Lm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYyBiL2RyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNhZmE2Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy91c2IvbXVzYi9tZWRpYXRlay5jCkBAIC0wLDAgKzEsNjI0IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx OCBNZWRpYVRlayBJbmMuCisgKgorICogQXV0aG9yOgorICogIE1pbiBHdW8gPG1pbi5ndW9AbWVk aWF0ZWsuY29tPgorICogIFlvbmdsb25nIFd1IDx5b25nbG9uZy53dUBtZWRpYXRlay5jb20+Cisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5n Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYl9waHlfZ2VuZXJpYy5oPgorI2luY2x1 ZGUgIm11c2JfY29yZS5oIgorI2luY2x1ZGUgIm11c2JfZG1hLmgiCisKKyNkZWZpbmUgVVNCX0wx SU5UUwkweDAwYTAKKyNkZWZpbmUgVVNCX0wxSU5UTQkweDAwYTQKKyNkZWZpbmUgTVRLX01VU0Jf VFhGVU5DQUREUgkweDA0ODAKKworLyogTWVkaWFUZWsgY29udHJvbGxlciB0b2dnbGUgZW5hYmxl IGFuZCBzdGF0dXMgcmVnICovCisjZGVmaW5lIE1VU0JfUlhUT0cJCTB4ODAKKyNkZWZpbmUgTVVT Ql9SWFRPR0VOCQkweDgyCisjZGVmaW5lIE1VU0JfVFhUT0cJCTB4ODQKKyNkZWZpbmUgTVVTQl9U WFRPR0VOCQkweDg2CisKKyNkZWZpbmUgVFhfSU5UX1NUQVRVUwkJQklUKDApCisjZGVmaW5lIFJY X0lOVF9TVEFUVVMJCUJJVCgxKQorI2RlZmluZSBVU0JDT01fSU5UX1NUQVRVUwkJQklUKDIpCisj ZGVmaW5lIERNQV9JTlRfU1RBVFVTCQlCSVQoMykKKworI2RlZmluZSBETUFfSU5UUl9TVEFUVVNf TVNLCQlHRU5NQVNLKDcsIDApCisjZGVmaW5lIERNQV9JTlRSX1VOTUFTS19TRVRfTVNLCUdFTk1B U0soMzEsIDI0KQorCitlbnVtIG10a192YnVzX2lkX3N0YXRlIHsKKwlNVEtfSURfRkxPQVQgPSAx LAorCU1US19JRF9HUk9VTkQsCisJTVRLX1ZCVVNfT0ZGLAorCU1US19WQlVTX1ZBTElELAorfTsK Kworc3RydWN0IG10a19nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11c2Ig Km11c2I7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXVzYl9wZGV2OworCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnVzYl9waHk7CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCB1c2JfcGh5 ICp4Y2VpdjsKKwllbnVtIHBoeV9tb2RlIHBoeV9tb2RlOworCXN0cnVjdCBjbGsgKm1haW47CisJ c3RydWN0IGNsayAqbWN1OworCXN0cnVjdCBjbGsgKnVuaXZwbGw7CisJc3RydWN0IHJlZ3VsYXRv ciAqdmJ1czsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgdmJ1c19uYjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWRfbmI7Cit9OworCitzdGF0aWMg aW50IG10a19tdXNiX2Nsa3NfZ2V0KHN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSkKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBnbHVlLT5kZXY7CisKKwlnbHVlLT5tYWluID0gZGV2bV9jbGtfZ2V0KGRl diwgIm1haW4iKTsKKwlpZiAoSVNfRVJSKGdsdWUtPm1haW4pKSB7CisJCWRldl9lcnIoZGV2LCAi ZmFpbCB0byBnZXQgbWFpbiBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGdsdWUtPm1haW4p OworCX0KKworCWdsdWUtPm1jdSA9IGRldm1fY2xrX2dldChkZXYsICJtY3UiKTsKKwlpZiAoSVNf RVJSKGdsdWUtPm1jdSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCBtY3UgY2xvY2tc biIpOworCQlyZXR1cm4gUFRSX0VSUihnbHVlLT5tY3UpOworCX0KKworCWdsdWUtPnVuaXZwbGwg PSBkZXZtX2Nsa19nZXQoZGV2LCAidW5pdnBsbCIpOworCWlmIChJU19FUlIoZ2x1ZS0+dW5pdnBs bCkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1bml2cGxsIGNsb2NrXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZ2x1ZS0+dW5pdnBsbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgbXRrX211c2JfY2xrc19lbmFibGUoc3RydWN0IG10a19nbHVlICpnbHVlKQorewor CWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZ2x1ZS0+bWFpbik7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGdsdWUtPmRldiwgImZhaWxlZCB0byBlbmFibGUgbWFpbiBjbG9j a1xuIik7CisJCWdvdG8gZXJyX21haW5fY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShnbHVlLT5tY3UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihnbHVlLT5kZXYsICJmYWls ZWQgdG8gZW5hYmxlIG1jdSBjbG9ja1xuIik7CisJCWdvdG8gZXJyX21jdV9jbGs7CisJfQorCisJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGdsdWUtPnVuaXZwbGwpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihnbHVlLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHVuaXZwbGwgY2xvY2tcbiIpOwor CQlnb3RvIGVycl91bml2cGxsX2NsazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VuaXZwbGxf Y2xrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShnbHVlLT5tY3UpOworZXJyX21jdV9jbGs6CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPm1haW4pOworZXJyX21haW5fY2xrOgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19tdXNiX2Nsa3NfZGlzYWJsZShzdHJ1Y3QgbXRr X2dsdWUgKmdsdWUpCit7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPnVuaXZwbGwpOwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShnbHVlLT5tY3UpOworCWNsa19kaXNhYmxlX3VucHJlcGFy ZShnbHVlLT5tYWluKTsKK30KKworc3RhdGljIHZvaWQgbXRrX211c2Jfc2V0X3ZidXMoc3RydWN0 IG11c2IgKm11c2IsIGludCBpc19vbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5j b250cm9sbGVyOworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYt PnBhcmVudCk7CisJaW50IHJldDsKKworCS8qIHZidXMgaXMgb3B0aW9uYWwgKi8KKwlpZiAoIWds dWUtPnZidXMpCisJCXJldHVybjsKKworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzLCBp c19vbj0lZFxyXG4iLCBfX2Z1bmNfXywgaXNfb24pOworCWlmIChpc19vbikgeworCQlyZXQgPSBy ZWd1bGF0b3JfZW5hYmxlKGdsdWUtPnZidXMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGds dWUtPmRldiwgImZhaWwgdG8gZW5hYmxlIHZidXMgcmVndWxhdG9yXG4iKTsKKwkJCXJldHVybjsK KwkJfQorCX0gZWxzZSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKGdsdWUtPnZidXMpOworCX0KK30K KworLyoKKyAqIHN3aXRjaCB0byBob3N0OiAtPiBNVEtfVkJVU19PRkYgLS0+IE1US19JRF9HUk9V TkQKKyAqIHN3aXRjaCB0byBkZXZpY2U6IC0+IE1US19JRF9GTE9BVCAtLT4gTVRLX1ZCVVNfVkFM SUQKKyAqLworc3RhdGljIHZvaWQgbXRrX211c2Jfc2V0X21haWxib3goc3RydWN0IG10a19nbHVl ICpnbHVlLAorCQkJCSBlbnVtIG10a192YnVzX2lkX3N0YXRlIHN0YXR1cykKK3sKKwlzdHJ1Y3Qg bXVzYiAqbXVzYiA9IGdsdWUtPm11c2I7CisJdTggZGV2Y3RsID0gMDsKKworCWRldl9kYmcoZ2x1 ZS0+ZGV2LCAibWFpbGJveCBzdGF0ZSglZClcbiIsIHN0YXR1cyk7CisJc3dpdGNoIChzdGF0dXMp IHsKKwljYXNlIE1US19JRF9HUk9VTkQ6CisJCXBoeV9wb3dlcl9vbihnbHVlLT5waHkpOworCQlk ZXZjdGwgPSByZWFkYihtdXNiLT5tcmVncyArIE1VU0JfREVWQ1RMKTsKKwkJbXVzYi0+eGNlaXYt Pm90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfQV9XQUlUX1ZSSVNFOworCQltdGtfbXVzYl9zZXRfdmJ1 cyhtdXNiLCAxKTsKKwkJZ2x1ZS0+cGh5X21vZGUgPSBQSFlfTU9ERV9VU0JfSE9TVDsKKwkJcGh5 X3NldF9tb2RlKGdsdWUtPnBoeSwgZ2x1ZS0+cGh5X21vZGUpOworCQlkZXZjdGwgfD0gTVVTQl9E RVZDVExfU0VTU0lPTjsKKwkJbXVzYl93cml0ZWIobXVzYi0+bXJlZ3MsIE1VU0JfREVWQ1RMLCBk ZXZjdGwpOworCQlNVVNCX0hTVF9NT0RFKG11c2IpOworCQlicmVhazsKKwkvKgorCSAqIE1US19J RF9GTE9BVCBwcm9jZXNzIGlzIHRoZSBzYW1lIGFzIE1US19WQlVTX1ZBTElECisJICogZXhjZXB0 IHRoYXQgdHVybiBvZmYgVkJVUworCSAqLworCWNhc2UgTVRLX0lEX0ZMT0FUOgorCQltdGtfbXVz Yl9zZXRfdmJ1cyhtdXNiLCAwKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBNVEtfVkJV U19PRkY6CisJCW11c2ItPnhjZWl2LT5vdGctPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKKwkJ ZGV2Y3RsICY9IH5NVVNCX0RFVkNUTF9TRVNTSU9OOworCQltdXNiX3dyaXRlYihtdXNiLT5tcmVn cywgTVVTQl9ERVZDVEwsIGRldmN0bCk7CisJCXBoeV9wb3dlcl9vZmYoZ2x1ZS0+cGh5KTsKKwkJ YnJlYWs7CisJY2FzZSBNVEtfVkJVU19WQUxJRDoKKwkJcGh5X3Bvd2VyX29uKGdsdWUtPnBoeSk7 CisJCWdsdWUtPnBoeV9tb2RlID0gUEhZX01PREVfVVNCX0RFVklDRTsKKwkJcGh5X3NldF9tb2Rl KGdsdWUtPnBoeSwgZ2x1ZS0+cGh5X21vZGUpOworCQlNVVNCX0RFVl9NT0RFKG11c2IpOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGdsdWUtPmRldiwgImludmFsaWQgc3RhdGVcbiIp OworCX0KK30KKworc3RhdGljIGludCBtdGtfbXVzYl9pZF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlz dHJ1Y3QgbXRrX2dsdWUgKmdsdWUgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBtdGtfZ2x1ZSwg aWRfbmIpOworCisJaWYgKGV2ZW50KQorCQltdGtfbXVzYl9zZXRfbWFpbGJveChnbHVlLCBNVEtf SURfR1JPVU5EKTsKKwllbHNlCisJCW10a19tdXNiX3NldF9tYWlsYm94KGdsdWUsIE1US19JRF9G TE9BVCk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBpbnQgbXRrX211c2Jf dmJ1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgdW5zaWduZWQg bG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGNvbnRh aW5lcl9vZihuYiwgc3RydWN0IG10a19nbHVlLCB2YnVzX25iKTsKKworCWlmIChldmVudCkKKwkJ bXRrX211c2Jfc2V0X21haWxib3goZ2x1ZSwgTVRLX1ZCVVNfVkFMSUQpOworCWVsc2UKKwkJbXRr X211c2Jfc2V0X21haWxib3goZ2x1ZSwgTVRLX1ZCVVNfT0ZGKTsKKworCXJldHVybiBOT1RJRllf RE9ORTsKK30KKworc3RhdGljIHZvaWQgbXRrX290Z19zd2l0Y2hfaW5pdChzdHJ1Y3QgbXRrX2ds dWUgKmdsdWUpCit7CisJaW50IHJldDsKKworCS8qIGV4dGNvbiBpcyBvcHRpb25hbCAqLworCWlm ICghZ2x1ZS0+ZWRldikKKwkJcmV0dXJuOworCisJZ2x1ZS0+dmJ1c19uYi5ub3RpZmllcl9jYWxs ID0gbXRrX211c2JfdmJ1c19ub3RpZmllcjsKKwlyZXQgPSBkZXZtX2V4dGNvbl9yZWdpc3Rlcl9u b3RpZmllcihnbHVlLT5kZXYsIGdsdWUtPmVkZXYsIEVYVENPTl9VU0IsCisJCQkJCSAgICAmZ2x1 ZS0+dmJ1c19uYik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIG5vdGlmaWVyIGZvciBVU0JcbiIpOworCisJZ2x1ZS0+aWRfbmIubm90aWZp ZXJfY2FsbCA9IG10a19tdXNiX2lkX25vdGlmaWVyOworCXJldCA9IGRldm1fZXh0Y29uX3JlZ2lz dGVyX25vdGlmaWVyKGdsdWUtPmRldiwgZ2x1ZS0+ZWRldiwKKwkJCQkJICAgIEVYVENPTl9VU0Jf SE9TVCwgJmdsdWUtPmlkX25iKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihnbHVlLT5kZXYs ICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZpZXIgZm9yIFVTQi1IT1NUXG4iKTsKKworCWRldl9k YmcoZ2x1ZS0+ZGV2LCAiRVhUQ09OX1VTQjogJWQsIEVYVENPTl9VU0JfSE9TVDogJWRcbiIsCisJ CWV4dGNvbl9nZXRfc3RhdGUoZ2x1ZS0+ZWRldiwgRVhUQ09OX1VTQiksCisJCWV4dGNvbl9nZXRf c3RhdGUoZ2x1ZS0+ZWRldiwgRVhUQ09OX1VTQl9IT1NUKSk7CisKKwkvKiBkZWZhdWx0IGFzIGhv c3QsIHN3aXRjaCB0byBkZXZpY2UgbW9kZSBpZiBuZWVkZWQgKi8KKwlpZiAoZXh0Y29uX2dldF9z dGF0ZShnbHVlLT5lZGV2LCBFWFRDT05fVVNCX0hPU1QpID09IGZhbHNlKQorCQltdGtfbXVzYl9z ZXRfbWFpbGJveChnbHVlLCBNVEtfSURfRkxPQVQpOworCWlmIChleHRjb25fZ2V0X3N0YXRlKGds dWUtPmVkZXYsIEVYVENPTl9VU0IpID09IHRydWUpCisJCW10a19tdXNiX3NldF9tYWlsYm94KGds dWUsIE1US19WQlVTX1ZBTElEKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGdlbmVyaWNfaW50 ZXJydXB0KGludCBpcnEsIHZvaWQgKl9faGNpKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ aXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisJc3RydWN0IG11c2IgKm11c2IgPSBfX2hj aTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CisJbXVzYi0+aW50 X3VzYiA9IG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlVTQikgJgorCSAgICBtdXNi X3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0lOVFJVU0JFKTsKKwltdXNiLT5pbnRfdHggPSBtdXNi X3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJUWCkKKwkgICAgJiBtdXNiX3JlYWR3KG11c2It Pm1yZWdzLCBNVVNCX0lOVFJUWEUpOworCW11c2ItPmludF9yeCA9IG11c2JfcmVhZHcobXVzYi0+ bXJlZ3MsIE1VU0JfSU5UUlJYKQorCSAgICAmIG11c2JfcmVhZHcobXVzYi0+bXJlZ3MsIE1VU0Jf SU5UUlJYRSk7CisJLyogTWVkaWFUZWsgY29udHJvbGxlciBpbnRlcnJ1cHQgc3RhdHVzIGlzIFcx QyAqLworCW11c2JfY2xlYXJ3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJSWCk7CisJbXVzYl9jbGVh cncobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlRYKTsKKwltdXNiX2NsZWFyYihtdXNiLT5tcmVncywg TVVTQl9JTlRSVVNCKTsKKworCWlmIChtdXNiLT5pbnRfdXNiIHx8IG11c2ItPmludF90eCB8fCBt dXNiLT5pbnRfcngpCisJCXJldHZhbCA9IG11c2JfaW50ZXJydXB0KG11c2IpOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsK K30KKworc3RhdGljIGlycXJldHVybl90IG10a19tdXNiX2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCit7CisJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisJc3RydWN0IG11 c2IgKm11c2IgPSAoc3RydWN0IG11c2IgKilkZXZfaWQ7CisJdTMyIGwxX2ludHM7CisKKwlsMV9p bnRzID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgVVNCX0wxSU5UUykgJgorCQkJbXVzYl9yZWFk bChtdXNiLT5tcmVncywgVVNCX0wxSU5UTSk7CisKKwlpZiAobDFfaW50cyAmIChUWF9JTlRfU1RB VFVTIHwgUlhfSU5UX1NUQVRVUyB8IFVTQkNPTV9JTlRfU1RBVFVTKSkKKwkJcmV0dmFsID0gZ2Vu ZXJpY19pbnRlcnJ1cHQoaXJxLCBtdXNiKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JTlZF TlRSQV9ETUEpCisJaWYgKGwxX2ludHMgJiBETUFfSU5UX1NUQVRVUykKKwkJcmV0dmFsID0gZG1h X2NvbnRyb2xsZXJfaXJxKGlycSwgbXVzYi0+ZG1hX2NvbnRyb2xsZXIpOworI2VuZGlmCisJcmV0 dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBtdGtfbXVzYl9idXNjdGxfb2Zmc2V0KHU4IGVw bnVtLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBNVEtfTVVTQl9UWEZVTkNBRERSICsgb2Zmc2V0 ICsgOCAqIGVwbnVtOworfQorCitzdGF0aWMgdTggbXRrX211c2JfY2xlYXJiKHZvaWQgX19pb21l bSAqYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwl1OCBkYXRhOworCisJLyogVzFDICov CisJZGF0YSA9IG11c2JfcmVhZGIoYWRkciwgb2Zmc2V0KTsKKwltdXNiX3dyaXRlYihhZGRyLCBv ZmZzZXQsIGRhdGEpOworCXJldHVybiBtdXNiX3JlYWRiKGFkZHIsIG9mZnNldCk7Cit9CisKK3N0 YXRpYyB1MTYgbXRrX211c2JfY2xlYXJ3KHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50 IG9mZnNldCkKK3sKKwl1MTYgZGF0YTsKKworCS8qIFcxQyAqLworCWRhdGEgPSBtdXNiX3JlYWR3 KGFkZHIsIG9mZnNldCk7CisJbXVzYl93cml0ZXcoYWRkciwgb2Zmc2V0LCBkYXRhKTsKKwlyZXR1 cm4gbXVzYl9yZWFkdyhhZGRyLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IG10a19tdXNiX2lu aXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29u dHJvbGxlcjsKKwlzdHJ1Y3QgbXRrX2dsdWUgKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5w YXJlbnQpOworCWludCByZXQ7CisKKwlnbHVlLT5tdXNiID0gbXVzYjsKKwltdXNiLT5waHkgPSBn bHVlLT5waHk7CisJbXVzYi0+eGNlaXYgPSBnbHVlLT54Y2VpdjsKKwltdXNiLT5pc19ob3N0ID0g ZmFsc2U7CisJbXVzYi0+aXNyID0gbXRrX211c2JfaW50ZXJydXB0OworCXJldCA9IHBoeV9pbml0 KGdsdWUtPnBoeSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHBoeV9wb3dl cl9vbihnbHVlLT5waHkpOworCWlmIChyZXQpIHsKKwkJcGh5X2V4aXQoZ2x1ZS0+cGh5KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlwaHlfc2V0X21vZGUoZ2x1ZS0+cGh5LCBnbHVlLT5waHlfbW9k ZSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfSU5WRU5UUkFfRE1BKQorCW11c2Jfd3JpdGVs KG11c2ItPm1yZWdzLCBNVVNCX0hTRE1BX0lOVFIsCisJCSAgICBETUFfSU5UUl9TVEFUVVNfTVNL IHwgRE1BX0lOVFJfVU5NQVNLX1NFVF9NU0spOworI2VuZGlmCisJbXVzYl93cml0ZWwobXVzYi0+ bXJlZ3MsIFVTQl9MMUlOVE0sIFRYX0lOVF9TVEFUVVMgfCBSWF9JTlRfU1RBVFVTIHwKKwkJICAg IFVTQkNPTV9JTlRfU1RBVFVTIHwgRE1BX0lOVF9TVEFUVVMpOworCXJldHVybiAwOworfQorCitz dGF0aWMgdTE2IG10a19tdXNiX2dldF90b2dnbGUoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNf b3V0KQoreworCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNiOworCXU4IGVwbnVt ID0gcWgtPmh3X2VwLT5lcG51bTsKKwl1MTYgdG9nZ2xlOworCisJaWYgKGlzX291dCkKKwkJdG9n Z2xlID0gbXVzYl9yZWFkdyhtdXNiLT5tcmVncywgTVVTQl9UWFRPRyk7CisJZWxzZQorCQl0b2dn bGUgPSBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX1JYVE9HKTsKKworCXJldHVybiB0b2dn bGUgJiAoMSA8PCBlcG51bSk7Cit9CisKK3N0YXRpYyB1MTYgbXRrX211c2Jfc2V0X3RvZ2dsZShz dHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1 Y3QgbXVzYiAqbXVzYiA9IHFoLT5od19lcC0+bXVzYjsKKwl1OCBlcG51bSA9IHFoLT5od19lcC0+ ZXBudW07CisJdTE2IHRvZ2dsZTsKKworCXRvZ2dsZSA9IHVzYl9nZXR0b2dnbGUodXJiLT5kZXYs IHFoLT5lcG51bSwgaXNfb3V0KTsKKworCWlmIChpc19vdXQpIHsKKwkJbXVzYl93cml0ZXcobXVz Yi0+bXJlZ3MsIE1VU0JfVFhUT0dFTiwgKDEgPDwgZXBudW0pKTsKKwkJbXVzYl93cml0ZXcobXVz Yi0+bXJlZ3MsIE1VU0JfVFhUT0csICh0b2dnbGUgPDwgZXBudW0pKTsKKwl9IGVsc2UgeworCQlt dXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9SWFRPR0VOLCAoMSA8PCBlcG51bSkpOworCQlt dXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9SWFRPRywgKHRvZ2dsZSA8PCBlcG51bSkpOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19tdXNiX3NldF9tb2RlKHN0cnVj dCBtdXNiICptdXNiLCB1OCBtb2RlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNv bnRyb2xsZXI7CisJc3RydWN0IG10a19nbHVlICpnbHVlID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ cGFyZW50KTsKKwllbnVtIHBoeV9tb2RlIG5ld19tb2RlOworCisJc3dpdGNoIChtb2RlKSB7CisJ Y2FzZSBNVVNCX0hPU1Q6CisJCW5ld19tb2RlID0gUEhZX01PREVfVVNCX0hPU1Q7CisJCW10a19t dXNiX3NldF92YnVzKG11c2IsIDEpOworCQlicmVhazsKKwljYXNlIE1VU0JfUEVSSVBIRVJBTDoK KwkJbmV3X21vZGUgPSBQSFlfTU9ERV9VU0JfREVWSUNFOworCQlicmVhazsKKwljYXNlIE1VU0Jf T1RHOgorCQluZXdfbW9kZSA9IFBIWV9NT0RFX1VTQl9IT1NUOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXItPnBhcmVudCwKKwkJCSJFcnJvciByZXF1ZXN0 ZWQgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCWlmIChnbHVlLT5waHlfbW9kZSA9PSBuZXdfbW9kZSkKKwkJcmV0dXJuIDA7CisK KwltdGtfbXVzYl9zZXRfbWFpbGJveChnbHVlLCBNVEtfSURfR1JPVU5EKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBtdGtfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CisJc3RydWN0IG10a19nbHVlICpn bHVlID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKKworCXBoeV9wb3dlcl9vZmYoZ2x1 ZS0+cGh5KTsKKwlwaHlfZXhpdChnbHVlLT5waHkpOworCW10a19tdXNiX2Nsa3NfZGlzYWJsZShn bHVlKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUo ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdXNiX3BsYXRmb3Jt X29wcyBtdGtfbXVzYl9vcHMgPSB7CisJLnF1aXJrcyA9IE1VU0JfRE1BX0lOVkVOVFJBLAorCS5p bml0ID0gbXRrX211c2JfaW5pdCwKKwkuZ2V0X3RvZ2dsZSA9IG10a19tdXNiX2dldF90b2dnbGUs CisJLnNldF90b2dnbGUgPSBtdGtfbXVzYl9zZXRfdG9nZ2xlLAorCS5leGl0ID0gbXRrX211c2Jf ZXhpdCwKKyNpZmRlZiBDT05GSUdfVVNCX0lOVkVOVFJBX0RNQQorCS5kbWFfaW5pdCA9IG11c2Jo c19kbWFfY29udHJvbGxlcl9jcmVhdGVfbm9pcnEsCisJLmRtYV9leGl0ID0gbXVzYmhzX2RtYV9j b250cm9sbGVyX2Rlc3Ryb3ksCisjZW5kaWYKKwkuY2xlYXJiID0gbXRrX211c2JfY2xlYXJiLAor CS5jbGVhcncgPSBtdGtfbXVzYl9jbGVhcncsCisJLmJ1c2N0bF9vZmZzZXQgPSBtdGtfbXVzYl9i dXNjdGxfb2Zmc2V0LAorCS5zZXRfbW9kZSA9IG10a19tdXNiX3NldF9tb2RlLAorCS5zZXRfdmJ1 cyA9IG10a19tdXNiX3NldF92YnVzLAorfTsKKworI2RlZmluZSBNVEtfTVVTQl9NQVhfRVBfTlVN CTgKKyNkZWZpbmUgTVRLX01VU0JfUkFNX0JJVFMJMTEKKworc3RhdGljIHN0cnVjdCBtdXNiX2Zp Zm9fY2ZnIG10a19tdXNiX21vZGVfY2ZnW10gPSB7CisJeyAuaHdfZXBfbnVtID0gMSwgLnN0eWxl ID0gRklGT19UWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSAxLCAuc3R5 bGUgPSBGSUZPX1JYLCAubWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDIsIC5z dHlsZSA9IEZJRk9fVFgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gMiwg LnN0eWxlID0gRklGT19SWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSAz LCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9 IDMsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVt ID0gNCwgLnN0eWxlID0gRklGT19UWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7IC5od19lcF9u dW0gPSA0LCAuc3R5bGUgPSBGSUZPX1JYLCAubWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3X2Vw X251bSA9IDUsIC5zdHlsZSA9IEZJRk9fVFgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdf ZXBfbnVtID0gNSwgLnN0eWxlID0gRklGT19SWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7IC5o d19lcF9udW0gPSA2LCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gMTAyNCwgfSwKKwl7 IC5od19lcF9udW0gPSA2LCAuc3R5bGUgPSBGSUZPX1JYLCAubWF4cGFja2V0ID0gMTAyNCwgfSwK Kwl7IC5od19lcF9udW0gPSA3LCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gNTEyLCB9 LAorCXsgLmh3X2VwX251bSA9IDcsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSA2NCwg fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdGtfbXVzYl9o ZHJjX2NvbmZpZyA9IHsKKwkuZmlmb19jZmcgPSBtdGtfbXVzYl9tb2RlX2NmZywKKwkuZmlmb19j Zmdfc2l6ZSA9IEFSUkFZX1NJWkUobXRrX211c2JfbW9kZV9jZmcpLAorCS5tdWx0aXBvaW50ID0g dHJ1ZSwKKwkuZHluX2ZpZm8gPSB0cnVlLAorCS5udW1fZXBzID0gTVRLX01VU0JfTUFYX0VQX05V TSwKKwkucmFtX2JpdHMgPSBNVEtfTVVTQl9SQU1fQklUUywKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gbXRrX2Rldl9pbmZvID0geworCS5uYW1lID0gIm11 c2ItaGRyYyIsCisJLmlkID0gUExBVEZPUk1fREVWSURfQVVUTywKKwkuZG1hX21hc2sgPSBETUFf QklUX01BU0soMzIpLAorfTsKKworc3RhdGljIGludCBtdGtfbXVzYl9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAq cGRhdGE7CisJc3RydWN0IG10a19nbHVlICpnbHVlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Vf aW5mbyBwaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwln bHVlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpnbHVlKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFnbHVlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdsdWUtPmRldiA9IGRldjsKKwlwZGF0YSA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBk YXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG10a19tdXNiX2Nsa3NfZ2V0KGdsdWUp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlnbHVlLT52YnVzID0gZGV2bV9yZWd1bGF0 b3JfZ2V0KGRldiwgInZidXMiKTsKKwlpZiAoSVNfRVJSKGdsdWUtPnZidXMpKSB7CisJCWRldl9l cnIoZGV2LCAiZmFpbCB0byBnZXQgdmJ1c1xuIik7CisJCXJldHVybiBQVFJfRVJSKGdsdWUtPnZi dXMpOworCX0KKworCXBkYXRhLT5jb25maWcgPSAmbXRrX211c2JfaGRyY19jb25maWc7CisJcGRh dGEtPnBsYXRmb3JtX29wcyA9ICZtdGtfbXVzYl9vcHM7CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRf Ym9vbChucCwgImV4dGNvbiIpKSB7CisJCWdsdWUtPmVkZXYgPSBleHRjb25fZ2V0X2VkZXZfYnlf cGhhbmRsZShkZXYsIDApOworCQlpZiAoSVNfRVJSKGdsdWUtPmVkZXYpKSB7CisJCQlkZXZfZXJy KGRldiwgImZhaWwgdG8gZ2V0IGV4dGNvblxuIik7CisJCQlyZXR1cm4gUFRSX0VSUihnbHVlLT5l ZGV2KTsKKwkJfQorCX0KKworCXBkYXRhLT5tb2RlID0gdXNiX2dldF9kcl9tb2RlKGRldik7CisJ c3dpdGNoIChwZGF0YS0+bW9kZSkgeworCWNhc2UgVVNCX0RSX01PREVfSE9TVDoKKwkJZ2x1ZS0+ cGh5X21vZGUgPSBQSFlfTU9ERV9VU0JfSE9TVDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRFJfTU9E RV9QRVJJUEhFUkFMOgorCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9ERVZJQ0U7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXBkYXRhLT5tb2RlID0gVVNCX0RSX01PREVfT1RHOworCQkv KiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIFVTQl9EUl9NT0RFX09URzoKKwkJZ2x1ZS0+cGh5X21v ZGUgPSBQSFlfTU9ERV9VU0JfT1RHOworCQlicmVhazsKKwl9CisKKwlnbHVlLT5waHkgPSBkZXZt X29mX3BoeV9nZXRfYnlfaW5kZXgoZGV2LCBucCwgMCk7CisJaWYgKElTX0VSUihnbHVlLT5waHkp KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXR0aW5nIHBoeSAlbGRcbiIsCisJCQlQVFJf RVJSKGdsdWUtPnBoeSkpOworCQlyZXR1cm4gUFRSX0VSUihnbHVlLT5waHkpOworCX0KKworCWds dWUtPnVzYl9waHkgPSB1c2JfcGh5X2dlbmVyaWNfcmVnaXN0ZXIoKTsKKwlpZiAoSVNfRVJSKGds dWUtPnVzYl9waHkpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byByZWdpc3RlcmluZyB1c2It cGh5ICVsZFxuIiwKKwkJCVBUUl9FUlIoZ2x1ZS0+dXNiX3BoeSkpOworCQlyZXR1cm4gUFRSX0VS UihnbHVlLT51c2JfcGh5KTsKKwl9CisKKwlnbHVlLT54Y2VpdiA9IGRldm1fdXNiX2dldF9waHko ZGV2LCBVU0JfUEhZX1RZUEVfVVNCMik7CisJaWYgKElTX0VSUihnbHVlLT54Y2VpdikpIHsKKwkJ ZGV2X2VycihkZXYsICJmYWlsIHRvIGdldHRpbmcgdXNiLXBoeSAlZFxuIiwgcmV0KTsKKwkJcmV0 ID0gUFRSX0VSUihnbHVlLT54Y2Vpdik7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfdXNiX3BoeTsK Kwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBnbHVlKTsKKwlwbV9ydW50aW1lX2Vu YWJsZShkZXYpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKworCXJldCA9IG10a19tdXNi X2Nsa3NfZW5hYmxlKGdsdWUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2VuYWJsZV9jbGs7CisK KwlwaW5mbyA9IG10a19kZXZfaW5mbzsKKwlwaW5mby5wYXJlbnQgPSBkZXY7CisJcGluZm8ucmVz ID0gcGRldi0+cmVzb3VyY2U7CisJcGluZm8ubnVtX3JlcyA9IHBkZXYtPm51bV9yZXNvdXJjZXM7 CisJcGluZm8uZGF0YSA9IHBkYXRhOworCXBpbmZvLnNpemVfZGF0YSA9IHNpemVvZigqcGRhdGEp OworCisJZ2x1ZS0+bXVzYl9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnBp bmZvKTsKKwlpZiAoSVNfRVJSKGdsdWUtPm11c2JfcGRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihn bHVlLT5tdXNiX3BkZXYpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBtdXNi IGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RldmljZV9yZWdpc3RlcjsKKwl9CisK KwlpZiAocGRhdGEtPm1vZGUgPT0gVVNCX0RSX01PREVfT1RHKQorCQltdGtfb3RnX3N3aXRjaF9p bml0KGdsdWUpOworCisJcmV0dXJuIDA7CisKK2Vycl9kZXZpY2VfcmVnaXN0ZXI6CisJbXRrX211 c2JfY2xrc19kaXNhYmxlKGdsdWUpOworZXJyX2VuYWJsZV9jbGs6CisJcG1fcnVudGltZV9wdXRf c3luYyhkZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworZXJyX3VucmVnaXN0ZXJfdXNi X3BoeToKKwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihnbHVlLT51c2JfcGh5KTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19tdXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYl9waHkgPSBnbHVlLT51 c2JfcGh5OworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2x1ZS0+bXVzYl9wZGV2KTsK Kwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3Rlcih1c2JfcGh5KTsKKworCXJldHVybiAwOworfQor CisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtf bXVzYl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstbXVzYiIsfSwK Kwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfbXVzYl9tYXRjaCk7CisjZW5k aWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX211c2JfZHJpdmVyID0gewor CS5wcm9iZSA9IG10a19tdXNiX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfbXVzYl9yZW1vdmUsCisJ LmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAibXVzYi1tdGsiLAorCQkgICAub2ZfbWF0Y2hfdGFi bGUgPSBvZl9tYXRjaF9wdHIobXRrX211c2JfbWF0Y2gpLAorCX0sCit9OworCittb2R1bGVfcGxh dGZvcm1fZHJpdmVyKG10a19tdXNiX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiTWVk aWFUZWsgTVVTQiBHbHVlIExheWVyIik7CitNT0RVTEVfQVVUSE9SKCJNaW4gR3VvIDxtaW4uZ3Vv QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29y ZS5jCmluZGV4IGQ3YTQxN2IuLjVlZjg4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Iv bXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtMjc0LDYg KzI3NCwzOCBAQCBzdGF0aWMgdm9pZCBtdXNiX2RlZmF1bHRfd3JpdGV3KHZvaWQgX19pb21lbSAq YWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1MTYgZGF0YSkKIAlfX3Jhd193cml0ZXcoZGF0YSwgYWRk ciArIG9mZnNldCk7CiB9CiAKK3N0YXRpYyB1MTYgbXVzYl9kZWZhdWx0X2dldF90b2dnbGUoc3Ry dWN0IG11c2JfcWggKnFoLCBpbnQgaXNfb3V0KQoreworCXZvaWQgX19pb21lbSAqZXBpbyA9IHFo LT5od19lcC0+cmVnczsKKwl1MTYgY3NyOworCisJaWYgKGlzX291dCkKKwkJY3NyID0gbXVzYl9y ZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKSAmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOworCWVsc2UK KwkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKSAmIE1VU0JfUlhDU1JfSF9EQVRB VE9HR0xFOworCisJcmV0dXJuIGNzcjsKK30KKworc3RhdGljIHUxNiBtdXNiX2RlZmF1bHRfc2V0 X3RvZ2dsZShzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQsCisJCQkJICAgc3RydWN0IHVy YiAqdXJiKQoreworCXUxNiBjc3I7CisJdTE2IHRvZ2dsZTsKKworCXRvZ2dsZSA9IHVzYl9nZXR0 b2dnbGUodXJiLT5kZXYsIHFoLT5lcG51bSwgaXNfb3V0KTsKKworCWlmIChpc19vdXQpCisJCWNz ciA9IHRvZ2dsZSA/IChNVVNCX1RYQ1NSX0hfV1JfREFUQVRPR0dMRQorCQkJCXwgTVVTQl9UWENT Ul9IX0RBVEFUT0dHTEUpCisJCQkJOiBNVVNCX1RYQ1NSX0NMUkRBVEFUT0c7CisJZWxzZQorCQlj c3IgPSB0b2dnbGUgPyAoTVVTQl9SWENTUl9IX1dSX0RBVEFUT0dHTEUKKwkJCQl8IE1VU0JfUlhD U1JfSF9EQVRBVE9HR0xFKSA6IDA7CisKKwlyZXR1cm4gY3NyOworfQorCiAvKgogICogTG9hZCBh biBlbmRwb2ludCdzIEZJRk8KICAqLwpAQCAtMzcwLDEyICs0MDIsMTggQEAgc3RhdGljIHZvaWQg bXVzYl9kZWZhdWx0X3JlYWRfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4s IHU4ICpkc3QpCiB2b2lkICgqbXVzYl93cml0ZWIpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWdu ZWQgb2Zmc2V0LCB1OCBkYXRhKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG11c2Jfd3JpdGViKTsKIAor dTggKCptdXNiX2NsZWFyYikodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0 KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG11c2JfY2xlYXJiKTsKKwogdTE2ICgqbXVzYl9yZWFkdyko dm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpOwogRVhQT1JUX1NZTUJPTF9HUEwo bXVzYl9yZWFkdyk7CiAKIHZvaWQgKCptdXNiX3dyaXRldykodm9pZCBfX2lvbWVtICphZGRyLCB1 bnNpZ25lZCBvZmZzZXQsIHUxNiBkYXRhKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG11c2Jfd3JpdGV3 KTsKIAordTE2ICgqbXVzYl9jbGVhcncpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50 IG9mZnNldCk7CitFWFBPUlRfU1lNQk9MX0dQTChtdXNiX2NsZWFydyk7CisKIHUzMiBtdXNiX3Jl YWRsKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KQogewogCXUzMiBkYXRhID0g X19yYXdfcmVhZGwoYWRkciArIG9mZnNldCk7CkBAIC0xMDE1LDcgKzEwNTMsNiBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgbXVzYl9zdGFnZTBfaXJxKHN0cnVjdCBtdXNiICptdXNiLCB1OCBpbnRfdXNi LAogc3RhdGljIHZvaWQgbXVzYl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IG11c2IgKm11c2Ip CiB7CiAJdm9pZCBfX2lvbWVtCSptYmFzZSA9IG11c2ItPm1yZWdzOwotCXUxNgl0ZW1wOwogCiAJ LyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5UUlVT QkUsIDApOwpAQCAtMTAyNSw5ICsxMDYyLDkgQEAgc3RhdGljIHZvaWQgbXVzYl9kaXNhYmxlX2lu dGVycnVwdHMoc3RydWN0IG11c2IgKm11c2IpCiAJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfSU5U UlJYRSwgMCk7CiAKIAkvKiAgZmx1c2ggcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JdGVtcCA9IG11 c2JfcmVhZGIobWJhc2UsIE1VU0JfSU5UUlVTQik7Ci0JdGVtcCA9IG11c2JfcmVhZHcobWJhc2Us IE1VU0JfSU5UUlRYKTsKLQl0ZW1wID0gbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9JTlRSUlgpOwor CW11c2JfY2xlYXJiKG1iYXNlLCBNVVNCX0lOVFJVU0IpOworCW11c2JfY2xlYXJ3KG1iYXNlLCBN VVNCX0lOVFJUWCk7CisJbXVzYl9jbGVhcncobWJhc2UsIE1VU0JfSU5UUlJYKTsKIH0KIAogc3Rh dGljIHZvaWQgbXVzYl9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgbXVzYiAqbXVzYikKQEAgLTIy NTIsMTAgKzIyODksMTkgQEAgc3RhdGljIHZvaWQgbXVzYl9kZWFzc2VydF9yZXNldChzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCiAJCW11c2JfcmVhZGIgPSBtdXNiLT5vcHMtPnJlYWRiOwogCWlm IChtdXNiLT5vcHMtPndyaXRlYikKIAkJbXVzYl93cml0ZWIgPSBtdXNiLT5vcHMtPndyaXRlYjsK KwlpZiAobXVzYi0+b3BzLT5jbGVhcmIpCisJCW11c2JfY2xlYXJiID0gbXVzYi0+b3BzLT5jbGVh cmI7CisJZWxzZQorCQltdXNiX2NsZWFyYiA9IG11c2JfcmVhZGI7CisKIAlpZiAobXVzYi0+b3Bz LT5yZWFkdykKIAkJbXVzYl9yZWFkdyA9IG11c2ItPm9wcy0+cmVhZHc7CiAJaWYgKG11c2ItPm9w cy0+d3JpdGV3KQogCQltdXNiX3dyaXRldyA9IG11c2ItPm9wcy0+d3JpdGV3OworCWlmIChtdXNi LT5vcHMtPmNsZWFydykKKwkJbXVzYl9jbGVhcncgPSBtdXNiLT5vcHMtPmNsZWFydzsKKwllbHNl CisJCW11c2JfY2xlYXJ3ID0gbXVzYl9yZWFkdzsKIAogI2lmbmRlZiBDT05GSUdfTVVTQl9QSU9f T05MWQogCWlmICghbXVzYi0+b3BzLT5kbWFfaW5pdCB8fCAhbXVzYi0+b3BzLT5kbWFfZXhpdCkg ewpAQCAtMjI3Nyw2ICsyMzIzLDE2IEBAIHN0YXRpYyB2b2lkIG11c2JfZGVhc3NlcnRfcmVzZXQo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCWVsc2UKIAkJbXVzYi0+aW8ud3JpdGVfZmlmbyA9 IG11c2JfZGVmYXVsdF93cml0ZV9maWZvOwogCisJaWYgKG11c2ItPm9wcy0+Z2V0X3RvZ2dsZSkK KwkJbXVzYi0+aW8uZ2V0X3RvZ2dsZSA9IG11c2ItPm9wcy0+Z2V0X3RvZ2dsZTsKKwllbHNlCisJ CW11c2ItPmlvLmdldF90b2dnbGUgPSBtdXNiX2RlZmF1bHRfZ2V0X3RvZ2dsZTsKKworCWlmICht dXNiLT5vcHMtPnNldF90b2dnbGUpCisJCW11c2ItPmlvLnNldF90b2dnbGUgPSBtdXNiLT5vcHMt PnNldF90b2dnbGU7CisJZWxzZQorCQltdXNiLT5pby5zZXRfdG9nZ2xlID0gbXVzYl9kZWZhdWx0 X3NldF90b2dnbGU7CisKIAlpZiAoIW11c2ItPnhjZWl2LT5pb19vcHMpIHsKIAkJbXVzYi0+eGNl aXYtPmlvX2RldiA9IG11c2ItPmNvbnRyb2xsZXI7CiAJCW11c2ItPnhjZWl2LT5pb19wcml2ID0g bXVzYi0+bXJlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIv ZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCBkYWY1NDIyLi4wZDlhMzVmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211 c2IvbXVzYl9jb3JlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIHN0cnVjdCBtdXNiOwogc3RydWN0IG11 c2JfaHdfZXA7CiBzdHJ1Y3QgbXVzYl9lcDsKK3N0cnVjdCBtdXNiX3FoOwogCiAvKiBIZWxwZXIg ZGVmaW5lcyBmb3Igc3RydWN0IG11c2ItPmh3dmVycyAqLwogI2RlZmluZSBNVVNCX0hXVkVSU19N QUpPUih4KQkoKHggPj4gMTApICYgMHgxZikKQEAgLTExOSwxMCArMTIwLDE0IEBAIGVudW0gbXVz Yl9nX2VwMF9zdGF0ZSB7CiAgKiBAZmlmb19vZmZzZXQ6IHJldHVybnMgdGhlIGZpZm8gb2Zmc2V0 CiAgKiBAcmVhZGI6CXJlYWQgOCBiaXRzCiAgKiBAd3JpdGViOgl3cml0ZSA4IGJpdHMKKyAqIEBj bGVhcmI6CWNvdWxkIGJlIGNsZWFyLW9uLXJlYWRiIG9yIFcxQwogICogQHJlYWR3OglyZWFkIDE2 IGJpdHMKICAqIEB3cml0ZXc6CXdyaXRlIDE2IGJpdHMKKyAqIEBjbGVhcnc6CWNvdWxkIGJlIGNs ZWFyLW9uLXJlYWR3IG9yIFcxQwogICogQHJlYWRfZmlmbzoJcmVhZHMgdGhlIGZpZm8KICAqIEB3 cml0ZV9maWZvOgl3cml0ZXMgdG8gZmlmbworICogQGdldF90b2dnbGU6CXBsYXRmb3JtIHNwZWNp ZmljIGdldCB0b2dnbGUgZnVuY3Rpb24KKyAqIEBzZXRfdG9nZ2xlOglwbGF0Zm9ybSBzcGVjaWZp YyBzZXQgdG9nZ2xlIGZ1bmN0aW9uCiAgKiBAZG1hX2luaXQ6CXBsYXRmb3JtIHNwZWNpZmljIGRt YSBpbml0IGZ1bmN0aW9uCiAgKiBAZG1hX2V4aXQ6CXBsYXRmb3JtIHNwZWNpZmljIGRtYSBleGl0 IGZ1bmN0aW9uCiAgKiBAaW5pdDoJdHVybnMgb24gY2xvY2tzLCBzZXRzIHVwIHBsYXRmb3JtLXNw ZWNpZmljIHJlZ2lzdGVycywgZXRjCkBAIC0xNjMsMTAgKzE2OCwxNCBAQCBzdHJ1Y3QgbXVzYl9w bGF0Zm9ybV9vcHMgewogCXUzMgkoKmJ1c2N0bF9vZmZzZXQpKHU4IGVwbnVtLCB1MTYgb2Zmc2V0 KTsKIAl1OAkoKnJlYWRiKSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7CiAJ dm9pZAkoKndyaXRlYikodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHU4IGRh dGEpOworCXU4CSgqY2xlYXJiKSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGludCBvZmZz ZXQpOwogCXUxNgkoKnJlYWR3KSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7 CiAJdm9pZAkoKndyaXRldykodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHUx NiBkYXRhKTsKKwl1MTYJKCpjbGVhcncpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50 IG9mZnNldCk7CiAJdm9pZAkoKnJlYWRfZmlmbykoc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1 MTYgbGVuLCB1OCAqYnVmKTsKIAl2b2lkCSgqd3JpdGVfZmlmbykoc3RydWN0IG11c2JfaHdfZXAg Kmh3X2VwLCB1MTYgbGVuLCBjb25zdCB1OCAqYnVmKTsKKwl1MTYJKCpnZXRfdG9nZ2xlKShzdHJ1 Y3QgbXVzYl9xaCAqcWgsIGludCBpc19vdXQpOworCXUxNgkoKnNldF90b2dnbGUpKHN0cnVjdCBt dXNiX3FoICpxaCwgaW50IGlzX291dCwgc3RydWN0IHVyYiAqdXJiKTsKIAlzdHJ1Y3QgZG1hX2Nv bnRyb2xsZXIgKgogCQkoKmRtYV9pbml0KSAoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21l bSAqYmFzZSk7CiAJdm9pZAkoKmRtYV9leGl0KShzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKmMpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oIGIvZHJpdmVycy91c2IvbXVz Yi9tdXNiX2RtYS5oCmluZGV4IDhmNjAyNzEuLjA1MTAzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dXNiL211c2IvbXVzYl9kbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKQEAg LTM1LDYgKzM1LDEyIEBACiAgKiAgICB3aGV0aGVyIHNoYXJlZCB3aXRoIHRoZSBJbnZlbnRyYSBj b3JlIG9yIHNlcGFyYXRlLgogICovCiAKKyNkZWZpbmUgTVVTQl9IU0RNQV9CQVNFCQkweDIwMAor I2RlZmluZSBNVVNCX0hTRE1BX0lOVFIJCShNVVNCX0hTRE1BX0JBU0UgKyAwKQorI2RlZmluZSBN VVNCX0hTRE1BX0NPTlRST0wJCTB4NAorI2RlZmluZSBNVVNCX0hTRE1BX0FERFJFU1MJCTB4OAor I2RlZmluZSBNVVNCX0hTRE1BX0NPVU5UCQkweGMKKwogI2RlZmluZQlETUFfQUREUl9JTlZBTElE CSh+KGRtYV9hZGRyX3QpMCkKIAogI2lmZGVmIENPTkZJR19NVVNCX1BJT19PTkxZCkBAIC0xOTEs NiArMTk3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG11c2JfZG1hX2NvbnRyb2xsZXJfZGVzdHJv eShzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKmQpIHsgfQogZXh0ZXJuIHN0cnVjdCBkbWFfY29udHJv bGxlciAqCiBtdXNiaHNfZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2 b2lkIF9faW9tZW0gKmJhc2UpOwogZXh0ZXJuIHZvaWQgbXVzYmhzX2RtYV9jb250cm9sbGVyX2Rl c3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKTsKK2V4dGVybiBzdHJ1Y3QgZG1hX2NvbnRy b2xsZXIgKgorbXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZV9ub2lycShzdHJ1Y3QgbXVzYiAq bXVzYiwgdm9pZCBfX2lvbWVtICpiYXNlKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBkbWFfY29udHJv bGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKTsKIAogZXh0ZXJuIHN0cnVjdCBk bWFfY29udHJvbGxlciAqCiB0dXNiX2RtYV9jb250cm9sbGVyX2NyZWF0ZShzdHJ1Y3QgbXVzYiAq bXVzYiwgdm9pZCBfX2lvbWVtICpiYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2Iv bXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IGI1OWNlOWEu LmI5N2ZiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIv ZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtMjg2LDI2ICsyODYsNiBAQCBzdGF0aWMg dm9pZCBtdXNiX2dpdmViYWNrKHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgdXJiICp1cmIsIGlu dCBzdGF0dXMpCiAJc3Bpbl9sb2NrKCZtdXNiLT5sb2NrKTsKIH0KIAotLyogRm9yIGJ1bGsvaW50 ZXJydXB0IGVuZHBvaW50cyBvbmx5ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXVzYl9zYXZlX3Rv Z2dsZShzdHJ1Y3QgbXVzYl9xaCAqcWgsIGludCBpc19pbiwKLQkJCQkgICAgc3RydWN0IHVyYiAq dXJiKQotewotCXZvaWQgX19pb21lbQkJKmVwaW8gPSBxaC0+aHdfZXAtPnJlZ3M7Ci0JdTE2CQkJ Y3NyOwotCi0JLyoKLQkgKiBGSVhNRTogdGhlIGN1cnJlbnQgTWVudG9yIERNQSBjb2RlIHNlZW1z IHRvIGhhdmUKLQkgKiBwcm9ibGVtcyBnZXR0aW5nIHRvZ2dsZSBjb3JyZWN0LgotCSAqLwotCi0J aWYgKGlzX2luKQotCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpICYgTVVTQl9S WENTUl9IX0RBVEFUT0dHTEU7Ci0JZWxzZQotCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0Jf VFhDU1IpICYgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7Ci0KLQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ ZGV2LCBxaC0+ZXBudW0sICFpc19pbiwgY3NyID8gMSA6IDApOwotfQotCiAvKgogICogQWR2YW5j ZSB0aGlzIGhhcmR3YXJlIGVuZHBvaW50J3MgcXVldWUsIGNvbXBsZXRpbmcgdGhlIHNwZWNpZmll ZCBVUkIgYW5kCiAgKiBhZHZhbmNpbmcgdG8gZWl0aGVyIHRoZSBuZXh0IFVSQiBxdWV1ZWQgdG8g dGhhdCBxaCwgb3IgZWxzZSBpbnZhbGlkYXRpbmcKQEAgLTMyMCw2ICszMDAsNyBAQCBzdGF0aWMg dm9pZCBtdXNiX2FkdmFuY2Vfc2NoZWR1bGUoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCB1cmIg KnVyYiwKIAlzdHJ1Y3QgbXVzYl9od19lcAkqZXAgPSBxaC0+aHdfZXA7CiAJaW50CQkJcmVhZHkg PSBxaC0+aXNfcmVhZHk7CiAJaW50CQkJc3RhdHVzOworCXUxNgkJCXRvZ2dsZTsKIAogCXN0YXR1 cyA9ICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpID8gMCA6IHVyYi0+c3RhdHVzOwogCkBA IC0zMjcsNyArMzA4LDggQEAgc3RhdGljIHZvaWQgbXVzYl9hZHZhbmNlX3NjaGVkdWxlKHN0cnVj dCBtdXNiICptdXNiLCBzdHJ1Y3QgdXJiICp1cmIsCiAJc3dpdGNoIChxaC0+dHlwZSkgewogCWNh c2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoK LQkJbXVzYl9zYXZlX3RvZ2dsZShxaCwgaXNfaW4sIHVyYik7CisJCXRvZ2dsZSA9IG11c2ItPmlv LmdldF90b2dnbGUocWgsICFpc19pbik7CisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHFoLT5l cG51bSwgIWlzX2luLCB0b2dnbGUgPyAxIDogMCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBP SU5UX1hGRVJfSVNPQzoKIAkJaWYgKHN0YXR1cyA9PSAwICYmIHVyYi0+ZXJyb3JfY291bnQpCkBA IC03NzIsMTMgKzc1NCw4IEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJvZ3JhbShzdHJ1Y3QgbXVz YiAqbXVzYiwgdTggZXBudW0sCiAJCQkJCSk7CiAJCQljc3IgfD0gTVVTQl9UWENTUl9NT0RFOwog Ci0JCQlpZiAoIWh3X2VwLT50eF9kb3VibGVfYnVmZmVyZWQpIHsKLQkJCQlpZiAodXNiX2dldHRv Z2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCAxKSkKLQkJCQkJY3NyIHw9IE1VU0JfVFhDU1JfSF9X Ul9EQVRBVE9HR0xFCi0JCQkJCQl8IE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOwotCQkJCWVsc2UK LQkJCQkJY3NyIHw9IE1VU0JfVFhDU1JfQ0xSREFUQVRPRzsKLQkJCX0KKwkJCWlmICghaHdfZXAt PnR4X2RvdWJsZV9idWZmZXJlZCkKKwkJCQljc3IgfD0gbXVzYi0+aW8uc2V0X3RvZ2dsZShxaCwg aXNfb3V0LCB1cmIpOwogCiAJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYQ1NSLCBjc3IpOwog CQkJLyogUkVWSVNJVCBtYXkgbmVlZCB0byBjbGVhciBGTFVTSEZJRk8gLi4uICovCkBAIC04NjAs MTcgKzgzNywxMiBAQCBzdGF0aWMgdm9pZCBtdXNiX2VwX3Byb2dyYW0oc3RydWN0IG11c2IgKm11 c2IsIHU4IGVwbnVtLAogCiAJLyogSU4vcmVjZWl2ZSAqLwogCX0gZWxzZSB7Ci0JCXUxNgljc3I7 CisJCXUxNiBjc3IgPSAwOwogCiAJCWlmIChod19lcC0+cnhfcmVpbml0KSB7CiAJCQltdXNiX3J4 X3JlaW5pdChtdXNiLCBxaCwgZXBudW0pOworCQkJY3NyIHw9IG11c2ItPmlvLnNldF90b2dnbGUo cWgsIGlzX291dCwgdXJiKTsKIAotCQkJLyogaW5pdCBuZXcgc3RhdGU6IHRvZ2dsZSBhbmQgTllF VCwgbWF5YmUgRE1BIGxhdGVyICovCi0JCQlpZiAodXNiX2dldHRvZ2dsZSh1cmItPmRldiwgcWgt PmVwbnVtLCAwKSkKLQkJCQljc3IgPSBNVVNCX1JYQ1NSX0hfV1JfREFUQVRPR0dMRQotCQkJCQl8 IE1VU0JfUlhDU1JfSF9EQVRBVE9HR0xFOwotCQkJZWxzZQotCQkJCWNzciA9IDA7CiAJCQlpZiAo cWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKQogCQkJCWNzciB8PSBNVVNCX1JYQ1NS X0RJU05ZRVQ7CiAKQEAgLTkzMyw2ICs5MDUsNyBAQCBzdGF0aWMgdm9pZCBtdXNiX2J1bGtfbmFr X3RpbWVvdXQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX2h3X2VwICplcCwKIAl2b2lk IF9faW9tZW0JCSplcGlvID0gZXAtPnJlZ3M7CiAJc3RydWN0IG11c2JfcWgJCSpjdXJfcWgsICpu ZXh0X3FoOwogCXUxNgkJCXJ4X2NzciwgdHhfY3NyOworCXUxNgkJCXRvZ2dsZTsKIAogCW11c2Jf ZXBfc2VsZWN0KG1iYXNlLCBlcC0+ZXBudW0pOwogCWlmIChpc19pbikgewpAQCAtOTcwLDcgKzk0 Myw4IEBAIHN0YXRpYyB2b2lkIG11c2JfYnVsa19uYWtfdGltZW91dChzdHJ1Y3QgbXVzYiAqbXVz Yiwgc3RydWN0IG11c2JfaHdfZXAgKmVwLAogCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGRtYS0+ YWN0dWFsX2xlbjsKIAkJCWRtYS0+YWN0dWFsX2xlbiA9IDBMOwogCQl9Ci0JCW11c2Jfc2F2ZV90 b2dnbGUoY3VyX3FoLCBpc19pbiwgdXJiKTsKKwkJdG9nZ2xlID0gbXVzYi0+aW8uZ2V0X3RvZ2ds ZShjdXJfcWgsICFpc19pbik7CisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIGN1cl9xaC0+ZXBu dW0sICFpc19pbiwgdG9nZ2xlID8gMSA6IDApOwogCiAJCWlmIChpc19pbikgewogCQkJLyogbW92 ZSBjdXJfcWggdG8gZW5kIG9mIHF1ZXVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNi L211c2JfaW8uaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCmluZGV4IDM0ZWEyYTQuLjcy MDA1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCisrKyBiL2RyaXZl cnMvdXNiL211c2IvbXVzYl9pby5oCkBAIC0yMiw2ICsyMiw4IEBACiAgKiBAcmVhZF9maWZvOglw bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byByZWFkIGZpZm8KICAqIEB3cml0ZV9maWZvOglw bGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byB3cml0ZSBmaWZvCiAgKiBAYnVzY3RsX29mZnNl dDogcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24gdG8gZ2V0IGJ1c2N0bCBvZmZzZXQKKyAqIEBn ZXRfdG9nZ2xlOiBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byBnZXQgdG9nZ2xlCisgKiBA c2V0X3RvZ2dsZTogcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24gdG8gc2V0IHRvZ2dsZQogICov CiBzdHJ1Y3QgbXVzYl9pbyB7CiAJdTMyCSgqZXBfb2Zmc2V0KSh1OCBlcG51bSwgdTE2IG9mZnNl dCk7CkBAIC0zMCwxMyArMzIsMTcgQEAgc3RydWN0IG11c2JfaW8gewogCXZvaWQJKCpyZWFkX2Zp Zm8pKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmJ1Zik7CiAJdm9pZAko KndyaXRlX2ZpZm8pKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgY29uc3QgdTgg KmJ1Zik7CiAJdTMyCSgqYnVzY3RsX29mZnNldCkodTggZXBudW0sIHUxNiBvZmZzZXQpOworCXUx NgkoKmdldF90b2dnbGUpKHN0cnVjdCBtdXNiX3FoICpxaCwgaW50IGlzX291dCk7CisJdTE2CSgq c2V0X3RvZ2dsZSkoc3RydWN0IG11c2JfcWggKnFoLCBpbnQgaXNfb3V0LCBzdHJ1Y3QgdXJiICp1 cmIpOwogfTsKIAogLyogRG8gbm90IGFkZCBuZXcgZW50cmllcyBoZXJlLCBhZGQgdGhlbSB0aGUg c3RydWN0IG11c2JfaW8gaW5zdGVhZCAqLwogZXh0ZXJuIHU4ICgqbXVzYl9yZWFkYikodm9pZCBf X2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgKCptdXNiX3dyaXRl Yikodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHU4IGRhdGEpOworZXh0ZXJu IHU4ICgqbXVzYl9jbGVhcmIpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50IG9mZnNl dCk7CiBleHRlcm4gdTE2ICgqbXVzYl9yZWFkdykodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25l ZCBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgKCptdXNiX3dyaXRldykodm9pZCBfX2lvbWVtICphZGRy LCB1bnNpZ25lZCBvZmZzZXQsIHUxNiBkYXRhKTsKK2V4dGVybiB1MTYgKCptdXNiX2NsZWFydyko dm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIGV4dGVybiB1MzIgbXVz Yl9yZWFkbCh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7CiBleHRlcm4gdm9p ZCBtdXNiX3dyaXRlbCh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCwgdTMyIGRh dGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVy cy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCBhNjg4ZjdmLi5kOTdhYjg5IDEwMDY0NAotLS0g YS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVz YmhzZG1hLmMKQEAgLTEwLDEyICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgIm11c2JfY29yZS5oIgot Ci0jZGVmaW5lIE1VU0JfSFNETUFfQkFTRQkJMHgyMDAKLSNkZWZpbmUgTVVTQl9IU0RNQV9JTlRS CQkoTVVTQl9IU0RNQV9CQVNFICsgMCkKLSNkZWZpbmUgTVVTQl9IU0RNQV9DT05UUk9MCQkweDQK LSNkZWZpbmUgTVVTQl9IU0RNQV9BRERSRVNTCQkweDgKLSNkZWZpbmUgTVVTQl9IU0RNQV9DT1VO VAkJMHhjCisjaW5jbHVkZSAibXVzYl9kbWEuaCIKIAogI2RlZmluZSBNVVNCX0hTRE1BX0NIQU5O RUxfT0ZGU0VUKF9iY2hhbm5lbCwgX29mZnNldCkJCVwKIAkJKE1VU0JfSFNETUFfQkFTRSArIChf YmNoYW5uZWwgPDwgNCkgKyBfb2Zmc2V0KQpAQCAtMjY4LDcgKzI2Myw3IEBAIHN0YXRpYyBpbnQg ZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogCXJldHVybiAw OwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZv aWQgKnByaXZhdGVfZGF0YSkKK2lycXJldHVybl90IGRtYV9jb250cm9sbGVyX2lycShpbnQgaXJx LCB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNv bnRyb2xsZXIgPSBwcml2YXRlX2RhdGE7CiAJc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVy LT5wcml2YXRlX2RhdGE7CkBAIC0yOTEsNiArMjg2LDkgQEAgc3RhdGljIGlycXJldHVybl90IGRt YV9jb250cm9sbGVyX2lycShpbnQgaXJxLCB2b2lkICpwcml2YXRlX2RhdGEpCiAKIAlpbnRfaHNk bWEgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwogCisJLyogY2xlYXIgcGVu ZGluZyBpbnRlcnJ1cHRzIGJ5IG1hbnVhbCAqLworCW11c2JfY2xlYXJiKG11c2ItPm1yZWdzLCBN VVNCX0hTRE1BX0lOVFIpOworCiAJaWYgKCFpbnRfaHNkbWEpIHsKIAkJbXVzYl9kYmcobXVzYiwg InNwdXJpb3VzIERNQSBpcnEiKTsKIApAQCAtMzgyLDYgKzM4MCw3IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKQogCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0dmFs OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2NvbnRyb2xsZXJfaXJxKTsKIAogdm9pZCBtdXNi aHNfZG1hX2NvbnRyb2xsZXJfZGVzdHJveShzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKmMpCiB7CkBA IC0zOTcsMTggKzM5NiwxMCBAQCB2b2lkIG11c2Joc19kbWFfY29udHJvbGxlcl9kZXN0cm95KHN0 cnVjdCBkbWFfY29udHJvbGxlciAqYykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG11c2Joc19kbWFf Y29udHJvbGxlcl9kZXN0cm95KTsKIAotc3RydWN0IGRtYV9jb250cm9sbGVyICptdXNiaHNfZG1h X2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLAotCQkJCQkJICAgIHZvaWQgX19p b21lbSAqYmFzZSkKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqZG1hX2NvbnRy b2xsZXJfYWxsb2Moc3RydWN0IG11c2IgKm11c2IsCisJCQkJCQkJdm9pZCBfX2lvbWVtICpiYXNl KQogewogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOwotCXN0cnVjdCBk ZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRf aXJxX2J5bmFtZShwZGV2LCAiZG1hIik7Ci0KLQlpZiAoaXJxIDw9IDApIHsKLQkJZGV2X2Vycihk ZXYsICJObyBETUEgaW50ZXJydXB0IGxpbmUhXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJ Y29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKCpjb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7CiAJ aWYgKCFjb250cm9sbGVyKQpAQCAtNDIyLDYgKzQxMywyNSBAQCBzdHJ1Y3QgZG1hX2NvbnRyb2xs ZXIgKm11c2Joc19kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsCiAJY29u dHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX3JlbGVhc2UgPSBkbWFfY2hhbm5lbF9yZWxlYXNl OwogCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9wcm9ncmFtID0gZG1hX2NoYW5uZWxf cHJvZ3JhbTsKIAljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfYWJvcnQgPSBkbWFfY2hh bm5lbF9hYm9ydDsKKwlyZXR1cm4gY29udHJvbGxlcjsKK30KKworc3RydWN0IGRtYV9jb250cm9s bGVyICptdXNiaHNfZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLAorCQkJ CQkJICAgIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxl ciAqY29udHJvbGxlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOwor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsK KwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRtYSIpOworCisJaWYg KGlycSA8PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiTm8gRE1BIGludGVycnVwdCBsaW5lIVxuIik7 CisJCXJldHVybiBOVUxMOworCX0KKworCWNvbnRyb2xsZXIgPSBkbWFfY29udHJvbGxlcl9hbGxv YyhtdXNiLCBiYXNlKTsKKwlpZiAoIWNvbnRyb2xsZXIpCisJCXJldHVybiBOVUxMOwogCiAJaWYg KHJlcXVlc3RfaXJxKGlycSwgZG1hX2NvbnRyb2xsZXJfaXJxLCAwLAogCQkJZGV2X25hbWUobXVz Yi0+Y29udHJvbGxlciksICZjb250cm9sbGVyLT5jb250cm9sbGVyKSkgewpAQCAtNDM2LDMgKzQ0 NiwxNiBAQCBzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKm11c2Joc19kbWFfY29udHJvbGxlcl9jcmVh dGUoc3RydWN0IG11c2IgKm11c2IsCiAJcmV0dXJuICZjb250cm9sbGVyLT5jb250cm9sbGVyOwog fQogRVhQT1JUX1NZTUJPTF9HUEwobXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZSk7CisKK3N0 cnVjdCBkbWFfY29udHJvbGxlciAqbXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZV9ub2lycShz dHJ1Y3QgbXVzYiAqbXVzYiwKKwkJCQkJCQkgIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlzdHJ1 Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlcjsKKworCWNvbnRyb2xsZXIgPSBkbWFf Y29udHJvbGxlcl9hbGxvYyhtdXNiLCBiYXNlKTsKKwlpZiAoIWNvbnRyb2xsZXIpCisJCXJldHVy biBOVUxMOworCisJcmV0dXJuICZjb250cm9sbGVyLT5jb250cm9sbGVyOworfQorRVhQT1JUX1NZ TUJPTF9HUEwobXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZV9ub2lycSk7Cg==