From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/2] dmaengine: fsl-dpaa2-qdma: Add NXP dpaa2 qDMA controller driver for Layerscape SoCs From: Peng Ma Message-Id: <20190304091012.9885-2-peng.ma@nxp.com> Date: Mon, 4 Mar 2019 17:10:12 +0800 To: vkoul@kernel.org Cc: dan.j.williams@intel.com, leoyang.li@nxp.com, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, Peng Ma List-ID: RFBQQTIoRGF0YSBQYXRoIEFjY2VsZXJhdGlvbiBBcmNoaXRlY3R1cmUgMikgcURNQQpUaGUgcURN QSBzdXBwb3J0cyBjaGFubmVsIHZpcnR1YWxpemF0aW9uIGJ5IGFsbG93aW5nIERNQSBqb2JzIHRv IGJlIGVucXVldWVkCmludG8gZGlmZmVyZW50IGZyYW1lIHF1ZXVlcy4gQ29yZSBjYW4gaW5pdGlh dGUgYSBETUEgdHJhbnNhY3Rpb24gYnkgcHJlcGFyaW5nCmEgZnJhbWUgZGVzY3JpcHRvcihGRCkg Zm9yIGVhY2ggRE1BIGpvYiBhbmQgZW5xdWV1aW5nIHRoaXMgam9iIHRvIGEgZnJhbWUgcXVldWUu CnRocm91Z2ggYSBoYXJkd2FyZSBwb3J0YWwuIFRoZSBxRE1BIHByZWZldGNoZXMgRE1BIGpvYnMg ZnJvbSB0aGUgZnJhbWUgcXVldWVzLgpJdCB0aGVuIHNjaGVkdWxlcyBhbmQgZGlzcGF0Y2hlcyB0 byBpbnRlcm5hbCBETUEgaGFyZHdhcmUgZW5naW5lcywgd2hpY2gKZ2VuZXJhdGUgcmVhZCBhbmQg d3JpdGUgcmVxdWVzdHMuIEJvdGggcURNQSBzb3VyY2UgZGF0YSBhbmQgZGVzdGluYXRpb24gZGF0 YSBjYW4KYmUgZWl0aGVyIGNvbnRpZ3VvdXMgb3Igbm9uLWNvbnRpZ3VvdXMgdXNpbmcgb25lIG9y IG1vcmUgc2NhdHRlci9nYXRoZXIgdGFibGVzLgpUaGUgcURNQSBzdXBwb3J0cyBnbG9iYWwgYmFu ZHdpZHRoIGZsb3cgY29udHJvbCB3aGVyZSBhbGwgRE1BIHRyYW5zYWN0aW9ucyBhcmUKc3RhbGxl ZCBpZiB0aGUgYmFuZHdpZHRoIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkLiBBbHNvIHN1cHBv cnRlZCBhcmUKdHJhbnNhY3Rpb24gYmFzZWQgcmVhZCB0aHJvdHRsaW5nLgoKQWRkIE5YUCBkcHBh MiBxRE1BIHRvIHN1cHBvcnQgc29tZSBvZiBMYXllcnNjYXBlIFNvQ3MuCnN1Y2ggYXM6IExTMTA4 OEEsIExTMjA4eEEsIExYMiwgZXRjLgoKU2lnbmVkLW9mZi1ieTogUGVuZyBNYSA8cGVuZy5tYUBu eHAuY29tPgotLS0KY2hhbmdlIGZvciB2MjoKCS0gc3BsaXQgdGhlIHYxIHBhdGNoIHRvIHR3byBw YXRjaHMKCS0gYWRkIGRldGFpbCBjb21tZW50cwoKIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9kbWEvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9LY29uZmlnICAgICAg fCAgICA4ICsKIGRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL01ha2VmaWxlICAgICB8ICAgIDMg KwogZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jIHwgIDc4MSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9kcGFh Mi1xZG1hLmggfCAgMTUyICsrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA5NDcgaW5zZXJ0aW9ucygr KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBh YTItcWRtYS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsLWRwYWEy LXFkbWEvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBhYTIt cWRtYS9kcGFhMi1xZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wtZHBh YTItcWRtYS9kcGFhMi1xZG1hLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIv ZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCAwYjFkZmI1Li5kNTkwNDEyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTY3MSw2ICs2 NzEsOCBAQCBzb3VyY2UgImRyaXZlcnMvZG1hL3NoL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVy cy9kbWEvdGkvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9L Y29uZmlnIgorCiAjIGNsaWVudHMKIGNvbW1lbnQgIkRNQSBDbGllbnRzIgogCWRlcGVuZHMgb24g RE1BX0VOR0lORQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2Rt YS9NYWtlZmlsZQppbmRleCA2MTI2ZTFjLi4yNDk5ZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rt YS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtNzUsNiArNzUsNyBAQCBv YmotJChDT05GSUdfVU5JUEhJRVJfTURNQUMpICs9IHVuaXBoaWVyLW1kbWFjLm8KIG9iai0kKENP TkZJR19YR0VORV9ETUEpICs9IHhnZW5lLWRtYS5vCiBvYmotJChDT05GSUdfWlhfRE1BKSArPSB6 eF9kbWEubwogb2JqLSQoQ09ORklHX1NUX0ZETUEpICs9IHN0X2ZkbWEubworb2JqLSQoQ09ORklH X0ZTTF9EUEFBMl9RRE1BKSArPSBmc2wtZHBhYTItcWRtYS8KIAogb2JqLXkgKz0gbWVkaWF0ZWsv CiBvYmoteSArPSBxY29tLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEv S2NvbmZpZyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25maWcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1OTFmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZG1hL2ZzbC1kcGFhMi1xZG1hL0tjb25maWcKQEAgLTAsMCArMSw4IEBACittZW51Y29uZmln IEZTTF9EUEFBMl9RRE1BCisJdHJpc3RhdGUgIk5YUCBEUEFBMiBRRE1BIgorCWRlcGVuZHMgb24g RlNMX01DX0JVUyAmJiBGU0xfTUNfRFBJTworCXNlbGVjdCBETUFfRU5HSU5FCisJc2VsZWN0IERN QV9WSVJUVUFMX0NIQU5ORUxTCisJaGVscAorCSAgTlhQIERhdGEgUGF0aCBBY2NlbGVyYXRpb24g QXJjaGl0ZWN0dXJlIDIgUURNQSBkcml2ZXIsCisJICB1c2luZyB0aGUgTlhQIE1DIGJ1cyBkcml2 ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZHBhYTItcWRtYS9NYWtlZmlsZSBiL2Ry aXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmMxZDAyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2wt ZHBhYTItcWRtYS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKyMgTWFrZWZpbGUgZm9yIHRoZSBOWFAgRFBBQTIgcURNQSBjb250cm9s bGVycworb2JqLSQoQ09ORklHX0ZTTF9EUEFBMl9RRE1BKSArPSBkcGFhMi1xZG1hLm8gZHBkbWFp Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYyBi L2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44MGU4NTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEvZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5jCkBAIC0wLDAgKzEsNzgxIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IDIwMTQtMjAxOCBOWFAK KworLyoKKyAqIEF1dGhvcjogQ2hhbmdtaW5nIEh1YW5nIDxqZXJyeS5odWFuZ0BueHAuY29tPgor ICoKKyAqIERyaXZlciBmb3IgdGhlIE5YUCBRRE1BIGVuZ2luZSB3aXRoIFFNYW4gbW9kZS4KKyAq IENoYW5uZWwgdmlydHVhbGl6YXRpb24gaXMgc3VwcG9ydGVkIHRocm91Z2ggZW5xdWV1aW5nIG9m IERNQSBqb2JzIHRvLAorICogb3IgZGVxdWV1aW5nIERNQSBqb2JzIGZyb20gZGlmZmVyZW50IHdv cmsgcXVldWVzIHdpdGggUU1hbiBwb3J0YWwuCisgKiBUaGlzIG1vZHVsZSBjYW4gYmUgZm91bmQg b24gTlhQIExTMiBTb0NzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgorI2luY2x1ZGUg PGxpbnV4L3N5c19zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2wvbWMuaD4KKyNpbmNsdWRlIDxz b2MvZnNsL2RwYWEyLWlvLmg+CisKKyNpbmNsdWRlICIuLi92aXJ0LWRtYS5oIgorI2luY2x1ZGUg ImRwZG1haV9jbWQuaCIKKyNpbmNsdWRlICJkcGRtYWkuaCIKKyNpbmNsdWRlICJkcGFhMi1xZG1h LmgiCisKK3N0YXRpYyBib29sIHNtbXVfZGlzYWJsZSA9IHRydWU7CisKK3N0YXRpYyBzdHJ1Y3Qg ZHBhYTJfcWRtYV9jaGFuICp0b19kcGFhMl9xZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjaGFu KQoreworCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGRwYWEyX3FkbWFfY2hhbiwg dmNoYW4uY2hhbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wICp0b19mc2xf cWRtYV9jb21wKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKHZkLCBzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wLCB2ZGVzYyk7Cit9CisKK3N0YXRpYyBpbnQg ZHBhYTJfcWRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7 CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqZHBhYTJfY2hhbiA9IHRvX2RwYWEyX3FkbWFfY2hh bihjaGFuKTsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9lbmdpbmUgKmRwYWEyX3FkbWEgPSBkcGFhMl9j aGFuLT5xZG1hOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkcGFhMl9xZG1hLT5wcml2LT5kcGRt YWlfZGV2LT5kZXY7CisKKwlkcGFhMl9jaGFuLT5mZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJm ZF9wb29sIiwgZGV2LAorCQkJCQkgICAgICBGRF9QT09MX1NJWkUsIDMyLCAwKTsKKwlpZiAoIWRw YWEyX2NoYW4tPmZkX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIGRwYWEyX3Fk bWEtPmRlc2NfYWxsb2NhdGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIGRwYWEyX3FkbWFfZnJlZV9j aGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGRwYWEyX3Fk bWFfY2hhbiAqZHBhYTJfY2hhbiA9IHRvX2RwYWEyX3FkbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3Qg ZHBhYTJfcWRtYV9lbmdpbmUgKmRwYWEyX3FkbWEgPSBkcGFhMl9jaGFuLT5xZG1hOworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CisKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZHBhYTJfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCXZjaGFuX2dldF9hbGxfZGVzY3Jp cHRvcnMoJmRwYWEyX2NoYW4tPnZjaGFuLCAmaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZHBhYTJfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJdmNoYW5fZG1hX2Rlc2NfZnJl ZV9saXN0KCZkcGFhMl9jaGFuLT52Y2hhbiwgJmhlYWQpOworCisJZHBhYTJfZHBkbWFpX2ZyZWVf Y29tcChkcGFhMl9jaGFuLCAmZHBhYTJfY2hhbi0+Y29tcF91c2VkKTsKKwlkcGFhMl9kcGRtYWlf ZnJlZV9jb21wKGRwYWEyX2NoYW4sICZkcGFhMl9jaGFuLT5jb21wX2ZyZWUpOworCisJZG1hX3Bv b2xfZGVzdHJveShkcGFhMl9jaGFuLT5mZF9wb29sKTsKKwlkcGFhMl9xZG1hLT5kZXNjX2FsbG9j YXRlZC0tOworfQorCisvKgorICogUmVxdWVzdCBhIGNvbW1hbmQgZGVzY3JpcHRvciBmb3IgZW5x dWV1ZS4KKyAqLworc3RhdGljIHN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKgorZHBhYTJfcWRtYV9y ZXF1ZXN0X2Rlc2Moc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqZHBhYTJfY2hhbikKK3sKKwlzdHJ1 Y3QgZHBhYTJfcWRtYV9jb21wICpjb21wX3RlbXAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHBhYTJfY2hhbi0+cXVldWVfbG9jaywgZmxhZ3Mp OworCWlmIChsaXN0X2VtcHR5KCZkcGFhMl9jaGFuLT5jb21wX2ZyZWUpKSB7CisJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRwYWEyX2NoYW4tPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJY29tcF90 ZW1wID0ga3phbGxvYyhzaXplb2YoKmNvbXBfdGVtcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNv bXBfdGVtcCkKKwkJCWdvdG8gZXJyOworCQljb21wX3RlbXAtPmZkX3ZpcnRfYWRkciA9CisJCQlk bWFfcG9vbF9hbGxvYyhkcGFhMl9jaGFuLT5mZF9wb29sLCBHRlBfTk9XQUlULAorCQkJCSAgICAg ICAmY29tcF90ZW1wLT5mZF9idXNfYWRkcik7CisJCWlmICghY29tcF90ZW1wLT5mZF92aXJ0X2Fk ZHIpCisJCQlnb3RvIGVycjsKKworCQljb21wX3RlbXAtPmZsX3ZpcnRfYWRkciA9CisJCQkodm9p ZCAqKSgoc3RydWN0IGRwYWEyX2ZkICopCisJCQkJY29tcF90ZW1wLT5mZF92aXJ0X2FkZHIgKyAx KTsKKwkJY29tcF90ZW1wLT5mbF9idXNfYWRkciA9IGNvbXBfdGVtcC0+ZmRfYnVzX2FkZHIgKwor CQkJCQlzaXplb2Yoc3RydWN0IGRwYWEyX2ZkKTsKKwkJY29tcF90ZW1wLT5kZXNjX3ZpcnRfYWRk ciA9CisJCQkodm9pZCAqKSgoc3RydWN0IGRwYWEyX2ZsX2VudHJ5ICopCisJCQkJY29tcF90ZW1w LT5mbF92aXJ0X2FkZHIgKyAzKTsKKwkJY29tcF90ZW1wLT5kZXNjX2J1c19hZGRyID0gY29tcF90 ZW1wLT5mbF9idXNfYWRkciArCisJCQkJc2l6ZW9mKHN0cnVjdCBkcGFhMl9mbF9lbnRyeSkgKiAz OworCisJCWNvbXBfdGVtcC0+cWNoYW4gPSBkcGFhMl9jaGFuOworCQlyZXR1cm4gY29tcF90ZW1w OworCX0KKwljb21wX3RlbXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkcGFhMl9jaGFuLT5jb21wX2Zy ZWUsCisJCQkJICAgICBzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wLCBsaXN0KTsKKwlsaXN0X2RlbCgm Y29tcF90ZW1wLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcGFhMl9jaGFuLT5x dWV1ZV9sb2NrLCBmbGFncyk7CisKKwljb21wX3RlbXAtPnFjaGFuID0gZHBhYTJfY2hhbjsKK2Vy cjoKKwlyZXR1cm4gY29tcF90ZW1wOworfQorCitzdGF0aWMgdm9pZAorZHBhYTJfcWRtYV9wb3B1 bGF0ZV9mZCh1MzIgZm9ybWF0LCBzdHJ1Y3QgZHBhYTJfcWRtYV9jb21wICpkcGFhMl9jb21wKQor eworCXN0cnVjdCBkcGFhMl9mZCAqZmQ7CisKKwlmZCA9IChzdHJ1Y3QgZHBhYTJfZmQgKilkcGFh Ml9jb21wLT5mZF92aXJ0X2FkZHI7CisJbWVtc2V0KGZkLCAwLCBzaXplb2Yoc3RydWN0IGRwYWEy X2ZkKSk7CisKKwkvKiBmZCBwb3B1bGF0ZWQgKi8KKwlkcGFhMl9mZF9zZXRfYWRkcihmZCwgZHBh YTJfY29tcC0+ZmxfYnVzX2FkZHIpOworCS8qIEJ5cGFzcyBtZW1vcnkgdHJhbnNsYXRpb24sIEZy YW1lIGxpc3QgZm9ybWF0LCBzaG9ydCBsZW5ndGggZGlzYWJsZSAqLworCS8qIHdlIG5lZWQgdG8g ZGlzYWJsZSBCTVQgaWYgZnNsLW1jIHVzZSBpb3ZhIGFkZHIgKi8KKwlpZiAoc21tdV9kaXNhYmxl KQorCQlkcGFhMl9mZF9zZXRfYnBpZChmZCwgUU1BTl9GRF9CTVRfRU5BQkxFKTsKKwlkcGFhMl9m ZF9zZXRfZm9ybWF0KGZkLCBRTUFOX0ZEX0ZNVF9FTkFCTEUgfCBRTUFOX0ZEX1NMX0RJU0FCTEUp OworCisJZHBhYTJfZmRfc2V0X2ZyYyhmZCwgZm9ybWF0IHwgUURNQV9TRVJfQ1RYKTsKK30KKwor LyogZmlyc3QgZnJhbWUgbGlzdCBmb3IgZGVzY3JpcHRvciBidWZmZXIgKi8KK3N0YXRpYyB2b2lk CitkcGFhMl9xZG1hX3BvcHVsYXRlX2ZpcnN0X2ZyYW1lbChzdHJ1Y3QgZHBhYTJfZmxfZW50cnkg KmZfbGlzdCwKKwkJCQkgc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqZHBhYTJfY29tcCwKKwkJCQkg Ym9vbCB3cnRfY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9zZF9kICpzZGQ7CisKKwlz ZGQgPSAoc3RydWN0IGRwYWEyX3FkbWFfc2RfZCAqKWRwYWEyX2NvbXAtPmRlc2NfdmlydF9hZGRy OworCW1lbXNldChzZGQsIDAsIDIgKiAoc2l6ZW9mKCpzZGQpKSk7CisKKwkvKiBzb3VyY2UgZGVz Y3JpcHRvciBDTUQgKi8KKwlzZGQtPmNtZCA9IGNwdV90b19sZTMyKFFETUFfU0RfQ01EX1JEVFRZ UEVfQ09IRVJFTlQpOworCXNkZCsrOworCisJLyogZGVzdCBkZXNjcmlwdG9yIENNRCAqLworCWlm ICh3cnRfY2hhbmdlZCkKKwkJc2RkLT5jbWQgPSBjcHVfdG9fbGUzMihMWDIxNjBfUURNQV9ERF9D TURfV1JUVFlQRV9DT0hFUkVOVCk7CisJZWxzZQorCQlzZGQtPmNtZCA9IGNwdV90b19sZTMyKFFE TUFfRERfQ01EX1dSVFRZUEVfQ09IRVJFTlQpOworCisJbWVtc2V0KGZfbGlzdCwgMCwgc2l6ZW9m KHN0cnVjdCBkcGFhMl9mbF9lbnRyeSkpOworCisJLyogZmlyc3QgZnJhbWUgbGlzdCB0byBzb3Vy Y2UgZGVzY3JpcHRvciAqLworCWRwYWEyX2ZsX3NldF9hZGRyKGZfbGlzdCwgZHBhYTJfY29tcC0+ ZGVzY19idXNfYWRkcik7CisJZHBhYTJfZmxfc2V0X2xlbihmX2xpc3QsIDB4MjApOworCWRwYWEy X2ZsX3NldF9mb3JtYXQoZl9saXN0LCBRRE1BX0ZMX0ZNVF9TQkYgfCBRRE1BX0ZMX1NMX0xPTkcp OworCisJLyogYnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiAqLworCWlmIChzbW11X2Rpc2FibGUp CisJCWZfbGlzdC0+YnBpZCA9IGNwdV90b19sZTE2KFFETUFfRkxfQk1UX0VOQUJMRSk7Cit9CisK Ky8qIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZnJhbWUgbGlzdCAqLworc3RhdGljIHZvaWQKK2Rw YWEyX3FkbWFfcG9wdWxhdGVfZnJhbWVzKHN0cnVjdCBkcGFhMl9mbF9lbnRyeSAqZl9saXN0LAor CQkJICAgZG1hX2FkZHJfdCBkc3QsIGRtYV9hZGRyX3Qgc3JjLAorCQkJICAgc2l6ZV90IGxlbiwg dWludDhfdCBmbXQpCit7CisJLyogc291cmNlIGZyYW1lIGxpc3QgdG8gc291cmNlIGJ1ZmZlciAq LworCW1lbXNldChmX2xpc3QsIDAsIHNpemVvZihzdHJ1Y3QgZHBhYTJfZmxfZW50cnkpKTsKKwor CWRwYWEyX2ZsX3NldF9hZGRyKGZfbGlzdCwgc3JjKTsKKwlkcGFhMl9mbF9zZXRfbGVuKGZfbGlz dCwgbGVuKTsKKworCS8qIHNpbmdsZSBidWZmZXIgZnJhbWUgb3Igc2NhdHRlciBnYXRoZXIgZnJh bWUgKi8KKwlkcGFhMl9mbF9zZXRfZm9ybWF0KGZfbGlzdCwgKGZtdCB8IFFETUFfRkxfU0xfTE9O RykpOworCisJLyogYnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiAqLworCWlmIChzbW11X2Rpc2Fi bGUpCisJCWZfbGlzdC0+YnBpZCA9IGNwdV90b19sZTE2KFFETUFfRkxfQk1UX0VOQUJMRSk7CisK KwlmX2xpc3QrKzsKKworCS8qIGRlc3RpbmF0aW9uIGZyYW1lIGxpc3QgdG8gZGVzdGluYXRpb24g YnVmZmVyICovCisJbWVtc2V0KGZfbGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBkcGFhMl9mbF9lbnRy eSkpOworCisJZHBhYTJfZmxfc2V0X2FkZHIoZl9saXN0LCBkc3QpOworCWRwYWEyX2ZsX3NldF9s ZW4oZl9saXN0LCBsZW4pOworCWRwYWEyX2ZsX3NldF9mb3JtYXQoZl9saXN0LCAoZm10IHwgUURN QV9GTF9TTF9MT05HKSk7CisJLyogc2luZ2xlIGJ1ZmZlciBmcmFtZSBvciBzY2F0dGVyIGdhdGhl ciBmcmFtZSAqLworCWRwYWEyX2ZsX3NldF9maW5hbChmX2xpc3QsIFFETUFfRkxfRik7CisJLyog YnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiAqLworCWlmIChzbW11X2Rpc2FibGUpCisJCWZfbGlz dC0+YnBpZCA9IGNwdV90b19sZTE2KFFETUFfRkxfQk1UX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IKKypkcGFhMl9xZG1hX3ByZXBfbWVtY3B5KHN0 cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkc3QsCisJCQlkbWFfYWRkcl90IHNyYywg c2l6ZV90IGxlbiwgdWxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqZHBh YTJfY2hhbiA9IHRvX2RwYWEyX3FkbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9l bmdpbmUgKmRwYWEyX3FkbWE7CisJc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqZHBhYTJfY29tcDsK KwlzdHJ1Y3QgZHBhYTJfZmxfZW50cnkgKmZfbGlzdDsKKwlib29sIHdydF9jaGFuZ2VkOworCXUz MiBmb3JtYXQ7CisKKwlkcGFhMl9xZG1hID0gZHBhYTJfY2hhbi0+cWRtYTsKKwlkcGFhMl9jb21w ID0gZHBhYTJfcWRtYV9yZXF1ZXN0X2Rlc2MoZHBhYTJfY2hhbik7CisJd3J0X2NoYW5nZWQgPSAo Ym9vbClkcGFhMl9xZG1hLT5xZG1hX3dydHlwZV9maXh1cDsKKworI2lmZGVmIExPTkdfRk9STUFU CisJZm9ybWF0ID0gUURNQV9GRF9MT05HX0ZPUk1BVDsKKyNlbHNlCisJZm9ybWF0ID0gUURNQV9G RF9TSE9SVF9GT1JNQVQ7CisjZW5kaWYKKwkvKiBwb3B1bGF0ZSBGcmFtZSBkZXNjcmlwdG9yICov CisJZHBhYTJfcWRtYV9wb3B1bGF0ZV9mZChmb3JtYXQsIGRwYWEyX2NvbXApOworCisJZl9saXN0 ID0gKHN0cnVjdCBkcGFhMl9mbF9lbnRyeSAqKWRwYWEyX2NvbXAtPmZsX3ZpcnRfYWRkcjsKKwor I2lmZGVmIExPTkdfRk9STUFUCisJLyogZmlyc3QgZnJhbWUgbGlzdCBmb3IgZGVzY3JpcHRvciBi dWZmZXIgKGxvZ24gZm9ybWF0KSAqLworCWRwYWEyX3FkbWFfcG9wdWxhdGVfZmlyc3RfZnJhbWVs KGZfbGlzdCwgZHBhYTJfY29tcCwgd3J0X2NoYW5nZWQpOworCisJZl9saXN0Kys7CisjZW5kaWYK KworCWRwYWEyX3FkbWFfcG9wdWxhdGVfZnJhbWVzKGZfbGlzdCwgZHN0LCBzcmMsIGxlbiwgUURN QV9GTF9GTVRfU0JGKTsKKworCXJldHVybiB2Y2hhbl90eF9wcmVwKCZkcGFhMl9jaGFuLT52Y2hh biwgJmRwYWEyX2NvbXAtPnZkZXNjLCBmbGFncyk7Cit9CisKK3N0YXRpYyBlbnVtCitkbWFfc3Rh dHVzIGRwYWEyX3FkbWFfdHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCQlkbWFf Y29va2llX3QgY29va2llLAorCQkJCXN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpCit7CisJ cmV0dXJuIGRtYV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGRwYWEyX3FkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4p Cit7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqZHBhYTJfY2hhbiA9IHRvX2RwYWEyX3FkbWFf Y2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9lbmdpbmUgKmRwYWEyX3FkbWEgPSBkcGFh Ml9jaGFuLT5xZG1hOworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXYgPSBkcGFhMl9xZG1h LT5wcml2OworCXN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKmRwYWEyX2NvbXA7CisJc3RydWN0IHZp cnRfZG1hX2Rlc2MgKnZkZXNjOworCXN0cnVjdCBkcGFhMl9mZCAqZmQ7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRwYWEyX2NoYW4tPnF1 ZXVlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmRwYWEyX2NoYW4tPnZjaGFuLmxvY2spOwor CWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5nKCZkcGFhMl9jaGFuLT52Y2hhbikpIHsKKwkJdmRlc2Mg PSB2Y2hhbl9uZXh0X2Rlc2MoJmRwYWEyX2NoYW4tPnZjaGFuKTsKKwkJaWYgKCF2ZGVzYykKKwkJ CWdvdG8gZXJyX2VucXVldWU7CisJCWRwYWEyX2NvbXAgPSB0b19mc2xfcWRtYV9jb21wKHZkZXNj KTsKKworCQlmZCA9IChzdHJ1Y3QgZHBhYTJfZmQgKilkcGFhMl9jb21wLT5mZF92aXJ0X2FkZHI7 CisKKwkJbGlzdF9kZWwoJnZkZXNjLT5ub2RlKTsKKwkJbGlzdF9hZGRfdGFpbCgmZHBhYTJfY29t cC0+bGlzdCwgJmRwYWEyX2NoYW4tPmNvbXBfdXNlZCk7CisKKwkJLyogVE9CTzogcHJpb3JpdHkg aGFyZC1jb2RlZCB0byB6ZXJvICovCisJCWVyciA9IGRwYWEyX2lvX3NlcnZpY2VfZW5xdWV1ZV9m cShOVUxMLAorCQkJCXByaXYtPnR4X3F1ZXVlX2F0dHJbMF0uZnFpZCwgZmQpOworCQlpZiAoZXJy KSB7CisJCQlsaXN0X2RlbCgmZHBhYTJfY29tcC0+bGlzdCk7CisJCQlsaXN0X2FkZF90YWlsKCZk cGFhMl9jb21wLT5saXN0LAorCQkJCSAgICAgICZkcGFhMl9jaGFuLT5jb21wX2ZyZWUpOworCQl9 CisJfQorZXJyX2VucXVldWU6CisJc3Bpbl91bmxvY2soJmRwYWEyX2NoYW4tPnZjaGFuLmxvY2sp OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwYWEyX2NoYW4tPnF1ZXVlX2xvY2ssIGZsYWdz KTsKK30KKworc3RhdGljIGludCBfX2NvbGQgZHBhYTJfcWRtYV9zZXR1cChzdHJ1Y3QgZnNsX21j X2RldmljZSAqbHNfZGV2KQoreworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8gKnBw cml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZsc19kZXYtPmRldjsKKwlzdHJ1Y3QgZHBhYTJf cWRtYV9wcml2ICpwcml2OworCXU4IHByaW9fZGVmID0gRFBETUFJX1BSSU9fTlVNOworCWludCBl cnI7CisJaW50IGk7CisKKwlwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlwcml2LT5k ZXYgPSBkZXY7CisJcHJpdi0+ZHBxZG1hX2lkID0gbHNfZGV2LT5vYmpfZGVzYy5pZDsKKworCS8q R2V0IHRoZSBoYW5kbGUgZm9yIHRoZSBEUERNQUkgdGhpcyBpbnRlcmZhY2UgaXMgYXNzb2NpYXRl IHdpdGggKi8KKwllcnIgPSBkcGRtYWlfb3Blbihwcml2LT5tY19pbywgMCwgcHJpdi0+ZHBxZG1h X2lkLCAmbHNfZGV2LT5tY19oYW5kbGUpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJk cGRtYWlfb3BlbigpIGZhaWxlZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCWRldl9pbmZvKGRl diwgIk9wZW5lZCBkcGRtYWkgb2JqZWN0IHN1Y2Nlc3NmdWxseVxuIik7CisKKwllcnIgPSBkcGRt YWlfZ2V0X2F0dHJpYnV0ZXMocHJpdi0+bWNfaW8sIDAsIGxzX2Rldi0+bWNfaGFuZGxlLAorCQkJ CSAgICAmcHJpdi0+ZHBkbWFpX2F0dHIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJk cGRtYWlfZ2V0X2F0dHJpYnV0ZXMoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwor CWlmIChwcml2LT5kcGRtYWlfYXR0ci52ZXJzaW9uLm1ham9yID4gRFBETUFJX1ZFUl9NQUpPUikg eworCQlkZXZfZXJyKGRldiwgIkRQRE1BSSBtYWpvciB2ZXJzaW9uIG1pc21hdGNoXG4iCisJCQkg ICAgICJGb3VuZCAldS4ldSwgc3VwcG9ydGVkIHZlcnNpb24gaXMgJXUuJXVcbiIsCisJCQkJcHJp di0+ZHBkbWFpX2F0dHIudmVyc2lvbi5tYWpvciwKKwkJCQlwcml2LT5kcGRtYWlfYXR0ci52ZXJz aW9uLm1pbm9yLAorCQkJCURQRE1BSV9WRVJfTUFKT1IsIERQRE1BSV9WRVJfTUlOT1IpOworCX0K KworCWlmIChwcml2LT5kcGRtYWlfYXR0ci52ZXJzaW9uLm1pbm9yID4gRFBETUFJX1ZFUl9NSU5P UikgeworCQlkZXZfZXJyKGRldiwgIkRQRE1BSSBtaW5vciB2ZXJzaW9uIG1pc21hdGNoXG4iCisJ CQkgICAgICJGb3VuZCAldS4ldSwgc3VwcG9ydGVkIHZlcnNpb24gaXMgJXUuJXVcbiIsCisJCQkJ cHJpdi0+ZHBkbWFpX2F0dHIudmVyc2lvbi5tYWpvciwKKwkJCQlwcml2LT5kcGRtYWlfYXR0ci52 ZXJzaW9uLm1pbm9yLAorCQkJCURQRE1BSV9WRVJfTUFKT1IsIERQRE1BSV9WRVJfTUlOT1IpOwor CX0KKworCXByaXYtPm51bV9wYWlycyA9IG1pbihwcml2LT5kcGRtYWlfYXR0ci5udW1fb2ZfcHJp b3JpdGllcywgcHJpb19kZWYpOworCXBwcml2ID0ga2NhbGxvYyhwcml2LT5udW1fcGFpcnMsIHNp emVvZigqcHByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBwcml2KSB7CisJCWRldl9lcnIoZGV2 LCAia3phbGxvYyBmb3IgcHByaXYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwcml2 LT5wcHJpdiA9IHBwcml2OworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9wYWlyczsgaSsr KSB7CisJCWVyciA9IGRwZG1haV9nZXRfcnhfcXVldWUocHJpdi0+bWNfaW8sIDAsIGxzX2Rldi0+ bWNfaGFuZGxlLAorCQkJCQkgIGksICZwcml2LT5yeF9xdWV1ZV9hdHRyW2ldKTsKKwkJaWYgKGVy cikgeworCQkJZGV2X2VycihkZXYsICJkcGRtYWlfZ2V0X3J4X3F1ZXVlKCkgZmFpbGVkXG4iKTsK KwkJCXJldHVybiBlcnI7CisJCX0KKwkJcHByaXYtPnJzcF9mcWlkID0gcHJpdi0+cnhfcXVldWVf YXR0cltpXS5mcWlkOworCisJCWVyciA9IGRwZG1haV9nZXRfdHhfcXVldWUocHJpdi0+bWNfaW8s IDAsIGxzX2Rldi0+bWNfaGFuZGxlLAorCQkJCQkgIGksICZwcml2LT50eF9xdWV1ZV9hdHRyW2ld KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJkcGRtYWlfZ2V0X3R4X3F1ZXVlKCkg ZmFpbGVkXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJcHByaXYtPnJlcV9mcWlkID0gcHJp di0+dHhfcXVldWVfYXR0cltpXS5mcWlkOworCQlwcHJpdi0+cHJpbyA9IGk7CisJCXBwcml2LT5w cml2ID0gcHJpdjsKKwkJcHByaXYrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZHBhYTJfcWRtYV9mcWRhbl9jYihzdHJ1Y3QgZHBhYTJfaW9fbm90aWZpY2F0aW9uX2N0eCAq Y3R4KQoreworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8gKnBwcml2ID0gY29udGFp bmVyX29mKGN0eCwKKwkJCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8sIG5jdHgpOwor CXN0cnVjdCBkcGFhMl9xZG1hX2NvbXAgKmRwYWEyX2NvbXAsICpfY29tcF90bXA7CisJc3RydWN0 IGRwYWEyX3FkbWFfcHJpdiAqcHJpdiA9IHBwcml2LT5wcml2OworCXUzMiBuX2NoYW5zID0gcHJp di0+ZHBhYTJfcWRtYS0+bl9jaGFuczsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFuICpxY2hhbjsK Kwljb25zdCBzdHJ1Y3QgZHBhYTJfZmQgKmZkX2VxOworCWNvbnN0IHN0cnVjdCBkcGFhMl9mZCAq ZmQ7CisJc3RydWN0IGRwYWEyX2RxICpkcTsKKwlpbnQgaXNfbGFzdCA9IDA7CisJaW50IGZvdW5k OworCXU4IHN0YXR1czsKKwlpbnQgZXJyOworCWludCBpOworCisJZG8geworCQllcnIgPSBkcGFh Ml9pb19zZXJ2aWNlX3B1bGxfZnEoTlVMTCwgcHByaXYtPnJzcF9mcWlkLAorCQkJCQkgICAgICAg cHByaXYtPnN0b3JlKTsKKwl9IHdoaWxlIChlcnIpOworCisJd2hpbGUgKCFpc19sYXN0KSB7CisJ CWRvIHsKKwkJCWRxID0gZHBhYTJfaW9fc3RvcmVfbmV4dChwcHJpdi0+c3RvcmUsICZpc19sYXN0 KTsKKwkJfSB3aGlsZSAoIWlzX2xhc3QgJiYgIWRxKTsKKwkJaWYgKCFkcSkgeworCQkJZGV2X2Vy cihwcml2LT5kZXYsICJGUUlEIHJldHVybmVkIG5vIHZhbGlkIGZyYW1lcyFcbiIpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBvYnRhaW4gRkQgYW5kIHByb2Nlc3MgdGhlIGVycm9yICovCisJ CWZkID0gZHBhYTJfZHFfZmQoZHEpOworCisJCXN0YXR1cyA9IGRwYWEyX2ZkX2dldF9jdHJsKGZk KSAmIDB4ZmY7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKHByaXYtPmRldiwgIkZEIGVycm9y IG9jY3VycmVkXG4iKTsKKwkJZm91bmQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuczsg aSsrKSB7CisJCQlxY2hhbiA9ICZwcml2LT5kcGFhMl9xZG1hLT5jaGFuc1tpXTsKKwkJCXNwaW5f bG9jaygmcWNoYW4tPnF1ZXVlX2xvY2spOworCQkJaWYgKGxpc3RfZW1wdHkoJnFjaGFuLT5jb21w X3VzZWQpKSB7CisJCQkJc3Bpbl91bmxvY2soJnFjaGFuLT5xdWV1ZV9sb2NrKTsKKwkJCQljb250 aW51ZTsKKwkJCX0KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcGFhMl9jb21wLCBfY29t cF90bXAsCisJCQkJCQkgJnFjaGFuLT5jb21wX3VzZWQsIGxpc3QpIHsKKwkJCQlmZF9lcSA9IChz dHJ1Y3QgZHBhYTJfZmQgKikKKwkJCQkJZHBhYTJfY29tcC0+ZmRfdmlydF9hZGRyOworCisJCQkJ aWYgKGxlNjRfdG9fY3B1KGZkX2VxLT5zaW1wbGUuYWRkcikgPT0KKwkJCQkgICAgbGU2NF90b19j cHUoZmQtPnNpbXBsZS5hZGRyKSkgeworCQkJCQlzcGluX2xvY2soJnFjaGFuLT52Y2hhbi5sb2Nr KTsKKwkJCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCYKKwkJCQkJCQlkcGFhMl9jb21wLT52ZGVz Yyk7CisJCQkJCXNwaW5fdW5sb2NrKCZxY2hhbi0+dmNoYW4ubG9jayk7CisJCQkJCWZvdW5kID0g MTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJc3Bpbl91bmxvY2soJnFjaGFuLT5xdWV1 ZV9sb2NrKTsKKwkJCWlmIChmb3VuZCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWRwYWEyX2lv X3NlcnZpY2VfcmVhcm0oTlVMTCwgY3R4KTsKK30KKworc3RhdGljIGludCBfX2NvbGQgZHBhYTJf cWRtYV9kcGlvX3NldHVwKHN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXYpCit7CisJc3RydWN0 IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJpbyAqcHByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0g cHJpdi0+ZGV2OworCWludCBlcnIsIGksIG51bTsKKworCW51bSA9IHByaXYtPm51bV9wYWlyczsK KwlwcHJpdiA9IHByaXYtPnBwcml2OworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlw cHJpdi0+bmN0eC5pc19jZGFuID0gMDsKKwkJcHByaXYtPm5jdHguZGVzaXJlZF9jcHUgPSAxOwor CQlwcHJpdi0+bmN0eC5pZCA9IHBwcml2LT5yc3BfZnFpZDsKKwkJcHByaXYtPm5jdHguY2IgPSBk cGFhMl9xZG1hX2ZxZGFuX2NiOworCQllcnIgPSBkcGFhMl9pb19zZXJ2aWNlX3JlZ2lzdGVyKE5V TEwsICZwcHJpdi0+bmN0eCk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoZGV2LCAiTm90aWZp Y2F0aW9uIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9zZXJ2aWNlOworCQl9CisK KwkJcHByaXYtPnN0b3JlID0KKwkJCWRwYWEyX2lvX3N0b3JlX2NyZWF0ZShEUEFBMl9RRE1BX1NU T1JFX1NJWkUsIGRldik7CisJCWlmICghcHByaXYtPnN0b3JlKSB7CisJCQlkZXZfZXJyKGRldiwg ImRwYWEyX2lvX3N0b3JlX2NyZWF0ZSgpIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9zdG9yZTsK KwkJfQorCisJCXBwcml2Kys7CisJfQorCXJldHVybiAwOworCitlcnJfc3RvcmU6CisJZHBhYTJf aW9fc2VydmljZV9kZXJlZ2lzdGVyKE5VTEwsICZwcHJpdi0+bmN0eCk7CitlcnJfc2VydmljZToK KwlwcHJpdi0tOworCXdoaWxlIChwcHJpdiA+PSBwcml2LT5wcHJpdikgeworCQlkcGFhMl9pb19z ZXJ2aWNlX2RlcmVnaXN0ZXIoTlVMTCwgJnBwcml2LT5uY3R4KTsKKwkJZHBhYTJfaW9fc3RvcmVf ZGVzdHJveShwcHJpdi0+c3RvcmUpOworCQlwcHJpdi0tOworCX0KKwlyZXR1cm4gLTE7Cit9CisK K3N0YXRpYyB2b2lkIGRwYWEyX2RwbWFpX3N0b3JlX2ZyZWUoc3RydWN0IGRwYWEyX3FkbWFfcHJp diAqcHJpdikKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2X3Blcl9wcmlvICpwcHJpdiA9IHBy aXYtPnBwcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9wYWlyczsg aSsrKSB7CisJCWRwYWEyX2lvX3N0b3JlX2Rlc3Ryb3kocHByaXYtPnN0b3JlKTsKKwkJcHByaXYr KzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwYWEyX2RwZG1haV9kcGlvX2ZyZWUoc3RydWN0IGRw YWEyX3FkbWFfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2X3Blcl9wcmlv ICpwcHJpdiA9IHByaXYtPnBwcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYt Pm51bV9wYWlyczsgaSsrKSB7CisJCWRwYWEyX2lvX3NlcnZpY2VfZGVyZWdpc3RlcihOVUxMLCAm cHByaXYtPm5jdHgpOworCQlwcHJpdisrOworCX0KK30KKworc3RhdGljIGludCBfX2NvbGQgZHBh YTJfZHBkbWFpX2JpbmQoc3RydWN0IGRwYWEyX3FkbWFfcHJpdiAqcHJpdikKK3sKKwlpbnQgZXJy OworCWludCBpLCBudW07CisJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVj dCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8gKnBwcml2OworCXN0cnVjdCBkcGRtYWlfcnhfcXVl dWVfY2ZnIHJ4X3F1ZXVlX2NmZzsKKwlzdHJ1Y3QgZnNsX21jX2RldmljZSAqbHNfZGV2ID0gdG9f ZnNsX21jX2RldmljZShkZXYpOworCisJbnVtID0gcHJpdi0+bnVtX3BhaXJzOworCXBwcml2ID0g cHJpdi0+cHByaXY7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXJ4X3F1ZXVlX2Nm Zy5vcHRpb25zID0gRFBETUFJX1FVRVVFX09QVF9VU0VSX0NUWCB8CisJCQkJCURQRE1BSV9RVUVV RV9PUFRfREVTVDsKKwkJcnhfcXVldWVfY2ZnLnVzZXJfY3R4ID0gcHByaXYtPm5jdHgucW1hbjY0 OworCQlyeF9xdWV1ZV9jZmcuZGVzdF9jZmcuZGVzdF90eXBlID0gRFBETUFJX0RFU1RfRFBJTzsK KwkJcnhfcXVldWVfY2ZnLmRlc3RfY2ZnLmRlc3RfaWQgPSBwcHJpdi0+bmN0eC5kcGlvX2lkOwor CQlyeF9xdWV1ZV9jZmcuZGVzdF9jZmcucHJpb3JpdHkgPSBwcHJpdi0+cHJpbzsKKwkJZXJyID0g ZHBkbWFpX3NldF9yeF9xdWV1ZShwcml2LT5tY19pbywgMCwgbHNfZGV2LT5tY19oYW5kbGUsCisJ CQkJCSAgcnhfcXVldWVfY2ZnLmRlc3RfY2ZnLnByaW9yaXR5LAorCQkJCQkgICZyeF9xdWV1ZV9j ZmcpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldiwgImRwZG1haV9zZXRfcnhfcXVldWUo KSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCXBwcml2Kys7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19jb2xkIGRwYWEyX2RwZG1haV9kcGlvX3VuYmlu ZChzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2ICpwcml2KQoreworCWludCBpOworCWludCBlcnIgPSAw OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgZnNsX21jX2Rldmlj ZSAqbHNfZGV2ID0gdG9fZnNsX21jX2RldmljZShkZXYpOworCXN0cnVjdCBkcGFhMl9xZG1hX3By aXZfcGVyX3ByaW8gKnBwcml2ID0gcHJpdi0+cHByaXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJp di0+bnVtX3BhaXJzOyBpKyspIHsKKwkJcHByaXYtPm5jdHgucW1hbjY0ID0gMDsKKwkJcHByaXYt Pm5jdHguZHBpb19pZCA9IDA7CisJCXBwcml2Kys7CisJfQorCisJZXJyID0gZHBkbWFpX3Jlc2V0 KHByaXYtPm1jX2lvLCAwLCBsc19kZXYtPm1jX2hhbmRsZSk7CisJaWYgKGVycikKKwkJZGV2X2Vy cihkZXYsICJkcGRtYWlfcmVzZXQoKSBmYWlsZWRcbiIpOworCisJcmV0dXJuIGVycjsKK30KKwor c3RhdGljIHZvaWQgZHBhYTJfZHBkbWFpX2ZyZWVfY29tcChzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFu ICpxY2hhbiwKKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkcGFh Ml9xZG1hX2NvbXAgKmNvbXBfdG1wLCAqX2NvbXBfdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKGNvbXBfdG1wLCBfY29tcF90bXAsCisJCQkJIGhlYWQsIGxpc3QpIHsKKwkJZG1hX3Bv b2xfZnJlZShxY2hhbi0+ZmRfcG9vbCwKKwkJCSAgICAgIGNvbXBfdG1wLT5mZF92aXJ0X2FkZHIs CisJCQkgICAgICBjb21wX3RtcC0+ZmRfYnVzX2FkZHIpOworCQlsaXN0X2RlbCgmY29tcF90bXAt Pmxpc3QpOworCQlrZnJlZShjb21wX3RtcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcGFhMl9k cGRtYWlfZnJlZV9jaGFubmVscyhzdHJ1Y3QgZHBhYTJfcWRtYV9lbmdpbmUgKmRwYWEyX3FkbWEp Cit7CisJc3RydWN0IGRwYWEyX3FkbWFfY2hhbiAqcWNoYW47CisJaW50IG51bSwgaTsKKworCW51 bSA9IGRwYWEyX3FkbWEtPm5fY2hhbnM7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJ CXFjaGFuID0gJmRwYWEyX3FkbWEtPmNoYW5zW2ldOworCQlkcGFhMl9kcGRtYWlfZnJlZV9jb21w KHFjaGFuLCAmcWNoYW4tPmNvbXBfdXNlZCk7CisJCWRwYWEyX2RwZG1haV9mcmVlX2NvbXAocWNo YW4sICZxY2hhbi0+Y29tcF9mcmVlKTsKKwkJZG1hX3Bvb2xfZGVzdHJveShxY2hhbi0+ZmRfcG9v bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcGFhMl9xZG1hX2ZyZWVfZGVzYyhzdHJ1Y3Qgdmly dF9kbWFfZGVzYyAqdmRlc2MpCit7CisJc3RydWN0IGRwYWEyX3FkbWFfY29tcCAqZHBhYTJfY29t cDsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9jaGFuICpxY2hhbjsKKworCWRwYWEyX2NvbXAgPSB0b19m c2xfcWRtYV9jb21wKHZkZXNjKTsKKwlxY2hhbiA9IGRwYWEyX2NvbXAtPnFjaGFuOworCWxpc3Rf ZGVsKCZkcGFhMl9jb21wLT5saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZkcGFhMl9jb21wLT5saXN0 LCAmcWNoYW4tPmNvbXBfZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgZHBhYTJfZHBkbWFpX2luaXRf Y2hhbm5lbHMoc3RydWN0IGRwYWEyX3FkbWFfZW5naW5lICpkcGFhMl9xZG1hKQoreworCXN0cnVj dCBkcGFhMl9xZG1hX2NoYW4gKmRwYWEyX2NoYW47CisJaW50IGk7CisKKwlJTklUX0xJU1RfSEVB RCgmZHBhYTJfcWRtYS0+ZG1hX2Rldi5jaGFubmVscyk7CisJZm9yIChpID0gMDsgaSA8IGRwYWEy X3FkbWEtPm5fY2hhbnM7IGkrKykgeworCQlkcGFhMl9jaGFuID0gJmRwYWEyX3FkbWEtPmNoYW5z W2ldOworCQlkcGFhMl9jaGFuLT5xZG1hID0gZHBhYTJfcWRtYTsKKwkJZHBhYTJfY2hhbi0+dmNo YW4uZGVzY19mcmVlID0gZHBhYTJfcWRtYV9mcmVlX2Rlc2M7CisJCXZjaGFuX2luaXQoJmRwYWEy X2NoYW4tPnZjaGFuLCAmZHBhYTJfcWRtYS0+ZG1hX2Rldik7CisJCXNwaW5fbG9ja19pbml0KCZk cGFhMl9jaGFuLT5xdWV1ZV9sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRwYWEyX2NoYW4tPmNv bXBfdXNlZCk7CisJCUlOSVRfTElTVF9IRUFEKCZkcGFhMl9jaGFuLT5jb21wX2ZyZWUpOworCX0K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcGFhMl9xZG1hX3Byb2JlKHN0cnVjdCBmc2xf bWNfZGV2aWNlICpkcGRtYWlfZGV2KQoreworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXY7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRwZG1haV9kZXYtPmRldjsKKwlzdHJ1Y3QgZHBhYTJf cWRtYV9lbmdpbmUgKmRwYWEyX3FkbWE7CisJaW50IGVycjsKKworCXByaXYgPSBremFsbG9jKHNp emVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07 CisJZGV2X3NldF9kcnZkYXRhKGRldiwgcHJpdik7CisJcHJpdi0+ZHBkbWFpX2RldiA9IGRwZG1h aV9kZXY7CisKKwlwcml2LT5pb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYo ZGV2KTsKKwlpZiAocHJpdi0+aW9tbXVfZG9tYWluKQorCQlzbW11X2Rpc2FibGUgPSBmYWxzZTsK KworCS8qIG9idGFpbiBhIE1DIHBvcnRhbCAqLworCWVyciA9IGZzbF9tY19wb3J0YWxfYWxsb2Nh dGUoZHBkbWFpX2RldiwgMCwgJnByaXYtPm1jX2lvKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIg PT0gLUVOWElPKQorCQkJZXJyID0gLUVQUk9CRV9ERUZFUjsKKwkJZWxzZQorCQkJZGV2X2Vycihk ZXYsICJNQyBwb3J0YWwgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9tY3BvcnRh bDsKKwl9CisKKwkvKiBEUERNQUkgaW5pdGlhbGl6YXRpb24gKi8KKwllcnIgPSBkcGFhMl9xZG1h X3NldHVwKGRwZG1haV9kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJkcGFhMl9k cGRtYWlfc2V0dXAoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9kcGRtYWlfc2V0dXA7CisJfQor CisJLyogRFBJTyAqLworCWVyciA9IGRwYWEyX3FkbWFfZHBpb19zZXR1cChwcml2KTsKKwlpZiAo ZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiZHBhYTJfZHBkbWFpX2RwaW9fc2V0dXAoKSBmYWlsZWRc biIpOworCQlnb3RvIGVycl9kcGlvX3NldHVwOworCX0KKworCS8qIERQRE1BSSBiaW5kaW5nIHRv IERQSU8gKi8KKwllcnIgPSBkcGFhMl9kcGRtYWlfYmluZChwcml2KTsKKwlpZiAoZXJyKSB7CisJ CWRldl9lcnIoZGV2LCAiZHBhYTJfZHBkbWFpX2JpbmQoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVy cl9iaW5kOworCX0KKworCS8qIERQRE1BSSBlbmFibGUgKi8KKwllcnIgPSBkcGRtYWlfZW5hYmxl KHByaXYtPm1jX2lvLCAwLCBkcGRtYWlfZGV2LT5tY19oYW5kbGUpOworCWlmIChlcnIpIHsKKwkJ ZGV2X2VycihkZXYsICJkcGRtYWlfZW5hYmxlKCkgZmFpbGVcbiIpOworCQlnb3RvIGVycl9lbmFi bGU7CisJfQorCisJZHBhYTJfcWRtYSA9IGt6YWxsb2Moc2l6ZW9mKCpkcGFhMl9xZG1hKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFkcGFhMl9xZG1hKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8g ZXJyX2VuZzsKKwl9CisKKwlwcml2LT5kcGFhMl9xZG1hID0gZHBhYTJfcWRtYTsKKwlkcGFhMl9x ZG1hLT5wcml2ID0gcHJpdjsKKworCWRwYWEyX3FkbWEtPmRlc2NfYWxsb2NhdGVkID0gMDsKKwlk cGFhMl9xZG1hLT5uX2NoYW5zID0gTlVNX0NIOworCisJZHBhYTJfZHBkbWFpX2luaXRfY2hhbm5l bHMoZHBhYTJfcWRtYSk7CisKKwlpZiAoc29jX2RldmljZV9tYXRjaChzb2NfZml4dXBfdHVuaW5n KSkKKwkJZHBhYTJfcWRtYS0+cWRtYV93cnR5cGVfZml4dXAgPSB0cnVlOworCWVsc2UKKwkJZHBh YTJfcWRtYS0+cWRtYV93cnR5cGVfZml4dXAgPSBmYWxzZTsKKworCWRtYV9jYXBfc2V0KERNQV9Q UklWQVRFLCBkcGFhMl9xZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFf U0xBVkUsIGRwYWEyX3FkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9N RU1DUFksIGRwYWEyX3FkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCisJZHBhYTJfcWRtYS0+ZG1h X2Rldi5kZXYgPSBkZXY7CisJZHBhYTJfcWRtYS0+ZG1hX2Rldi5kZXZpY2VfYWxsb2NfY2hhbl9y ZXNvdXJjZXMgPQorCQlkcGFhMl9xZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCWRwYWEyX3Fk bWEtPmRtYV9kZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPQorCQlkcGFhMl9xZG1hX2Zy ZWVfY2hhbl9yZXNvdXJjZXM7CisJZHBhYTJfcWRtYS0+ZG1hX2Rldi5kZXZpY2VfdHhfc3RhdHVz ID0gZHBhYTJfcWRtYV90eF9zdGF0dXM7CisJZHBhYTJfcWRtYS0+ZG1hX2Rldi5kZXZpY2VfcHJl cF9kbWFfbWVtY3B5ID0gZHBhYTJfcWRtYV9wcmVwX21lbWNweTsKKwlkcGFhMl9xZG1hLT5kbWFf ZGV2LmRldmljZV9pc3N1ZV9wZW5kaW5nID0gZHBhYTJfcWRtYV9pc3N1ZV9wZW5kaW5nOworCisJ ZXJyID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZHBhYTJfcWRtYS0+ZG1hX2Rldik7CisJ aWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlZ2lzdGVyIE5YUCBRRE1BIGVuZ2lu ZS5cbiIpOworCQlnb3RvIGVycl9lbmc7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9lbmc6CisJ ZHBkbWFpX2Rpc2FibGUocHJpdi0+bWNfaW8sIDAsIGRwZG1haV9kZXYtPm1jX2hhbmRsZSk7Citl cnJfZW5hYmxlOgorCWRwYWEyX2RwZG1haV9kcGlvX3VuYmluZChwcml2KTsKK2Vycl9iaW5kOgor CWRwYWEyX2RwbWFpX3N0b3JlX2ZyZWUocHJpdik7CisJZHBhYTJfZHBkbWFpX2RwaW9fZnJlZShw cml2KTsKK2Vycl9kcGlvX3NldHVwOgorCWRwZG1haV9jbG9zZShwcml2LT5tY19pbywgMCwgZHBk bWFpX2Rldi0+bWNfaGFuZGxlKTsKK2Vycl9kcGRtYWlfc2V0dXA6CisJZnNsX21jX3BvcnRhbF9m cmVlKHByaXYtPm1jX2lvKTsKK2Vycl9tY3BvcnRhbDoKKwlrZnJlZShwcml2LT5wcHJpdik7CisJ a2ZyZWUocHJpdik7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCBkcGFhMl9xZG1hX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAq bHNfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHBhYTJfcWRtYV9wcml2 ICpwcml2OworCXN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYTsKKworCWRldiA9 ICZsc19kZXYtPmRldjsKKwlwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJZHBhYTJfcWRt YSA9IHByaXYtPmRwYWEyX3FkbWE7CisKKwlkcGRtYWlfZGlzYWJsZShwcml2LT5tY19pbywgMCwg bHNfZGV2LT5tY19oYW5kbGUpOworCWRwYWEyX2RwZG1haV9kcGlvX3VuYmluZChwcml2KTsKKwlk cGFhMl9kcG1haV9zdG9yZV9mcmVlKHByaXYpOworCWRwYWEyX2RwZG1haV9kcGlvX2ZyZWUocHJp dik7CisJZHBkbWFpX2Nsb3NlKHByaXYtPm1jX2lvLCAwLCBsc19kZXYtPm1jX2hhbmRsZSk7CisJ ZnNsX21jX3BvcnRhbF9mcmVlKHByaXYtPm1jX2lvKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBO VUxMKTsKKwlkcGFhMl9kcGRtYWlfZnJlZV9jaGFubmVscyhkcGFhMl9xZG1hKTsKKworCWRtYV9h c3luY19kZXZpY2VfdW5yZWdpc3RlcigmZHBhYTJfcWRtYS0+ZG1hX2Rldik7CisJa2ZyZWUocHJp dik7CisJa2ZyZWUoZHBhYTJfcWRtYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBmc2xfbWNfZGV2aWNlX2lkIGRwYWEyX3FkbWFfaWRfdGFibGVbXSA9IHsKKwl7CisJ CS52ZW5kb3IgPSBGU0xfTUNfVkVORE9SX0ZSRUVTQ0FMRSwKKwkJLm9ial90eXBlID0gImRwZG1h aSIsCisJfSwKKwl7IC52ZW5kb3IgPSAweDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmc2xfbWNf ZHJpdmVyIGRwYWEyX3FkbWFfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJk cGFhMi1xZG1hIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgICAg ICAgID0gZHBhYTJfcWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IGRwYWEyX3FkbWFfcmVtb3ZlLAor CS5tYXRjaF9pZF90YWJsZQk9IGRwYWEyX3FkbWFfaWRfdGFibGUKK307CisKK3N0YXRpYyBpbnQg X19pbml0IGRwYWEyX3FkbWFfZHJpdmVyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZnNsX21jX2Ry aXZlcl9yZWdpc3RlcigmKGRwYWEyX3FkbWFfZHJpdmVyKSk7Cit9CitsYXRlX2luaXRjYWxsKGRw YWEyX3FkbWFfZHJpdmVyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNsX3FkbWFfZXhp dCh2b2lkKQoreworCWZzbF9tY19kcml2ZXJfdW5yZWdpc3RlcigmKGRwYWEyX3FkbWFfZHJpdmVy KSk7Cit9Cittb2R1bGVfZXhpdChmc2xfcWRtYV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0 Zm9ybTpmc2wtZHBhYTItcWRtYSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJOWFAgTGF5ZXJzY2FwZSBEUEFBMiBxRE1BIGVuZ2luZSBkcml2ZXIiKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuaCBiL2Ry aXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwYWEyLXFkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zZmNhZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEv ZnNsLWRwYWEyLXFkbWEvZHBhYTItcWRtYS5oCkBAIC0wLDAgKzEsMTUyIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IDIwMTQtMjAxOCBOWFAg Ki8KKworI2lmbmRlZiBfX0RQQUEyX1FETUFfSAorI2RlZmluZSBfX0RQQUEyX1FETUFfSAorCisj ZGVmaW5lIExPTkdfRk9STUFUIDEKKworI2RlZmluZSBEUEFBMl9RRE1BX1NUT1JFX1NJWkUgMTYK KyNkZWZpbmUgTlVNX0NIIDgKKworc3RydWN0IGRwYWEyX3FkbWFfc2RfZCB7CisJdTMyIHJzdjoz MjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MzIgc3NkOjEyOyAvKiBzb3VjZSBzdHJpZGUg ZGlzdGFuY2UgKi8KKwkJCXUzMiBzc3M6MTI7IC8qIHNvdWNlIHN0cmlkZSBzaXplICovCisJCQl1 MzIgcnN2MTo4OworCQl9IHNkZjsKKwkJc3RydWN0IHsKKwkJCXUzMiBkc2Q6MTI7IC8qIERlc3Rp bmF0aW9uIHN0cmlkZSBkaXN0YW5jZSAqLworCQkJdTMyIGRzczoxMjsgLyogRGVzdGluYXRpb24g c3RyaWRlIHNpemUgKi8KKwkJCXUzMiByc3YyOjg7CisJCX0gZGRmOworCX0gZGY7CisJdTMyIHJi cGNtZDsJLyogUm91dGUtYnktcG9ydCBjb21tYW5kICovCisJdTMyIGNtZDsKK30gX19hdHRyaWJ1 dGVfXygoX19wYWNrZWRfXykpOworCisvKiBTb3VyY2UgZGVzY3JpcHRvciBjb21tYW5kIHJlYWQg dHJhbnNhY3Rpb24gdHlwZSBmb3IgUkJQPTA6ICovCisvKiBjb2hlcmVudCBjb3B5IG9mIGNhY2hl YWJsZSBtZW1vcnkgKi8KKyNkZWZpbmUgUURNQV9TRF9DTURfUkRUVFlQRV9DT0hFUkVOVCAoMHhi IDw8IDI4KQorLyogRGVzdGluYXRpb24gZGVzY3JpcHRvciBjb21tYW5kIHdyaXRlIHRyYW5zYWN0 aW9uIHR5cGUgZm9yIFJCUD0wOiAqLworLyogY29oZXJlbnQgY29weSBvZiBjYWNoZWFibGUgbWVt b3J5ICovCisjZGVmaW5lIFFETUFfRERfQ01EX1dSVFRZUEVfQ09IRVJFTlQgKDB4NiA8PCAyOCkK KyNkZWZpbmUgTFgyMTYwX1FETUFfRERfQ01EX1dSVFRZUEVfQ09IRVJFTlQgKDB4YiA8PCAyOCkK KworI2RlZmluZSBRTUFOX0ZEX0ZNVF9FTkFCTEUJQklUKDApIC8qIGZyYW1lIGxpc3QgdGFibGUg ZW5hYmxlICovCisjZGVmaW5lIFFNQU5fRkRfQk1UX0VOQUJMRQlCSVQoMTUpIC8qIGJ5cGFzcyBt ZW1vcnkgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgUU1BTl9GRF9CTVRfRElTQUJMRQkoMCkgLyog YnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBRTUFOX0ZEX1NMX0RJU0FCTEUJ KDApIC8qIHNob3J0IGxlbmd0aGUgZGlzYWJsZWQgKi8KKyNkZWZpbmUgUU1BTl9GRF9TTF9FTkFC TEUJQklUKDE0KSAvKiBzaG9ydCBsZW5ndGhlIGVuYWJsZWQgKi8KKworI2RlZmluZSBRRE1BX0ZJ TkFMX0JJVF9ESVNBQkxFCSgwKSAvKiBmaW5hbCBiaXQgZGlzYWJsZSAqLworI2RlZmluZSBRRE1B X0ZJTkFMX0JJVF9FTkFCTEUJQklUKDMxKSAvKiBmaW5hbCBiaXQgZW5hYmxlICovCisKKyNkZWZp bmUgUURNQV9GRF9TSE9SVF9GT1JNQVQJQklUKDExKSAvKiBzaG9ydCBmb3JtYXQgKi8KKyNkZWZp bmUgUURNQV9GRF9MT05HX0ZPUk1BVAkoMCkgLyogbG9uZyBmb3JtYXQgKi8KKyNkZWZpbmUgUURN QV9TRVJfRElTQUJMRQkoOCkgLyogbm8gbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFFETUFfU0VS X0NUWAkJQklUKDgpIC8qIG5vdGlmaWNhdGlvbiBieSBGUURfQ1RYW2ZxaWRdICovCisjZGVmaW5l IFFETUFfU0VSX0RFU1QJCSgyIDw8IDgpIC8qIG5vdGlmaWNhdGlvbiBieSBkZXN0aW5hdGlvbiBk ZXNjICovCisjZGVmaW5lIFFETUFfU0VSX0JPVEgJCSgzIDw8IDgpIC8qIHNvcnVjZSBhbmQgZGVz dCBub3RpZmljYXRpb24gKi8KKyNkZWZpbmUgUURNQV9GRF9TUEZfRU5BTEJFCUJJVCgzMCkgLyog c291cmNlIHByZWZldGNoIGVuYWJsZSAqLworCisjZGVmaW5lIFFNQU5fRkRfVkFfRU5BQkxFCUJJ VCgxNCkgLyogQWRkcmVzcyB1c2VkIGlzIHZpcnR1YWwgYWRkcmVzcyAqLworI2RlZmluZSBRTUFO X0ZEX1ZBX0RJU0FCTEUJKDApLyogQWRkcmVzcyB1c2VkIGlzIGEgcmVhbCBhZGRyZXNzICovCisv KiBGbG93IENvbnRleHQ6IDQ5Yml0IHBoeXNpY2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgUU1BTl9G RF9DQk1UX0VOQUJMRQlCSVQoMTUpCisjZGVmaW5lIFFNQU5fRkRfQ0JNVF9ESVNBQkxFCSgwKSAv KiBGbG93IENvbnRleHQ6IDY0Yml0IHZpcnR1YWwgYWRkcmVzcyAqLworI2RlZmluZSBRTUFOX0ZE X1NDX0RJU0FCTEUJKDApIC8qIHN0YXNoaW5nIGNvbnRyb2wgKi8KKworI2RlZmluZSBRRE1BX0ZM X0ZNVF9TQkYJCSgweDApIC8qIFNpbmdsZSBidWZmZXIgZnJhbWUgKi8KKyNkZWZpbmUgUURNQV9G TF9GTVRfU0dFCQkoMHgyKSAvKiBTY2F0dGVyIGdhdGhlciBmcmFtZSAqLworI2RlZmluZSBRRE1B X0ZMX0JNVF9FTkFCTEUJQklUKDE1KSAvKiBlbmFibGUgYnlwYXNzIG1lbW9yeSB0cmFuc2xhdGlv biAqLworI2RlZmluZSBRRE1BX0ZMX0JNVF9ESVNBQkxFCSgweDApIC8qIGVuYWJsZSBieXBhc3Mg bWVtb3J5IHRyYW5zbGF0aW9uICovCisjZGVmaW5lIFFETUFfRkxfU0xfTE9ORwkJKDB4MCkvKiBs b25nIGxlbmd0aCAqLworI2RlZmluZSBRRE1BX0ZMX1NMX1NIT1JUCSgweDEpIC8qIHNob3J0IGxl bmd0aCAqLworI2RlZmluZSBRRE1BX0ZMX0YJCSgweDEpLyogbGFzdCBmcmFtZSBsaXN0IGJpdCAq LworCisvKkRlc2NyaXB0aW9uIG9mIEZyYW1lIGxpc3QgdGFibGUgc3RydWN0dXJlKi8KK3N0cnVj dCBkcGFhMl9xZG1hX2NoYW4geworCXN0cnVjdCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsKKwlzdHJ1 Y3QgdmlydF9kbWFfZGVzYwkJdmRlc2M7CisJZW51bSBkbWFfc3RhdHVzCQkJc3RhdHVzOworCXN0 cnVjdCBkcGFhMl9xZG1hX2VuZ2luZQkqcWRtYTsKKworCXN0cnVjdCBtdXRleAkJCWRwYWEyX3F1 ZXVlX211dGV4OworCXNwaW5sb2NrX3QJCQlxdWV1ZV9sb2NrOworCXN0cnVjdCBkbWFfcG9vbAkJ CSpmZF9wb29sOworCisJc3RydWN0IGxpc3RfaGVhZAkJY29tcF91c2VkOworCXN0cnVjdCBsaXN0 X2hlYWQJCWNvbXBfZnJlZTsKKworfTsKKworc3RydWN0IGRwYWEyX3FkbWFfY29tcCB7CisJZG1h X2FkZHJfdAkJZmRfYnVzX2FkZHI7CisJZG1hX2FkZHJfdAkJZmxfYnVzX2FkZHI7CisJZG1hX2Fk ZHJfdAkJZGVzY19idXNfYWRkcjsKKwl2b2lkCQkJKmZkX3ZpcnRfYWRkcjsKKwl2b2lkCQkJKmZs X3ZpcnRfYWRkcjsKKwl2b2lkCQkJKmRlc2NfdmlydF9hZGRyOworCXN0cnVjdCBkcGFhMl9xZG1h X2NoYW4JKnFjaGFuOworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjCXZkZXNjOworCXN0cnVjdCBsaXN0 X2hlYWQJbGlzdDsKK307CisKK3N0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSB7CisJc3RydWN0IGRt YV9kZXZpY2UJZG1hX2RldjsKKwl1MzIJCQluX2NoYW5zOworCXN0cnVjdCBkcGFhMl9xZG1hX2No YW4JY2hhbnNbTlVNX0NIXTsKKwlpbnQJCQlxZG1hX3dydHlwZV9maXh1cDsKKwlpbnQJCQlkZXNj X2FsbG9jYXRlZDsKKworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXY7Cit9OworCisvKgor ICogZHBhYTJfcWRtYV9wcml2IC0gZHJpdmVyIHByaXZhdGUgZGF0YQorICovCitzdHJ1Y3QgZHBh YTJfcWRtYV9wcml2IHsKKwlpbnQgZHBxZG1hX2lkOworCisJc3RydWN0IGlvbW11X2RvbWFpbgkq aW9tbXVfZG9tYWluOworCXN0cnVjdCBkcGRtYWlfYXR0cglkcGRtYWlfYXR0cjsKKwlzdHJ1Y3Qg ZGV2aWNlCQkqZGV2OworCXN0cnVjdCBmc2xfbWNfaW8JKm1jX2lvOworCXN0cnVjdCBmc2xfbWNf ZGV2aWNlCSpkcGRtYWlfZGV2OworCXU4CQkJbnVtX3BhaXJzOworCisJc3RydWN0IGRwYWEyX3Fk bWFfZW5naW5lCSpkcGFhMl9xZG1hOworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXZfcGVyX3ByaW8J KnBwcml2OworCisJc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9hdHRyIHJ4X3F1ZXVlX2F0dHJbRFBE TUFJX1BSSU9fTlVNXTsKKwlzdHJ1Y3QgZHBkbWFpX3R4X3F1ZXVlX2F0dHIgdHhfcXVldWVfYXR0 cltEUERNQUlfUFJJT19OVU1dOworfTsKKworc3RydWN0IGRwYWEyX3FkbWFfcHJpdl9wZXJfcHJp byB7CisJaW50IHJlcV9mcWlkOworCWludCByc3BfZnFpZDsKKwlpbnQgcHJpbzsKKworCXN0cnVj dCBkcGFhMl9pb19zdG9yZSAqc3RvcmU7CisJc3RydWN0IGRwYWEyX2lvX25vdGlmaWNhdGlvbl9j dHggbmN0eDsKKworCXN0cnVjdCBkcGFhMl9xZG1hX3ByaXYgKnByaXY7Cit9OworCitzdGF0aWMg c3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHNvY19maXh1cF90dW5pbmdbXSA9IHsKKwl7IC5m YW1pbHkgPSAiUW9ySVEgTFgyMTYwQSJ9LAorCXsgfSwKK307CisKKy8qIEZEIHBvb2wgc2l6ZTog b25lIEZEICsgMyBGcmFtZSBsaXN0ICsgMiBzb3VyY2UvZGVzdGluYXRpb24gZGVzY3JpcHRvciAq LworI2RlZmluZSBGRF9QT09MX1NJWkUgKHNpemVvZihzdHJ1Y3QgZHBhYTJfZmQpICsgXAorCQlz aXplb2Yoc3RydWN0IGRwYWEyX2ZsX2VudHJ5KSAqIDMgKyBcCisJCXNpemVvZihzdHJ1Y3QgZHBh YTJfcWRtYV9zZF9kKSAqIDIpCisKK3N0YXRpYyB2b2lkIGRwYWEyX2RwZG1haV9mcmVlX2NoYW5u ZWxzKHN0cnVjdCBkcGFhMl9xZG1hX2VuZ2luZSAqZHBhYTJfcWRtYSk7CitzdGF0aWMgdm9pZCBk cGFhMl9kcGRtYWlfZnJlZV9jb21wKHN0cnVjdCBkcGFhMl9xZG1hX2NoYW4gKnFjaGFuLAorCQkJ CSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworI2VuZGlmIC8qIF9fRFBBQTJfUURNQV9IICov Cg==