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: [v6,3/7] dmaengine: fsl-qdma: Add qDMA controller driver for Layerscape SoCs From: Wen He Message-Id: <20180615102236.32859-3-wen.he_1@nxp.com> Date: Fri, 15 Jun 2018 18:22:32 +0800 To: vkoul@kernel.org, dmaengine@vger.kernel.org Cc: robh+dt@kernel.org, devicetree@vger.kernel.org, leoyang.li@nxp.com, jiafei.pan@nxp.com, jiaheng.fan@nxp.com, wen.he_1@nxp.com List-ID: TlhQIFF1ZXVlIERNQSBjb250cm9sbGVyKHFETUEpIG9uIExheWVyc2NhcGUgU29DcyBzdXBwb3J0 cyBjaGFubmVsCnZpcnR1YWxsaXphdGlvbiBieSBhbGxvd2luZyBETUEgam9icyB0byBiZSBlbnF1 ZXVlZCBpbnRvIGRpZmZlcmVudApjb21tYW5kIHF1ZXVlcy4KCk5vdGUgdGhhdCB0aGlzIG1vZHVs ZSBkZXBlbmRzIG9uIE5YUCBEUEFBLgoKU2lnbmVkLW9mZi1ieTogV2VuIEhlIDx3ZW4uaGVfMUBu eHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFoZW5nIEZhbiA8amlhaGVuZy5mYW5AbnhwLmNvbT4K LS0tCmNoYW5nZSBpbiB2NjoKCS0gRml4ZWQgc29tZSBjb2RlIHN0eWxlIGFuZCB0eXBvIGlzc3Vl cwoJLSBBZGRpbmcgbWFjcm8gZGVmaW5pdGlvbiBmb3IgY2xlYXIgdGhlIGV2ZW50cyBhbmQgdGhl IGludGVycnVwdHMKCiBkcml2ZXJzL2RtYS9LY29uZmlnICAgIHwgICAxMyArCiBkcml2ZXJzL2Rt YS9NYWtlZmlsZSAgIHwgICAgMSArCiBkcml2ZXJzL2RtYS9mc2wtcWRtYS5jIHwgMTEwMiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgMTExNiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZG1hL2ZzbC1xZG1hLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29u ZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCA2ZDYxY2QwLi45OWFmZjMzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTIy NSw2ICsyMjUsMTkgQEAgY29uZmlnIEZTTF9FRE1BCiAJICBtdWx0aXBsZXhpbmcgY2FwYWJpbGl0 eSBmb3IgRE1BIHJlcXVlc3Qgc291cmNlcyhzbG90KS4KIAkgIFRoaXMgbW9kdWxlIGNhbiBiZSBm b3VuZCBvbiBGcmVlc2NhbGUgVnlicmlkIGFuZCBMUy0xIFNvQ3MuCiAKK2NvbmZpZyBGU0xfUURN QQorICAgICAgIHRyaXN0YXRlICJOWFAgTGF5ZXJzY2FwZSBxRE1BIGVuZ2luZSBzdXBwb3J0Igor ICAgICAgIGRlcGVuZHMgb24gQVJNIHx8IEFSTTY0CisgICAgICAgc2VsZWN0IERNQV9FTkdJTkUK KyAgICAgICBzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKKyAgICAgICBzZWxlY3QgRE1BX0VO R0lORV9SQUlECisgICAgICAgc2VsZWN0IEFTWU5DX1RYX0VOQUJMRV9DSEFOTkVMX1NXSVRDSAor ICAgICAgIGhlbHAKKyAgICAgICAgIFN1cHBvcnQgdGhlIE5YUCBMYXllcnNjYXBlIHFETUEgZW5n aW5lIHdpdGggY29tbWFuZCBxdWV1ZSBhbmQgbGVnYWN5IG1vZGUuCisgICAgICAgICBDaGFubmVs IHZpcnR1YWxpemF0aW9uIGlzIHN1cHBvcnRlZCB0aHJvdWdoIGVucXVldWluZyBvZiBETUEgam9i cyB0bywKKyAgICAgICAgIG9yIGRlcXVldWluZyBETUEgam9icyBmcm9tLCBkaWZmZXJlbnQgd29y ayBxdWV1ZXMuCisgICAgICAgICBUaGlzIG1vZHVsZSBjYW4gYmUgZm91bmQgb24gTlhQIExheWVy c2NhcGUgU29Dcy4KKwogY29uZmlnIEZTTF9SQUlECiAgICAgICAgIHRyaXN0YXRlICJGcmVlc2Nh bGUgUkFJRCBlbmdpbmUgU3VwcG9ydCIKICAgICAgICAgZGVwZW5kcyBvbiBGU0xfU09DICYmICFB U1lOQ19UWF9FTkFCTEVfQ0hBTk5FTF9TV0lUQ0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01h a2VmaWxlIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggMGY2MmE0ZC4uOTNkYjBmYyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUK QEAgLTMzLDYgKzMzLDcgQEAgb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkgKz0gZHcvCiBvYmot JChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCiBvYmotJChDT05GSUdfRlNMX0RN QSkgKz0gZnNsZG1hLm8KIG9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubworb2Jq LSQoQ09ORklHX0ZTTF9RRE1BKSArPSBmc2wtcWRtYS5vCiBvYmotJChDT05GSUdfRlNMX1JBSUQp ICs9IGZzbF9yYWlkLm8KIG9iai0kKENPTkZJR19IU1VfRE1BKSArPSBoc3UvCiBvYmotJChDT05G SUdfSU1HX01EQ19ETUEpICs9IGltZy1tZGMtZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h L2ZzbC1xZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2wtcWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjk5ODJiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9m c2wtcWRtYS5jCkBAIC0wLDAgKzEsMTEwMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKKy8vIENvcHlyaWdodCAyMDE4IE5YUAorCisvKgorICogRHJpdmVyIGZvciBOWFAg TGF5ZXJzY2FwZSBRdWV1ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyBDb250cm9sbGVyCisgKgorICog QXV0aG9yOgorICogIFdlbiBIZSA8d2VuLmhlXzFAbnhwLmNvbT4KKyAqICBKaWFoZW5nIEZhbiA8 amlhaGVuZy5mYW5AbnhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5o PgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZG1h Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFw b29sLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlICJ2aXJ0LWRtYS5o IgorI2luY2x1ZGUgImZzbGRtYS5oIgorCisvKiBSZWdpc3RlciByZWxhdGVkIGRlZmluaXRpb24g Ki8KKyNkZWZpbmUgRlNMX1FETUFfRE1SCQkJMHgwCisjZGVmaW5lIEZTTF9RRE1BX0RTUgkJCTB4 NAorI2RlZmluZSBGU0xfUURNQV9ERUlFUgkJCTB4ZTAwCisjZGVmaW5lIEZTTF9RRE1BX0RFRFIJ CQkweGUwNAorI2RlZmluZSBGU0xfUURNQV9ERUNGRFcwUgkJMHhlMTAKKyNkZWZpbmUgRlNMX1FE TUFfREVDRkRXMVIJCTB4ZTE0CisjZGVmaW5lIEZTTF9RRE1BX0RFQ0ZEVzJSCQkweGUxOAorI2Rl ZmluZSBGU0xfUURNQV9ERUNGRFczUgkJMHhlMWMKKyNkZWZpbmUgRlNMX1FETUFfREVDRlFJRFIJ CTB4ZTMwCisjZGVmaW5lIEZTTF9RRE1BX0RFQ0JSCQkJMHhlMzQKKworI2RlZmluZSBGU0xfUURN QV9CQ1FNUih4KQkJKDB4YzAgKyAweDEwMCAqICh4KSkKKyNkZWZpbmUgRlNMX1FETUFfQkNRU1Io eCkJCSgweGM0ICsgMHgxMDAgKiAoeCkpCisjZGVmaW5lIEZTTF9RRE1BX0JDUUVEUEFfU0FERFIo eCkJKDB4YzggKyAweDEwMCAqICh4KSkKKyNkZWZpbmUgRlNMX1FETUFfQkNRRFBBX1NBRERSKHgp CSgweGNjICsgMHgxMDAgKiAoeCkpCisjZGVmaW5lIEZTTF9RRE1BX0JDUUVFUEFfU0FERFIoeCkJ KDB4ZDAgKyAweDEwMCAqICh4KSkKKyNkZWZpbmUgRlNMX1FETUFfQkNRRVBBX1NBRERSKHgpCSgw eGQ0ICsgMHgxMDAgKiAoeCkpCisjZGVmaW5lIEZTTF9RRE1BX0JDUUlFUih4KQkJKDB4ZTAgKyAw eDEwMCAqICh4KSkKKyNkZWZpbmUgRlNMX1FETUFfQkNRSURSKHgpCQkoMHhlNCArIDB4MTAwICog KHgpKQorCisjZGVmaW5lIEZTTF9RRE1BX1NRRFBBUgkJCTB4ODBjCisjZGVmaW5lIEZTTF9RRE1B X1NRRVBBUgkJCTB4ODE0CisjZGVmaW5lIEZTTF9RRE1BX0JTUU1SCQkJMHg4MDAKKyNkZWZpbmUg RlNMX1FETUFfQlNRU1IJCQkweDgwNAorI2RlZmluZSBGU0xfUURNQV9CU1FJQ1IJCQkweDgyOAor I2RlZmluZSBGU0xfUURNQV9DUU1SCQkJMHhhMDAKKyNkZWZpbmUgRlNMX1FETUFfQ1FEU0NSMQkJ MHhhMDgKKyNkZWZpbmUgRlNMX1FETUFfQ1FEU0NSMiAgICAgICAgICAgICAgICAweGEwYworI2Rl ZmluZSBGU0xfUURNQV9DUUlFUgkJCTB4YTEwCisjZGVmaW5lIEZTTF9RRE1BX0NRRURSCQkJMHhh MTQKKyNkZWZpbmUgRlNMX1FETUFfU1FDQ01SCQkJMHhhMjAKKworLyogUmVnaXN0ZXJzIGZvciBi aXQgYW5kIGdlbm1hc2sgKi8KKyNkZWZpbmUgRlNMX1FETUFfQ1FJRFJfU1FUCQlCSVQoMTUpCisj ZGVmaW5lIFFETUFfQ0NERl9GT1RNQVQJCUJJVCgyOSkKKyNkZWZpbmUgUURNQV9DQ0RGX1NFUgkJ CUJJVCgzMCkKKyNkZWZpbmUgUURNQV9TR19GSU4JCQlCSVQoMzApCisjZGVmaW5lIFFETUFfU0df RVhUCQkJQklUKDMxKQorI2RlZmluZSBRRE1BX1NHX0xFTl9NQVNLCQlHRU5NQVNLKDI5LCAwKQor I2RlZmluZSBRRE1BX0NDREZfTUFTSwkJCUdFTk1BU0soMjgsIDIwKQorCisjZGVmaW5lIEZTTF9R RE1BX0RFRFJfQ0xFQVIJCUdFTk1BU0soMzEsIDApCisjZGVmaW5lIEZTTF9RRE1BX0JDUUlEUl9D TEVBUgkJR0VOTUFTSygzMSwgMCkKKyNkZWZpbmUgRlNMX1FETUFfREVJRVJfQ0xFQVIJCUdFTk1B U0soMzEsIDApCisKKyNkZWZpbmUgRlNMX1FETUFfQkNRSUVSX0NRVElFCQlCSVQoMTUpCisjZGVm aW5lIEZTTF9RRE1BX0JDUUlFUl9DUVBFSUUJCUJJVCgyMykKKyNkZWZpbmUgRlNMX1FETUFfQlNR SUNSX0lDRU4JCUJJVCgzMSkKKworI2RlZmluZSBGU0xfUURNQV9CU1FJQ1JfSUNTVCh4KQkJKCh4 KSA8PCAxNikKKyNkZWZpbmUgRlNMX1FETUFfQ1FJRVJfTUVJRQkJQklUKDMxKQorI2RlZmluZSBG U0xfUURNQV9DUUlFUl9URUlFCQlCSVQoMCkKKyNkZWZpbmUgRlNMX1FETUFfU1FDQ01SX0VOVEVS X1dNCUJJVCgyMSkKKworI2RlZmluZSBGU0xfUURNQV9CQ1FNUl9FTgkJQklUKDMxKQorI2RlZmlu ZSBGU0xfUURNQV9CQ1FNUl9FSQkJQklUKDMwKQorI2RlZmluZSBGU0xfUURNQV9CQ1FNUl9DRF9U SExEKHgpCSgoeCkgPDwgMjApCisjZGVmaW5lIEZTTF9RRE1BX0JDUU1SX0NRX1NJWkUoeCkJKCh4 KSA8PCAxNikKKworI2RlZmluZSBGU0xfUURNQV9CQ1FTUl9RRgkJQklUKDE2KQorI2RlZmluZSBG U0xfUURNQV9CQ1FTUl9YT0ZGCQlCSVQoMCkKKworI2RlZmluZSBGU0xfUURNQV9CU1FNUl9FTgkJ QklUKDMxKQorI2RlZmluZSBGU0xfUURNQV9CU1FNUl9ESQkJQklUKDMwKQorI2RlZmluZSBGU0xf UURNQV9CU1FNUl9DUV9TSVpFKHgpCSgoeCkgPDwgMTYpCisKKyNkZWZpbmUgRlNMX1FETUFfQlNR U1JfUUUJCUJJVCgxNykKKworI2RlZmluZSBGU0xfUURNQV9ETVJfRFFECQlCSVQoMzApCisjZGVm aW5lIEZTTF9RRE1BX0RTUl9EQgkJQklUKDMxKQorCisvKiBTaXplIHJlbGF0ZWQgZGVmaW5pdGlv biAqLworI2RlZmluZSBGU0xfUURNQV9RVUVVRV9NQVgJCTgKKyNkZWZpbmUgRlNMX1FETUFfQkFT RV9CVUZGRVJfU0laRQk5NgorI2RlZmluZSBGU0xfUURNQV9DSVJDVUxBUl9ERVNDX1NJWkVfTUlO CTY0CisjZGVmaW5lIEZTTF9RRE1BX0NJUkNVTEFSX0RFU0NfU0laRV9NQVgJMTYzODQKKyNkZWZp bmUgRlNMX1FETUFfUVVFVUVfTlVNX01BWAkJOAorCisvKiBGaWVsZCBkZWZpbml0aW9uIGZvciBD TUQgKi8KKyNkZWZpbmUgRlNMX1FETUFfQ01EX1JXVFRZUEUJCTB4NAorI2RlZmluZSBGU0xfUURN QV9DTURfTFdDICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBGU0xfUURNQV9DTURfUldUVFlQ RV9PRkZTRVQJMjgKKyNkZWZpbmUgRlNMX1FETUFfQ01EX05TX09GRlNFVAkJMjcKKyNkZWZpbmUg RlNMX1FETUFfQ01EX0RRT1NfT0ZGU0VUCTI0CisjZGVmaW5lIEZTTF9RRE1BX0NNRF9XVEhST1RM X09GRlNFVAkyMAorI2RlZmluZSBGU0xfUURNQV9DTURfRFNFTl9PRkZTRVQJMTkKKyNkZWZpbmUg RlNMX1FETUFfQ01EX0xXQ19PRkZTRVQJCTE2CisKKyNkZWZpbmUgRlNMX1FETUFfRV9TR19UQUJM RQkJMQorI2RlZmluZSBGU0xfUURNQV9FX0RBVEFfQlVGRkVSCQkwCisjZGVmaW5lIEZTTF9RRE1B X0ZfTEFTVF9FTlRSWQkJMQorCisvKiBGaWVsZCBkZWZpbml0aW9uIGZvciBEZXNjcmlwdG9yIG9m ZnNldCAqLworI2RlZmluZSBRRE1BX0NDREZfU1RBVFVTCQkyMAorI2RlZmluZSBRRE1BX0NDREZf T0ZGU0VUCQkyMAorCisvKioKKyAqIHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgLSBUaGlzIGlzIHRo ZSBzdHJ1Y3QgaG9sZGluZyBkZXNjcmliaW5nIGNvbXBvdW5kCisgKgkJCSAgICBkZXNjcmlwdG9y IGZvcm1hdCB3aXRoIHFETUEuCisgKiBAc3RhdHVzOgkJICAgIENvbW1hbmQgc3RhdHVzIGFuZCBl bnF1ZXVlIHN0YXR1cyBub3RpZmljYXRpb24uCisgKiBAY2ZnOgkJICAgIEZyYW1lIG9mZnNldCBh bmQgZnJhbWUgZm9ybWF0LgorICogQGFkZHJfbG86CQkgICAgSG9sZGluZyB0aGUgY29tcG91bmQg ZGVzY3JpcHRvciBvZiB0aGUgbG93ZXIKKyAqCQkJICAgIDMyLWJpdHMgYWRkcmVzcyBpbiBtZW1v cnkgNDAtYml0IGFkZHJlc3MuCisgKiBAYWRkcl9oaToJCSAgICBTYW1lIGFzIGFib3ZlIG1lbWJl ciwgYnV0IHBvaW50IGhpZ2ggOC1iaXRzIGluCisgKgkJCSAgICBtZW1vcnkgNDAtYml0IGFkZHJl c3MuCisgKiBAX19yZXNlcnZlZDE6CSAgICBSZXNlcnZlZCBmaWVsZC4KKyAqIEBjZmc4Yl93MToJ CSAgICBDb21wb3VuZCBkZXNjcmlwdG9yIGNvbW1hbmQgcXVldWUgb3JpZ2luIHByb2R1Y2VkCisg KgkJCSAgICBieSBxRE1BIGFuZCBkeW5hbWljIGRlYnVnIGZpZWxkLgorICogQGRhdGEJCSAgICBQ b2ludGVyIHRvIHRoZSBtZW1vcnkgNDAtYml0IGFkZHJlc3MsIGRlc2NyaWJlcyBETUEKKyAqCQkJ ICAgIHNvdXJjZSBpbmZvcm1hdGlvbiBhbmQgRE1BIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uLgor ICovCitzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0IHsKKwlfX2xlMzIgc3RhdHVzOworCV9fbGUzMiBj Zmc7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTMyIGFkZHJfbG87CisJCQl1OCBhZGRy X2hpOworCQkJdTggX19yZXNlcnZlZDFbMl07CisJCQl1OCBjZmc4Yl93MTsKKwkJfSBfX3BhY2tl ZDsKKwkJX19sZTY0IGRhdGE7CisJfTsKK30gX19wYWNrZWQ7CisKKy8qIHFETUEgc3RhdHVzIG5v dGlmaWNhdGlvbiBwcmUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBmc2xfcHJlX3N0YXR1cyB7CisJ dTY0IHF1ZXVlOworCXU2NCBhZGRyOworfTsKKworc3RydWN0IGZzbF9xZG1hX2NoYW4geworCXN0 cnVjdCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYwkJdmRlc2M7 CisJZW51bSBkbWFfc3RhdHVzCQkJc3RhdHVzOworCXUzMgkJCQlzbGF2ZV9pZDsKKwlzdHJ1Y3Qg ZnNsX3FkbWFfZW5naW5lCQkqcWRtYTsKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVldWUJCSpxdWV1ZTsK KwlzdHJ1Y3QgbGlzdF9oZWFkCQlxY29tcDsKK307CisKK3N0cnVjdCBmc2xfcWRtYV9xdWV1ZSB7 CisJc3RydWN0IGZzbF9xZG1hX2Zvcm1hdAkqdmlydF9oZWFkOworCXN0cnVjdCBmc2xfcWRtYV9m b3JtYXQJKnZpcnRfdGFpbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBfdXNlZDsKKwlzdHJ1Y3Qg bGlzdF9oZWFkCWNvbXBfZnJlZTsKKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpjb21wX3Bvb2w7CisJc3Bp bmxvY2tfdAkJcXVldWVfbG9jazsKKwlkbWFfYWRkcl90CQlidXNfYWRkcjsKKwl1MzIgICAgICAg ICAgICAgICAgICAgICBuX2NxOworCXUzMgkJCWlkOworCXN0cnVjdCBmc2xfcWRtYV9mb3JtYXQJ KmNxOworfTsKKworc3RydWN0IGZzbF9xZG1hX2NvbXAgeworCWRtYV9hZGRyX3QgICAgICAgICAg ICAgIGJ1c19hZGRyOworCXN0cnVjdCBmc2xfcWRtYV9mb3JtYXQJKnZpcnRfYWRkcjsKKwlzdHJ1 Y3QgZnNsX3FkbWFfY2hhbgkqcWNoYW47CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgICAgdmRlc2M7 CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworfTsKKworc3RydWN0IGZzbF9xZG1hX2VuZ2luZSB7 CisJc3RydWN0IGRtYV9kZXZpY2UJZG1hX2RldjsKKwl2b2lkIF9faW9tZW0JCSpjdHJsX2Jhc2U7 CisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgKnN0YXR1c19iYXNlOworCXZvaWQgX19pb21lbQkJ KmJsb2NrX2Jhc2U7CisJdTMyCQkJbl9jaGFuczsKKwl1MzIJCQluX3F1ZXVlczsKKwlzdHJ1Y3Qg bXV0ZXggICAgICAgICAgICBmc2xfcWRtYV9tdXRleDsKKwlpbnQJCQllcnJvcl9pcnE7CisJaW50 CQkJcXVldWVfaXJxOworCWJvb2wJCQlmZWF0dXJlOworCXN0cnVjdCBmc2xfcWRtYV9xdWV1ZQkq cXVldWU7CisJc3RydWN0IGZzbF9xZG1hX3F1ZXVlCSpzdGF0dXM7CisJc3RydWN0IGZzbF9xZG1h X2NoYW4JY2hhbnNbXTsKKworfTsKKworc3RhdGljIGlubGluZSB1NjQKK3FkbWFfY2NkZl9hZGRy X2dldDY0KGNvbnN0IHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKmNjZGYpCit7CisJcmV0dXJuIGxl NjRfdG9fY3B1KGNjZGYtPmRhdGEpICYgKFU2NF9NQVggPj4gMjQpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK3FkbWFfZGVzY19hZGRyX3NldDY0KHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKmNj ZGYsIHU2NCBhZGRyKQoreworCWNjZGYtPmFkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKGFkZHIpOwor CWNjZGYtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihsb3dlcl8zMl9iaXRzKGFkZHIpKTsKK30KKwor c3RhdGljIGlubGluZSB1NjQKK3FkbWFfY2NkZl9nZXRfcXVldWUoY29uc3Qgc3RydWN0IGZzbF9x ZG1hX2Zvcm1hdCAqY2NkZikKK3sKKwlyZXR1cm4gY2NkZi0+Y2ZnOGJfdzEgJiBVOF9NQVg7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50CitxZG1hX2NjZGZfZ2V0X29mZnNldChjb25zdCBzdHJ1Y3Qg ZnNsX3FkbWFfZm9ybWF0ICpjY2RmKQoreworCXJldHVybiAobGUzMl90b19jcHUoY2NkZi0+Y2Zn KSAmIFFETUFfQ0NERl9NQVNLKSA+PiBRRE1BX0NDREZfT0ZGU0VUOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK3FkbWFfY2NkZl9zZXRfZm9ybWF0KHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKmNj ZGYsIGludCBvZmZzZXQpCit7CisJY2NkZi0+Y2ZnID0gY3B1X3RvX2xlMzIoUURNQV9DQ0RGX0ZP VE1BVCB8IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitxZG1hX2NjZGZfZ2V0X3N0 YXR1cyhjb25zdCBzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0ICpjY2RmKQoreworCXJldHVybiAobGUz Ml90b19jcHUoY2NkZi0+c3RhdHVzKSAmIFFETUFfQ0NERl9NQVNLKSA+PiBRRE1BX0NDREZfU1RB VFVTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3FkbWFfY2NkZl9zZXRfc2VyKHN0cnVjdCBm c2xfcWRtYV9mb3JtYXQgKmNjZGYsIGludCBzdGF0dXMpCit7CisJY2NkZi0+c3RhdHVzID0gY3B1 X3RvX2xlMzIoUURNQV9DQ0RGX1NFUiB8IHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBxZG1hX2NzZ2Zfc2V0X2xlbihzdHJ1Y3QgZnNsX3FkbWFfZm9ybWF0ICpjc2dmLCBpbnQgbGVu KQoreworCWNzZ2YtPmNmZyA9IGNwdV90b19sZTMyKGxlbiAmIFFETUFfU0dfTEVOX01BU0spOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWRtYV9jc2dmX3NldF9mKHN0cnVjdCBmc2xfcWRtYV9m b3JtYXQgKmNzZ2YsIGludCBsZW4pCit7CisJY3NnZi0+Y2ZnID0gY3B1X3RvX2xlMzIoUURNQV9T R19GSU4gfCAobGVuICYgUURNQV9TR19MRU5fTUFTSykpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgcWRtYV9jc2dmX3NldF9lKHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQgKmNzZ2YsIGludCBsZW4p Cit7CisJY3NnZi0+Y2ZnID0gY3B1X3RvX2xlMzIoUURNQV9TR19FWFQgfCAobGVuICYgUURNQV9T R19MRU5fTUFTSykpOworfQorCitzdGF0aWMgdTMyIHFkbWFfcmVhZGwoc3RydWN0IGZzbF9xZG1h X2VuZ2luZSAqcWRtYSwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBGU0xfRE1BX0lO KHFkbWEsIGFkZHIsIDMyKTsKK30KKworc3RhdGljIHZvaWQgcWRtYV93cml0ZWwoc3RydWN0IGZz bF9xZG1hX2VuZ2luZSAqcWRtYSwgdTMyIHZhbCwKKwkJCQkJCXZvaWQgX19pb21lbSAqYWRkcikK K3sKKwlGU0xfRE1BX09VVChxZG1hLCBhZGRyLCB2YWwsIDMyKTsKK30KKworc3RhdGljIHN0cnVj dCBmc2xfcWRtYV9jaGFuICp0b19mc2xfcWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfcWRtYV9jaGFuLCB2Y2hh bi5jaGFuKTsKK30KKworc3RhdGljIHN0cnVjdCBmc2xfcWRtYV9jb21wICp0b19mc2xfcWRtYV9j b21wKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZk LCBzdHJ1Y3QgZnNsX3FkbWFfY29tcCwgdmRlc2MpOworfQorCitzdGF0aWMgdm9pZCBmc2xfcWRt YV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3Qg ZnNsX3FkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfcWRtYV9jaGFuKGNoYW4pOworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9y cygmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNs X2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKworCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgm ZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9xZG1hX2NvbXBf ZmlsbF9tZW1jcHkoc3RydWN0IGZzbF9xZG1hX2NvbXAgKmZzbF9jb21wLAorCQkJCQlkbWFfYWRk cl90IGRzdCwgZG1hX2FkZHJfdCBzcmMsIHUzMiBsZW4pCit7CisJc3RydWN0IGZzbF9xZG1hX2Zv cm1hdCAqY2NkZiwgKmNzZ2ZfZGVzYywgKmNzZ2Zfc3JjLCAqY3NnZl9kZXN0OworCXN0cnVjdCBm c2xfcWRtYV9mb3JtYXQgKnNkZiwgKmRkZjsKKworCWNjZGYgPSBmc2xfY29tcC0+dmlydF9hZGRy OworCWNzZ2ZfZGVzYyA9IGZzbF9jb21wLT52aXJ0X2FkZHIgKyAxOworCWNzZ2Zfc3JjID0gZnNs X2NvbXAtPnZpcnRfYWRkciArIDI7CisJY3NnZl9kZXN0ID0gZnNsX2NvbXAtPnZpcnRfYWRkciAr IDM7CisJc2RmID0gZnNsX2NvbXAtPnZpcnRfYWRkciArIDQ7CisJZGRmID0gZnNsX2NvbXAtPnZp cnRfYWRkciArIDU7CisKKwltZW1zZXQoZnNsX2NvbXAtPnZpcnRfYWRkciwgMCwgRlNMX1FETUFf QkFTRV9CVUZGRVJfU0laRSk7CisJLyogSGVhZCBDb21tYW5kIERlc2NyaXB0b3IoRnJhbWUgRGVz Y3JpcHRvcikgKi8KKwlxZG1hX2Rlc2NfYWRkcl9zZXQ2NChjY2RmLCBmc2xfY29tcC0+YnVzX2Fk ZHIgKyAxNik7CisJcWRtYV9jY2RmX3NldF9mb3JtYXQoY2NkZiwgcWRtYV9jY2RmX2dldF9vZmZz ZXQoY2NkZikpOworCXFkbWFfY2NkZl9zZXRfc2VyKGNjZGYsIHFkbWFfY2NkZl9nZXRfc3RhdHVz KGNjZGYpKTsKKworCS8qIFN0YXR1cyBub3RpZmljYXRpb24gaXMgZW5xdWV1ZWQgdG8gc3RhdHVz IHF1ZXVlLiAqLworCS8qIENvbXBvdW5kIENvbW1hbmQgRGVzY3JpcHRvcihGcmFtZSBMaXN0IFRh YmxlKSAqLworCXFkbWFfZGVzY19hZGRyX3NldDY0KGNzZ2ZfZGVzYywgZnNsX2NvbXAtPmJ1c19h ZGRyICsgNjQpOworCS8qIEl0IG11c3QgYmUgMzIgYXMgQ29tcG91bmQgUy9HIERlc2NyaXB0b3Ig Ki8KKwlxZG1hX2NzZ2Zfc2V0X2xlbihjc2dmX2Rlc2MsIDMyKTsKKwlxZG1hX2Rlc2NfYWRkcl9z ZXQ2NChjc2dmX3NyYywgc3JjKTsKKwlxZG1hX2NzZ2Zfc2V0X2xlbihjc2dmX3NyYywgbGVuKTsK KwlxZG1hX2Rlc2NfYWRkcl9zZXQ2NChjc2dmX2Rlc3QsIGRzdCk7CisJcWRtYV9jc2dmX3NldF9s ZW4oY3NnZl9kZXN0LCBsZW4pOworCS8qIFRoaXMgZW50cnkgaXMgdGhlIGxhc3QgZW50cnkuICov CisJcWRtYV9jc2dmX3NldF9mKGNzZ2ZfZGVzdCwgbGVuKTsKKwkvKiBEZXNjcmlwdG9yIEJ1ZmZl ciAqLworCXNkZi0+ZGF0YSA9IGNwdV90b19sZTY0KAorCQkJRlNMX1FETUFfQ01EX1JXVFRZUEUg PDwgRlNMX1FETUFfQ01EX1JXVFRZUEVfT0ZGU0VUKTsKKwlkZGYtPmRhdGEgPSBjcHVfdG9fbGU2 NCgKKwkJCUZTTF9RRE1BX0NNRF9SV1RUWVBFIDw8IEZTTF9RRE1BX0NNRF9SV1RUWVBFX09GRlNF VCk7CisJZGRmLT5kYXRhIHw9IGNwdV90b19sZTY0KAorCQkJRlNMX1FETUFfQ01EX0xXQyA8PCBG U0xfUURNQV9DTURfTFdDX09GRlNFVCk7Cit9CisKKy8qCisgKiBQcmUtcmVxdWVzdCBmdWxsIGNv bW1hbmQgZGVzY3JpcHRvciBmb3IgZW5xdWV1ZS4KKyAqLworc3RhdGljIGludCBmc2xfcWRtYV9w cmVfcmVxdWVzdF9lbnF1ZXVlX2Rlc2Moc3RydWN0IGZzbF9xZG1hX3F1ZXVlICpxdWV1ZSkKK3sK KwlzdHJ1Y3QgZnNsX3FkbWFfY29tcCAqY29tcF90ZW1wLCAqX2NvbXBfdGVtcDsKKwlpbnQgaTsK KworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bl9jcTsgaSsrKSB7CisJCWNvbXBfdGVtcCA9IGt6 YWxsb2Moc2l6ZW9mKCpjb21wX3RlbXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb21wX3RlbXAp CisJCQlnb3RvIGVycjsKKworCQljb21wX3RlbXAtPnZpcnRfYWRkciA9IGRtYV9wb29sX2FsbG9j KHF1ZXVlLT5jb21wX3Bvb2wsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMLAorCQkJCQkJICAgICAg JmNvbXBfdGVtcC0+YnVzX2FkZHIpOworCQlpZiAoIWNvbXBfdGVtcC0+dmlydF9hZGRyKQorCQkJ Z290byBlcnI7CisKKwkJbGlzdF9hZGRfdGFpbCgmY29tcF90ZW1wLT5saXN0LCAmcXVldWUtPmNv bXBfZnJlZSk7CisJfQorCXJldHVybiAwOworCitlcnI6CisJaWYgKGkgPT0gMCAmJiBjb21wX3Rl bXApIHsKKwkJa2ZyZWUoY29tcF90ZW1wKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2hp bGUgKC0taSA+PSAxKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wX3RlbXAsIF9j b21wX3RlbXAsCisJCQkJJnF1ZXVlLT5jb21wX2ZyZWUsIGxpc3QpIHsKKwkJCWRtYV9wb29sX2Zy ZWUocXVldWUtPmNvbXBfcG9vbCwKKwkJCQkJY29tcF90ZW1wLT52aXJ0X2FkZHIsCisJCQkJCWNv bXBfdGVtcC0+YnVzX2FkZHIpOworCQkJbGlzdF9kZWwoJmNvbXBfdGVtcC0+bGlzdCk7CisJCQlr ZnJlZShjb21wX3RlbXApOworCQl9CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICog UmVxdWVzdCBhIGNvbW1hbmQgZGVzY3JpcHRvciBmb3IgZW5xdWV1ZS4KKyAqLworc3RhdGljIHN0 cnVjdCBmc2xfcWRtYV9jb21wICpmc2xfcWRtYV9yZXF1ZXN0X2VucXVldWVfZGVzYygKKwkJCQkJ c3RydWN0IGZzbF9xZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJCQl1bnNpZ25lZCBpbnQgZHN0X25l bnRzLAorCQkJCQl1bnNpZ25lZCBpbnQgc3JjX25lbnRzKQoreworCXN0cnVjdCBmc2xfcWRtYV9j b21wICpjb21wX3RlbXA7CisJc3RydWN0IGZzbF9xZG1hX3F1ZXVlICpxdWV1ZSA9IGZzbF9jaGFu LT5xdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnF1 ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnF1ZXVlLT5jb21wX2Zy ZWUpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFn cyk7CisJCWNvbXBfdGVtcCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21wX3RlbXApLCBHRlBfS0VSTkVM KTsKKwkJaWYgKCFjb21wX3RlbXApCisJCQlyZXR1cm4gTlVMTDsKKworCQljb21wX3RlbXAtPnZp cnRfYWRkciA9IGRtYV9wb29sX2FsbG9jKHF1ZXVlLT5jb21wX3Bvb2wsCisJCQkJCQkgICAgICBH RlBfS0VSTkVMLAorCQkJCQkJICAgICAgJmNvbXBfdGVtcC0+YnVzX2FkZHIpOworCQlpZiAoIWNv bXBfdGVtcC0+dmlydF9hZGRyKSB7CisJCQlrZnJlZShjb21wX3RlbXApOworCQkJcmV0dXJuIE5V TEw7CisJCX0KKworCX0gZWxzZSB7CisJCWNvbXBfdGVtcCA9IGxpc3RfZmlyc3RfZW50cnkoJnF1 ZXVlLT5jb21wX2ZyZWUsCisJCQkJCSAgICAgc3RydWN0IGZzbF9xZG1hX2NvbXAsCisJCQkJCSAg ICAgbGlzdCk7CisJCWxpc3RfZGVsKCZjb21wX3RlbXAtPmxpc3QpOworCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZxdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOworCX0KKworCWNvbXBfdGVtcC0+ cWNoYW4gPSBmc2xfY2hhbjsKKworCXJldHVybiBjb21wX3RlbXA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZnNsX3FkbWFfcXVldWUgKmZzbF9xZG1hX2FsbG9jX3F1ZXVlX3Jlc291cmNlcygKKwkJCQkJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJdW5zaWduZWQgaW50IHF1ZXVlX251 bSkKK3sKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVldWUgKnF1ZXVlX2hlYWQsICpxdWV1ZV90ZW1wOwor CWludCByZXQsIGxlbiwgaTsKKwl1bnNpZ25lZCBpbnQgcXVldWVfc2l6ZVtGU0xfUURNQV9RVUVV RV9NQVhdOworCisJaWYgKHF1ZXVlX251bSA+IEZTTF9RRE1BX1FVRVVFX01BWCkKKwkJcXVldWVf bnVtID0gRlNMX1FETUFfUVVFVUVfTUFYOworCWxlbiA9IHNpemVvZigqcXVldWVfaGVhZCkgKiBx dWV1ZV9udW07CisJcXVldWVfaGVhZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBsZW4sIEdG UF9LRVJORUwpOworCWlmICghcXVldWVfaGVhZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBk ZXZpY2VfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoJnBkZXYtPmRldiwgInF1ZXVlLXNpemVzIiwK KwkJCQkJcXVldWVfc2l6ZSwgcXVldWVfbnVtKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkNhbid0IGdldCBxdWV1ZS1zaXplcy5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWVfbnVtOyBpKyspIHsKKwkJaWYgKHF1ZXVlX3NpemVb aV0gPiBGU0xfUURNQV9DSVJDVUxBUl9ERVNDX1NJWkVfTUFYIHx8CisJCQkgICAgcXVldWVfc2l6 ZVtpXSA8IEZTTF9RRE1BX0NJUkNVTEFSX0RFU0NfU0laRV9NSU4pIHsKKwkJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkdldCB3cm9uZyBxdWV1ZS1zaXplcy5cbiIpOworCQkJcmV0dXJuIE5VTEw7CisJ CX0KKwkJcXVldWVfdGVtcCA9IHF1ZXVlX2hlYWQgKyBpOworCQlxdWV1ZV90ZW1wLT5jcSA9IGRt YV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBmc2xfcWRt YV9mb3JtYXQpICoKKwkJCQkJCXF1ZXVlX3NpemVbaV0sCisJCQkJCQkmcXVldWVfdGVtcC0+YnVz X2FkZHIsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFxdWV1ZV90ZW1wLT5jcSkgeworCQkJ ZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBxdWV1ZV9oZWFkKTsKKwkJCXJldHVybiBOVUxMOworCQl9 CisJCXF1ZXVlX3RlbXAtPm5fY3EgPSBxdWV1ZV9zaXplW2ldOworCQlxdWV1ZV90ZW1wLT5pZCA9 IGk7CisJCXF1ZXVlX3RlbXAtPnZpcnRfaGVhZCA9IHF1ZXVlX3RlbXAtPmNxOworCQlxdWV1ZV90 ZW1wLT52aXJ0X3RhaWwgPSBxdWV1ZV90ZW1wLT5jcTsKKworCQkvKgorCQkgKiBDcmVhdGUgYSBj b21wIGRtYSBwb29sIHRoYXQgc2l6ZQorCQkgKiBpcyAnRlNMX1FETUFfQkFTRV9CVUZGRVJfU0la RScuCisJCSAqIFRoZSBkbWEgcG9vbCBmb3IgcXVldWUgY29tbWFuZCBidWZmZXIuCisJCSAqLwor CQlxdWV1ZV90ZW1wLT5jb21wX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImNvbXBfcG9vbCIsCisJ CQkJCQkmcGRldi0+ZGV2LAorCQkJCQkJRlNMX1FETUFfQkFTRV9CVUZGRVJfU0laRSwKKwkJCQkJ CTE2LCAwKTsKKwkJaWYgKCFxdWV1ZV90ZW1wLT5jb21wX3Bvb2wpCisJCQlnb3RvIGVycjsKKwor CQkvKgorCQkgKiBMaXN0IGZvciBxdWV1ZSBjb21tYW5kIGJ1ZmZlcgorCQkgKi8KKwkJSU5JVF9M SVNUX0hFQUQoJnF1ZXVlX3RlbXAtPmNvbXBfdXNlZCk7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1 ZV90ZW1wLT5jb21wX2ZyZWUpOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWVfdGVtcC0+cXVldWVf bG9jayk7CisJfQorCisJcmV0dXJuIHF1ZXVlX2hlYWQ7CisKK2VycjoKKwlpZiAoaSA9PSAwICYm IHF1ZXVlX3RlbXAtPmNvbXBfcG9vbCkKKwkJZG1hX3Bvb2xfZGVzdHJveShxdWV1ZV90ZW1wLT5j b21wX3Bvb2wpOworCXdoaWxlICgtLWkgPj0gMSkgeworCQlxdWV1ZV90ZW1wID0gcXVldWVfaGVh ZCArIGk7CisJCWlmIChpID09IDEgJiYgdW5saWtlbHkocXVldWVfdGVtcC0+Y29tcF9wb29sKSkK KwkJCWRtYV9wb29sX2Rlc3Ryb3kocXVldWVfdGVtcC0+Y29tcF9wb29sKTsKKwl9CisKKwlkZXZf ZXJyKCZwZGV2LT5kZXYsCisJCSJ1bmFibGUgdG8gYWxsb2NhdGUgY2hhbm5lbCAlZCBkZXNjcmlw dG9yIHBvb2xcbiIsCisJCXF1ZXVlX3RlbXAtPmlkKTsKKworCXdoaWxlICgtLWkgPj0gMCkgewor CQlxdWV1ZV90ZW1wID0gcXVldWVfaGVhZCArIGk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2 LT5kZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQpICoKKwkJCQlxdWV1ZV9z aXplW2ldLAorCQkJCXF1ZXVlX3RlbXAtPmNxLAorCQkJCXF1ZXVlX3RlbXAtPmJ1c19hZGRyKTsK Kwl9CisJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBxdWV1ZV9oZWFkKTsKKwlyZXR1cm4gTlVMTDsK K30KKworc3RhdGljIHN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqZnNsX3FkbWFfcHJlcF9zdGF0dXNf cXVldWUoCisJCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVl dWUgKnN0YXR1c19oZWFkOworCXVuc2lnbmVkIGludCBzdGF0dXNfc2l6ZTsKKwlpbnQgcmV0Owor CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzdGF0dXMtc2l6ZXMiLCAmc3RhdHVz X3NpemUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IHN0 YXR1cy1zaXplcy5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHN0YXR1c19zaXplID4g RlNMX1FETUFfQ0lSQ1VMQVJfREVTQ19TSVpFX01BWAorCQkJfHwgc3RhdHVzX3NpemUgPCBGU0xf UURNQV9DSVJDVUxBUl9ERVNDX1NJWkVfTUlOKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkdl dCB3cm9uZyBzdGF0dXNfc2l6ZS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc3RhdHVzX2hl YWQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpzdGF0dXNfaGVhZCksCisJCQkJ CQkJCUdGUF9LRVJORUwpOworCWlmICghc3RhdHVzX2hlYWQpCisJCXJldHVybiBOVUxMOworCisJ LyoKKwkgKiBCdWZmZXIgZm9yIHF1ZXVlIGNvbW1hbmQKKwkgKi8KKwlzdGF0dXNfaGVhZC0+Y3Eg PSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZnNs X3FkbWFfZm9ybWF0KSAqCisJCQkJCQlzdGF0dXNfc2l6ZSwKKwkJCQkJCSZzdGF0dXNfaGVhZC0+ YnVzX2FkZHIsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXR1c19oZWFkLT5jcSkgewor CQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIHN0YXR1c19oZWFkKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJc3RhdHVzX2hlYWQtPm5fY3EgPSBzdGF0dXNfc2l6ZTsKKwlzdGF0dXNfaGVhZC0+dmly dF9oZWFkID0gc3RhdHVzX2hlYWQtPmNxOworCXN0YXR1c19oZWFkLT52aXJ0X3RhaWwgPSBzdGF0 dXNfaGVhZC0+Y3E7CisJc3RhdHVzX2hlYWQtPmNvbXBfcG9vbCA9IE5VTEw7CisKKwlyZXR1cm4g c3RhdHVzX2hlYWQ7Cit9CisKK3N0YXRpYyBpbnQgZnNsX3FkbWFfaGFsdChzdHJ1Y3QgZnNsX3Fk bWFfZW5naW5lICpmc2xfcWRtYSkKK3sKKwl2b2lkIF9faW9tZW0gKmN0cmwgPSBmc2xfcWRtYS0+ Y3RybF9iYXNlOworCXZvaWQgX19pb21lbSAqYmxvY2sgPSBmc2xfcWRtYS0+YmxvY2tfYmFzZTsK KwlpbnQgaSwgY291bnQgPSA1OworCXUzMiByZWc7CisKKwkvKiBEaXNhYmxlIHRoZSBjb21tYW5k IHF1ZXVlIGFuZCB3YWl0IGZvciBpZGxlIHN0YXRlLiAqLworCXJlZyA9IHFkbWFfcmVhZGwoZnNs X3FkbWEsIGN0cmwgKyBGU0xfUURNQV9ETVIpOworCXJlZyB8PSBGU0xfUURNQV9ETVJfRFFEOwor CXFkbWFfd3JpdGVsKGZzbF9xZG1hLCByZWcsIGN0cmwgKyBGU0xfUURNQV9ETVIpOworCWZvciAo aSA9IDA7IGkgPCBGU0xfUURNQV9RVUVVRV9OVU1fTUFYOyBpKyspCisJCXFkbWFfd3JpdGVsKGZz bF9xZG1hLCAwLCBibG9jayArIEZTTF9RRE1BX0JDUU1SKGkpKTsKKworCXdoaWxlICgxKSB7CisJ CXJlZyA9IHFkbWFfcmVhZGwoZnNsX3FkbWEsIGN0cmwgKyBGU0xfUURNQV9EU1IpOworCQlpZiAo IShyZWcgJiBGU0xfUURNQV9EU1JfREIpKQorCQkJYnJlYWs7CisJCWlmIChjb3VudC0tIDwgMCkK KwkJCXJldHVybiAtRUJVU1k7CisJCXVkZWxheSgxMDApOworCX0KKworCS8qIERpc2FibGUgc3Rh dHVzIHF1ZXVlLiAqLworCXFkbWFfd3JpdGVsKGZzbF9xZG1hLCAwLCBibG9jayArIEZTTF9RRE1B X0JTUU1SKTsKKworCS8qIENsZWFyIGFsbCBkZXRlY3RlZCBldmVudHMgYW5kIGludGVycnVwdHMg Zm9yIGFsbCBxdWV1ZXMuICovCisJcWRtYV93cml0ZWwoZnNsX3FkbWEsIEZTTF9RRE1BX0JDUUlE Ul9DTEVBUiwKKwkJCQlibG9jayArIEZTTF9RRE1BX0JDUUlEUigwKSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBmc2xfcWRtYV9xdWV1ZV90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3Qg ZnNsX3FkbWFfZW5naW5lICpmc2xfcWRtYSkKK3sKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVldWUgKmZz bF9xdWV1ZSA9IGZzbF9xZG1hLT5xdWV1ZTsKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVldWUgKmZzbF9z dGF0dXMgPSBmc2xfcWRtYS0+c3RhdHVzOworCXN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqdGVtcF9x dWV1ZTsKKwlzdHJ1Y3QgZnNsX3FkbWFfY29tcCAqZnNsX2NvbXA7CisJc3RydWN0IGZzbF9xZG1h X2Zvcm1hdCAqc3RhdHVzX2FkZHI7CisJc3RydWN0IGZzbF9xZG1hX2Zvcm1hdCAqY3NnZl9zcmM7 CisJc3RydWN0IGZzbF9wcmVfc3RhdHVzIHByZTsKKwl2b2lkIF9faW9tZW0gKmJsb2NrID0gZnNs X3FkbWEtPmJsb2NrX2Jhc2U7CisJdTMyIHJlZywgaTsKKwlib29sIGR1cGxpY2F0ZSwgZHVwbGlj YXRlX2hhbmRsZTsKKworCW1lbXNldCgmcHJlLCAwLCBzaXplb2Yoc3RydWN0IGZzbF9wcmVfc3Rh dHVzKSk7CisKKwl3aGlsZSAoMSkgeworCQlkdXBsaWNhdGUgPSAwOworCQlkdXBsaWNhdGVfaGFu ZGxlID0gMDsKKwkJcmVnID0gcWRtYV9yZWFkbChmc2xfcWRtYSwgYmxvY2sgKyBGU0xfUURNQV9C U1FTUik7CisJCWlmIChyZWcgJiBGU0xfUURNQV9CU1FTUl9RRSkKKwkJCXJldHVybiAwOworCQlz dGF0dXNfYWRkciA9IGZzbF9zdGF0dXMtPnZpcnRfaGVhZDsKKwkJaWYgKHFkbWFfY2NkZl9nZXRf cXVldWUoc3RhdHVzX2FkZHIpID09IHByZS5xdWV1ZSAmJgorCQkJcWRtYV9jY2RmX2FkZHJfZ2V0 NjQoc3RhdHVzX2FkZHIpID09IHByZS5hZGRyKQorCQkJZHVwbGljYXRlID0gMTsKKwkJaSA9IHFk bWFfY2NkZl9nZXRfcXVldWUoc3RhdHVzX2FkZHIpOworCQlwcmUucXVldWUgPSBxZG1hX2NjZGZf Z2V0X3F1ZXVlKHN0YXR1c19hZGRyKTsKKwkJcHJlLmFkZHIgPSBxZG1hX2NjZGZfYWRkcl9nZXQ2 NChzdGF0dXNfYWRkcik7CisJCXRlbXBfcXVldWUgPSBmc2xfcXVldWUgKyBpOworCQlzcGluX2xv Y2soJnRlbXBfcXVldWUtPnF1ZXVlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmdGVtcF9xdWV1 ZS0+Y29tcF91c2VkKSkgeworCQkJaWYgKGR1cGxpY2F0ZSkgeworCQkJCWR1cGxpY2F0ZV9oYW5k bGUgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9jaygmdGVtcF9xdWV1ZS0+cXVldWVf bG9jayk7CisJCQkJcmV0dXJuIC1FQUdBSU47CisJCQl9CisJCX0gZWxzZSB7CisJCQlmc2xfY29t cCA9IGxpc3RfZmlyc3RfZW50cnkoJnRlbXBfcXVldWUtPmNvbXBfdXNlZCwKKwkJCQkJCQlzdHJ1 Y3QgZnNsX3FkbWFfY29tcCwKKwkJCQkJCQlsaXN0KTsKKwkJCWNzZ2Zfc3JjID0gZnNsX2NvbXAt PnZpcnRfYWRkciArIDI7CisJCQlpZiAoZnNsX2NvbXAtPmJ1c19hZGRyICsgMTYgIT0gcHJlLmFk ZHIpIHsKKwkJCQlpZiAoZHVwbGljYXRlKSB7CisJCQkJCWR1cGxpY2F0ZV9oYW5kbGUgPSAxOwor CQkJCX0gZWxzZSB7CisJCQkJCXNwaW5fdW5sb2NrKCZ0ZW1wX3F1ZXVlLT5xdWV1ZV9sb2NrKTsK KwkJCQkJcmV0dXJuIC1FQUdBSU47CisJCQkJfQorCQkJfQorCQl9CisKKwkJCWlmIChkdXBsaWNh dGVfaGFuZGxlKSB7CisJCQkJcmVnID0gcWRtYV9yZWFkbChmc2xfcWRtYSwgYmxvY2sgKworCQkJ CQkJRlNMX1FETUFfQlNRTVIpOworCQkJcmVnIHw9IEZTTF9RRE1BX0JTUU1SX0RJOworCQkJcWRt YV9kZXNjX2FkZHJfc2V0NjQoc3RhdHVzX2FkZHIsIDB4MCk7CisJCQlmc2xfc3RhdHVzLT52aXJ0 X2hlYWQrKzsKKwkJCWlmIChmc2xfc3RhdHVzLT52aXJ0X2hlYWQgPT0gZnNsX3N0YXR1cy0+Y3EK KwkJCQkJCSAgICsgZnNsX3N0YXR1cy0+bl9jcSkKKwkJCQlmc2xfc3RhdHVzLT52aXJ0X2hlYWQg PSBmc2xfc3RhdHVzLT5jcTsKKwkJCXFkbWFfd3JpdGVsKGZzbF9xZG1hLCByZWcsIGJsb2NrICsg RlNMX1FETUFfQlNRTVIpOworCQkJc3Bpbl91bmxvY2soJnRlbXBfcXVldWUtPnF1ZXVlX2xvY2sp OworCQkJY29udGludWU7CisJCX0KKwkJbGlzdF9kZWwoJmZzbF9jb21wLT5saXN0KTsKKworCQly ZWcgPSBxZG1hX3JlYWRsKGZzbF9xZG1hLCBibG9jayArIEZTTF9RRE1BX0JTUU1SKTsKKwkJcmVn IHw9IEZTTF9RRE1BX0JTUU1SX0RJOworCQlxZG1hX2Rlc2NfYWRkcl9zZXQ2NChzdGF0dXNfYWRk ciwgMHgwKTsKKwkJZnNsX3N0YXR1cy0+dmlydF9oZWFkKys7CisJCWlmIChmc2xfc3RhdHVzLT52 aXJ0X2hlYWQgPT0gZnNsX3N0YXR1cy0+Y3EgKyBmc2xfc3RhdHVzLT5uX2NxKQorCQkJZnNsX3N0 YXR1cy0+dmlydF9oZWFkID0gZnNsX3N0YXR1cy0+Y3E7CisJCXFkbWFfd3JpdGVsKGZzbF9xZG1h LCByZWcsIGJsb2NrICsgRlNMX1FETUFfQlNRTVIpOworCQlzcGluX3VubG9jaygmdGVtcF9xdWV1 ZS0+cXVldWVfbG9jayk7CisKKwkJc3Bpbl9sb2NrKCZmc2xfY29tcC0+cWNoYW4tPnZjaGFuLmxv Y2spOworCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJmZzbF9jb21wLT52ZGVzYyk7CisJCWZzbF9j b21wLT5xY2hhbi0+c3RhdHVzID0gRE1BX0NPTVBMRVRFOworCQlzcGluX3VubG9jaygmZnNsX2Nv bXAtPnFjaGFuLT52Y2hhbi5sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGly cXJldHVybl90IGZzbF9xZG1hX2Vycm9yX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQor eworCXN0cnVjdCBmc2xfcWRtYV9lbmdpbmUgKmZzbF9xZG1hID0gZGV2X2lkOworCXVuc2lnbmVk IGludCBpbnRyOworCXZvaWQgX19pb21lbSAqc3RhdHVzID0gZnNsX3FkbWEtPnN0YXR1c19iYXNl OworCisJaW50ciA9IHFkbWFfcmVhZGwoZnNsX3FkbWEsIHN0YXR1cyArIEZTTF9RRE1BX0RFRFIp OworCisJaWYgKGludHIpCisJCWRldl9lcnIoZnNsX3FkbWEtPmRtYV9kZXYuZGV2LCAiRE1BIHRy YW5zYWN0aW9uIGVycm9yIVxuIik7CisKKwkvKiBDbGVhciBhbGwgZXJyb3IgY29uZGl0aW9ucyBh bmQgaW50ZXJydXB0cy4gKi8KKwlxZG1hX3dyaXRlbChmc2xfcWRtYSwgRlNMX1FETUFfREVEUl9D TEVBUiwgc3RhdHVzICsgRlNMX1FETUFfREVEUik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBmc2xfcWRtYV9xdWV1ZV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZnNsX3FkbWFfZW5naW5lICpmc2xfcWRtYSA9IGRldl9p ZDsKKwl1bnNpZ25lZCBpbnQgaW50ciwgcmVnOworCXZvaWQgX19pb21lbSAqYmxvY2sgPSBmc2xf cWRtYS0+YmxvY2tfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmN0cmwgPSBmc2xfcWRtYS0+Y3RybF9i YXNlOworCisJaW50ciA9IHFkbWFfcmVhZGwoZnNsX3FkbWEsIGJsb2NrICsgRlNMX1FETUFfQkNR SURSKDApKTsKKworCWlmICgoaW50ciAmIEZTTF9RRE1BX0NRSURSX1NRVCkgIT0gMCkKKwkJaW50 ciA9IGZzbF9xZG1hX3F1ZXVlX3RyYW5zZmVyX2NvbXBsZXRlKGZzbF9xZG1hKTsKKworCWlmIChp bnRyICE9IDApIHsKKwkJcmVnID0gcWRtYV9yZWFkbChmc2xfcWRtYSwgY3RybCArIEZTTF9RRE1B X0RNUik7CisJCXJlZyB8PSBGU0xfUURNQV9ETVJfRFFEOworCQlxZG1hX3dyaXRlbChmc2xfcWRt YSwgcmVnLCBjdHJsICsgRlNMX1FETUFfRE1SKTsKKwkJcWRtYV93cml0ZWwoZnNsX3FkbWEsIDAs IGJsb2NrICsgRlNMX1FETUFfQkNRSUVSKDApKTsKKwkJZGV2X2Vycihmc2xfcWRtYS0+ZG1hX2Rl di5kZXYsICJRRE1BOiBzdGF0dXMgZXJyIVxuIik7CisJfQorCisJLyogQ2xlYXIgYWxsIGRldGVj dGVkIGV2ZW50cyBhbmQgaW50ZXJydXB0cy4gKi8KKwlxZG1hX3dyaXRlbChmc2xfcWRtYSwgRlNM X1FETUFfQkNRSURSX0NMRUFSLAorCQkJCWJsb2NrICsgRlNMX1FETUFfQkNRSURSKDApKTsKKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludAorZnNsX3FkbWFfaXJxX2luaXQo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJICBzdHJ1Y3QgZnNsX3FkbWFfZW5naW5l ICpmc2xfcWRtYSkKK3sKKwlpbnQgcmV0OworCisJZnNsX3FkbWEtPmVycm9yX2lycSA9IHBsYXRm b3JtX2dldF9pcnFfYnluYW1lKHBkZXYsCisJCQkJCQkJInFkbWEtZXJyb3IiKTsKKwlpZiAoZnNs X3FkbWEtPmVycm9yX2lycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0 IHFkbWEgY29udHJvbGxlciBpcnEuXG4iKTsKKwkJcmV0dXJuIGZzbF9xZG1hLT5lcnJvcl9pcnE7 CisJfQorCisJZnNsX3FkbWEtPnF1ZXVlX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBk ZXYsICJxZG1hLXF1ZXVlIik7CisJaWYgKGZzbF9xZG1hLT5xdWV1ZV9pcnEgPCAwKSB7CisJCWRl dl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGdldCBxZG1hIHF1ZXVlIGlycS5cbiIpOworCQlyZXR1 cm4gZnNsX3FkbWEtPnF1ZXVlX2lycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZw ZGV2LT5kZXYsIGZzbF9xZG1hLT5lcnJvcl9pcnEsCisJCQlmc2xfcWRtYV9lcnJvcl9oYW5kbGVy LCAwLCAicURNQSBlcnJvciIsIGZzbF9xZG1hKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkNhbid0IHJlZ2lzdGVyIHFETUEgY29udHJvbGxlciBJUlEuXG4iKTsKKwkJcmV0 dXJuICByZXQ7CisJfQorCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZnNsX3Fk bWEtPnF1ZXVlX2lycSwKKwkJCWZzbF9xZG1hX3F1ZXVlX2hhbmRsZXIsIDAsICJxRE1BIHF1ZXVl IiwgZnNsX3FkbWEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3Qg cmVnaXN0ZXIgcURNQSBxdWV1ZSBJUlEuXG4iKTsKKwkJcmV0dXJuICByZXQ7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9xZG1hX2lycV9leGl0KAorCQlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZnNsX3FkbWFfZW5naW5lICpmc2xfcWRtYSkKK3sK KwlpZiAoZnNsX3FkbWEtPnF1ZXVlX2lycSA9PSBmc2xfcWRtYS0+ZXJyb3JfaXJxKSB7CisJCWRl dm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX3FkbWEtPnF1ZXVlX2lycSwgZnNsX3FkbWEpOwor CX0gZWxzZSB7CisJCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX3FkbWEtPnF1ZXVlX2ly cSwgZnNsX3FkbWEpOworCQlkZXZtX2ZyZWVfaXJxKCZwZGV2LT5kZXYsIGZzbF9xZG1hLT5lcnJv cl9pcnEsIGZzbF9xZG1hKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZnNsX3FkbWFfcmVnX2luaXQo c3RydWN0IGZzbF9xZG1hX2VuZ2luZSAqZnNsX3FkbWEpCit7CisJc3RydWN0IGZzbF9xZG1hX3F1 ZXVlICpmc2xfcXVldWUgPSBmc2xfcWRtYS0+cXVldWU7CisJc3RydWN0IGZzbF9xZG1hX3F1ZXVl ICp0ZW1wOworCXZvaWQgX19pb21lbSAqY3RybCA9IGZzbF9xZG1hLT5jdHJsX2Jhc2U7CisJdm9p ZCBfX2lvbWVtICpzdGF0dXMgPSBmc2xfcWRtYS0+c3RhdHVzX2Jhc2U7CisJdm9pZCBfX2lvbWVt ICpibG9jayA9IGZzbF9xZG1hLT5ibG9ja19iYXNlOworCWludCBpLCByZXQ7CisJdTMyIHJlZzsK KworCS8qIFRyeSB0byBoYWx0IHRoZSBxRE1BIGVuZ2luZSBmaXJzdC4gKi8KKwlyZXQgPSBmc2xf cWRtYV9oYWx0KGZzbF9xZG1hKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZnNsX3FkbWEtPmRt YV9kZXYuZGV2LCAiRE1BIGhhbHQgZmFpbGVkISIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IENsZWFyIGFsbCBkZXRlY3RlZCBldmVudHMgYW5kIGludGVycnVwdHMgZm9yIGFsbCBxdWV1ZXMu ICovCisJcWRtYV93cml0ZWwoZnNsX3FkbWEsIEZTTF9RRE1BX0JDUUlEUl9DTEVBUiwKKwkJCQli bG9jayArIEZTTF9RRE1BX0JDUUlEUigwKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNsX3FkbWEt Pm5fcXVldWVzOyBpKyspIHsKKwkJdGVtcCA9IGZzbF9xdWV1ZSArIGk7CisJCS8qCisJCSAqIElu aXRpYWxpemUgQ29tbWFuZCBRdWV1ZSByZWdpc3RlcnMgdG8gcG9pbnQgdG8gdGhlIGZpcnN0CisJ CSAqIGNvbW1hbmQgZGVzY3JpcHRvciBpbiBtZW1vcnkuCisJCSAqIERlcXVldWUgUG9pbnRlciBB ZGRyZXNzIFJlZ2lzdGVycworCQkgKiBFbnF1ZXVlIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlcnMK KwkJICovCisJCXFkbWFfd3JpdGVsKGZzbF9xZG1hLCB0ZW1wLT5idXNfYWRkciwKKwkJCQlibG9j ayArIEZTTF9RRE1BX0JDUURQQV9TQUREUihpKSk7CisJCXFkbWFfd3JpdGVsKGZzbF9xZG1hLCB0 ZW1wLT5idXNfYWRkciwKKwkJCQlibG9jayArIEZTTF9RRE1BX0JDUUVQQV9TQUREUihpKSk7CisK KwkJLyogSW5pdGlhbGl6ZSB0aGUgcXVldWUgbW9kZS4gKi8KKwkJcmVnID0gRlNMX1FETUFfQkNR TVJfRU47CisJCXJlZyB8PSBGU0xfUURNQV9CQ1FNUl9DRF9USExEKGlsb2cyKHRlbXAtPm5fY3Ep IC0gNCk7CisJCXJlZyB8PSBGU0xfUURNQV9CQ1FNUl9DUV9TSVpFKGlsb2cyKHRlbXAtPm5fY3Ep IC0gNik7CisJCXFkbWFfd3JpdGVsKGZzbF9xZG1hLCByZWcsIGJsb2NrICsgRlNMX1FETUFfQkNR TVIoaSkpOworCX0KKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgZXJyYXR1bTogRVJSMDEwODEy LgorCSAqIFdlIG11c3QgZW5hYmxlIFhPRkYgdG8gYXZvaWQgdGhlIGVucXVldWUgcmVqZWN0aW9u IG9jY3Vycy4KKwkgKiBTZXR0aW5nIFNRQ0NNUiBFTlRFUl9XTSB0byAweDIwLgorCSAqLworCXFk bWFfd3JpdGVsKGZzbF9xZG1hLCBGU0xfUURNQV9TUUNDTVJfRU5URVJfV00sCisJCQkgICAgICBi bG9jayArIEZTTF9RRE1BX1NRQ0NNUik7CisJLyoKKwkgKiBJbml0aWFsaXplIHN0YXR1cyBxdWV1 ZSByZWdpc3RlcnMgdG8gcG9pbnQgdG8gdGhlIGZpcnN0CisJICogY29tbWFuZCBkZXNjcmlwdG9y IGluIG1lbW9yeS4KKwkgKiBEZXF1ZXVlIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlcnMKKwkgKiBF bnF1ZXVlIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlcnMKKwkgKi8KKwlxZG1hX3dyaXRlbChmc2xf cWRtYSwgZnNsX3FkbWEtPnN0YXR1cy0+YnVzX2FkZHIsCisJCQkJCWJsb2NrICsgRlNMX1FETUFf U1FFUEFSKTsKKwlxZG1hX3dyaXRlbChmc2xfcWRtYSwgZnNsX3FkbWEtPnN0YXR1cy0+YnVzX2Fk ZHIsCisJCQkJCWJsb2NrICsgRlNMX1FETUFfU1FEUEFSKTsKKwkvKiBJbml0aWFsaXplIHN0YXR1 cyBxdWV1ZSBpbnRlcnJ1cHQuICovCisJcWRtYV93cml0ZWwoZnNsX3FkbWEsIEZTTF9RRE1BX0JD UUlFUl9DUVRJRSwKKwkJCSAgICAgIGJsb2NrICsgRlNMX1FETUFfQkNRSUVSKDApKTsKKwlxZG1h X3dyaXRlbChmc2xfcWRtYSwgRlNMX1FETUFfQlNRSUNSX0lDRU4gfCBGU0xfUURNQV9CU1FJQ1Jf SUNTVCg1KQorCQkJCQkJICAgfCAweDgwMDAsCisJCQkgICAgICBibG9jayArIEZTTF9RRE1BX0JT UUlDUik7CisJcWRtYV93cml0ZWwoZnNsX3FkbWEsIEZTTF9RRE1BX0NRSUVSX01FSUUgfCBGU0xf UURNQV9DUUlFUl9URUlFLAorCQkJICAgICAgYmxvY2sgKyBGU0xfUURNQV9DUUlFUik7CisJLyog SW5pdGlhbGl6ZSBjb250cm9sbGVyIGludGVycnVwdCByZWdpc3Rlci4gKi8KKwlxZG1hX3dyaXRl bChmc2xfcWRtYSwgRlNMX1FETUFfREVEUl9DTEVBUiwgc3RhdHVzICsgRlNMX1FETUFfREVEUik7 CisJcWRtYV93cml0ZWwoZnNsX3FkbWEsIEZTTF9RRE1BX0RFSUVSX0NMRUFSLCBzdGF0dXMgKyBG U0xfUURNQV9ERUlFUik7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzdGF0dXMgcXVldWUgbW9kZS4g Ki8KKwlyZWcgPSBGU0xfUURNQV9CU1FNUl9FTjsKKwlyZWcgfD0gRlNMX1FETUFfQlNRTVJfQ1Ff U0laRShpbG9nMihmc2xfcWRtYS0+c3RhdHVzLT5uX2NxKS02KTsKKwlxZG1hX3dyaXRlbChmc2xf cWRtYSwgcmVnLCBibG9jayArIEZTTF9RRE1BX0JTUU1SKTsKKworCXJlZyA9IHFkbWFfcmVhZGwo ZnNsX3FkbWEsIGN0cmwgKyBGU0xfUURNQV9ETVIpOworCXJlZyAmPSB+RlNMX1FETUFfRE1SX0RR RDsKKwlxZG1hX3dyaXRlbChmc2xfcWRtYSwgcmVnLCBjdHJsICsgRlNMX1FETUFfRE1SKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoK K2ZzbF9xZG1hX3ByZXBfbWVtY3B5KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBk c3QsCisJCWRtYV9hZGRyX3Qgc3JjLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQor eworCXN0cnVjdCBmc2xfcWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9xZG1hX2NoYW4oY2hh bik7CisJc3RydWN0IGZzbF9xZG1hX2NvbXAgKmZzbF9jb21wOworCisJZnNsX2NvbXAgPSBmc2xf cWRtYV9yZXF1ZXN0X2VucXVldWVfZGVzYyhmc2xfY2hhbiwgMCwgMCk7CisJZnNsX3FkbWFfY29t cF9maWxsX21lbWNweShmc2xfY29tcCwgZHN0LCBzcmMsIGxlbik7CisKKwlyZXR1cm4gdmNoYW5f dHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2NvbXAtPnZkZXNjLCBmbGFncyk7Cit9CisK K3N0YXRpYyB2b2lkIGZzbF9xZG1hX2VucXVldWVfZGVzYyhzdHJ1Y3QgZnNsX3FkbWFfY2hhbiAq ZnNsX2NoYW4pCit7CisJdm9pZCBfX2lvbWVtICpibG9jayA9IGZzbF9jaGFuLT5xZG1hLT5ibG9j a19iYXNlOworCXN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqZnNsX3F1ZXVlID0gZnNsX2NoYW4tPnF1 ZXVlOworCXN0cnVjdCBmc2xfcWRtYV9jb21wICpmc2xfY29tcDsKKwlzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmRlc2M7CisJdTMyIHJlZzsKKworCXJlZyA9IHFkbWFfcmVhZGwoZnNsX2NoYW4tPnFk bWEsIGJsb2NrICsgRlNMX1FETUFfQkNRU1IoZnNsX3F1ZXVlLT5pZCkpOworCWlmIChyZWcgJiAo RlNMX1FETUFfQkNRU1JfUUYgfCBGU0xfUURNQV9CQ1FTUl9YT0ZGKSkKKwkJcmV0dXJuOworCXZk ZXNjID0gdmNoYW5fbmV4dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOworCWlmICghdmRlc2MpCisJ CXJldHVybjsKKwlsaXN0X2RlbCgmdmRlc2MtPm5vZGUpOworCWZzbF9jb21wID0gdG9fZnNsX3Fk bWFfY29tcCh2ZGVzYyk7CisKKwltZW1jcHkoZnNsX3F1ZXVlLT52aXJ0X2hlYWQrKywgZnNsX2Nv bXAtPnZpcnRfYWRkciwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBmc2xfcWRtYV9mb3JtYXQpKTsKKwlp ZiAoZnNsX3F1ZXVlLT52aXJ0X2hlYWQgPT0gZnNsX3F1ZXVlLT5jcSArIGZzbF9xdWV1ZS0+bl9j cSkKKwkJZnNsX3F1ZXVlLT52aXJ0X2hlYWQgPSBmc2xfcXVldWUtPmNxOworCisJbGlzdF9hZGRf dGFpbCgmZnNsX2NvbXAtPmxpc3QsICZmc2xfcXVldWUtPmNvbXBfdXNlZCk7CisJYmFycmllcigp OworCXJlZyA9IHFkbWFfcmVhZGwoZnNsX2NoYW4tPnFkbWEsIGJsb2NrICsgRlNMX1FETUFfQkNR TVIoZnNsX3F1ZXVlLT5pZCkpOworCXJlZyB8PSBGU0xfUURNQV9CQ1FNUl9FSTsKKwlxZG1hX3dy aXRlbChmc2xfY2hhbi0+cWRtYSwgcmVnLCBibG9jayArIEZTTF9RRE1BX0JDUU1SKGZzbF9xdWV1 ZS0+aWQpKTsKKwlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworfQorCitzdGF0 aWMgZW51bSBkbWFfc3RhdHVzIGZzbF9xZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4sCisJCWRtYV9jb29raWVfdCBjb29raWUsIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUp Cit7CisJZW51bSBkbWFfc3RhdHVzIHJldDsKKworCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGNo YW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJaWYgKHJldCA9PSBETUFfQ09NUExFVEUgfHwgIXR4c3Rh dGUpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmc2xf cWRtYV9mcmVlX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjKQoreworCXN0cnVjdCBm c2xfcWRtYV9jb21wICpmc2xfY29tcDsKKwlzdHJ1Y3QgZnNsX3FkbWFfcXVldWUgKmZzbF9xdWV1 ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZnNsX2NvbXAgPSB0b19mc2xfcWRtYV9jb21w KHZkZXNjKTsKKwlmc2xfcXVldWUgPSBmc2xfY29tcC0+cWNoYW4tPnF1ZXVlOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmZzbF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3Rh aWwoJmZzbF9jb21wLT5saXN0LCAmZnNsX3F1ZXVlLT5jb21wX2ZyZWUpOworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmZzbF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMg dm9pZCBmc2xfcWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgZnNsX3FkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfcWRtYV9jaGFuKGNoYW4pOwor CXN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqZnNsX3F1ZXVlID0gZnNsX2NoYW4tPnF1ZXVlOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX3F1ZXVlLT5xdWV1 ZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZmc2xfY2hhbi0+dmNoYW4ubG9jayk7CisJaWYg KHZjaGFuX2lzc3VlX3BlbmRpbmcoJmZzbF9jaGFuLT52Y2hhbikpCisJCWZzbF9xZG1hX2VucXVl dWVfZGVzYyhmc2xfY2hhbik7CisJc3Bpbl91bmxvY2soJmZzbF9jaGFuLT52Y2hhbi5sb2NrKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsK K30KKworc3RhdGljIGludCBmc2xfcWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlz dHJ1Y3QgZnNsX3FkbWFfZW5naW5lICpmc2xfcWRtYTsKKwlzdHJ1Y3QgZnNsX3FkbWFfY2hhbiAq ZnNsX2NoYW47CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgaW50IGxlbiwgY2hh bnMsIHF1ZXVlczsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo bnAsICJkbWEtY2hhbm5lbHMiLCAmY2hhbnMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiQ2FuJ3QgZ2V0IGRtYS1jaGFubmVscy5cbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCWxlbiA9IHNpemVvZigqZnNsX3FkbWEpICsgc2l6ZW9mKCpmc2xfY2hhbikgKiBjaGFuczsK Kwlmc2xfcWRtYSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBsZW4sIEdGUF9LRVJORUwpOwor CWlmICghZnNsX3FkbWEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobnAsICJmc2wscXVldWVzIiwgJnF1ZXVlcyk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgcXVldWVzLlxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJZnNsX3FkbWEtPnF1ZXVlID0gZnNsX3FkbWFfYWxsb2NfcXVldWVfcmVzb3VyY2VzKHBk ZXYsIHF1ZXVlcyk7CisJaWYgKCFmc2xfcWRtYS0+cXVldWUpCisJCXJldHVybiAtRU5PTUVNOwor CisJZnNsX3FkbWEtPnN0YXR1cyA9IGZzbF9xZG1hX3ByZXBfc3RhdHVzX3F1ZXVlKHBkZXYpOwor CWlmICghZnNsX3FkbWEtPnN0YXR1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmc2xfcWRtYS0+ bl9jaGFucyA9IGNoYW5zOworCWZzbF9xZG1hLT5uX3F1ZXVlcyA9IHF1ZXVlczsKKwltdXRleF9p bml0KCZmc2xfcWRtYS0+ZnNsX3FkbWFfbXV0ZXgpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlmc2xfcWRtYS0+Y3RybF9iYXNlID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihmc2xf cWRtYS0+Y3RybF9iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnNsX3FkbWEtPmN0cmxfYmFzZSk7 CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEp OworCWZzbF9xZG1hLT5zdGF0dXNfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ ZGV2LCByZXMpOworCWlmIChJU19FUlIoZnNsX3FkbWEtPnN0YXR1c19iYXNlKSkKKwkJcmV0dXJu IFBUUl9FUlIoZnNsX3FkbWEtPnN0YXR1c19iYXNlKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMik7CisJZnNsX3FkbWEtPmJsb2NrX2Jhc2Ug PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGZz bF9xZG1hLT5ibG9ja19iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnNsX3FkbWEtPmJsb2NrX2Jh c2UpOworCisJcmV0ID0gZnNsX3FkbWFfaXJxX2luaXQocGRldiwgZnNsX3FkbWEpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlmc2xfcWRtYS0+ZmVhdHVyZSA9IG9mX3Byb3BlcnR5X3Jl YWRfYm9vbChucCwgImJpZy1lbmRpYW4iKTsKKwlJTklUX0xJU1RfSEVBRCgmZnNsX3FkbWEtPmRt YV9kZXYuY2hhbm5lbHMpOworCWZvciAoaSA9IDA7IGkgPCBmc2xfcWRtYS0+bl9jaGFuczsgaSsr KSB7CisJCXN0cnVjdCBmc2xfcWRtYV9jaGFuICpmc2xfY2hhbiA9ICZmc2xfcWRtYS0+Y2hhbnNb aV07CisKKwkJZnNsX2NoYW4tPnFkbWEgPSBmc2xfcWRtYTsKKwkJZnNsX2NoYW4tPnF1ZXVlID0g ZnNsX3FkbWEtPnF1ZXVlICsgaSAlIGZzbF9xZG1hLT5uX3F1ZXVlczsKKwkJZnNsX2NoYW4tPnZj aGFuLmRlc2NfZnJlZSA9IGZzbF9xZG1hX2ZyZWVfZGVzYzsKKwkJSU5JVF9MSVNUX0hFQUQoJmZz bF9jaGFuLT5xY29tcCk7CisJCXZjaGFuX2luaXQoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9xZG1h LT5kbWFfZGV2KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGZzbF9xZG1hLT5uX3F1ZXVlczsgaSsr KQorCQlmc2xfcWRtYV9wcmVfcmVxdWVzdF9lbnF1ZXVlX2Rlc2MoZnNsX3FkbWEtPnF1ZXVlICsg aSk7CisKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBmc2xfcWRtYS0+ZG1hX2Rldi5jYXBfbWFz ayk7CisKKwlmc2xfcWRtYS0+ZG1hX2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCWZzbF9xZG1hLT5k bWFfZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzCisJCT0gZnNsX3FkbWFfZnJlZV9jaGFu X3Jlc291cmNlczsKKwlmc2xfcWRtYS0+ZG1hX2Rldi5kZXZpY2VfdHhfc3RhdHVzID0gZnNsX3Fk bWFfdHhfc3RhdHVzOworCWZzbF9xZG1hLT5kbWFfZGV2LmRldmljZV9wcmVwX2RtYV9tZW1jcHkg PSBmc2xfcWRtYV9wcmVwX21lbWNweTsKKwlmc2xfcWRtYS0+ZG1hX2Rldi5kZXZpY2VfaXNzdWVf cGVuZGluZyA9IGZzbF9xZG1hX2lzc3VlX3BlbmRpbmc7CisKKwlkbWFfc2V0X21hc2soJnBkZXYt PmRldiwgRE1BX0JJVF9NQVNLKDQwKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBm c2xfcWRtYSk7CisKKwlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZmc2xfcWRtYS0+ ZG1hX2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCByZWdp c3RlciBOWFAgTGF5ZXJzY2FwZSBxRE1BIGVuZ2luZS5cbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IGZzbF9xZG1hX3JlZ19pbml0KGZzbF9xZG1hKTsKKwlpZiAocmV0KSB7CisJCWRl dl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IEluaXRpYWxpemUgdGhlIHFETUEgZW5naW5lLlxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9x ZG1hX2NsZWFudXBfdmNoYW4oc3RydWN0IGRtYV9kZXZpY2UgKmRtYWRldikKK3sKKwlzdHJ1Y3Qg ZnNsX3FkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGNoYW4sIF9jaGFuLAorCQkJCSZkbWFkZXYtPmNoYW5uZWxzLCB2Y2hhbi5jaGFuLmRldmljZV9u b2RlKSB7CisJCWxpc3RfZGVsKCZjaGFuLT52Y2hhbi5jaGFuLmRldmljZV9ub2RlKTsKKwkJdGFz a2xldF9raWxsKCZjaGFuLT52Y2hhbi50YXNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZnNsX3Fk bWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBmc2xfcWRtYV9lbmdpbmUg KmZzbF9xZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZzbF9xZG1h X3F1ZXVlICpxdWV1ZV90ZW1wOworCXN0cnVjdCBmc2xfcWRtYV9xdWV1ZSAqc3RhdHVzID0gZnNs X3FkbWEtPnN0YXR1czsKKwlzdHJ1Y3QgZnNsX3FkbWFfY29tcCAqY29tcF90ZW1wLCAqX2NvbXBf dGVtcDsKKwlpbnQgaTsKKworCWZzbF9xZG1hX2lycV9leGl0KHBkZXYsIGZzbF9xZG1hKTsKKwlm c2xfcWRtYV9jbGVhbnVwX3ZjaGFuKCZmc2xfcWRtYS0+ZG1hX2Rldik7CisJb2ZfZG1hX2NvbnRy b2xsZXJfZnJlZShucCk7CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZmc2xfcWRtYS0+ ZG1hX2Rldik7CisKKwkvKiBGcmVlIGRlc2NyaXB0b3IgYXJlYXMgKi8KKwlmb3IgKGkgPSAwOyBp IDwgZnNsX3FkbWEtPm5fcXVldWVzOyBpKyspIHsKKwkJcXVldWVfdGVtcCA9IGZzbF9xZG1hLT5x dWV1ZSArIGk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wX3RlbXAsIF9jb21wX3Rl bXAsCisJCQkJCSZxdWV1ZV90ZW1wLT5jb21wX3VzZWQsCWxpc3QpIHsKKwkJCWRtYV9wb29sX2Zy ZWUocXVldWVfdGVtcC0+Y29tcF9wb29sLAorCQkJCQljb21wX3RlbXAtPnZpcnRfYWRkciwKKwkJ CQkJY29tcF90ZW1wLT5idXNfYWRkcik7CisJCQlsaXN0X2RlbCgmY29tcF90ZW1wLT5saXN0KTsK KwkJCWtmcmVlKGNvbXBfdGVtcCk7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNv bXBfdGVtcCwgX2NvbXBfdGVtcCwKKwkJCQkJJnF1ZXVlX3RlbXAtPmNvbXBfZnJlZSwgbGlzdCkg eworCQkJZG1hX3Bvb2xfZnJlZShxdWV1ZV90ZW1wLT5jb21wX3Bvb2wsCisJCQkJCWNvbXBfdGVt cC0+dmlydF9hZGRyLAorCQkJCQljb21wX3RlbXAtPmJ1c19hZGRyKTsKKwkJCWxpc3RfZGVsKCZj b21wX3RlbXAtPmxpc3QpOworCQkJa2ZyZWUoY29tcF90ZW1wKTsKKwkJfQorCQlkbWFfZnJlZV9j b2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGZzbF9xZG1hX2Zvcm1hdCkgKgorCQkJ CQlxdWV1ZV90ZW1wLT5uX2NxLCBxdWV1ZV90ZW1wLT5jcSwKKwkJCQkJcXVldWVfdGVtcC0+YnVz X2FkZHIpOworCQlkbWFfcG9vbF9kZXN0cm95KHF1ZXVlX3RlbXAtPmNvbXBfcG9vbCk7CisJfQor CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBmc2xfcWRtYV9m b3JtYXQpICoKKwkJCQlzdGF0dXMtPm5fY3EsIHN0YXR1cy0+Y3EsIHN0YXR1cy0+YnVzX2FkZHIp OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmc2xf cWRtYV9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxsczEwMjFhLXFkbWEiLCB9 LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9x ZG1hX2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9xZG1hX2Ry aXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZnNsLXFkbWEiLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBmc2xfcWRtYV9kdF9pZHMsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBmc2xf cWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IGZzbF9xZG1hX3JlbW92ZSwKK307CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoZnNsX3FkbWFfZHJpdmVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9y bTpmc2wtcWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOWFAgTGF5ZXJzY2FwZSBxRE1BIGVu Z2luZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK