From mboxrd@z Thu Jan 1 00:00:00 1970 From: manish.jaggi@linaro.org Subject: [RFC 04/11] Import iort.c and acpi_iort.h Date: Tue, 2 Jan 2018 14:58:02 +0530 Message-ID: <20180102092809.1841-5-manish.jaggi@linaro.org> References: <20180102092809.1841-1-manish.jaggi@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eWIsK-0002Us-Vw for xen-devel@lists.xenproject.org; Tue, 02 Jan 2018 09:28:49 +0000 Received: by mail-pf0-x244.google.com with SMTP id e3so25451506pfi.10 for ; Tue, 02 Jan 2018 01:28:46 -0800 (PST) In-Reply-To: <20180102092809.1841-1-manish.jaggi@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@linaro.org, sameer.goel@linaro.org, andre.przywara@linaro.org Cc: Manish Jaggi , manish.jaggi@cavium.com List-Id: xen-devel@lists.xenproject.org RnJvbTogTWFuaXNoIEphZ2dpIDxtYW5pc2guamFnZ2lAbGluYXJvLm9yZz4KCkltcG9ydCBpb3J0 LmMgYW5kIGFjcGlfaW9ydC5oIGZyb20gbGludXgga2VybmVsIHRhZyB2NC4xNAoKU2lnbmVkLW9m Zi1ieTogTWFuaXNoIEphZ2dpIDxtYW5pc2guamFnZ2lAbGluYXJvLm9yZz4KLS0tCiB4ZW4vZHJp dmVycy9hY3BpL2FybS9pb3J0LmMgIHwgMTI3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FjcGkvYWNwaV9pb3J0LmggfCAgIDU3ICsrCiAy IGZpbGVzIGNoYW5nZWQsIDEzMzYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL2FjcGkvYXJtL2lvcnQuYyBiL3hlbi9kcml2ZXJzL2FjcGkvYXJtL2lvcnQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kZTU2Mzk0ZGQxCi0tLSAvZGV2L251bGwK KysrIGIveGVuL2RyaXZlcnMvYWNwaS9hcm0vaW9ydC5jCkBAIC0wLDAgKzEsMTI3OSBAQAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxNiwgU2VtaWhhbGYKKyAqCUF1dGhvcjogVG9tYXN6IE5vd2lj a2kgPHRuQHNlbWloYWxmLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwK KyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgZWFy bHkgZGV0ZWN0aW9uL3BhcnNpbmcgb2YgSS9PIG1hcHBpbmcKKyAqIHJlcG9ydGVkIHRvIE9TIHRo cm91Z2ggZmlybXdhcmUgdmlhIEkvTyBSZW1hcHBpbmcgVGFibGUgKElPUlQpCisgKiBJT1JUIGRv Y3VtZW50IG51bWJlcjogQVJNIERFTiAwMDQ5QQorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJ IkFDUEk6IElPUlQ6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9hY3BpX2lvcnQuaD4KKyNpbmNs dWRlIDxsaW51eC9pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgSU9S VF9UWVBFX01BU0sodHlwZSkJKDEgPDwgKHR5cGUpKQorI2RlZmluZSBJT1JUX01TSV9UWVBFCQko MSA8PCBBQ1BJX0lPUlRfTk9ERV9JVFNfR1JPVVApCisjZGVmaW5lIElPUlRfSU9NTVVfVFlQRQkJ KCgxIDw8IEFDUElfSU9SVF9OT0RFX1NNTVUpIHwJXAorCQkJCSgxIDw8IEFDUElfSU9SVF9OT0RF X1NNTVVfVjMpKQorCisvKiBVbnRpbCBBQ1BJQ0EgaGVhZGVycyBjb3ZlciBJT1JUIHJldi4gQyAq LworI2lmbmRlZiBBQ1BJX0lPUlRfU01NVV9WM19DQVZJVU1fQ045OVhYCisjZGVmaW5lIEFDUElf SU9SVF9TTU1VX1YzX0NBVklVTV9DTjk5WFgJCTB4MgorI2VuZGlmCisKK3N0cnVjdCBpb3J0X2l0 c19tc2lfY2hpcCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBmd25vZGVfaGFu ZGxlCSpmd19ub2RlOworCXUzMgkJCXRyYW5zbGF0aW9uX2lkOworfTsKKworc3RydWN0IGlvcnRf Zndub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGFjcGlfaW9ydF9ub2Rl ICppb3J0X25vZGU7CisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZTsKK307CitzdGF0aWMg TElTVF9IRUFEKGlvcnRfZndub2RlX2xpc3QpOworc3RhdGljIERFRklORV9TUElOTE9DSyhpb3J0 X2Z3bm9kZV9sb2NrKTsKKworLyoqCisgKiBpb3J0X3NldF9md25vZGUoKSAtIENyZWF0ZSBpb3J0 X2Z3bm9kZSBhbmQgdXNlIGl0IHRvIHJlZ2lzdGVyCisgKgkJICAgICAgIGlvbW11IGRhdGEgaW4g dGhlIGlvcnRfZndub2RlX2xpc3QKKyAqCisgKiBAbm9kZTogSU9SVCB0YWJsZSBub2RlIGFzc29j aWF0ZWQgd2l0aCB0aGUgSU9NTVUKKyAqIEBmd25vZGU6IGZ3bm9kZSBhc3NvY2lhdGVkIHdpdGgg dGhlIElPUlQgbm9kZQorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcworICogICAgICAgICAg PDAgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW5saW5lIGludCBpb3J0X3NldF9md25vZGUoc3Ry dWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGUsCisJCQkJICBzdHJ1Y3QgZndub2RlX2hhbmRs ZSAqZndub2RlKQoreworCXN0cnVjdCBpb3J0X2Z3bm9kZSAqbnA7CisKKwlucCA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBpb3J0X2Z3bm9kZSksIEdGUF9BVE9NSUMpOworCisJaWYgKFdBUk5fT04o IW5wKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmbnAtPmxpc3QpOwor CW5wLT5pb3J0X25vZGUgPSBpb3J0X25vZGU7CisJbnAtPmZ3bm9kZSA9IGZ3bm9kZTsKKworCXNw aW5fbG9jaygmaW9ydF9md25vZGVfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbnAtPmxpc3QsICZp b3J0X2Z3bm9kZV9saXN0KTsKKwlzcGluX3VubG9jaygmaW9ydF9md25vZGVfbG9jayk7CisKKwly ZXR1cm4gMDsKK30KKworLyoqCisgKiBpb3J0X2dldF9md25vZGUoKSAtIFJldHJpZXZlIGZ3bm9k ZSBhc3NvY2lhdGVkIHdpdGggYW4gSU9SVCBub2RlCisgKgorICogQG5vZGU6IElPUlQgdGFibGUg bm9kZSB0byBiZSBsb29rZWQtdXAKKyAqCisgKiBSZXR1cm5zOiBmd25vZGVfaGFuZGxlIHBvaW50 ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVj dCBmd25vZGVfaGFuZGxlICppb3J0X2dldF9md25vZGUoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpu b2RlKQoreworCXN0cnVjdCBpb3J0X2Z3bm9kZSAqY3VycjsKKwlzdHJ1Y3QgZndub2RlX2hhbmRs ZSAqZndub2RlID0gTlVMTDsKKworCXNwaW5fbG9jaygmaW9ydF9md25vZGVfbG9jayk7CisJbGlz dF9mb3JfZWFjaF9lbnRyeShjdXJyLCAmaW9ydF9md25vZGVfbGlzdCwgbGlzdCkgeworCQlpZiAo Y3Vyci0+aW9ydF9ub2RlID09IG5vZGUpIHsKKwkJCWZ3bm9kZSA9IGN1cnItPmZ3bm9kZTsKKwkJ CWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpb3J0X2Z3bm9kZV9sb2NrKTsKKworCXJl dHVybiBmd25vZGU7Cit9CisKKy8qKgorICogaW9ydF9kZWxldGVfZndub2RlKCkgLSBEZWxldGUg Zndub2RlIGFzc29jaWF0ZWQgd2l0aCBhbiBJT1JUIG5vZGUKKyAqCisgKiBAbm9kZTogSU9SVCB0 YWJsZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBmd25vZGUgdG8gZGVsZXRlCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZCBpb3J0X2RlbGV0ZV9md25vZGUoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2Rl KQoreworCXN0cnVjdCBpb3J0X2Z3bm9kZSAqY3VyciwgKnRtcDsKKworCXNwaW5fbG9jaygmaW9y dF9md25vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnIsIHRtcCwgJmlv cnRfZndub2RlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGN1cnItPmlvcnRfbm9kZSA9PSBub2RlKSB7 CisJCQlsaXN0X2RlbCgmY3Vyci0+bGlzdCk7CisJCQlrZnJlZShjdXJyKTsKKwkJCWJyZWFrOwor CQl9CisJfQorCXNwaW5fdW5sb2NrKCZpb3J0X2Z3bm9kZV9sb2NrKTsKK30KKwordHlwZWRlZiBh Y3BpX3N0YXR1cyAoKmlvcnRfZmluZF9ub2RlX2NhbGxiYWNrKQorCShzdHJ1Y3QgYWNwaV9pb3J0 X25vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpOworCisvKiBSb290IHBvaW50ZXIgdG8gdGhlIG1h cHBlZCBJT1JUIHRhYmxlICovCitzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICppb3J0 X3RhYmxlOworCitzdGF0aWMgTElTVF9IRUFEKGlvcnRfbXNpX2NoaXBfbGlzdCk7CitzdGF0aWMg REVGSU5FX1NQSU5MT0NLKGlvcnRfbXNpX2NoaXBfbG9jayk7CisKKy8qKgorICogaW9ydF9yZWdp c3Rlcl9kb21haW5fdG9rZW4oKSAtIHJlZ2lzdGVyIGRvbWFpbiB0b2tlbiBhbmQgcmVsYXRlZCBJ VFMgSUQKKyAqIHRvIHRoZSBsaXN0IGZyb20gd2hlcmUgd2UgY2FuIGdldCBpdCBiYWNrIGxhdGVy IG9uLgorICogQHRyYW5zX2lkOiBJVFMgSUQuCisgKiBAZndfbm9kZTogRG9tYWluIHRva2VuLgor ICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVOT01FTSBpZiBubyBtZW1vcnkgd2hlbiBh bGxvY2F0aW5nIGxpc3QgZWxlbWVudAorICovCitpbnQgaW9ydF9yZWdpc3Rlcl9kb21haW5fdG9r ZW4oaW50IHRyYW5zX2lkLCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndfbm9kZSkKK3sKKwlzdHJ1 Y3QgaW9ydF9pdHNfbXNpX2NoaXAgKml0c19tc2lfY2hpcDsKKworCWl0c19tc2lfY2hpcCA9IGt6 YWxsb2Moc2l6ZW9mKCppdHNfbXNpX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0c19tc2lf Y2hpcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpdHNfbXNpX2NoaXAtPmZ3X25vZGUgPSBmd19u b2RlOworCWl0c19tc2lfY2hpcC0+dHJhbnNsYXRpb25faWQgPSB0cmFuc19pZDsKKworCXNwaW5f bG9jaygmaW9ydF9tc2lfY2hpcF9sb2NrKTsKKwlsaXN0X2FkZCgmaXRzX21zaV9jaGlwLT5saXN0 LCAmaW9ydF9tc2lfY2hpcF9saXN0KTsKKwlzcGluX3VubG9jaygmaW9ydF9tc2lfY2hpcF9sb2Nr KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvcnRfZGVyZWdpc3Rlcl9kb21haW5fdG9r ZW4oKSAtIERlcmVnaXN0ZXIgZG9tYWluIHRva2VuIGJhc2VkIG9uIElUUyBJRAorICogQHRyYW5z X2lkOiBJVFMgSUQuCisgKgorICogUmV0dXJuczogbm9uZS4KKyAqLwordm9pZCBpb3J0X2RlcmVn aXN0ZXJfZG9tYWluX3Rva2VuKGludCB0cmFuc19pZCkKK3sKKwlzdHJ1Y3QgaW9ydF9pdHNfbXNp X2NoaXAgKml0c19tc2lfY2hpcCwgKnQ7CisKKwlzcGluX2xvY2soJmlvcnRfbXNpX2NoaXBfbG9j ayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0c19tc2lfY2hpcCwgdCwgJmlvcnRfbXNp X2NoaXBfbGlzdCwgbGlzdCkgeworCQlpZiAoaXRzX21zaV9jaGlwLT50cmFuc2xhdGlvbl9pZCA9 PSB0cmFuc19pZCkgeworCQkJbGlzdF9kZWwoJml0c19tc2lfY2hpcC0+bGlzdCk7CisJCQlrZnJl ZShpdHNfbXNpX2NoaXApOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmlvcnRf bXNpX2NoaXBfbG9jayk7Cit9CisKKy8qKgorICogaW9ydF9maW5kX2RvbWFpbl90b2tlbigpIC0g RmluZCBkb21haW4gdG9rZW4gYmFzZWQgb24gZ2l2ZW4gSVRTIElECisgKiBAdHJhbnNfaWQ6IElU UyBJRC4KKyAqCisgKiBSZXR1cm5zOiBkb21haW4gdG9rZW4gd2hlbiBmaW5kIG9uIHRoZSBsaXN0 LCBOVUxMIG90aGVyd2lzZQorICovCitzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaW9ydF9maW5kX2Rv bWFpbl90b2tlbihpbnQgdHJhbnNfaWQpCit7CisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3X25v ZGUgPSBOVUxMOworCXN0cnVjdCBpb3J0X2l0c19tc2lfY2hpcCAqaXRzX21zaV9jaGlwOworCisJ c3Bpbl9sb2NrKCZpb3J0X21zaV9jaGlwX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRz X21zaV9jaGlwLCAmaW9ydF9tc2lfY2hpcF9saXN0LCBsaXN0KSB7CisJCWlmIChpdHNfbXNpX2No aXAtPnRyYW5zbGF0aW9uX2lkID09IHRyYW5zX2lkKSB7CisJCQlmd19ub2RlID0gaXRzX21zaV9j aGlwLT5md19ub2RlOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmlvcnRfbXNp X2NoaXBfbG9jayk7CisKKwlyZXR1cm4gZndfbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBhY3Bp X2lvcnRfbm9kZSAqaW9ydF9zY2FuX25vZGUoZW51bSBhY3BpX2lvcnRfbm9kZV90eXBlIHR5cGUs CisJCQkJCSAgICAgaW9ydF9maW5kX25vZGVfY2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgICAg dm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZSwgKmlv cnRfZW5kOworCXN0cnVjdCBhY3BpX3RhYmxlX2lvcnQgKmlvcnQ7CisJaW50IGk7CisKKwlpZiAo IWlvcnRfdGFibGUpCisJCXJldHVybiBOVUxMOworCisJLyogR2V0IHRoZSBmaXJzdCBJT1JUIG5v ZGUgKi8KKwlpb3J0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX2lvcnQgKilpb3J0X3RhYmxlOworCWlv cnRfbm9kZSA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnQsCisJCQkJ IGlvcnQtPm5vZGVfb2Zmc2V0KTsKKwlpb3J0X2VuZCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNw aV9pb3J0X25vZGUsIGlvcnRfdGFibGUsCisJCQkJaW9ydF90YWJsZS0+bGVuZ3RoKTsKKworCWZv ciAoaSA9IDA7IGkgPCBpb3J0LT5ub2RlX2NvdW50OyBpKyspIHsKKwkJaWYgKFdBUk5fVEFJTlQo aW9ydF9ub2RlID49IGlvcnRfZW5kLCBUQUlOVF9GSVJNV0FSRV9XT1JLQVJPVU5ELAorCQkJICAg ICAgICJJT1JUIG5vZGUgcG9pbnRlciBvdmVyZmxvd3MsIGJhZCB0YWJsZSFcbiIpKQorCQkJcmV0 dXJuIE5VTEw7CisKKwkJaWYgKGlvcnRfbm9kZS0+dHlwZSA9PSB0eXBlICYmCisJCSAgICBBQ1BJ X1NVQ0NFU1MoY2FsbGJhY2soaW9ydF9ub2RlLCBjb250ZXh0KSkpCisJCQlyZXR1cm4gaW9ydF9u b2RlOworCisJCWlvcnRfbm9kZSA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUs IGlvcnRfbm9kZSwKKwkJCQkJIGlvcnRfbm9kZS0+bGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGlvcnRfbWF0Y2hfbm9kZV9jYWxsYmFjayhzdHJ1 Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUsCisJCQkJCSAgICB2b2lkICpjb250ZXh0KQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9U X0ZPVU5EOworCisJaWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVfTkFNRURfQ09NUE9O RU5UKSB7CisJCXN0cnVjdCBhY3BpX2J1ZmZlciBidWYgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVS LCBOVUxMIH07CisJCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldiA9IHRvX2FjcGlfZGV2aWNlX25v ZGUoZGV2LT5md25vZGUpOworCQlzdHJ1Y3QgYWNwaV9pb3J0X25hbWVkX2NvbXBvbmVudCAqbmNv bXA7CisKKwkJaWYgKCFhZGV2KQorCQkJZ290byBvdXQ7CisKKwkJc3RhdHVzID0gYWNwaV9nZXRf bmFtZShhZGV2LT5oYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1Zik7CisJCWlmIChBQ1BJ X0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJZGV2X3dhcm4oZGV2LCAiQ2FuJ3QgZ2V0IGRldmljZSBm dWxsIHBhdGggbmFtZVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5jb21wID0gKHN0cnVj dCBhY3BpX2lvcnRfbmFtZWRfY29tcG9uZW50ICopbm9kZS0+bm9kZV9kYXRhOworCQlzdGF0dXMg PSAhc3RyY21wKG5jb21wLT5kZXZpY2VfbmFtZSwgYnVmLnBvaW50ZXIpID8KKwkJCQkJCQlBRV9P SyA6IEFFX05PVF9GT1VORDsKKwkJYWNwaV9vc19mcmVlKGJ1Zi5wb2ludGVyKTsKKwl9IGVsc2Ug aWYgKG5vZGUtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVfUENJX1JPT1RfQ09NUExFWCkgeworCQlz dHJ1Y3QgYWNwaV9pb3J0X3Jvb3RfY29tcGxleCAqcGNpX3JjOworCQlzdHJ1Y3QgcGNpX2J1cyAq YnVzOworCisJCWJ1cyA9IHRvX3BjaV9idXMoZGV2KTsKKwkJcGNpX3JjID0gKHN0cnVjdCBhY3Bp X2lvcnRfcm9vdF9jb21wbGV4ICopbm9kZS0+bm9kZV9kYXRhOworCisJCS8qCisJCSAqIEl0IGlz IGFzc3VtZWQgdGhhdCBQQ0kgc2VnbWVudCBudW1iZXJzIG1hcHMgb25lLXRvLW9uZQorCQkgKiB3 aXRoIHJvb3QgY29tcGxleGVzLiBFYWNoIHNlZ21lbnQgbnVtYmVyIGNhbiByZXByZXNlbnQgb25s eQorCQkgKiBvbmUgcm9vdCBjb21wbGV4LgorCQkgKi8KKwkJc3RhdHVzID0gcGNpX3JjLT5wY2lf c2VnbWVudF9udW1iZXIgPT0gcGNpX2RvbWFpbl9ucihidXMpID8KKwkJCQkJCQlBRV9PSyA6IEFF X05PVF9GT1VORDsKKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBp b3J0X2lkX21hcChzdHJ1Y3QgYWNwaV9pb3J0X2lkX21hcHBpbmcgKm1hcCwgdTggdHlwZSwgdTMy IHJpZF9pbiwKKwkJICAgICAgIHUzMiAqcmlkX291dCkKK3sKKwkvKiBTaW5nbGUgbWFwcGluZyBk b2VzIG5vdCBjYXJlIGZvciBpbnB1dCBpZCAqLworCWlmIChtYXAtPmZsYWdzICYgQUNQSV9JT1JU X0lEX1NJTkdMRV9NQVBQSU5HKSB7CisJCWlmICh0eXBlID09IEFDUElfSU9SVF9OT0RFX05BTUVE X0NPTVBPTkVOVCB8fAorCQkgICAgdHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9QQ0lfUk9PVF9DT01Q TEVYKSB7CisJCQkqcmlkX291dCA9IG1hcC0+b3V0cHV0X2Jhc2U7CisJCQlyZXR1cm4gMDsKKwkJ fQorCisJCXByX3dhcm4oRldfQlVHICJbbWFwICVwXSBTSU5HTEUgTUFQUElORyBmbGFnIG5vdCBh bGxvd2VkIGZvciBub2RlIHR5cGUgJWQsIHNraXBwaW5nIElEIG1hcFxuIiwKKwkJCW1hcCwgdHlw ZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaWYgKHJpZF9pbiA8IG1hcC0+aW5wdXRfYmFz ZSB8fAorCSAgICAocmlkX2luID49IG1hcC0+aW5wdXRfYmFzZSArIG1hcC0+aWRfY291bnQpKQor CQlyZXR1cm4gLUVOWElPOworCisJKnJpZF9vdXQgPSBtYXAtPm91dHB1dF9iYXNlICsgKHJpZF9p biAtIG1hcC0+aW5wdXRfYmFzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYworc3RydWN0IGFj cGlfaW9ydF9ub2RlICppb3J0X25vZGVfZ2V0X2lkKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9k ZSwKKwkJCQkJdTMyICppZF9vdXQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUgKnBhcmVudDsKKwlzdHJ1Y3QgYWNwaV9pb3J0X2lkX21hcHBpbmcgKm1hcDsKKworCWlmICgh bm9kZS0+bWFwcGluZ19vZmZzZXQgfHwgIW5vZGUtPm1hcHBpbmdfY291bnQgfHwKKwkJCQkgICAg IGluZGV4ID49IG5vZGUtPm1hcHBpbmdfY291bnQpCisJCXJldHVybiBOVUxMOworCisJbWFwID0g QUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfaWRfbWFwcGluZywgbm9kZSwKKwkJCSAgIG5v ZGUtPm1hcHBpbmdfb2Zmc2V0ICsgaW5kZXggKiBzaXplb2YoKm1hcCkpOworCisJLyogRmlybXdh cmUgYnVnISAqLworCWlmICghbWFwLT5vdXRwdXRfcmVmZXJlbmNlKSB7CisJCXByX2VycihGV19C VUcgIltub2RlICVwIHR5cGUgJWRdIElEIG1hcCBoYXMgTlVMTCBwYXJlbnQgcmVmZXJlbmNlXG4i LAorCQkgICAgICAgbm9kZSwgbm9kZS0+dHlwZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXBh cmVudCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnRfdGFibGUsCisJ CQkgICAgICAgbWFwLT5vdXRwdXRfcmVmZXJlbmNlKTsKKworCWlmIChtYXAtPmZsYWdzICYgQUNQ SV9JT1JUX0lEX1NJTkdMRV9NQVBQSU5HKSB7CisJCWlmIChub2RlLT50eXBlID09IEFDUElfSU9S VF9OT0RFX05BTUVEX0NPTVBPTkVOVCB8fAorCQkgICAgbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRf Tk9ERV9QQ0lfUk9PVF9DT01QTEVYKSB7CisJCQkqaWRfb3V0ID0gbWFwLT5vdXRwdXRfYmFzZTsK KwkJCXJldHVybiBwYXJlbnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGlj IHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlX21hcF9pZChzdHJ1Y3QgYWNwaV9pb3J0 X25vZGUgKm5vZGUsCisJCQkJCSAgICAgICB1MzIgaWRfaW4sIHUzMiAqaWRfb3V0LAorCQkJCQkg ICAgICAgdTggdHlwZV9tYXNrKQoreworCXUzMiBpZCA9IGlkX2luOworCisJLyogUGFyc2UgdGhl IElEIG1hcHBpbmcgdHJlZSB0byBmaW5kIHNwZWNpZmllZCBub2RlIHR5cGUgKi8KKwl3aGlsZSAo bm9kZSkgeworCQlzdHJ1Y3QgYWNwaV9pb3J0X2lkX21hcHBpbmcgKm1hcDsKKwkJaW50IGk7CisK KwkJaWYgKElPUlRfVFlQRV9NQVNLKG5vZGUtPnR5cGUpICYgdHlwZV9tYXNrKSB7CisJCQlpZiAo aWRfb3V0KQorCQkJCSppZF9vdXQgPSBpZDsKKwkJCXJldHVybiBub2RlOworCQl9CisKKwkJaWYg KCFub2RlLT5tYXBwaW5nX29mZnNldCB8fCAhbm9kZS0+bWFwcGluZ19jb3VudCkKKwkJCWdvdG8g ZmFpbF9tYXA7CisKKwkJbWFwID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfaWRfbWFw cGluZywgbm9kZSwKKwkJCQkgICBub2RlLT5tYXBwaW5nX29mZnNldCk7CisKKwkJLyogRmlybXdh cmUgYnVnISAqLworCQlpZiAoIW1hcC0+b3V0cHV0X3JlZmVyZW5jZSkgeworCQkJcHJfZXJyKEZX X0JVRyAiW25vZGUgJXAgdHlwZSAlZF0gSUQgbWFwIGhhcyBOVUxMIHBhcmVudCByZWZlcmVuY2Vc biIsCisJCQkgICAgICAgbm9kZSwgbm9kZS0+dHlwZSk7CisJCQlnb3RvIGZhaWxfbWFwOworCQl9 CisKKwkJLyogRG8gdGhlIElEIHRyYW5zbGF0aW9uICovCisJCWZvciAoaSA9IDA7IGkgPCBub2Rl LT5tYXBwaW5nX2NvdW50OyBpKyssIG1hcCsrKSB7CisJCQlpZiAoIWlvcnRfaWRfbWFwKG1hcCwg bm9kZS0+dHlwZSwgaWQsICZpZCkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBub2Rl LT5tYXBwaW5nX2NvdW50KQorCQkJZ290byBmYWlsX21hcDsKKworCQlub2RlID0gQUNQSV9BRERf UFRSKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSwgaW9ydF90YWJsZSwKKwkJCQkgICAgbWFwLT5vdXRw dXRfcmVmZXJlbmNlKTsKKwl9CisKK2ZhaWxfbWFwOgorCS8qIE1hcCBpbnB1dCBJRCB0byBvdXRw dXQgSUQgdW5jaGFuZ2VkIG9uIG1hcHBpbmcgZmFpbHVyZSAqLworCWlmIChpZF9vdXQpCisJCSpp ZF9vdXQgPSBpZF9pbjsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMKK3N0cnVjdCBhY3Bp X2lvcnRfbm9kZSAqaW9ydF9ub2RlX21hcF9wbGF0Zm9ybV9pZChzdHJ1Y3QgYWNwaV9pb3J0X25v ZGUgKm5vZGUsCisJCQkJCQkgdTMyICppZF9vdXQsIHU4IHR5cGVfbWFzaywKKwkJCQkJCSBpbnQg aW5kZXgpCit7CisJc3RydWN0IGFjcGlfaW9ydF9ub2RlICpwYXJlbnQ7CisJdTMyIGlkOworCisJ Lyogc3RlcCAxOiByZXRyaWV2ZSB0aGUgaW5pdGlhbCBkZXYgaWQgKi8KKwlwYXJlbnQgPSBpb3J0 X25vZGVfZ2V0X2lkKG5vZGUsICZpZCwgaW5kZXgpOworCWlmICghcGFyZW50KQorCQlyZXR1cm4g TlVMTDsKKworCS8qCisJICogb3B0aW9uYWwgc3RlcCAyOiBtYXAgdGhlIGluaXRpYWwgZGV2IGlk IGlmIGl0cyBwYXJlbnQgaXMgbm90CisJICogdGhlIHRhcmdldCB0eXBlIHdlIHdhbnQsIG1hcCBp dCBhZ2FpbiBmb3IgdGhlIHVzZSBjYXNlcyBzdWNoCisJICogYXMgTkMgKG5hbWVkIGNvbXBvbmVu dCkgLT4gU01NVSAtPiBJVFMuIElmIHRoZSB0eXBlIGlzIG1hdGNoZWQsCisJICogcmV0dXJuIHRo ZSBpbml0aWFsIGRldiBpZCBhbmQgaXRzIHBhcmVudCBwb2ludGVyIGRpcmVjdGx5LgorCSAqLwor CWlmICghKElPUlRfVFlQRV9NQVNLKHBhcmVudC0+dHlwZSkgJiB0eXBlX21hc2spKQorCQlwYXJl bnQgPSBpb3J0X25vZGVfbWFwX2lkKHBhcmVudCwgaWQsIGlkX291dCwgdHlwZV9tYXNrKTsKKwll bHNlCisJCWlmIChpZF9vdXQpCisJCQkqaWRfb3V0ID0gaWQ7CisKKwlyZXR1cm4gcGFyZW50Owor fQorCitzdGF0aWMgc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X2ZpbmRfZGV2X25vZGUoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfYnVzICpwYnVzOworCisJaWYgKCFkZXZf aXNfcGNpKGRldikpCisJCXJldHVybiBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9OQU1F RF9DT01QT05FTlQsCisJCQkJICAgICAgaW9ydF9tYXRjaF9ub2RlX2NhbGxiYWNrLCBkZXYpOwor CisJLyogRmluZCBhIFBDSSByb290IGJ1cyAqLworCXBidXMgPSB0b19wY2lfZGV2KGRldiktPmJ1 czsKKwl3aGlsZSAoIXBjaV9pc19yb290X2J1cyhwYnVzKSkKKwkJcGJ1cyA9IHBidXMtPnBhcmVu dDsKKworCXJldHVybiBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9QQ0lfUk9PVF9DT01Q TEVYLAorCQkJICAgICAgaW9ydF9tYXRjaF9ub2RlX2NhbGxiYWNrLCAmcGJ1cy0+ZGV2KTsKK30K KworLyoqCisgKiBpb3J0X21zaV9tYXBfcmlkKCkgLSBNYXAgYSBNU0kgcmVxdWVzdGVyIElEIGZv ciBhIGRldmljZQorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIG1hcHBpbmcgaXMg dG8gYmUgZG9uZS4KKyAqIEByZXFfaWQ6IFRoZSBkZXZpY2UgcmVxdWVzdGVyIElELgorICoKKyAq IFJldHVybnM6IG1hcHBlZCBNU0kgUklEIG9uIHN1Y2Nlc3MsIGlucHV0IHJlcXVlc3RlciBJRCBv dGhlcndpc2UKKyAqLwordTMyIGlvcnRfbXNpX21hcF9yaWQoc3RydWN0IGRldmljZSAqZGV2LCB1 MzIgcmVxX2lkKQoreworCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKKwl1MzIgZGV2X2lk OworCisJbm9kZSA9IGlvcnRfZmluZF9kZXZfbm9kZShkZXYpOworCWlmICghbm9kZSkKKwkJcmV0 dXJuIHJlcV9pZDsKKworCWlvcnRfbm9kZV9tYXBfaWQobm9kZSwgcmVxX2lkLCAmZGV2X2lkLCBJ T1JUX01TSV9UWVBFKTsKKwlyZXR1cm4gZGV2X2lkOworfQorCisvKioKKyAqIGlvcnRfcG1zaV9n ZXRfZGV2X2lkKCkgLSBHZXQgdGhlIGRldmljZSBpZCBmb3IgYSBkZXZpY2UKKyAqIEBkZXY6IFRo ZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBtYXBwaW5nIGlzIHRvIGJlIGRvbmUuCisgKiBAZGV2X2lk OiBUaGUgZGV2aWNlIElEIGZvdW5kLgorICoKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3NmdWwg ZmluZCBhIGRldiBpZCwgLUVOT0RFViBvbiBlcnJvcgorICovCitpbnQgaW9ydF9wbXNpX2dldF9k ZXZfaWQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRldl9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1 Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGU7CisKKwlub2RlID0gaW9ydF9maW5kX2Rldl9ub2RlKGRl dik7CisJaWYgKCFub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBu b2RlLT5tYXBwaW5nX2NvdW50OyBpKyspIHsKKwkJaWYgKGlvcnRfbm9kZV9tYXBfcGxhdGZvcm1f aWQobm9kZSwgZGV2X2lkLCBJT1JUX01TSV9UWVBFLCBpKSkKKwkJCXJldHVybiAwOworCX0KKwor CXJldHVybiAtRU5PREVWOworfQorCisvKioKKyAqIGlvcnRfZGV2X2ZpbmRfaXRzX2lkKCkgLSBG aW5kIHRoZSBJVFMgaWRlbnRpZmllciBmb3IgYSBkZXZpY2UKKyAqIEBkZXY6IFRoZSBkZXZpY2Uu CisgKiBAcmVxX2lkOiBEZXZpY2UncyByZXF1ZXN0ZXIgSUQKKyAqIEBpZHg6IEluZGV4IG9mIHRo ZSBJVFMgaWRlbnRpZmllciBsaXN0LgorICogQGl0c19pZDogSVRTIGlkZW50aWZpZXIuCisgKgor ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhcHByb3ByaWF0ZSBlcnJvciB2YWx1ZSBvdGhlcndp c2UKKyAqLworc3RhdGljIGludCBpb3J0X2Rldl9maW5kX2l0c19pZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHUzMiByZXFfaWQsCisJCQkJdW5zaWduZWQgaW50IGlkeCwgaW50ICppdHNfaWQpCit7CisJ c3RydWN0IGFjcGlfaW9ydF9pdHNfZ3JvdXAgKml0czsKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUg Km5vZGU7CisKKwlub2RlID0gaW9ydF9maW5kX2Rldl9ub2RlKGRldik7CisJaWYgKCFub2RlKQor CQlyZXR1cm4gLUVOWElPOworCisJbm9kZSA9IGlvcnRfbm9kZV9tYXBfaWQobm9kZSwgcmVxX2lk LCBOVUxMLCBJT1JUX01TSV9UWVBFKTsKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5YSU87CisK KwkvKiBNb3ZlIHRvIElUUyBzcGVjaWZpYyBkYXRhICovCisJaXRzID0gKHN0cnVjdCBhY3BpX2lv cnRfaXRzX2dyb3VwICopbm9kZS0+bm9kZV9kYXRhOworCWlmIChpZHggPiBpdHMtPml0c19jb3Vu dCkgeworCQlkZXZfZXJyKGRldiwgInJlcXVlc3RlZCBJVFMgSUQgaW5kZXggWyVkXSBpcyBncmVh dGVyIHRoYW4gYXZhaWxhYmxlIFslZF1cbiIsCisJCQlpZHgsIGl0cy0+aXRzX2NvdW50KTsKKwkJ cmV0dXJuIC1FTlhJTzsKKwl9CisKKwkqaXRzX2lkID0gaXRzLT5pZGVudGlmaWVyc1tpZHhdOwor CXJldHVybiAwOworfQorCisvKioKKyAqIGlvcnRfZ2V0X2RldmljZV9kb21haW4oKSAtIEZpbmQg TVNJIGRvbWFpbiByZWxhdGVkIHRvIGEgZGV2aWNlCisgKiBAZGV2OiBUaGUgZGV2aWNlLgorICog QHJlcV9pZDogUmVxdWVzdGVyIElEIGZvciB0aGUgZGV2aWNlLgorICoKKyAqIFJldHVybnM6IHRo ZSBNU0kgZG9tYWluIGZvciB0aGlzIGRldmljZSwgTlVMTCBvdGhlcndpc2UKKyAqLworc3RydWN0 IGlycV9kb21haW4gKmlvcnRfZ2V0X2RldmljZV9kb21haW4oc3RydWN0IGRldmljZSAqZGV2LCB1 MzIgcmVxX2lkKQoreworCXN0cnVjdCBmd25vZGVfaGFuZGxlICpoYW5kbGU7CisJaW50IGl0c19p ZDsKKworCWlmIChpb3J0X2Rldl9maW5kX2l0c19pZChkZXYsIHJlcV9pZCwgMCwgJml0c19pZCkp CisJCXJldHVybiBOVUxMOworCisJaGFuZGxlID0gaW9ydF9maW5kX2RvbWFpbl90b2tlbihpdHNf aWQpOworCWlmICghaGFuZGxlKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBpcnFfZmluZF9t YXRjaGluZ19md25vZGUoaGFuZGxlLCBET01BSU5fQlVTX1BDSV9NU0kpOworfQorCisvKioKKyAq IGlvcnRfZ2V0X3BsYXRmb3JtX2RldmljZV9kb21haW4oKSAtIEZpbmQgTVNJIGRvbWFpbiByZWxh dGVkIHRvIGEKKyAqIHBsYXRmb3JtIGRldmljZQorICogQGRldjogdGhlIGRldiBwb2ludGVyIGFz c29jaWF0ZWQgd2l0aCB0aGUgcGxhdGZvcm0gZGV2aWNlCisgKgorICogUmV0dXJuczogdGhlIE1T SSBkb21haW4gZm9yIHRoaXMgZGV2aWNlLCBOVUxMIG90aGVyd2lzZQorICovCitzdGF0aWMgc3Ry dWN0IGlycV9kb21haW4gKmlvcnRfZ2V0X3BsYXRmb3JtX2RldmljZV9kb21haW4oc3RydWN0IGRl dmljZSAqZGV2KQoreworCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSwgKm1zaV9wYXJlbnQ7 CisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlvcnRfZndub2RlOworCXN0cnVjdCBhY3BpX2lvcnRf aXRzX2dyb3VwICppdHM7CisJaW50IGk7CisKKwkvKiBmaW5kIGl0cyBhc3NvY2lhdGVkIGlvcnQg bm9kZSAqLworCW5vZGUgPSBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9OQU1FRF9DT01Q T05FTlQsCisJCQkgICAgICBpb3J0X21hdGNoX25vZGVfY2FsbGJhY2ssIGRldik7CisJaWYgKCFu b2RlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHRoZW4gZmluZCBpdHMgbXNpIHBhcmVudCBub2Rl ICovCisJZm9yIChpID0gMDsgaSA8IG5vZGUtPm1hcHBpbmdfY291bnQ7IGkrKykgeworCQltc2lf cGFyZW50ID0gaW9ydF9ub2RlX21hcF9wbGF0Zm9ybV9pZChub2RlLCBOVUxMLAorCQkJCQkJICAg ICAgIElPUlRfTVNJX1RZUEUsIGkpOworCQlpZiAobXNpX3BhcmVudCkKKwkJCWJyZWFrOworCX0K KworCWlmICghbXNpX3BhcmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBNb3ZlIHRvIElUUyBz cGVjaWZpYyBkYXRhICovCisJaXRzID0gKHN0cnVjdCBhY3BpX2lvcnRfaXRzX2dyb3VwICopbXNp X3BhcmVudC0+bm9kZV9kYXRhOworCisJaW9ydF9md25vZGUgPSBpb3J0X2ZpbmRfZG9tYWluX3Rv a2VuKGl0cy0+aWRlbnRpZmllcnNbMF0pOworCWlmICghaW9ydF9md25vZGUpCisJCXJldHVybiBO VUxMOworCisJcmV0dXJuIGlycV9maW5kX21hdGNoaW5nX2Z3bm9kZShpb3J0X2Z3bm9kZSwgRE9N QUlOX0JVU19QTEFURk9STV9NU0kpOworfQorCit2b2lkIGFjcGlfY29uZmlndXJlX3Btc2lfZG9t YWluKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2RvbWFp bjsKKworCW1zaV9kb21haW4gPSBpb3J0X2dldF9wbGF0Zm9ybV9kZXZpY2VfZG9tYWluKGRldik7 CisJaWYgKG1zaV9kb21haW4pCisJCWRldl9zZXRfbXNpX2RvbWFpbihkZXYsIG1zaV9kb21haW4p OworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIF9fZ2V0X3BjaV9yaWQoc3RydWN0IHBj aV9kZXYgKnBkZXYsIHUxNiBhbGlhcywKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwl1MzIgKnJpZCA9 IGRhdGE7CisKKwkqcmlkID0gYWxpYXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXJt X3NtbXVfaW9ydF94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdHJlYW1pZCwKKwkJCSAg ICAgICBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpb21tdV9vcHMgKm9wcykKK3sKKwlpbnQgcmV0ID0gaW9tbXVfZndzcGVjX2luaXQoZGV2LCBm d25vZGUsIG9wcyk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gaW9tbXVfZndzcGVjX2FkZF9pZHMo ZGV2LCAmc3RyZWFtaWQsIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBi b29sIGlvcnRfaW9tbXVfZHJpdmVyX2VuYWJsZWQodTggdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUp IHsKKwljYXNlIEFDUElfSU9SVF9OT0RFX1NNTVVfVjM6CisJCXJldHVybiBJU19CVUlMVElOKENP TkZJR19BUk1fU01NVV9WMyk7CisJY2FzZSBBQ1BJX0lPUlRfTk9ERV9TTU1VOgorCQlyZXR1cm4g SVNfQlVJTFRJTihDT05GSUdfQVJNX1NNTVUpOworCWRlZmF1bHQ6CisJCXByX3dhcm4oIklPUlQg bm9kZSB0eXBlICV1IGRvZXMgbm90IGRlc2NyaWJlIGFuIFNNTVVcbiIsIHR5cGUpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0lPTU1VX0FQSQorc3RhdGljIGlubGlu ZQorY29uc3Qgc3RydWN0IGlvbW11X29wcyAqaW9ydF9md3NwZWNfaW9tbXVfb3BzKHN0cnVjdCBp b21tdV9md3NwZWMgKmZ3c3BlYykKK3sKKwlyZXR1cm4gKGZ3c3BlYyAmJiBmd3NwZWMtPm9wcykg PyBmd3NwZWMtPm9wcyA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBpb3J0X2FkZF9k ZXZpY2VfcmVwbGF5KGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wcywgc3RydWN0IGRldmljZSAq ZGV2KQoreworCWludCBlcnIgPSAwOworCisJaWYgKG9wcy0+YWRkX2RldmljZSAmJiBkZXYtPmJ1 cyAmJiAhZGV2LT5pb21tdV9ncm91cCkKKwkJZXJyID0gb3BzLT5hZGRfZGV2aWNlKGRldik7CisK KwlyZXR1cm4gZXJyOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK2NvbnN0IHN0cnVjdCBpb21t dV9vcHMgKmlvcnRfZndzcGVjX2lvbW11X29wcyhzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMp Cit7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lCitpbnQgaW9ydF9hZGRfZGV2aWNlX3Jl cGxheShjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzICpvcHMsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sg cmV0dXJuIDA7IH0KKyNlbmRpZgorCitzdGF0aWMgaW50IGlvcnRfaW9tbXVfeGxhdGUoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUsCisJCQkgICAgdTMyIHN0 cmVhbWlkKQoreworCWNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wczsKKwlzdHJ1Y3QgZndub2Rl X2hhbmRsZSAqaW9ydF9md25vZGU7CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5PREVWOwor CisJaW9ydF9md25vZGUgPSBpb3J0X2dldF9md25vZGUobm9kZSk7CisJaWYgKCFpb3J0X2Z3bm9k ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIElmIHRoZSBvcHMgbG9vay11cCBmYWls cywgdGhpcyBtZWFucyB0aGF0IGVpdGhlcgorCSAqIHRoZSBTTU1VIGRyaXZlcnMgaGF2ZSBub3Qg YmVlbiBwcm9iZWQgeWV0IG9yIHRoYXQKKwkgKiB0aGUgU01NVSBkcml2ZXJzIGFyZSBub3QgYnVp bHQgaW4gdGhlIGtlcm5lbDsKKwkgKiBEZXBlbmRpbmcgb24gd2hldGhlciB0aGUgU01NVSBkcml2 ZXJzIGFyZSBidWlsdC1pbgorCSAqIGluIHRoZSBrZXJuZWwgb3Igbm90LCBkZWZlciB0aGUgSU9N TVUgY29uZmlndXJhdGlvbgorCSAqIG9yIGp1c3QgYWJvcnQgaXQuCisJICovCisJb3BzID0gaW9t bXVfb3BzX2Zyb21fZndub2RlKGlvcnRfZndub2RlKTsKKwlpZiAoIW9wcykKKwkJcmV0dXJuIGlv cnRfaW9tbXVfZHJpdmVyX2VuYWJsZWQobm9kZS0+dHlwZSkgPworCQkgICAgICAgLUVQUk9CRV9E RUZFUiA6IC1FTk9ERVY7CisKKwlyZXR1cm4gYXJtX3NtbXVfaW9ydF94bGF0ZShkZXYsIHN0cmVh bWlkLCBpb3J0X2Z3bm9kZSwgb3BzKTsKK30KKworc3RydWN0IGlvcnRfcGNpX2FsaWFzX2luZm8g eworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGU7Cit9 OworCitzdGF0aWMgaW50IGlvcnRfcGNpX2lvbW11X2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYs IHUxNiBhbGlhcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW9ydF9wY2lfYWxpYXNfaW5mbyAq aW5mbyA9IGRhdGE7CisJc3RydWN0IGFjcGlfaW9ydF9ub2RlICpwYXJlbnQ7CisJdTMyIHN0cmVh bWlkOworCisJcGFyZW50ID0gaW9ydF9ub2RlX21hcF9pZChpbmZvLT5ub2RlLCBhbGlhcywgJnN0 cmVhbWlkLAorCQkJCSAgSU9SVF9JT01NVV9UWVBFKTsKKwlyZXR1cm4gaW9ydF9pb21tdV94bGF0 ZShpbmZvLT5kZXYsIHBhcmVudCwgc3RyZWFtaWQpOworfQorCitzdGF0aWMgaW50IG5jX2RtYV9n ZXRfcmFuZ2Uoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgKnNpemUpCit7CisJc3RydWN0IGFjcGlf aW9ydF9ub2RlICpub2RlOworCXN0cnVjdCBhY3BpX2lvcnRfbmFtZWRfY29tcG9uZW50ICpuY29t cDsKKworCW5vZGUgPSBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9OQU1FRF9DT01QT05F TlQsCisJCQkgICAgICBpb3J0X21hdGNoX25vZGVfY2FsbGJhY2ssIGRldik7CisJaWYgKCFub2Rl KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5jb21wID0gKHN0cnVjdCBhY3BpX2lvcnRfbmFtZWRf Y29tcG9uZW50ICopbm9kZS0+bm9kZV9kYXRhOworCisJKnNpemUgPSBuY29tcC0+bWVtb3J5X2Fk ZHJlc3NfbGltaXQgPj0gNjQgPyBVNjRfTUFYIDoKKwkJCTFVTEw8PG5jb21wLT5tZW1vcnlfYWRk cmVzc19saW1pdDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlvcnRfZG1hX3NldHVwKCkg LSBTZXQtdXAgZGV2aWNlIERNQSBwYXJhbWV0ZXJzLgorICoKKyAqIEBkZXY6IGRldmljZSB0byBj b25maWd1cmUKKyAqIEBkbWFfYWRkcjogZGV2aWNlIERNQSBhZGRyZXNzIHJlc3VsdCBwb2ludGVy CisgKiBAc2l6ZTogRE1BIHJhbmdlIHNpemUgcmVzdWx0IHBvaW50ZXIKKyAqLwordm9pZCBpb3J0 X2RtYV9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCAqZG1hX2FkZHIsIHU2NCAqZG1hX3Np emUpCit7CisJdTY0IG1hc2ssIGRtYWFkZHIgPSAwLCBzaXplID0gMCwgb2Zmc2V0ID0gMDsKKwlp bnQgcmV0LCBtc2I7CisKKwkvKgorCSAqIFNldCBkZWZhdWx0IGNvaGVyZW50X2RtYV9tYXNrIHRv IDMyIGJpdC4gIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvCisJICogc2V0dXAgdGhlIGNvcnJlY3Qg c3VwcG9ydGVkIG1hc2suCisJICovCisJaWYgKCFkZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQlk ZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworCS8qCisJICogU2V0 IGl0IHRvIGNvaGVyZW50X2RtYV9tYXNrIGJ5IGRlZmF1bHQgaWYgdGhlIGFyY2hpdGVjdHVyZQor CSAqIGNvZGUgaGFzIG5vdCBzZXQgaXQuCisJICovCisJaWYgKCFkZXYtPmRtYV9tYXNrKQorCQlk ZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisKKwlzaXplID0gbWF4KGRl di0+Y29oZXJlbnRfZG1hX21hc2ssIGRldi0+Y29oZXJlbnRfZG1hX21hc2sgKyAxKTsKKworCWlm IChkZXZfaXNfcGNpKGRldikpCisJCXJldCA9IGFjcGlfZG1hX2dldF9yYW5nZShkZXYsICZkbWFh ZGRyLCAmb2Zmc2V0LCAmc2l6ZSk7CisJZWxzZQorCQlyZXQgPSBuY19kbWFfZ2V0X3JhbmdlKGRl diwgJnNpemUpOworCisJaWYgKCFyZXQpIHsKKwkJbXNiID0gZmxzNjQoZG1hYWRkciArIHNpemUg LSAxKTsKKwkJLyoKKwkJICogUm91bmQtdXAgdG8gdGhlIHBvd2VyLW9mLXR3byBtYXNrIG9yIHNl dAorCQkgKiB0aGUgbWFzayB0byB0aGUgd2hvbGUgNjQtYml0IGFkZHJlc3Mgc3BhY2UKKwkJICog aW4gY2FzZSB0aGUgRE1BIHJlZ2lvbiBjb3ZlcnMgdGhlIGZ1bGwKKwkJICogbWVtb3J5IHdpbmRv dy4KKwkJICovCisJCW1hc2sgPSBtc2IgPT0gNjQgPyBVNjRfTUFYIDogKDFVTEwgPDwgbXNiKSAt IDE7CisJCS8qCisJCSAqIExpbWl0IGNvaGVyZW50IGFuZCBkbWEgbWFzayBiYXNlZCBvbiBzaXpl CisJCSAqIHJldHJpZXZlZCBmcm9tIGZpcm13YXJlLgorCQkgKi8KKwkJZGV2LT5jb2hlcmVudF9k bWFfbWFzayA9IG1hc2s7CisJCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKKwl9CisKKwkqZG1hX2Fk ZHIgPSBkbWFhZGRyOworCSpkbWFfc2l6ZSA9IHNpemU7CisKKwlkZXYtPmRtYV9wZm5fb2Zmc2V0 ID0gUEZOX0RPV04ob2Zmc2V0KTsKKwlkZXZfZGJnKGRldiwgImRtYV9wZm5fb2Zmc2V0KCUjMDhs bHgpXG4iLCBvZmZzZXQpOworfQorCisvKioKKyAqIGlvcnRfaW9tbXVfY29uZmlndXJlIC0gU2V0 LXVwIElPTU1VIGNvbmZpZ3VyYXRpb24gZm9yIGEgZGV2aWNlLgorICoKKyAqIEBkZXY6IGRldmlj ZSB0byBjb25maWd1cmUKKyAqCisgKiBSZXR1cm5zOiBpb21tdV9vcHMgcG9pbnRlciBvbiBjb25m aWd1cmF0aW9uIHN1Y2Nlc3MKKyAqICAgICAgICAgIE5VTEwgb24gY29uZmlndXJhdGlvbiBmYWls dXJlCisgKi8KK2NvbnN0IHN0cnVjdCBpb21tdV9vcHMgKmlvcnRfaW9tbXVfY29uZmlndXJlKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUsICpwYXJl bnQ7CisJY29uc3Qgc3RydWN0IGlvbW11X29wcyAqb3BzOworCXUzMiBzdHJlYW1pZCA9IDA7CisJ aW50IGVyciA9IC1FTk9ERVY7CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgdHJhbnNsYXRlZCB0 aGUgZndzcGVjIHRoZXJlCisJICogaXMgbm90aGluZyBsZWZ0IHRvIGRvLCByZXR1cm4gdGhlIGlv bW11X29wcy4KKwkgKi8KKwlvcHMgPSBpb3J0X2Z3c3BlY19pb21tdV9vcHMoZGV2LT5pb21tdV9m d3NwZWMpOworCWlmIChvcHMpCisJCXJldHVybiBvcHM7CisKKwlpZiAoZGV2X2lzX3BjaShkZXYp KSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSB0b19wY2lfZGV2KGRldiktPmJ1czsKKwkJc3Ry dWN0IGlvcnRfcGNpX2FsaWFzX2luZm8gaW5mbyA9IHsgLmRldiA9IGRldiB9OworCisJCW5vZGUg PSBpb3J0X3NjYW5fbm9kZShBQ1BJX0lPUlRfTk9ERV9QQ0lfUk9PVF9DT01QTEVYLAorCQkJCSAg ICAgIGlvcnRfbWF0Y2hfbm9kZV9jYWxsYmFjaywgJmJ1cy0+ZGV2KTsKKwkJaWYgKCFub2RlKQor CQkJcmV0dXJuIE5VTEw7CisKKwkJaW5mby5ub2RlID0gbm9kZTsKKwkJZXJyID0gcGNpX2Zvcl9l YWNoX2RtYV9hbGlhcyh0b19wY2lfZGV2KGRldiksCisJCQkJCSAgICAgaW9ydF9wY2lfaW9tbXVf aW5pdCwgJmluZm8pOworCX0gZWxzZSB7CisJCWludCBpID0gMDsKKworCQlub2RlID0gaW9ydF9z Y2FuX25vZGUoQUNQSV9JT1JUX05PREVfTkFNRURfQ09NUE9ORU5ULAorCQkJCSAgICAgIGlvcnRf bWF0Y2hfbm9kZV9jYWxsYmFjaywgZGV2KTsKKwkJaWYgKCFub2RlKQorCQkJcmV0dXJuIE5VTEw7 CisKKwkJZG8geworCQkJcGFyZW50ID0gaW9ydF9ub2RlX21hcF9wbGF0Zm9ybV9pZChub2RlLCAm c3RyZWFtaWQsCisJCQkJCQkJICAgSU9SVF9JT01NVV9UWVBFLAorCQkJCQkJCSAgIGkrKyk7CisK KwkJCWlmIChwYXJlbnQpCisJCQkJZXJyID0gaW9ydF9pb21tdV94bGF0ZShkZXYsIHBhcmVudCwg c3RyZWFtaWQpOworCQl9IHdoaWxlIChwYXJlbnQgJiYgIWVycik7CisJfQorCisJLyoKKwkgKiBJ ZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIHRoZSBJT01NVSBkcml2ZXIgbWlzc2VkIHRoZSBp bml0aWFsCisJICogYWRkX2RldmljZSBjYWxsYmFjayBmb3IgZGV2LCByZXBsYXkgaXQgdG8gZ2V0 IHRoaW5ncyBpbiBvcmRlci4KKwkgKi8KKwlpZiAoIWVycikgeworCQlvcHMgPSBpb3J0X2Z3c3Bl Y19pb21tdV9vcHMoZGV2LT5pb21tdV9md3NwZWMpOworCQllcnIgPSBpb3J0X2FkZF9kZXZpY2Vf cmVwbGF5KG9wcywgZGV2KTsKKwl9CisKKwkvKiBJZ25vcmUgYWxsIG90aGVyIGVycm9ycyBhcGFy dCBmcm9tIEVQUk9CRV9ERUZFUiAqLworCWlmIChlcnIgPT0gLUVQUk9CRV9ERUZFUikgeworCQlv cHMgPSBFUlJfUFRSKGVycik7CisJfSBlbHNlIGlmIChlcnIpIHsKKwkJZGV2X2RiZyhkZXYsICJB ZGRpbmcgdG8gSU9NTVUgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJb3BzID0gTlVMTDsKKwl9CisK KwlyZXR1cm4gb3BzOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWNwaV9pb3J0X3JlZ2lzdGVy X2lycShpbnQgaHdpcnEsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgaW50IHRyaWdnZXIsCisJ CQkJCSAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJaW50IGlycSA9IGFjcGlfcmVnaXN0ZXJf Z3NpKE5VTEwsIGh3aXJxLCB0cmlnZ2VyLAorCQkJCSAgICBBQ1BJX0FDVElWRV9ISUdIKTsKKwor CWlmIChpcnEgPD0gMCkgeworCQlwcl9lcnIoImNvdWxkIG5vdCByZWdpc3RlciBnc2kgaHdpcnEg JWQgbmFtZSBbJXNdXG4iLCBod2lycSwKKwkJCQkJCQkJICAgICAgbmFtZSk7CisJCXJldHVybjsK Kwl9CisKKwlyZXMtPnN0YXJ0ID0gaXJxOworCXJlcy0+ZW5kID0gaXJxOworCXJlcy0+ZmxhZ3Mg PSBJT1JFU09VUkNFX0lSUTsKKwlyZXMtPm5hbWUgPSBuYW1lOworfQorCitzdGF0aWMgaW50IF9f aW5pdCBhcm1fc21tdV92M19jb3VudF9yZXNvdXJjZXMoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpu b2RlKQoreworCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqc21tdTsKKwkvKiBBbHdheXMgcHJl c2VudCBtZW0gcmVzb3VyY2UgKi8KKwlpbnQgbnVtX3JlcyA9IDE7CisKKwkvKiBSZXRyaWV2ZSBT TU1VdjMgc3BlY2lmaWMgZGF0YSAqLworCXNtbXUgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11X3Yz ICopbm9kZS0+bm9kZV9kYXRhOworCisJaWYgKHNtbXUtPmV2ZW50X2dzaXYpCisJCW51bV9yZXMr KzsKKworCWlmIChzbW11LT5wcmlfZ3NpdikKKwkJbnVtX3JlcysrOworCisJaWYgKHNtbXUtPmdl cnJfZ3NpdikKKwkJbnVtX3JlcysrOworCisJaWYgKHNtbXUtPnN5bmNfZ3NpdikKKwkJbnVtX3Jl cysrOworCisJcmV0dXJuIG51bV9yZXM7Cit9CisKK3N0YXRpYyBib29sIGFybV9zbW11X3YzX2lz X2NvbWJpbmVkX2lycShzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKnNtbXUpCit7CisJLyoKKwkg KiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90IHN1cHBvcnQgdW5p cXVlCisJICogaXJxIGxpbmUuIFVzZSBzaW5nbGUgaXJxIGxpbmUgZm9yIGFsbCB0aGUgU01NVXYz IGludGVycnVwdHMuCisJICovCisJaWYgKHNtbXUtPm1vZGVsICE9IEFDUElfSU9SVF9TTU1VX1Yz X0NBVklVTV9DTjk5WFgpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGh1bmRlclgyIGRv ZXNuJ3Qgc3VwcG9ydCBNU0lzIGZyb20gdGhlIFNNTVUsIHNvIHdlJ3JlIGNoZWNraW5nCisJICog U1BJIG51bWJlcnMgaGVyZS4KKwkgKi8KKwlyZXR1cm4gc21tdS0+ZXZlbnRfZ3NpdiA9PSBzbW11 LT5wcmlfZ3NpdiAmJgorCSAgICAgICBzbW11LT5ldmVudF9nc2l2ID09IHNtbXUtPmdlcnJfZ3Np diAmJgorCSAgICAgICBzbW11LT5ldmVudF9nc2l2ID09IHNtbXUtPnN5bmNfZ3NpdjsKK30KKwor c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJtX3NtbXVfdjNfcmVzb3VyY2Vfc2l6ZShzdHJ1Y3QgYWNw aV9pb3J0X3NtbXVfdjMgKnNtbXUpCit7CisJLyoKKwkgKiBPdmVycmlkZSB0aGUgc2l6ZSwgZm9y IENhdml1bSBUaHVuZGVyWDIgaW1wbGVtZW50YXRpb24KKwkgKiB3aGljaCBkb2Vzbid0IHN1cHBv cnQgdGhlIHBhZ2UgMSBTTU1VIHJlZ2lzdGVyIHNwYWNlLgorCSAqLworCWlmIChzbW11LT5tb2Rl bCA9PSBBQ1BJX0lPUlRfU01NVV9WM19DQVZJVU1fQ045OVhYKQorCQlyZXR1cm4gU1pfNjRLOwor CisJcmV0dXJuIFNaXzEyOEs7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1fc21tdV92M19p bml0X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkJICAgICAgc3RydWN0IGFj cGlfaW9ydF9ub2RlICpub2RlKQoreworCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqc21tdTsK KwlpbnQgbnVtX3JlcyA9IDA7CisKKwkvKiBSZXRyaWV2ZSBTTU1VdjMgc3BlY2lmaWMgZGF0YSAq LworCXNtbXUgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICopbm9kZS0+bm9kZV9kYXRhOwor CisJcmVzW251bV9yZXNdLnN0YXJ0ID0gc21tdS0+YmFzZV9hZGRyZXNzOworCXJlc1tudW1fcmVz XS5lbmQgPSBzbW11LT5iYXNlX2FkZHJlc3MgKworCQkJCWFybV9zbW11X3YzX3Jlc291cmNlX3Np emUoc21tdSkgLSAxOworCXJlc1tudW1fcmVzXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJ bnVtX3JlcysrOworCWlmIChhcm1fc21tdV92M19pc19jb21iaW5lZF9pcnEoc21tdSkpIHsKKwkJ aWYgKHNtbXUtPmV2ZW50X2dzaXYpCisJCQlhY3BpX2lvcnRfcmVnaXN0ZXJfaXJxKHNtbXUtPmV2 ZW50X2dzaXYsICJjb21iaW5lZCIsCisJCQkJCSAgICAgICBBQ1BJX0VER0VfU0VOU0lUSVZFLAor CQkJCQkgICAgICAgJnJlc1tudW1fcmVzKytdKTsKKwl9IGVsc2UgeworCisJCWlmIChzbW11LT5l dmVudF9nc2l2KQorCQkJYWNwaV9pb3J0X3JlZ2lzdGVyX2lycShzbW11LT5ldmVudF9nc2l2LCAi ZXZlbnRxIiwKKwkJCQkJICAgICAgIEFDUElfRURHRV9TRU5TSVRJVkUsCisJCQkJCSAgICAgICAm cmVzW251bV9yZXMrK10pOworCisJCWlmIChzbW11LT5wcmlfZ3NpdikKKwkJCWFjcGlfaW9ydF9y ZWdpc3Rlcl9pcnEoc21tdS0+cHJpX2dzaXYsICJwcmlxIiwKKwkJCQkJICAgICAgIEFDUElfRURH RV9TRU5TSVRJVkUsCisJCQkJCSAgICAgICAmcmVzW251bV9yZXMrK10pOworCisJCWlmIChzbW11 LT5nZXJyX2dzaXYpCisJCQlhY3BpX2lvcnRfcmVnaXN0ZXJfaXJxKHNtbXUtPmdlcnJfZ3Npdiwg ImdlcnJvciIsCisJCQkJCSAgICAgICBBQ1BJX0VER0VfU0VOU0lUSVZFLAorCQkJCQkgICAgICAg JnJlc1tudW1fcmVzKytdKTsKKworCQlpZiAoc21tdS0+c3luY19nc2l2KQorCQkJYWNwaV9pb3J0 X3JlZ2lzdGVyX2lycShzbW11LT5zeW5jX2dzaXYsICJjbWRxLXN5bmMiLAorCQkJCQkgICAgICAg QUNQSV9FREdFX1NFTlNJVElWRSwKKwkJCQkJICAgICAgICZyZXNbbnVtX3JlcysrXSk7CisJfQor fQorCitzdGF0aWMgYm9vbCBfX2luaXQgYXJtX3NtbXVfdjNfaXNfY29oZXJlbnQoc3RydWN0IGFj cGlfaW9ydF9ub2RlICpub2RlKQoreworCXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqc21tdTsK KworCS8qIFJldHJpZXZlIFNNTVV2MyBzcGVjaWZpYyBkYXRhICovCisJc21tdSA9IChzdHJ1Y3Qg YWNwaV9pb3J0X3NtbXVfdjMgKilub2RlLT5ub2RlX2RhdGE7CisKKwlyZXR1cm4gc21tdS0+Zmxh Z3MgJiBBQ1BJX0lPUlRfU01NVV9WM19DT0hBQ0NfT1ZFUlJJREU7Cit9CisKKyNpZiBkZWZpbmVk KENPTkZJR19BQ1BJX05VTUEpICYmIGRlZmluZWQoQUNQSV9JT1JUX1NNTVVfVjNfUFhNX1ZBTElE KQorLyoKKyAqIHNldCBudW1hIHByb3hpbWl0eSBkb21haW4gZm9yIHNtbXV2MyBkZXZpY2UKKyAq Lworc3RhdGljIHZvaWQgIF9faW5pdCBhcm1fc21tdV92M19zZXRfcHJveGltaXR5KHN0cnVjdCBk ZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKQorewor CXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqc21tdTsKKworCXNtbXUgPSAoc3RydWN0IGFjcGlf aW9ydF9zbW11X3YzICopbm9kZS0+bm9kZV9kYXRhOworCWlmIChzbW11LT5mbGFncyAmIEFDUElf SU9SVF9TTU1VX1YzX1BYTV9WQUxJRCkgeworCQlzZXRfZGV2X25vZGUoZGV2LCBhY3BpX21hcF9w eG1fdG9fbm9kZShzbW11LT5weG0pKTsKKwkJcHJfaW5mbygiU01NVS12M1slbGx4XSBNYXBwZWQg dG8gUHJveGltaXR5IGRvbWFpbiAlZFxuIiwKKwkJCXNtbXUtPmJhc2VfYWRkcmVzcywKKwkJCXNt bXUtPnB4bSk7CisJfQorfQorI2Vsc2UKKyNkZWZpbmUgYXJtX3NtbXVfdjNfc2V0X3Byb3hpbWl0 eSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgYXJtX3NtbXVfY291bnRfcmVzb3Vy Y2VzKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgYWNwaV9pb3J0X3Nt bXUgKnNtbXU7CisKKwkvKiBSZXRyaWV2ZSBTTU1VIHNwZWNpZmljIGRhdGEgKi8KKwlzbW11ID0g KHN0cnVjdCBhY3BpX2lvcnRfc21tdSAqKW5vZGUtPm5vZGVfZGF0YTsKKworCS8qCisJICogT25s eSBjb25zaWRlciB0aGUgZ2xvYmFsIGZhdWx0IGludGVycnVwdCBhbmQgaWdub3JlIHRoZQorCSAq IGNvbmZpZ3VyYXRpb24gYWNjZXNzIGludGVycnVwdC4KKwkgKgorCSAqIE1NSU8gYWRkcmVzcyBh bmQgZ2xvYmFsIGZhdWx0IGludGVycnVwdCByZXNvdXJjZXMgYXJlIGFsd2F5cworCSAqIHByZXNl bnQgc28gYWRkIHRoZW0gdG8gdGhlIGNvbnRleHQgaW50ZXJydXB0IGNvdW50IGFzIGEgc3RhdGlj CisJICogdmFsdWUuCisJICovCisJcmV0dXJuIHNtbXUtPmNvbnRleHRfaW50ZXJydXB0X2NvdW50 ICsgMjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGFybV9zbW11X2luaXRfcmVzb3VyY2VzKHN0 cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCQkgICBzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUp Cit7CisJc3RydWN0IGFjcGlfaW9ydF9zbW11ICpzbW11OworCWludCBpLCBod19pcnEsIHRyaWdn ZXIsIG51bV9yZXMgPSAwOworCXU2NCAqY3R4X2lycSwgKmdsYl9pcnE7CisKKwkvKiBSZXRyaWV2 ZSBTTU1VIHNwZWNpZmljIGRhdGEgKi8KKwlzbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdSAq KW5vZGUtPm5vZGVfZGF0YTsKKworCXJlc1tudW1fcmVzXS5zdGFydCA9IHNtbXUtPmJhc2VfYWRk cmVzczsKKwlyZXNbbnVtX3Jlc10uZW5kID0gc21tdS0+YmFzZV9hZGRyZXNzICsgc21tdS0+c3Bh biAtIDE7CisJcmVzW251bV9yZXNdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJbnVtX3Jlcysr OworCisJZ2xiX2lycSA9IEFDUElfQUREX1BUUih1NjQsIG5vZGUsIHNtbXUtPmdsb2JhbF9pbnRl cnJ1cHRfb2Zmc2V0KTsKKwkvKiBHbG9iYWwgSVJRcyAqLworCWh3X2lycSA9IElPUlRfSVJRX01B U0soZ2xiX2lycVswXSk7CisJdHJpZ2dlciA9IElPUlRfSVJRX1RSSUdHRVJfTUFTSyhnbGJfaXJx WzBdKTsKKworCWFjcGlfaW9ydF9yZWdpc3Rlcl9pcnEoaHdfaXJxLCAiYXJtLXNtbXUtZ2xvYmFs IiwgdHJpZ2dlciwKKwkJCQkgICAgICZyZXNbbnVtX3JlcysrXSk7CisKKwkvKiBDb250ZXh0IElS UXMgKi8KKwljdHhfaXJxID0gQUNQSV9BRERfUFRSKHU2NCwgbm9kZSwgc21tdS0+Y29udGV4dF9p bnRlcnJ1cHRfb2Zmc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc21tdS0+Y29udGV4dF9pbnRlcnJ1 cHRfY291bnQ7IGkrKykgeworCQlod19pcnEgPSBJT1JUX0lSUV9NQVNLKGN0eF9pcnFbaV0pOwor CQl0cmlnZ2VyID0gSU9SVF9JUlFfVFJJR0dFUl9NQVNLKGN0eF9pcnFbaV0pOworCisJCWFjcGlf aW9ydF9yZWdpc3Rlcl9pcnEoaHdfaXJxLCAiYXJtLXNtbXUtY29udGV4dCIsIHRyaWdnZXIsCisJ CQkJICAgICAgICZyZXNbbnVtX3JlcysrXSk7CisJfQorfQorCitzdGF0aWMgYm9vbCBfX2luaXQg YXJtX3NtbXVfaXNfY29oZXJlbnQoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKQoreworCXN0 cnVjdCBhY3BpX2lvcnRfc21tdSAqc21tdTsKKworCS8qIFJldHJpZXZlIFNNTVUgc3BlY2lmaWMg ZGF0YSAqLworCXNtbXUgPSAoc3RydWN0IGFjcGlfaW9ydF9zbW11ICopbm9kZS0+bm9kZV9kYXRh OworCisJcmV0dXJuIHNtbXUtPmZsYWdzICYgQUNQSV9JT1JUX1NNTVVfQ09IRVJFTlRfV0FMSzsK K30KKworc3RydWN0IGlvcnRfaW9tbXVfY29uZmlnIHsKKwljb25zdCBjaGFyICpuYW1lOworCWlu dCAoKmlvbW11X2luaXQpKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZSk7CisJYm9vbCAoKmlv bW11X2lzX2NvaGVyZW50KShzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUpOworCWludCAoKmlv bW11X2NvdW50X3Jlc291cmNlcykoc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKTsKKwl2b2lk ICgqaW9tbXVfaW5pdF9yZXNvdXJjZXMpKHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgICAg c3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2RlKTsKKwl2b2lkICgqaW9tbXVfc2V0X3Byb3hpbWl0 eSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5v ZGUpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpb3J0X2lvbW11X2NvbmZpZyBpb3J0X2Fy bV9zbW11X3YzX2NmZyBfX2luaXRjb25zdCA9IHsKKwkubmFtZSA9ICJhcm0tc21tdS12MyIsCisJ LmlvbW11X2lzX2NvaGVyZW50ID0gYXJtX3NtbXVfdjNfaXNfY29oZXJlbnQsCisJLmlvbW11X2Nv dW50X3Jlc291cmNlcyA9IGFybV9zbW11X3YzX2NvdW50X3Jlc291cmNlcywKKwkuaW9tbXVfaW5p dF9yZXNvdXJjZXMgPSBhcm1fc21tdV92M19pbml0X3Jlc291cmNlcywKKwkuaW9tbXVfc2V0X3By b3hpbWl0eSA9IGFybV9zbW11X3YzX3NldF9wcm94aW1pdHksCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGlvcnRfaW9tbXVfY29uZmlnIGlvcnRfYXJtX3NtbXVfY2ZnIF9faW5pdGNvbnN0ID0g eworCS5uYW1lID0gImFybS1zbW11IiwKKwkuaW9tbXVfaXNfY29oZXJlbnQgPSBhcm1fc21tdV9p c19jb2hlcmVudCwKKwkuaW9tbXVfY291bnRfcmVzb3VyY2VzID0gYXJtX3NtbXVfY291bnRfcmVz b3VyY2VzLAorCS5pb21tdV9pbml0X3Jlc291cmNlcyA9IGFybV9zbW11X2luaXRfcmVzb3VyY2Vz Cit9OworCitzdGF0aWMgX19pbml0Citjb25zdCBzdHJ1Y3QgaW9ydF9pb21tdV9jb25maWcgKmlv cnRfZ2V0X2lvbW11X2NmZyhzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKm5vZGUpCit7CisJc3dpdGNo IChub2RlLT50eXBlKSB7CisJY2FzZSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzOgorCQlyZXR1cm4g JmlvcnRfYXJtX3NtbXVfdjNfY2ZnOworCWNhc2UgQUNQSV9JT1JUX05PREVfU01NVToKKwkJcmV0 dXJuICZpb3J0X2FybV9zbW11X2NmZzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9 CisKKy8qKgorICogaW9ydF9hZGRfc21tdV9wbGF0Zm9ybV9kZXZpY2UoKSAtIEFsbG9jYXRlIGEg cGxhdGZvcm0gZGV2aWNlIGZvciBTTU1VCisgKiBAbm9kZTogUG9pbnRlciB0byBTTU1VIEFDUEkg SU9SVCBub2RlCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCA8MCBmYWlsdXJlCisgKi8K K3N0YXRpYyBpbnQgX19pbml0IGlvcnRfYWRkX3NtbXVfcGxhdGZvcm1fZGV2aWNlKHN0cnVjdCBh Y3BpX2lvcnRfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlOwor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCWVu dW0gZGV2X2RtYV9hdHRyIGF0dHI7CisJaW50IHJldCwgY291bnQ7CisJY29uc3Qgc3RydWN0IGlv cnRfaW9tbXVfY29uZmlnICpvcHMgPSBpb3J0X2dldF9pb21tdV9jZmcobm9kZSk7CisKKwlpZiAo IW9wcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9j KG9wcy0+bmFtZSwgUExBVEZPUk1fREVWSURfQVVUTyk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4g LUVOT01FTTsKKworCWlmIChvcHMtPmlvbW11X3NldF9wcm94aW1pdHkpCisJCW9wcy0+aW9tbXVf c2V0X3Byb3hpbWl0eSgmcGRldi0+ZGV2LCBub2RlKTsKKworCWNvdW50ID0gb3BzLT5pb21tdV9j b3VudF9yZXNvdXJjZXMobm9kZSk7CisKKwlyID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9mKCpyKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZGV2X3B1 dDsKKwl9CisKKwlvcHMtPmlvbW11X2luaXRfcmVzb3VyY2VzKHIsIG5vZGUpOworCisJcmV0ID0g cGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgciwgY291bnQpOworCS8qCisJICog UmVzb3VyY2VzIGFyZSBkdXBsaWNhdGVkIGluIHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2Vz LAorCSAqIGZyZWUgdGhlaXIgYWxsb2NhdGVkIG1lbW9yeQorCSAqLworCWtmcmVlKHIpOworCisJ aWYgKHJldCkKKwkJZ290byBkZXZfcHV0OworCisJLyoKKwkgKiBBZGQgYSBjb3B5IG9mIElPUlQg bm9kZSBwb2ludGVyIHRvIHBsYXRmb3JtX2RhdGEgdG8KKwkgKiBiZSB1c2VkIHRvIHJldHJpZXZl IElPUlQgZGF0YSBpbmZvcm1hdGlvbi4KKwkgKi8KKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRk X2RhdGEocGRldiwgJm5vZGUsIHNpemVvZihub2RlKSk7CisJaWYgKHJldCkKKwkJZ290byBkZXZf cHV0OworCisJLyoKKwkgKiBXZSBleHBlY3QgdGhlIGRtYSBtYXNrcyB0byBiZSBlcXVpdmFsZW50 IGZvcgorCSAqIGFsbCBTTU1VcyBzZXQtdXBzCisJICovCisJcGRldi0+ZGV2LmRtYV9tYXNrID0g JnBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzazsKKworCWZ3bm9kZSA9IGlvcnRfZ2V0X2Z3bm9k ZShub2RlKTsKKworCWlmICghZndub2RlKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZGV2 X3B1dDsKKwl9CisKKwlwZGV2LT5kZXYuZndub2RlID0gZndub2RlOworCisJYXR0ciA9IG9wcy0+ aW9tbXVfaXNfY29oZXJlbnQobm9kZSkgPworCQkJICAgICBERVZfRE1BX0NPSEVSRU5UIDogREVW X0RNQV9OT05fQ09IRVJFTlQ7CisKKwkvKiBDb25maWd1cmUgRE1BIGZvciB0aGUgcGFnZSB0YWJs ZSB3YWxrZXIgKi8KKwlhY3BpX2RtYV9jb25maWd1cmUoJnBkZXYtPmRldiwgYXR0cik7CisKKwly ZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZG1hX2Rl Y29uZmlndXJlOworCisJcmV0dXJuIDA7CisKK2RtYV9kZWNvbmZpZ3VyZToKKwlhY3BpX2RtYV9k ZWNvbmZpZ3VyZSgmcGRldi0+ZGV2KTsKK2Rldl9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChw ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCBpb3J0X2VuYWJs ZV9hY3Moc3RydWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGUpCit7CisJaWYgKGlvcnRfbm9k ZS0+dHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9QQ0lfUk9PVF9DT01QTEVYKSB7CisJCXN0cnVjdCBh Y3BpX2lvcnRfbm9kZSAqcGFyZW50OworCQlzdHJ1Y3QgYWNwaV9pb3J0X2lkX21hcHBpbmcgKm1h cDsKKwkJaW50IGk7CisKKwkJbWFwID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfaWRf bWFwcGluZywgaW9ydF9ub2RlLAorCQkJCSAgIGlvcnRfbm9kZS0+bWFwcGluZ19vZmZzZXQpOwor CisJCWZvciAoaSA9IDA7IGkgPCBpb3J0X25vZGUtPm1hcHBpbmdfY291bnQ7IGkrKywgbWFwKysp IHsKKwkJCWlmICghbWFwLT5vdXRwdXRfcmVmZXJlbmNlKQorCQkJCWNvbnRpbnVlOworCisJCQlw YXJlbnQgPSBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfaW9ydF9ub2RlLAorCQkJCQlpb3J0X3Rh YmxlLCAgbWFwLT5vdXRwdXRfcmVmZXJlbmNlKTsKKwkJCS8qCisJCQkgKiBJZiB3ZSBkZXRlY3Qg YSBSQy0+U01NVSBtYXBwaW5nLCBtYWtlIHN1cmUKKwkJCSAqIHdlIGVuYWJsZSBBQ1Mgb24gdGhl IHN5c3RlbS4KKwkJCSAqLworCQkJaWYgKChwYXJlbnQtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVf U01NVSkgfHwKKwkJCQkocGFyZW50LT50eXBlID09IEFDUElfSU9SVF9OT0RFX1NNTVVfVjMpKSB7 CisJCQkJcGNpX3JlcXVlc3RfYWNzKCk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwl9 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpb3J0X2luaXRfcGxh dGZvcm1fZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2Rl LCAqaW9ydF9lbmQ7CisJc3RydWN0IGFjcGlfdGFibGVfaW9ydCAqaW9ydDsKKwlzdHJ1Y3QgZndu b2RlX2hhbmRsZSAqZndub2RlOworCWludCBpLCByZXQ7CisJYm9vbCBhY3NfZW5hYmxlZCA9IGZh bHNlOworCisJLyoKKwkgKiBpb3J0X3RhYmxlIGFuZCBpb3J0IGJvdGggcG9pbnQgdG8gdGhlIHN0 YXJ0IG9mIElPUlQgdGFibGUsIGJ1dAorCSAqIGhhdmUgZGlmZmVyZW50IHN0cnVjdCB0eXBlcwor CSAqLworCWlvcnQgPSAoc3RydWN0IGFjcGlfdGFibGVfaW9ydCAqKWlvcnRfdGFibGU7CisKKwkv KiBHZXQgdGhlIGZpcnN0IElPUlQgbm9kZSAqLworCWlvcnRfbm9kZSA9IEFDUElfQUREX1BUUihz dHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnQsCisJCQkJIGlvcnQtPm5vZGVfb2Zmc2V0KTsKKwlp b3J0X2VuZCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnQsCisJCQkJ aW9ydF90YWJsZS0+bGVuZ3RoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpb3J0LT5ub2RlX2NvdW50 OyBpKyspIHsKKwkJaWYgKGlvcnRfbm9kZSA+PSBpb3J0X2VuZCkgeworCQkJcHJfZXJyKCJpb3J0 IG5vZGUgcG9pbnRlciBvdmVyZmxvd3MsIGJhZCB0YWJsZVxuIik7CisJCQlyZXR1cm47CisJCX0K KworCQlpZiAoIWFjc19lbmFibGVkKQorCQkJYWNzX2VuYWJsZWQgPSBpb3J0X2VuYWJsZV9hY3Mo aW9ydF9ub2RlKTsKKworCQlpZiAoKGlvcnRfbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9T TU1VKSB8fAorCQkJKGlvcnRfbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRfTk9ERV9TTU1VX1YzKSkg eworCisJCQlmd25vZGUgPSBhY3BpX2FsbG9jX2Z3bm9kZV9zdGF0aWMoKTsKKwkJCWlmICghZndu b2RlKQorCQkJCXJldHVybjsKKworCQkJaW9ydF9zZXRfZndub2RlKGlvcnRfbm9kZSwgZndub2Rl KTsKKworCQkJcmV0ID0gaW9ydF9hZGRfc21tdV9wbGF0Zm9ybV9kZXZpY2UoaW9ydF9ub2RlKTsK KwkJCWlmIChyZXQpIHsKKwkJCQlpb3J0X2RlbGV0ZV9md25vZGUoaW9ydF9ub2RlKTsKKwkJCQlh Y3BpX2ZyZWVfZndub2RlX3N0YXRpYyhmd25vZGUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQor CisJCWlvcnRfbm9kZSA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUsIGlvcnRf bm9kZSwKKwkJCQkJIGlvcnRfbm9kZS0+bGVuZ3RoKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IGFj cGlfaW9ydF9pbml0KHZvaWQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0g YWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfSU9SVCwgMCwgJmlvcnRfdGFibGUpOworCWlmIChBQ1BJ X0ZBSUxVUkUoc3RhdHVzKSkgeworCQlpZiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkgeworCQkJ Y29uc3QgY2hhciAqbXNnID0gYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cyk7CisKKwkJCXBy X2VycigiRmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcbiIsIG1zZyk7CisJCX0KKworCQlyZXR1cm47 CisJfQorCisJaW9ydF9pbml0X3BsYXRmb3JtX2RldmljZXMoKTsKK30KZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL2FjcGkvYWNwaV9pb3J0LmggYi94ZW4vaW5jbHVkZS9hY3BpL2FjcGlfaW9ydC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjhkM2YwYmY4MDMKLS0tIC9k ZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS9hY3BpL2FjcGlfaW9ydC5oCkBAIC0wLDAgKzEsNTcg QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIFNlbWloYWxmCisgKglBdXRob3I6IFRvbWFz eiBOb3dpY2tpIDx0bkBzZW1paGFsZi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdp dGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24s IE1BIDAyMTExLTEzMDcgVVNBLgorICovCisKKyNpZm5kZWYgX19BQ1BJX0lPUlRfSF9fCisjZGVm aW5lIF9fQUNQSV9JT1JUX0hfXworCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUg PGxpbnV4L2Z3bm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgorCisjZGVmaW5l IElPUlRfSVJRX01BU0soaXJxKQkJKGlycSAmIDB4ZmZmZmZmZmZVTEwpCisjZGVmaW5lIElPUlRf SVJRX1RSSUdHRVJfTUFTSyhpcnEpCSgoaXJxID4+IDMyKSAmIDB4ZmZmZmZmZmZVTEwpCisKK2lu dCBpb3J0X3JlZ2lzdGVyX2RvbWFpbl90b2tlbihpbnQgdHJhbnNfaWQsIHN0cnVjdCBmd25vZGVf aGFuZGxlICpmd19ub2RlKTsKK3ZvaWQgaW9ydF9kZXJlZ2lzdGVyX2RvbWFpbl90b2tlbihpbnQg dHJhbnNfaWQpOworc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlvcnRfZmluZF9kb21haW5fdG9rZW4o aW50IHRyYW5zX2lkKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9JT1JUCit2b2lkIGFjcGlfaW9ydF9p bml0KHZvaWQpOwordTMyIGlvcnRfbXNpX21hcF9yaWQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIg cmVxX2lkKTsKK3N0cnVjdCBpcnFfZG9tYWluICppb3J0X2dldF9kZXZpY2VfZG9tYWluKHN0cnVj dCBkZXZpY2UgKmRldiwgdTMyIHJlcV9pZCk7Cit2b2lkIGFjcGlfY29uZmlndXJlX3Btc2lfZG9t YWluKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgaW9ydF9wbXNpX2dldF9kZXZfaWQoc3RydWN0 IGRldmljZSAqZGV2LCB1MzIgKmRldl9pZCk7CisvKiBJT01NVSBpbnRlcmZhY2UgKi8KK3ZvaWQg aW9ydF9kbWFfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgKmRtYV9hZGRyLCB1NjQgKnNp emUpOworY29uc3Qgc3RydWN0IGlvbW11X29wcyAqaW9ydF9pb21tdV9jb25maWd1cmUoc3RydWN0 IGRldmljZSAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9pb3J0X2luaXQo dm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHUzMiBpb3J0X21zaV9tYXBfcmlkKHN0cnVjdCBkZXZp Y2UgKmRldiwgdTMyIHJlcV9pZCkKK3sgcmV0dXJuIHJlcV9pZDsgfQorc3RhdGljIGlubGluZSBz dHJ1Y3QgaXJxX2RvbWFpbiAqaW9ydF9nZXRfZGV2aWNlX2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpk ZXYsCisJCQkJCQkJdTMyIHJlcV9pZCkKK3sgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUg dm9pZCBhY3BpX2NvbmZpZ3VyZV9wbXNpX2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfQor LyogSU9NTVUgaW50ZXJmYWNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW9ydF9kbWFfc2V0dXAo c3RydWN0IGRldmljZSAqZGV2LCB1NjQgKmRtYV9hZGRyLAorCQkJCSAgdTY0ICpzaXplKSB7IH0K K3N0YXRpYyBpbmxpbmUKK2NvbnN0IHN0cnVjdCBpb21tdV9vcHMgKmlvcnRfaW9tbXVfY29uZmln dXJlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sgcmV0dXJuIE5VTEw7IH0KKyNlbmRpZgorCisjZW5k aWYgLyogX19BQ1BJX0lPUlRfSF9fICovCi0tIAoyLjE0LjEKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h aWxtYW4vbGlzdGluZm8veGVuLWRldmVs