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: dmaengine: mcf-edma: add ColdFire mcf5441x eDMA support From: Angelo Dureghello Message-Id: <20180425200816.GA4662@jerusalem> Date: Wed, 25 Apr 2018 22:08:17 +0200 To: vinod.koul@intel.com, dmaengine@vger.kernel.org Cc: gerg@linux-m68k.org, linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBhZGRzIGRtYSBzdXBwb3J0IGZvciBOWFAgbWNmNTQ0MXggKENvbGRGaXJlKSBm YW1pbHkuCgpDb2xkRmlyZSBtY2Y1NDQxeCBpbXBsZW1lbnRzIGFuIGVkbWEgaHcgbW9kdWxlIHNp bWlsYXIgdG8gdGhlCm9uZSBpbXBsZW1lbnRlZCBpbiBWeWJyaWQgVkZ4eHggY29udHJvbGxlcnMs IGJ1dCB3aXRoIGEgc2xpZ2h0bHkKZGlmZmVyZW50IHJlZ2lzdGVyIHNldCwgbW9yZSBkbWEgY2hh bm5lbHMgKDY0IGluc3RlYWQgb2YgMzIpLAphIGRpZmZlcmVudCBpbnRlcnJ1cHQgbWVjaGFuaXNt IGFuZCBzb21lIG90aGVyIG1pbm9yIGRpZmZlcmVuY2VzLgoKRm9yIHRoZSBhYm92ZSByZWFzb25z LCBtb2RmeWluZyBmc2wtZWRtYS5jIHdhcyB0b28gY29tcGxleCBhbmQKbGlrZWx5IHRvbyB1Z2x5 LiBGcm9tIGhlcmUsIHRoZSBkZWNpc2lvbiB0byBjcmVhdGUgYSBkaWZmZXJlbnQKZHJpdmVyLCBi dXQgc3RhcnRpbmcgZnJvbSBmc2wtZWRtYS4KClRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHdp dGggbWNmNTQ0MXggKHN0bWFyazIgYm9hcmQpIGFuZApkc3BpIGRyaXZlciwgaXQgd29ya2VkIGZp bmUgYW5kIHNlZW1zIHJlbGlhYmxlIGF0IGxlYXN0IGFzIGEKZmlyc3QgaW5pdGlhbCB2ZXJzaW9u LgoKU2lnbmVkLW9mZi1ieTogQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KLS0t CiBhcmNoL202OGsvY29uZmlncy9zdG1hcmsyX2RlZmNvbmZpZyAgICAgICAgfCAgIDIgKwogZHJp dmVycy9kbWEvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMv ZG1hL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS9t Y2YtZWRtYS5jICAgICAgICAgICAgICAgICAgICAgfCA4NDcgKysrKysrKysrKysrKysrKysrKysr CiBpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmggfCAgMzggKwogNSBm aWxlcyBjaGFuZ2VkLCA4OTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZG1hL21jZi1lZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3BsYXRm b3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9z dG1hcmsyX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3N0bWFyazJfZGVmY29uZmlnCmlu ZGV4IGJmMmJmZDRlYmQyYS4uMmQxMTFlMGFlYjQ4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29u Zmlncy9zdG1hcmsyX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9zdG1hcmsyX2Rl ZmNvbmZpZwpAQCAtNzEsNiArNzEsOCBAQCBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNPXkK ICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CiAjIENP TkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CitDT05GSUdf TUNGX0VETUE9eQogIyBDT05GSUdfRklMRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RO T1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IDZk NjFjZDAyMzYzMy4uMTM5NjI2YzAxYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmln CisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTIyNSw2ICsyMjUsMTcgQEAgY29uZmlnIEZT TF9FRE1BCiAJICBtdWx0aXBsZXhpbmcgY2FwYWJpbGl0eSBmb3IgRE1BIHJlcXVlc3Qgc291cmNl cyhzbG90KS4KIAkgIFRoaXMgbW9kdWxlIGNhbiBiZSBmb3VuZCBvbiBGcmVlc2NhbGUgVnlicmlk IGFuZCBMUy0xIFNvQ3MuCiAKK2NvbmZpZyBNQ0ZfRURNQQorCXRyaXN0YXRlICJGcmVlc2NhbGUg ZURNQSBlbmdpbmUgc3VwcG9ydCwgQ29sZEZpcmUgbWNmNTQ0MXggU29DcyIKKwlkZXBlbmRzIG9u IE01NDQxeAorCXNlbGVjdCBETUFfRU5HSU5FCisJc2VsZWN0IERNQV9WSVJUVUFMX0NIQU5ORUxT CisJaGVscAorCSAgU3VwcG9ydCB0aGUgRnJlZXNjYWxlIENvbGRGaXJlIGVETUEgZW5naW5lLCA2 NC1jaGFubmVsCisJICBpbXBsZW1lbnRhdGlvbiB0aGF0IHBlcmZvcm1zIGNvbXBsZXggZGF0YSB0 cmFuc2ZlcnMgd2l0aAorCSAgbWluaW1hbCBpbnRlcnZlbnRpb24gZnJvbSBhIGhvc3QgcHJvY2Vz c29yLgorCSAgVGhpcyBtb2R1bGUgY2FuIGJlIGZvdW5kIG9uIEZyZWVzY2FsZSBDb2xkRmlyZSBt Y2Y1NDQxeCBTb0NzLgorCiBjb25maWcgRlNMX1JBSUQKICAgICAgICAgdHJpc3RhdGUgIkZyZWVz Y2FsZSBSQUlEIGVuZ2luZSBTdXBwb3J0IgogICAgICAgICBkZXBlbmRzIG9uIEZTTF9TT0MgJiYg IUFTWU5DX1RYX0VOQUJMRV9DSEFOTkVMX1NXSVRDSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEv TWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCAwZjYyYTRkNDlhYWIuLmRiOTM4 MjQ0NDFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9k bWEvTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAgb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkg Kz0gZHcvCiBvYmotJChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCiBvYmotJChD T05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KIG9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNs LWVkbWEubworb2JqLSQoQ09ORklHX01DRl9FRE1BKSArPSBtY2YtZWRtYS5vCiBvYmotJChDT05G SUdfRlNMX1JBSUQpICs9IGZzbF9yYWlkLm8KIG9iai0kKENPTkZJR19IU1VfRE1BKSArPSBoc3Uv CiBvYmotJChDT05GSUdfSU1HX01EQ19ETUEpICs9IGltZy1tZGMtZG1hLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZG1hL21jZi1lZG1hLmMgYi9kcml2ZXJzL2RtYS9tY2YtZWRtYS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGZiNjI4MmU5MjJhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9kbWEvbWNmLWVkbWEuYwpAQCAtMCwwICsxLDg0NyBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBkcml2ZXJzL2RtYS9tY2YtZWRt YS5jCisgKgorICogRHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIENvbGRGaXJlIDY0LWNoIGVETUEg aW1wbGVtZW50YXRpb24sCisgKiBkZXJpdmVkIGZyb20gZHJpdmVycy9kbWEvZnNsLWVkbWEuYy4K KyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMK KyAqCisgKiBDb3B5cmlnaHQgMjAxNyBTeXNhbSwgQW5nZWxvIER1cmVnaGVsbG8gIDxhbmdlbG9A c3lzYW0uaXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9m ICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAq IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNl bnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisj ZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv bXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9k bWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oPgorCisjaW5jbHVkZSAidmly dC1kbWEuaCIKKworI2RlZmluZSBFRE1BX0NIQU5ORUxTCQk2NAorI2RlZmluZSBFRE1BX01BU0tf Q0goeCkJCSgoeCkgJiAweDNGKQorI2RlZmluZSBFRE1BX01BU0tfSVRFUih4KQkoKHgpICYgMHg3 RkZGKQorI2RlZmluZSBFRE1BX1RDRF9NRU1fQUxJR04JMzIKKworI2RlZmluZSBFRE1BX1RDRF9B VFRSX0RTWl84YgkoMHgwMDAwKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTWl8xNmIJKDB4MDAw MSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU1pfMzJiCSgweDAwMDIpCisjZGVmaW5lIEVETUFf VENEX0FUVFJfRFNaXzE2QgkoMHgwMDA0KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTWl84Ygko RURNQV9UQ0RfQVRUUl9EU1pfOGIgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU1pfMTZi CShFRE1BX1RDRF9BVFRSX0RTWl8xNmIgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU1pf MzJiCShFRE1BX1RDRF9BVFRSX0RTWl8zMmIgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9T U1pfMTZCCShFRE1BX1RDRF9BVFRSX0RTWl8xNkIgPDwgOCkKKworI2RlZmluZSBNQ0ZfRURNQV9C VVNXSURUSFMJKEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8IFwKKwkJCQkgQklUKERN QV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURU SF80X0JZVEVTKSB8IFwKKwkJCQkgQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKSkKKwor I2RlZmluZSBFRE1BX0NSX0VSQ0EJCUJJVCgyKQorI2RlZmluZSBFRE1BX0NSX0VSR0EJCUJJVCgz KQorCisjZGVmaW5lIEVETUFfVENEX0NTUl9JTlRfTUFKT1IJQklUKDEpCisjZGVmaW5lIEVETUFf VENEX0NTUl9EX1JFUQlCSVQoMykKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0VfU0cJQklUKDQpCisK KyNkZWZpbmUgRURNQV9DRVJSX0NFUlIoeCkJKCh4KSAmIDB4MUYpCisKK3N0cnVjdCBlZG1hX3Rj ZCB7CisJdTMyCXNhZGRyOworCXUxNglhdHRyOworCXUxNglzb2ZmOworCXUzMgluYnl0ZXM7CisJ dTMyCXNsYXN0OworCXUzMglkYWRkcjsKKwl1MTYJY2l0ZXI7CisJdTE2CWRvZmY7CisJdTMyCWRs YXN0X3NnYTsKKwl1MTYJYml0ZXI7CisJdTE2CWNzcjsKK307CisKK3N0cnVjdCBlZG1hX3JlZ3Mg eworCXUzMgljcjsKKwl1MzIJZXM7CisJdTMyCWVycWg7CisJdTMyCWVycWw7CisJdTMyCWVlaWg7 CisJdTMyCWVlaWw7CisJdTgJc2VycTsKKwl1OAljZXJxOworCXU4CXNlZWk7CisJdTgJY2VlaTsK Kwl1OAljaW50OworCXU4CWNlcnI7CisJdTgJc3NydDsKKwl1OAljZG5lOworCXUzMglpbnRoOwor CXUzMglpbnRsOworCXUzMgllcnJoOworCXUzMgllcnJsOworCXUzMglyc2g7CisJdTMyCXJzbDsK Kwl1OAlyZXNbMjAwXTsKKwl1OAlkY2hfcHJpW0VETUFfQ0hBTk5FTFNdOworCXU4CXJlczJbMzc3 Nl07CisJc3RydWN0CWVkbWFfdGNkIHRjZFtFRE1BX0NIQU5ORUxTXTsKK307CisKK3N0cnVjdCBt Y2ZfZWRtYV9zd190Y2QgeworCWRtYV9hZGRyX3QgcHRjZDsKKwlzdHJ1Y3QgZWRtYV90Y2QgKnZ0 Y2Q7Cit9OworCitzdHJ1Y3QgbWNmX2VkbWFfZGVzYyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2Mg dmRlc2M7CisJc3RydWN0IG1jZl9lZG1hX2NoYW4gKmVjaGFuOworCWJvb2wgaXNjeWNsaWM7CisJ dW5zaWduZWQgaW50IG5fdGNkczsKKwlzdHJ1Y3QgbWNmX2VkbWFfc3dfdGNkIHRjZFtdOworfTsK Kworc3RydWN0IG1jZl9lZG1hX3NsYXZlX2NvbmZpZyB7CisJZW51bSBkbWFfdHJhbnNmZXJfZGly ZWN0aW9uIGRpcjsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoOworCXUzMiBk ZXZfYWRkcjsKKwl1MzIgYnVyc3Q7CisJdTMyIGF0dHI7Cit9OworCitzdHJ1Y3QgbWNmX2VkbWFf Y2hhbiB7CisJc3RydWN0IHZpcnRfZG1hX2NoYW4gdmNoYW47CisJZW51bSBkbWFfc3RhdHVzCXN0 YXR1czsKKwlib29sIGlkbGU7CisJc3RydWN0IG1jZl9lZG1hX2VuZ2luZSAqZWRtYTsKKwlzdHJ1 Y3QgZG1hX3Bvb2wgKnRjZF9wb29sOworCXN0cnVjdCBtY2ZfZWRtYV9kZXNjICplZGVzYzsKKwlz dHJ1Y3QgbWNmX2VkbWFfc2xhdmVfY29uZmlnIGVzYzsKKwl1MzIgc2xhdmVfaWQ7Cit9OworCitz dHJ1Y3QgbWNmX2VkbWFfZW5naW5lIHsKKwlzdHJ1Y3QgZG1hX2RldmljZSBkbWFfZGV2OworCWlu dCBuX2NoYW5zOworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKKwlzdHJ1Y3QgbXV0ZXggbWNmX2Vk bWFfbXV0ZXg7CisJc3RydWN0IG1jZl9lZG1hX2NoYW4gY2hhbnNbXTsKK307CisKK3N0YXRpYyBz dHJ1Y3QgbWNmX2VkbWFfY2hhbiAqdG9fbWNmX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgbWNmX2VkbWFfY2hhbiwg dmNoYW4uY2hhbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWNmX2VkbWFfZGVzYyAqdG9fbWNmX2Vk bWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v Zih2ZCwgc3RydWN0IG1jZl9lZG1hX2Rlc2MsIHZkZXNjKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGludCBtY2ZfZWRtYV9nZXRfdGNkX2F0dHIoZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93 aWR0aCkKK3sKKwlzd2l0Y2ggKGFkZHJfd2lkdGgpIHsKKwljYXNlIDE6CisJCXJldHVybiBFRE1B X1RDRF9BVFRSX1NTWl84YiB8IEVETUFfVENEX0FUVFJfRFNaXzhiOworCWNhc2UgMjoKKwkJcmV0 dXJuIEVETUFfVENEX0FUVFJfU1NaXzE2YiB8IEVETUFfVENEX0FUVFJfRFNaXzE2YjsKKwljYXNl IDQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NaXzMyYiB8IEVETUFfVENE X0FUVFJfRFNaXzMyYjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1jZl9lZG1hX2VuYWJsZV9yZXF1 ZXN0KHN0cnVjdCBtY2ZfZWRtYV9jaGFuICptY2ZfY2hhbikKK3sKKwlzdHJ1Y3QgZWRtYV9yZWdz ICpyZWdzID0gbWNmX2NoYW4tPmVkbWEtPm1lbWJhc2U7CisJdTMyIGNoID0gbWNmX2NoYW4tPnZj aGFuLmNoYW4uY2hhbl9pZDsKKworCWlvd3JpdGU4KEVETUFfTUFTS19DSChjaCksICZyZWdzLT5z ZWVpKTsKKwlpb3dyaXRlOChFRE1BX01BU0tfQ0goY2gpLCAmcmVncy0+c2VycSk7Cit9CisKK3N0 YXRpYyB2b2lkIG1jZl9lZG1hX2Rpc2FibGVfcmVxdWVzdChzdHJ1Y3QgbWNmX2VkbWFfY2hhbiAq bWNmX2NoYW4pCit7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9IG1jZl9jaGFuLT5lZG1hLT5t ZW1iYXNlOworCXUzMiBjaCA9IG1jZl9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisKKwlpb3dy aXRlOChFRE1BX01BU0tfQ0goY2gpLCAmcmVncy0+Y2VycSk7CisJaW93cml0ZTgoRURNQV9NQVNL X0NIKGNoKSwgJnJlZ3MtPmNlZWkpOworfQorCitzdGF0aWMgdm9pZCBtY2ZfZWRtYV9zZXRfdGNk X3JlZ3Moc3RydWN0IG1jZl9lZG1hX2NoYW4gKm1jZl9jaGFuLAorCQkJCSAgc3RydWN0IGVkbWFf dGNkICp0Y2QpCit7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9IG1jZl9jaGFuLT5lZG1hLT5t ZW1iYXNlOworCXUzMiBjaCA9IG1jZl9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisKKwlpb3dy aXRlMTYoMCwgJnJlZ3MtPnRjZFtjaF0uY3NyKTsKKwlpb3dyaXRlMzIodGNkLT5zYWRkciwgJnJl Z3MtPnRjZFtjaF0uc2FkZHIpOworCWlvd3JpdGUxNih0Y2QtPmF0dHIsICZyZWdzLT50Y2RbY2hd LmF0dHIpOworCWlvd3JpdGUxNih0Y2QtPnNvZmYsICZyZWdzLT50Y2RbY2hdLnNvZmYpOworCWlv d3JpdGUzMih0Y2QtPm5ieXRlcywgJnJlZ3MtPnRjZFtjaF0ubmJ5dGVzKTsKKwlpb3dyaXRlMzIo dGNkLT5zbGFzdCwgJnJlZ3MtPnRjZFtjaF0uc2xhc3QpOworCWlvd3JpdGUzMih0Y2QtPmRhZGRy LCAmcmVncy0+dGNkW2NoXS5kYWRkcik7CisJaW93cml0ZTE2KHRjZC0+Y2l0ZXIsICZyZWdzLT50 Y2RbY2hdLmNpdGVyKTsKKwlpb3dyaXRlMTYodGNkLT5kb2ZmLCAmcmVncy0+dGNkW2NoXS5kb2Zm KTsKKwlpb3dyaXRlMzIodGNkLT5kbGFzdF9zZ2EsICAmcmVncy0+dGNkW2NoXS5kbGFzdF9zZ2Ep OworCWlvd3JpdGUxNih0Y2QtPmJpdGVyLCAmcmVncy0+dGNkW2NoXS5iaXRlcik7CisJaW93cml0 ZTE2KHRjZC0+Y3NyLCAmcmVncy0+dGNkW2NoXS5jc3IpOworfQorCitzdGF0aWMgdm9pZCBtY2Zf ZWRtYV94ZmVyX2Rlc2Moc3RydWN0IG1jZl9lZG1hX2NoYW4gKm1jZl9jaGFuKQoreworCXN0cnVj dCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4dF9kZXNjKCZtY2Zf Y2hhbi0+dmNoYW4pOworCWlmICghdmRlc2MpCisJCXJldHVybjsKKworCW1jZl9jaGFuLT5lZGVz YyA9IHRvX21jZl9lZG1hX2Rlc2ModmRlc2MpOworCisJbWNmX2VkbWFfc2V0X3RjZF9yZWdzKG1j Zl9jaGFuLCBtY2ZfY2hhbi0+ZWRlc2MtPnRjZFswXS52dGNkKTsKKwltY2ZfZWRtYV9lbmFibGVf cmVxdWVzdChtY2ZfY2hhbik7CisKKwltY2ZfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNT OworCW1jZl9jaGFuLT5pZGxlID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2Zf ZWRtYV90eF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWNmX2Vk bWFfZW5naW5lICptY2ZfZWRtYSA9IGRldl9pZDsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0g bWNmX2VkbWEtPm1lbWJhc2U7CisJdW5zaWduZWQgaW50IGNoOworCXN0cnVjdCBtY2ZfZWRtYV9j aGFuICptY2ZfY2hhbjsKKwl1NjQgaW50bWFwOworCisJaW50bWFwID0gaW9yZWFkMzIoJnJlZ3Mt PmludGgpOworCWludG1hcCA8PD0gMzI7CisJaW50bWFwIHw9IGlvcmVhZDMyKCZyZWdzLT5pbnRs KTsKKwlpZiAoIWludG1hcCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IDA7IGNo IDwgbWNmX2VkbWEtPm5fY2hhbnM7IGNoKyspIHsKKwkJaWYgKGludG1hcCAmICgweDEgPDwgY2gp KSB7CisJCQlpb3dyaXRlOChFRE1BX01BU0tfQ0goY2gpLCAmcmVncy0+Y2ludCk7CisKKwkJCW1j Zl9jaGFuID0gJm1jZl9lZG1hLT5jaGFuc1tjaF07CisKKwkJCXNwaW5fbG9jaygmbWNmX2NoYW4t PnZjaGFuLmxvY2spOworCQkJaWYgKCFtY2ZfY2hhbi0+ZWRlc2MtPmlzY3ljbGljKSB7CisJCQkJ bGlzdF9kZWwoJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2Mubm9kZSk7CisJCQkJdmNoYW5fY29va2ll X2NvbXBsZXRlKCZtY2ZfY2hhbi0+ZWRlc2MtPnZkZXNjKTsKKwkJCQltY2ZfY2hhbi0+ZWRlc2Mg PSBOVUxMOworCQkJCW1jZl9jaGFuLT5zdGF0dXMgPSBETUFfQ09NUExFVEU7CisJCQkJbWNmX2No YW4tPmlkbGUgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQl2Y2hhbl9jeWNsaWNfY2FsbGJhY2so Jm1jZl9jaGFuLT5lZGVzYy0+dmRlc2MpOworCQkJfQorCisJCQlpZiAoIW1jZl9jaGFuLT5lZGVz YykKKwkJCQltY2ZfZWRtYV94ZmVyX2Rlc2MobWNmX2NoYW4pOworCisJCQlzcGluX3VubG9jaygm bWNmX2NoYW4tPnZjaGFuLmxvY2spOworCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOwor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmX2VkbWFfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9p ZCAqZGV2X2lkKQoreworCXN0cnVjdCBtY2ZfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gZGV2X2lk OworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSBtY2ZfZWRtYS0+bWVtYmFzZTsKKwl1bnNpZ25l ZCBpbnQgZXJyLCBjaDsKKworCWVyciA9IGlvcmVhZDMyKCZyZWdzLT5lcnJsKTsKKwlpZiAoIWVy cikKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IDA7IGNoIDwgKEVETUFfQ0hBTk5F TFMgLyAyKTsgY2grKykgeworCQlpZiAoZXJyICYgKDB4MSA8PCBjaCkpIHsKKwkJCW1jZl9lZG1h X2Rpc2FibGVfcmVxdWVzdCgmbWNmX2VkbWEtPmNoYW5zW2NoXSk7CisJCQlpb3dyaXRlOChFRE1B X0NFUlJfQ0VSUihjaCksICZyZWdzLT5jZXJyKTsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3Rh dHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJ fQorCX0KKworCWVyciA9IGlvcmVhZDMyKCZyZWdzLT5lcnJoKTsKKwlpZiAoIWVycikKKwkJcmV0 dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IChFRE1BX0NIQU5ORUxTIC8gMik7IGNoIDwgRURN QV9DSEFOTkVMUzsgY2grKykgeworCQlpZiAoZXJyICYgKDB4MSA8PCAoY2ggLSAoRURNQV9DSEFO TkVMUyAvIDIpKSkpIHsKKwkJCW1jZl9lZG1hX2Rpc2FibGVfcmVxdWVzdCgmbWNmX2VkbWEtPmNo YW5zW2NoXSk7CisJCQlpb3dyaXRlOChFRE1BX0NFUlJfQ0VSUihjaCksICZyZWdzLT5jZXJyKTsK KwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2VkbWEt PmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsK K30KKworc3RhdGljIGlubGluZSB2b2lkIG1jZl9lZG1hX2ZpbGxfdGNkKHN0cnVjdCBlZG1hX3Rj ZCAqdGNkLAorCQkJdTMyIHNyYywgdTMyIGRzdCwgdTE2IGF0dHIsIHUxNiBzb2ZmLCB1MzIgbmJ5 dGVzLAorCQkJdTMyIHNsYXN0LCB1MTYgY2l0ZXIsIHUxNiBiaXRlciwgdTE2IGRvZmYsCisJCQl1 MzIgZGxhc3Rfc2dhLCBib29sIG1ham9yX2ludCwKKwkJCWJvb2wgZGlzYWJsZV9yZXEsIGJvb2wg ZW5hYmxlX3NnKQoreworCXUxNiBjc3IgPSAwOworCisJdGNkLT5zYWRkciA9IHNyYzsKKwl0Y2Qt PmRhZGRyID0gZHN0OworCXRjZC0+YXR0ciA9IGF0dHI7CisJdGNkLT5zb2ZmID0gc29mZjsKKwl0 Y2QtPm5ieXRlcyA9IG5ieXRlczsKKwl0Y2QtPnNsYXN0ID0gc2xhc3Q7CisJdGNkLT5jaXRlciA9 IEVETUFfTUFTS19JVEVSKGNpdGVyKTsKKwl0Y2QtPmRvZmYgPSBkb2ZmOworCXRjZC0+ZGxhc3Rf c2dhID0gZGxhc3Rfc2dhOworCXRjZC0+Yml0ZXIgPSBFRE1BX01BU0tfSVRFUihiaXRlcik7CisK KwlpZiAobWFqb3JfaW50KQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUjsKKworCWlm IChkaXNhYmxlX3JlcSkKKwkJY3NyIHw9IEVETUFfVENEX0NTUl9EX1JFUTsKKworCWlmIChlbmFi bGVfc2cpCisJCWNzciB8PSBFRE1BX1RDRF9DU1JfRV9TRzsKKworCXRjZC0+Y3NyID0gY3NyOwor fQorCitzdGF0aWMgaW50IG1jZl9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4sCisJCQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjZmcpCit7CisJc3RydWN0IG1jZl9l ZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9fbWNmX2VkbWFfY2hhbihjaGFuKTsKKworCW1jZl9jaGFu LT5lc2MuZGlyID0gY2ZnLT5kaXJlY3Rpb247CisJaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9E RVZfVE9fTUVNKSB7CisJCW1jZl9jaGFuLT5lc2MuZGV2X2FkZHIgPSBjZmctPnNyY19hZGRyOwor CQltY2ZfY2hhbi0+ZXNjLmFkZHJfd2lkdGggPSBjZmctPnNyY19hZGRyX3dpZHRoOworCQltY2Zf Y2hhbi0+ZXNjLmJ1cnN0ID0gY2ZnLT5zcmNfbWF4YnVyc3Q7CisJCW1jZl9jaGFuLT5lc2MuYXR0 ciA9IG1jZl9lZG1hX2dldF90Y2RfYXR0cihjZmctPnNyY19hZGRyX3dpZHRoKTsKKwl9IGVsc2Ug aWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7CisJCW1jZl9jaGFuLT5lc2Mu ZGV2X2FkZHIgPSBjZmctPmRzdF9hZGRyOworCQltY2ZfY2hhbi0+ZXNjLmFkZHJfd2lkdGggPSBj ZmctPmRzdF9hZGRyX3dpZHRoOworCQltY2ZfY2hhbi0+ZXNjLmJ1cnN0ID0gY2ZnLT5kc3RfbWF4 YnVyc3Q7CisJCW1jZl9jaGFuLT5lc2MuYXR0ciA9IG1jZl9lZG1hX2dldF90Y2RfYXR0cihjZmct PmRzdF9hZGRyX3dpZHRoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtY2ZfZWRtYV9kZXNjICptY2ZfZWRtYV9hbGxv Y19kZXNjKAorCQlzdHJ1Y3QgbWNmX2VkbWFfY2hhbiAqbWNmX2NoYW4sIGludCBzZ19sZW4pCit7 CisJc3RydWN0IG1jZl9lZG1hX2Rlc2MgKm1jZl9kZXNjOworCWludCBpOworCisJbWNmX2Rlc2Mg PSBremFsbG9jKHNpemVvZigqbWNmX2Rlc2MpICsgc2l6ZW9mKHN0cnVjdCBtY2ZfZWRtYV9zd190 Y2QpCisJCQkqIHNnX2xlbiwgR0ZQX05PV0FJVCk7CisJaWYgKCFtY2ZfZGVzYykKKwkJcmV0dXJu IE5VTEw7CisKKwltY2ZfZGVzYy0+ZWNoYW4gPSBtY2ZfY2hhbjsKKwltY2ZfZGVzYy0+bl90Y2Rz ID0gc2dfbGVuOworCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgeworCQltY2ZfZGVzYy0+ dGNkW2ldLnZ0Y2QgPSBkbWFfcG9vbF9hbGxvYyhtY2ZfY2hhbi0+dGNkX3Bvb2wsCisJCQkJCUdG UF9OT1dBSVQsICZtY2ZfZGVzYy0+dGNkW2ldLnB0Y2QpOworCQlpZiAoIW1jZl9kZXNjLT50Y2Rb aV0udnRjZCkKKwkJCWdvdG8gZXJyOworCX0KKworCXJldHVybiBtY2ZfZGVzYzsKKworZXJyOgor CXdoaWxlICgtLWkgPj0gMCkKKwkJZG1hX3Bvb2xfZnJlZShtY2ZfY2hhbi0+dGNkX3Bvb2wsIG1j Zl9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQltY2ZfZGVzYy0+dGNkW2ldLnB0Y2QpOworCWtmcmVl KG1jZl9kZXNjKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICptY2ZfZWRtYV9wcmVwX3NsYXZlX3NnKAorCQlzdHJ1Y3QgZG1hX2No YW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQgc2dfbGVu LCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25n IGZsYWdzLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBtY2ZfZWRtYV9jaGFuICptY2ZfY2hh biA9IHRvX21jZl9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IG1jZl9lZG1hX2Rlc2MgKm1jZl9k ZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdTMyIHNyY19hZGRyLCBkc3RfYWRkciwg bGFzdF9zZywgbmJ5dGVzOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCWludCBpOworCisJaWYg KCFpc19zbGF2ZV9kaXJlY3Rpb24obWNmX2NoYW4tPmVzYy5kaXIpKQorCQlyZXR1cm4gTlVMTDsK KworCW1jZl9kZXNjID0gbWNmX2VkbWFfYWxsb2NfZGVzYyhtY2ZfY2hhbiwgc2dfbGVuKTsKKwlp ZiAoIW1jZl9kZXNjKQorCQlyZXR1cm4gTlVMTDsKKworCW1jZl9kZXNjLT5pc2N5Y2xpYyA9IGZh bHNlOworCisJbmJ5dGVzID0gbWNmX2NoYW4tPmVzYy5hZGRyX3dpZHRoICogbWNmX2NoYW4tPmVz Yy5idXJzdDsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpIHsKKwkJLyogZ2V0IG5l eHQgc2cncyBwaHlzaWNhbCBhZGRyZXNzICovCisJCWxhc3Rfc2cgPSBtY2ZfZGVzYy0+dGNkWyhp ICsgMSkgJSBzZ19sZW5dLnB0Y2Q7CisKKwkJaWYgKG1jZl9jaGFuLT5lc2MuZGlyID09IERNQV9N RU1fVE9fREVWKSB7CisJCQlzcmNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCWRzdF9h ZGRyID0gbWNmX2NoYW4tPmVzYy5kZXZfYWRkcjsKKwkJCXNvZmYgPSBtY2ZfY2hhbi0+ZXNjLmFk ZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNyY19hZGRyID0gbWNmX2No YW4tPmVzYy5kZXZfYWRkcjsKKwkJCWRzdF9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJ c29mZiA9IDA7CisJCQlkb2ZmID0gbWNmX2NoYW4tPmVzYy5hZGRyX3dpZHRoOworCQl9CisKKwkJ aXRlciA9IHNnX2RtYV9sZW4oc2cpIC8gbmJ5dGVzOworCQlpZiAoaSA8IHNnX2xlbiAtIDEpIHsK KwkJCWxhc3Rfc2cgPSBtY2ZfZGVzYy0+dGNkWyhpICsgMSldLnB0Y2Q7CisJCQltY2ZfZWRtYV9m aWxsX3RjZChtY2ZfZGVzYy0+dGNkW2ldLnZ0Y2QsIHNyY19hZGRyLAorCQkJCQkgIGRzdF9hZGRy LCBtY2ZfY2hhbi0+ZXNjLmF0dHIsIHNvZmYsCisJCQkJCSAgbmJ5dGVzLCAwLCBpdGVyLCBpdGVy LCBkb2ZmLCBsYXN0X3NnLAorCQkJCQkgIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisJCX0gZWxzZSB7 CisJCQlsYXN0X3NnID0gMDsKKwkJCW1jZl9lZG1hX2ZpbGxfdGNkKG1jZl9kZXNjLT50Y2RbaV0u dnRjZCwgc3JjX2FkZHIsCisJCQkJCSAgZHN0X2FkZHIsIG1jZl9jaGFuLT5lc2MuYXR0ciwgc29m ZiwKKwkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAg dHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCQl9CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJm1j Zl9jaGFuLT52Y2hhbiwgJm1jZl9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQorCitzdGF0aWMgc3Ry dWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICptY2ZfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJ CXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9s ZW4sCisJCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGly ZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBtY2ZfZWRtYV9jaGFu ICptY2ZfY2hhbiA9IHRvX21jZl9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IG1jZl9lZG1hX2Rl c2MgKm1jZl9kZXNjOworCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OworCWludCBzZ19sZW4sIGk7 CisJdTMyIHNyY19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzOworCXUxNiBzb2ZmLCBk b2ZmLCBpdGVyOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24obWNmX2NoYW4tPmVzYy5kaXIp KQorCQlyZXR1cm4gTlVMTDsKKworCXNnX2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOworCW1j Zl9kZXNjID0gbWNmX2VkbWFfYWxsb2NfZGVzYyhtY2ZfY2hhbiwgc2dfbGVuKTsKKwlpZiAoIW1j Zl9kZXNjKQorCQlyZXR1cm4gTlVMTDsKKwltY2ZfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOworCisJ ZG1hX2J1Zl9uZXh0ID0gZG1hX2FkZHI7CisJbmJ5dGVzID0gbWNmX2NoYW4tPmVzYy5hZGRyX3dp ZHRoICogbWNmX2NoYW4tPmVzYy5idXJzdDsKKwlpdGVyID0gcGVyaW9kX2xlbiAvIG5ieXRlczsK KworCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgeworCQlpZiAoZG1hX2J1Zl9uZXh0ID49 IGRtYV9hZGRyICsgYnVmX2xlbikKKwkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOworCisJCS8q IGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gbWNmX2Rlc2Mt PnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJCWlmIChtY2ZfY2hhbi0+ZXNjLmRpciA9 PSBETUFfTUVNX1RPX0RFVikgeworCQkJc3JjX2FkZHIgPSBkbWFfYnVmX25leHQ7CisJCQlkc3Rf YWRkciA9IG1jZl9jaGFuLT5lc2MuZGV2X2FkZHI7CisJCQlzb2ZmID0gbWNmX2NoYW4tPmVzYy5h ZGRyX3dpZHRoOworCQkJZG9mZiA9IDA7CisJCX0gZWxzZSB7CisJCQlzcmNfYWRkciA9IG1jZl9j aGFuLT5lc2MuZGV2X2FkZHI7CisJCQlkc3RfYWRkciA9IGRtYV9idWZfbmV4dDsKKwkJCXNvZmYg PSAwOworCQkJZG9mZiA9IG1jZl9jaGFuLT5lc2MuYWRkcl93aWR0aDsKKwkJfQorCisJCW1jZl9l ZG1hX2ZpbGxfdGNkKG1jZl9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsIGRzdF9hZGRyLAor CQkJCSAgbWNmX2NoYW4tPmVzYy5hdHRyLCBzb2ZmLCBuYnl0ZXMsIDAsIGl0ZXIsCisJCQkJICBp dGVyLCBkb2ZmLCBsYXN0X3NnLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisJCWRtYV9idWZfbmV4dCAr PSBwZXJpb2RfbGVuOworCX0KKworCXJldHVybiB2Y2hhbl90eF9wcmVwKCZtY2ZfY2hhbi0+dmNo YW4sICZtY2ZfZGVzYy0+dmRlc2MsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9h bGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG1j Zl9lZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9fbWNmX2VkbWFfY2hhbihjaGFuKTsKKworCW1jZl9j aGFuLT50Y2RfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgidGNkX3Bvb2wiLCBjaGFuLT5kZXZpY2Ut PmRldiwKKwkJCXNpemVvZihzdHJ1Y3QgZWRtYV90Y2QpLCBFRE1BX1RDRF9NRU1fQUxJR04sIDAp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1jZl9lZG1hX2ZyZWVfY2hhbl9yZXNv dXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBtY2ZfZWRtYV9jaGFuICpt Y2ZfY2hhbiA9IHRvX21jZl9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmX2NoYW4tPnZjaGFu LmxvY2ssIGZsYWdzKTsKKwltY2ZfZWRtYV9kaXNhYmxlX3JlcXVlc3QobWNmX2NoYW4pOworCW1j Zl9jaGFuLT5lZGVzYyA9IE5VTEw7CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmbWNmX2No YW4tPnZjaGFuLCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmX2NoYW4tPnZj aGFuLmxvY2ssIGZsYWdzKTsKKworCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmbWNmX2NoYW4t PnZjaGFuLCAmaGVhZCk7CisJZG1hX3Bvb2xfZGVzdHJveShtY2ZfY2hhbi0+dGNkX3Bvb2wpOwor CW1jZl9jaGFuLT50Y2RfcG9vbCA9IE5VTEw7Cit9CisKK3N0YXRpYyBzaXplX3QgbWNmX2VkbWFf ZGVzY19yZXNpZHVlKHN0cnVjdCBtY2ZfZWRtYV9jaGFuICptY2ZfY2hhbiwKKwkJc3RydWN0IHZp cnRfZG1hX2Rlc2MgKnZkZXNjLCBib29sIGluX3Byb2dyZXNzKQoreworCXN0cnVjdCBtY2ZfZWRt YV9kZXNjICplZGVzYyA9IG1jZl9jaGFuLT5lZGVzYzsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdz ID0gbWNmX2NoYW4tPmVkbWEtPm1lbWJhc2U7CisJdTMyIGNoID0gbWNmX2NoYW4tPnZjaGFuLmNo YW4uY2hhbl9pZDsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gbWNmX2NoYW4t PmVzYy5kaXI7CisJZG1hX2FkZHJfdCBjdXJfYWRkciwgZG1hX2FkZHI7CisJc2l6ZV90IGxlbiwg c2l6ZTsKKwlpbnQgaTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRl c2MgKi8KKwlmb3IgKGxlbiA9IGkgPSAwOyBpIDwgbWNmX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkr KykKKwkJbGVuICs9IGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzICogZWRlc2MtPnRjZFtpXS52 dGNkLT5iaXRlcjsKKworCWlmICghaW5fcHJvZ3Jlc3MpCisJCXJldHVybiBsZW47CisKKwljdXJf YWRkciA9IChkaXIgPT0gRE1BX01FTV9UT19ERVYpID8KKwkJaW9yZWFkMzIoJnJlZ3MtPnRjZFtj aF0uc2FkZHIpIDoKKwkJaW9yZWFkMzIoJnJlZ3MtPnRjZFtjaF0uZGFkZHIpOworCisJLyogZmln dXJlIG91dCB0aGUgZmluaXNoZWQgYW5kIGNhbGN1bGF0ZSB0aGUgcmVzaWR1ZSAqLworCWZvciAo aSA9IDA7IGkgPCBtY2ZfY2hhbi0+ZWRlc2MtPm5fdGNkczsgaSsrKSB7CisJCXNpemUgPSBlZGVz Yy0+dGNkW2ldLnZ0Y2QtPm5ieXRlcyAqIGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXI7CisJCWlm IChkaXIgPT0gRE1BX01FTV9UT19ERVYpCisJCQlkbWFfYWRkciA9IGVkZXNjLT50Y2RbaV0udnRj ZC0+c2FkZHI7CisJCWVsc2UKKwkJCWRtYV9hZGRyID0gZWRlc2MtPnRjZFtpXS52dGNkLT5kYWRk cjsKKworCQlsZW4gLT0gc2l6ZTsKKwkJaWYgKGN1cl9hZGRyID49IGRtYV9hZGRyICYmIGN1cl9h ZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7CisJCQlsZW4gKz0gZG1hX2FkZHIgKyBzaXplIC0gY3Vy X2FkZHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBl bnVtIGRtYV9zdGF0dXMgbWNmX2VkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwK KwkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sK KwlzdHJ1Y3QgbWNmX2VkbWFfY2hhbiAqbWNmX2NoYW4gPSB0b19tY2ZfZWRtYV9jaGFuKGNoYW4p OworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKKwllbnVtIGRtYV9zdGF0dXMgc3RhdHVz OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhj aGFuLCBjb29raWUsIHR4c3RhdGUpOworCWlmIChzdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQly ZXR1cm4gc3RhdHVzOworCisJaWYgKCF0eHN0YXRlKQorCQlyZXR1cm4gbWNmX2NoYW4tPnN0YXR1 czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2ZfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwor CXZkZXNjID0gdmNoYW5fZmluZF9kZXNjKCZtY2ZfY2hhbi0+dmNoYW4sIGNvb2tpZSk7CisJaWYg KG1jZl9jaGFuLT5lZGVzYyAmJiBjb29raWUgPT0gbWNmX2NoYW4tPmVkZXNjLT52ZGVzYy50eC5j b29raWUpCisJCXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJCW1jZl9lZG1hX2Rlc2NfcmVzaWR1ZSht Y2ZfY2hhbiwgdmRlc2MsIHRydWUpOworCWVsc2UgaWYgKHZkZXNjKQorCQl0eHN0YXRlLT5yZXNp ZHVlID0KKwkJCQltY2ZfZWRtYV9kZXNjX3Jlc2lkdWUobWNmX2NoYW4sIHZkZXNjLCBmYWxzZSk7 CisJZWxzZQorCQl0eHN0YXRlLT5yZXNpZHVlID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJm1jZl9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbWNmX2NoYW4tPnN0 YXR1czsKK30KKworc3RhdGljIHZvaWQgbWNmX2VkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG1jZl9lZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9fbWNm X2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJm1jZl9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwlpZiAodmNoYW5faXNzdWVf cGVuZGluZygmbWNmX2NoYW4tPnZjaGFuKSAmJiAhbWNmX2NoYW4tPmVkZXNjKQorCQltY2ZfZWRt YV94ZmVyX2Rlc2MobWNmX2NoYW4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmX2No YW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWNmX2VkbWFfZnJlZV9k ZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYykKK3sKKwlzdHJ1Y3QgbWNmX2VkbWFfZGVz YyAqbWNmX2Rlc2M7CisJaW50IGk7CisJc3RydWN0IGVkbWFfcmVncyAqcmVnczsKKworCW1jZl9k ZXNjID0gdG9fbWNmX2VkbWFfZGVzYyh2ZGVzYyk7CisJcmVncyA9IG1jZl9kZXNjLT5lY2hhbi0+ ZWRtYS0+bWVtYmFzZTsKKworCS8vdHJhY2VfdGNkKCZyZWdzLT50Y2RbbWNmX2Rlc2MtPmVjaGFu LT5zbGF2ZV9pZF0pOworCS8vdHJhY2VfcmVncyhyZWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBt Y2ZfZGVzYy0+bl90Y2RzOyBpKyspCisJCWRtYV9wb29sX2ZyZWUobWNmX2Rlc2MtPmVjaGFuLT50 Y2RfcG9vbCwgbWNmX2Rlc2MtPnRjZFtpXS52dGNkLAorCQkJCW1jZl9kZXNjLT50Y2RbaV0ucHRj ZCk7CisJa2ZyZWUobWNmX2Rlc2MpOworfQorCitzdGF0aWMgaW50IG1jZl9lZG1hX2lycV9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJc3RydWN0IG1jZl9lZG1hX2VuZ2lu ZSAqbWNmX2VkbWEpCit7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQkJSU9SRVNP VVJDRV9JUlEsICJlZG1hLXR4LTAwLTE1Iik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtMTsKKwor CWZvciAocmV0ID0gMCwgaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7ICsraSkgeworCQly ZXQgfD0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpLAorCQkJbWNmX2VkbWFfdHhfaGFu ZGxlciwgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQlJT1JFU09V UkNFX0lSUSwgImVkbWEtdHgtMTYtNTUiKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC0xOworCisJ Zm9yIChyZXQgPSAwLCBpID0gcmVzLT5zdGFydDsgaSA8PSByZXMtPmVuZDsgKytpKSB7CisJCXJl dCB8PSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGksCisJCQltY2ZfZWRtYV90eF9oYW5k bGVyLCAwLCAiZURNQSIsIG1jZl9lZG1hKTsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlZG1hLXR4LTU2LTYzIik7 CisJaWYgKHJldCAhPSAtRU5YSU8pIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ ZGV2LCByZXQsCisJCQltY2ZfZWRtYV90eF9oYW5kbGVyLCAwLCAiZURNQSIsIG1jZl9lZG1hKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZ2V0X2ly cV9ieW5hbWUocGRldiwgImVkbWEtZXJyIik7CisJaWYgKHJldCAhPSAtRU5YSU8pIHsKKwkJcmV0 ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCByZXQsCisJCQltY2ZfZWRtYV9lcnJfaGFu ZGxlciwgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2ZfZWRtYV9pcnFfZnJlZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBtY2ZfZWRtYV9lbmdpbmUgKm1j Zl9lZG1hKQoreworCWludCBpcnE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQlJT1JFU09VUkNFX0lSUSwgImVk bWEtdHgtMDAtMTUiKTsKKwlpZiAocmVzKSB7CisJCWZvciAoaXJxID0gcmVzLT5zdGFydDsgaXJx IDw9IHJlcy0+ZW5kOyBpcnErKykKKwkJCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgaXJxLCBt Y2ZfZWRtYSk7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2 LAorCQkJSU9SRVNPVVJDRV9JUlEsICJlZG1hLXR4LTE2LTU1Iik7CisJaWYgKHJlcykgeworCQlm b3IgKGlycSA9IHJlcy0+c3RhcnQ7IGlycSA8PSByZXMtPmVuZDsgaXJxKyspCisJCQlkZXZtX2Zy ZWVfaXJxKCZwZGV2LT5kZXYsIGlycSwgbWNmX2VkbWEpOworCX0KKworCWlycSA9IHBsYXRmb3Jt X2dldF9pcnFfYnluYW1lKHBkZXYsICJlZG1hLXR4LTU2LTYzIik7CisJaWYgKGlycSAhPSAtRU5Y SU8pCisJCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgaXJxLCBtY2ZfZWRtYSk7CisKKwlpcnEg PSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS1lcnIiKTsKKwlpZiAoaXJxICE9 IC1FTlhJTykKKwkJZGV2bV9mcmVlX2lycSgmcGRldi0+ZGV2LCBpcnEsIG1jZl9lZG1hKTsKK30K Kworc3RhdGljIGludCBtY2ZfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbWNm X2VkbWFfZW5naW5lICptY2ZfZWRtYTsKKwlzdHJ1Y3QgbWNmX2VkbWFfY2hhbiAqbWNmX2NoYW47 CisJc3RydWN0IGVkbWFfcmVncyAqcmVnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQg cmV0LCBpLCBsZW4sIGNoYW5zOworCisJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5k ZXYpOworCWlmICghcGRhdGEpCisJCXJldHVybiBQVFJfRVJSKHBkYXRhKTsKKworCWNoYW5zID0g cGRhdGEtPmRtYV9jaGFubmVsczsKKwlsZW4gPSBzaXplb2YoKm1jZl9lZG1hKSArIHNpemVvZigq bWNmX2NoYW4pICogY2hhbnM7CisJbWNmX2VkbWEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg bGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jZl9lZG1hKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CW1jZl9lZG1hLT5uX2NoYW5zID0gY2hhbnM7CisKKwlpZiAoIW1jZl9lZG1hLT5uX2NoYW5zKSB7 CisJCXByX2luZm8oInNldHRpbmcgZGVmYXVsdCBjaGFubmVsIG51bWJlciB0byA2NCIpOworCQlt Y2ZfZWRtYS0+bl9jaGFucyA9IDY0OworCX0KKworCW11dGV4X2luaXQoJm1jZl9lZG1hLT5tY2Zf ZWRtYV9tdXRleCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOworCisJbWNmX2VkbWEtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1jZl9lZG1hLT5tZW1iYXNlKSkKKwkJ cmV0dXJuIFBUUl9FUlIobWNmX2VkbWEtPm1lbWJhc2UpOworCisJcmVncyA9IG1jZl9lZG1hLT5t ZW1iYXNlOworCisJSU5JVF9MSVNUX0hFQUQoJm1jZl9lZG1hLT5kbWFfZGV2LmNoYW5uZWxzKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbWNmX2VkbWEtPm5fY2hhbnM7IGkrKykgeworCQlzdHJ1Y3QgbWNm X2VkbWFfY2hhbiAqbWNmX2NoYW4gPSAmbWNmX2VkbWEtPmNoYW5zW2ldOworCisJCW1jZl9jaGFu LT5lZG1hID0gbWNmX2VkbWE7CisJCW1jZl9jaGFuLT5zbGF2ZV9pZCA9IGk7CisJCW1jZl9jaGFu LT5pZGxlID0gdHJ1ZTsKKwkJbWNmX2NoYW4tPnZjaGFuLmRlc2NfZnJlZSA9IG1jZl9lZG1hX2Zy ZWVfZGVzYzsKKwkJdmNoYW5faW5pdCgmbWNmX2NoYW4tPnZjaGFuLCAmbWNmX2VkbWEtPmRtYV9k ZXYpOworCQlpb3dyaXRlMzIoMHgwLCAmcmVncy0+dGNkW2ldLmNzcik7CisJfQorCisJaW93cml0 ZTMyKH4wLCAmcmVncy0+aW50aCk7CisJaW93cml0ZTMyKH4wLCAmcmVncy0+aW50bCk7CisKKwly ZXQgPSBtY2ZfZWRtYV9pcnFfaW5pdChwZGV2LCBtY2ZfZWRtYSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtY2ZfZWRtYS0+ZG1hX2Rldi5j YXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtY2ZfZWRtYS0+ZG1hX2Rldi5jYXBf bWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21h c2spOworCisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2ID0gJnBkZXYtPmRldjsKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMgPQorCQkJbWNmX2VkbWFfYWxsb2Nf Y2hhbl9yZXNvdXJjZXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNv dXJjZXMgPQorCQkJbWNmX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlczsKKwltY2ZfZWRtYS0+ZG1h X2Rldi5kZXZpY2VfY29uZmlnID0gbWNmX2VkbWFfc2xhdmVfY29uZmlnOworCW1jZl9lZG1hLT5k bWFfZGV2LmRldmljZV9wcmVwX2RtYV9jeWNsaWMgPQorCQkJbWNmX2VkbWFfcHJlcF9kbWFfY3lj bGljOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV9wcmVwX3NsYXZlX3NnID0gbWNmX2VkbWFf cHJlcF9zbGF2ZV9zZzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfdHhfc3RhdHVzID0gbWNm X2VkbWFfdHhfc3RhdHVzOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV9pc3N1ZV9wZW5kaW5n ID0gbWNmX2VkbWFfaXNzdWVfcGVuZGluZzsKKworCW1jZl9lZG1hLT5kbWFfZGV2LnNyY19hZGRy X3dpZHRocyA9IE1DRl9FRE1BX0JVU1dJRFRIUzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kc3RfYWRk cl93aWR0aHMgPSBNQ0ZfRURNQV9CVVNXSURUSFM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGlyZWN0 aW9ucyA9CisJCQlCSVQoRE1BX0RFVl9UT19NRU0pIHwgQklUKERNQV9NRU1fVE9fREVWKTsKKwor CW1jZl9lZG1hLT5kbWFfZGV2LmZpbHRlci5mbiA9IG1jZl9lZG1hX2ZpbHRlcl9mbjsKKwltY2Zf ZWRtYS0+ZG1hX2Rldi5maWx0ZXIubWFwID0gcGRhdGEtPnNsYXZlX21hcDsKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5maWx0ZXIubWFwY250ID0gcGRhdGEtPnNsYXZlY250OworCisJcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgbWNmX2VkbWEpOworCisJcmV0ID0gZG1hX2FzeW5jX2RldmljZV9yZWdp c3RlcigmbWNmX2VkbWEtPmRtYV9kZXYpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJDYW4ndCBy ZWdpc3RlciBGcmVlc2NhbGUgZURNQSBlbmdpbmUuICglZClcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJLyogRW5hYmxlIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uICovCisJaW93cml0 ZTMyKEVETUFfQ1JfRVJHQSB8IEVETUFfQ1JfRVJDQSwgJnJlZ3MtPmNyKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBtY2ZfZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2 aWNlICpkbWFkZXYpCit7CisJc3RydWN0IG1jZl9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2LT5jaGFu bmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4u Y2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7CisJ fQorfQorCitzdGF0aWMgaW50IG1jZl9lZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBtY2ZfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gcGxhdGZvcm1f Z2V0X2RydmRhdGEocGRldik7CisKKwltY2ZfZWRtYV9pcnFfZnJlZShwZGV2LCBtY2ZfZWRtYSk7 CisJbWNmX2VkbWFfY2xlYW51cF92Y2hhbigmbWNmX2VkbWEtPmRtYV9kZXYpOworCWRtYV9hc3lu Y19kZXZpY2VfdW5yZWdpc3RlcigmbWNmX2VkbWEtPmRtYV9kZXYpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jZl9lZG1hX2RyaXZlciA9IHsKKwku ZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWNmLWVkbWEiLAorCX0sCisJLnByb2JlCQk9IG1jZl9l ZG1hX3Byb2JlLAorCS5yZW1vdmUJCT0gbWNmX2VkbWFfcmVtb3ZlLAorfTsKKworYm9vbCBtY2Zf ZWRtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSkKK3sKKwlp ZiAoY2hhbi0+ZGV2aWNlLT5kZXYtPmRyaXZlciA9PSAmbWNmX2VkbWFfZHJpdmVyLmRyaXZlcikg eworCQlzdHJ1Y3QgbWNmX2VkbWFfY2hhbiAqbWNmX2NoYW4gPSB0b19tY2ZfZWRtYV9jaGFuKGNo YW4pOworCisJCXJldHVybiAobWNmX2NoYW4tPnNsYXZlX2lkID09IChpbnQpcGFyYW0pOworCX0K KworCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0wobWNmX2VkbWFfZmlsdGVyX2ZuKTsK Kworc3RhdGljIGludCBfX2luaXQgbWNmX2VkbWFfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0 Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1jZl9lZG1hX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNh bGwobWNmX2VkbWFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY2ZfZWRtYV9leGl0KHZv aWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1jZl9lZG1hX2RyaXZlcik7Cit9 Cittb2R1bGVfZXhpdChtY2ZfZWRtYV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpt Y2YtZWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgZURNQSBlbmdpbmUgZHJp dmVyLCBDb2xkRmlyZSBmYW1pbHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAt LWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaCBiL2luY2x1 ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjlhMTgxOWFjYjI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2lu Y2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaApAQCAtMCwwICsxLDM4IEBA CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIEZyZWVzY2Fs ZSBlRE1BIHBsYXRmb3JtIGRhdGEsIENvbGRGaXJlIFNvQydzIGZhbWlseS4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTcgQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRl ZiBfX01BQ0hfTUNGX0VETUFfSF9fCisjZGVmaW5lIF9fTUFDSF9NQ0ZfRURNQV9IX18KKworc3Ry dWN0IGRtYV9zbGF2ZV9tYXA7CisKK2Jvb2wgbWNmX2VkbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pOworCisjZGVmaW5lIE1DRl9FRE1BX0ZJTFRFUl9QQVJB TShjaCkJKCh2b2lkICopY2gpCisKKy8qKgorICogc3RydWN0IG1jZl9lZG1hX3BsYXRmb3JtX2Rh dGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhIGZvciBlRE1BIGVuZ2luZQorICoKKyAqIEB2ZXIJ CQlUaGUgZURNQSBtb2R1bGUgdmVyc2lvbi4KKyAqIEBkbWFfY2hhbm5lbHMJVGhlIG51bWJlciBv ZiBlRE1BIGNoYW5uZWxzLgorICovCitzdHJ1Y3QgbWNmX2VkbWFfcGxhdGZvcm1fZGF0YSB7CisJ aW50IGRtYV9jaGFubmVsczsKKwljb25zdCBzdHJ1Y3QgZG1hX3NsYXZlX21hcCAqc2xhdmVfbWFw OworCWludCBzbGF2ZWNudDsKK307CisKKyNlbmRpZiAvKiBfX01BQ0hfTUNGX0VETUFfSF9fICov Cg==