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: [RFC,5/5] dmaengine: ti: k3-udma: Add glue layer for non DMAengine users From: Peter Ujfalusi Message-Id: <20180924130021.20530-6-peter.ujfalusi@ti.com> Date: Mon, 24 Sep 2018 16:00:21 +0300 To: vkoul@kernel.org, dan.j.williams@intel.com Cc: dmaengine@vger.kernel.org, grygorii.strashko@ti.com List-ID: RnJvbTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KCkNlcnRh aW4gdXNlcnMgY2FuIG5vdCB1c2UgcmlnaHQgbm93IHRoZSBETUFlbmdpbmUgQVBJIGR1ZSB0byBt aXNzaW5nCmZlYXR1cmVzIGluIHRoZSBjb3JlLiBQcmltZSBleGFtcGxlIGlzIE5ldHdvcmtpbmcu CgpUaGVzZSB1c2VycyBjYW4gdXNlIHRoZSBnbHVlIGxheWVyIGludGVyZmFjZSB0byBhdm9pZCBt aXN1c2Ugb2YgRE1BZW5naW5lCkFQSSBhbmQgd2hlbiB0aGUgY29yZSBnYWlucyB0aGUgbmVlZGVk IGZlYXR1cmVzIHRoZXkgY2FuIGJlIGNvbnZlcnRlZCB0bwp1c2UgZ2VuZXJpYyBBUEkuCgpTaWdu ZWQtb2ZmLWJ5OiBHcnlnb3JpaSBTdHJhc2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29tPgpT aWduZWQtb2ZmLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgotLS0K IGRyaXZlcnMvZG1hL3RpL0tjb25maWcgICAgICAgICAgICB8ICAgIDkgKwogZHJpdmVycy9kbWEv dGkvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2RtYS90aS9rMy1uYXZzcy11 ZG1hLmMgICAgfCAxMTMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2Rt YS90aS9rMy11ZG1hLXByaXZhdGUuYyAgfCAgMTIzICsrKysKIGRyaXZlcnMvZG1hL3RpL2szLXVk bWEuYyAgICAgICAgICB8ICAgIDMgKwogZHJpdmVycy9kbWEvdGkvazMtdWRtYS5oICAgICAgICAg IHwgICAzMCArCiBpbmNsdWRlL2xpbnV4L2RtYS9rMy1uYXZzcy11ZG1hLmggfCAgMTUyICsrKysK IDcgZmlsZXMgY2hhbmdlZCwgMTQ1MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9kbWEvdGkvazMtbmF2c3MtdWRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9kbWEvdGkvazMtdWRtYS1wcml2YXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xp bnV4L2RtYS9rMy1uYXZzcy11ZG1hLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9LY29u ZmlnIGIvZHJpdmVycy9kbWEvdGkvS2NvbmZpZwppbmRleCBkYjczMzcxZGUyMDYuLjIzZGY5ZTBh MTU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvdGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2Rt YS90aS9LY29uZmlnCkBAIC00NSw1ICs0NSwxNCBAQCBjb25maWcgVElfSzNfTkFWU1NfVURNQQog CSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBUSSBVRE1BIChVbmlmaWVkIERNQSkgY29udHJvbGxl ci4gVGhpcwogCSAgRE1BIGVuZ2luZSBpcyB1c2VkIGluIEFNNjV4LgogCitjb25maWcgVElfSzNf TkFWU1NfVURNQV9HTFVFX0xBWUVSCisJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFVETUEg R2x1ZSBsYXllciBmb3Igbm9uIERNQWVuZ2luZSB1c2VycyIKKwlkZXBlbmRzIG9uIEFSQ0hfSzMg fHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBvbiBUSV9LM19OQVZTU19VRE1BCisJZGVmYXVsdCB5 CisJaGVscAorCSAgU2F5IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBLMyBOQVZTUyBETUEgZ2x1ZSBp bnRlcmZhY2UKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBUSV9ETUFfQ1JPU1NCQVIK IAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1h L3RpL01ha2VmaWxlCmluZGV4IDkxMWY3YzcyMzk3OS4uYzI1MzMzNjBjMGRlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2RtYS90aS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS90aS9NYWtlZmlsZQpA QCAtMyw0ICszLDUgQEAgb2JqLSQoQ09ORklHX1RJX0NQUEk0MSkgKz0gY3BwaTQxLm8KIG9iai0k KENPTkZJR19USV9FRE1BKSArPSBlZG1hLm8KIG9iai0kKENPTkZJR19ETUFfT01BUCkgKz0gb21h cC1kbWEubwogb2JqLSQoQ09ORklHX1RJX0szX05BVlNTX1VETUEpICs9IGszLXVkbWEubworb2Jq LSQoQ09ORklHX1RJX0szX05BVlNTX1VETUFfR0xVRV9MQVlFUikgKz0gazMtbmF2c3MtdWRtYS5v CiBvYmotJChDT05GSUdfVElfRE1BX0NST1NTQkFSKSArPSBkbWEtY3Jvc3NiYXIubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEvdGkvazMtbmF2c3MtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMt bmF2c3MtdWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDE2 MTNmZWJjODZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvdGkvazMtbmF2c3MtdWRt YS5jCkBAIC0wLDAgKzEsMTEzMyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBLMyBOQVZTUyBETUEgZ2x1ZSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5j b20KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51 eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+ CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2RtYS9rMy11ZG1hLmg+CisjaW5jbHVk ZSA8bGludXgvaXJxY2hpcC9pcnEtdGktc2NpLWludGEuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2Mv dGkvY3BwaTUuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvazMtbmF2c3MtcmluZ2FjYy5oPgor I2luY2x1ZGUgPGxpbnV4L2RtYS9rMy1uYXZzcy11ZG1hLmg+CisKKyNpbmNsdWRlICJrMy11ZG1h LmgiCisKK3N0cnVjdCBrM19uYXZfdWRtYXhfY29tbW9uIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 CisJc3RydWN0IHVkbWFfZGV2ICp1ZG1heDsKKwljb25zdCBzdHJ1Y3QgdWRtYV90aXNjaV9ybSAq dGlzY2lfcm07CisJc3RydWN0IGszX25hdl9yaW5nYWNjICpyaW5nYWNjOworCXUzMiBzcmNfdGhy ZWFkOworCXUzMiBkc3RfdGhyZWFkOworCisJdTMyICBoZGVzY19zaXplOworCWJvb2wgZXBpYjsK Kwl1MzIgIHBzZGF0YV9zaXplOworCXUzMiAgc3dkYXRhX3NpemU7Cit9OworCitzdHJ1Y3QgazNf bmF2X3VkbWF4X3R4X2NoYW5uZWwgeworCXN0cnVjdCBrM19uYXZfdWRtYXhfY29tbW9uIGNvbW1v bjsKKworCXN0cnVjdCB1ZG1hX3RjaGFuICp1ZG1hX3RjaGFueDsKKwlpbnQgdWRtYV90Y2hhbl9p ZDsKKwlib29sIG5lZWRfdGlzY2lfZnJlZTsKKworCXN0cnVjdCBrM19uYXZfcmluZyAqcmluZ3R4 OworCXN0cnVjdCBrM19uYXZfcmluZyAqcmluZ3R4Y3E7CisKKwlib29sIHBzaWxfcGFpcmVkOwor CisJdW5zaWduZWQgaW50IHZpcnE7CisKKwlhdG9taWNfdCBmcmVlX3BrdHM7CisJYm9vbCB0eF9w YXVzZV9vbl9lcnI7CisJYm9vbCB0eF9maWx0X2VpbmZvOworCWJvb2wgdHhfZmlsdF9wc3dvcmRz OworCWJvb2wgdHhfc3Vwcl90ZHBrdDsKK307CisKKy8qKgorICogazNfbmF2X3VkbWF4X3J4X2Zs b3cgLSBVRE1BIFJYIGZsb3cgY29udGV4dCBkYXRhCisgKgorICovCitzdHJ1Y3QgazNfbmF2X3Vk bWF4X3J4X2Zsb3cgeworCXN0cnVjdCB1ZG1hX3JmbG93ICp1ZG1hX3JmbG93OworCWludCB1ZG1h X3JmbG93X2lkOworCXN0cnVjdCBrM19uYXZfcmluZyAqcmluZ3J4OworCXN0cnVjdCBrM19uYXZf cmluZyAqcmluZ3J4ZmRxOworCisJdW5zaWduZWQgaW50IHZpcnE7Cit9OworCitzdHJ1Y3QgazNf bmF2X3VkbWF4X3J4X2NoYW5uZWwgeworCXN0cnVjdCBrM19uYXZfdWRtYXhfY29tbW9uIGNvbW1v bjsKKworCXN0cnVjdCB1ZG1hX3JjaGFuICp1ZG1hX3JjaGFueDsKKwlpbnQgdWRtYV9yY2hhbl9p ZDsKKwlib29sIG5lZWRfdGlzY2lfZnJlZTsKKworCWJvb2wgcHNpbF9wYWlyZWQ7CisKKwl1MzIg IHN3ZGF0YV9zaXplOworCWludCAgZmxvd19pZF9iYXNlOworCisJc3RydWN0IGszX25hdl91ZG1h eF9yeF9mbG93ICpmbG93czsKKwl1MzIgZmxvd19udW07CisJdTMyIGZsb3dzX3JlYWR5OworfTsK KworI2RlZmluZSBLM19VRE1BWF9URE9XTl9USU1FT1VUX1VTIDEwMDAKKworc3RhdGljIGludCBv Zl9rM19uYXZfdWRtYXhfcGFyc2Uoc3RydWN0IGRldmljZV9ub2RlICp1ZG1heF9ucCwKKwkJCQkg c3RydWN0IGszX25hdl91ZG1heF9jb21tb24gKmNvbW1vbikKK3sKKwljb21tb24tPnJpbmdhY2Mg PSBvZl9rM19uYXZfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSgKKwkJCQkJdWRtYXhfbnAsICJ0aSxy aW5nYWNjIik7CisJaWYgKElTX0VSUihjb21tb24tPnJpbmdhY2MpKQorCQlyZXR1cm4gUFRSX0VS Uihjb21tb24tPnJpbmdhY2MpOworCisJY29tbW9uLT51ZG1heCA9IG9mX3h1ZG1hX2Rldl9nZXQo dWRtYXhfbnAsIE5VTEwpOworCWlmIChJU19FUlIoY29tbW9uLT51ZG1heCkpCisJCXJldHVybiBQ VFJfRVJSKGNvbW1vbi0+dWRtYXgpOworCisJY29tbW9uLT50aXNjaV9ybSA9IHh1ZG1hX2Rldl9n ZXRfdGlzY2lfcm0oY29tbW9uLT51ZG1heCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBvZl9rM19uYXZfdWRtYXhfcGFyc2VfY2huKAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNobl9u cCwKKwkJY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IGszX25hdl91ZG1heF9jb21tb24gKmNv bW1vbiwKKwkJYm9vbCB0eF9jaG4pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwc2lsX2NmZ19u b2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hfY2ZnX25vZGU7CisJc3RydWN0IG9mX3BoYW5k bGVfYXJncyBkbWFfc3BlYzsKKwlpbnQgaW5kZXgsIHJldCA9IDA7CisJY2hhciBwcm9wWzUwXTsK Kwl1MzIgdmFsOworCisJaWYgKHVubGlrZWx5KCFuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpbmRleCA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhjaG5fbnAsICJkbWEtbmFtZXMiLCBu YW1lKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gaW5kZXg7CisKKwlpZiAob2ZfcGFyc2Vf cGhhbmRsZV93aXRoX2FyZ3MoY2huX25wLCAiZG1hcyIsICIjZG1hLWNlbGxzIiwgaW5kZXgsCisJ CQkJICAgICAgICZkbWFfc3BlYykpCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKHR4X2NobiAm JiBkbWFfc3BlYy5hcmdzWzJdICE9IFVETUFfRElSX1RYKSB7CisJCXJldCA9IC1FSU5WQUw7CisJ CWdvdG8gb3V0X3B1dF9zcGVjOworCX0KKworCWlmICghdHhfY2huICYmIGRtYV9zcGVjLmFyZ3Nb Ml0gIT0gVURNQV9ESVJfUlgpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfcHV0X3Nw ZWM7CisJfQorCisJLyogZ2V0IHBzaWwgY2ZnIG5vZGUgKi8KKwlwc2lsX2NmZ19ub2RlID0gb2Zf ZmluZF9ub2RlX2J5X3BoYW5kbGUoZG1hX3NwZWMuYXJnc1swXSk7CisJaWYgKCFwc2lsX2NmZ19u b2RlKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0X3B1dF9zcGVjOworCX0KKworCXNu cHJpbnRmKHByb3AsIHNpemVvZihwcm9wKSwgInRpLHBzaWwtY29uZmlnJXUiLCBkbWFfc3BlYy5h cmdzWzFdKTsKKwljaF9jZmdfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHBzaWxfY2ZnX25v ZGUsIHByb3ApOworCWlmICghY2hfY2ZnX25vZGUpIHsKKwkJZGV2X2Vycihjb21tb24tPmRldiwK KwkJCSJDaGFubmVsICV1IGNvbmZpZ3VyYXRpb24gbm9kZSBpcyBtaXNzaW5nXG4iLAorCQkJZG1h X3NwZWMuYXJnc1sxXSk7CisJCWdvdG8gb3V0X3B1dF9wc2lsX2NmZzsKKwl9CisKKwljb21tb24t PmVwaWIgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hfY2ZnX25vZGUsICJ0aSxuZWVkcy1lcGli Iik7CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoX2NmZ19ub2RlLCAidGkscHNkLXNp emUiLCAmdmFsKSkKKwkJY29tbW9uLT5wc2RhdGFfc2l6ZSA9IHZhbDsKKworCXJldCA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKHBzaWxfY2ZnX25vZGUsICJ0aSxwc2lsLWJhc2UiLCAmdmFsKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoY29tbW9uLT5kZXYsICJ0aSxwc2lsLWJhc2UgaXMgbWlzc2lu ZyAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfY2hfY2ZnOworCX0KKworCWlmICh0eF9jaG4pCisJ CWNvbW1vbi0+ZHN0X3RocmVhZCA9IHZhbCArIGRtYV9zcGVjLmFyZ3NbMV07CisJZWxzZQorCQlj b21tb24tPnNyY190aHJlYWQgPSB2YWwgKyBkbWFfc3BlYy5hcmdzWzFdOworCXJldCA9IG9mX2sz X25hdl91ZG1heF9wYXJzZShkbWFfc3BlYy5ucCwgY29tbW9uKTsKKworb3V0X2NoX2NmZzoKKwlv Zl9ub2RlX3B1dChjaF9jZmdfbm9kZSk7CitvdXRfcHV0X3BzaWxfY2ZnOgorCW9mX25vZGVfcHV0 KHBzaWxfY2ZnX25vZGUpOworb3V0X3B1dF9zcGVjOgorCW9mX25vZGVfcHV0KGRtYV9zcGVjLm5w KTsKKwlyZXR1cm4gcmV0OworfTsKKworc3RhdGljIHZvaWQgazNfbmF2X3VkbWF4X2R1bXBfdHhf Y2huKHN0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhfY2huKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IHR4X2Nobi0+Y29tbW9uLmRldjsKKworCWRldl9kYmcoZGV2LCAiZHVtcF90 eF9jaG46XG4iCisJCSJ1ZG1hX3RjaGFuX2lkOiAlZFxuIgorCQkic3JjX3RocmVhZDogJTA4eFxu IgorCQkiZHN0X3RocmVhZDogJTA4eFxuIiwKKwkJdHhfY2huLT51ZG1hX3RjaGFuX2lkLAorCQl0 eF9jaG4tPmNvbW1vbi5zcmNfdGhyZWFkLAorCQl0eF9jaG4tPmNvbW1vbi5kc3RfdGhyZWFkKTsK K30KKworc3RhdGljIHZvaWQgazNfbmF2X3VkbWF4X2R1bXBfdHhfcnRfY2huKHN0cnVjdCBrM19u YXZfdWRtYXhfdHhfY2hhbm5lbCAqY2huLAorCQkJCQljaGFyICptYXJrKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGNobi0+Y29tbW9uLmRldjsKKworCWRldl9kYmcoZGV2LCAiPT09IGR1bXAg PT09PiAlc1xuIiwgbWFyayk7CisJZGV2X2RiZyhkZXYsICIweCUwOFg6ICUwOFhcbiIsIFVETUFf VENIQU5fUlRfQ1RMX1JFRywKKwkJeHVkbWFfdGNoYW5ydF9yZWFkKGNobi0+dWRtYV90Y2hhbngs IFVETUFfVENIQU5fUlRfQ1RMX1JFRykpOworCWRldl9kYmcoZGV2LCAiMHglMDhYOiAlMDhYXG4i LCBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHLAorCQl4dWRtYV90Y2hhbnJ0X3JlYWQoY2hu LT51ZG1hX3RjaGFueCwKKwkJCQkgICBVRE1BX1RDSEFOX1JUX1BFRVJfUlRfRU5fUkVHKSk7CisJ ZGV2X2RiZyhkZXYsICIweCUwOFg6ICUwOFhcbiIsIFVETUFfVENIQU5fUlRfUENOVF9SRUcsCisJ CXh1ZG1hX3RjaGFucnRfcmVhZChjaG4tPnVkbWFfdGNoYW54LCBVRE1BX1RDSEFOX1JUX1BDTlRf UkVHKSk7CisJZGV2X2RiZyhkZXYsICIweCUwOFg6ICUwOFhcbiIsIFVETUFfVENIQU5fUlRfQkNO VF9SRUcsCisJCXh1ZG1hX3RjaGFucnRfcmVhZChjaG4tPnVkbWFfdGNoYW54LCBVRE1BX1RDSEFO X1JUX0JDTlRfUkVHKSk7CisJZGV2X2RiZyhkZXYsICIweCUwOFg6ICUwOFhcbiIsIFVETUFfVENI QU5fUlRfU0JDTlRfUkVHLAorCQl4dWRtYV90Y2hhbnJ0X3JlYWQoY2huLT51ZG1hX3RjaGFueCwg VURNQV9UQ0hBTl9SVF9TQkNOVF9SRUcpKTsKK30KKworc3RhdGljIGludCBrM19uYXZfdWRtYXhf Y2ZnX3R4X2NobihzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobikKK3sKKwlj b25zdCBzdHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSB0eF9jaG4tPmNvbW1vbi50aXNj aV9ybTsKKwlzdHJ1Y3QgdGlfc2NpX21zZ19ybV91ZG1hcF90eF9jaF9jZmcgcmVxOworCisJbWVt c2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS52YWxpZF9wYXJhbXMgPSBUSV9TQ0lf TVNHX1ZBTFVFX1JNX1VETUFQX0NIX1BBVVNFX09OX0VSUl9WQUxJRCB8CisJCQlUSV9TQ0lfTVNH X1ZBTFVFX1JNX1VETUFQX0NIX1RYX0ZJTFRfRUlORk9fVkFMSUQgfAorCQkJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9UWF9GSUxUX1BTV09SRFNfVkFMSUQgfAorCQkJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9DSEFOX1RZUEVfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9S TV9VRE1BUF9DSF9UWF9TVVBSX1REUEtUX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1f VURNQVBfQ0hfRkVUQ0hfU0laRV9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQ X0NIX0NRX1FOVU1fVkFMSUQ7CisJcmVxLm5hdl9pZCA9IHRpc2NpX3JtLT50aXNjaV9kZXZfaWQ7 CisJcmVxLmluZGV4ID0gdHhfY2huLT51ZG1hX3RjaGFuX2lkOworCWlmICh0eF9jaG4tPnR4X3Bh dXNlX29uX2VycikKKwkJcmVxLnR4X3BhdXNlX29uX2VyciA9IDE7CisJaWYgKHR4X2Nobi0+dHhf ZmlsdF9laW5mbykKKwkJcmVxLnR4X2ZpbHRfZWluZm8gPSAxOworCWlmICh0eF9jaG4tPnR4X2Zp bHRfcHN3b3JkcykKKwkJcmVxLnR4X2ZpbHRfcHN3b3JkcyA9IDE7CisJcmVxLnR4X2NoYW5fdHlw ZSA9IFRJX1NDSV9STV9VRE1BUF9DSEFOX1RZUEVfUEtUX1BCUlI7CisJaWYgKHR4X2Nobi0+dHhf c3Vwcl90ZHBrdCkKKwkJcmVxLnR4X3N1cHJfdGRwa3QgPSAxOworCXJlcS50eF9mZXRjaF9zaXpl ID0gdHhfY2huLT5jb21tb24uaGRlc2Nfc2l6ZSA+PiAyOworCXJlcS50eGNxX3FudW0gPSBrM19u YXZfcmluZ2FjY19nZXRfcmluZ19pZCh0eF9jaG4tPnJpbmd0eGNxKTsKKworCXJldHVybiB0aXNj aV9ybS0+dGlzY2lfdWRtYXBfb3BzLT50eF9jaF9jZmcodGlzY2lfcm0tPnRpc2NpLCAmcmVxKTsK K30KKworc3RydWN0IGszX25hdl91ZG1heF90eF9jaGFubmVsICprM19uYXZfdWRtYXhfcmVxdWVz dF90eF9jaG4oCisJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJY29uc3QgY2hhciAqbmFtZSwKKwkJ c3RydWN0IGszX25hdl91ZG1heF90eF9jaGFubmVsX2NmZyAqY2ZnKQoreworCXN0cnVjdCBrM19u YXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhfY2huOworCWludCByZXQ7CisKKwl0eF9jaG4gPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnR4X2NobiksIEdGUF9LRVJORUwpOworCWlmICghdHhfY2hu KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXR4X2Nobi0+Y29tbW9uLmRldiA9IGRl djsKKwl0eF9jaG4tPmNvbW1vbi5zd2RhdGFfc2l6ZSA9IGNmZy0+c3dkYXRhX3NpemU7CisJdHhf Y2huLT50eF9wYXVzZV9vbl9lcnIgPSBjZmctPnR4X3BhdXNlX29uX2VycjsKKwl0eF9jaG4tPnR4 X2ZpbHRfZWluZm8gPSBjZmctPnR4X2ZpbHRfZWluZm87CisJdHhfY2huLT50eF9maWx0X3Bzd29y ZHMgPSBjZmctPnR4X2ZpbHRfcHN3b3JkczsKKwl0eF9jaG4tPnR4X3N1cHJfdGRwa3QgPSBjZmct PnR4X3N1cHJfdGRwa3Q7CisKKwkvKiBwYXJzZSBvZiB1ZG1hcCBjaGFubmVsICovCisJcmV0ID0g b2ZfazNfbmF2X3VkbWF4X3BhcnNlX2NobihkZXYtPm9mX25vZGUsIG5hbWUsCisJCQkJCSZ0eF9j aG4tPmNvbW1vbiwgdHJ1ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwl0eF9jaG4tPmNv bW1vbi5oZGVzY19zaXplID0ga25hdl91ZG1hcF9oZGVzY19jYWxjX3NpemUoCisJCQkJdHhfY2hu LT5jb21tb24uZXBpYiwKKwkJCQl0eF9jaG4tPmNvbW1vbi5wc2RhdGFfc2l6ZSwKKwkJCQl0eF9j aG4tPmNvbW1vbi5zd2RhdGFfc2l6ZSk7CisKKwkvKiByZXF1ZXN0IGFuZCBjZmcgVURNQVAgVFgg Y2hhbm5lbCAqLworCXR4X2Nobi0+dWRtYV90Y2hhbnggPSB4dWRtYV90Y2hhbl9nZXQodHhfY2hu LT5jb21tb24udWRtYXgsIC0xKTsKKwlpZiAoSVNfRVJSKHR4X2Nobi0+dWRtYV90Y2hhbngpKSB7 CisJCXJldCA9IFBUUl9FUlIodHhfY2huLT51ZG1hX3RjaGFueCk7CisJCWRldl9lcnIoZGV2LCAi VURNQVggdGNoYW54IGdldCBlcnIgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwl0eF9j aG4tPnVkbWFfdGNoYW5faWQgPSB4dWRtYV90Y2hhbl9nZXRfaWQodHhfY2huLT51ZG1hX3RjaGFu eCk7CisKKwlhdG9taWNfc2V0KCZ0eF9jaG4tPmZyZWVfcGt0cywgY2ZnLT50eGNxX2NmZy5zaXpl KTsKKworCS8qIHJlcXVlc3QgYW5kIGNmZyByaW5ncyAqLworCXR4X2Nobi0+cmluZ3R4ID0gazNf bmF2X3JpbmdhY2NfcmVxdWVzdF9yaW5nKHR4X2Nobi0+Y29tbW9uLnJpbmdhY2MsCisJCQkJCQkg ICAgIHR4X2Nobi0+dWRtYV90Y2hhbl9pZCwgMCk7CisJaWYgKCF0eF9jaG4tPnJpbmd0eCkgewor CQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgVFggcmluZyAl dVxuIiwKKwkJCXR4X2Nobi0+dWRtYV90Y2hhbl9pZCk7CisJCWdvdG8gZXJyOworCX0KKworCXR4 X2Nobi0+cmluZ3R4Y3EgPSBrM19uYXZfcmluZ2FjY19yZXF1ZXN0X3JpbmcodHhfY2huLT5jb21t b24ucmluZ2FjYywKKwkJCQkJCSAgICAgICAtMSwgMCk7CisJaWYgKCF0eF9jaG4tPnJpbmd0eGNx KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBUWENR IHJpbmdcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBrM19uYXZfcmluZ2FjY19yaW5n X2NmZyh0eF9jaG4tPnJpbmd0eCwgJmNmZy0+dHhfY2ZnKTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGNmZyByaW5ndHggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOwor CX0KKworCXJldCA9IGszX25hdl9yaW5nYWNjX3JpbmdfY2ZnKHR4X2Nobi0+cmluZ3R4Y3EsICZj ZmctPnR4Y3FfY2ZnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNm ZyByaW5ndHggJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlcXVlc3QgYW5k IGNmZyBwc2ktbCAqLworCXR4X2Nobi0+Y29tbW9uLnNyY190aHJlYWQgPQorCQkJeHVkbWFfZGV2 X2dldF9wc2lsX2Jhc2UodHhfY2huLT5jb21tb24udWRtYXgpICsKKwkJCXR4X2Nobi0+dWRtYV90 Y2hhbl9pZDsKKworCXR4X2Nobi0+bmVlZF90aXNjaV9mcmVlID0gZmFsc2U7CisJcmV0ID0gazNf bmF2X3VkbWF4X2NmZ190eF9jaG4odHhfY2huKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGNmZyB0Y2hhbiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJ dHhfY2huLT5uZWVkX3Rpc2NpX2ZyZWUgPSB0cnVlOworCisJcmV0ID0geHVkbWFfbmF2c3NfcHNp bF9wYWlyKHR4X2Nobi0+Y29tbW9uLnVkbWF4LAorCQkJCSAgICB0eF9jaG4tPmNvbW1vbi5zcmNf dGhyZWFkLAorCQkJCSAgICB0eF9jaG4tPmNvbW1vbi5kc3RfdGhyZWFkKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZGV2LCAiUFNJLUwgcmVxdWVzdCBlcnIgJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyOworCX0KKworCXR4X2Nobi0+cHNpbF9wYWlyZWQgPSB0cnVlOworCisJazNfbmF2X3VkbWF4 X2R1bXBfdHhfY2huKHR4X2Nobik7CisKKwlyZXR1cm4gdHhfY2huOworCitlcnI6CisJazNfbmF2 X3VkbWF4X3JlbGVhc2VfdHhfY2huKHR4X2Nobik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKGszX25hdl91ZG1heF9yZXF1ZXN0X3R4X2Nobik7CisKK3ZvaWQg azNfbmF2X3VkbWF4X3JlbGVhc2VfdHhfY2huKAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2No YW5uZWwgKnR4X2NobikKK3sKKwlpZiAodHhfY2huLT5wc2lsX3BhaXJlZCkgeworCQl4dWRtYV9u YXZzc19wc2lsX3VucGFpcih0eF9jaG4tPmNvbW1vbi51ZG1heCwKKwkJCQkJdHhfY2huLT5jb21t b24uc3JjX3RocmVhZCwKKwkJCQkJdHhfY2huLT5jb21tb24uZHN0X3RocmVhZCk7CisJCXR4X2No bi0+cHNpbF9wYWlyZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHR4X2No bi0+Y29tbW9uLnVkbWF4KSkgeworCQlpZiAodHhfY2huLT5uZWVkX3Rpc2NpX2ZyZWUpIHsKKwkJ CXR4X2Nobi0+bmVlZF90aXNjaV9mcmVlID0gZmFsc2U7CisJCX0KKworCQlpZiAoIUlTX0VSUl9P Ul9OVUxMKHR4X2Nobi0+dWRtYV90Y2hhbngpKQorCQkJeHVkbWFfdGNoYW5fcHV0KHR4X2Nobi0+ Y29tbW9uLnVkbWF4LAorCQkJCQl0eF9jaG4tPnVkbWFfdGNoYW54KTsKKworCQl4dWRtYV9kZXZf cHV0KHR4X2Nobi0+Y29tbW9uLnVkbWF4KTsKKwl9CisKKwlpZiAodHhfY2huLT5yaW5ndHhjcSkK KwkJazNfbmF2X3JpbmdhY2NfcmluZ19mcmVlKHR4X2Nobi0+cmluZ3R4Y3EpOworCisJaWYgKHR4 X2Nobi0+cmluZ3R4KQorCQlrM19uYXZfcmluZ2FjY19yaW5nX2ZyZWUodHhfY2huLT5yaW5ndHgp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2X3VkbWF4X3JlbGVhc2VfdHhfY2huKTsKKwor aW50IGszX25hdl91ZG1heF9wdXNoX3R4X2NobigKKwkJc3RydWN0IGszX25hdl91ZG1heF90eF9j aGFubmVsICp0eF9jaG4sCisJCXN0cnVjdCBrbmF2X3VkbWFwX2hvc3RfZGVzY190ICpkZXNjX3R4 LAorCQlkbWFfYWRkcl90IGRlc2NfZG1hKQoreworCXUzMiByaW5ndHhjcV9pZDsKKworCWlmICgh YXRvbWljX2FkZF91bmxlc3MoJnR4X2Nobi0+ZnJlZV9wa3RzLCAtMSwgMCkpCisJCXJldHVybiAt RU5PTUVNOworCisJcmluZ3R4Y3FfaWQgPSBrM19uYXZfcmluZ2FjY19nZXRfcmluZ19pZCh0eF9j aG4tPnJpbmd0eGNxKTsKKwlrbmF2X3VkbWFwX2Rlc2Nfc2V0X3JldHBvbGljeSgmZGVzY190eC0+ aGRyLCAwLAorCQkJCSAgICAgIHJpbmd0eGNxX2lkKTsKKworCXJldHVybiBrM19uYXZfcmluZ2Fj Y19yaW5nX3B1c2godHhfY2huLT5yaW5ndHgsICZkZXNjX2RtYSk7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrM19uYXZfdWRtYXhfcHVzaF90eF9jaG4pOworCitpbnQgazNfbmF2X3VkbWF4X3BvcF90 eF9jaG4oCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhfY2huLAorCQlkbWFf YWRkcl90ICpkZXNjX2RtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gazNfbmF2X3JpbmdhY2Nf cmluZ19wb3AodHhfY2huLT5yaW5ndHhjcSwgZGVzY19kbWEpOworCWlmICghcmV0KQorCQlhdG9t aWNfaW5jKCZ0eF9jaG4tPmZyZWVfcGt0cyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfbmF2X3VkbWF4X3BvcF90eF9jaG4pOworCitpbnQgazNfbmF2X3VkbWF4X2Vu YWJsZV90eF9jaG4oc3RydWN0IGszX25hdl91ZG1heF90eF9jaGFubmVsICp0eF9jaG4pCit7CisJ dTMyIHR4cnRfY3RsOworCisJdHhydF9jdGwgPSBVRE1BX1BFRVJfUlRfRU5fRU5BQkxFOworCXh1 ZG1hX3RjaGFucnRfd3JpdGUodHhfY2huLT51ZG1hX3RjaGFueCwKKwkJCSAgICBVRE1BX1RDSEFO X1JUX1BFRVJfUlRfRU5fUkVHLAorCQkJICAgIHR4cnRfY3RsKTsKKworCXR4cnRfY3RsID0geHVk bWFfdGNoYW5ydF9yZWFkKHR4X2Nobi0+dWRtYV90Y2hhbngsCisJCQkJICAgICAgVURNQV9UQ0hB Tl9SVF9DVExfUkVHKTsKKwl0eHJ0X2N0bCB8PSBVRE1BX0NIQU5fUlRfQ1RMX0VOOworCXh1ZG1h X3RjaGFucnRfd3JpdGUodHhfY2huLT51ZG1hX3RjaGFueCwgVURNQV9UQ0hBTl9SVF9DVExfUkVH LAorCQkJICAgIHR4cnRfY3RsKTsKKworCWszX25hdl91ZG1heF9kdW1wX3R4X3J0X2Nobih0eF9j aG4sICJ0eGNobiBlbiIpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2 X3VkbWF4X2VuYWJsZV90eF9jaG4pOworCit2b2lkIGszX25hdl91ZG1heF9kaXNhYmxlX3R4X2No bihzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobikKK3sKKwlrM19uYXZfdWRt YXhfZHVtcF90eF9ydF9jaG4odHhfY2huLCAidHhjaG4gZGlzMSIpOworCisJeHVkbWFfdGNoYW5y dF93cml0ZSh0eF9jaG4tPnVkbWFfdGNoYW54LCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsIDApOwor CisJeHVkbWFfdGNoYW5ydF93cml0ZSh0eF9jaG4tPnVkbWFfdGNoYW54LAorCQkJICAgIFVETUFf VENIQU5fUlRfUEVFUl9SVF9FTl9SRUcsIDApOworCWszX25hdl91ZG1heF9kdW1wX3R4X3J0X2No bih0eF9jaG4sICJ0eGNobiBkaXMyIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19uYXZfdWRt YXhfZGlzYWJsZV90eF9jaG4pOworCit2b2lkIGszX25hdl91ZG1heF90ZG93bl90eF9jaG4oc3Ry dWN0IGszX25hdl91ZG1heF90eF9jaGFubmVsICp0eF9jaG4sCisJCQkgICAgICAgYm9vbCBzeW5j KQoreworCWludCBpID0gMDsKKwl1MzIgdmFsOworCisJazNfbmF2X3VkbWF4X2R1bXBfdHhfcnRf Y2huKHR4X2NobiwgInR4Y2huIHRkb3duMSIpOworCisJeHVkbWFfdGNoYW5ydF93cml0ZSh0eF9j aG4tPnVkbWFfdGNoYW54LCBVRE1BX1RDSEFOX1JUX0NUTF9SRUcsCisJCQkgICAgVURNQV9DSEFO X1JUX0NUTF9FTiB8IFVETUFfQ0hBTl9SVF9DVExfVERPV04pOworCisJdmFsID0geHVkbWFfdGNo YW5ydF9yZWFkKHR4X2Nobi0+dWRtYV90Y2hhbngsIFVETUFfVENIQU5fUlRfQ1RMX1JFRyk7CisK Kwl3aGlsZSAoc3luYyAmJiAodmFsICYgVURNQV9DSEFOX1JUX0NUTF9FTikpIHsKKwkJdmFsID0g eHVkbWFfdGNoYW5ydF9yZWFkKHR4X2Nobi0+dWRtYV90Y2hhbngsCisJCQkJCSBVRE1BX1RDSEFO X1JUX0NUTF9SRUcpOworCQl1ZGVsYXkoMSk7CisJCWlmIChpID4gSzNfVURNQVhfVERPV05fVElN RU9VVF9VUykgeworCQkJZGV2X2Vycih0eF9jaG4tPmNvbW1vbi5kZXYsICJUWCB0ZG93biB0aW1l b3V0XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisKKwl2YWwgPSB4dWRtYV90Y2hh bnJ0X3JlYWQodHhfY2huLT51ZG1hX3RjaGFueCwKKwkJCQkgVURNQV9UQ0hBTl9SVF9QRUVSX1JU X0VOX1JFRyk7CisJaWYgKHN5bmMgJiYgKHZhbCAmIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUpKQor CQlkZXZfZXJyKHR4X2Nobi0+Y29tbW9uLmRldiwgIlRYIHRkb3duIHBlZXIgbm90IHN0b3BwZWRc biIpOworCWszX25hdl91ZG1heF9kdW1wX3R4X3J0X2Nobih0eF9jaG4sICJ0eGNobiB0ZG93bjIi KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX25hdl91ZG1heF90ZG93bl90eF9jaG4pOworCit2 b2lkIGszX25hdl91ZG1heF9yZXNldF90eF9jaG4oCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfdHhf Y2hhbm5lbCAqdHhfY2huLCB2b2lkICpkYXRhLAorCQl2b2lkICgqY2xlYW51cCkodm9pZCAqZGF0 YSwgZG1hX2FkZHJfdCBkZXNjX2RtYSkpCit7CisJZG1hX2FkZHJfdCBkZXNjX2RtYTsKKwlpbnQg b2NjX3R4LCBpLCByZXQ7CisKKwkvKiByZXNldCBUWENRIGFzIGl0IGlzIG5vdCBpbnB1dCBmb3Ig dWRtYSAtIGV4cGVjdGVkIHRvIGJlIGVtcHR5ICovCisJaWYgKHR4X2Nobi0+cmluZ3R4Y3EpCisJ CWszX25hdl9yaW5nYWNjX3JpbmdfcmVzZXQodHhfY2huLT5yaW5ndHhjcSk7CisKKwkvKgorCSAq IFRYUSByZXNldCBuZWVkIHRvIGJlIHNwZWNpYWwgd2F5IGFzIGl0IGlzIGlucHV0IGZvciB1ZG1h IGFuZCBpdHMKKwkgKiBzdGF0ZSBjYWNoZWQgYnkgdWRtYSwgc286CisJICogMSkgc2F2ZSBUWFEg b2NjCisJICogMikgY2xlYW4gdXAgVFhRIGFuZCBjYWxsIGNhbGxiYWNrIC5jbGVhbnVwKCkgZm9y IGVhY2ggZGVzYworCSAqIDMpIHJlc2V0IFRYUSBpbiBhIHNwZWNpYWwgd2F5CisJICovCisJb2Nj X3R4ID0gazNfbmF2X3JpbmdhY2NfcmluZ19nZXRfb2NjKHR4X2Nobi0+cmluZ3R4KTsKKwlkZXZf ZGJnKHR4X2Nobi0+Y29tbW9uLmRldiwgIlRYIHJlc2V0IG9jY190eCAldVxuIiwgb2NjX3R4KTsK KworCWZvciAoaSA9IDA7IGkgPCBvY2NfdHg7IGkrKykgeworCQlyZXQgPSBrM19uYXZfcmluZ2Fj Y19yaW5nX3BvcCh0eF9jaG4tPnJpbmd0eCwgJmRlc2NfZG1hKTsKKwkJaWYgKHJldCkgeworCQkJ ZGV2X2Vycih0eF9jaG4tPmNvbW1vbi5kZXYsICJUWCByZXNldCBwb3AgJWRcbiIsIHJldCk7CisJ CQlicmVhazsKKwkJfQorCQljbGVhbnVwKGRhdGEsIGRlc2NfZG1hKTsKKwl9CisKKwlrM19uYXZf cmluZ2FjY19yaW5nX3Jlc2V0X2RtYSh0eF9jaG4tPnJpbmd0eCwgb2NjX3R4KTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGszX25hdl91ZG1heF9yZXNldF90eF9jaG4pOworCit1MzIgazNfbmF2X3Vk bWF4X3R4X2dldF9oZGVzY19zaXplKHN0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhf Y2huKQoreworCXJldHVybiB0eF9jaG4tPmNvbW1vbi5oZGVzY19zaXplOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfbmF2X3VkbWF4X3R4X2dldF9oZGVzY19zaXplKTsKKwordTMyIGszX25hdl91 ZG1heF90eF9nZXRfdHhjcV9pZChzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2No bikKK3sKKwlyZXR1cm4gazNfbmF2X3JpbmdhY2NfZ2V0X3JpbmdfaWQodHhfY2huLT5yaW5ndHhj cSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19uYXZfdWRtYXhfdHhfZ2V0X3R4Y3FfaWQpOwor CitpbnQgazNfbmF2X3VkbWF4X3R4X2dldF9pcnEoc3RydWN0IGszX25hdl91ZG1heF90eF9jaGFu bmVsICp0eF9jaG4sCisJCQkgICAgdW5zaWduZWQgaW50ICppcnEsIHUzMiBmbGFncywgYm9vbCBz aGFyZSwKKwkJCSAgICBzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2Nobl9zaGFy ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmlycSA9IDA7CisKKwlpZiAoc2hhcmUgJiYgdHhfY2huX3No YXJlKQorCQl2aXJxID0gdHhfY2huX3NoYXJlLT52aXJxOworCisJdHhfY2huLT52aXJxID0gdGlf c2NpX2ludGFfcmVnaXN0ZXJfZXZlbnQoCisJCQl0eF9jaG4tPmNvbW1vbi5kZXYsCisJCQlrM19u YXZfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKHR4X2Nobi0+cmluZ3R4Y3EpLAorCQkJazNfbmF2 X3JpbmdhY2NfZ2V0X3JpbmdfaWQodHhfY2huLT5yaW5ndHhjcSksCisJCQl2aXJxLCBmbGFncyk7 CisJaWYgKHR4X2Nobi0+dmlycSA8PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSppcnEgPSB0 eF9jaG4tPnZpcnE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX25hdl91 ZG1heF90eF9nZXRfaXJxKTsKKwordm9pZCBrM19uYXZfdWRtYXhfdHhfcHV0X2lycShzdHJ1Y3Qg azNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobikKK3sKKwlpZiAodHhfY2huLT52aXJxIDw9 IDApCisJCXJldHVybjsKKworCXRpX3NjaV9pbnRhX3VucmVnaXN0ZXJfZXZlbnQoCisJCQl0eF9j aG4tPmNvbW1vbi5kZXYsCisJCQlrM19uYXZfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKHR4X2No bi0+cmluZ3R4Y3EpLAorCQkJazNfbmF2X3JpbmdhY2NfZ2V0X3JpbmdfaWQodHhfY2huLT5yaW5n dHhjcSksCisJCQl0eF9jaG4tPnZpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2X3Vk bWF4X3R4X3B1dF9pcnEpOworCitzdGF0aWMgaW50IGszX25hdl91ZG1heF9jZmdfcnhfY2huKHN0 cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbCAqcnhfY2huKQoreworCWNvbnN0IHN0cnVjdCB1 ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9IHJ4X2Nobi0+Y29tbW9uLnRpc2NpX3JtOworCXN0cnVj dCB0aV9zY2lfbXNnX3JtX3VkbWFwX3J4X2NoX2NmZyByZXE7CisJaW50IHJldDsKKworCW1lbXNl dCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEudmFsaWRfcGFyYW1zID0gVElfU0NJX01T R19WQUxVRV9STV9VRE1BUF9DSF9GRVRDSF9TSVpFX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFM VUVfUk1fVURNQVBfQ0hfQ1FfUU5VTV9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VE TUFQX0NIX0NIQU5fVFlQRV9WQUxJRDsKKworCXJlcS5uYXZfaWQgPSB0aXNjaV9ybS0+dGlzY2lf ZGV2X2lkOworCXJlcS5pbmRleCA9IHJ4X2Nobi0+dWRtYV9yY2hhbl9pZDsKKwlyZXEucnhfZmV0 Y2hfc2l6ZSA9IHJ4X2Nobi0+Y29tbW9uLmhkZXNjX3NpemUgPj4gMjsKKwkvKgorCSAqIFRPRE86 IHdlIGNhbid0IHN1cHBvcnQgcnhjcV9xbnVtL1JDSEFOW2FdX1JDUSBjZmcgd2l0aCBjdXJyZW50 IHN5c2Z3CisJICogYW5kIHVkbWF4IGltcGwsIHNvIGp1c3QgY29uZmlndXJlIGl0IHRvIGludmFs aWQgdmFsdWUuCisJICogcmVxLnJ4Y3FfcW51bSA9IGszX25hdl9yaW5nYWNjX2dldF9yaW5nX2lk KHJ4X2Nobi0+Zmxvd3NbMF0ucmluZ3J4KTsKKwkgKi8KKwlyZXEucnhjcV9xbnVtID0gMHhGRkZG OworCWlmIChyeF9jaG4tPmZsb3dfbnVtICYmIHJ4X2Nobi0+Zmxvd19pZF9iYXNlICE9IHJ4X2No bi0+dWRtYV9yY2hhbl9pZCkgeworCQkvKiBEZWZhdWx0IGZsb3cgKyBleHRyYSBvbmVzICovCisJ CXJlcS5mbG93aWRfc3RhcnQgPSByeF9jaG4tPmZsb3dfaWRfYmFzZTsKKwkJcmVxLmZsb3dpZF9j bnQgPSByeF9jaG4tPmZsb3dfbnVtOworCQlyZXEudmFsaWRfcGFyYW1zIHw9CisJCQlUSV9TQ0lf TVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0ZMT1dJRF9TVEFSVF9WQUxJRCB8CisJCQlUSV9TQ0lf TVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0ZMT1dJRF9DTlRfVkFMSUQ7CisJfQorCXJlcS5yeF9j aGFuX3R5cGUgPSBUSV9TQ0lfUk1fVURNQVBfQ0hBTl9UWVBFX1BLVF9QQlJSOworCisJcmV0ID0g dGlzY2lfcm0tPnRpc2NpX3VkbWFwX29wcy0+cnhfY2hfY2ZnKHRpc2NpX3JtLT50aXNjaSwgJnJl cSk7CisJaWYgKHJldCkKKwkJZGV2X2VycihyeF9jaG4tPmNvbW1vbi5kZXYsICJyY2hhbiVkIGNm ZyBmYWlsZWQgJWRcbiIsCisJCQlyeF9jaG4tPnVkbWFfcmNoYW5faWQsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBrM19uYXZfdWRtYXhfcmVsZWFzZV9yeF9mbG93KAor CQkJc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4sCisJCQl1MzIgZmxvd19u dW0pCit7CisJc3RydWN0IGszX25hdl91ZG1heF9yeF9mbG93ICpmbG93ID0gJnJ4X2Nobi0+Zmxv d3NbZmxvd19udW1dOworCisJaWYgKElTX0VSUl9PUl9OVUxMKGZsb3ctPnVkbWFfcmZsb3cpKQor CQlyZXR1cm47CisKKwlpZiAoZmxvdy0+cmluZ3J4ZmRxKQorCQlrM19uYXZfcmluZ2FjY19yaW5n X2ZyZWUoZmxvdy0+cmluZ3J4ZmRxKTsKKworCWlmIChmbG93LT5yaW5ncngpCisJCWszX25hdl9y aW5nYWNjX3JpbmdfZnJlZShmbG93LT5yaW5ncngpOworCisJeHVkbWFfcmZsb3dfcHV0KHJ4X2No bi0+Y29tbW9uLnVkbWF4LCBmbG93LT51ZG1hX3JmbG93KTsKKwlyeF9jaG4tPmZsb3dzX3JlYWR5 LS07Cit9CisKK3N0YXRpYyBpbnQgazNfbmF2X3VkbWF4X2NmZ19yeF9mbG93KAorCQkJc3RydWN0 IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4sCisJCQl1MzIgZmxvd19pZHgsCisJCQlz dHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2Zsb3dfY2ZnICpmbG93X2NmZykKK3sKKwlzdHJ1Y3QgazNf bmF2X3VkbWF4X3J4X2Zsb3cgKmZsb3cgPSAmcnhfY2huLT5mbG93c1tmbG93X2lkeF07CisJY29u c3Qgc3RydWN0IHVkbWFfdGlzY2lfcm0gKnRpc2NpX3JtID0gcnhfY2huLT5jb21tb24udGlzY2lf cm07CisJc3RydWN0IGRldmljZSAqZGV2ID0gcnhfY2huLT5jb21tb24uZGV2OworCXN0cnVjdCB0 aV9zY2lfbXNnX3JtX3VkbWFwX2Zsb3dfY2ZnIHJlcTsKKwlpbnQgcnhfcmluZ19pZDsKKwlpbnQg cnhfcmluZ2ZkcV9pZDsKKwlpbnQgcmV0ID0gMDsKKworCWZsb3ctPnVkbWFfcmZsb3cgPSB4dWRt YV9yZmxvd19nZXQocnhfY2huLT5jb21tb24udWRtYXgsCisJCQkJCSAgIGZsb3ctPnVkbWFfcmZs b3dfaWQpOworCWlmIChJU19FUlIoZmxvdy0+dWRtYV9yZmxvdykpIHsKKwkJcmV0ID0gUFRSX0VS UihmbG93LT51ZG1hX3JmbG93KTsKKwkJZGV2X2VycihkZXYsICJVRE1BWCByZmxvdyBnZXQgZXJy ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoZmxvdy0+dWRtYV9yZmxvd19p ZCAhPSB4dWRtYV9yZmxvd19nZXRfaWQoZmxvdy0+dWRtYV9yZmxvdykpIHsKKwkJeHVkbWFfcmZs b3dfcHV0KHJ4X2Nobi0+Y29tbW9uLnVkbWF4LCBmbG93LT51ZG1hX3JmbG93KTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJLyogcmVxdWVzdCBhbmQgY2ZnIHJpbmdzICovCisJZmxvdy0+cmlu Z3J4ID0gazNfbmF2X3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJ4X2Nobi0+Y29tbW9uLnJpbmdhY2Ms CisJCQkJCQkgICBmbG93X2NmZy0+cmluZ19yeHFfaWQsIDApOworCWlmICghZmxvdy0+cmluZ3J4 KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBSWCBy aW5nXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJZmxvdy0+cmluZ3J4ZmRxID0gazNfbmF2X3Jp bmdhY2NfcmVxdWVzdF9yaW5nKHJ4X2Nobi0+Y29tbW9uLnJpbmdhY2MsCisJCQkJCQkgICAgICBm bG93X2NmZy0+cmluZ19yeGZkcTBfaWQsCisJCQkJCQkgICAgICAwKTsKKwlpZiAoIWZsb3ctPnJp bmdyeGZkcSkgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn ZXQgUlhGRFEgcmluZ1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGszX25hdl9yaW5n YWNjX3JpbmdfY2ZnKGZsb3ctPnJpbmdyeCwgJmZsb3dfY2ZnLT5yeF9jZmcpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY2ZnIHJpbmdyeCAlZFxuIiwgcmV0KTsKKwkJ Z290byBlcnI7CisJfQorCisJcmV0ID0gazNfbmF2X3JpbmdhY2NfcmluZ19jZmcoZmxvdy0+cmlu Z3J4ZmRxLCAmZmxvd19jZmctPnJ4ZmRxX2NmZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBjZmcgcmluZ3J4ZmRxICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9 CisKKwlyeF9yaW5nX2lkID0gazNfbmF2X3JpbmdhY2NfZ2V0X3JpbmdfaWQoZmxvdy0+cmluZ3J4 KTsKKwlyeF9yaW5nZmRxX2lkID0gazNfbmF2X3JpbmdhY2NfZ2V0X3JpbmdfaWQoZmxvdy0+cmlu Z3J4ZmRxKTsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEudmFsaWRf cGFyYW1zID0KKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19FSU5GT19QUkVTRU5U X1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19QU0lORk9fUFJFU0VO VF9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfRVJST1JfSEFORExJ TkdfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0RFU0NfVFlQRV9W QUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfREVTVF9RTlVNX1ZBTElE IHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19TUkNfVEFHX0hJX1NFTF9WQUxJ RCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfU1JDX1RBR19MT19TRUxfVkFM SUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0RFU1RfVEFHX0hJX1NFTF9W QUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfREVTVF9UQUdfTE9fU0VM X1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFEwX1NaMF9RTlVN X1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFExX1FOVU1fVkFM SUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0ZEUTJfUU5VTV9WQUxJRCB8 CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfRkRRM19RTlVNX1ZBTElEOworCXJl cS5uYXZfaWQgPSB0aXNjaV9ybS0+dGlzY2lfZGV2X2lkOworCXJlcS5mbG93X2luZGV4ID0gZmxv dy0+dWRtYV9yZmxvd19pZDsKKwlpZiAocnhfY2huLT5jb21tb24uZXBpYikKKwkJcmVxLnJ4X2Vp bmZvX3ByZXNlbnQgPSAxOworCWlmIChyeF9jaG4tPmNvbW1vbi5wc2RhdGFfc2l6ZSkKKwkJcmVx LnJ4X3BzaW5mb19wcmVzZW50ID0gMTsKKwlpZiAoZmxvd19jZmctPnJ4X2Vycm9yX2hhbmRsaW5n KQorCQlyZXEucnhfZXJyb3JfaGFuZGxpbmcgPSAxOworCXJlcS5yeF9kZXNjX3R5cGUgPSAwOwor CXJlcS5yeF9kZXN0X3FudW0gPSByeF9yaW5nX2lkOworCXJlcS5yeF9zcmNfdGFnX2hpX3NlbCA9 IDA7CisJcmVxLnJ4X3NyY190YWdfbG9fc2VsID0gZmxvd19jZmctPnNyY190YWdfbG9fc2VsOwor CXJlcS5yeF9kZXN0X3RhZ19oaV9zZWwgPSAwOworCXJlcS5yeF9kZXN0X3RhZ19sb19zZWwgPSAw OworCXJlcS5yeF9mZHEwX3N6MF9xbnVtID0gcnhfcmluZ2ZkcV9pZDsKKwlyZXEucnhfZmRxMV9x bnVtID0gcnhfcmluZ2ZkcV9pZDsKKwlyZXEucnhfZmRxMl9xbnVtID0gcnhfcmluZ2ZkcV9pZDsK KwlyZXEucnhfZmRxM19xbnVtID0gcnhfcmluZ2ZkcV9pZDsKKworCXJldCA9IHRpc2NpX3JtLT50 aXNjaV91ZG1hcF9vcHMtPnJ4X2Zsb3dfY2ZnKHRpc2NpX3JtLT50aXNjaSwgJnJlcSk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgImZsb3clZCBjb25maWcgZmFpbGVkOiAlZFxuIiwgZmxv dy0+dWRtYV9yZmxvd19pZCwKKwkJCXJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJ4X2Nobi0+ Zmxvd3NfcmVhZHkrKzsKKworCXJldHVybiAwOworZXJyOgorCWszX25hdl91ZG1heF9yZWxlYXNl X3J4X2Zsb3cocnhfY2huLCBmbG93X2lkeCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgazNfbmF2X3VkbWF4X2R1bXBfcnhfY2huKHN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5l bCAqY2huKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNobi0+Y29tbW9uLmRldjsKKworCWRl dl9kYmcoZGV2LCAiZHVtcF9yeF9jaG46XG4iCisJCSJ1ZG1hX3JjaGFuX2lkOiAlZFxuIgorCQki c3JjX3RocmVhZDogJTA4eFxuIgorCQkiZHN0X3RocmVhZDogJTA4eFxuIgorCQkiZXBpYjogJWRc biIKKwkJImhkZXNjX3NpemU6ICV1XG4iCisJCSJwc2RhdGFfc2l6ZTogJXVcbiIKKwkJInN3ZGF0 YV9zaXplOiAldVxuIgorCQkiZmxvd19pZF9iYXNlOiAlZFxuIgorCQkiZmxvd19udW06ICVkXG4i LAorCQljaG4tPnVkbWFfcmNoYW5faWQsCisJCWNobi0+Y29tbW9uLnNyY190aHJlYWQsCisJCWNo bi0+Y29tbW9uLmRzdF90aHJlYWQsCisJCWNobi0+Y29tbW9uLmVwaWIsCisJCWNobi0+Y29tbW9u LmhkZXNjX3NpemUsCisJCWNobi0+Y29tbW9uLnBzZGF0YV9zaXplLAorCQljaG4tPmNvbW1vbi5z d2RhdGFfc2l6ZSwKKwkJY2huLT5mbG93X2lkX2Jhc2UsCisJCWNobi0+Zmxvd19udW0pOworfQor CitzdGF0aWMgdm9pZCBrM19uYXZfdWRtYXhfZHVtcF9yeF9ydF9jaG4oc3RydWN0IGszX25hdl91 ZG1heF9yeF9jaGFubmVsICpjaG4sCisJCQkJCWNoYXIgKm1hcmspCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gY2huLT5jb21tb24uZGV2OworCisJZGV2X2RiZyhkZXYsICI9PT0gZHVtcCA9PT0+ ICVzXG4iLCBtYXJrKTsKKwlkZXZfZGJnKGRldiwgIjB4JTA4WDogJTA4WFxuIiwgVURNQV9SQ0hB Tl9SVF9DVExfUkVHLAorCQl4dWRtYV9yY2hhbnJ0X3JlYWQoY2huLT51ZG1hX3JjaGFueCwgVURN QV9SQ0hBTl9SVF9DVExfUkVHKSk7CisJZGV2X2RiZyhkZXYsICIweCUwOFg6ICUwOFhcbiIsIFVE TUFfUkNIQU5fUlRfUEVFUl9SVF9FTl9SRUcsCisJCXh1ZG1hX3JjaGFucnRfcmVhZChjaG4tPnVk bWFfcmNoYW54LAorCQkJCSAgIFVETUFfUkNIQU5fUlRfUEVFUl9SVF9FTl9SRUcpKTsKKwlkZXZf ZGJnKGRldiwgIjB4JTA4WDogJTA4WFxuIiwgVURNQV9SQ0hBTl9SVF9QQ05UX1JFRywKKwkJeHVk bWFfcmNoYW5ydF9yZWFkKGNobi0+dWRtYV9yY2hhbngsIFVETUFfUkNIQU5fUlRfUENOVF9SRUcp KTsKKwlkZXZfZGJnKGRldiwgIjB4JTA4WDogJTA4WFxuIiwgVURNQV9SQ0hBTl9SVF9CQ05UX1JF RywKKwkJeHVkbWFfcmNoYW5ydF9yZWFkKGNobi0+dWRtYV9yY2hhbngsIFVETUFfUkNIQU5fUlRf QkNOVF9SRUcpKTsKKwlkZXZfZGJnKGRldiwgIjB4JTA4WDogJTA4WFxuIiwgVURNQV9SQ0hBTl9S VF9TQkNOVF9SRUcsCisJCXh1ZG1hX3JjaGFucnRfcmVhZChjaG4tPnVkbWFfcmNoYW54LCBVRE1B X1JDSEFOX1JUX1NCQ05UX1JFRykpOworfQorCitzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5u ZWwgKmszX25hdl91ZG1heF9yZXF1ZXN0X3J4X2NobigKKwkJc3RydWN0IGRldmljZSAqZGV2LAor CQljb25zdCBjaGFyICpuYW1lLAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWxfY2Zn ICpjZmcpCit7CisJc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG47CisJaW50 IHJldCwgaTsKKworCWlmIChjZmctPmZsb3dfaWRfbnVtIDw9IDApCisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCisJaWYgKGNmZy0+Zmxvd19pZF9udW0gIT0gMSAmJgorCSAgICAoY2ZnLT5k ZWZfZmxvd19jZmcgfHwgY2ZnLT5mbG93X2lkX3VzZV9yeGNoYW5faWQpKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCXJ4X2NobiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcnhf Y2huKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeF9jaG4pCisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCisJcnhfY2huLT5jb21tb24uZGV2ID0gZGV2OworCXJ4X2Nobi0+Y29tbW9uLnN3ZGF0 YV9zaXplID0gY2ZnLT5zd2RhdGFfc2l6ZTsKKworCS8qIHBhcnNlIG9mIHVkbWFwIGNoYW5uZWwg Ki8KKwlyZXQgPSBvZl9rM19uYXZfdWRtYXhfcGFyc2VfY2huKGRldi0+b2Zfbm9kZSwgbmFtZSwK KwkJCQkJJnJ4X2Nobi0+Y29tbW9uLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisK KwlyeF9jaG4tPmNvbW1vbi5oZGVzY19zaXplID0ga25hdl91ZG1hcF9oZGVzY19jYWxjX3NpemUo CisJCQkJCXJ4X2Nobi0+Y29tbW9uLmVwaWIsCisJCQkJCXJ4X2Nobi0+Y29tbW9uLnBzZGF0YV9z aXplLAorCQkJCQlyeF9jaG4tPmNvbW1vbi5zd2RhdGFfc2l6ZSk7CisKKwkvKiByZXF1ZXN0IGFu ZCBjZmcgVURNQVAgUlggY2hhbm5lbCAqLworCXJ4X2Nobi0+dWRtYV9yY2hhbnggPSB4dWRtYV9y Y2hhbl9nZXQocnhfY2huLT5jb21tb24udWRtYXgsIC0xKTsKKwlpZiAoSVNfRVJSKHJ4X2Nobi0+ dWRtYV9yY2hhbngpKSB7CisJCXJldCA9IFBUUl9FUlIocnhfY2huLT51ZG1hX3JjaGFueCk7CisJ CWRldl9lcnIoZGV2LCAiVURNQVggcmNoYW54IGdldCBlcnIgJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyOworCX0KKwlyeF9jaG4tPnVkbWFfcmNoYW5faWQgPSB4dWRtYV9yY2hhbl9nZXRfaWQocnhf Y2huLT51ZG1hX3JjaGFueCk7CisKKwlyeF9jaG4tPmZsb3dfbnVtID0gY2ZnLT5mbG93X2lkX251 bTsKKwlyeF9jaG4tPmZsb3dfaWRfYmFzZSA9IGNmZy0+Zmxvd19pZF9iYXNlOworCisJLyogVXNl IFJYIGNoYW5uZWwgaWQgYXMgZmxvdyBpZDogdGFyZ2V0IGRldiBjYW4ndCBnZW5lcmF0ZSBmbG93 X2lkICovCisJaWYgKGNmZy0+Zmxvd19pZF91c2VfcnhjaGFuX2lkKQorCQlyeF9jaG4tPmZsb3df aWRfYmFzZSA9IHJ4X2Nobi0+dWRtYV9yY2hhbl9pZDsKKworCXJ4X2Nobi0+Zmxvd3MgPSBkZXZt X2tjYWxsb2MoZGV2LCByeF9jaG4tPmZsb3dfbnVtLAorCQkJCSAgICAgc2l6ZW9mKCpyeF9jaG4t PmZsb3dzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeF9jaG4tPmZsb3dzKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIFJlc2VydmUgcmFuZ2Ugb2YgUlggZmxvd3Mg Ki8KKwlpZiAoIWNmZy0+Zmxvd19pZF91c2VfcnhjaGFuX2lkKSB7CisJCXJldCA9IHh1ZG1hX3Jl c2VydmVfcmZsb3dfcmFuZ2UocnhfY2huLT5jb21tb24udWRtYXgsCisJCQkJCQlyeF9jaG4tPmZs b3dfaWRfYmFzZSwKKwkJCQkJCXJ4X2Nobi0+Zmxvd19udW0pOworCQlpZiAocmV0IDwgMCkgewor CQkJZGV2X2VycihkZXYsICJVRE1BWCByZXNlcnZlX3JmbG93IGdldCBlcnIgJWRcbiIsIHJldCk7 CisJCQlnb3RvIGVycjsKKwkJfQorCQlyeF9jaG4tPmZsb3dfaWRfYmFzZSA9IHJldDsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgcnhfY2huLT5mbG93X251bTsgaSsrKQorCQlyeF9jaG4tPmZsb3dz W2ldLnVkbWFfcmZsb3dfaWQgPSByeF9jaG4tPmZsb3dfaWRfYmFzZSArIGk7CisKKwkvKiByZXF1 ZXN0IGFuZCBjZmcgcHNpLWwgKi8KKwlyeF9jaG4tPmNvbW1vbi5kc3RfdGhyZWFkID0KKwkJCXh1 ZG1hX2Rldl9nZXRfcHNpbF9iYXNlKHJ4X2Nobi0+Y29tbW9uLnVkbWF4KSArCisJCQlyeF9jaG4t PnVkbWFfcmNoYW5faWQ7CisKKwlyeF9jaG4tPm5lZWRfdGlzY2lfZnJlZSA9IGZhbHNlOworCXJl dCA9IGszX25hdl91ZG1heF9jZmdfcnhfY2huKHJ4X2Nobik7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBjZmcgcmNoYW4gJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOwor CX0KKwlyeF9jaG4tPm5lZWRfdGlzY2lfZnJlZSA9IHRydWU7CisKKwkvKiBpbml0IGRlZmF1bHQg UlggZmxvdyBvbmx5IGlmIGZsb3dfbnVtID0gMSAqLworCWlmIChjZmctPmRlZl9mbG93X2NmZykg eworCQlyZXQgPSBrM19uYXZfdWRtYXhfY2ZnX3J4X2Zsb3cocnhfY2huLCAwLCBjZmctPmRlZl9m bG93X2NmZyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIWNmZy0+c2tp cF9wc2lsKSB7CisJCXJldCA9IHh1ZG1hX25hdnNzX3BzaWxfcGFpcihyeF9jaG4tPmNvbW1vbi51 ZG1heCwKKwkJCQkJICAgIHJ4X2Nobi0+Y29tbW9uLnNyY190aHJlYWQsCisJCQkJCSAgICByeF9j aG4tPmNvbW1vbi5kc3RfdGhyZWFkKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJQ U0ktTCByZXF1ZXN0IGVyciAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcnhf Y2huLT5wc2lsX3BhaXJlZCA9IHRydWU7CisJfQorCisJazNfbmF2X3VkbWF4X2R1bXBfcnhfY2hu KHJ4X2Nobik7CisKKwlyZXR1cm4gcnhfY2huOworCitlcnI6CisJazNfbmF2X3VkbWF4X3JlbGVh c2VfcnhfY2huKHJ4X2Nobik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKGszX25hdl91ZG1heF9yZXF1ZXN0X3J4X2Nobik7CisKK3ZvaWQgazNfbmF2X3VkbWF4 X3JlbGVhc2VfcnhfY2huKAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2No bikKK3sKKwlpbnQgaTsKKworCWlmIChyeF9jaG4tPnBzaWxfcGFpcmVkKSB7CisJCXh1ZG1hX25h dnNzX3BzaWxfdW5wYWlyKHJ4X2Nobi0+Y29tbW9uLnVkbWF4LAorCQkJCQlyeF9jaG4tPmNvbW1v bi5zcmNfdGhyZWFkLAorCQkJCQlyeF9jaG4tPmNvbW1vbi5kc3RfdGhyZWFkKTsKKwkJcnhfY2hu LT5wc2lsX3BhaXJlZCA9IGZhbHNlOworCX0KKworCWlmIChJU19FUlJfT1JfTlVMTChyeF9jaG4t PmNvbW1vbi51ZG1heCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByeF9jaG4tPmZs b3dfbnVtOyBpKyspCisJCWszX25hdl91ZG1heF9yZWxlYXNlX3J4X2Zsb3cocnhfY2huLCBpKTsK KworCWlmIChyeF9jaG4tPm5lZWRfdGlzY2lfZnJlZSkgeworCQlyeF9jaG4tPm5lZWRfdGlzY2lf ZnJlZSA9IGZhbHNlOworCX0KKworCXh1ZG1hX2ZyZWVfcmZsb3dfcmFuZ2UocnhfY2huLT5jb21t b24udWRtYXgsCisJCQkgICAgICAgcnhfY2huLT5mbG93X2lkX2Jhc2UsIHJ4X2Nobi0+Zmxvd19u dW0pOworCisJaWYgKCFJU19FUlJfT1JfTlVMTChyeF9jaG4tPnVkbWFfcmNoYW54KSkKKwkJeHVk bWFfcmNoYW5fcHV0KHJ4X2Nobi0+Y29tbW9uLnVkbWF4LAorCQkJCXJ4X2Nobi0+dWRtYV9yY2hh bngpOworCisJeHVkbWFfZGV2X3B1dChyeF9jaG4tPmNvbW1vbi51ZG1heCk7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChrM19uYXZfdWRtYXhfcmVsZWFzZV9yeF9jaG4pOworCitpbnQgazNfbmF2X3Vk bWF4X3J4X2Zsb3dfaW5pdCgKKwkJc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9j aG4sIHUzMiBmbG93X2lkeCwKKwkJc3RydWN0IGszX25hdl91ZG1heF9yeF9mbG93X2NmZyAqZmxv d19jZmcpCit7CisJaWYgKGZsb3dfaWR4ID49IHJ4X2Nobi0+Zmxvd19udW0pCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIGszX25hdl91ZG1heF9jZmdfcnhfZmxvdyhyeF9jaG4sIGZsb3df aWR4LCBmbG93X2NmZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19uYXZfdWRtYXhfcnhfZmxv d19pbml0KTsKKwordTMyIGszX25hdl91ZG1heF9yeF9mbG93X2dldF9mZHFfaWQoCisJCXN0cnVj dCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbCAqcnhfY2huLCB1MzIgZmxvd19pZHgpCit7CisJc3Ry dWN0IGszX25hdl91ZG1heF9yeF9mbG93ICpmbG93OworCisJaWYgKGZsb3dfaWR4ID49IHJ4X2No bi0+Zmxvd19udW0pCisJCXJldHVybiAtRUlOVkFMOworCisJZmxvdyA9ICZyeF9jaG4tPmZsb3dz W2Zsb3dfaWR4XTsKKworCXJldHVybiBrM19uYXZfcmluZ2FjY19nZXRfcmluZ19pZChmbG93LT5y aW5ncnhmZHEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2X3VkbWF4X3J4X2Zsb3dfZ2V0 X2ZkcV9pZCk7CisKK3UzMiBrM19uYXZfdWRtYXhfcnhfZ2V0X2Zsb3dfaWRfYmFzZSgKKwkJc3Ry dWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4pCit7CisJcmV0dXJuIHJ4X2Nobi0+ Zmxvd19pZF9iYXNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2X3VkbWF4X3J4X2dldF9m bG93X2lkX2Jhc2UpOworCitpbnQgazNfbmF2X3VkbWF4X2VuYWJsZV9yeF9jaG4oc3RydWN0IGsz X25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4pCit7CisJdTMyIHJ4cnRfY3RsOworCisJaWYg KHJ4X2Nobi0+Zmxvd3NfcmVhZHkgPCByeF9jaG4tPmZsb3dfbnVtKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJ4cnRfY3RsID0geHVkbWFfcmNoYW5ydF9yZWFkKHJ4X2Nobi0+dWRtYV9yY2hhbngs CisJCQkJICAgICAgVURNQV9SQ0hBTl9SVF9DVExfUkVHKTsKKwlyeHJ0X2N0bCB8PSBVRE1BX0NI QU5fUlRfQ1RMX0VOOworCXh1ZG1hX3JjaGFucnRfd3JpdGUocnhfY2huLT51ZG1hX3JjaGFueCwg VURNQV9SQ0hBTl9SVF9DVExfUkVHLAorCQkJICAgIHJ4cnRfY3RsKTsKKworCXh1ZG1hX3JjaGFu cnRfd3JpdGUocnhfY2huLT51ZG1hX3JjaGFueCwKKwkJCSAgICBVRE1BX1JDSEFOX1JUX1BFRVJf UlRfRU5fUkVHLAorCQkJICAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUpOworCisJazNfbmF2X3Vk bWF4X2R1bXBfcnhfcnRfY2huKHJ4X2NobiwgInJ4cnQgZW4iKTsKKwlyZXR1cm4gMDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKGszX25hdl91ZG1heF9lbmFibGVfcnhfY2huKTsKKwordm9pZCBrM19u YXZfdWRtYXhfZGlzYWJsZV9yeF9jaG4oc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpy eF9jaG4pCit7CisJazNfbmF2X3VkbWF4X2R1bXBfcnhfcnRfY2huKHJ4X2NobiwgInJ4cnQgZGlz MSIpOworCisJeHVkbWFfcmNoYW5ydF93cml0ZShyeF9jaG4tPnVkbWFfcmNoYW54LAorCQkJICAg IFVETUFfUkNIQU5fUlRfUEVFUl9SVF9FTl9SRUcsCisJCQkgICAgMCk7CisJeHVkbWFfcmNoYW5y dF93cml0ZShyeF9jaG4tPnVkbWFfcmNoYW54LCBVRE1BX1JDSEFOX1JUX0NUTF9SRUcsIDApOwor CisJazNfbmF2X3VkbWF4X2R1bXBfcnhfcnRfY2huKHJ4X2NobiwgInJ4cnQgZGlzMiIpOworfQor RVhQT1JUX1NZTUJPTF9HUEwoazNfbmF2X3VkbWF4X2Rpc2FibGVfcnhfY2huKTsKKwordm9pZCBr M19uYXZfdWRtYXhfdGRvd25fcnhfY2huKHN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbCAq cnhfY2huLAorCQkJICAgICAgIGJvb2wgc3luYykKK3sKKwlpbnQgaSA9IDA7CisJdTMyIHZhbDsK KworCWszX25hdl91ZG1heF9kdW1wX3J4X3J0X2NobihyeF9jaG4sICJyeHJ0IHRkb3duMSIpOwor CisJeHVkbWFfcmNoYW5ydF93cml0ZShyeF9jaG4tPnVkbWFfcmNoYW54LCBVRE1BX1JDSEFOX1JU X1BFRVJfUlRfRU5fUkVHLAorCQkJICAgIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUgfCBVRE1BX1BF RVJfUlRfRU5fVEVBUkRPV04pOworCisJdmFsID0geHVkbWFfcmNoYW5ydF9yZWFkKHJ4X2Nobi0+ dWRtYV9yY2hhbngsIFVETUFfUkNIQU5fUlRfQ1RMX1JFRyk7CisKKwl3aGlsZSAoc3luYyAmJiAo dmFsICYgVURNQV9DSEFOX1JUX0NUTF9FTikpIHsKKwkJdmFsID0geHVkbWFfcmNoYW5ydF9yZWFk KHJ4X2Nobi0+dWRtYV9yY2hhbngsCisJCQkJCSBVRE1BX1JDSEFOX1JUX0NUTF9SRUcpOworCQl1 ZGVsYXkoMSk7CisJCWlmIChpID4gSzNfVURNQVhfVERPV05fVElNRU9VVF9VUykgeworCQkJZGV2 X2VycihyeF9jaG4tPmNvbW1vbi5kZXYsICJSWCB0ZG93biB0aW1lb3V0XG4iKTsKKwkJCWJyZWFr OworCQl9CisJCWkrKzsKKwl9CisKKwl2YWwgPSB4dWRtYV9yY2hhbnJ0X3JlYWQocnhfY2huLT51 ZG1hX3JjaGFueCwKKwkJCQkgVURNQV9SQ0hBTl9SVF9QRUVSX1JUX0VOX1JFRyk7CisJaWYgKHN5 bmMgJiYgKHZhbCAmIFVETUFfUEVFUl9SVF9FTl9FTkFCTEUpKQorCQlkZXZfZXJyKHJ4X2Nobi0+ Y29tbW9uLmRldiwgIlRYIHRkb3duIHBlZXIgbm90IHN0b3BwZWRcbiIpOworCWszX25hdl91ZG1h eF9kdW1wX3J4X3J0X2NobihyeF9jaG4sICJyeHJ0IHRkb3duMiIpOworfQorRVhQT1JUX1NZTUJP TF9HUEwoazNfbmF2X3VkbWF4X3Rkb3duX3J4X2Nobik7CisKK3ZvaWQgazNfbmF2X3VkbWF4X3Jl c2V0X3J4X2NobigKKwkJc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4sCisJ CXUzMiBmbG93X251bSwgdm9pZCAqZGF0YSwKKwkJdm9pZCAoKmNsZWFudXApKHZvaWQgKmRhdGEs IGRtYV9hZGRyX3QgZGVzY19kbWEpLAorCQlib29sIHNraXBfZmRxKQoreworCXN0cnVjdCBrM19u YXZfdWRtYXhfcnhfZmxvdyAqZmxvdyA9ICZyeF9jaG4tPmZsb3dzW2Zsb3dfbnVtXTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSByeF9jaG4tPmNvbW1vbi5kZXY7CisJZG1hX2FkZHJfdCBkZXNjX2Rt YTsKKwlpbnQgb2NjX3J4LCBpLCByZXQ7CisKKwkvKiByZXNldCBSWENRIGFzIGl0IGlzIG5vdCBp bnB1dCBmb3IgdWRtYSAtIGV4cGVjdGVkIHRvIGJlIGVtcHR5ICovCisJaWYgKGZsb3ctPnJpbmdy eCkKKwkJazNfbmF2X3JpbmdhY2NfcmluZ19yZXNldChmbG93LT5yaW5ncngpOworCisJLyogU2tp cCBSWCBGRFEgaW4gY2FzZSBvbmUgRkRRIGlzIHVzZWQgZm9yIHRoZSBzZXQgb2YgZmxvd3MgKi8K KwlpZiAoc2tpcF9mZHEpCisJCXJldHVybjsKKworCS8qCisJICogUlggRkRRIHJlc2V0IG5lZWQg dG8gYmUgc3BlY2lhbCB3YXkgYXMgaXQgaXMgaW5wdXQgZm9yIHVkbWEgYW5kIGl0cworCSAqIHN0 YXRlIGNhY2hlZCBieSB1ZG1hLCBzbzoKKwkgKiAxKSBzYXZlIFJYIEZEUSBvY2MKKwkgKiAyKSBj bGVhbiB1cCBSWCBGRFEgYW5kIGNhbGwgY2FsbGJhY2sgLmNsZWFudXAoKSBmb3IgZWFjaCBkZXNj CisJICogMykgcmVzZXQgUlggRkRRIGluIGEgc3BlY2lhbCB3YXkKKwkgKi8KKwlvY2NfcnggPSBr M19uYXZfcmluZ2FjY19yaW5nX2dldF9vY2MoZmxvdy0+cmluZ3J4ZmRxKTsKKwlkZXZfZGJnKGRl diwgIlJYIHJlc2V0IGZsb3cgJXUgb2NjX3R4ICV1XG4iLCBmbG93X251bSwgb2NjX3J4KTsKKwor CWZvciAoaSA9IDA7IGkgPCBvY2Nfcng7IGkrKykgeworCQlyZXQgPSBrM19uYXZfcmluZ2FjY19y aW5nX3BvcChmbG93LT5yaW5ncnhmZHEsICZkZXNjX2RtYSk7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIoZGV2LCAiUlggcmVzZXQgcG9wICVkXG4iLCByZXQpOworCQkJYnJlYWs7CisJCX0KKwkJ Y2xlYW51cChkYXRhLCBkZXNjX2RtYSk7CisJfQorCisJazNfbmF2X3JpbmdhY2NfcmluZ19yZXNl dF9kbWEoZmxvdy0+cmluZ3J4ZmRxLCBvY2NfcngpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf bmF2X3VkbWF4X3Jlc2V0X3J4X2Nobik7CisKK2ludCBrM19uYXZfdWRtYXhfcHVzaF9yeF9jaG4o CisJCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbCAqcnhfY2huLAorCQl1MzIgZmxvd19u dW0sCisJCXN0cnVjdCBrbmF2X3VkbWFwX2hvc3RfZGVzY190ICpkZXNjX3J4LAorCQlkbWFfYWRk cl90IGRlc2NfZG1hKQoreworCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfZmxvdyAqZmxvdyA9ICZy eF9jaG4tPmZsb3dzW2Zsb3dfbnVtXTsKKworCXJldHVybiBrM19uYXZfcmluZ2FjY19yaW5nX3B1 c2goZmxvdy0+cmluZ3J4ZmRxLCAmZGVzY19kbWEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf bmF2X3VkbWF4X3B1c2hfcnhfY2huKTsKKworaW50IGszX25hdl91ZG1heF9wb3BfcnhfY2huKAor CQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2NobiwKKwkJdTMyIGZsb3dfbnVt LAorCQlkbWFfYWRkcl90ICpkZXNjX2RtYSkKK3sKKwlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2Zs b3cgKmZsb3cgPSAmcnhfY2huLT5mbG93c1tmbG93X251bV07CisKKwlyZXR1cm4gazNfbmF2X3Jp bmdhY2NfcmluZ19wb3AoZmxvdy0+cmluZ3J4LCBkZXNjX2RtYSk7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChrM19uYXZfdWRtYXhfcG9wX3J4X2Nobik7CisKK2ludCBrM19uYXZfdWRtYXhfcnhfZ2V0 X2lycShzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2NobiwKKwkJCSAgICB1MzIg Zmxvd19udW0sCisJCQkgICAgdW5zaWduZWQgaW50ICppcnEsIHUzMiBmbGFncywgYm9vbCBzaGFy ZSwKKwkJCSAgICB1MzIgZmxvd19udW1fc2hhcmUpCit7CisJc3RydWN0IGszX25hdl91ZG1heF9y eF9mbG93ICpmbG93LCAqZmxvd19zaGFyZTsKKwl1bnNpZ25lZCBpbnQgdmlycSA9IDA7CisKKwlp ZiAoZmxvd19udW0gPj0gcnhfY2huLT5mbG93X251bSB8fAorCSAgICAoZmxvd19udW1fc2hhcmUg IT0gLTEgJiYgZmxvd19udW1fc2hhcmUgPj0gcnhfY2huLT5mbG93X251bSkpCisJCXJldHVybiAt RUlOVkFMOworCisJZmxvdyA9ICZyeF9jaG4tPmZsb3dzW2Zsb3dfbnVtXTsKKworCWlmIChzaGFy ZSAmJiBmbG93X251bV9zaGFyZSAhPSAtMSkgeworCQlmbG93X3NoYXJlID0gJnJ4X2Nobi0+Zmxv d3NbZmxvd19udW1fc2hhcmVdOworCQl2aXJxID0gZmxvd19zaGFyZS0+dmlycTsKKwl9CisKKwlm bG93LT52aXJxID0gdGlfc2NpX2ludGFfcmVnaXN0ZXJfZXZlbnQoCisJCQlyeF9jaG4tPmNvbW1v bi5kZXYsCisJCQlrM19uYXZfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKGZsb3ctPnJpbmdyeCks CisJCQlrM19uYXZfcmluZ2FjY19nZXRfcmluZ19pZChmbG93LT5yaW5ncngpLAorCQkJdmlycSwg ZmxhZ3MpOworCWlmIChmbG93LT52aXJxIDw9IDApCisJCXJldHVybiAtRU5PREVWOworCisJKmly cSA9IGZsb3ctPnZpcnE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX25h dl91ZG1heF9yeF9nZXRfaXJxKTsKKwordm9pZCBrM19uYXZfdWRtYXhfcnhfcHV0X2lycShzdHJ1 Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2NobiwKKwkJCSAgICAgdTMyIGZsb3dfbnVt KQoreworCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfZmxvdyAqZmxvdzsKKworCWlmIChmbG93X251 bSA+PSByeF9jaG4tPmZsb3dfbnVtKQorCQlyZXR1cm47CisKKwlmbG93ID0gJnJ4X2Nobi0+Zmxv d3NbZmxvd19udW1dOworCisJaWYgKGZsb3ctPnZpcnEgPD0gMCkKKwkJcmV0dXJuOworCisJdGlf c2NpX2ludGFfdW5yZWdpc3Rlcl9ldmVudCgKKwkJCXJ4X2Nobi0+Y29tbW9uLmRldiwKKwkJCWsz X25hdl9yaW5nYWNjX2dldF90aXNjaV9kZXZfaWQoZmxvdy0+cmluZ3J4KSwKKwkJCWszX25hdl9y aW5nYWNjX2dldF9yaW5nX2lkKGZsb3ctPnJpbmdyeCksIGZsb3ctPnZpcnEpOworfQorRVhQT1JU X1NZTUJPTF9HUEwoazNfbmF2X3VkbWF4X3J4X3B1dF9pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvdGkvazMtdWRtYS1wcml2YXRlLmMgYi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLXByaXZh dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIxYmFlNzAwZjdh MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEtcHJpdmF0ZS5jCkBA IC0wLDAgKzEsMTIzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqICBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0g aHR0cDovL3d3dy50aS5jb20KKyAqICBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZh bHVzaUB0aS5jb20+CisgKi8KKworaW50IHh1ZG1hX25hdnNzX3BzaWxfcGFpcihzdHJ1Y3QgdWRt YV9kZXYgKnVkLCB1MzIgc3JjX3RocmVhZCx1MzIgZHN0X3RocmVhZCkKK3sKKwlyZXR1cm4gbmF2 c3NfcHNpbF9wYWlyKHVkLCBzcmNfdGhyZWFkLCBkc3RfdGhyZWFkKTsKK30KK0VYUE9SVF9TWU1C T0woeHVkbWFfbmF2c3NfcHNpbF9wYWlyKTsKKworaW50IHh1ZG1hX25hdnNzX3BzaWxfdW5wYWly KHN0cnVjdCB1ZG1hX2RldiAqdWQsIHUzMiBzcmNfdGhyZWFkLCB1MzIgZHN0X3RocmVhZCkKK3sK KwlyZXR1cm4gbmF2c3NfcHNpbF91bnBhaXIodWQsIHNyY190aHJlYWQsIGRzdF90aHJlYWQpOwor fQorRVhQT1JUX1NZTUJPTCh4dWRtYV9uYXZzc19wc2lsX3VucGFpcik7CisKK3N0cnVjdCB1ZG1h X2RldiAqb2ZfeHVkbWFfZGV2X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFy ICpwcm9wZXJ0eSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnVkbWFfbm9kZSA9IG5wOworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHVkbWFfZGV2ICp1ZDsKKworCWlm IChwcm9wZXJ0eSkgeworCQl1ZG1hX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBwcm9wZXJ0 eSwgMCk7CisJCWlmICghdWRtYV9ub2RlKSB7CisJCQlwcl9lcnIoIlVETUEgbm9kZSBpcyBub3Qg Zm91bmRcbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJCX0KKwl9CisKKwlwZGV2 ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZSh1ZG1hX25vZGUpOworCWlmICghcGRldikgeworCQlw cl9lcnIoIlVETUEgZGV2aWNlIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FUFJP QkVfREVGRVIpOworCX0KKworCW9mX25vZGVfcHV0KHVkbWFfbm9kZSk7CisKKwl1ZCA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghdWQpIHsKKwkJcHJfZXJyKCJVRE1BIGhhcyBu b3QgYmVlbiBwcm9wZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKKwl9 CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIHVkOworfQor RVhQT1JUX1NZTUJPTChvZl94dWRtYV9kZXZfZ2V0KTsKKwordm9pZCB4dWRtYV9kZXZfcHV0KHN0 cnVjdCB1ZG1hX2RldiAqdWQpCit7CisJcG1fcnVudGltZV9wdXRfc3luYyh1ZC0+ZGRldi5kZXYp OworfQorRVhQT1JUX1NZTUJPTCh4dWRtYV9kZXZfcHV0KTsKKwordTMyIHh1ZG1hX2Rldl9nZXRf cHNpbF9iYXNlKHN0cnVjdCB1ZG1hX2RldiAqdWQpCit7CisJcmV0dXJuIHVkLT5wc2lsX2Jhc2U7 Cit9CitFWFBPUlRfU1lNQk9MKHh1ZG1hX2Rldl9nZXRfcHNpbF9iYXNlKTsKKworc3RydWN0IHVk bWFfdGlzY2lfcm0gKnh1ZG1hX2Rldl9nZXRfdGlzY2lfcm0oc3RydWN0IHVkbWFfZGV2ICp1ZCkK K3sKKwlyZXR1cm4gJnVkLT50aXNjaV9ybTsKK30KK0VYUE9SVF9TWU1CT0woeHVkbWFfZGV2X2dl dF90aXNjaV9ybSk7CisKK2ludCB4dWRtYV9yZXNlcnZlX3JmbG93X3JhbmdlKHN0cnVjdCB1ZG1h X2RldiAqdWQsIGludCBmcm9tLCBpbnQgY250KQoreworCXJldHVybiBfX3VkbWFfcmVzZXJ2ZV9y Zmxvd19yYW5nZSh1ZCwgZnJvbSwgY250KTsKK30KK0VYUE9SVF9TWU1CT0woeHVkbWFfcmVzZXJ2 ZV9yZmxvd19yYW5nZSk7CisKK2ludCB4dWRtYV9mcmVlX3JmbG93X3JhbmdlKHN0cnVjdCB1ZG1h X2RldiAqdWQsIGludCBmcm9tLCBpbnQgY250KQoreworCXJldHVybiBfX3VkbWFfZnJlZV9yZmxv d19yYW5nZSh1ZCwgZnJvbSwgY250KTsKK30KK0VYUE9SVF9TWU1CT0woeHVkbWFfZnJlZV9yZmxv d19yYW5nZSk7CisKKyNkZWZpbmUgWFVETUFfR0VUX1BVVF9SRVNPVVJDRShyZXMpCQkJCQlcCitz dHJ1Y3QgdWRtYV8jI3JlcyAqeHVkbWFfIyNyZXMjI19nZXQoc3RydWN0IHVkbWFfZGV2ICp1ZCwg aW50IGlkKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBfX3VkbWFfcmVzZXJ2ZV8jI3Jlcyh1ZCwg ZmFsc2UsIGlkKTsJCQlcCit9CQkJCQkJCQkJXAorRVhQT1JUX1NZTUJPTCh4dWRtYV8jI3JlcyMj X2dldCk7CQkJCQlcCisJCQkJCQkJCQlcCit2b2lkIHh1ZG1hXyMjcmVzIyNfcHV0KHN0cnVjdCB1 ZG1hX2RldiAqdWQsIHN0cnVjdCB1ZG1hXyMjcmVzICpwKQlcCit7CQkJCQkJCQkJXAorCWNsZWFy X2JpdChwLT5pZCwgdWQtPnJlcyMjX21hcCk7CQkJCVwKK30JCQkJCQkJCQlcCitFWFBPUlRfU1lN Qk9MKHh1ZG1hXyMjcmVzIyNfcHV0KQorWFVETUFfR0VUX1BVVF9SRVNPVVJDRSh0Y2hhbik7CitY VURNQV9HRVRfUFVUX1JFU09VUkNFKHJjaGFuKTsKK1hVRE1BX0dFVF9QVVRfUkVTT1VSQ0UocmZs b3cpOworCisjZGVmaW5lIFhVRE1BX0dFVF9SRVNPVVJDRV9JRChyZXMpCQkJCQlcCitpbnQgeHVk bWFfIyNyZXMjI19nZXRfaWQoc3RydWN0IHVkbWFfIyNyZXMgKnApCQkJCVwKK3sJCQkJCQkJCQlc CisJcmV0dXJuIHAtPmlkOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorRVhQT1JUX1NZTUJPTCh4dWRt YV8jI3JlcyMjX2dldF9pZCkKK1hVRE1BX0dFVF9SRVNPVVJDRV9JRCh0Y2hhbik7CitYVURNQV9H RVRfUkVTT1VSQ0VfSUQocmNoYW4pOworWFVETUFfR0VUX1JFU09VUkNFX0lEKHJmbG93KTsKKwor LyogRXhwb3J0ZWQgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucyAqLworI2RlZmluZSBYVURNQV9S VF9JT19GVU5DVElPTlMocmVzKQkJCQkJXAordTMyIHh1ZG1hXyMjcmVzIyNydF9yZWFkKHN0cnVj dCB1ZG1hXyMjcmVzICpwLCBpbnQgcmVnKQkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHVkbWFf IyNyZXMjI3J0X3JlYWQocCwgcmVnKTsJCQkJXAorfQkJCQkJCQkJCVwKK0VYUE9SVF9TWU1CT0wo eHVkbWFfIyNyZXMjI3J0X3JlYWQpOwkJCQkJXAorCQkJCQkJCQkJXAordm9pZCB4dWRtYV8jI3Jl cyMjcnRfd3JpdGUoc3RydWN0IHVkbWFfIyNyZXMgKnAsIGludCByZWcsIHUzMiB2YWwpCVwKK3sJ CQkJCQkJCQlcCisJdWRtYV8jI3JlcyMjcnRfd3JpdGUocCwgcmVnLCB2YWwpOwkJCQlcCit9CQkJ CQkJCQkJXAorRVhQT1JUX1NZTUJPTCh4dWRtYV8jI3JlcyMjcnRfd3JpdGUpCitYVURNQV9SVF9J T19GVU5DVElPTlModGNoYW4pOworWFVETUFfUlRfSU9fRlVOQ1RJT05TKHJjaGFuKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEu YwppbmRleCAyYTJhMmM4YjFmYzIuLjQ5ZDRjNDliODEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9k bWEvdGkvazMtdWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpAQCAtMzYxNyw2 ICszNjE3LDkgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRtYV9kcml2ZXIgPSB7 CiAKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodWRtYV9kcml2ZXIpOwogCisvKiBQcml2YXRlIGlu dGVyZmFjZXMgdG8gVURNQSAqLworI2luY2x1ZGUgImszLXVkbWEtcHJpdmF0ZS5jIgorCiBNT0RV TEVfQUxJQVMoInBsYXRmb3JtOnRpLXVkbWEiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgSzMg RE1BIGRyaXZlciBmb3IgQ1BQSSA1LjAgY29tcGxpYW50IGRldmljZXMiKTsKIE1PRFVMRV9BVVRI T1IoIlBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Iik7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmggYi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmgKaW5k ZXggNzg3YjlmZWVmZTVkLi4yNzIwZDczZmYzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3Rp L2szLXVkbWEuaAorKysgYi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmgKQEAgLTEyOSw0ICsxMjks MzQgQEAgc3RydWN0IHVkbWFfdGlzY2lfcm0gewogCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJt X3Jhbmdlc1tSTV9SQU5HRV9MQVNUXTsKIH07CiAKKy8qIERpcmVjdCBhY2Nlc3MgdG8gVURNQSBy ZXNvdXJjZXMgKi8KK2ludCB4dWRtYV9uYXZzc19wc2lsX3BhaXIoc3RydWN0IHVkbWFfZGV2ICp1 ZCwgdTMyIHNyY190aHJlYWQsdTMyIGRzdF90aHJlYWQpOworaW50IHh1ZG1hX25hdnNzX3BzaWxf dW5wYWlyKHN0cnVjdCB1ZG1hX2RldiAqdWQsIHUzMiBzcmNfdGhyZWFkLAorCQkJICAgIHUzMiBk c3RfdGhyZWFkKTsKKworc3RydWN0IHVkbWFfZGV2ICpvZl94dWRtYV9kZXZfZ2V0KHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BlcnR5KTsKK3ZvaWQgeHVkbWFfZGV2X3B1 dChzdHJ1Y3QgdWRtYV9kZXYgKnVkKTsKK3UzMiB4dWRtYV9kZXZfZ2V0X3BzaWxfYmFzZShzdHJ1 Y3QgdWRtYV9kZXYgKnVkKTsKK3N0cnVjdCB1ZG1hX3Rpc2NpX3JtICp4dWRtYV9kZXZfZ2V0X3Rp c2NpX3JtKHN0cnVjdCB1ZG1hX2RldiAqdWQpOworCitpbnQgeHVkbWFfcmVzZXJ2ZV9yZmxvd19y YW5nZShzdHJ1Y3QgdWRtYV9kZXYgKnVkLCBpbnQgZnJvbSwgaW50IGNudCk7CitpbnQgeHVkbWFf ZnJlZV9yZmxvd19yYW5nZShzdHJ1Y3QgdWRtYV9kZXYgKnVkLCBpbnQgZnJvbSwgaW50IGNudCk7 CisKK3N0cnVjdCB1ZG1hX3RjaGFuICp4dWRtYV90Y2hhbl9nZXQoc3RydWN0IHVkbWFfZGV2ICp1 ZCwgaW50IGlkKTsKK3N0cnVjdCB1ZG1hX3JjaGFuICp4dWRtYV9yY2hhbl9nZXQoc3RydWN0IHVk bWFfZGV2ICp1ZCwgaW50IGlkKTsKK3N0cnVjdCB1ZG1hX3JmbG93ICp4dWRtYV9yZmxvd19nZXQo c3RydWN0IHVkbWFfZGV2ICp1ZCwgaW50IGlkKTsKKwordm9pZCB4dWRtYV90Y2hhbl9wdXQoc3Ry dWN0IHVkbWFfZGV2ICp1ZCwgc3RydWN0IHVkbWFfdGNoYW4gKnApOwordm9pZCB4dWRtYV9yY2hh bl9wdXQoc3RydWN0IHVkbWFfZGV2ICp1ZCwgc3RydWN0IHVkbWFfcmNoYW4gKnApOwordm9pZCB4 dWRtYV9yZmxvd19wdXQoc3RydWN0IHVkbWFfZGV2ICp1ZCwgc3RydWN0IHVkbWFfcmZsb3cgKnAp OworCitpbnQgeHVkbWFfdGNoYW5fZ2V0X2lkKHN0cnVjdCB1ZG1hX3RjaGFuICpwKTsKK2ludCB4 dWRtYV9yY2hhbl9nZXRfaWQoc3RydWN0IHVkbWFfcmNoYW4gKnApOworaW50IHh1ZG1hX3JmbG93 X2dldF9pZChzdHJ1Y3QgdWRtYV9yZmxvdyAqcCk7CisKK3UzMiB4dWRtYV90Y2hhbnJ0X3JlYWQo c3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuLCBpbnQgcmVnKTsKK3ZvaWQgeHVkbWFfdGNoYW5ydF93 cml0ZShzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4sIGludCByZWcsIHUzMiB2YWwpOwordTMyIHh1 ZG1hX3JjaGFucnRfcmVhZChzdHJ1Y3QgdWRtYV9yY2hhbiAqcmNoYW4sIGludCByZWcpOwordm9p ZCB4dWRtYV9yY2hhbnJ0X3dyaXRlKHN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiwgaW50IHJlZywg dTMyIHZhbCk7CisKICNlbmRpZiAvKiBLM19VRE1BX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2RtYS9rMy1uYXZzcy11ZG1hLmggYi9pbmNsdWRlL2xpbnV4L2RtYS9rMy1uYXZzcy11 ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NGE4YmNiYjg3 MDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYS9rMy1uYXZzcy11ZG1hLmgK QEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBLMyBOQVZTUyBETUEgZ2x1ZSBpbnRlcmZhY2UKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0g aHR0cDovL3d3dy50aS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBLM19OQVZTU19VRE1BX0hfCisjZGVmaW5lIEszX05B VlNTX1VETUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NvYy90aS9rMy1uYXZzcy1yaW5nYWNjLmg+ CisKK3N0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hhbm5lbF9jZmcgeworCXN0cnVjdCBrM19uYXZf cmluZ19jZmcgdHhfY2ZnOworCXN0cnVjdCBrM19uYXZfcmluZ19jZmcgdHhjcV9jZmc7CisKKwli b29sIHR4X3BhdXNlX29uX2VycjsKKwlib29sIHR4X2ZpbHRfZWluZm87CisJYm9vbCB0eF9maWx0 X3Bzd29yZHM7CisJYm9vbCB0eF9zdXByX3RkcGt0OworCXUzMiAgc3dkYXRhX3NpemU7Cit9Owor CitzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWw7CisKK3N0cnVjdCBrM19uYXZfdWRtYXhf dHhfY2hhbm5lbCAqazNfbmF2X3VkbWF4X3JlcXVlc3RfdHhfY2huKAorCQlzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCWNvbnN0IGNoYXIgKm5hbWUsCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hh bm5lbF9jZmcgKmNmZyk7CisKK3ZvaWQgazNfbmF2X3VkbWF4X3JlbGVhc2VfdHhfY2huKAorCQlz dHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2Nobik7CitpbnQgazNfbmF2X3VkbWF4 X3B1c2hfdHhfY2huKAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobiwK KwkJc3RydWN0IGtuYXZfdWRtYXBfaG9zdF9kZXNjX3QgKmRlc2NfdHgsCisJCWRtYV9hZGRyX3Qg ZGVzY19kbWEpOworaW50IGszX25hdl91ZG1heF9wb3BfdHhfY2huKAorCQlzdHJ1Y3QgazNfbmF2 X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobiwKKwkJZG1hX2FkZHJfdCAqZGVzY19kbWEpOworaW50 IGszX25hdl91ZG1heF9lbmFibGVfdHhfY2huKHN0cnVjdCBrM19uYXZfdWRtYXhfdHhfY2hhbm5l bCAqdHhfY2huKTsKK3ZvaWQgazNfbmF2X3VkbWF4X2Rpc2FibGVfdHhfY2huKHN0cnVjdCBrM19u YXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhfY2huKTsKK3ZvaWQgazNfbmF2X3VkbWF4X3Rkb3duX3R4 X2NobihzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2NobiwKKwkJCSAgICAgICBi b29sIHN5bmMpOwordm9pZCBrM19uYXZfdWRtYXhfcmVzZXRfdHhfY2huKAorCQlzdHJ1Y3QgazNf bmF2X3VkbWF4X3R4X2NoYW5uZWwgKnR4X2Nobiwgdm9pZCAqZGF0YSwKKwkJdm9pZCAoKmNsZWFu dXApKHZvaWQgKmRhdGEsIGRtYV9hZGRyX3QgZGVzY19kbWEpKTsKK3UzMiBrM19uYXZfdWRtYXhf dHhfZ2V0X2hkZXNjX3NpemUoc3RydWN0IGszX25hdl91ZG1heF90eF9jaGFubmVsICp0eF9jaG4p OwordTMyIGszX25hdl91ZG1heF90eF9nZXRfdHhjcV9pZChzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4 X2NoYW5uZWwgKnR4X2Nobik7CitpbnQgazNfbmF2X3VkbWF4X3R4X2dldF9pcnEoc3RydWN0IGsz X25hdl91ZG1heF90eF9jaGFubmVsICp0eF9jaG4sCisJCQkgICAgdW5zaWduZWQgaW50ICppcnEs IHUzMiBmbGFncywgYm9vbCBzaGFyZSwKKwkJCSAgICBzdHJ1Y3QgazNfbmF2X3VkbWF4X3R4X2No YW5uZWwgKnR4X2Nobl9zaGFyZSk7Cit2b2lkIGszX25hdl91ZG1heF90eF9wdXRfaXJxKHN0cnVj dCBrM19uYXZfdWRtYXhfdHhfY2hhbm5lbCAqdHhfY2huKTsKKworZW51bSB7CisJSzNfTkFWX1VE TUFYX1NSQ19UQUdfTE9fS0VFUCA9IDAsCisJSzNfTkFWX1VETUFYX1NSQ19UQUdfTE9fVVNFX0ZM T1dfUkVHID0gMSwKKwlLM19OQVZfVURNQVhfU1JDX1RBR19MT19VU0VfUkVNT1RFX0ZMT1dfSUQg PSAyLAorCUszX05BVl9VRE1BWF9TUkNfVEFHX0xPX1VTRV9SRU1PVEVfU1JDX1RBRyA9IDQsCit9 OworCisvKioKKyAqIGszX25hdl91ZG1heF9yeF9mbG93X2NmZyAtIFVETUEgUlggZmxvdyBjZmcK KyAqCisgKiBAcnhfY2ZnOgkJUlggcmluZyBjb25maWd1cmF0aW9uCisgKiBAcnhmZHFfY2ZnOgkJ UlggZnJlZSBIb3N0IFBEIHJpbmcgY29uZmlndXJhdGlvbgorICogQHJpbmdfcnhxX2lkOglSWCBy aW5nIGlkIChvciAtMSBmb3IgYW55KQorICogQHJpbmdfcnhmZHEwX2lkOglSWCBmcmVlIEhvc3Qg UEQgcmluZyAoRkRRKSBpZiAob3IgLTEgZm9yIGFueSkKKyAqIEByeF9lcnJvcl9oYW5kbGluZzoJ UnggRXJyb3IgSGFuZGxpbmcgTW9kZSAoMCAtIGRyb3AsIDEgLSByZS10cnkpCisgKiBAc3JjX3Rh Z19sb19zZWw6CVJ4IFNvdXJjZSBUYWcgTG93IEJ5dGUgU2VsZWN0b3IgaW4gSG9zdCBQRAorICov CitzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2Zsb3dfY2ZnIHsKKwlzdHJ1Y3QgazNfbmF2X3Jpbmdf Y2ZnIHJ4X2NmZzsKKwlzdHJ1Y3QgazNfbmF2X3JpbmdfY2ZnIHJ4ZmRxX2NmZzsKKwlpbnQgcmlu Z19yeHFfaWQ7CisJaW50IHJpbmdfcnhmZHEwX2lkOworCWJvb2wgcnhfZXJyb3JfaGFuZGxpbmc7 CisJaW50IHNyY190YWdfbG9fc2VsOworfTsKKworLyoqCisgKiBrM19uYXZfdWRtYXhfcnhfY2hh bm5lbF9jZmcgLSBVRE1BIFJYIGNoYW5uZWwgY2ZnCisgKgorICogQHBzZGF0YV9zaXplOglTVyBE YXRhIGlzIHByZXNlbnQgaW4gSG9zdCBQRCBvZiBAc3dkYXRhX3NpemUgYnl0ZXMKKyAqIEBmbG93 X2lkX2Jhc2U6CWZpcnN0IGZsb3dfaWQgdXNlZCBieSBjaGFubmVsLgorICoJCQlpZiBAZmxvd19p ZF9iYXNlID0gLTEgLSBmbG93IGlkcyByYW5nZSB3aWxsIGJlIGFsbG9jYXRlZAorICoJCQlkeW5h bWljYWxseS4KKyAqIEBmbG93X2lkX251bToJbnVtYmVyIG9mIFJYIGZsb3dzIHVzZWQgYnkgY2hh bm5lbAorICogQGZsb3dfaWRfdXNlX3J4Y2hhbl9pZDoJdXNlIFJYIGNoYW5uZWwgaWQgYXMgZmxv dyBpZCwKKyAqCQkJCXVzZWQgb25seSBpZiBAZmxvd19pZF9udW0gPSAxCisgKiBAZGVmX2Zsb3df Y2ZnCWRlZmF1bHQgUlggZmxvdyBjb25maWd1cmF0aW9uLAorICoJCQl1c2VkIG9ubHkgaWYgQGZs b3dfaWRfbnVtID0gMQorICovCitzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWxfY2ZnIHsK Kwl1MzIgIHN3ZGF0YV9zaXplOworCWludCAgZmxvd19pZF9iYXNlOworCWludCAgZmxvd19pZF9u dW07CisJYm9vbCBmbG93X2lkX3VzZV9yeGNoYW5faWQ7CisJYm9vbCBza2lwX3BzaWw7CisKKwlz dHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2Zsb3dfY2ZnICpkZWZfZmxvd19jZmc7Cit9OworCitzdHJ1 Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWw7CisKK3N0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hh bm5lbCAqazNfbmF2X3VkbWF4X3JlcXVlc3RfcnhfY2huKAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYs CisJCWNvbnN0IGNoYXIgKm5hbWUsCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbF9j ZmcgKmNmZyk7CisKK3ZvaWQgazNfbmF2X3VkbWF4X3JlbGVhc2VfcnhfY2huKAorCQlzdHJ1Y3Qg azNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2Nobik7CitpbnQgazNfbmF2X3VkbWF4X2VuYWJs ZV9yeF9jaG4oc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4pOwordm9pZCBr M19uYXZfdWRtYXhfZGlzYWJsZV9yeF9jaG4oc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVs ICpyeF9jaG4pOwordm9pZCBrM19uYXZfdWRtYXhfdGRvd25fcnhfY2huKHN0cnVjdCBrM19uYXZf dWRtYXhfcnhfY2hhbm5lbCAqcnhfY2huLAorCQkJICAgICAgIGJvb2wgc3luYyk7CitpbnQgazNf bmF2X3VkbWF4X3B1c2hfcnhfY2huKAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwg KnJ4X2NobiwKKwkJdTMyIGZsb3dfbnVtLAorCQlzdHJ1Y3Qga25hdl91ZG1hcF9ob3N0X2Rlc2Nf dCAqZGVzY190eCwKKwkJZG1hX2FkZHJfdCBkZXNjX2RtYSk7CitpbnQgazNfbmF2X3VkbWF4X3Bv cF9yeF9jaG4oCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5lbCAqcnhfY2huLAorCQl1 MzIgZmxvd19udW0sCisJCWRtYV9hZGRyX3QgKmRlc2NfZG1hKTsKK2ludCBrM19uYXZfdWRtYXhf cnhfZmxvd19pbml0KAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2NoYW5uZWwgKnJ4X2Nobiwg dTMyIGZsb3dfaWR4LAorCQlzdHJ1Y3QgazNfbmF2X3VkbWF4X3J4X2Zsb3dfY2ZnICpmbG93X2Nm Zyk7Cit1MzIgazNfbmF2X3VkbWF4X3J4X2Zsb3dfZ2V0X2ZkcV9pZCgKKwkJc3RydWN0IGszX25h dl91ZG1heF9yeF9jaGFubmVsICpyeF9jaG4sIHUzMiBmbG93X2lkeCk7Cit1MzIgazNfbmF2X3Vk bWF4X3J4X2dldF9mbG93X2lkX2Jhc2UoCisJCXN0cnVjdCBrM19uYXZfdWRtYXhfcnhfY2hhbm5l bCAqcnhfY2huKTsKK2ludCBrM19uYXZfdWRtYXhfcnhfZ2V0X2lycShzdHJ1Y3QgazNfbmF2X3Vk bWF4X3J4X2NoYW5uZWwgKnJ4X2NobiwKKwkJCSAgICB1MzIgZmxvd19udW0sCisJCQkgICAgdW5z aWduZWQgaW50ICppcnEsIHUzMiBmbGFncywgYm9vbCBzaGFyZSwKKwkJCSAgICB1MzIgZmxvd19u dW1fc2hhcmUpOwordm9pZCBrM19uYXZfdWRtYXhfcnhfcHV0X2lycShzdHJ1Y3QgazNfbmF2X3Vk bWF4X3J4X2NoYW5uZWwgKnJ4X2NobiwKKwkJCSAgICAgdTMyIGZsb3dfbnVtKTsKK3ZvaWQgazNf bmF2X3VkbWF4X3Jlc2V0X3J4X2NobigKKwkJc3RydWN0IGszX25hdl91ZG1heF9yeF9jaGFubmVs ICpyeF9jaG4sCisJCXUzMiBmbG93X251bSwgdm9pZCAqZGF0YSwKKwkJdm9pZCAoKmNsZWFudXAp KHZvaWQgKmRhdGEsIGRtYV9hZGRyX3QgZGVzY19kbWEpLAorCQlib29sIHNraXBfZmRxKTsKKwor I2VuZGlmIC8qIEszX05BVlNTX1VETUFfSF8gKi8K