From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH i-g-t] Add a link training test Date: Tue, 8 Sep 2015 15:28:00 +0300 Message-ID: <1441715280-11623-10-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1441715280-11623-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 0D91D6E624 for ; Tue, 8 Sep 2015 05:28:29 -0700 (PDT) In-Reply-To: <1441715280-11623-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: jani.nikula@intel.com, Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org VGhpcyBhZGRzIGEgdGVzdCB0aGF0IGNvbXBpbGVzIHRoZSBsaW5rIHRyYWluaW5nIGNvZGUgZnJv bSBpOTE1IGludG8gYQpzZXBhcmF0ZSBleGVjdXRhYmxlIGFuZCB1c2VzIGl0IHRvIHRyYWluIGEg ZmFrZSBzaW5rIGRldmljZS4gVGhlIHRlc3QKYWxzbyB1c2VzIGRldmljZSBpbmZvcm1hdGlvbiBm cm9tIGk5MTUgdG8gZXhlcmNpc2UgdGhlIGRpZmZlcmVudCBjb2RlCnBhdGhzIGZvciBkaWZmZXJl bnQgaGFyZHdkYXJlIGdlbmVyYXRpb25zLgoKSW4gb3JkZXIgdG8gZ2V0IHRoZSBjb2RlIHRvIGNv bXBpbGUgYSBsb3Qgb2Ygc3R1YmJpbmcgd2FzIG5lY2Vzc2FyeS4gSXQKd2FzIGFsc28gZWFzaWVy IHRvIGNvcHkgYSBmZXcgZnVuY3Rpb25zIGZyb20gdGhlIGRybV9kcF9oZWxwZXJzIGluc3RlYWQK b2YgZ2V0dGluZyB0aGUgd2hvbGUgdGhpbmcgdG8gY29tcGlsZSBhcyBwYXJ0IG9mIHRoZSB0ZXN0 LgotLS0KIGxpbmstdHJhaW5pbmctdGVzdC9NYWtlZmlsZSAgICAgICAgICAgICB8ICA0MCArKysK IGxpbmstdHJhaW5pbmctdGVzdC9kcm1fZHBfaGVscGVyLmMgICAgICB8IDExNSArKysrKysrKysK IGxpbmstdHJhaW5pbmctdGVzdC9pbnRlbF9kcnYuaCAgICAgICAgICB8IDE0OCArKysrKysrKysr KysKIGxpbmstdHJhaW5pbmctdGVzdC9saW5rX3RyYWluaW5nX3Rlc3QuYyB8IDQxNCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA3MTcgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbmstdHJhaW5pbmctdGVzdC9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpbmstdHJhaW5pbmctdGVzdC9kcm1fZHBfaGVscGVyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaW5rLXRyYWluaW5nLXRlc3QvaW50ZWxfZHJ2LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaW5rLXRyYWluaW5nLXRlc3QvbGlua190cmFpbmluZ190ZXN0LmMKCmRpZmYgLS1n aXQgYS9saW5rLXRyYWluaW5nLXRlc3QvTWFrZWZpbGUgYi9saW5rLXRyYWluaW5nLXRlc3QvTWFr ZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhOTkxNAotLS0gL2Rl di9udWxsCisrKyBiL2xpbmstdHJhaW5pbmctdGVzdC9NYWtlZmlsZQpAQCAtMCwwICsxLDQwIEBA CitLRVJORUxfU1JDX0RJUj0vaG9tZS9hY29uc2Vsdi9saW51eAorCisjIEZpbGVzIGNvcGllZCBm cm9tIGk5MTUgc291cmNlIHRyZWUKK0NPUElFRF9TT1VSQ0VTID0gXAorCWludGVsX2RwX2xpbmtf dHJhaW5pbmcuYyBcCisJaW50ZWxfZGV2X2luZm8uYyBcCisJaW50ZWxfZGV2X2luZm8uaCBcCisJ aTkxNV9yZWcuaAorCitJTlRFTF9EUF9MSU5LX1RSQUlOSU5HX0MgPSAkKEtFUk5FTF9TUkNfRElS KS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKKworSU5DTFVE RURJUiA9IFwKKwktSSQoS0VSTkVMX1NSQ19ESVIpL2luY2x1ZGUvZHJtIFwKKwktSSQoS0VSTkVM X1NSQ19ESVIpLyBcCisJLUkuCisKK0RFRklORVMgPSBcCisJLURfX0tFUk5FTF9fCisKK0hFQURF Ul9GSUxFUyA9IFwKKwlpbnRlbF9kcnYuaAorCitTT1VSQ0VfRklMRVMgPSBcCisJaW50ZWxfZHBf bGlua190cmFpbmluZy5jIFwKKwlsaW5rX3RyYWluaW5nX3Rlc3QuYyBcCisJZHJtX2RwX2hlbHBl ci5jCisKK2FsbDogbGlua190cmFpbmluZ190ZXN0CisKKyNpbnRlbF9kcF9saW5rX3RyYWluaW5n LmM6ICQoSU5URUxfRFBfTElOS19UUkFJTklOR19DKQorIwljcCAkKElOVEVMX0RQX0xJTktfVFJB SU5JTkdfQykgLgorCiskKENPUElFRF9TT1VSQ0VTKTogJTogJChLRVJORUxfU1JDX0RJUikvZHJp dmVycy9ncHUvZHJtL2k5MTUvJQorCWNwICQ8ICRACisKK2xpbmtfdHJhaW5pbmdfdGVzdDogJChD T1BJRURfU09VUkNFUykgJChTT1VSQ0VfRklMRVMpICQoSEVBREVSX0ZJTEVTKQorCWdjYyAtZzMg LU8wIC1zdGQ9Z251OTkgLW8gbGlua190cmFpbmluZ190ZXN0ICQoU09VUkNFX0ZJTEVTKSAkKElO Q0xVREVESVIpICQoREVGSU5FUykKKworY2xlYW46CisJcm0gbGlua190cmFpbmluZ190ZXN0ICQo Q09QSUVEX1NPVVJDRVMpCmRpZmYgLS1naXQgYS9saW5rLXRyYWluaW5nLXRlc3QvZHJtX2RwX2hl bHBlci5jIGIvbGluay10cmFpbmluZy10ZXN0L2RybV9kcF9oZWxwZXIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGRiN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvbGluay10 cmFpbmluZy10ZXN0L2RybV9kcF9oZWxwZXIuYwpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDA5IEtlaXRoIFBhY2thcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMK KyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhv dXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBl YXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRh dGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3Qg YmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlz dHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBw cmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50 YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55 IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3Ig aW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0g QUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywg SU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRB IE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF IE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgor ICovCisKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworLyogVE9ETzogR2V0IHJpZCBvZiB0aGlz IGNvcHkgb2YgZHJtX2RwX2hlbHBlciBmdW5jdGlvbnMuICovCisKK3N0YXRpYyB1OCBkcF9saW5r X3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwgaW50IHIp Cit7CisgICAgICAgIHJldHVybiBsaW5rX3N0YXR1c1tyIC0gRFBfTEFORTBfMV9TVEFUVVNdOwor fQorCitzdGF0aWMgdTggZHBfZ2V0X2xhbmVfc3RhdHVzKGNvbnN0IHU4IGxpbmtfc3RhdHVzW0RQ X0xJTktfU1RBVFVTX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFu ZSkKK3sKKyAgICAgICAgaW50IGkgPSBEUF9MQU5FMF8xX1NUQVRVUyArIChsYW5lID4+IDEpOwor ICAgICAgICBpbnQgcyA9IChsYW5lICYgMSkgKiA0OworICAgICAgICB1OCBsID0gZHBfbGlua19z dGF0dXMobGlua19zdGF0dXMsIGkpOworICAgICAgICByZXR1cm4gKGwgPj4gcykgJiAweGY7Cit9 CisKK2Jvb2wgZHJtX2RwX2NoYW5uZWxfZXFfb2soY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElO S19TVEFUVVNfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYW5lX2NvdW50 KQoreworICAgICAgICB1OCBsYW5lX2FsaWduOworICAgICAgICB1OCBsYW5lX3N0YXR1czsKKyAg ICAgICAgaW50IGxhbmU7CisKKyAgICAgICAgbGFuZV9hbGlnbiA9IGRwX2xpbmtfc3RhdHVzKGxp bmtfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBfTEFORV9B TElHTl9TVEFUVVNfVVBEQVRFRCk7CisgICAgICAgIGlmICgobGFuZV9hbGlnbiAmIERQX0lOVEVS TEFORV9BTElHTl9ET05FKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCisg ICAgICAgIGZvciAobGFuZSA9IDA7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspIHsKKyAgICAg ICAgICAgICAgICBsYW5lX3N0YXR1cyA9IGRwX2dldF9sYW5lX3N0YXR1cyhsaW5rX3N0YXR1cywg bGFuZSk7CisgICAgICAgICAgICAgICAgaWYgKChsYW5lX3N0YXR1cyAmIERQX0NIQU5ORUxfRVFf QklUUykgIT0gRFBfQ0hBTk5FTF9FUV9CSVRTKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworfQorCitib29sIGRy bV9kcF9jbG9ja19yZWNvdmVyeV9vayhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRV U19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYW5lX2NvdW50KQor eworICAgICAgICBpbnQgbGFuZTsKKyAgICAgICAgdTggbGFuZV9zdGF0dXM7CisKKyAgICAgICAg Zm9yIChsYW5lID0gMDsgbGFuZSA8IGxhbmVfY291bnQ7IGxhbmUrKykgeworICAgICAgICAgICAg ICAgIGxhbmVfc3RhdHVzID0gZHBfZ2V0X2xhbmVfc3RhdHVzKGxpbmtfc3RhdHVzLCBsYW5lKTsK KyAgICAgICAgICAgICAgICBpZiAoKGxhbmVfc3RhdHVzICYgRFBfTEFORV9DUl9ET05FKSA9PSAw KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg ICAgIHJldHVybiB0cnVlOworfQorCit1OCBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRh Z2UoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhbmUpCit7CisgICAgICAgIGludCBpID0g RFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChsYW5lID4+IDEpOworICAgICAgICBpbnQgcyA9 ICgobGFuZSAmIDEpID8KKyAgICAgICAgICAgICAgICAgRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdf TEFORTFfU0hJRlQgOgorICAgICAgICAgICAgICAgICBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19M QU5FMF9TSElGVCk7CisgICAgICAgIHU4IGwgPSBkcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywg aSk7CisKKyAgICAgICAgcmV0dXJuICgobCA+PiBzKSAmIDB4MykgPDwgRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19TSElGVDsKK30KKwordTggZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1w aGFzaXMoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFuZSkKK3sKKyAgICAgICAg aW50IGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUgPj4gMSk7CisgICAgICAg IGludCBzID0gKChsYW5lICYgMSkgPworICAgICAgICAgICAgICAgICBEUF9BREpVU1RfUFJFX0VN UEhBU0lTX0xBTkUxX1NISUZUIDoKKyAgICAgICAgICAgICAgICAgRFBfQURKVVNUX1BSRV9FTVBI QVNJU19MQU5FMF9TSElGVCk7CisgICAgICAgIHU4IGwgPSBkcF9saW5rX3N0YXR1cyhsaW5rX3N0 YXR1cywgaSk7CisKKyAgICAgICAgcmV0dXJuICgobCA+PiBzKSAmIDB4MykgPDwgRFBfVFJBSU5f UFJFX0VNUEhBU0lTX1NISUZUOworfQorCisvKiBGSVhNRTogKi8KK3N0YXRpYyB2b2lkIHVkZWxh eSgpIHt9CitzdGF0aWMgdm9pZCBtZGVsYXkoKSB7fQorCit2b2lkIGRybV9kcF9saW5rX3RyYWlu X2Nsb2NrX3JlY292ZXJ5X2RlbGF5KGNvbnN0IHU4IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVd KSB7CisgICAgICAgIGlmIChkcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPT0gMCkK KyAgICAgICAgICAgICAgICB1ZGVsYXkoMTAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIG1kZWxheShkcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gKiA0KTsKK30KKwor dm9pZCBkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2VxX2RlbGF5KGNvbnN0IHU4IGRwY2RbRFBf UkVDRUlWRVJfQ0FQX1NJWkVdKSB7CisgICAgICAgIGlmIChkcGNkW0RQX1RSQUlOSU5HX0FVWF9S RF9JTlRFUlZBTF0gPT0gMCkKKyAgICAgICAgICAgICAgICB1ZGVsYXkoNDAwKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIG1kZWxheShkcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRF UlZBTF0gKiA0KTsKK30KKwpkaWZmIC0tZ2l0IGEvbGluay10cmFpbmluZy10ZXN0L2ludGVsX2Ry di5oIGIvbGluay10cmFpbmluZy10ZXN0L2ludGVsX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmY3YTZhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rLXRyYWluaW5n LXRlc3QvaW50ZWxfZHJ2LmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMDYgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CisgKiBDb3B5cmlnaHQgKGMpIDIw MDctMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEZBS0VfSU5URUxfRFJWX0gKKyNkZWZpbmUg RkFLRV9JTlRFTF9EUlZfSAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQu aD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8 dG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIg dTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUz MjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaXplX3Q7Cit0eXBlZGVmIGxvbmcgc3NpemVfdDsK Kworc3RydWN0IGRybV9kZXZpY2UgeworCXZvaWQgKmRldl9wcml2YXRlOworfTsKKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqdG9faTkxNShjb25zdCBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmRldl9wcml2YXRlOworfQorCisjZGVmaW5l IEJVSUxEX0JVRygpCisKKyNpbmNsdWRlICJpbnRlbF9kZXZfaW5mby5oIgorCitzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSB7CisJc3RydWN0IGludGVsX2RldmljZV9pbmZvIGluZm87CisJYm9vbCBl ZHBfbG93X3Zzd2luZzsKKwllbnVtIGludGVsX3BjaCBwY2hfdHlwZTsKK307CisKKworc3RydWN0 IGkyY19hZGFwdGVyIHsKK307CisKK3N0cnVjdCBtdXRleCB7Cit9OworCisjaW5jbHVkZSA8ZHJt X2RwX2hlbHBlci5oPgorCisjZGVmaW5lIERSTV9FUlJPUiBwcmludGYKKyNkZWZpbmUgRFJNX0RF QlVHX0tNUyBwcmludGYKKworZW51bSBwb3J0IHsKKyAgICAgICAgUE9SVF9BID0gMCwKKyAgICAg ICAgUE9SVF9CLAorICAgICAgICBQT1JUX0MsCisgICAgICAgIFBPUlRfRCwKKyAgICAgICAgUE9S VF9FLAorICAgICAgICBJOTE1X01BWF9QT1JUUworfTsKKyNkZWZpbmUgcG9ydF9uYW1lKHApICgo cCkgKyAnQScpCisKK3N0cnVjdCBkcm1fZW5jb2RlciB7CisJdm9pZCAqZGV2OworfTsKKworc3Ry dWN0IGludGVsX2VuY29kZXIgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworfTsKKworc3Ry dWN0IGludGVsX2RwIHsKKwlpbnQgbGlua19yYXRlOworCWludCBsYW5lX2NvdW50OworCXVpbnQ4 X3QgbGlua19idzsKKwl1aW50OF90IG51bV9zaW5rX3JhdGVzOworCXVpbnQ4X3QgdHJhaW5fc2V0 WzRdOworCWJvb2wgdHJhaW5fc2V0X3ZhbGlkOworCXN0cnVjdCBkcm1fZHBfYXV4IGF1eDsKKwl1 aW50OF90IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOworCXVpbnQzMl90IERQOworCWJvb2wg dXNlX3RwczM7CisKKwkvKiBIb2xkIHRlc3QgcHJpdmF0ZSBkYXRhICovCisJdm9pZCAqcHJpdjsK K307CisKK3N0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgeworCXN0cnVjdCBpbnRlbF9lbmNvZGVy IGJhc2U7CisJc3RydWN0IGludGVsX2RwIGRwOworCWVudW0gcG9ydCBwb3J0OworfTsKKworI2Rl ZmluZSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpICBfX2J1aWx0aW5fb2Zmc2V0b2YgKHR5cGUsIG1l bWJlcikKKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoewkJCVwKKwlj b25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKwko dHlwZSAqKSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKgorZHBfdG9fZGlnX3BvcnQo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGludGVs X2RwLCBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0LCBkcCk7Cit9CisKK3ZvaWQKK2ludGVsX2Rw X3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZHBfdHJhaW5f cGF0KTsKK3ZvaWQKK2ludGVsX2RwX3VwZGF0ZV9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9kcF9jb21wdXRlX3JhdGUoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwgaW50IHBvcnRfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVfc2VsZWN0KTsKK2Jvb2wKK2ludGVs X2RwX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1aW50OF90IGxp bmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKTsKK3ZvaWQgaW50ZWxfZGRpX3ByZXBhcmVf bGlua19yZXRyYWluKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cit2b2lkCitpbnRlbF9k cF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwordm9pZAoraW50 ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOworYm9vbCBp bnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2RldmljZSAqaW50ZWxfZHBfdG9fZGV2KHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCit7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxf ZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisKKwlyZXR1cm4gaW50ZWxfZGln X3BvcnQtPmJhc2UuYmFzZS5kZXY7Cit9CisKKyNpbmNsdWRlICJpOTE1X3JlZy5oIgorCisjZW5k aWYgLyogRkFLRV9JTlRFTF9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvbGluay10cmFpbmluZy10ZXN0 L2xpbmtfdHJhaW5pbmdfdGVzdC5jIGIvbGluay10cmFpbmluZy10ZXN0L2xpbmtfdHJhaW5pbmdf dGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzNiOWUKLS0tIC9k ZXYvbnVsbAorKysgYi9saW5rLXRyYWluaW5nLXRlc3QvbGlua190cmFpbmluZ190ZXN0LmMKQEAg LTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogICAgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2 YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRl ICJpOTE1X3JlZy5oIgorCitzdHJ1Y3Qgc2lua19kZXZpY2UgeworCXNzaXplX3QgKCpkcGNkX3dy aXRlKShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkg ICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKKwlib29sICgqZ2V0X2xpbmtfc3RhdHVz KShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssCisJCQkJdWludDhfdCBsaW5rX3N0YXR1c1tEUF9M SU5LX1NUQVRVU19TSVpFXSk7CisKKwlzdHJ1Y3QgeworCQlib29sIGxhbmVfY291bnRfYW5kX2J3 X3NldDsKKwkJYm9vbCB0cmFpbmluZ19wYXR0ZXJuXzFfc2V0OworCQlib29sIHN0YXJ0ZWRfd2l0 aF9ub25femVyb19sZXZlbHM7CisJCWJvb2wgY3JfZG9uZTsKKwkJYm9vbCBjaGFubmVsX2VxX2Rv bmU7CisKKwkJdWludDhfdCBkcGNkWzB4MzAwMF07CisJfSBkYXRhOworfTsKKworLyogRmFrZSBz aW5rIGRldmljZSBpbXBsZW1lbnRhdGlvbiAqLworCitzdGF0aWMgdWludDhfdAorc2lua19kZXZp Y2VfbGFuZV9jb3VudChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCit7CisJcmV0dXJuIHNpbmst PmRhdGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF07Cit9CisKK3N0YXRpYyB1aW50OF90CitzaW5r X2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCit7 CisJcmV0dXJuIHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19QQVRURVJOX1NFVF0gJiBEUF9U UkFJTklOR19QQVRURVJOX01BU0s7Cit9CisKK3N0YXRpYyB1aW50OF90CitzaW5rX2RldmljZV9n ZXRfdm9sdGFnZV9zd2luZyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lKQorewor CXJldHVybiBzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgbGFuZV0gJgor CQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0s7Cit9CisKK3N0YXRpYyB1aW50OF90CitzaW5r X2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywg aW50IGxhbmUpCit7CisJcmV0dXJuIHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9T RVQgKyBsYW5lXSAmCisJCSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSzsKK30KKworc3RhdGlj IHZvaWQKK3NpbmtfZGV2aWNlX2NoZWNrX2xhbmVfY291bnRfYW5kX2J3KHN0cnVjdCBzaW5rX2Rl dmljZSAqc2luaykKK3sKKwlpZiAoc2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQpCisJ CXJldHVybjsKKworCWFzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfUEFUVEVSTl9T RVRdID09IDApOworCisJaWYgKHNpbmstPmRhdGEuZHBjZFtEUF9MSU5LX0JXX1NFVF0gIT0gMCAm JgorCSAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9DT1VOVF9TRVRdICE9IDApCisJCXNpbmst PmRhdGEubGFuZV9jb3VudF9hbmRfYndfc2V0ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Np bmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMV9zZXQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQor eworCWlmICghc2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQgfHwKKwkgICAgc2luay0+ ZGF0YS50cmFpbmluZ19wYXR0ZXJuXzFfc2V0KQorCQlyZXR1cm47CisKKwlhc3NlcnQoc2lua19k ZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykgPD0gRFBfVFJBSU5JTkdfUEFUVEVSTl8x KTsKKworCWlmIChzaW5rX2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSAhPSBEUF9U UkFJTklOR19QQVRURVJOXzEpCisJCXJldHVybjsKKworCWFzc2VydChzaW5rLT5kYXRhLmRwY2Rb RFBfTElOS19CV19TRVRdID09IERQX0xJTktfQldfMV82MiB8fAorCSAgICAgICBzaW5rLT5kYXRh LmRwY2RbRFBfTElOS19CV19TRVRdID09IERQX0xJTktfQldfMl83KTsKKworCWFzc2VydChzaW5r LT5kYXRhLmRwY2RbRFBfTEFORV9DT1VOVF9TRVRdID09IDEgfHwKKwkgICAgICAgc2luay0+ZGF0 YS5kcGNkW0RQX0xBTkVfQ09VTlRfU0VUXSA9PSAyIHx8CisJICAgICAgIHNpbmstPmRhdGEuZHBj ZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gNCk7CisKKwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8 IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgeworCQlpZiAoc2lua19kZXZp Y2VfZ2V0X3ZvbHRhZ2Vfc3dpbmcoc2luaywgbGFuZSkgIT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wIHx8CisJCSAgICBzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNp bmssIGxhbmUpICE9IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzApCisJCQlzaW5rLT5kYXRhLnN0 YXJ0ZWRfd2l0aF9ub25femVyb19sZXZlbHMgPSB0cnVlOworCX0KKworCXNpbmstPmRhdGEudHJh aW5pbmdfcGF0dGVybl8xX3NldCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitzaW5rX2Rldmlj ZV9jaGVja19wYXR0ZXJuXzJfc2V0KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlpZiAo IXNpbmstPmRhdGEuY3JfZG9uZSkKKwkJcmV0dXJuOworCisJYXNzZXJ0KHNpbmtfZGV2aWNlX2dl dF90cmFpbmluZ19wYXR0ZXJuKHNpbmspID09IERQX1RSQUlOSU5HX1BBVFRFUk5fMik7Cit9CisK K3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9jaGVja19wYXR0ZXJuX2Rpc2FibGUoc3RydWN0IHNp bmtfZGV2aWNlICpzaW5rKQoreworCWlmICghc2luay0+ZGF0YS5jcl9kb25lIHx8ICEgc2luay0+ ZGF0YS5jaGFubmVsX2VxX2RvbmUpCisJCXJldHVybjsKKworCWFzc2VydChzaW5rX2RldmljZV9n ZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSA9PSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUp OworfQorCitzdGF0aWMgc3NpemVfdAorc2lua19kZXZpY2VfZHBjZF93cml0ZShzdHJ1Y3Qgc2lu a19kZXZpY2UgKnNpbmssIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCSAgICAgICB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplKQoreworCW1lbWNweShzaW5rLT5kYXRhLmRwY2QgKyBvZmZzZXQsIGJ1 ZmZlciwgc2l6ZSk7CisKKwlzaW5rX2RldmljZV9jaGVja19sYW5lX2NvdW50X2FuZF9idyhzaW5r KTsKKworCWlmICghc2luay0+ZGF0YS5jcl9kb25lKQorCQlzaW5rX2RldmljZV9jaGVja19wYXR0 ZXJuXzFfc2V0KHNpbmspOworCWVsc2UgaWYgKCFzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSkK KwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl8yX3NldChzaW5rKTsKKwllbHNlCisJCXNpbmtf ZGV2aWNlX2NoZWNrX3BhdHRlcm5fZGlzYWJsZShzaW5rKTsKKworCXJldHVybiBzaXplOworfQor CitzdGF0aWMgYm9vbAorc2lua19kZXZpY2VfbWF4X3ZvbHRhZ2VfcmVhY2hlZChzdHJ1Y3Qgc2lu a19kZXZpY2UgKnNpbmssIGludCBsYW5lKQoreworCXJldHVybiAoc2luay0+ZGF0YS5kcGNkW0RQ X1RSQUlOSU5HX0xBTkUwX1NFVCArIGxhbmVdICYgRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQp ID09CisJCURQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEOworfQorCitzdGF0aWMgYm9vbAorc2lu a19kZXZpY2VfbWF4X3ByZV9lbXBoYXNpc19yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAqc2lu aywgaW50IGxhbmUpCit7CisJcmV0dXJuIChzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfTEFO RTBfU0VUICsgbGFuZV0gJiBEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQpID09CisJ CURQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsKK30KKworc3RhdGljIGJvb2wKK3Np bmtfZGV2aWNlX3JlcXVlc3RfaGlnaGVyX3ZvbHRhZ2Vfc3dpbmcoc3RydWN0IHNpbmtfZGV2aWNl ICpzaW5rKQoreworCWJvb2wgbWF4X3JlYWNoZWQ7CisKKwlmb3IgKGludCBsYW5lID0gMDsgbGFu ZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgeworCQlpZiAoc2lua19k ZXZpY2VfbWF4X3ZvbHRhZ2VfcmVhY2hlZChzaW5rLCBsYW5lKSkgeworCQkJbWF4X3JlYWNoZWQg PSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobWF4X3JlYWNoZWQpCisJCXJldHVy biBmYWxzZTsKKworCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9j b3VudChzaW5rKTsgbGFuZSsrKSB7CisJCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVT VF9MQU5FMF8xICsgKGxhbmUgPj4gMSldIHw9CisJCQkoc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vf c3dpbmcoc2luaywgbGFuZSkgKyAxKSA8PAorCQkJCShEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19M QU5FMV9TSElGVCAqIChsYW5lICYgMSkpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbAorc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfcHJlX2VtcGhhc2lzKHN0cnVjdCBz aW5rX2RldmljZSAqc2luaykKK3sKKwlib29sIG1heF9yZWFjaGVkOworCisJZm9yIChpbnQgbGFu ZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKKwkJ aWYgKHNpbmtfZGV2aWNlX21heF9wcmVfZW1waGFzaXNfcmVhY2hlZChzaW5rLCBsYW5lKSkgewor CQkJbWF4X3JlYWNoZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobWF4X3Jl YWNoZWQpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lu a19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7CisJCXNpbmstPmRhdGEuZHBjZFtE UF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUgPj4gMSldIHw9CisJCQkoc2lua19kZXZp Y2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChzaW5rLCBsYW5lKSArIDEpIDw8CisJCQkJKERQX0FE SlVTVF9QUkVfRU1QSEFTSVNfTEFORTBfU0hJRlQgKworCQkJCSAoRFBfQURKVVNUX1ZPTFRBR0Vf U1dJTkdfTEFORTFfU0hJRlQgKiAobGFuZSAmIDEpKSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9tYXJrX2NyX2RvbmUoc3RydWN0IHNpbmtfZGV2 aWNlICpzaW5rKQoreworCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFu ZV9jb3VudChzaW5rKTsgbGFuZSsrKQorCQlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORTBfMV9TVEFU VVMgKyAobGFuZSA+PiAxKV0gfD0KKwkJCURQX0xBTkVfQ1JfRE9ORSA8PCAoNCAqIChsYW5lICYg MSkpOworCisJc2luay0+ZGF0YS5jcl9kb25lID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Np bmtfZGV2aWNlX21hcmtfY2hhbm5lbF9lcV9kb25lKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykK K3sKKwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2lu ayk7IGxhbmUrKykgeworCQl1aW50OF90IG1hc2sgPSAoRFBfTEFORV9DSEFOTkVMX0VRX0RPTkUg fCBEUF9MQU5FX1NZTUJPTF9MT0NLRUQpOworCQlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORTBfMV9T VEFUVVMgKyAobGFuZSA+PiAxKV0gfD0KKwkJCW1hc2sgPDwgKDQgKiAobGFuZSAmIDEpKTsKKwl9 CisKKwlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRF0gfD0gRFBf SU5URVJMQU5FX0FMSUdOX0RPTkU7CisKKwlzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSA9IHRy dWU7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9nZXRfbGlua19zdGF0dXMoc3RydWN0 IHNpbmtfZGV2aWNlICpzaW5rLAorCQkJICAgIHVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV0pCit7CisJaWYgKCFzaW5rLT5kYXRhLmNyX2RvbmUpIHsKKwkJaWYgKCFzaW5r X2RldmljZV9yZXF1ZXN0X2hpZ2hlcl92b2x0YWdlX3N3aW5nKHNpbmspKQorCQkJc2lua19kZXZp Y2VfbWFya19jcl9kb25lKHNpbmspOworCX0gZWxzZSBpZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9l cV9kb25lKSB7CisJCWlmICghc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfcHJlX2VtcGhhc2lz KHNpbmspKQorCQkJc2lua19kZXZpY2VfbWFya19jaGFubmVsX2VxX2RvbmUoc2luayk7CisJfQor CisJbWVtY3B5KGxpbmtfc3RhdHVzLCBzaW5rLT5kYXRhLmRwY2QgKyBEUF9MQU5FMF8xX1NUQVRV UywKKwkgICAgICAgRFBfTElOS19TVEFUVVNfU0laRSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIHN0cnVjdCBzaW5rX2RldmljZSBzaW1wbGVfc2luayA9IHsKKwkuZ2V0X2xpbmtfc3Rh dHVzID0gc2lua19kZXZpY2VfZ2V0X2xpbmtfc3RhdHVzLAorCS5kcGNkX3dyaXRlID0gc2lua19k ZXZpY2VfZHBjZF93cml0ZSwKK307CisKKy8qIEdsdWUgY29kZSAqLworCit2b2lkIGludGVsX2Rk aV9wcmVwYXJlX2xpbmtfcmV0cmFpbihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9 CisKK3ZvaWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQoreworfQorCitib29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitpbnRlbF9k cF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5r X3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKK3sKKwlzdHJ1Y3Qgc2lua19kZXZpY2UgKnNp bmsgPSBpbnRlbF9kcC0+cHJpdjsKKwlyZXR1cm4gc2luay0+Z2V0X2xpbmtfc3RhdHVzKHNpbmss IGxpbmtfc3RhdHVzKTsKK30KKwordm9pZAoraW50ZWxfZHBfdXBkYXRlX3NpZ25hbF9sZXZlbHMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKK30KKwordm9pZCBpbnRlbF9kcF9jb21wdXRl X3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHBvcnRfY2xvY2ssCisJCQkgICB1 aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKK3sKKwkqbGlua19idyA9IGlu dGVsX2RwLT5saW5rX2J3OworCSpyYXRlX3NlbGVjdCA9IDA7Cit9CisKK3ZvaWQKK2ludGVsX2Rw X3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs CisJCQkJICAgICAgIHVpbnQ4X3QgZHBfdHJhaW5fcGF0KQoreworfQorCitzc2l6ZV90IGRybV9k cF9kcGNkX3dyaXRlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHVuc2lnbmVkIGludCBvZmZzZXQs CisJCQkgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9CisJCWNvbnRhaW5lcl9vZihhdXgsIHN0cnVjdCBpbnRlbF9kcCwgYXV4KTsKKwlz dHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmsgPSBpbnRlbF9kcC0+cHJpdjsKKworCXJldHVybiBzaW5r LT5kcGNkX3dyaXRlKHNpbmssIG9mZnNldCwgYnVmZmVyLCBzaXplKTsKK30KKworLyogLS0tICov CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZHAgKgoraW50ZWxfZHBfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGludCBsYW5lcywgdWludDhfdCBsaW5rX2J3KQoreworCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0OworCisJZGlnX3BvcnQgPSBjYWxsb2MoMSwgc2l6ZW9m ICpkaWdfcG9ydCk7CisJZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYgPSBkZXY7CisJZGlnX3BvcnQt PmRwLmxhbmVfY291bnQgPSBsYW5lczsKKwlkaWdfcG9ydC0+ZHAubGlua19idyA9IGxpbmtfYnc7 CisKKwlyZXR1cm4gJmRpZ19wb3J0LT5kcDsKK30KKworc3RhdGljIHZvaWQKK2ludGVsX2RwX2Rl c3Ryb3koc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKKwlmcmVlKGRpZ19w b3J0KTsKK30KKworLyogRklYTUU6IFlpa2VzISAqLworI2RlZmluZSBCSVRTX1BFUl9MT05HIDY0 CisjaW5jbHVkZSA8aW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxp OTE1X3BjaWlkcy5oPgorI2luY2x1ZGUgImludGVsX2Rldl9pbmZvLmMiCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKKwlJTlRFTF9QQ0lfSURTLAor CXswLCAwLCAwfQorfTsKKworc3RydWN0IGRybV9kZXZpY2UgKgorZHJtX2RldmljZV9mb3JfcGNp X2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKKworCWRldiA9IGNh bGxvYygxLCBzaXplb2YgKmRldik7CisJZGV2X3ByaXYgPSBjYWxsb2MoMSwgc2l6ZW9mICpkZXZf cHJpdik7CisJYXNzZXJ0KGRldiAmJiBkZXZfcHJpdik7CisKKwlkZXYtPmRldl9wcml2YXRlID0g ZGV2X3ByaXY7CisKKwltZW1jcHkoJmRldl9wcml2LT5pbmZvLCAodm9pZCAqKSBpZC0+ZHJpdmVy X2RhdGEsIHNpemVvZiBkZXZfcHJpdi0+aW5mbyk7CisJZGV2X3ByaXYtPmluZm8uZGV2aWNlX2lk ID0gaWQtPmRldmljZTsKKworCS8qIFRPRE86IHNldCBkZXZfcHJpdi0+cGNoX3R5cGUgd2l0aCBh biBhcHByb3ByaWF0ZSB2YWx1ZSAqLworCWRldl9wcml2LT5wY2hfdHlwZSA9IFBDSF9OT05FOwor CisJcmV0dXJuIGRldjsKK30KKwordm9pZAorZHJtX2RldmljZV9kZXN0cm95KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJZnJlZShkZXYtPmRldl9wcml2YXRlKTsKKwlmcmVlKGRldik7Cit9 CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IHN0cnVjdCBw Y2lfZGV2aWNlX2lkICppZDsKKworCWZvciAoaWQgPSAmcGNpaWRsaXN0WzBdOworCSAgICAgaWQt PnZlbmRvciAhPSAwICYmIGlkLT5kZXZpY2UgIT0gMDsKKwkgICAgIGlkKyspIHsKKwkJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGRybV9kZXZpY2VfZm9yX3BjaV9pZChpZCk7CisJCXN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAgPQorCQkJaW50ZWxfZHBfY3JlYXRlKGRldiwgNCwgRFBfTElOS19C V18yXzcpOworCisJCWlmIChJU19HRU4yKGRldikgfHwgSVNfUElORVZJRVcoZGV2KSkKKwkJCWNv bnRpbnVlOworCisJCXByaW50ZigiVGVzdGluZyB3aXRoIGRldmljZSBpZCAlMDR4LCBnZW4gJWRc biIsCisJCSAgICAgICBJTlRFTF9ERVZJRChkZXYpLCBJTlRFTF9JTkZPKGRldiktPmdlbik7CisK KwkJaW50ZWxfZHAtPnByaXYgPSAmc2ltcGxlX3Npbms7CisJCW1lbXNldCgmc2ltcGxlX3Npbmsu ZGF0YSwgMCwgc2l6ZW9mIHNpbXBsZV9zaW5rLmRhdGEpOworCQlzaW1wbGVfc2luay5kYXRhLmRw Y2RbRFBfTUFYX0xJTktfUkFURV0gPSAweDBBOworCQlzaW1wbGVfc2luay5kYXRhLmRwY2RbRFBf TUFYX0xBTkVfQ09VTlRdID0gMHgwNDsKKworCQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGlu dGVsX2RwKTsKKwkJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKKworCQlmb3Ig KGludCBsYW5lID0gMDsgbGFuZSA8IGludGVsX2RwLT5sYW5lX2NvdW50OyBsYW5lKyspCisJCQlw cmludGYoImxhbmUgJWk6IHZzd2luZzogJWQsIHByZS1lbXBoOiAlZFxuIiwgbGFuZSwKKwkJCSAg ICAgICBzaW5rX2RldmljZV9nZXRfdm9sdGFnZV9zd2luZygmc2ltcGxlX3NpbmssIGxhbmUpLAor CQkJICAgICAgIHNpbmtfZGV2aWNlX2dldF9wcmVfZW1waGFzaXNfbGV2ZWwoJnNpbXBsZV9zaW5r LCBsYW5lKSk7CisJCXByaW50ZigiXG4iKTsKKworCQlpbnRlbF9kcF9kZXN0cm95KGludGVsX2Rw KTsKKwkJZHJtX2RldmljZV9kZXN0cm95KGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9Ci0tIAoy LjQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK