Date: Sat, 6 Jun 2015 22:52:58 +0000 From: "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org> To: freebsd-arm@freebsd.org Subject: [Differential] [Updated, 2, 078 lines] D2378: Introduce ITS support for ARM64 Message-ID: <adb5d13ff260a628786bac2bb4d29cbf@localhost.localdomain> In-Reply-To: <differential-rev-PHID-DREV-xmqmcfafyun443233vly-req@FreeBSD.org> References: <differential-rev-PHID-DREV-xmqmcfafyun443233vly-req@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--b1_adb5d13ff260a628786bac2bb4d29cbf Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit zbb removed rS FreeBSD src repository as the repository for this revision. zbb updated this revision to Diff 5978. CHANGES SINCE LAST UPDATE https://reviews.freebsd.org/D2378?vs=5025&id=5978 REVISION DETAIL https://reviews.freebsd.org/D2378 AFFECTED FILES sys/arm64/arm64/gic_v3.c sys/arm64/arm64/gic_v3_fdt.c sys/arm64/arm64/gic_v3_its.c sys/arm64/arm64/gic_v3_reg.h sys/arm64/arm64/gic_v3_var.h sys/arm64/include/param.h sys/conf/files.arm64 EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: zbb, imp, ian, andrew, emaste, manpages Cc: gnn, kib, emaste, andrew, freebsd-arm-list, imp --b1_adb5d13ff260a628786bac2bb4d29cbf Content-Type: text/x-patch; charset=utf-8; name="D2378.5978.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D2378.5978.patch" ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg LTIyLDYgKzIyLDcgQEAKIGFybTY0L2FybTY0L2dpYy5jCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQv Z2ljX3YzLmMJCXN0YW5kYXJkCiBhcm02NC9hcm02NC9naWNfdjNfZmR0LmMJb3B0aW9uYWwJZmR0 Cithcm02NC9hcm02NC9naWNfdjNfaXRzLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1 LmMJCXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQv YXJtNjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMv YXJtNjQvaW5jbHVkZS9wYXJhbS5oIGIvc3lzL2FybTY0L2luY2x1ZGUvcGFyYW0uaAotLS0gYS9z eXMvYXJtNjQvaW5jbHVkZS9wYXJhbS5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL3BhcmFtLmgK QEAgLTgyLDYgKzgyLDEwIEBACiAjZGVmaW5lCVBBR0VfU0laRQkoMSA8PCBQQUdFX1NISUZUKQkv KiBQYWdlIHNpemUgKi8KICNkZWZpbmUJUEFHRV9NQVNLCShQQUdFX1NJWkUgLSAxKQogCisjZGVm aW5lCVBBR0VfU0hJRlRfMTZLCTE0CisjZGVmaW5lCVBBR0VfU0laRV8xNksJKDEgPDwgUEFHRV9T SElGVF8xNkspCisjZGVmaW5lCVBBR0VfTUFTS18xNksJKFBBR0VfU0laRV8xNksgLSAxKQorCiAj ZGVmaW5lCVBBR0VfU0hJRlRfNjRLCTE2CiAjZGVmaW5lCVBBR0VfU0laRV82NEsJKDEgPDwgUEFH RV9TSElGVF82NEspCiAjZGVmaW5lCVBBR0VfTUFTS182NEsJKFBBR0VfU0laRV82NEsgLSAxKQpk aWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaCBiL3N5cy9hcm02NC9hcm02 NC9naWNfdjNfdmFyLmgKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaAorKysgYi9z eXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5oCkBAIC0zNiw2ICszNiwxNyBAQAogCiBERUNMQVJF X0NMQVNTKGdpY192M19kcml2ZXIpOwogCisjZGVmaW5lCUxQSV9GTEFHU19DT05GX0ZMVVNICSgx VUwgPDwgMCkKKyNkZWZpbmUJTFBJX0NPTkZUQUJfU0laRQlQQUdFX1NJWkVfNjRLCisvKiAxIGJp dCBwZXIgTFBJICsgMSBLQiBtb3JlIGZvciB0aGUgb2JsaWdhdG9yeSBQUEksIFNHSSwgU1BJIHN0 dWZmICovCisjZGVmaW5lCUxQSV9QRU5EVEFCX1NJWkUJKChMUElfQ09ORlRBQl9TSVpFIC8gOCkg KyAweDQwMCkKKworc3RydWN0IHJlZGlzdF9scGlzIHsKKwl2bV9vZmZzZXRfdAkJY29uZl9iYXNl OworCXZtX29mZnNldF90CQlwZW5kX2Jhc2VbTUFYQ1BVXTsKKwl1aW50NjRfdAkJZmxhZ3M7Cit9 OworCiBzdHJ1Y3QgZ2ljX3JlZGlzdHMgewogCS8qCiAJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9u IGRlc2NyaXB0aW9uLgpAQCAtNDcsNiArNTgsOCBAQAogCXVfaW50CQkJbnJlZ2lvbnM7CiAJLyog UGVyLUNQVSBSZS1EaXN0cmlidXRvciBoYW5kbGVyICovCiAJc3RydWN0IHJlc291cmNlICoJcGNw dVtNQVhDUFVdOworCS8qIExQSXMgZGF0YSAqLworCXN0cnVjdCByZWRpc3RfbHBpcwlscGlzOwog fTsKIAogc3RydWN0IGdpY192M19zb2Z0YyB7CkBAIC03MSw2ICs4NCwxNjcgQEAKIGludCBnaWNf djNfZGV0YWNoKGRldmljZV90IGRldik7CiAKIC8qCisgKiBJVFMKKyAqLworI2RlZmluZQlHSUNf VjNfSVRTX0RFVlNUUgkiQVJNIEdJQyBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gU2VydmljZSIKKyNk ZWZpbmUJR0lDX1YzX0lUU19DT01QU1RSCSJhcm0sZ2ljLXYzLWl0cyIKKworREVDTEFSRV9DTEFT UyhnaWNfdjNfaXRzX2RyaXZlcik7CisKKy8qIExQSSBjaHVuayBvd25lZCBieSBJVFMgZGV2aWNl ICovCitzdHJ1Y3QgbHBpX2NodW5rIHsKKwl1X2ludAlscGlfYmFzZTsKKwl1X2ludAlscGlfbnVt OworCXVfaW50CWxwaV9mcmVlOwkvKiBGaXJzdCBmcmVlIExQSSBpbiBzZXQgKi8KK307CisKKy8q IElUUyBkZXZpY2UgKi8KK3N0cnVjdCBpdHNfZGV2IHsKKwlUQUlMUV9FTlRSWShpdHNfZGV2KQll bnRyeTsKKwkvKiBQQ0kgZGV2aWNlICovCisJZGV2aWNlX3QJCXBjaV9kZXY7CisJLyogRGV2aWNl IElEIChpLmUuIFBDSSBkZXZpY2UgSUQpICovCisJdWludDMyX3QJCWRldmlkOworCS8qIExpc3Qg b2YgYXNzaWduZWQgTFBJcyAqLworCXN0cnVjdCBscGlfY2h1bmsJbHBpczsKKwkvKiBWaXJ0dWFs IGFkZHJlc3Mgb2YgSVRUICovCisJdm1fb2Zmc2V0X3QJCWl0dDsKKwkvKiBJbnRlcnJ1cHQgY29s bGVjdGlvbiAqLworCXN0cnVjdCBpdHNfY29sICoJY29sOworfTsKK1RBSUxRX0hFQUQoaXRzX2Rl dl9saXN0LCBpdHNfZGV2KTsKKworLyogSVRTIHByaXZhdGUgdGFibGUgZGVzY3JpcHRpb24gKi8K K3N0cnVjdCBpdHNfcHRhYiB7CisJdm1fb2Zmc2V0X3QJcHRhYl92YWRkcjsJLyogVmlydHVhbCBB ZGRyZXNzIG9mIHRhYmxlICovCisJc2l6ZV90CQlwdGFiX3Bnc3o7CS8qIFBhZ2Ugc2l6ZSAqLwor CXNpemVfdAkJcHRhYl9ucGFnZXM7CS8qIE51bWJlciBvZiBwYWdlcyAqLworfTsKKworLyogSVRT IGNvbGxlY3Rpb24gZGVzY3JpcHRpb24uICovCitzdHJ1Y3QgaXRzX2NvbCB7CisJdWludDY0X3QJ Y29sX3RhcmdldDsJLyogVGFyZ2V0IFJlLURpc3RyaWJ1dG9yICovCisJdWludDY0X3QJY29sX2lk OwkJLyogQ29sbGVjdGlvbiBJRCAqLworfTsKKworLyogSVRTIGNvbW1hbmQuIEVhY2ggY29tbWFu ZCBpcyAzMiBieXRlcyBsb25nICovCitzdHJ1Y3QgaXRzX2NtZCB7CisJdWludDY0X3QJY21kX2R3 b3JkWzRdOwkvKiBJVFMgY29tbWFuZCBkb3VibGUgd29yZCAqLworfTsKKworLyogSVRTIGNvbW1h bmRzIGVuY29kaW5nICovCisjZGVmaW5lCUlUU19DTURfU1lOQwkJKDB4MDUpCisjZGVmaW5lCUlU U19DTURfTUFQRAkJKDB4MDgpCisjZGVmaW5lCUlUU19DTURfTUFQQwkJKDB4MDkpCisjZGVmaW5l CUlUU19DTURfTUFQVkkJCSgweDBhKQorI2RlZmluZQlJVFNfQ01EX01BUEkJCSgweDBiKQorI2Rl ZmluZQlJVFNfQ01EX0lOVgkJKDB4MGMpCisjZGVmaW5lCUlUU19DTURfSU5WQUxMCQkoMHgwZCkK Ky8qIENvbW1hbmQgKi8KKyNkZWZpbmUJQ01EX0NPTU1BTkRfTUFTSwkoMHhGRlVMKQorLyogUENJ IGRldmljZSBJRCAqLworI2RlZmluZQlDTURfREVWSURfU0hJRlQJCSgzMikKKyNkZWZpbmUJQ01E X0RFVklEX01BU0sJCSgweEZGRkZGRkZGVUwgPDwgQ01EX0RFVklEX1NISUZUKQorLyogU2l6ZSBv ZiBJUlEgSUQgYml0ZmllbGQgKi8KKyNkZWZpbmUJQ01EX1NJWkVfTUFTSwkJKDB4RkZVTCkKKy8q IFZpcnR1YWwgTFBJIElEICovCisjZGVmaW5lCUNNRF9JRF9NQVNLCQkoMHhGRkZGRkZGRlVMKQor LyogUGh5c2ljYWwgTFBJIElEICovCisjZGVmaW5lCUNNRF9QSURfU0hJRlQJCSgzMikKKyNkZWZp bmUJQ01EX1BJRF9NQVNLCQkoMHhGRkZGRkZGRlVMIDw8IENNRF9QSURfU0hJRlQpCisvKiBDb2xs ZWN0aW9uICovCisjZGVmaW5lCUNNRF9DT0xfTUFTSwkJKDB4RkZGRlVMKQorLyogVGFyZ2V0IChD UFUgb3IgUmUtRGlzdHJpYnV0b3IpICovCisjZGVmaW5lCUNNRF9UQVJHRVRfU0hJRlQJKDE2KQor I2RlZmluZQlDTURfVEFSR0VUX01BU0sJCSgweEZGRkZGRkZGVUwgPDwgQ01EX1RBUkdFVF9TSElG VCkKKy8qIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSBhZGRyZXNzICovCisjZGVmaW5lCUNN RF9JVFRfTUFTSwkJKDB4RkZGRkZGRkZGRjAwVUwpCisvKiBWYWxpZCBjb21tYW5kIGJpdCAqLwor I2RlZmluZQlDTURfVkFMSURfU0hJRlQJCSg2MykKKyNkZWZpbmUJQ01EX1ZBTElEX01BU0sJCSgx VUwgPDwgQ01EX1ZBTElEX1NISUZUKQorCisvKgorICogSVRTIGNvbW1hbmQgZGVzY3JpcHRvci4K KyAqIElkZWEgZm9yIGNvbW1hbmQgZGVzY3JpcHRpb24gcGFzc2luZyB0YWtlbiBmcm9tIExpbnV4 LgorICovCitzdHJ1Y3QgaXRzX2NtZF9kZXNjIHsKKwl1aW50OF90IGNtZF90eXBlOworCisJdW5p b24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19jb2wgKmNvbDsKKwkJfSBjbWRfZGVzY19z eW5jOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2NvbCAqY29sOworCQkJdWludDhfdCB2 YWxpZDsKKwkJfSBjbWRfZGVzY19tYXBjOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2Rl diAqaXRzX2RldjsKKwkJCXVpbnQzMl90IHBpZDsKKwkJCXVpbnQzMl90IGlkOworCQl9IGNtZF9k ZXNjX21hcHZpOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwkJ CXVpbnQzMl90IGxwaW51bTsKKwkJfSBjbWRfZGVzY19tYXBpOworCisJCXN0cnVjdCB7CisJCQlz dHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwkJCXVpbnQ4X3QgdmFsaWQ7CisJCX0gY21kX2Rlc2Nf bWFwZDsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19kZXYgKml0c19kZXY7CisJCQl1aW50 MzJfdCBscGludW07CisJCX0gY21kX2Rlc2NfaW52OworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qg aXRzX2NvbCAqY29sOworCQl9IGNtZF9kZXNjX2ludmFsbDsKKwl9OworfTsKKworI2RlZmluZQlJ VFNfQ01EUV9TSVpFCQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUlUU19DTURRX05FTlRSSUVTCShJ VFNfQ01EUV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBpdHNfY21kKSkKKworI2RlZmluZQlJVFNfRkxB R1NfQ01EUV9GTFVTSAkoMVVMIDw8IDApCisKKyNkZWZpbmUJSVRTX1RBUkdFVF9OT05FCQkweEZC QURCRUVGCisKK3N0cnVjdCBnaWNfdjNfaXRzX3NvZnRjIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0 cnVjdCByZXNvdXJjZQkqCWl0c19yZXM7CisKKwlzdHJ1Y3QgaXRzX2NtZCAqCWl0c19jbWRxX2Jh c2U7CS8qIElUUyBjb21tYW5kIHF1ZXVlIGJhc2UgKi8KKwlzdHJ1Y3QgaXRzX2NtZCAqCWl0c19j bWRxX3dyaXRlOwkvKiBJVFMgY29tbWFuZCBxdWV1ZSB3cml0ZSBwdHIgKi8KKwlzdHJ1Y3QgaXRz X3B0YWIJCWl0c19wdGFic1tHSVRTX0JBU0VSX05VTV07LyogSVRTIHByaXZhdGUgdGFibGVzICov CisJc3RydWN0IGl0c19jb2wgKglpdHNfY29sczsJLyogUGVyLUNQVSBjb2xsZWN0aW9ucyAqLwor CisJdWludDY0X3QJCWl0c19mbGFnczsKKworCXN0cnVjdCBpdHNfZGV2X2xpc3QJaXRzX2Rldl9s aXN0OworCisJdW5zaWduZWQgbG9uZyAqCQlpdHNfbHBpX2JpdG1hcDsKKwl1aW50MzJfdAkJaXRz X2xwaV9tYXhpZDsKKworCXN0cnVjdCBtdHgJCWl0c19tdHg7CisJc3RydWN0IG10eAkJaXRzX3Nw aW5fbXR4OworfTsKKworZXh0ZXJuIGRldmNsYXNzX3QgZ2ljX3YzX2l0c19kZXZjbGFzczsKKwor aW50IGdpY192M19pdHNfZGV0YWNoKGRldmljZV90KTsKKworaW50IGdpY192M19pdHNfYWxsb2Nf bXNpeChkZXZpY2VfdCwgZGV2aWNlX3QsIGludCAqKTsKK2ludCBnaWNfdjNfaXRzX2FsbG9jX21z aShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwgaW50ICopOworaW50IGdpY192M19pdHNfbWFwX21z aXgoZGV2aWNlX3QsIGRldmljZV90LCBpbnQsIHVpbnQ2NF90ICosIHVpbnQzMl90ICopOworCit2 b2lkIGxwaV91bm1hc2tfaXJxKGRldmljZV90LCB1aW50MzJfdCk7Cit2b2lkIGxwaV9tYXNrX2ly cShkZXZpY2VfdCwgdWludDMyX3QpOworLyoKICAqIEdJQyBEaXN0cmlidXRvciBhY2Nlc3NvcnMu CiAgKiBOb3RpY2UgdGhhdCBvbmx5IEdJQyBzb2ZjIGNhbiBiZSBwYXNzZWQuCiAgKi8KQEAgLTEw Myw0ICsyNzcsMjggQEAKIAkgICAgcmVnLCB2YWwpOwkJCQlcCiB9KQogCisjZGVmaW5lCVBDSV9E RVZJRChwY2lfZGV2KQkJCQlcCisoewkJCQkJCQlcCisJKCgocGNpX2dldF9kb21haW4ocGNpX2Rl dikgPj4gMikgPDwgMTkpIHwJXAorCSAoKHBjaV9nZXRfZG9tYWluKHBjaV9kZXYpICUgNCkgPDwg MTYpIHwJXAorCSAocGNpX2dldF9idXMocGNpX2RldikgPDwgOCkgfAkJCVwKKwkgKHBjaV9nZXRf c2xvdChwY2lfZGV2KSA8PCAzKSB8CQkJXAorCSAocGNpX2dldF9mdW5jdGlvbihwY2lfZGV2KSA8 PCAwKSk7CQlcCit9KQorCisvKgorICogUmVxdWVzdCBudW1iZXIgb2YgbWF4aW11bSBNU0ktWCB2 ZWN0b3JzIGZvciB0aGlzIGRldmljZS4KKyAqIERldmljZSBjYW4gYXNrIGZvciBsZXNzIHZlY3Rv cnMgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCBidXQgbm90IG1vcmUuCisgKi8KKyNkZWZpbmUJUENJ X01TSVhfTlVNKHBjaV9kZXYpCQkJXAorKHsJCQkJCQlcCisJc3RydWN0IHBjaV9kZXZpbmZvICpk aW5mbzsJCVwKKwlwY2ljZmdyZWdzICpjZmc7CQkJXAorCQkJCQkJXAorCWRpbmZvID0gZGV2aWNl X2dldF9pdmFycyhwY2lfZGV2KTsJXAorCWNmZyA9ICZkaW5mby0+Y2ZnOwkJCVwKKwkJCQkJCVwK KwljZmctPm1zaXgubXNpeF9tc2dudW07CQkJXAorfSkKKwogI2VuZGlmIC8qIF9HSUNfVjNfVkFS X0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oIGIvc3lzL2Fy bTY0L2FybTY0L2dpY192M19yZWcuaAotLS0gYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5o CisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKQEAgLTEwMSwxNyArMTAxLDEwMCBA QAogI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfR0lDdjQJKDB4NDApCiAKIC8qIFJlZGlzdHJpYnV0 b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lCUdJQ1JfQ1RMUgkJR0lDRF9DVExSCisjZGVmaW5lCQlH SUNSX0NUTFJfTFBJX0VOQUJMRQkoMSA8PCAwKQorCiAjZGVmaW5lCUdJQ1JfUElEUjIJCUdJQ0Rf UElEUjIKIAogI2RlZmluZQlHSUNSX1RZUEVSCQkoMHgwMDA4KQorI2RlZmluZQlHSUNSX1RZUEVS X1BMUElTCSgxIDw8IDApCiAjZGVmaW5lCUdJQ1JfVFlQRVJfVkxQSVMJKDEgPDwgMSkKICNkZWZp bmUJR0lDUl9UWVBFUl9MQVNUCQkoMSA8PCA0KQorI2RlZmluZQlHSUNSX1RZUEVSX0NQVU5VTV9T SElGVAkoOCkKKyNkZWZpbmUJR0lDUl9UWVBFUl9DUFVOVU1fTUFTSwkoMHhGRkZVTCA8PCBHSUNS X1RZUEVSX0NQVU5VTV9TSElGVCkKKyNkZWZpbmUJR0lDUl9UWVBFUl9DUFVOVU0oeCkJXAorCSAg ICAoKCh4KSAmIEdJQ1JfVFlQRVJfQ1BVTlVNX01BU0spID4+IEdJQ1JfVFlQRVJfQ1BVTlVNX1NI SUZUKQogI2RlZmluZQlHSUNSX1RZUEVSX0FGRl9TSElGVAkoMzIpCiAKICNkZWZpbmUJR0lDUl9X QUtFUgkJKDB4MDAxNCkKICNkZWZpbmUJR0lDUl9XQUtFUl9QUwkJKDEgPDwgMSkgLyogUHJvY2Vz c29yIHNsZWVwICovCiAjZGVmaW5lCUdJQ1JfV0FLRVJfQ0EJCSgxIDw8IDIpIC8qIENoaWxkcmVu IGFzbGVlcCAqLwogCisjZGVmaW5lCUdJQ1JfUFJPUEJBU0VSCQkoMHgwMDcwKQorI2RlZmluZQkJ R0lDUl9QUk9QQkFTRVJfSURCSVRTX01BU0sJMHgxRlVMCisvKgorICogQ2FjaGVhYmlsaXR5Cisg KiAweDAgLSBEZXZpY2UtbkduUm5FCisgKiAweDEgLSBOb3JtYWwgSW5uZXIgTm9uLWNhY2hlYWJs ZQorICogMHgyIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAq IDB4MyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDQgLSBO b3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NSAtIE5vcm1h bCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICogMHg2IC0gTm9ybWFsIElubmVy IFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDcgLSBO b3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAq LworI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVfU0hJRlQJNworI2RlZmluZQkJR0lDUl9Q Uk9QQkFTRVJfQ0FDSEVfRG5HblJuRQkweDBVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FD SEVfTklOCTB4MVVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9OSVJBV1QJMHgyVUwK KyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQgkweDNVTAorI2RlZmluZQkJR0lD Ul9QUk9QQkFTRVJfQ0FDSEVfTklXQVdUCTB4NFVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9D QUNIRV9OSVdBV0IJMHg1VUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQVdU CTB4NlVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9OSVJBV0FXQgkweDdVTAorCisv KgorICogU2hhcmVhYmlsaXR5CisgKiAweDAgLSBOb24tc2hhcmVhYmxlCisgKiAweDEgLSBJbm5l ci1zaGFyZWFibGUKKyAqIDB4MiAtIE91dGVyLXNoYXJlYWJsZQorICogMHgzIC0gUmVzZXJ2ZWQu IFRocmVhdGVkIGFzIDB4MAorICovCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9TSElG VAkxMAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfU0hBUkVfTlMJCTB4MFVMCisjZGVmaW5lCQlH SUNSX1BST1BCQVNFUl9TSEFSRV9JUwkJMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NI QVJFX09TCQkweDJVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfU0hBUkVfUkVTCTB4M1VMCisj ZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9NQVNLCVwKKwkJICAgICgweDNVTCA8PCBHSUNS X1BST1BCQVNFUl9TSEFSRV9TSElGVCkKKworI2RlZmluZQlHSUNSX1BFTkRCQVNFUgkJKDB4MDA3 OCkKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAqIDB4MCAtIERldmljZS1uR25SbkUKKyAqIDB4MSAt IE5vcm1hbCBJbm5lciBOb24tY2FjaGVhYmxlCisgKiAweDIgLSBOb3JtYWwgSW5uZXIgUmVhZC1h bGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHgzIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2Nh dGUsIFdyaXRlLWJhY2sKKyAqIDB4NCAtIE5vcm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3Jp dGUtdGhyb3VnaAorICogMHg1IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1i YWNrCisgKiAweDYgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUs IFdyaXRlLXRocm91Z2gKKyAqIDB4NyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0 ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICovCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNI RV9TSElGVAk3CisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9EbkduUm5FCTB4MFVMCisj ZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSU4JMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUEVO REJBU0VSX0NBQ0hFX05JUkFXVAkweDJVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfQ0FDSEVf TklSQVdCCTB4M1VMCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSVdBV1QJMHg0VUwK KyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JV0FXQgkweDVVTAorI2RlZmluZQkJR0lD Ul9QRU5EQkFTRVJfQ0FDSEVfTklSQVdBV1QJMHg2VUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VS X0NBQ0hFX05JUkFXQVdCCTB4N1VMCisKKy8qCisgKiBTaGFyZWFiaWxpdHkKKyAqIDB4MCAtIE5v bi1zaGFyZWFibGUKKyAqIDB4MSAtIElubmVyLXNoYXJlYWJsZQorICogMHgyIC0gT3V0ZXItc2hh cmVhYmxlCisgKiAweDMgLSBSZXNlcnZlZC4gVGhyZWF0ZWQgYXMgMHgwCisgKi8KKyNkZWZpbmUJ CUdJQ1JfUEVOREJBU0VSX1NIQVJFX1NISUZUCTEwCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9T SEFSRV9OUwkJMHgwVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX1NIQVJFX0lTCQkweDFVTAor I2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfT1MJCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BF TkRCQVNFUl9TSEFSRV9SRVMJMHgzVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX1NIQVJFX01B U0sJXAorCQkgICAgKDB4M1VMIDw8IEdJQ1JfUEVOREJBU0VSX1NIQVJFX1NISUZUKQorCiAvKiBS ZS1kaXN0cmlidXRvciByZWdpc3RlcnMgZm9yIFNHSXMgYW5kIFBQSXMgKi8KICNkZWZpbmUJR0lD Ul9SRF9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SwogI2RlZmluZQlHSUNSX1NHSV9CQVNFX1NJWkUJ UEFHRV9TSVpFXzY0SwpAQCAtMTI1LDYgKzIwOCwxNTEgQEAKIAogI2RlZmluZQkJR0lDUl9JX1BF Ul9JUFJJT1JJVFluCQkoR0lDRF9JX1BFUl9JUFJJT1JJVFluKQogCisvKiBJVFMgcmVnaXN0ZXJz ICovCisjZGVmaW5lCUdJVFNfUElEUjIJCUdJQ1JfUElEUjIKKyNkZWZpbmUJR0lUU19QSURSMl9B UkNIX01BU0sJR0lDUl9QSURSMl9BUkNIX01BU0sKKyNkZWZpbmUJR0lUU19QSURSMl9BUkNIX0dJ Q3YzCUdJQ1JfUElEUjJfQVJDSF9HSUN2MworI2RlZmluZQlHSVRTX1BJRFIyX0FSQ0hfR0lDdjQJ R0lDUl9QSURSMl9BUkNIX0dJQ3Y0CisKKyNkZWZpbmUJR0lUU19DVExSCQkoMHgwMDAwKQorI2Rl ZmluZQkJR0lUU19DVExSX0VOCSgxIDw8IDApCisKKyNkZWZpbmUJR0lUU19DQkFTRVIJCSgweDAw ODApCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9WQUxJRAkoMVVMIDw8IDYzKQorLyoKKyAqIENhY2hl YWJpbGl0eQorICogMHgwIC0gRGV2aWNlLW5HblJuRQorICogMHgxIC0gTm9ybWFsIElubmVyIE5v bi1jYWNoZWFibGUKKyAqIDB4MiAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS10 aHJvdWdoCisgKiAweDMgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYmFjawor ICogMHg0IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAw eDUgLSBOb3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NiAtIE5v cm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAor ICogMHg3IC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0 ZS1iYWNrCisgKi8KKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX1NISUZUCQk1OQorI2RlZmlu ZQkJR0lUU19DQkFTRVJfQ0FDSEVfRG5HblJuRQkweDBVTAorI2RlZmluZQkJR0lUU19DQkFTRVJf Q0FDSEVfTklOCQkweDFVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklSQVdUCTB4MlVM CisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJBV0IJMHgzVUwKKyNkZWZpbmUJCUdJVFNf Q0JBU0VSX0NBQ0hFX05JV0FXVAkweDRVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklX QVdCCTB4NVVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJBV0FXVAkweDZVTAorI2Rl ZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklSQVdBV0IJMHg3VUwKKyNkZWZpbmUJCUdJVFNfQ0JB U0VSX0NBQ0hFX01BU0sJKDB4N1VMIDw8IEdJVFNfQ0JBU0VSX1RZUEVfU0hJRlQpCisvKgorICog U2hhcmVhYmlsaXR5CisgKiAweDAgLSBOb24tc2hhcmVhYmxlCisgKiAweDEgLSBJbm5lci1zaGFy ZWFibGUKKyAqIDB4MiAtIE91dGVyLXNoYXJlYWJsZQorICogMHgzIC0gUmVzZXJ2ZWQuIFRocmVh dGVkIGFzIDB4MAorICovCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9TSElGVAkJMTAKKyNk ZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX05TCQkweDBVTAorI2RlZmluZQkJR0lUU19DQkFTRVJf U0hBUkVfSVMJCTB4MVVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9PUwkJMHgyVUwKKyNk ZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX1JFUwkJMHgzVUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VS X1NIQVJFX01BU0sJCVwKKwkJICAgICgweDNVTCA8PCBHSVRTX0NCQVNFUl9TSEFSRV9TSElGVCkK KworI2RlZmluZQkJR0lUU19DQkFTRVJfUEFfU0hJRlQJMTIKKyNkZWZpbmUJCUdJVFNfQ0JBU0VS X1BBX01BU0sJKDB4RkZGRkZGRkZGVUwgPDwgR0lUU19DQkFTRVJfUEFfU0hJRlQpCisKKyNkZWZp bmUJR0lUU19DV1JJVEVSCQkoMHgwMDg4KQorI2RlZmluZQlHSVRTX0NSRUFEUgkJKDB4MDA5MCkK KworI2RlZmluZQlHSVRTX0JBU0VSX0JBU0UJCSgweDAxMDApCisjZGVmaW5lCUdJVFNfQkFTRVIo eCkJCShHSVRTX0JBU0VSX0JBU0UgKyAoeCkgKiA4KQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX1ZB TElECSgxVUwgPDwgNjMpCisKKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQRV9TSElGVAk1NgorI2Rl ZmluZQkJR0lUU19CQVNFUl9UWVBFKHgpCVwKKwkJICAgICgoKHgpICYgR0lUU19CQVNFUl9UWVBF X01BU0spID4+IEdJVFNfQkFTRVJfVFlQRV9TSElGVCkKKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQ RV9VTklNUEwJMHgwVUwJLyogVW5pbXBsZW1lbnRlZCAqLworI2RlZmluZQkJR0lUU19CQVNFUl9U WVBFX0RFVgkweDFVTAkvKiBEZXZpY2VzICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVfVlAJ MHgyVUwJLyogVmlydHVhbCBQcm9jZXNzb3JzICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVf UFAJMHgzVUwJLyogUGh5c2ljYWwgUHJvY2Vzc29ycyAqLworI2RlZmluZQkJR0lUU19CQVNFUl9U WVBFX0lDCTB4NFVMCS8qIEludGVycnVwdCBDb2xsZWN0aW9ucyAqLworI2RlZmluZQkJR0lUU19C QVNFUl9UWVBFX1JFUzUJMHg1VUwJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUJCUdJVFNfQkFTRVJf VFlQRV9SRVM2CTB4NlVMCS8qIFJlc2VydmVkICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVf UkVTNwkweDdVTAkvKiBSZXNlcnZlZCAqLworI2RlZmluZQkJR0lUU19CQVNFUl9UWVBFX01BU0sJ KDB4N1VMIDw8IEdJVFNfQkFTRVJfVFlQRV9TSElGVCkKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAq IDB4MCAtIE5vbi1jYWNoZWFibGUsIG5vbi1idWZmZXJhYmxlCisgKiAweDEgLSBOb24tY2FjaGVh YmxlCisgKiAweDIgLSBSZWFkLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDMgLSBSZWFk LWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDQgLSBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhy b3VnaAorICogMHg1IC0gV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NiAtIFJlYWQt YWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDcgLSBSZWFkLWFs bG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICovCisjZGVmaW5lCQlHSVRTX0JB U0VSX0NBQ0hFX1NISUZUCTU5CisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX05DTkIJMHgwVUwK KyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfTkMJMHgxVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf Q0FDSEVfUkFXVAkweDJVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9SQVdCCTB4M1VMCisj ZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1dBV1QJMHg0VUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf Q0FDSEVfV0FXQgkweDVVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9SQVdBV1QJMHg2VUwK KyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfUkFXQVdCCTB4N1VMCisjZGVmaW5lCQlHSVRTX0JB U0VSX0NBQ0hFX01BU0sJKDB4N1VMIDw8IEdJVFNfQkFTRVJfQ0FDSEVfU0hJRlQpCisKKyNkZWZp bmUJCUdJVFNfQkFTRVJfRVNJWkVfU0hJRlQJNDgKKyNkZWZpbmUJCUdJVFNfQkFTRVJfRVNJWkVf TUFTSwkoMHgxRlVMIDw8IEdJVFNfQkFTRVJfRVNJWkVfU0hJRlQpCisjZGVmaW5lCQlHSVRTX0JB U0VSX0VTSVpFKHgpCVwKKwkJICAgICgoKCh4KSAmIEdJVFNfQkFTRVJfRVNJWkVfTUFTSykgPj4g R0lUU19CQVNFUl9FU0laRV9TSElGVCkgKyAxKQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BBX1NI SUZUCTEyCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BBX01BU0sJKDB4RkZGRkZGRkZGVUwgPDwgR0lU U19CQVNFUl9QQV9TSElGVCkKKworLyoKKyAqIFNoYXJlYWJpbGl0eQorICogMHgwIC0gTm9uLXNo YXJlYWJsZQorICogMHgxIC0gSW5uZXItc2hhcmVhYmxlCisgKiAweDIgLSBPdXRlci1zaGFyZWFi bGUKKyAqIDB4MyAtIFJlc2VydmVkLiBUaHJlYXRlZCBhcyAweDAKKyAqLworI2RlZmluZQkJR0lU U19CQVNFUl9TSEFSRV9TSElGVAkxMAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9OUwkweDBV TAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9JUwkweDFVTAorI2RlZmluZQkJR0lUU19CQVNF Ul9TSEFSRV9PUwkweDJVTAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9SRVMJMHgzVUwKKyNk ZWZpbmUJCUdJVFNfQkFTRVJfU0hBUkVfTUFTSwkoMHgzVUwgPDwgR0lUU19CQVNFUl9TSEFSRV9T SElGVCkKKworI2RlZmluZQkJR0lUU19CQVNFUl9QU1pfU0hJRlQJOAorI2RlZmluZQkJR0lUU19C QVNFUl9QU1pfNEsJMHgwVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUFNaXzE2SwkweDFVTAorI2Rl ZmluZQkJR0lUU19CQVNFUl9QU1pfNjRLCTB4MlVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BTWl9N QVNLCSgweDNVTCA8PCBHSVRTX0JBU0VSX1BTWl9TSElGVCkKKworI2RlZmluZQkJR0lUU19CQVNF Ul9TSVpFX01BU0sJMHhGRlVMCisKKyNkZWZpbmUJCUdJVFNfQkFTRVJfTlVNCQk4CisKKyNkZWZp bmUJR0lUU19UWVBFUgkJKDB4MDAwOCkKKyNkZWZpbmUJCUdJVFNfVFlQRVJfUFRBCQkoMVVMIDw8 IDE5KQorI2RlZmluZQkJR0lUU19UWVBFUl9ERVZCX1NISUZUCTEzCisjZGVmaW5lCQlHSVRTX1RZ UEVSX0RFVkJfTUFTSwkoMHgxRlVMIDw8IEdJVFNfVFlQRVJfREVWQl9TSElGVCkKKy8qIE51bWJl ciBvZiBkZXZpY2UgaWRlbnRpZmllcnMgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJCUdJVFNfVFlQ RVJfREVWQih4KQlcCisJCSAgICAoKCgoeCkgJiBHSVRTX1RZUEVSX0RFVkJfTUFTSykgPj4gR0lU U19UWVBFUl9ERVZCX1NISUZUKSArIDEpCisjZGVmaW5lCQlHSVRTX1RZUEVSX0lUVEVTX1NISUZU CTQKKyNkZWZpbmUJCUdJVFNfVFlQRVJfSVRURVNfTUFTSwkoMHhGVUwgPDwgR0lUU19UWVBFUl9J VFRFU19TSElGVCkKKy8qIE51bWJlciBvZiBieXRlcyBwZXIgSVRUIEVudHJ5ICovCisjZGVmaW5l CQlHSVRTX1RZUEVSX0lUVEVTKHgpCVwKKwkJICAgICgoKCh4KSAmIEdJVFNfVFlQRVJfSVRURVNf TUFTSykgPj4gR0lUU19UWVBFUl9JVFRFU19TSElGVCkgKyAxKQorCisjZGVmaW5lCUdJVFNfVFJB TlNMQVRFUgkJKDB4MTAwNDApCisvKgorICogTFBJIHJlbGF0ZWQKKyAqLworI2RlZmluZQkJTFBJ X0NPTkZfUFJJT19NQVNLCSgweEZDKQorI2RlZmluZQkJTFBJX0NPTkZfR1JPVVAxCQkoMSA8PCAx KQorI2RlZmluZQkJTFBJX0NPTkZfRU5BQkxFCQkoMSA8PCAwKQorCiAvKgogICogQ1BVIGludGVy ZmFjZQogICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2l0cy5jIGIvc3lz L2FybTY0L2FybTY0L2dpY192M19pdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u dWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfaXRzLmMKQEAgLTAsMCArMSwxNDQ4IEBA CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBB bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBi eSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5k YXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH RS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7 CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs dWRlIDxzeXMvYml0c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2JpdHN0cmluZy5oPgorI2luY2x1ZGUg PHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l bC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2lu Y2x1ZGUgPHN5cy9wY2lpby5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lz L2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9wY2kvcGNp dmFyLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2lu Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4KKyNpbmNsdWRl IDxtYWNoaW5lL2NwdWZ1bmMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KKworI2luY2x1 ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisKKyNpbmNsdWRlICJw aWNfaWYuaCIKKworLyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworc3RhdGljIGludCBnaWNf djNfaXRzX2F0dGFjaChkZXZpY2VfdCk7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3Yz X2l0c19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChk ZXZpY2VfYXR0YWNoLAlnaWNfdjNfaXRzX2F0dGFjaCksCisJLyoKKwkgKiBQSUMgaW50ZXJmYWNl CisJICovCisJLyogTVNJLVggKi8KKwlERVZNRVRIT0QocGljX2FsbG9jX21zaXgsCWdpY192M19p dHNfYWxsb2NfbXNpeCksCisJREVWTUVUSE9EKHBpY19tYXBfbXNpeCwJCWdpY192M19pdHNfbWFw X21zaXgpLAorCS8qIE1TSSAqLworCURFVk1FVEhPRChwaWNfYWxsb2NfbXNpLAlnaWNfdjNfaXRz X2FsbG9jX21zaSksCisJREVWTUVUSE9EKHBpY19tYXBfbXNpLAkJZ2ljX3YzX2l0c19tYXBfbXNp eCksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9OworCitERUZJTkVfQ0xBU1NfMChn aWNfdjNfaXRzLCBnaWNfdjNfaXRzX2RyaXZlciwgZ2ljX3YzX2l0c19tZXRob2RzLAorICAgIHNp emVvZihzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YykpOworCitNQUxMT0NfREVGSU5FKE1fR0lDX1Yz X0lUUywgIkdJQ3YzIElUUyIsIEdJQ19WM19JVFNfREVWU1RSKTsKKworc3RhdGljIGludCBpdHNf YWxsb2NfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgaXRz X2ZyZWVfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgaXRz X2luaXRfY29tbWFuZHEoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgaW50IGl0 c19pbml0X2NwdShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGl0c19p bml0X2NwdV9jb2xsZWN0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworCitzdGF0aWMg aW50IGl0c19jbWRfc2VuZChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2Nt ZF9kZXNjICopOworCitzdGF0aWMgdm9pZCBpdHNfY21kX21hcGMoc3RydWN0IGdpY192M19pdHNf c29mdGMgKiwgc3RydWN0IGl0c19jb2wgKiwgdWludDhfdCk7CitzdGF0aWMgdm9pZCBpdHNfY21k X21hcHZpKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfZGV2ICosIHVpbnQz Ml90LAorICAgIHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIGl0c19jbWRfbWFwaShzdHJ1Y3QgZ2lj X3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2RldiAqLCB1aW50MzJfdCk7CitzdGF0aWMgdm9p ZCBpdHNfY21kX2ludihzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2RldiAq LCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZCBpdHNfY21kX2ludmFsbChzdHJ1Y3QgZ2ljX3YzX2l0 c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2NvbCAqKTsKKworc3RhdGljIHZvaWQgbHBpX2luaXRfY29u ZnRhYmxlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgbHBpX2JpdG1h cF9pbml0KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgbHBpX2luaXRf Y3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIGludCBscGlfY29uZmlnX2Nw dShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKKworY29uc3QgY2hhciAqaXRzX3B0YWJfY2Fj aGVbXSA9IHsKKwlbR0lUU19CQVNFUl9DQUNIRV9OQ05CXSA9ICIoTkMsTkIpIiwKKwlbR0lUU19C QVNFUl9DQUNIRV9OQ10gPSAiKE5DKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXVF0gPSAiKFJB LFdUKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXQl0gPSAiKFJBLFdCKSIsCisJW0dJVFNfQkFT RVJfQ0FDSEVfV0FXVF0gPSAiKFdBLFdUKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfV0FXQl0gPSAi KFdBLFdCKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXQVdUXSA9ICIoUkFXQSxXVCkiLAorCVtH SVRTX0JBU0VSX0NBQ0hFX1JBV0FXQl0gPSAiKFJBV0EsV0IpIiwKK307CisKK2NvbnN0IGNoYXIg Kml0c19wdGFiX3NoYXJlW10gPSB7CisJW0dJVFNfQkFTRVJfU0hBUkVfTlNdID0gIm5vbmUiLAor CVtHSVRTX0JBU0VSX1NIQVJFX0lTXSA9ICJpbm5lciIsCisJW0dJVFNfQkFTRVJfU0hBUkVfT1Nd ID0gIm91dGVyIiwKKwlbR0lUU19CQVNFUl9TSEFSRV9SRVNdID0gIm5vbmUiLAorfTsKKworY29u c3QgY2hhciAqaXRzX3B0YWJfdHlwZVtdID0geworCVtHSVRTX0JBU0VSX1RZUEVfVU5JTVBMXSA9 ICJVbmltcGxlbWVudGVkIiwKKwlbR0lUU19CQVNFUl9UWVBFX0RFVl0gPSAiRGV2aWNlcyIsCisJ W0dJVFNfQkFTRVJfVFlQRV9WUF0gPSAiVmlydHVhbCBQcm9jZXNzb3JzIiwKKwlbR0lUU19CQVNF Ul9UWVBFX1BQXSA9ICJQaHlzaWNhbCBQcm9jZXNzb3JzIiwKKwlbR0lUU19CQVNFUl9UWVBFX0lD XSA9ICJJbnRlcnJ1cHQgQ29sbGVjdGlvbnMiLAorCVtHSVRTX0JBU0VSX1RZUEVfUkVTNV0gPSAi UmVzZXJ2ZWQgKDUpIiwKKwlbR0lUU19CQVNFUl9UWVBFX1JFUzZdID0gIlJlc2VydmVkICg2KSIs CisJW0dJVFNfQkFTRVJfVFlQRV9SRVM3XSA9ICJSZXNlcnZlZCAoNykiLAorfTsKKworc3RhdGlj IHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICppdHNfc2M7CisKKyNkZWZpbmUJZ2ljX2l0c19yZWFk KHNjLCBsZW4sIHJlZykJCVwKKyAgICBidXNfcmVhZF8jI2xlbigmc2MtPml0c19yZXNbMF0sIHJl ZykKKworI2RlZmluZQlnaWNfaXRzX3dyaXRlKHNjLCBsZW4sIHJlZywgdmFsKQlcCisgICAgYnVz X3dyaXRlXyMjbGVuKCZzYy0+aXRzX3Jlc1swXSwgcmVnLCB2YWwpCisKK3N0YXRpYyBpbnQKK2dp Y192M19pdHNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0 YyAqc2M7CisJdWludDY0X3QgZ2l0c190bXA7CisJdWludDMyX3QgZ2l0c19waWRyMjsKKwlpbnQg cmlkOworCWludCByZXQ7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCS8qCisJ ICogSW5pdGlhbGl6ZSBzbGVlcCAmIHNwaW4gbXV0ZXggZm9yIElUUworCSAqLworCS8qIFByb3Rl Y3RzIElUUyBkZXZpY2UgbGlzdCBhbmQgYXNzaWduZWQgTFBJcyBiaXRtYXBzLiAqLworCW10eF9p bml0KCZzYy0+aXRzX210eCwgIklUUyBzbGVlcCBsb2NrIiwgTlVMTCwgTVRYX0RFRik7CisJLyog UHJvdGVjdHMgYWNjZXNzIHRvIElUUyBjb21tYW5kIGNpcmN1bGFyIGJ1ZmZlci4gKi8KKwltdHhf aW5pdCgmc2MtPml0c19zcGluX210eCwgIklUUyBzcGluIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7 CisKKwlyaWQgPSAwOworCXNjLT5pdHNfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYs IFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXRzX3Jl cyA9PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG1l bW9yeVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXNjLT5kZXYgPSBkZXY7CisKKwln aXRzX3BpZHIyID0gZ2ljX2l0c19yZWFkKHNjLCA0LCBHSVRTX1BJRFIyKTsKKwlzd2l0Y2ggKGdp dHNfcGlkcjIgJiBHSVRTX1BJRFIyX0FSQ0hfTUFTSykgeworCWNhc2UgR0lUU19QSURSMl9BUkNI X0dJQ3YzOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEdJVFNfUElEUjJfQVJDSF9HSUN2NDoK KwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgIklUUyBmb3VuZC4g QXJjaGl0ZWN0dXJlIHJldi4gJXVcbiIsCisJCQkgICAgKHVfaW50KShnaXRzX3BpZHIyICYgR0lU U19QSURSMl9BUkNIX01BU0spID4+IDQpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRl dmljZV9wcmludGYoZGV2LCAiTm8gSVRTIGZvdW5kIGluIHRoZSBzeXN0ZW1cbiIpOworCQlnaWNf djNfaXRzX2RldGFjaChkZXYpOworCQlyZXR1cm4gKEVOT0RFVik7CisJfQorCisJLyogMS4gSW5p dGlhbGl6ZSBjb21tYW5kcyBxdWV1ZSAqLworCWl0c19pbml0X2NvbW1hbmRxKHNjKTsKKworCS8q IDIuIFByb3ZpZGUgbWVtb3J5IGZvciBhbnkgcHJpdmF0ZSBJVFMgdGFibGVzICovCisJcmV0ID0g aXRzX2FsbG9jX3RhYmxlcyhzYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWdpY192M19pdHNfZGV0 YWNoKGRldik7CisJCXJldHVybiAocmV0KTsKKwl9CisKKwkvKiAzLiBBbGxvY2F0ZSBjb2xsZWN0 aW9ucy4gT25lIHBlci1DUFUgKi8KKwlzYy0+aXRzX2NvbHMgPSBtYWxsb2Moc2l6ZW9mKCpzYy0+ aXRzX2NvbHMpICogTUFYQ1BVLAorCSAgICBNX0dJQ19WM19JVFMsIChNX1dBSVRPSyB8IE1fWkVS TykpOworCisJLyogNC4gRW5hYmxlIElUUyBpbiBHSVRTX0NUTFIgKi8KKwlnaXRzX3RtcCA9IGdp Y19pdHNfcmVhZChzYywgNCwgR0lUU19DVExSKTsKKwlnaWNfaXRzX3dyaXRlKHNjLCA0LCBHSVRT X0NUTFIsIGdpdHNfdG1wIHwgR0lUU19DVExSX0VOKTsKKworCS8qIDUuIEluaXRpYWxpemUgTFBJ cyBjb25maWd1cmF0aW9uIHRhYmxlICovCisJbHBpX2luaXRfY29uZnRhYmxlKHNjKTsKKworCS8q IDYuIExQSXMgYml0bWFwIGluaXQgKi8KKwlscGlfYml0bWFwX2luaXQoc2MpOworCisJLyogNy4g Q1BVIGluaXQgKi8KKwkodm9pZClpdHNfaW5pdF9jcHUoc2MpOworCisJLyogOC4gSW5pdCBJVFMg ZGV2aWNlcyBsaXN0ICovCisJVEFJTFFfSU5JVCgmc2MtPml0c19kZXZfbGlzdCk7CisKKwlhcm1f cmVnaXN0ZXJfbXNpX3BpYyhkZXYpOworCisJLyoKKwkgKiBYWFggQVJNNjRUT0RPOiBXZSBuZWVk IHRvIGhhdmUgSVRTIHNvZnR3YXJlIGNvbnRleHQKKwkgKiB3aGVuIGJlaW5nIGNhbGxlZCBieSB0 aGUgaW50ZXJydXB0IGNvZGUgKG1hc2svdW5tYXNrKS4KKwkgKiBUaGlzIG1heSBiZSB1c2VkIG9u bHkgd2hlbiBvbmUgSVRTIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgc3lzdGVtIGFuZCBldmVudHVh bGx5IHNob3VsZCBiZSByZW1vdmVkLgorCSAqLworCUtBU1NFUlQoaXRzX3NjID09IE5VTEwsCisJ ICAgICgiVHJ5aW5nIHRvIGFzc2lnbiBpdHNfc2MgdGhhdCBpcyBhbHJlYWR5IHNldCIpKTsKKwlp dHNfc2MgPSBzYzsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFdpbGwgbm90IGRldGFjaCBidXQg dXNlIGl0IGZvciBjb252ZW5pZW5jZSAqLworaW50CitnaWNfdjNfaXRzX2RldGFjaChkZXZpY2Vf dCBkZXYpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19z YzsKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2M7CisJdV9pbnQgY3B1aWQ7CisJaW50IHJp ZCA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwljcHVpZCA9IFBDUFVfR0VU KGNwdWlkKTsKKworCS8qIFJlbGVhc2Ugd2hhdCdzIHBvc3NpYmxlICovCisKKwkvKiBDb21tYW5k IHF1ZXVlICovCisJaWYgKCh2b2lkICopc2MtPml0c19jbWRxX2Jhc2UgIT0gTlVMTCkgeworCQlj b250aWdmcmVlKCh2b2lkICopc2MtPml0c19jbWRxX2Jhc2UsCisJCSAgICBJVFNfQ01EUV9TSVpF LCBNX0dJQ19WM19JVFMpOworCX0KKwkvKiBJVFRzICovCisJaXRzX2ZyZWVfdGFibGVzKHNjKTsK KwkvKiBDb2xsZWN0aW9ucyAqLworCWZyZWUoc2MtPml0c19jb2xzLCBNX0dJQ19WM19JVFMpOwor CS8qIExQSSBjb25maWcgdGFibGUgKi8KKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJaWYgKCh2b2lkICop Z2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZSAhPSBOVUxMKSB7CisJCWNvbnRpZ2Zy ZWUoKHZvaWQgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlLAorCQkgICAgTFBJ X0NPTkZUQUJfU0laRSwgTV9HSUNfVjNfSVRTKTsKKwl9CisJaWYgKCh2b2lkICopZ2ljX3NjLT5n aWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0gIT0gTlVMTCkgeworCQljb250aWdmcmVl KCh2b2lkICopZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0sCisJCSAg ICByb3VuZHVwMihMUElfUEVORFRBQl9TSVpFLCBQQUdFX1NJWkVfNjRLKSwgTV9HSUNfVjNfSVRT KTsKKwl9CisKKwkvKiBSZXNvdXJjZS4uLiAqLworCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg U1lTX1JFU19NRU1PUlksIHJpZCwgc2MtPml0c19yZXMpOworCisJLyogWFhYIEFSTTY0VE9ETzog UmVzZXQgZ2xvYmFsIHBvaW50ZXIgdG8gSVRTIHNvZnR3YXJlIGNvbnRleHQgKi8KKwlpdHNfc2Mg PSBOVUxMOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoraXRzX2FsbG9jX3RhYmxl cyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgZ2l0c19iYXNlciwg Z2l0c190bXA7CisJdWludDY0X3QgdHlwZSwgZXNpemUsIGNhY2hlLCBzaGFyZSwgcHN6OworCXVp bnQ2NF90IGdpdHNfdHlwZXI7CisJc2l6ZV90IHBhZ2Vfc2l6ZSwgbnBhZ2VzLCBuaXRzcGFnZXMs IG5pZGVudHMsIHRuOworCXNpemVfdCBpdHNfdGJsX3NpemU7CisJdm1fb2Zmc2V0X3QgcHRhYl92 YWRkcjsKKwl2bV9wYWRkcl90IHB0YWJfcGFkZHI7CisJYm9vbGVhbl90IGZpcnN0ID0gVFJVRTsK KworCXBhZ2Vfc2l6ZSA9IFBBR0VfU0laRV82NEs7CisKKwkvKiBSZWFkIGZlYXR1cmVzIGZpcnN0 ICovCisJZ2l0c190eXBlciA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lUU19UWVBFUik7CisKKwlm b3IgKHRuID0gMDsgdG4gPCBHSVRTX0JBU0VSX05VTTsgdG4rKykgeworCQlnaXRzX2Jhc2VyID0g Z2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0JBU0VSKHRuKSk7CisJCXR5cGUgPSBHSVRTX0JBU0VS X1RZUEUoZ2l0c19iYXNlcik7CisJCS8qIEdldCB0aGUgVGFibGUgRW50cnkgc2l6ZSAqLworCQll c2l6ZSA9IEdJVFNfQkFTRVJfRVNJWkUoZ2l0c19iYXNlcik7CisKKwkJc3dpdGNoICh0eXBlKSB7 CisJCWNhc2UgR0lUU19CQVNFUl9UWVBFX1VOSU1QTDogLyogZmFsbCB0aHJvdWdoICovCisJCWNh c2UgR0lUU19CQVNFUl9UWVBFX1JFUzU6CisJCWNhc2UgR0lUU19CQVNFUl9UWVBFX1JFUzY6CisJ CWNhc2UgR0lUU19CQVNFUl9UWVBFX1JFUzc6CisJCQljb250aW51ZTsKKwkJY2FzZSBHSVRTX0JB U0VSX1RZUEVfREVWOgorCQkJbmlkZW50cyA9ICgxIDw8IEdJVFNfVFlQRVJfREVWQihnaXRzX3R5 cGVyKSk7CisJCQlpdHNfdGJsX3NpemUgPSBlc2l6ZSAqIG5pZGVudHM7CisJCQlpdHNfdGJsX3Np emUgPSByb3VuZHVwMihpdHNfdGJsX3NpemUsIHBhZ2Vfc2l6ZSk7CisJCQlucGFnZXMgPSBob3dt YW55KGl0c190Ymxfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ bnBhZ2VzID0gaG93bWFueShwYWdlX3NpemUsIFBBR0VfU0laRSk7CisJCQlicmVhazsKKwkJfQor CisJCS8qIEFsbG9jYXRlIHJlcXVpcmVkIHNwYWNlICovCisJCXB0YWJfdmFkZHIgPSAodm1fb2Zm c2V0X3QpY29udGlnbWFsbG9jKG5wYWdlcyAqIFBBR0VfU0laRSwKKwkJICAgIE1fR0lDX1YzX0lU UywgKE1fV0FJVE9LIHwgTV9aRVJPKSwgMCwgfjBVTCwgUEFHRV9TSVpFLCAwKTsKKworCQlzYy0+ aXRzX3B0YWJzW3RuXS5wdGFiX3ZhZGRyID0gcHRhYl92YWRkcjsKKwkJc2MtPml0c19wdGFic1t0 bl0ucHRhYl9wZ3N6ID0gUEFHRV9TSVpFOworCQlzYy0+aXRzX3B0YWJzW3RuXS5wdGFiX25wYWdl cyA9IG5wYWdlczsKKworCQlwdGFiX3BhZGRyID0gdnRvcGh5cyhwdGFiX3ZhZGRyKTsKKwkJS0FT U0VSVCgocHRhYl9wYWRkciAmIEdJVFNfQkFTRVJfUEFfTUFTSykgPT0gcHRhYl9wYWRkciwKKwkJ ICAgICgiJXM6IFVuYWxpZ25lZCBQQSBmb3IgSW50ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlIiwK KwkJICAgIGRldmljZV9nZXRfbmFtZShzYy0+ZGV2KSkpOworCisJCS8qIFNldCBkZWZhdWx0czog V0FXQiwgSVMgKi8KKwkJY2FjaGUgPSBHSVRTX0JBU0VSX0NBQ0hFX1dBV0I7CisJCXNoYXJlID0g R0lUU19CQVNFUl9TSEFSRV9JUzsKKworCQlmb3IgKDs7KSB7CisJCQluaXRzcGFnZXMgPSBob3dt YW55KGl0c190Ymxfc2l6ZSwgcGFnZV9zaXplKTsKKworCQkJc3dpdGNoIChwYWdlX3NpemUpIHsK KwkJCWNhc2UgUEFHRV9TSVpFOgkJLyogNEtCICovCisJCQkJcHN6ID0gR0lUU19CQVNFUl9QU1pf NEs7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBR0VfU0laRV8xNks6CS8qIDE2S0IgKi8KKwkJCQlw c3ogPSBHSVRTX0JBU0VSX1BTWl80SzsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEFHRV9TSVpFXzY0 SzoJLyogNjRLQiAqLworCQkJCXBzeiA9IEdJVFNfQkFTRVJfUFNaXzY0SzsKKwkJCQlicmVhazsK KwkJCWRlZmF1bHQ6CisJCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCSAgICAiVW5zdXBw b3J0ZWQgcGFnZSBzaXplOiAlenVLQlxuIiwKKwkJCQkgICAgKHBhZ2Vfc2l6ZSAvIDEwMjQpKTsK KwkJCQlpdHNfZnJlZV90YWJsZXMoc2MpOworCQkJCXJldHVybiAoRU5YSU8pOworCQkJfQorCisJ CQkvKiBDbGVhciBmaWVsZHMgdW5kZXIgbW9kaWZpY2F0aW9uIGZpcnN0ICovCisJCQlnaXRzX2Jh c2VyICY9IH4oR0lUU19CQVNFUl9WQUxJRCB8CisJCQkgICAgR0lUU19CQVNFUl9DQUNIRV9NQVNL IHwgR0lUU19CQVNFUl9UWVBFX01BU0sgfAorCQkJICAgIEdJVFNfQkFTRVJfRVNJWkVfTUFTSyB8 IEdJVFNfQkFTRVJfUEFfTUFTSyB8CisJCQkgICAgR0lUU19CQVNFUl9TSEFSRV9NQVNLIHwgR0lU U19CQVNFUl9QU1pfTUFTSyB8CisJCQkgICAgR0lUU19CQVNFUl9TSVpFX01BU0spOworCQkJLyog Q29uc3RydWN0IHJlZ2lzdGVyIHZhbHVlICovCisJCQlnaXRzX2Jhc2VyIHw9CisJCQkgICAgKHR5 cGUgPDwgR0lUU19CQVNFUl9UWVBFX1NISUZUKSB8CisJCQkgICAgKChlc2l6ZSAtIDEpIDw8IEdJ VFNfQkFTRVJfRVNJWkVfU0hJRlQpIHwKKwkJCSAgICAoY2FjaGUgPDwgR0lUU19CQVNFUl9DQUNI RV9TSElGVCkgfAorCQkJICAgIChzaGFyZSA8PCBHSVRTX0JBU0VSX1NIQVJFX1NISUZUKSB8CisJ CQkgICAgKHBzeiA8PCBHSVRTX0JBU0VSX1BTWl9TSElGVCkgfAorCQkJICAgIHB0YWJfcGFkZHIg fCAobml0c3BhZ2VzIC0gMSkgfAorCQkJICAgIEdJVFNfQkFTRVJfVkFMSUQ7CisKKwkJCWdpY19p dHNfd3JpdGUoc2MsIDgsIEdJVFNfQkFTRVIodG4pLCBnaXRzX2Jhc2VyKTsKKwkJCS8qCisJCQkg KiBWZXJpZnkuCisJCQkgKiBEZXBlbmRpbmcgb24gaW1wbGVtZW50YXRpb24gd2UgbWF5IGVuY291 bnRlcgorCQkJICogc2hhcmVhYmlsaXR5IGFuZCBwYWdlIHNpemUgbWlzbWF0Y2guCisJCQkgKi8K KwkJCWdpdHNfdG1wID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0JBU0VSKHRuKSk7CisJCQlp ZiAoKChnaXRzX3RtcCBeIGdpdHNfYmFzZXIpICYgR0lUU19CQVNFUl9TSEFSRV9NQVNLKSAhPSAw KSB7CisJCQkJc2hhcmUgPSBnaXRzX3RtcCAmIEdJVFNfQkFTRVJfU0hBUkVfTUFTSzsKKwkJCQlz aGFyZSA+Pj0gR0lUU19CQVNFUl9TSEFSRV9TSElGVDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwor CQkJaWYgKCgoZ2l0c190bXAgXiBnaXRzX2Jhc2VyKSAmIEdJVFNfQkFTRVJfUFNaX01BU0spICE9 IDApIHsKKwkJCQlzd2l0Y2ggKHBhZ2Vfc2l6ZSkgeworCQkJCWNhc2UgUEFHRV9TSVpFXzE2SzoK KwkJCQkJLyogRHJvcCB0byA0S0IgcGFnZSAqLworCQkJCQlwYWdlX3NpemUgPSBQQUdFX1NJWkU7 CisJCQkJCWNvbnRpbnVlOworCQkJCWNhc2UgUEFHRV9TSVpFXzY0SzoKKwkJCQkJLyogRHJvcCB0 byAxNktCIHBhZ2UgKi8KKwkJCQkJcGFnZV9zaXplID0gUEFHRV9TSVpFXzE2SzsKKwkJCQkJY29u dGludWU7CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIEFsbCBwb3NzaWJsZSBhZGp1c3RtZW50 cyBzaG91bGQKKwkJCSAqIGJlIGFwcGxpZWQgYnkgbm93IHNvIGp1c3QgYnJlYWsgdGhlIGxvb3Au CisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIERvIG5vdCBjb21wYXJlIENhY2hl YWJpbGl0eSBmaWVsZCBzaW5jZQorCQkgKiBpdCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgor CQkgKi8KKwkJZ2l0c190bXAgJj0gfkdJVFNfQkFTRVJfQ0FDSEVfTUFTSzsKKwkJZ2l0c19iYXNl ciAmPSB+R0lUU19CQVNFUl9DQUNIRV9NQVNLOworCisJCWlmIChnaXRzX3RtcCAhPSBnaXRzX2Jh c2VyKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIkNvdWxkIG5vdCBhbGxv Y2F0ZSBJVFMgdGFibGVzXG4iKTsKKwkJCWl0c19mcmVlX3RhYmxlcyhzYyk7CisJCQlyZXR1cm4g KEVOWElPKTsKKwkJfQorCisJCWlmIChib290dmVyYm9zZSkgeworCQkJaWYgKGZpcnN0KSB7CisJ CQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCSAgICAiQWxsb2NhdGVkIElUUyBwcml2YXRl IHRhYmxlczpcbiIpOworCQkJCWZpcnN0ID0gRkFMU0U7CisJCQl9CisJCQlkZXZpY2VfcHJpbnRm KHNjLT5kZXYsCisJCQkgICAgIlx0UFRBQiV6dSBmb3IgJXM6IFBBIDB4JWx4LCIKKwkJCSAgICAi ICVsdSBlbnRyaWVzLCIKKwkJCSAgICAiIGNhY2hlIHBvbGljeSAlcywgJXMgc2hhcmVhYmxlLCIK KwkJCSAgICAiIHBhZ2Ugc2l6ZSAlenVLQlxuIiwKKwkJCSAgICB0biwgaXRzX3B0YWJfdHlwZVt0 eXBlXSwgcHRhYl9wYWRkciwKKwkJCSAgICAocGFnZV9zaXplICogbml0c3BhZ2VzKSAvIGVzaXpl LAorCQkJICAgIGl0c19wdGFiX2NhY2hlW2NhY2hlXSwgaXRzX3B0YWJfc2hhcmVbc2hhcmVdLAor CQkJICAgIHBhZ2Vfc2l6ZSAvIDEwMjQpOworCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKwor c3RhdGljIHZvaWQKK2l0c19mcmVlX3RhYmxlcyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2Mp Cit7CisJdm1fb2Zmc2V0X3QgcHRhYl92YWRkcjsKKwlzaXplX3Qgc2l6ZTsKKwlzaXplX3QgdG47 CisKKwlmb3IgKHRuID0gMDsgdG4gPCBHSVRTX0JBU0VSX05VTTsgdG4rKykgeworCQlwdGFiX3Zh ZGRyID0gc2MtPml0c19wdGFic1t0bl0ucHRhYl92YWRkcjsKKwkJaWYgKHB0YWJfdmFkZHIgPT0g MCkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gc2MtPml0c19wdGFic1t0bl0ucHRhYl9wZ3N6Owor CQlzaXplICo9IHNjLT5pdHNfcHRhYnNbdG5dLnB0YWJfbnBhZ2VzOworCisJCWlmICgodm9pZCAq KXB0YWJfdmFkZHIgIT0gTlVMTCkKKwkJCWNvbnRpZ2ZyZWUoKHZvaWQgKilwdGFiX3ZhZGRyLCBz aXplLCBNX0dJQ19WM19JVFMpOworCisJCS8qIENsZWFyIHRoZSB0YWJsZSBkZXNjcmlwdGlvbiAq LworCQltZW1zZXQoJnNjLT5pdHNfcHRhYnNbdG5dLCAwLCBzaXplb2Yoc2MtPml0c19wdGFic1t0 bl0pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfaW5pdF9jb21tYW5kcShzdHJ1Y3QgZ2lj X3YzX2l0c19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgZ2l0c19jYmFzZXIsIGdpdHNfdG1wOwor CXVpbnQ2NF90IGNhY2hlLCBzaGFyZTsKKwl2bV9wYWRkcl90IGNtZHFfcGFkZHI7CisJZGV2aWNl X3QgZGV2OworCisJZGV2ID0gc2MtPmRldjsKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1h bmQgcXVldWUgKi8KKwlzYy0+aXRzX2NtZHFfYmFzZSA9IGNvbnRpZ21hbGxvYyhJVFNfQ01EUV9T SVpFLCBNX0dJQ19WM19JVFMsCisJICAgIChNX1dBSVRPSyB8IE1fWkVSTyksIDAsIH4wVUwsIElU U19DTURRX1NJWkUsIDApOworCS8qIFNldCBjb21tYW5kIHF1ZXVlIHdyaXRlIHBvaW50ZXIgKGNv bW1hbmQgcXVldWUgZW1wdHkpICovCisJc2MtPml0c19jbWRxX3dyaXRlID0gc2MtPml0c19jbWRx X2Jhc2U7CisKKwkvKiBTYXZlIGNvbW1hbmQgcXVldWUgcG9pbnRlciBhbmQgYXR0cmlidXRlcyAq LworCWNtZHFfcGFkZHIgPSB2dG9waHlzKHNjLT5pdHNfY21kcV9iYXNlKTsKKworCS8qIFNldCBk ZWZhdWx0czogTm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUgPSBHSVRTX0NCQVNFUl9D QUNIRV9OSVdBV0I7CisJc2hhcmUgPSBHSVRTX0NCQVNFUl9TSEFSRV9JUzsKKworCWdpdHNfY2Jh c2VyID0gKGNtZHFfcGFkZHIgfAorCSAgICAoY2FjaGUgPDwgR0lUU19DQkFTRVJfQ0FDSEVfU0hJ RlQpIHwKKwkgICAgKHNoYXJlIDw8IEdJVFNfQ0JBU0VSX1NIQVJFX1NISUZUKSB8CisJICAgIC8q IE51bWJlciBvZiA0S0IgcGFnZXMgLSAxICovCisJICAgICgoSVRTX0NNRFFfU0laRSAvIFBBR0Vf U0laRSkgLSAxKSB8CisJICAgIC8qIFZhbGlkIGJpdCAqLworCSAgICBHSVRTX0NCQVNFUl9WQUxJ RCk7CisKKwlnaWNfaXRzX3dyaXRlKHNjLCA4LCBHSVRTX0NCQVNFUiwgZ2l0c19jYmFzZXIpOwor CWdpdHNfdG1wID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0NCQVNFUik7CisKKwlpZiAoKChn aXRzX3RtcCBeIGdpdHNfY2Jhc2VyKSAmIEdJVFNfQ0JBU0VSX1NIQVJFX01BU0spICE9IDApIHsK KwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAiV2ls bCB1c2UgY2FjaGUgZmx1c2hpbmcgZm9yIGNvbW1hbmRzIHF1ZXVlXG4iKTsKKwkJfQorCQkvKiBD b21tYW5kIHF1ZXVlIG5lZWRzIGNhY2hlIGZsdXNoaW5nICovCisJCXNjLT5pdHNfZmxhZ3MgfD0g SVRTX0ZMQUdTX0NNRFFfRkxVU0g7CisJfQorCisJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19D V1JJVEVSLCAweDApOworfQorCitzdGF0aWMgaW50CitpdHNfaW5pdF9jcHUoc3RydWN0IGdpY192 M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3Nv ZnRjICpnaWNfc2M7CisKKwkvKgorCSAqIENoZWNrIGZvciBMUElzIHN1cHBvcnQgb24gdGhpcyBS ZS1EaXN0cmlidXRvci4KKwkgKi8KKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2 KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJaWYgKChnaWNfcl9yZWFk KGdpY19zYywgNCwgR0lDUl9UWVBFUikgJiBHSUNSX1RZUEVSX1BMUElTKSA9PSAwKSB7CisJCWlm IChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJMUElz IG5vdCBzdXBwb3J0ZWQgb24gQ1BVJXVcbiIsIFBDUFVfR0VUKGNwdWlkKSk7CisJCX0KKwkJcmV0 dXJuIChFTlhJTyk7CisJfQorCisJLyogSW5pdGlhbGl6ZSBMUElzIGZvciB0aGlzIENQVSAqLwor CWxwaV9pbml0X2NwdShzYyk7CisKKwkvKiBJbml0aWFsaXplIGNvbGxlY3Rpb25zICovCisJaXRz X2luaXRfY3B1X2NvbGxlY3Rpb24oc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZv aWQKK2l0c19pbml0X2NwdV9jb2xsZWN0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykK K3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXVp bnQ2NF90IHR5cGVyOworCXVpbnQ2NF90IHRhcmdldDsKKwl2bV9vZmZzZXRfdCByZWRpc3RfYmFz ZTsKKwl1X2ludCBjcHVpZDsKKworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCXBhcmVudCA9 IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOworCWdpY19zYyA9IGRldmljZV9nZXRfc29mdGMo cGFyZW50KTsKKworCXR5cGVyID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX1RZUEVSKTsKKwlp ZiAoKHR5cGVyICYgR0lUU19UWVBFUl9QVEEpICE9IDApIHsKKwkJcmVkaXN0X2Jhc2UgPQorCQkg ICAgcm1hbl9nZXRfYnVzaGFuZGxlKGdpY19zYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0pOwor CQkvKgorCQkgKiBUYXJnZXQgQWRkcmVzcyBjb3JyZXNwb25kIHRvIHRoZSBiYXNlIHBoeXNpY2Fs CisJCSAqIGFkZHJlc3Mgb2YgUmUtRGlzdHJpYnV0b3JzLgorCQkgKi8KKwkJdGFyZ2V0ID0gdnRv cGh5cyhyZWRpc3RfYmFzZSk7CisJfSBlbHNlIHsKKwkJLyogVGFyZ2V0IEFkZHJlc3MgY29ycmVz cG9uZCB0byB1bmlxdWUgcHJvY2Vzc29yIG51bWJlcnMgKi8KKwkJdHlwZXIgPSBnaWNfcl9yZWFk KGdpY19zYywgOCwgR0lDUl9UWVBFUik7CisJCXRhcmdldCA9IEdJQ1JfVFlQRVJfQ1BVTlVNKHR5 cGVyKTsKKwl9CisKKwlzYy0+aXRzX2NvbHNbY3B1aWRdLmNvbF90YXJnZXQgPSB0YXJnZXQ7CisJ c2MtPml0c19jb2xzW2NwdWlkXS5jb2xfaWQgPSBjcHVpZDsKKworCWl0c19jbWRfbWFwYyhzYywg JnNjLT5pdHNfY29sc1tjcHVpZF0sIDEpOworCWl0c19jbWRfaW52YWxsKHNjLCAmc2MtPml0c19j b2xzW2NwdWlkXSk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfaW5pdF9jb25mdGFibGUoc3RydWN0 IGdpY192M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2lj X3YzX3NvZnRjICpnaWNfc2M7CisJdm1fb2Zmc2V0X3QgY29uZl9iYXNlOworCXVpbnQ4X3QgcHJp b19kZWZhdWx0OworCisJcGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2lj X3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOworCS8qCisJICogTFBJIENvbmZpZ3VyYXRp b24gVGFibGUgc2V0dGluZ3MuCisJICogTm90aWNlIHRoYXQgQ29uZmlndXJhdGlvbiBUYWJsZSBp cyBzaGFyZWQgYW1vbmcgYWxsCisJICogUmUtRGlzdHJpYnV0b3JzLCBzbyB0aGlzIGlzIGdvaW5n IHRvIGJlIGNyZWF0ZWQganVzdCBvbmNlLgorCSAqLworCWNvbmZfYmFzZSA9ICh2bV9vZmZzZXRf dCljb250aWdtYWxsb2MoTFBJX0NPTkZUQUJfU0laRSwKKwkgICAgTV9HSUNfVjNfSVRTLCAoTV9X QUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVMLCBQQUdFX1NJWkVfNjRLLCAwKTsKKworCWlmIChib290 dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAgICAiTFBJIENvbmZpZ3Vy YXRpb24gVGFibGUgYXQgUEE6IDB4JWx4XG4iLAorCQkgICAgdnRvcGh5cyhjb25mX2Jhc2UpKTsK Kwl9CisKKwkvKgorCSAqIExldCB0aGUgZGVmYXVsdCBwcmlvcml0eSBiZSBhbGlnbmVkIHdpdGgg YWxsIG90aGVyCisJICogaW50ZXJydXB0cyBhc3N1bWluZyB0aGF0IGVhY2ggaW50ZXJydXB0IGlz IGFzc2lnbmVkCisJICogTUFYIHByaW9yaXR5IGF0IHN0YXJ0dXAuIE1BWCBwcmlvcml0eSBvbiB0 aGUgb3RoZXIKKwkgKiBoYW5kIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiAweEZDIGZvciBMUElzLgor CSAqLworCXByaW9fZGVmYXVsdCA9IEdJQ19QUklPUklUWV9NQVg7CisKKwkvKiBXcml0ZSBlYWNo IHNldHRpbmdzIGJ5dGUgdG8gTFBJIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwltZW1zZXQoKHZv aWQgKiljb25mX2Jhc2UsCisJICAgIChwcmlvX2RlZmF1bHQgJiBMUElfQ09ORl9QUklPX01BU0sp IHwgTFBJX0NPTkZfR1JPVVAxLAorCSAgICBMUElfQ09ORlRBQl9TSVpFKTsKKworCWNwdV9kY2Fj aGVfd2JfcmFuZ2UoKHZtX29mZnNldF90KWNvbmZfYmFzZSwgcm91bmR1cDIoTFBJX0NPTkZUQUJf U0laRSwKKwkgICAgUEFHRV9TSVpFXzY0SykpOworCisJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlz LmNvbmZfYmFzZSA9IGNvbmZfYmFzZTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9pbml0X2NwdShz dHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVj dCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl2bV9vZmZzZXRfdCBwZW5kX2Jhc2U7CisJdV9pbnQg Y3B1aWQ7CisKKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2Mg PSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisKKwkvKgorCSAqIExQSSBQZW5kaW5nIFRhYmxl IHNldHRpbmdzLgorCSAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgZm9yIGVhY2ggUmUtRGlzdHJpYnV0 b3IsIGhlbmNlIGZvciBlYWNoIENQVS4KKwkgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsK KworCXBlbmRfYmFzZSA9ICh2bV9vZmZzZXRfdCljb250aWdtYWxsb2MoCisJICAgIHJvdW5kdXAy KExQSV9QRU5EVEFCX1NJWkUsIFBBR0VfU0laRV82NEspLCBNX0dJQ19WM19JVFMsCisJICAgIChN X1dBSVRPSyB8IE1fWkVSTyksIDAsIH4wVUwsIFBBR0VfU0laRV82NEssIDApOworCisJLyogQ2xl YW4gRC1jYWNoZSBzbyB0aGF0IElUUyBjYW4gc2VlIHplcm9lZCBwYWdlcyAqLworCWNwdV9kY2Fj aGVfd2JfcmFuZ2UoKHZtX29mZnNldF90KXBlbmRfYmFzZSwKKwkgICAgcm91bmR1cDIoTFBJX1BF TkRUQUJfU0laRSwgUEFHRV9TSVpFXzY0SykpOworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRl dmljZV9wcmludGYoc2MtPmRldiwKKwkJICAgICJMUEkgUGVuZGluZyBUYWJsZSBmb3IgQ1BVJXUg YXQgUEE6IDB4JWx4XG4iLAorCQkgICAgY3B1aWQsIHZ0b3BoeXMocGVuZF9iYXNlKSk7CisJfQor CisJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0gPSBwZW5kX2Jhc2U7 CisKKwlscGlfY29uZmlnX2NwdShzYyk7Cit9CisKK3N0YXRpYyBpbnQKK2xwaV9jb25maWdfY3B1 KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3Ry dWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXZtX29mZnNldF90IGNvbmZfYmFzZSwgcGVuZF9i YXNlOworCXVpbnQ2NF90IGdpY3JfeGJhc2VyLCBnaWNyX3RlbXA7CisJdWludDY0X3QgY2FjaGUs IHNoYXJlLCBpZGJpdHM7CisJdWludDMyX3QgZ2ljcl9jdGxyOworCXVfaW50IGNwdWlkOworCisJ cGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dl dF9zb2Z0YyhwYXJlbnQpOworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCisJY29uZl9iYXNl ID0gZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZTsKKwlwZW5kX2Jhc2UgPSBnaWNf c2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXTsKKworCS8qIERpc2FibGUgTFBJ cyAqLworCWdpY3JfY3RsciA9IGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX0NUTFIpOworCWdp Y3JfY3RsciAmPSB+R0lDUl9DVExSX0xQSV9FTkFCTEU7CisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA0 LCBHSUNSX0NUTFIsIGdpY3JfY3Rscik7CisJLyogUGVyZm9ybSBmdWxsIHN5c3RlbSBiYXJyaWVy ICovCisJZHNiKHN5KTsKKworCS8qCisJICogU2V0IEdJQ1JfUFJPUEJBU0VSCisJICovCisKKwkv KgorCSAqIEZpbmQgb3V0IGhvdyBtYW55IGJpdHMgZG8gd2UgbmVlZCBmb3IgTFBJIGlkZW50aWZp ZXJzLgorCSAqIFJlbWFyayAxLjogRXZlbiB0aG91Z2ggd2UgaGF2ZSAoTFBJX0NPTkZUQUJfU0la RSAvIDgpIExQSXMKKwkgKgkgICAgICB0aGUgbm90aWZpZWQgTFBJIElEIHN0aWxsIHN0YXJ0cyBm cm9tIDgxOTIKKwkgKgkgICAgICAoR0lDX0ZJUlNUX0xQSSkuCisJICogUmVtYXJrIDIuOiBUaGlz IGNvdWxkIGJlIGRvbmUgb24gY29tcGlsYXRpb24gdGltZSBidXQgdGhlcmUKKwkgKgkgICAgICBz ZWVtcyB0byBiZSBubyBzdWZmaWNpZW50IG1hY3JvLgorCSAqLworCWlkYml0cyA9IGZsc2woTFBJ X0NPTkZUQUJfU0laRSArIEdJQ19GSVJTVF9MUEkpIC0gMTsKKworCS8qIFNldCBkZWZhdWx0czog Tm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUgPSBHSUNSX1BST1BCQVNFUl9DQUNIRV9O SVdBV0I7CisJc2hhcmUgPSBHSUNSX1BST1BCQVNFUl9TSEFSRV9JUzsKKworCWdpY3JfeGJhc2Vy ID0gdnRvcGh5cyhjb25mX2Jhc2UpIHwKKwkgICAgKChpZGJpdHMgLSAxKSAmIEdJQ1JfUFJPUEJB U0VSX0lEQklUU19NQVNLKSB8CisJICAgIChjYWNoZSA8PCBHSUNSX1BST1BCQVNFUl9DQUNIRV9T SElGVCkgfAorCSAgICAoc2hhcmUgPDwgR0lDUl9QUk9QQkFTRVJfU0hBUkVfU0hJRlQpOworCisJ Z2ljX3Jfd3JpdGUoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUiwgZ2ljcl94YmFzZXIpOworCWdp Y3JfdGVtcCA9IGdpY19yX3JlYWQoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUik7CisKKwlpZiAo KChnaWNyX3hiYXNlciBeIGdpY3JfdGVtcCkgJiBHSUNSX1BST1BCQVNFUl9TSEFSRV9NQVNLKSAh PSAwKSB7CisJCWlmIChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAor CQkJICAgICJXaWxsIHVzZSBjYWNoZSBmbHVzaGluZyBmb3IgTFBJICIKKwkJCSAgICAiQ29uZmln dXJhdGlvbiBUYWJsZVxuIik7CisJCX0KKwkJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmZsYWdz IHw9IExQSV9GTEFHU19DT05GX0ZMVVNIOworCX0KKworCS8qCisJICogU2V0IEdJQ1JfUEVOREJB U0VSCisJICovCisKKwkvKiBTZXQgZGVmYXVsdHM6IE5vcm1hbCBJbm5lciBXQVdCLCBJUyAqLwor CWNhY2hlID0gR0lDUl9QRU5EQkFTRVJfQ0FDSEVfTklXQVdCOworCXNoYXJlID0gR0lDUl9QRU5E QkFTRVJfU0hBUkVfSVM7CisKKwlnaWNyX3hiYXNlciA9IHZ0b3BoeXMocGVuZF9iYXNlKSB8CisJ ICAgIChjYWNoZSA8PCBHSUNSX1BFTkRCQVNFUl9DQUNIRV9TSElGVCkgfAorCSAgICAoc2hhcmUg PDwgR0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQpOworCisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA4 LCBHSUNSX1BFTkRCQVNFUiwgZ2ljcl94YmFzZXIpOworCisJLyogRW5hYmxlIExQSXMgKi8KKwln aWNyX2N0bHIgPSBnaWNfcl9yZWFkKGdpY19zYywgNCwgR0lDUl9DVExSKTsKKwlnaWNyX2N0bHIg fD0gR0lDUl9DVExSX0xQSV9FTkFCTEU7CisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA0LCBHSUNSX0NU TFIsIGdpY3JfY3Rscik7CisKKwlkc2Ioc3kpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj IHZvaWQKK2xwaV9iaXRtYXBfaW5pdChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJ ZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl1aW50MzJf dCBscGlfaWRfbnVtOworCXNpemVfdCBscGlfY2h1bmtzX251bTsKKwlzaXplX3QgYml0c19pbl9j aHVuazsKKworCXBhcmVudCA9IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOworCWdpY19zYyA9 IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKKworCWxwaV9pZF9udW0gPSAoMSA8PCBnaWNfc2Mt PmdpY19pZGJpdHMpIC0gMTsKKwkvKiBTdWJzdHJhY3QgSURzIGRlZGljYXRlZCBmb3IgU0dJcywg UFBJcyBhbmQgU1BJcyAqLworCWxwaV9pZF9udW0gLT0gR0lDX0ZJUlNUX0xQSTsKKworCXNjLT5p dHNfbHBpX21heGlkID0gbHBpX2lkX251bTsKKworCWJpdHNfaW5fY2h1bmsgPSBzaXplb2YoKnNj LT5pdHNfbHBpX2JpdG1hcCkgKiBOQkJZOworCisJLyoKKwkgKiBSb3VuZCB1cCB0byB0aGUgbnVt YmVyIG9mIGJpdHMgaW4gY2h1bmsuCisJICogV2Ugd2lsbCBuZWVkIHRvIHRha2UgY2FyZSB0byBh dm9pZCB1c2luZyBpbnZhbGlkIExQSSBJRHMgbGF0ZXIuCisJICovCisJbHBpX2lkX251bSA9IHJv dW5kdXAyKGxwaV9pZF9udW0sIGJpdHNfaW5fY2h1bmspOworCWxwaV9jaHVua3NfbnVtID0gbHBp X2lkX251bSAvIGJpdHNfaW5fY2h1bms7CisKKwlzYy0+aXRzX2xwaV9iaXRtYXAgPQorCSAgICBj b250aWdtYWxsb2MoKGxwaV9jaHVua3NfbnVtICogc2l6ZW9mKCpzYy0+aXRzX2xwaV9iaXRtYXAp KSwKKwkgICAgTV9HSUNfVjNfSVRTLCAoTV9XQUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVMLAorCSAg ICBzaXplb2YoKnNjLT5pdHNfbHBpX2JpdG1hcCksIDApOworfQorCitzdGF0aWMgaW50CitscGlf YWxsb2NfY2h1bmsoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgbHBpX2NodW5r ICpscGljLAorICAgIHVfaW50IG52ZWNzKQoreworCWludCBmY2xyOyAvKiBGaXJzdCBjbGVhcmVk IGJpdCAqLworCXVpbnQ4X3QgKmJpdG1hcDsKKwlzaXplX3QgbmIsIGk7CisKKwliaXRtYXAgPSAo dWludDhfdCAqKXNjLT5pdHNfbHBpX2JpdG1hcDsKKworCWZjbHIgPSAwOworcmV0cnk6CisJLyog Q2hlY2sgb3RoZXIgYml0cyAtIHNsb29vb3cgKi8KKwlmb3IgKGkgPSAwLCBuYiA9IGZjbHI7IGkg PCBudmVjczsgaSsrLCBuYisrKSB7CisJCWlmIChuYiA+IHNjLT5pdHNfbHBpX21heGlkKQorCQkJ cmV0dXJuIChFSU5WQUwpOworCisJCWlmIChpc3NldChiaXRtYXAsIG5iKSkgeworCQkJLyogVG8g bGl0dGxlIGZyZWUgYml0cyBpbiB0aGlzIGFyZWEuIE1vdmUgb24uICovCisJCQlmY2xyID0gbmIg KyAxOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwkvKiBUaGlzIGFyZWEgaXMgZnJlZS4gVGFr ZSBpdC4gKi8KKwliaXRfbnNldChiaXRtYXAsIGZjbHIsIGZjbHIgKyBudmVjcyAtIDEpOworCWxw aWMtPmxwaV9iYXNlID0gZmNsciArIEdJQ19GSVJTVF9MUEk7CisJbHBpYy0+bHBpX251bSA9IG52 ZWNzOworCWxwaWMtPmxwaV9mcmVlID0gbHBpYy0+bHBpX251bTsKKworCXJldHVybiAoMCk7Cit9 CisKK3N0YXRpYyB2b2lkCitscGlfY29uZmlndXJlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpz Yywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWludDMyX3QgbHBpbnVtLCBib29sZWFu X3QgdW5tYXNrKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpn aWNfc2M7CisJdWludDhfdCAqY29uZl9ieXRlOworCisJcGFyZW50ID0gZGV2aWNlX2dldF9wYXJl bnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOworCisJY29u Zl9ieXRlID0gKHVpbnQ4X3QgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlOwor CWNvbmZfYnl0ZSArPSAobHBpbnVtIC0gR0lDX0ZJUlNUX0xQSSk7CisKKwlpZiAodW5tYXNrKQor CQkqY29uZl9ieXRlIHw9IExQSV9DT05GX0VOQUJMRTsKKwllbHNlCisJCSpjb25mX2J5dGUgJj0g fkxQSV9DT05GX0VOQUJMRTsKKworCWlmICgoZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmZsYWdz ICYgTFBJX0ZMQUdTX0NPTkZfRkxVU0gpICE9IDApIHsKKwkJLyogQ2xlYW4gRC1jYWNoZSB1bmRl ciBjb25maWd1cmF0aW9uIGJ5dGUgKi8KKwkJY3B1X2RjYWNoZV93Yl9yYW5nZSgodm1fb2Zmc2V0 X3QpY29uZl9ieXRlLCBzaXplb2YoKmNvbmZfYnl0ZSkpOworCX0gZWxzZSB7CisJCS8qIERTQiBp bm5lciBzaGFyZWFibGUsIHN0b3JlICovCisJCWRzYihpc2hzdCk7CisJfQorCisJaXRzX2NtZF9p bnYoc2MsIGl0c19kZXYsIGxwaW51bSk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfbWFwX3RvX2Rl dmljZShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfZGV2ICppdHNfZGV2 LAorICAgIHVpbnQzMl90IGlkLCB1aW50MzJfdCBwaWQpCit7CisKKwlpZiAoKHBpZCA8IGl0c19k ZXYtPmxwaXMubHBpX2Jhc2UpIHx8CisJICAgIChwaWQgPj0gKGl0c19kZXYtPmxwaXMubHBpX2Jh c2UgKyBpdHNfZGV2LT5scGlzLmxwaV9udW0pKSkKKwkJcGFuaWMoIlRyeWluZyB0byBtYXAgaXZh bGlkIExQSSAldSBmb3IgdGhlIGRldmljZVxuIiwgcGlkKTsKKworCWl0c19jbWRfbWFwdmkoc2Ms IGl0c19kZXYsIGlkLCBwaWQpOworfQorCitzdGF0aWMgdm9pZAorbHBpX3htYXNrX2lycShkZXZp Y2VfdCBwYXJlbnQsIHVpbnQzMl90IGlycSwgYm9vbGVhbl90IHVubWFzaykKK3sKKwlzdHJ1Y3Qg aXRzX2RldiAqaXRzX2RldjsKKworCVRBSUxRX0ZPUkVBQ0goaXRzX2RldiwgJml0c19zYy0+aXRz X2Rldl9saXN0LCBlbnRyeSkgeworCQlpZiAoaXJxID49IGl0c19kZXYtPmxwaXMubHBpX2Jhc2Ug JiYKKwkJICAgIGlycSA8IChpdHNfZGV2LT5scGlzLmxwaV9iYXNlICsgaXRzX2Rldi0+bHBpcy5s cGlfbnVtKSkgeworCQkJbHBpX2NvbmZpZ3VyZShpdHNfc2MsIGl0c19kZXYsIGlycSwgdW5tYXNr KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXBhbmljKCJUcnlpbmcgdG8gJXMgbm90IGV4aXN0 aW5nIExQSTogJXVcbiIsCisJICAgICh1bm1hc2sgPT0gVFJVRSkgPyAidW5tYXNrIiA6ICJtYXNr IiwgaXJxKTsKK30KKwordm9pZAorbHBpX3VubWFza19pcnEoZGV2aWNlX3QgcGFyZW50LCB1aW50 MzJfdCBpcnEpCit7CisKKwlscGlfeG1hc2tfaXJxKHBhcmVudCwgaXJxLCAxKTsKK30KKwordm9p ZAorbHBpX21hc2tfaXJxKGRldmljZV90IHBhcmVudCwgdWludDMyX3QgaXJxKQoreworCisJbHBp X3htYXNrX2lycShwYXJlbnQsIGlycSwgMCk7Cit9CisKKy8qCisgKiBDb21tYW5kcyBoYW5kbGlu Zy4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9jb21tYW5kKHN0cnVj dCBpdHNfY21kICpjbWQsIHVpbnQ4X3QgY21kX3R5cGUpCit7CisJLyogQ29tbWFuZCBmaWVsZDog RFcwIFs3OjBdICovCisJY21kLT5jbWRfZHdvcmRbMF0gJj0gfkNNRF9DT01NQU5EX01BU0s7CisJ Y21kLT5jbWRfZHdvcmRbMF0gfD0gY21kX3R5cGU7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lk CitjbWRfZm9ybWF0X2RldmlkKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQzMl90IGRldmlkKQor eworCS8qIERldmljZSBJRCBmaWVsZDogRFcwIFs2MzozMl0gKi8KKwljbWQtPmNtZF9kd29yZFsw XSAmPSB+Q01EX0RFVklEX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMF0gfD0gKCh1aW50NjRfdClk ZXZpZCA8PCBDTURfREVWSURfU0hJRlQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21k X2Zvcm1hdF9zaXplKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQxNl90IHNpemUpCit7CisJLyog U2l6ZSBmaWVsZDogRFcxIFs0OjBdICovCisJY21kLT5jbWRfZHdvcmRbMV0gJj0gfkNNRF9TSVpF X01BU0s7CisJY21kLT5jbWRfZHdvcmRbMV0gfD0gKHNpemUgJiBDTURfU0laRV9NQVNLKTsKK30K Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfaWQoc3RydWN0IGl0c19jbWQgKmNt ZCwgdWludDMyX3QgaWQpCit7CisJLyogSUQgZmllbGQ6IERXMSBbMzE6MF0gKi8KKwljbWQtPmNt ZF9kd29yZFsxXSAmPSB+Q01EX0lEX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMV0gfD0gaWQ7Cit9 CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X3BpZChzdHJ1Y3QgaXRzX2NtZCAq Y21kLCB1aW50MzJfdCBwaWQpCit7CisJLyogUGh5c2ljYWwgSUQgZmllbGQ6IERXMSBbNjM6MzJd ICovCisJY21kLT5jbWRfZHdvcmRbMV0gJj0gfkNNRF9QSURfTUFTSzsKKwljbWQtPmNtZF9kd29y ZFsxXSB8PSAoKHVpbnQ2NF90KXBpZCA8PCBDTURfUElEX1NISUZUKTsKK30KKworc3RhdGljIF9f aW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfY29sKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQxNl90 IGNvbF9pZCkKK3sKKwkvKiBDb2xsZWN0aW9uIGZpZWxkOiBEVzIgWzE2OjBdICovCisJY21kLT5j bWRfZHdvcmRbMl0gJj0gfkNNRF9DT0xfTUFTSzsKKwljbWQtPmNtZF9kd29yZFsyXSB8PSBjb2xf aWQ7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X3RhcmdldChzdHJ1Y3Qg aXRzX2NtZCAqY21kLCB1aW50NjRfdCB0YXJnZXQpCit7CisJLyogVGFyZ2V0IEFkZHJlc3MgZmll bGQ6IERXMiBbNDc6MTZdICovCisJY21kLT5jbWRfZHdvcmRbMl0gJj0gfkNNRF9UQVJHRVRfTUFT SzsKKwljbWQtPmNtZF9kd29yZFsyXSB8PSAodGFyZ2V0ICYgQ01EX1RBUkdFVF9NQVNLKTsKK30K Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfaXR0KHN0cnVjdCBpdHNfY21kICpj bWQsIHVpbnQ2NF90IGl0dCkKK3sKKwkvKiBJVFQgQWRkcmVzcyBmaWVsZDogRFcyIFs0Nzo4XSAq LworCWNtZC0+Y21kX2R3b3JkWzJdICY9IH5DTURfSVRUX01BU0s7CisJY21kLT5jbWRfZHdvcmRb Ml0gfD0gKGl0dCAmIENNRF9JVFRfTUFTSyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitj bWRfZm9ybWF0X3ZhbGlkKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQ4X3QgdmFsaWQpCit7CisJ LyogVmFsaWQgZmllbGQ6IERXMiBbNjNdICovCisJY21kLT5jbWRfZHdvcmRbMl0gJj0gfkNNRF9W QUxJRF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzJdIHw9ICgodWludDY0X3QpdmFsaWQgPDwgQ01E X1ZBTElEX1NISUZUKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9maXhfZW5kaWFu KHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg bml0ZW1zKGNtZC0+Y21kX2R3b3JkKTsgaSsrKQorCQljbWQtPmNtZF9kd29yZFtpXSA9IGh0b2xl NjQoY21kLT5jbWRfZHdvcmRbaV0pOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9tYXBjKHN0 cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jb2wgKmNvbCwgdWludDhfdCB2 YWxpZCkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90eXBlID0g SVRTX0NNRF9NQVBDOworCWRlc2MuY21kX2Rlc2NfbWFwYy5jb2wgPSBjb2w7CisJLyoKKwkgKiBW YWxpZCBiaXQgc2V0IC0gbWFwIHRoZSBjb2xsZWN0aW9uLgorCSAqIFZhbGlkIGJpdCBjbGVhcmVk IC0gdW5tYXAgdGhlIGNvbGxlY3Rpb24uCisJICovCisJZGVzYy5jbWRfZGVzY19tYXBjLnZhbGlk ID0gdmFsaWQ7CisKKwlpdHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQK K2l0c19jbWRfbWFwdmkoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2Rl diAqaXRzX2RldiwKKyAgICB1aW50MzJfdCBpZCwgdWludDMyX3QgcGlkKQoreworCXN0cnVjdCBp dHNfY21kX2Rlc2MgZGVzYzsKKworCWRlc2MuY21kX3R5cGUgPSBJVFNfQ01EX01BUFZJOworCWRl c2MuY21kX2Rlc2NfbWFwdmkuaXRzX2RldiA9IGl0c19kZXY7CisJZGVzYy5jbWRfZGVzY19tYXB2 aS5pZCA9IGlkOworCWRlc2MuY21kX2Rlc2NfbWFwdmkucGlkID0gcGlkOworCisJaXRzX2NtZF9z ZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fdW51c2VkCitpdHNfY21kX21hcGko c3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwKKyAg ICB1aW50MzJfdCBscGludW0pCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVz Yy5jbWRfdHlwZSA9IElUU19DTURfTUFQSTsKKwlkZXNjLmNtZF9kZXNjX21hcGkuaXRzX2RldiA9 IGl0c19kZXY7CisJZGVzYy5jbWRfZGVzY19tYXBpLmxwaW51bSA9IGxwaW51bTsKKworCWl0c19j bWRfc2VuZChzYywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9tYXBkKHN0cnVj dCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWlu dDhfdCB2YWxpZCkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90 eXBlID0gSVRTX0NNRF9NQVBEOworCWRlc2MuY21kX2Rlc2NfbWFwZC5pdHNfZGV2ID0gaXRzX2Rl djsKKwlkZXNjLmNtZF9kZXNjX21hcGQudmFsaWQgPSB2YWxpZDsKKworCWl0c19jbWRfc2VuZChz YywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9pbnYoc3RydWN0IGdpY192M19p dHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwKKyAgICB1aW50MzJfdCBscGlu dW0pCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5jbWRfdHlwZSA9IElU U19DTURfSU5WOworCWRlc2MuY21kX2Rlc2NfaW52LmxwaW51bSA9IGxwaW51bSAtIGl0c19kZXYt PmxwaXMubHBpX2Jhc2U7CisJZGVzYy5jbWRfZGVzY19pbnYuaXRzX2RldiA9IGl0c19kZXY7CisK KwlpdHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfaW52 YWxsKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jb2wgKmNvbCkKK3sK KwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90eXBlID0gSVRTX0NNRF9J TlZBTEw7CisJZGVzYy5jbWRfZGVzY19pbnZhbGwuY29sID0gY29sOworCisJaXRzX2NtZF9zZW5k KHNjLCAmZGVzYyk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZXMgZm9yIGNvbW1hbmRzIHBy b2Nlc3NpbmcuCisgKi8KK3N0YXRpYyBfX2lubGluZSBib29sZWFuX3QKK2l0c19jbWRfcXVldWVf ZnVsbChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJc2l6ZV90IHJlYWRfaWR4LCB3 cml0ZV9pZHg7CisKKwl3cml0ZV9pZHggPSAoc2l6ZV90KShzYy0+aXRzX2NtZHFfd3JpdGUgLSBz Yy0+aXRzX2NtZHFfYmFzZSk7CisJcmVhZF9pZHggPSBnaWNfaXRzX3JlYWQoc2MsIDQsIEdJVFNf Q1JFQURSKSAvIHNpemVvZihzdHJ1Y3QgaXRzX2NtZCk7CisKKwkvKgorCSAqIFRoZSBxdWV1ZSBp cyBmdWxsIHdoZW4gdGhlIHdyaXRlIG9mZnNldCBwb2ludHMKKwkgKiBhdCB0aGUgY29tbWFuZCBi ZWZvcmUgdGhlIGN1cnJlbnQgcmVhZCBvZmZzZXQuCisJICovCisJaWYgKCgod3JpdGVfaWR4ICsg MSkgJSBJVFNfQ01EUV9ORU5UUklFUykgPT0gcmVhZF9pZHgpCisJCXJldHVybiAoVFJVRSk7CisK KwlyZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2l0c19jbWRfc3lu YyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisK KwlpZiAoKHNjLT5pdHNfZmxhZ3MgJiBJVFNfRkxBR1NfQ01EUV9GTFVTSCkgIT0gMCkgeworCQkv KiBDbGVhbiBELWNhY2hlIHVuZGVyIGNvbW1hbmQuICovCisJCWNwdV9kY2FjaGVfd2JfcmFuZ2Uo KHZtX29mZnNldF90KWNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl9IGVsc2UgeworCQkvKiBEU0IgaW5u ZXIgc2hhcmVhYmxlLCBzdG9yZSAqLworCQlkc2IoaXNoc3QpOworCX0KKworfQorCitzdGF0aWMg c3RydWN0IGl0c19jbWQgKgoraXRzX2NtZF9hbGxvY19sb2NrZWQoc3RydWN0IGdpY192M19pdHNf c29mdGMgKnNjKQoreworCXN0cnVjdCBpdHNfY21kICpjbWQ7CisJc2l6ZV90IHVzX2xlZnQ7CisK KwkvKgorCSAqIFhYWCBBUk02NFRPRE86IFRoaXMgaXMgb2J2aW91c2x5IGEgc2lnbmlmaWNhbnQg ZGVsYXkuCisJICogVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0IGN1cnJlbnRseSB0aGUgdGlt ZSBmcmFtZXMgZm9yCisJICogdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKGFuZCB0aGVyZWZvcmUg ZnJlZSB0aGUgZGVzY3JpcHRvcikKKwkgKiBhcmUgbm90IGtub3duLgorCSAqLworCXVzX2xlZnQg PSAxMDAwMDAwOworCisJbXR4X2Fzc2VydCgmc2MtPml0c19zcGluX210eCwgTUFfT1dORUQpOwor CXdoaWxlIChpdHNfY21kX3F1ZXVlX2Z1bGwoc2MpKSB7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkg eworCQkJLyogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBmcmVlIGNvbW1hbmQgKi8KKwkJCWRl dmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBm cmVlIGNvbW1hbmRcbiIpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlERUxBWSgxKTsKKwl9 CisKKwljbWQgPSBzYy0+aXRzX2NtZHFfd3JpdGU7CisJc2MtPml0c19jbWRxX3dyaXRlKys7CisK KwlpZiAoc2MtPml0c19jbWRxX3dyaXRlID09IChzYy0+aXRzX2NtZHFfYmFzZSArIElUU19DTURR X05FTlRSSUVTKSkgeworCQkvKiBXcmFwIHRoZSBxdWV1ZSAqLworCQlzYy0+aXRzX2NtZHFfd3Jp dGUgPSBzYy0+aXRzX2NtZHFfYmFzZTsKKwl9CisKKwlyZXR1cm4gKGNtZCk7Cit9CisKK3N0YXRp YyB1aW50NjRfdAoraXRzX2NtZF9wcmVwYXJlKHN0cnVjdCBpdHNfY21kICpjbWQsIHN0cnVjdCBp dHNfY21kX2Rlc2MgKmRlc2MpCit7CisJdWludDY0X3QgdGFyZ2V0OworCXVpbnQ4X3QgY21kX3R5 cGU7CisJdV9pbnQgc2l6ZTsKKwlib29sZWFuX3QgZXJyb3I7CisKKwllcnJvciA9IEZBTFNFOwor CWNtZF90eXBlID0gZGVzYy0+Y21kX3R5cGU7CisJdGFyZ2V0ID0gSVRTX1RBUkdFVF9OT05FOwor CisJc3dpdGNoIChjbWRfdHlwZSkgeworCWNhc2UgSVRTX0NNRF9TWU5DOgkvKiBXYWl0IGZvciBw cmV2aW91cyBjb21tYW5kcyBjb21wbGV0aW9uICovCisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNj X3N5bmMuY29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01E X1NZTkMpOworCQljbWRfZm9ybWF0X3RhcmdldChjbWQsIHRhcmdldCk7CisJCWJyZWFrOworCWNh c2UgSVRTX0NNRF9NQVBEOgkvKiBBc3NpZ24gSVRUIHRvIGRldmljZSAqLworCQl0YXJnZXQgPSBk ZXNjLT5jbWRfZGVzY19tYXBkLml0c19kZXYtPmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1h dF9jb21tYW5kKGNtZCwgSVRTX0NNRF9NQVBEKTsKKwkJY21kX2Zvcm1hdF9pdHQoY21kLCB2dG9w aHlzKGRlc2MtPmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+aXR0KSk7CisJCS8qCisJCSAqIFNpemUg ZGVzY3JpYmVzIG51bWJlciBvZiBiaXRzIHRvIGVuY29kZSBpbnRlcnJ1cHQgSURzCisJCSAqIHN1 cHBvcnRlZCBieSB0aGUgZGV2aWNlIG1pbnVzIG9uZS4KKwkJICogV2hlbiBWICh2YWxpZCkgYml0 IGlzIHplcm8sIHRoaXMgZmllbGQgc2hvdWxkIGJlIHdyaXR0ZW4KKwkJICogYXMgemVyby4KKwkJ ICovCisJCWlmIChkZXNjLT5jbWRfZGVzY19tYXBkLnZhbGlkICE9IDApIHsKKwkJCXNpemUgPSBm bHMoZGVzYy0+Y21kX2Rlc2NfbWFwZC5pdHNfZGV2LT5scGlzLmxwaV9udW0pOworCQkJc2l6ZSA9 IE1BWCgxLCBzaXplKSAtIDE7CisJCX0gZWxzZQorCQkJc2l6ZSA9IDA7CisKKwkJY21kX2Zvcm1h dF9zaXplKGNtZCwgc2l6ZSk7CisJCWNtZF9mb3JtYXRfZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVz Y19tYXBkLml0c19kZXYtPmRldmlkKTsKKwkJY21kX2Zvcm1hdF92YWxpZChjbWQsIGRlc2MtPmNt ZF9kZXNjX21hcGQudmFsaWQpOworCQlicmVhazsKKwljYXNlIElUU19DTURfTUFQQzoJLyogTWFw IGNvbGxlY3Rpb24gdG8gUmUtRGlzdHJpYnV0b3IgKi8KKwkJdGFyZ2V0ID0gZGVzYy0+Y21kX2Rl c2NfbWFwYy5jb2wtPmNvbF90YXJnZXQ7CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQsIElUU19D TURfTUFQQyk7CisJCWNtZF9mb3JtYXRfY29sKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwYy5jb2wt PmNvbF9pZCk7CisJCWNtZF9mb3JtYXRfdmFsaWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXBjLnZh bGlkKTsKKwkJY21kX2Zvcm1hdF90YXJnZXQoY21kLCB0YXJnZXQpOworCQlicmVhazsKKwljYXNl IElUU19DTURfTUFQVkk6CisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNjX21hcHZpLml0c19kZXYt PmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5kKGNtZCwgSVRTX0NNRF9NQVBW SSk7CisJCWNtZF9mb3JtYXRfZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pdHNfZGV2 LT5kZXZpZCk7CisJCWNtZF9mb3JtYXRfaWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pZCk7 CisJCWNtZF9mb3JtYXRfcGlkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwdmkucGlkKTsKKwkJY21k X2Zvcm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pdHNfZGV2LT5jb2wtPmNvbF9p ZCk7CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9NQVBJOgorCQl0YXJnZXQgPSBkZXNjLT5jbWRf ZGVzY19tYXBpLml0c19kZXYtPmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5k KGNtZCwgSVRTX0NNRF9NQVBJKTsKKwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNtZF9k ZXNjX21hcGkuaXRzX2Rldi0+ZGV2aWQpOworCQljbWRfZm9ybWF0X2lkKGNtZCwgZGVzYy0+Y21k X2Rlc2NfbWFwaS5scGludW0pOworCQljbWRfZm9ybWF0X2NvbChjbWQsIGRlc2MtPmNtZF9kZXNj X21hcGkuaXRzX2Rldi0+Y29sLT5jb2xfaWQpOworCQlicmVhazsKKwljYXNlIElUU19DTURfSU5W OgorCQl0YXJnZXQgPSBkZXNjLT5jbWRfZGVzY19pbnYuaXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0 OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX0lOVik7CisJCWNtZF9mb3JtYXRf ZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVzY19pbnYuaXRzX2Rldi0+ZGV2aWQpOworCQljbWRfZm9y bWF0X2lkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfaW52LmxwaW51bSk7CisJCWJyZWFrOworCWNhc2Ug SVRTX0NNRF9JTlZBTEw6CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQsIElUU19DTURfSU5WQUxM KTsKKwkJY21kX2Zvcm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19pbnZhbGwuY29sLT5jb2xf aWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvciA9IFRSVUU7CisJCWJyZWFrOworCX0K KworCWlmICghZXJyb3IpCisJCWNtZF9maXhfZW5kaWFuKGNtZCk7CisKKwlyZXR1cm4gKHRhcmdl dCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAoraXRzX2NtZF9jd3JpdGVyX29mZnNl dChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisJ dWludDY0X3Qgb2ZmOworCisJb2ZmID0gKGNtZCAtIHNjLT5pdHNfY21kcV9iYXNlKSAqIHNpemVv ZigqY21kKTsKKworCXJldHVybiAob2ZmKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfd2Fp dF9jb21wbGV0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jbWQg KmNtZF9maXJzdCwKKyAgICBzdHJ1Y3QgaXRzX2NtZCAqY21kX2xhc3QpCit7CisJdWludDY0X3Qg Zmlyc3QsIGxhc3QsIHJlYWQ7CisJc2l6ZV90IHVzX2xlZnQ7CisKKwkvKgorCSAqIFhYWCBBUk02 NFRPRE86IFRoaXMgaXMgb2J2aW91c2x5IGEgc2lnbmlmaWNhbnQgZGVsYXkuCisJICogVGhlIHJl YXNvbiBmb3IgdGhhdCBpcyB0aGF0IGN1cnJlbnRseSB0aGUgdGltZSBmcmFtZXMgZm9yCisJICog dGhlIGNvbW1hbmQgdG8gY29tcGxldGUgYXJlIG5vdCBrbm93bi4KKwkgKi8KKwl1c19sZWZ0ID0g MTAwMDAwMDsKKworCWZpcnN0ID0gaXRzX2NtZF9jd3JpdGVyX29mZnNldChzYywgY21kX2ZpcnN0 KTsKKwlsYXN0ID0gaXRzX2NtZF9jd3JpdGVyX29mZnNldChzYywgY21kX2xhc3QpOworCisJZm9y ICg7OykgeworCQlyZWFkID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0NSRUFEUik7CisJCWlm IChyZWFkIDwgZmlyc3QgfHwgcmVhZCA+PSBsYXN0KQorCQkJYnJlYWs7CisKKwkJaWYgKHVzX2xl ZnQtLSA9PSAwKSB7CisJCQkvKiBUaGlzIG1lYW5zIHRpbWVvdXQgKi8KKwkJCWRldmljZV9wcmlu dGYoc2MtPmRldiwKKwkJCSAgICAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBDTUQgY29tcGxl dGlvbi5cbiIpOworCQkJcmV0dXJuOworCQl9CisJCURFTEFZKDEpOworCX0KK30KKworc3RhdGlj IGludAoraXRzX2NtZF9zZW5kKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0 c19jbWRfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXRzX2NtZCAqY21kLCAqY21kX3N5bmM7CisJ c3RydWN0IGl0c19jb2wgY29sX3N5bmM7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjX3N5bmM7 CisJdWludDY0X3QgdGFyZ2V0LCBjd3JpdGVyOworCisJbXR4X2xvY2tfc3Bpbigmc2MtPml0c19z cGluX210eCk7CisJY21kID0gaXRzX2NtZF9hbGxvY19sb2NrZWQoc2MpOworCW10eF91bmxvY2tf c3Bpbigmc2MtPml0c19zcGluX210eCk7CisJaWYgKGNtZCA9PSBOVUxMKSB7CisJCWRldmljZV9w cmludGYoc2MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBJVFMgY29tbWFuZFxuIik7CisJCXJl dHVybiAoRUJVU1kpOworCX0KKworCXRhcmdldCA9IGl0c19jbWRfcHJlcGFyZShjbWQsIGRlc2Mp OworCWl0c19jbWRfc3luYyhzYywgY21kKTsKKworCWlmICh0YXJnZXQgIT0gSVRTX1RBUkdFVF9O T05FKSB7CisJCW10eF9sb2NrX3NwaW4oJnNjLT5pdHNfc3Bpbl9tdHgpOworCQljbWRfc3luYyA9 IGl0c19jbWRfYWxsb2NfbG9ja2VkKHNjKTsKKwkJbXR4X3VubG9ja19zcGluKCZzYy0+aXRzX3Nw aW5fbXR4KTsKKwkJaWYgKGNtZF9zeW5jID09IE5VTEwpCisJCQlnb3RvIGVuZDsKKwkJZGVzY19z eW5jLmNtZF90eXBlID0gSVRTX0NNRF9TWU5DOworCQljb2xfc3luYy5jb2xfdGFyZ2V0ID0gdGFy Z2V0OworCQlkZXNjX3N5bmMuY21kX2Rlc2Nfc3luYy5jb2wgPSAmY29sX3N5bmM7CisJCWl0c19j bWRfcHJlcGFyZShjbWRfc3luYywgJmRlc2Nfc3luYyk7CisJCWl0c19jbWRfc3luYyhzYywgY21k X3N5bmMpOworCX0KK2VuZDoKKwkvKiBVcGRhdGUgR0lUU19DV1JJVEVSICovCisJbXR4X2xvY2tf c3Bpbigmc2MtPml0c19zcGluX210eCk7CisJY3dyaXRlciA9IGl0c19jbWRfY3dyaXRlcl9vZmZz ZXQoc2MsIHNjLT5pdHNfY21kcV93cml0ZSk7CisJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19D V1JJVEVSLCBjd3JpdGVyKTsKKwltdHhfdW5sb2NrX3NwaW4oJnNjLT5pdHNfc3Bpbl9tdHgpOwor CisJaXRzX2NtZF93YWl0X2NvbXBsZXRpb24oc2MsIGNtZCwgc2MtPml0c19jbWRxX3dyaXRlKTsK KworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXRzX2RldiAqCitpdHNfZGV2aWNl X2ZpbmRfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgZGV2aWNlX3QgcGNpX2Rl dikKK3sKKwlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKworCW10eF9hc3NlcnQoJnNjLT5pdHNf bXR4LCBNQV9PV05FRCk7CisJLyogRmluZCBleGlzdGluZyBkZXZpY2UgaWYgYW55ICovCisJVEFJ TFFfRk9SRUFDSChpdHNfZGV2LCAmc2MtPml0c19kZXZfbGlzdCwgZW50cnkpIHsKKwkJaWYgKGl0 c19kZXYtPnBjaV9kZXYgPT0gcGNpX2RldikKKwkJCXJldHVybiAoaXRzX2Rldik7CisJfQorCisJ cmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBpdHNfZGV2ICoKK2l0c19kZXZpY2Vf YWxsb2NfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgZGV2aWNlX3QgcGNpX2Rl diwKKyAgICB1X2ludCBudmVjcykKK3sKKwlzdHJ1Y3QgaXRzX2RldiAqbmV3ZGV2OworCXVpbnQ2 NF90IHR5cGVyOworCXVpbnQzMl90IGRldmlkOworCXVfaW50IGNwdWlkOworCXNpemVfdCBlc2l6 ZTsKKworCW10eF9hc3NlcnQoJnNjLT5pdHNfbXR4LCBNQV9PV05FRCk7CisJLyogRmluZCBleGlz dGluZyBkZXZpY2UgaWYgYW55ICovCisJbmV3ZGV2ID0gaXRzX2RldmljZV9maW5kX2xvY2tlZChz YywgcGNpX2Rldik7CisJaWYgKG5ld2RldiAhPSBOVUxMKQorCQlyZXR1cm4gKG5ld2Rldik7CisK KwlkZXZpZCA9IFBDSV9ERVZJRChwY2lfZGV2KTsKKworCS8qIFRoZXJlIHdhcyBubyBwcmV2aW91 c2x5IGNyZWF0ZWQgZGV2aWNlLiBDcmVhdGUgb25lIG5vdyAqLworCW5ld2RldiA9IG1hbGxvYyhz aXplb2YoKm5ld2RldiksIE1fR0lDX1YzX0lUUywgKE1fV0FJVE9LIHwgTV9aRVJPKSk7CisJbmV3 ZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKKwluZXdkZXYtPmRldmlkID0gZGV2aWQ7CisKKwlpZiAo bHBpX2FsbG9jX2NodW5rKHNjLCAmbmV3ZGV2LT5scGlzLCBudmVjcykgIT0gMCkgeworCQlmcmVl KG5ld2RldiwgTV9HSUNfVjNfSVRTKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKiBHZXQg SVRUIGVudHJ5IHNpemUgKi8KKwl0eXBlciA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lUU19UWVBF Uik7CisJZXNpemUgPSBHSVRTX1RZUEVSX0lUVEVTKHR5cGVyKTsKKwkvKgorCSAqIEFsbG9jYXRl IElUVCBmb3IgdGhpcyBkZXZpY2UuCisJICogUEEgaGFzIHRvIGJlIDI1NiBCIGFsaWduZWQuIEF0 IGxlYXN0IHR3byBlbnRyaWVzIGZvciBkZXZpY2UuCisJICovCisJbmV3ZGV2LT5pdHQgPSAodm1f b2Zmc2V0X3QpY29udGlnbWFsbG9jKAorCSAgICByb3VuZHVwMihyb3VuZHVwMihudmVjcywgMikg KiBlc2l6ZSwgMHgxMDApLCBNX0dJQ19WM19JVFMsCisJICAgIChNX1dBSVRPSyB8IE1fWkVSTyks IDAsIH4wVUwsIDB4MTAwLCAwKTsKKworCS8qCisJICogWFhYIEFSTTY0VE9ETzogQ3VycmVudGx5 IGFsbCBpbnRlcnJ1cHRzIGFyZSBnb2luZworCSAqIHRvIGJlIGJvdW5kIHRvIHRoZSBDUFUgdGhh dCBwZXJmb3JtcyB0aGUgY29uZmlndXJhdGlvbi4KKwkgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNw dWlkKTsKKwluZXdkZXYtPmNvbCA9ICZzYy0+aXRzX2NvbHNbY3B1aWRdOworCisJVEFJTFFfSU5T RVJUX1RBSUwoJnNjLT5pdHNfZGV2X2xpc3QsIG5ld2RldiwgZW50cnkpOworCisJLyogTWFwIGRl dmljZSB0byBpdHMgSVRUICovCisJaXRzX2NtZF9tYXBkKHNjLCBuZXdkZXYsIDEpOworCisJcmV0 dXJuIChuZXdkZXYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraXRzX2RldmljZV9hc2ln bl9scGlfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywKKyAgICBzdHJ1Y3QgaXRz X2RldiAqaXRzX2RldiwgdV9pbnQgKmlycSkKK3sKKworCW10eF9hc3NlcnQoJnNjLT5pdHNfbXR4 LCBNQV9PV05FRCk7CisJaWYgKGl0c19kZXYtPmxwaXMubHBpX2ZyZWUgPT0gMCkgeworCQlwYW5p YygiUmVxdWVzdGluZyBtb3JlIExQSXMgdGhhbiBhbGxvY2F0ZWQgZm9yIHRoaXMgZGV2aWNlLiAi CisJCSAgICAiTFBJIG51bTogJXUsIGZyZWUgJXUiLCBpdHNfZGV2LT5scGlzLmxwaV9udW0sCisJ CSAgICBpdHNfZGV2LT5scGlzLmxwaV9mcmVlKTsKKwl9CisJKmlycSA9IGl0c19kZXYtPmxwaXMu bHBpX2Jhc2UgKyAoaXRzX2Rldi0+bHBpcy5scGlfbnVtIC0KKwkgICAgaXRzX2Rldi0+bHBpcy5s cGlfZnJlZSk7CisJaXRzX2Rldi0+bHBpcy5scGlfZnJlZS0tOworfQorLyoKKyAqIE1lc3NhZ2Ug c2lnbmFsbGVkIGludGVycnVwdHMgaGFuZGxpbmcuCisgKi8KKworLyoKKyAqIFhYWCBBUk02NFRP RE86IFdhdGNoIG91dCBmb3IgImlycSIgdHlwZS4KKyAqCisgKiBJbiB0aGVvcnkgR0lDIGNhbiBo YW5kbGUgdXAgdG8gKDJeMzIgLSAxKSBpbnRlcnJ1cHQgSURzIHdoZXJlYXMKKyAqIHdlIHBhc3Mg ImlycSIgcG9pbnRlciBvZiB0eXBlIGludGVnZXIuIFRoaXMgaXMgb2J2aW91c2x5IHdyb25nIGJ1 dAorICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgd2F5IGFzIFBDSSBsYXllciB3YW50cyBpdCB0byBi ZSBkb25lLgorICovCitpbnQKK2dpY192M19pdHNfYWxsb2NfbXNpeChkZXZpY2VfdCBkZXYsIGRl dmljZV90IHBjaV9kZXYsIGludCAqaXJxKQoreworCXN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpz YzsKKwlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwl1X2ludCBudmVjczsKKworCXNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworCisJbXR4X2xvY2soJnNjLT5pdHNfbXR4KTsKKwludmVjcyA9 IFBDSV9NU0lYX05VTShwY2lfZGV2KTsKKworCS8qCisJICogQWxsb2NhdGUgZGV2aWNlIGFzIHNl ZW4gYnkgSVRTIGlmIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4KKwkgKiBOb3RpY2UgdGhhdCBNU0kt WCBpbnRlcnJ1cHRzIGFyZSBhbGxvY2F0ZWQgb24gb25lLWJ5LW9uZSBiYXNpcy4KKwkgKi8KKwlp dHNfZGV2ID0gaXRzX2RldmljZV9hbGxvY19sb2NrZWQoc2MsIHBjaV9kZXYsIG52ZWNzKTsKKwlp ZiAoaXRzX2RldiA9PSBOVUxMKSB7CisJCW10eF91bmxvY2soJnNjLT5pdHNfbXR4KTsKKwkJcmV0 dXJuIChFTk9NRU0pOworCX0KKworCWl0c19kZXZpY2VfYXNpZ25fbHBpX2xvY2tlZChzYywgaXRz X2RldiwgaXJxKTsKKwltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisKKwlyZXR1cm4gKDApOwor fQorCitpbnQKK2dpY192M19pdHNfYWxsb2NfbXNpKGRldmljZV90IGRldiwgZGV2aWNlX3QgcGNp X2RldiwgaW50IGNvdW50LCBpbnQgKmlycXMpCit7CisJc3RydWN0IGdpY192M19pdHNfc29mdGMg KnNjOworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisKKwkvKiBBbGxvY2F0ZSBkZXZpY2UgYXMgc2VlbiBieSBJVFMgaWYgbm90IGFscmVh ZHkgYXZhaWxhYmxlLiAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRzX2RldiA9IGl0 c19kZXZpY2VfYWxsb2NfbG9ja2VkKHNjLCBwY2lfZGV2LCBjb3VudCk7CisJaWYgKGl0c19kZXYg PT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisJCXJldHVybiAoRU5PTUVN KTsKKwl9CisKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJCWl0c19kZXZpY2VfYXNp Z25fbHBpX2xvY2tlZChzYywgaXRzX2RldiwgaXJxcyk7CisJCWlycXMrKzsKKwl9CisJbXR4X3Vu bG9jaygmc2MtPml0c19tdHgpOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitnaWNfdjNfaXRz X21hcF9tc2l4KGRldmljZV90IGRldiwgZGV2aWNlX3QgcGNpX2RldiwgaW50IGlycSwgdWludDY0 X3QgKmFkZHIsCisgICAgdWludDMyX3QgKmRhdGEpCit7CisJc3RydWN0IGdpY192M19pdHNfc29m dGMgKnNjOworCWJ1c19zcGFjZV9oYW5kbGVfdCBpdHNfYnNoOworCXN0cnVjdCBpdHNfZGV2ICpp dHNfZGV2OworCXVpbnQ2NF90IGl0c19wYTsKKwl1aW50MzJfdCBpZDsKKworCXNjID0gZGV2aWNl X2dldF9zb2Z0YyhkZXYpOworCS8qIFZlcmlmeSB0aGF0IHRoaXMgZGV2aWNlIGlzIGFsbG9jYXRl ZCBhbmQgb3ducyB0aGlzIExQSSAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRzX2Rl diA9IGl0c19kZXZpY2VfZmluZF9sb2NrZWQoc2MsIHBjaV9kZXYpOworCW10eF91bmxvY2soJnNj LT5pdHNfbXR4KTsKKwlpZiAoaXRzX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK KwlpZCA9IGlycSAtIGl0c19kZXYtPmxwaXMubHBpX2Jhc2U7CisJbHBpX21hcF90b19kZXZpY2Uo c2MsIGl0c19kZXYsIGlkLCBpcnEpOworCisJaXRzX2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZSgm c2MtPml0c19yZXNbMF0pOworCWl0c19wYSA9IHZ0b3BoeXMoaXRzX2JzaCk7CisKKwkqYWRkciA9 IChpdHNfcGEgKyBHSVRTX1RSQU5TTEFURVIpOworCSpkYXRhID0gaWQ7CisKKwlyZXR1cm4gKDAp OworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYyBiL3N5cy9hcm02 NC9hcm02NC9naWNfdjNfZmR0LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYwor KysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5j bHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KIAorI2luY2x1ZGUg PG1hY2hpbmUvcmVzb3VyY2UuaD4KKwogI2luY2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgog I2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMu aD4KQEAgLTUxLDExICs1MywyNyBAQAogc3RhdGljIGludCBnaWNfdjNfZmR0X3Byb2JlKGRldmlj ZV90KTsKIHN0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9hdHRhY2goZGV2aWNlX3QpOwogCitzdGF0aWMg c3RydWN0IHJlc291cmNlICpnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMoZGV2aWNlX3QsIGRldmlj ZV90LCBpbnQsIGludCAqLAorICAgIHVfbG9uZywgdV9sb25nLCB1X2xvbmcsIHVfaW50KTsKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2Z3X2J1c19kZXZpbmZvICpnaWNfdjNfb2Z3X2dldF9kZXZpbmZv KGRldmljZV90LCBkZXZpY2VfdCk7CisKIHN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX2Zk dF9tZXRob2RzW10gPSB7CiAJLyogRGV2aWNlIGludGVyZmFjZSAqLwogCURFVk1FVEhPRChkZXZp Y2VfcHJvYmUsCQlnaWNfdjNfZmR0X3Byb2JlKSwKIAlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJ Z2ljX3YzX2ZkdF9hdHRhY2gpLAogCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChi dXNfYWxsb2NfcmVzb3VyY2UsCQlnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMpLAorCURFVk1FVEhP RChidXNfYWN0aXZhdGVfcmVzb3VyY2UsCWJ1c19nZW5lcmljX2FjdGl2YXRlX3Jlc291cmNlKSwK KworCS8qIG9md19idXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKG9md19idXNfZ2V0X2Rldmlu Zm8sCWdpY192M19vZndfZ2V0X2RldmluZm8pLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9jb21w YXQsCW9md19idXNfZ2VuX2dldF9jb21wYXQpLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9tb2Rl bCwJb2Z3X2J1c19nZW5fZ2V0X21vZGVsKSwKKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfbmFtZSwJ b2Z3X2J1c19nZW5fZ2V0X25hbWUpLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9ub2RlLAlvZndf YnVzX2dlbl9nZXRfbm9kZSksCisJREVWTUVUSE9EKG9md19idXNfZ2V0X3R5cGUsCW9md19idXNf Z2VuX2dldF90eXBlKSwKKwogCS8qIEVuZCAqLwogCURFVk1FVEhPRF9FTkQKIH07CkBAIC03MSw2 ICs4OSwxMSBAQAogICAgIDAsIDAsIEJVU19QQVNTX0lOVEVSUlVQVCArIEJVU19QQVNTX09SREVS X01JRERMRSk7CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGRlY2xhcmF0aW9ucy4KKyAqLwor c3RhdGljIGludCBnaWNfdjNfb2Z3X2J1c19hdHRhY2goZGV2aWNlX3QpOworCisvKgogICogRGV2 aWNlIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludApAQCAtMTA5LDYgKzEzMiwxNyBAQAogCWVy ciA9IGdpY192M19hdHRhY2goZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOworCS8qCisJ ICogVHJ5IHRvIHJlZ2lzdGVyIElUUyB0byB0aGlzIEdJQy4KKwkgKiBHSUMgd2lsbCBhY3QgYXMg YSBidXMgaW4gdGhhdCBjYXNlLgorCSAqIEZhaWx1cmUgaGVyZSB3aWxsIG5vdCBhZmZlY3QgbWFp biBHSUMgZnVuY3Rpb25hbGl0eS4KKwkgKi8KKwlpZiAoZ2ljX3YzX29md19idXNfYXR0YWNoKGRl dikpIHsKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAg ICAiRmFpbGVkIHRvIGF0dGFjaCBJVFMgdG8gdGhpcyBHSUNcbiIpOworCQl9CisJfQogCiAJcmV0 dXJuIChlcnIpOwogCkBAIC0xMjIsMyArMTU2LDE1NSBAQAogCiAJcmV0dXJuIChlcnIpOwogfQor CisvKiBPRlcgYnVzIGludGVyZmFjZSAqLworc3RydWN0IGdpY192M19vZndfZGV2aW5mbyB7CisJ c3RydWN0IG9md19idXNfZGV2aW5mbwlkaV9kaW5mbzsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdAlk aV9ybDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Z3X2J1c19kZXZpbmZvICoKK2dpY192 M19vZndfZ2V0X2RldmluZm8oZGV2aWNlX3QgYnVzIF9fdW51c2VkLCBkZXZpY2VfdCBjaGlsZCkK K3sKKwlzdHJ1Y3QgZ2ljX3YzX29md19kZXZpbmZvICpkaTsKKworCWRpID0gZGV2aWNlX2dldF9p dmFycyhjaGlsZCk7CisJcmV0dXJuICgmZGktPmRpX2RpbmZvKTsKK30KKworc3RhdGljIHN0cnVj dCByZXNvdXJjZSAqCitnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMoZGV2aWNlX3QgYnVzLCBkZXZp Y2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9sb25n IGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZ2ljX3YzX29md19k ZXZpbmZvICpkaTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRyeSAqcmxlOworCWludCByYW5n ZXNfbGVuOworCisJaWYgKChzdGFydCA9PSAwVUwpICYmIChlbmQgPT0gfjBVTCkpIHsKKwkJaWYg KChkaSA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpKSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxM KTsKKwkJaWYgKHR5cGUgIT0gU1lTX1JFU19NRU1PUlkpCisJCQlyZXR1cm4gKE5VTEwpOworCisJ CS8qIEZpbmQgZGVmYXVsdHMgZm9yIHRoaXMgcmlkICovCisJCXJsZSA9IHJlc291cmNlX2xpc3Rf ZmluZCgmZGktPmRpX3JsLCB0eXBlLCAqcmlkKTsKKwkJaWYgKHJsZSA9PSBOVUxMKQorCQkJcmV0 dXJuIChOVUxMKTsKKworCQlzdGFydCA9IHJsZS0+c3RhcnQ7CisJCWVuZCA9IHJsZS0+ZW5kOwor CQljb3VudCA9IHJsZS0+Y291bnQ7CisJfQorCS8qCisJICogWFhYOiBObyByYW5nZXMgcmVtYXAh CisJICoJQWJzb2x1dGUgYWRkcmVzcyBpcyBleHBlY3RlZC4KKwkgKi8KKwlpZiAob2Z3X2J1c19o YXNfcHJvcChidXMsICJyYW5nZXMiKSkgeworCQlyYW5nZXNfbGVuID0gT0ZfZ2V0cHJvcGxlbihv ZndfYnVzX2dldF9ub2RlKGJ1cyksICJyYW5nZXMiKTsKKwkJaWYgKHJhbmdlc19sZW4gIT0gMCkg eworCQkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQkJZGV2aWNlX3ByaW50ZihjaGlsZCwKKwkJCQkg ICAgIlJhbmdlcyByZW1hcCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0KKwkJCXJldHVybiAoTlVM TCk7CisJCX0KKwl9CisJcmV0dXJuIChidXNfZ2VuZXJpY19hbGxvY19yZXNvdXJjZShidXMsIGNo aWxkLCB0eXBlLCByaWQsIHN0YXJ0LCBlbmQsCisJICAgIGNvdW50LCBmbGFncykpOworfQorCisv KiBIZWxwZXIgZnVuY3Rpb25zICovCisKKy8qCisgKiBCdXMgY2FwYWJpbGl0eSBzdXBwb3J0IGZv ciBHSUN2My4KKyAqIENvbGxlY3RzIGFuZCBjb25maWd1cmVzIGRldmljZSBpbmZvcm1hdGlvbnMg YW5kIGZpbmFsbHkKKyAqIGFkZHMgSVRTIGRldmljZSBhcyBhIGNoaWxkIG9mIEdJQ3YzIGluIE5l d2J1cyBoaWVyYXJjaHkuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19vZndfYnVzX2F0dGFjaChk ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19vZndfZGV2aW5mbyAqZGk7CisJZGV2aWNl X3QgY2hpbGQ7CisJcGhhbmRsZV90IHBhcmVudCwgbm9kZTsKKwlwY2VsbF90IGFkZHJfY2VsbHMs IHNpemVfY2VsbHM7CisKKwlwYXJlbnQgPSBvZndfYnVzX2dldF9ub2RlKGRldik7CisJaWYgKHBh cmVudCA+IDApIHsKKwkJYWRkcl9jZWxscyA9IDI7CisJCU9GX2dldGVuY3Byb3AocGFyZW50LCAi I2FkZHJlc3MtY2VsbHMiLCAmYWRkcl9jZWxscywKKwkJICAgIHNpemVvZihhZGRyX2NlbGxzKSk7 CisJCXNpemVfY2VsbHMgPSAyOworCQlPRl9nZXRlbmNwcm9wKHBhcmVudCwgIiNzaXplLWNlbGxz IiwgJnNpemVfY2VsbHMsCisJCSAgICBzaXplb2Yoc2l6ZV9jZWxscykpOworCQkvKiBJdGVyYXRl IHRocm91Z2ggYWxsIEdJQyBzdWJvcmRpbmF0ZXMgKi8KKwkJZm9yIChub2RlID0gT0ZfY2hpbGQo cGFyZW50KTsgbm9kZSA+IDA7IG5vZGUgPSBPRl9wZWVyKG5vZGUpKSB7CisJCQkvKiBBbGxvY2F0 ZSBhbmQgcG9wdWxhdGUgZGV2aW5mby4gKi8KKwkJCWRpID0gbWFsbG9jKHNpemVvZigqZGkpLCBN X0dJQ19WMywgTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJaWYgKG9md19idXNfZ2VuX3NldHVwX2Rl dmluZm8oJmRpLT5kaV9kaW5mbywgbm9kZSkpIHsKKwkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJ CQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkJCSAgICAiQ291bGQgbm90IHNldCB1cCBkZXZpbmZv IGZvciBJVFNcbiIpOworCQkJCX0KKwkJCQlmcmVlKGRpLCBNX0dJQ19WMyk7CisJCQkJY29udGlu dWU7CisJCQl9CisKKwkJCS8qIEluaXRpYWxpemUgYW5kIHBvcHVsYXRlIHJlc291cmNlIGxpc3Qu ICovCisJCQlyZXNvdXJjZV9saXN0X2luaXQoJmRpLT5kaV9ybCk7CisJCQlvZndfYnVzX3JlZ190 b19ybChkZXYsIG5vZGUsIGFkZHJfY2VsbHMsIHNpemVfY2VsbHMsCisJCQkgICAgJmRpLT5kaV9y bCk7CisKKwkJCS8qIFNob3VsZCBub3QgaGF2ZSBhbnkgaW50ZXJydXB0cywgc28gZG9uJ3QgYWRk IGFueSAqLworCisJCQkvKiBBZGQgbmV3YnVzIGRldmljZSBmb3IgdGhpcyBGRFQgbm9kZSAqLwor CQkJY2hpbGQgPSBkZXZpY2VfYWRkX2NoaWxkKGRldiwgTlVMTCwgLTEpOworCQkJaWYgKCFjaGls ZCkgeworCQkJCWlmIChib290dmVyYm9zZSkgeworCQkJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJ CQkJICAgICJDb3VsZCBub3QgYWRkIGNoaWxkOiAlc1xuIiwKKwkJCQkJICAgIGRpLT5kaV9kaW5m by5vYmRfbmFtZSk7CisJCQkJfQorCQkJCXJlc291cmNlX2xpc3RfZnJlZSgmZGktPmRpX3JsKTsK KwkJCQlvZndfYnVzX2dlbl9kZXN0cm95X2RldmluZm8oJmRpLT5kaV9kaW5mbyk7CisJCQkJZnJl ZShkaSwgTV9HSUNfVjMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkZXZpY2Vfc2V0X2l2 YXJzKGNoaWxkLCBkaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGJ1c19nZW5lcmljX2F0dGFjaChk ZXYpKTsKK30KKworc3RhdGljIGludCBnaWNfdjNfaXRzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYp OworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGdpY192M19pdHNfZmR0X21ldGhvZHNbXSA9IHsK KwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWdpY192 M19pdHNfZmR0X3Byb2JlKSwKKworCS8qIEVuZCAqLworCURFVk1FVEhPRF9FTkQKK307CisKK0RF RklORV9DTEFTU18xKGdpY192M19pdHMsIGdpY192M19pdHNfZmR0X2RyaXZlciwgZ2ljX3YzX2l0 c19mZHRfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19pdHNfc29mdGMpLCBnaWNf djNfaXRzX2RyaXZlcik7CisKK3N0YXRpYyBkZXZjbGFzc190IGdpY192M19pdHNfZmR0X2RldmNs YXNzOworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192M19pdHMsIGdpY192MywgZ2ljX3YzX2l0 c19mZHRfZHJpdmVyLAorICAgIGdpY192M19pdHNfZmR0X2RldmNsYXNzLCAwLCAwLCBCVVNfUEFT U19JTlRFUlJVUFQgKyBCVVNfUEFTU19PUkRFUl9NSURETEUpOworCitzdGF0aWMgaW50CitnaWNf djNfaXRzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlpZiAoIW9md19idXNfc3RhdHVz X29rYXkoZGV2KSkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAoIW9md19idXNfaXNfY29tcGF0 aWJsZShkZXYsIEdJQ19WM19JVFNfQ09NUFNUUikpCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2 aWNlX3NldF9kZXNjKGRldiwgR0lDX1YzX0lUU19ERVZTVFIpOworCXJldHVybiAoQlVTX1BST0JF X0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192My5jIGIvc3lz L2FybTY0L2FybTY0L2dpY192My5jCi0tLSBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYworKysg Yi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMKQEAgLTIzNiwxOSArMjM2LDE4IEBACiAJCQlicmVh azsKIAogCQlpZiAoX19wcmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX1BQSSAm JgotCQkgICAgYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkgICAgYWN0aXZlX2ly cSA8PSBHSUNfTEFTVF9TUEkpIHx8IGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSkpIHsKIAkJ CWFybV9kaXNwYXRjaF9pbnRyKGFjdGl2ZV9pcnEsIGZyYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9 CiAKLQkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU0dJIHx8IGFjdGl2ZV9pcnEgPj0gR0lD X0ZJUlNUX0xQSSkgeworCQlpZiAoYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TR0kpIHsKIAkJCS8q Ci0JCQkgKiBUT0RPOiBJbXBsZW1lbnQgcHJvcGVyIFNHSS9MUEkgaGFuZGxpbmcuCisJCQkgKiBU T0RPOiBJbXBsZW1lbnQgcHJvcGVyIFNHSSBoYW5kbGluZy4KIAkJCSAqICAgICAgIE1hc2sgaXQg aWYgc3VjaCBpcyByZWNlaXZlZCBmb3Igc29tZSByZWFzb24uCiAJCQkgKi8KIAkJCWRldmljZV9w cmludGYoZGV2LAotCQkJICAgICJSZWNlaXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgdHlwZTog JXNcbiIsCi0JCQkgICAgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJID8gIkxQSSIgOiAiU0dJ Iik7CisJCQkgICAgIlJlY2VpdmVkIHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiBTR0lcbiIp OwogCQkJUElDX01BU0soZGV2LCBhY3RpdmVfaXJxKTsKIAkJfQogCX0KQEAgLTI3NSw2ICsyNzQs OCBAQAogCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19MQVNU X1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCiAJCWdpY19yX3dyaXRlKHNjLCA0LCBH SUNEX0lDRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKIAkJZ2ljX3YzX3dhaXRfZm9y X3J3cChzYywgRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX0xQSSkgeyAvKiBM UElzICovCisJCWxwaV9tYXNrX2lycShkZXYsIGlycSk7CiAJfSBlbHNlCiAJCXBhbmljKCIlczog VW5zdXBwb3J0ZWQgSVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOwogfQpAQCAtMjkzLDYg KzI5NCw4IEBACiAJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lD X0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KIAkJZ2ljX2Rfd3JpdGUoc2Ms IDQsIEdJQ0RfSVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOwogCQlnaWNfdjNfd2Fp dF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+PSBHSUNfRklSU1RfTFBJKSB7 IC8qIExQSXMgKi8KKwkJbHBpX3VubWFza19pcnEoZGV2LCBpcnEpOwogCX0gZWxzZQogCQlwYW5p YygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJxKTsKIH0KCg== --b1_adb5d13ff260a628786bac2bb4d29cbf--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?adb5d13ff260a628786bac2bb4d29cbf>