From mboxrd@z Thu Jan 1 00:00:00 1970 From: Herbert Valerio Riedel Subject: RFC: new WIP version of au1000_eth.c phylib conversion (was Re: RFC: au1000_etc.c phylib rewrite) Date: Thu, 04 May 2006 11:17:03 +0200 Message-ID: <1146734223.31241.44.camel@localhost.localdomain> References: <5.1.0.14.2.20060501144633.025e4e20@205.166.54.3> <1146510542.16643.10.camel@localhost.localdomain> <1146510542.16643.10.camel@localhost.localdomain> <5.1.0.14.2.20060501144633.025e4e20@205.166.54.3> <5.1.0.14.2.20060502095256.01fd4210@205.166.54.3> <1146674056.31241.18.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-gG6GUuD/D7Sog08cBLNj" Cc: ppopov@embeddedalley.com, sshtylyov@ru.mvista.com, linux-mips@linux-mips.org, jgarzik@pobox.com, netdev@vger.kernel.org, Ralf Baechle , "Robin H. Johnson" Return-path: Received: from h081217049130.dyn.cm.kabsi.at ([81.217.49.130]:14061 "EHLO phobos.hvrlab.org") by vger.kernel.org with ESMTP id S1751457AbWEDJ2B (ORCPT ); Thu, 4 May 2006 05:28:01 -0400 To: Mark Schank In-Reply-To: <1146674056.31241.18.camel@localhost.localdomain> Sender: netdev-owner@vger.kernel.org List-Id: netdev.vger.kernel.org --=-gG6GUuD/D7Sog08cBLNj Content-Type: multipart/mixed; boundary="=-7NBnvUkjbxuQTR5LDyMk" --=-7NBnvUkjbxuQTR5LDyMk Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hello, I've tried to adapt the PHY detection code to allow for dynamic runtime configuration (with fallback to search for the 2nd MAC PHY on the 1st MAC's MII bus), as well as selectable static PHY configuration through Kconfig (e.g. for supporting PHYs w/o MII connection) e.g. for a MIPS BOSPORUS board, one would set something like through Kconfig (haven't bothered yet, to autoselect this when MIPS_BOSPORUS is defined): CONFIG_MIPS_AU1X00_ENET=3Dy CONFIG_MIPS_AU1X00_ENET_STATIC_PHY_CONFIG=3Dy CONFIG_MIPS_AU1X00_ENET_ETH0_PHY_ADDR=3D5 CONFIG_MIPS_AU1X00_ENET_ETH1_PHY_ON_MAC0=3Dy CONFIG_MIPS_AU1X00_ENET_ETH1_PHY_ADDR=3D-1 the default dynamic runtime PHY search behaviour is now to find the lowest phy_addr containing a living PHY (which is not already claimed by another MAC) on the MAC's current MII bus, and if not found, try again on the first MAC's MII bus; and if that also fails eth initialization fails for the given MAC; ...well, if anyone has the time and hardware, testing would be greatly welcomed :-) alas, this patch is rather big and I'd like to split it into smaller pieces, but imho it's an 'all or nothing' thing to convert to the PHY lib... :-/ Kconfig | 31 + au1000_eth.c | 1494 ++++++++++--------------------------------------------= ----- au1000_eth.h | 132 ----- 3 files changed, 310 insertions(+), 1347 deletions(-) regards, hvr --=-7NBnvUkjbxuQTR5LDyMk Content-Disposition: attachment; filename=au1000_eth_phylib_conversion.patch Content-Type: text/x-patch; name=au1000_eth_phylib_conversion.patch; charset=UTF-8 Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnDQpp bmRleCAxZWRjYzBjLi41ODhkZGFkIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZw0K KysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZw0KQEAgLTQ1NSwxMSArNDU1LDQyIEBAIGNvbmZpZyBN SVBTX0dUOTYxMDBFVEgNCiBjb25maWcgTUlQU19BVTFYMDBfRU5FVA0KIAlib29sICJNSVBTIEFV MTAwMCBFdGhlcm5ldCBzdXBwb3J0Ig0KIAlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBTT0Nf QVUxWDAwDQorCXNlbGVjdCBQSFlMSUINCiAJc2VsZWN0IENSQzMyDQogCWhlbHANCiAJICBJZiB5 b3UgaGF2ZSBhbiBBbGNoZW15IFNlbWkgQVUxWDAwIGJhc2VkIHN5c3RlbQ0KIAkgIHNheSBZLiAg T3RoZXJ3aXNlLCBzYXkgTi4NCiANCitjb25maWcgTUlQU19BVTFYMDBfRU5FVF9TVEFUSUNfUEhZ X0NPTkZJRw0KKwlib29sICJTdGF0aWMgUEhZIGNvbmZpZ3VyYXRpb24iDQorCWRlcGVuZHMgb24g TUlQU19BVTFYMDBfRU5FVA0KKwlkZWZhdWx0IG4NCisJaGVscA0KKwkgIFNheSBZIGlmIHlvdSBu ZWVkIHRvIHNldCBhIHN0YXRpYyBQSFkgY29uZmlndXJhdGlvbi4gSWYgeW91IHNheSBOLCB0aGUN CisJICBkcml2ZXIgd2lsbCB0cnkgdG8gYXV0b2RldGVjdCB0aGUgUEhZIGNvbmZpZ3VyYXRpb24u DQorDQorY29uZmlnIE1JUFNfQVUxWDAwX0VORVRfRVRIMF9QSFlfQUREUg0KKwlpbnQgIjFzdCBF dGhlcm5ldCdzIFBIWSBhZGRyZXNzIHstMSwwLi4zMX0iDQorCWRlcGVuZHMgb24gTUlQU19BVTFY MDBfRU5FVF9TVEFUSUNfUEhZX0NPTkZJRw0KKwloZWxwDQorCSAgUHJvdmlkZSB0aGUgUEhZIGFk ZHJlc3Mgb2YgdGhlIGZpcnN0IER0aGVybmV0IGRldmljZS4gDQorCSAgSWYgdGhlIFBIWSBoYXMg bm8gUEhZIGFkZHJlc3MsIHNheSAiLTEiLg0KKw0KK2NvbmZpZyBNSVBTX0FVMVgwMF9FTkVUX0VU SDFfUEhZX09OX01BQzANCisJYm9vbCAiMm5kIEV0aGVybmV0J3MgUEhZIGlzIGF0dGFjaGVkIHRv IDFzdCBNQUMiDQorCWRlcGVuZHMgb24gTUlQU19BVTFYMDBfRU5FVF9TVEFUSUNfUEhZX0NPTkZJ Rw0KKwlkZWZhdWx0IG4NCisJaGVscA0KKwkgIFNheSBZIGhlcmUsIGlmIHRoZSBzZWNvbmQgRXRo ZXJuZXQncyBQSFkgaXMgYXR0YWNoZWQgdG8gDQorCSAgdGhlIE1JSSBidXMgb2YgdGhlIGZpcnN0 IE1BQy4NCisNCitjb25maWcgTUlQU19BVTFYMDBfRU5FVF9FVEgxX1BIWV9BRERSDQorCWludCAi Mm5kIEV0aGVybmV0J3MgUEhZIGFkZHJlc3Mgey0xLDAuLjMxfSINCisJZGVwZW5kcyBvbiBNSVBT X0FVMVgwMF9FTkVUX1NUQVRJQ19QSFlfQ09ORklHDQorCWhlbHANCisJICBQcm92aWRlIHRoZSBQ SFkgYWRkcmVzcyBvZiB0aGUgc2Vjb25kIEV0aGVybmV0IGRldmljZS4gDQorCSAgSWYgdGhlIFBI WSBoYXMgbm8gUEhZIGFkZHJlc3MsIHNheSAiLTEiLg0KKw0KIGNvbmZpZyBTR0lfSU9DM19FVEgN CiAJYm9vbCAiU0dJIElPQzMgRXRoZXJuZXQiDQogCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYm IFBDSSAmJiBTR0lfSVAyNw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBi L2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYw0KaW5kZXggMDgyM2NiOC4uOGMwYjI2ZiAxMDA2NDQN Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYw0KKysrIGIvZHJpdmVycy9uZXQvYXUxMDAw X2V0aC5jDQpAQCAtOSw2ICs5LDkgQEANCiAgKiBVcGRhdGU6IDIwMDQgQmpvZXJuIFJpZW1lciwg cmllbWVyQGZva3VzLmZyYXVuaG9mZXIuZGUgDQogICogb3IgcmllbWVyQHJpZW1lci1udC5kZTog Zml4ZWQgdGhlIGxpbmsgYmVhdCBkZXRlY3Rpb24gd2l0aCANCiAgKiBpb2N0bHMgKFNJT0NHTUlJ UEhZKQ0KKyAqIENvcHlyaWdodCAyMDA2IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUu b3JnPg0KKyAqICBjb252ZXJ0ZWQgdG8gdXNlIGxpbnV4LTIuNi54J3MgUEhZIGZyYW1ld29yayAN CisgKg0KICAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLg0KICAqICAgICAgICAg CXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tDQogICoNCkBAIC01Myw2ICs1 Niw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KICNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPg0KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPg0KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4N CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+DQogI2luY2x1ZGUgPGFzbS9pcnEuaD4NCiAjaW5j bHVkZSA8YXNtL2lvLmg+DQpAQCAtODgsMTQgKzkyLDEzIEBAIHN0YXRpYyBpbnQgYXUxMDAwX3R4 KHN0cnVjdCBza19idWZmICosIHMNCiBzdGF0aWMgaW50IGF1MTAwMF9yeChzdHJ1Y3QgbmV0X2Rl dmljZSAqKTsNCiBzdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQsIHZvaWQg Kiwgc3RydWN0IHB0X3JlZ3MgKik7DQogc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3Ry dWN0IG5ldF9kZXZpY2UgKik7DQotc3RhdGljIGludCBhdTEwMDBfc2V0X2NvbmZpZyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7DQogc3RhdGljIHZvaWQgc2V0X3J4 X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7DQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0 YXRzICphdTEwMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOw0KLXN0YXRpYyB2b2lk IGF1MTAwMF90aW1lcih1bnNpZ25lZCBsb25nKTsNCiBzdGF0aWMgaW50IGF1MTAwMF9pb2N0bChz dHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsNCiBzdGF0aWMgaW50IG1k aW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7DQogc3RhdGljIHZvaWQgbWRp b193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCwgdTE2KTsNCi1zdGF0aWMgdm9p ZCBkdW1wX21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkKTsNCitzdGF0aWMg dm9pZCBhdTEwMDBfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKik7DQorc3RhdGljIHZv aWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOw0KIA0KIC8vIGV4dGVybnMN CiBleHRlcm4gIHZvaWQgYWNrX3Jpc2VfZWRnZV9pcnEodW5zaWduZWQgaW50KTsNCkBAIC0xMzUs Njk2ICsxMzgsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYXUxMDAwX21hY19hZGRyWzZdIA0K IA0KIHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVfbWFjc1tOVU1fRVRIX0lOVEVSRkFDRVNdOw0K IA0KLS8qIEZJWE1FIA0KLSAqIEFsbCBvZiB0aGUgUEhZIGNvZGUgcmVhbGx5IHNob3VsZCBiZSBk ZXRhY2hlZCBmcm9tIHRoZSBNQUMgDQotICogY29kZS4NCi0gKi8NCi0NCi0vKiBEZWZhdWx0IGFk dmVydGlzZSAqLw0KLSNkZWZpbmUgR0VOTUlJX0RFRkFVTFRfQURWRVJUSVNFIFwNCi0JQURWRVJU SVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8IFwNCi0JQURWRVJU SVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwgXA0KLQlBRFZF UlRJU0VEX0F1dG9uZWcNCi0NCi0jZGVmaW5lIEdFTk1JSV9ERUZBVUxUX0ZFQVRVUkVTIFwNCi0J U1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBcDQotCVNV UFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBcDQotCVNV UFBPUlRFRF9BdXRvbmVnDQotDQotaW50IGJjbV81MjAxX2luaXQoc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JczE2IGRhdGE7DQotCQ0KLQkvKiBTdG9wIGF1dG8t bmVnb3RpYXRpb24gKi8NCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09O VFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+ TUlJX0NOVExfQVVUTyk7DQotDQotCS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEwMCBhbmQg SGFsZi9GdWxsIGR1cGxleA0KLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovDQotCWRhdGEgPSBt ZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsNCi0JZGF0YSB8PSBNSUlfTldBWV9U WCB8IE1JSV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsNCi0JbWRp b193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOw0KLQkNCi0JLyogUmVzdGFy dCBhdXRvLW5lZ290aWF0aW9uICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwg TUlJX0NPTlRST0wpOw0KLQlkYXRhIHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NOVExfQVVU TzsNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7DQotDQot CWlmIChhdTEwMDBfZGVidWcgPiA0KSANCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOw0KLQly ZXR1cm4gMDsNCi19DQotDQotaW50IGJjbV81MjAxX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIGludCBwaHlfYWRkcikNCi17DQotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsNCi0JDQot CW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0J bWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlf Q05UTF9SRVNFVCk7DQotCW1kZWxheSgxKTsNCi0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0 ID4gMDsgLS10aW1lb3V0KSB7DQotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9h ZGRyLCBNSUlfQ09OVFJPTCk7DQotCQlpZiAoKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQp ID09IDApDQotCQkJYnJlYWs7DQotCQltZGVsYXkoMSk7DQotCX0NCi0JaWYgKG1paV9jb250cm9s ICYgTUlJX0NOVExfUkVTRVQpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRp bWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQlyZXR1cm4gMDsN Ci19DQotDQotaW50IA0KLWJjbV81MjAxX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBp bnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkNCi17DQotCXUxNiBtaWlfZGF0YTsN Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7DQotDQotCWlmICghZGV2KSB7DQotCQlwcmlu dGsoS0VSTl9FUlIgImJjbV81MjAxX3N0YXR1cyBlcnJvcjogTlVMTCBkZXZcbiIpOw0KLQkJcmV0 dXJuIC0xOw0KLQl9DQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2 Ow0KLQ0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFU VVMpOw0KLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7DQotCQkqbGluayA9IDE7DQot CQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BVVhfQ05UUkwp Ow0KLQkJaWYgKG1paV9kYXRhICYgTUlJX0FVWF8xMDApIHsNCi0JCQlpZiAobWlpX2RhdGEgJiBN SUlfQVVYX0ZEWCkgew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsNCi0JCQkJZGV2 LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJfQ0KLQkJCWVsc2Ugew0KLQkJCQkq c3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsNCi0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8x MDBCQVNFVFg7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZSAgew0KLQkJCSpzcGVlZCA9IElGX1BPUlRf MTBCQVNFVDsNCi0JCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7DQotCQl9DQotDQot CX0NCi0JZWxzZSB7DQotCQkqbGluayA9IDA7DQotCQkqc3BlZWQgPSAwOw0KLQkJZGV2LT5pZl9w b3J0ID0gSUZfUE9SVF9VTktOT1dOOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQgbHNp XzgwMjI3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0J aWYgKGF1MTAwMF9kZWJ1ZyA+IDQpDQotCQlwcmludGsoImxzaV84MDIyN19pbml0XG4iKTsNCi0N Ci0JLyogcmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovDQotCW1kaW9fd3JpdGUoZGV2LCBwaHlf YWRkciwgTUlJX0NPTlRST0wsDQotCQkgICBNSUlfQ05UTF9GMTAwIHwgTUlJX0NOVExfQVVUTyB8 IE1JSV9DTlRMX1JTVF9BVVRPKTsgLy8gfCBNSUlfQ05UTF9GRFgpOw0KLQltZGVsYXkoMSk7DQot DQotCS8qIHNldCB1cCBMRURzIHRvIGNvcnJlY3QgZGlzcGxheSAqLw0KLSNpZmRlZiBDT05GSUdf TUlQU19NVFgxDQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgMTcsIDB4ZmY4MCk7DQotI2Vs c2UNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCAxNywgMHhmZmMwKTsNCi0jZW5kaWYNCi0N Ci0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpDQotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0J cmV0dXJuIDA7DQotfQ0KLQ0KLWludCBsc2lfODAyMjdfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0Ow0KLQkN Ci0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIHsNCi0JCXByaW50aygibHNpXzgwMjI3X3Jlc2V0XG4i KTsNCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOw0KLQl9DQotDQotCW1paV9jb250cm9sID0g bWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0JbWRpb193cml0ZShkZXYs IHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7DQot CW1kZWxheSgxKTsNCi0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0 KSB7DQotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJP TCk7DQotCQlpZiAoKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpID09IDApDQotCQkJYnJl YWs7DQotCQltZGVsYXkoMSk7DQotCX0NCi0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVT RVQpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2 LT5uYW1lKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50DQot bHNpXzgwMjI3X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUx NiAqbGluaywgdTE2ICpzcGVlZCkNCi17DQotCXUxNiBtaWlfZGF0YTsNCi0Jc3RydWN0IGF1MTAw MF9wcml2YXRlICphdXA7DQotDQotCWlmICghZGV2KSB7DQotCQlwcmludGsoS0VSTl9FUlIgImxz aV84MDIyN19zdGF0dXMgZXJyb3I6IE5VTEwgZGV2XG4iKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0K LQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0NCi0JbWlpX2Rh dGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsNCi0JaWYgKG1p aV9kYXRhICYgTUlJX1NUQVRfTElOSykgew0KLQkJKmxpbmsgPSAxOw0KLQkJbWlpX2RhdGEgPSBt ZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfTFNJX1BIWV9TVEFUKTsNCi0JCWlmICht aWlfZGF0YSAmIE1JSV9MU0lfUEhZX1NUQVRfU1BEKSB7DQotCQkJaWYgKG1paV9kYXRhICYgTUlJ X0xTSV9QSFlfU1RBVF9GRFgpIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQot CQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCX0NCi0JCQllbHNlIHsN Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElG X1BPUlRfMTAwQkFTRVRYOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgIHsNCi0JCQkqc3BlZWQgPSBJ Rl9QT1JUXzEwQkFTRVQ7DQotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJ fQ0KLQ0KLQl9DQotCWVsc2Ugew0KLQkJKmxpbmsgPSAwOw0KLQkJKnNwZWVkID0gMDsNCi0JCWRl di0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQot aW50IGFtNzljOTAxX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0K LXsNCi0JcHJpbnRrKCJhbTc5YzkwMV9pbml0XG4iKTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWlu dCBhbTc5YzkwMV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpDQot ew0KLQlwcmludGsoImFtNzljOTAxX3Jlc2V0XG4iKTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWlu dCANCi1hbTc5YzkwMV9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRy LCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpDQotew0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IGFt NzljODc0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0J czE2IGRhdGE7DQotDQotCS8qIDc5Yzg3NCBoYXMgcXVpdCByZXNlbWJsZWQgYml0IGFzc2lnbm1l bnRzIHRvIEJDTTUyMDEgKi8NCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpDQotCQlwcmludGsoImFt NzljODQ3X2luaXRcbiIpOw0KLQ0KLQkvKiBTdG9wIGF1dG8tbmVnb3RpYXRpb24gKi8NCi0JZGF0 YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUo ZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NOVExfQVVUTyk7DQotDQot CS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEwMCBhbmQgSGFsZi9GdWxsIGR1cGxleA0KLQkg KiAoZnVsbCBjYXBhYmlsaXRpZXMpICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRk ciwgTUlJX0FOQURWKTsNCi0JZGF0YSB8PSBNSUlfTldBWV9UWCB8IE1JSV9OV0FZX1RYX0ZEWCB8 IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRy LCBNSUlfQU5BRFYsIGRhdGEpOw0KLQkNCi0JLyogUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICov DQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQlkYXRh IHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NOVExfQVVUTzsNCi0NCi0JbWRpb193cml0ZShk ZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7DQotDQotCWlmIChhdTEwMDBfZGVidWcg PiA0KSBkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBh bTc5Yzg3NF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpDQotew0K LQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7DQotCQ0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkN Ci0JCXByaW50aygiYW03OWM4NzRfcmVzZXRcbiIpOw0KLQ0KLQltaWlfY29udHJvbCA9IG1kaW9f cmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlf YWRkciwgTUlJX0NPTlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOw0KLQltZGVs YXkoMSk7DQotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgew0K LQkJbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0K LQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQ0KLQkJCWJyZWFrOw0K LQkJbWRlbGF5KDEpOw0KLQl9DQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7 DQotCQlwcmludGsoS0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFt ZSk7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCANCi1hbTc5 Yzg3NF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxp bmssIHUxNiAqc3BlZWQpDQotew0KLQl1MTYgbWlpX2RhdGE7DQotCXN0cnVjdCBhdTEwMDBfcHJp dmF0ZSAqYXVwOw0KLQ0KLQkvLyBwcmludGsoImFtNzljODc0X3N0YXR1c1xuIik7DQotCWlmICgh ZGV2KSB7DQotCQlwcmludGsoS0VSTl9FUlIgImFtNzljODc0X3N0YXR1cyBlcnJvcjogTlVMTCBk ZXZcbiIpOw0KLQkJcmV0dXJuIC0xOw0KLQl9DQotDQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3By aXZhdGUgKikgZGV2LT5wcml2Ow0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5 X2FkZHIsIE1JSV9TVEFUVVMpOw0KLQ0KLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7 DQotCQkqbGluayA9IDE7DQotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2Fk ZHIsIE1JSV9BTURfUEhZX1NUQVQpOw0KLQkJaWYgKG1paV9kYXRhICYgTUlJX0FNRF9QSFlfU1RB VF9TUEQpIHsNCi0JCQlpZiAobWlpX2RhdGEgJiBNSUlfQU1EX1BIWV9TVEFUX0ZEWCkgew0KLQkJ CQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsNCi0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9S VF8xMDBCQVNFRlg7DQotCQkJfQ0KLQkJCWVsc2Ugew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEw MEJBU0VUWDsNCi0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJfQ0K LQkJfQ0KLQkJZWxzZSB7DQotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJCWRldi0+ aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsNCi0JCX0NCi0NCi0JfQ0KLQllbHNlIHsNCi0JCSps aW5rID0gMDsNCi0JCSpzcGVlZCA9IDA7DQotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05P V047DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBseHQ5NzFhX2luaXQoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQp DQotCQlwcmludGsoImx4dDk3MWFfaW5pdFxuIik7DQotDQotCS8qIHJlc3RhcnQgYXV0by1uZWdv dGlhdGlvbiAqLw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLA0KLQkJ ICAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0FVVE8gfCBNSUlfQ05UTF9SU1RfQVVUTyB8IE1J SV9DTlRMX0ZEWCk7DQotDQotCS8qIHNldCB1cCBMRURzIHRvIGNvcnJlY3QgZGlzcGxheSAqLw0K LQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIDIwLCAweDA0MjIpOw0KLQ0KLQlpZiAoYXUxMDAw X2RlYnVnID4gNCkNCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOw0KLQlyZXR1cm4gMDsNCi19 DQotDQotaW50IGx4dDk3MWFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9h ZGRyKQ0KLXsNCi0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0Ow0KLQkNCi0JaWYgKGF1MTAwMF9k ZWJ1ZyA+IDQpIHsNCi0JCXByaW50aygibHh0OTcxYV9yZXNldFxuIik7DQotCQlkdW1wX21paShk ZXYsIHBoeV9hZGRyKTsNCi0JfQ0KLQ0KLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBo eV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NP TlRST0wsIG1paV9jb250cm9sIHwgTUlJX0NOVExfUkVTRVQpOw0KLQltZGVsYXkoMSk7DQotCWZv ciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgew0KLQkJbWlpX2NvbnRy b2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJaWYgKChtaWlf Y29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQ0KLQkJCWJyZWFrOw0KLQkJbWRlbGF5KDEp Ow0KLQl9DQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7DQotCQlwcmludGso S0VSTl9FUlIgIiVzIFBIWSByZXNldCB0aW1lb3V0ICFcbiIsIGRldi0+bmFtZSk7DQotCQlyZXR1 cm4gLTE7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludA0KLWx4dDk3MWFfc3RhdHVzKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVk KQ0KLXsNCi0JdTE2IG1paV9kYXRhOw0KLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsNCi0N Ci0JaWYgKCFkZXYpIHsNCi0JCXByaW50ayhLRVJOX0VSUiAibHh0OTcxYV9zdGF0dXMgZXJyb3I6 IE5VTEwgZGV2XG4iKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQlhdXAgPSAoc3RydWN0IGF1MTAw MF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0NCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBh dXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsNCi0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElO Sykgew0KLQkJKmxpbmsgPSAxOw0KLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBo eV9hZGRyLCBNSUlfSU5URUxfUEhZX1NUQVQpOw0KLQkJaWYgKG1paV9kYXRhICYgTUlJX0lOVEVM X1BIWV9TVEFUX1NQRCkgew0KLQkJCWlmIChtaWlfZGF0YSAmIE1JSV9JTlRFTF9QSFlfU1RBVF9G RFgpIHsNCi0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJCWRldi0+aWZfcG9y dCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQkJCX0NCi0JCQllbHNlIHsNCi0JCQkJKnNwZWVkID0g SUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRY Ow0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgIHsNCi0JCQkqc3BlZWQgPSBJRl9QT1JUXzEwQkFTRVQ7 DQotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJfQ0KLQ0KLQl9DQotCWVs c2Ugew0KLQkJKmxpbmsgPSAwOw0KLQkJKnNwZWVkID0gMDsNCi0JCWRldi0+aWZfcG9ydCA9IElG X1BPUlRfVU5LTk9XTjsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IGtzODk5NW1faW5p dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpDQotew0KLQlzMTYgZGF0YTsN Ci0JDQotLy8JcHJpbnRrKCJrczg5OTVtX2luaXRcbiIpOw0KLQkvKiBTdG9wIGF1dG8tbmVnb3Rp YXRpb24gKi8NCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7 DQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NO VExfQVVUTyk7DQotDQotCS8qIFNldCBhZHZlcnRpc2VtZW50IHRvIDEwLzEwMCBhbmQgSGFsZi9G dWxsIGR1cGxleA0KLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovDQotCWRhdGEgPSBtZGlvX3Jl YWQoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsNCi0JZGF0YSB8PSBNSUlfTldBWV9UWCB8IE1J SV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYIHwgTUlJX05XQVlfVDsNCi0JbWRpb193cml0 ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOw0KLQkNCi0JLyogUmVzdGFydCBhdXRv LW5lZ290aWF0aW9uICovDQotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NP TlRST0wpOw0KLQlkYXRhIHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NOVExfQVVUTzsNCi0J bWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgZGF0YSk7DQotDQotCWlmIChh dTEwMDBfZGVidWcgPiA0KSBkdW1wX21paShkZXYsIHBoeV9hZGRyKTsNCi0NCi0JcmV0dXJuIDA7 DQotfQ0KLQ0KLWludCBrczg5OTVtX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBw aHlfYWRkcikNCi17DQotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsNCi0JDQotLy8JcHJpbnRr KCJrczg5OTVtX3Jlc2V0XG4iKTsNCi0JbWlpX2NvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBwaHlf YWRkciwgTUlJX0NPTlRST0wpOw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05U Uk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsNCi0JbWRlbGF5KDEpOw0KLQlmb3Ig KHRpbWVvdXQgPSAxMDA7IHRpbWVvdXQgPiAwOyAtLXRpbWVvdXQpIHsNCi0JCW1paV9jb250cm9s ID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsNCi0JCWlmICgobWlpX2Nv bnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkNCi0JCQlicmVhazsNCi0JCW1kZWxheSgxKTsN Ci0JfQ0KLQlpZiAobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgew0KLQkJcHJpbnRrKEtF Uk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOw0KLQkJcmV0dXJu IC0xOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQga3M4OTk1bV9zdGF0dXMoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpDQot ew0KLQl1MTYgbWlpX2RhdGE7DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOw0KLQ0KLQlp ZiAoIWRldikgew0KLQkJcHJpbnRrKEtFUk5fRVJSICJrczg5OTVtX3N0YXR1cyBlcnJvcjogTlVM TCBkZXZcbiIpOw0KLQkJcmV0dXJuIC0xOw0KLQl9DQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3By aXZhdGUgKikgZGV2LT5wcml2Ow0KLQ0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+ cGh5X2FkZHIsIE1JSV9TVEFUVVMpOw0KLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7 DQotCQkqbGluayA9IDE7DQotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2Fk ZHIsIE1JSV9BVVhfQ05UUkwpOw0KLQkJaWYgKG1paV9kYXRhICYgTUlJX0FVWF8xMDApIHsNCi0J CQlpZiAobWlpX2RhdGEgJiBNSUlfQVVYX0ZEWCkgew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEw MEJBU0VGWDsNCi0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJfQ0K LQkJCWVsc2Ugew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsNCi0JCQkJZGV2LT5p Zl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZSAgewkJCQkJ CQkJCQkJDQotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJCWRldi0+aWZfcG9ydCA9 IElGX1BPUlRfMTBCQVNFVDsNCi0JCX0NCi0NCi0JfQ0KLQllbHNlIHsNCi0JCSpsaW5rID0gMDsN Ci0JCSpzcGVlZCA9IDA7DQotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047DQotCX0N Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludA0KLXNtc2NfODNDMTg1X2luaXQgKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCXMxNiBkYXRhOw0KLQ0KLQlpZiAoYXUx MDAwX2RlYnVnID4gNCkNCi0JCXByaW50aygic21zY184M0MxODVfaW5pdFxuIik7DQotDQotCS8q IFN0b3AgYXV0by1uZWdvdGlhdGlvbiAqLw0KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2Fk ZHIsIE1JSV9DT05UUk9MKTsNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJP TCwgZGF0YSAmIH5NSUlfQ05UTF9BVVRPKTsNCi0NCi0JLyogU2V0IGFkdmVydGlzZW1lbnQgdG8g MTAvMTAwIGFuZCBIYWxmL0Z1bGwgZHVwbGV4DQotCSAqIChmdWxsIGNhcGFiaWxpdGllcykgKi8N Ci0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYpOw0KLQlkYXRhIHw9 IE1JSV9OV0FZX1RYIHwgTUlJX05XQVlfVFhfRkRYIHwgTUlJX05XQVlfVF9GRFggfCBNSUlfTldB WV9UOw0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFEViwgZGF0YSk7DQotCQ0K LQkvKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gKi8NCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYs IHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCWRhdGEgfD0gTUlJX0NOVExfUlNUX0FVVE8gfCBN SUlfQ05UTF9BVVRPOw0KLQ0KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9M LCBkYXRhKTsNCi0NCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIGR1bXBfbWlpKGRldiwgcGh5X2Fk ZHIpOw0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50DQotc21zY184M0MxODVfcmVzZXQgKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikNCi17DQotCXMxNiBtaWlfY29udHJvbCwg dGltZW91dDsNCi0JDQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQ0KLQkJcHJpbnRrKCJzbXNjXzgz QzE4NV9yZXNldFxuIik7DQotDQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2Fk ZHIsIE1JSV9DT05UUk9MKTsNCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJP TCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7DQotCW1kZWxheSgxKTsNCi0JZm9yICh0 aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7DQotCQltaWlfY29udHJvbCA9 IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7DQotCQlpZiAoKG1paV9jb250 cm9sICYgTUlJX0NOVExfUkVTRVQpID09IDApDQotCQkJYnJlYWs7DQotCQltZGVsYXkoMSk7DQot CX0NCi0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsNCi0JCXByaW50ayhLRVJO X0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsNCi0JCXJldHVybiAt MTsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IA0KLXNtc2NfODNDMTg1X3N0YXR1cyAo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3Bl ZWQpDQotew0KLQl1MTYgbWlpX2RhdGE7DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOw0K LQ0KLQlpZiAoIWRldikgew0KLQkJcHJpbnRrKEtFUk5fRVJSICJzbXNjXzgzQzE4NV9zdGF0dXMg ZXJyb3I6IE5VTEwgZGV2XG4iKTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQ0KLQlhdXAgPSAoc3Ry dWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQo ZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsNCi0NCi0JaWYgKG1paV9kYXRhICYgTUlJ X1NUQVRfTElOSykgew0KLQkJKmxpbmsgPSAxOw0KLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2 LCBhdXAtPnBoeV9hZGRyLCAweDFmKTsNCi0JCWlmIChtaWlfZGF0YSAmICgxPDwzKSkgew0KLQkJ CWlmIChtaWlfZGF0YSAmICgxPDw0KSkgew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VG WDsNCi0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCQkJfQ0KLQkJCWVs c2Ugew0KLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsNCi0JCQkJZGV2LT5pZl9wb3J0 ID0gSUZfUE9SVF8xMDBCQVNFVFg7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZSB7DQotCQkJKnNwZWVk ID0gSUZfUE9SVF8xMEJBU0VUOw0KLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsN Ci0JCX0NCi0JfQ0KLQllbHNlIHsNCi0JCSpsaW5rID0gMDsNCi0JCSpzcGVlZCA9IDA7DQotCQlk ZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0K LQ0KLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUw0KLWludCBzdHViX2luaXQoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JLy9wcmludGsoIlBIWSBzdHViX2lu aXRcbiIpOw0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IHN0dWJfcmVzZXQoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQ0KLXsNCi0JLy9wcmludGsoIlBIWSBzdHViX3Jlc2V0 XG4iKTsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludCANCi1zdHViX3N0YXR1cyhzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkNCi17DQot CS8vcHJpbnRrKCJQSFkgc3R1Yl9zdGF0dXNcbiIpOw0KLQkqbGluayA9IDE7DQotCS8qIGhtbW0s IHJldmlzaXQgKi8NCi0JKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7DQotCWRldi0+aWZfcG9y dCA9IElGX1BPUlRfMTAwQkFTRUZYOw0KLQlyZXR1cm4gMDsNCi19DQotI2VuZGlmDQotDQotc3Ry dWN0IHBoeV9vcHMgYmNtXzUyMDFfb3BzID0gew0KLQliY21fNTIwMV9pbml0LA0KLQliY21fNTIw MV9yZXNldCwNCi0JYmNtXzUyMDFfc3RhdHVzLA0KLX07DQotDQotc3RydWN0IHBoeV9vcHMgYW03 OWM4NzRfb3BzID0gew0KLQlhbTc5Yzg3NF9pbml0LA0KLQlhbTc5Yzg3NF9yZXNldCwNCi0JYW03 OWM4NzRfc3RhdHVzLA0KLX07DQotDQotc3RydWN0IHBoeV9vcHMgYW03OWM5MDFfb3BzID0gew0K LQlhbTc5YzkwMV9pbml0LA0KLQlhbTc5YzkwMV9yZXNldCwNCi0JYW03OWM5MDFfc3RhdHVzLA0K LX07DQotDQotc3RydWN0IHBoeV9vcHMgbHNpXzgwMjI3X29wcyA9IHsgDQotCWxzaV84MDIyN19p bml0LA0KLQlsc2lfODAyMjdfcmVzZXQsDQotCWxzaV84MDIyN19zdGF0dXMsDQotfTsNCi0NCi1z dHJ1Y3QgcGh5X29wcyBseHQ5NzFhX29wcyA9IHsgDQotCWx4dDk3MWFfaW5pdCwNCi0JbHh0OTcx YV9yZXNldCwNCi0JbHh0OTcxYV9zdGF0dXMsDQotfTsNCi0NCi1zdHJ1Y3QgcGh5X29wcyBrczg5 OTVtX29wcyA9IHsNCi0Ja3M4OTk1bV9pbml0LA0KLQlrczg5OTVtX3Jlc2V0LA0KLQlrczg5OTVt X3N0YXR1cywNCi19Ow0KLQ0KLXN0cnVjdCBwaHlfb3BzIHNtc2NfODNDMTg1X29wcyA9IHsNCi0J c21zY184M0MxODVfaW5pdCwNCi0Jc21zY184M0MxODVfcmVzZXQsDQotCXNtc2NfODNDMTg1X3N0 YXR1cywNCi19Ow0KLQ0KLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUw0KLXN0cnVjdCBwaHlf b3BzIHN0dWJfb3BzID0gew0KLQlzdHViX2luaXQsDQotCXN0dWJfcmVzZXQsDQotCXN0dWJfc3Rh dHVzLA0KLX07DQotI2VuZGlmDQotDQotc3RhdGljIHN0cnVjdCBtaWlfY2hpcF9pbmZvIHsNCi0J Y29uc3QgY2hhciAqIG5hbWU7DQotCXUxNiBwaHlfaWQwOw0KLQl1MTYgcGh5X2lkMTsNCi0Jc3Ry dWN0IHBoeV9vcHMgKnBoeV9vcHM7CQ0KLQlpbnQgZHVhbF9waHk7DQotfSBtaWlfY2hpcF90YWJs ZVtdID0gew0KLQl7IkJyb2FkY29tIEJDTTUyMDEgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDQwLDB4 NjIxMiwgJmJjbV81MjAxX29wcywwfSwNCi0JeyJCcm9hZGNvbSBCQ001MjIxIDEwLzEwMCBCYXNl VCBQSFkiLDB4MDA0MCwweDYxZTQsICZiY21fNTIwMV9vcHMsMH0sDQotCXsiQnJvYWRjb20gQkNN NTIyMiAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAsMHg2MzIyLCAmYmNtXzUyMDFfb3BzLDF9LA0K LQl7Ik5TIERQODM4NDcgUEhZIiwgMHgyMDAwLCAweDVjMzAsICZiY21fNTIwMV9vcHMgLDB9LA0K LQl7IkFNRCA3OUM5MDEgSG9tZVBOQSBQSFkiLDB4MDAwMCwweDM1YzgsICZhbTc5YzkwMV9vcHMs MH0sDQotCXsiQU1EIDc5Qzg3NCAxMC8xMDAgQmFzZVQgUEhZIiwweDAwMjIsMHg1NjFiLCAmYW03 OWM4NzRfb3BzLDB9LA0KLQl7IkxTSSA4MDIyNyAxMC8xMDAgQmFzZVQgUEhZIiwweDAwMTYsMHhm ODQwLCAmbHNpXzgwMjI3X29wcywwfSwNCi0JeyJJbnRlbCBMWFQ5NzFBIER1YWwgU3BlZWQgUEhZ IiwweDAwMTMsMHg3OGUyLCAmbHh0OTcxYV9vcHMsMH0sDQotCXsiS2VuZGluIEtTODk5NU0gMTAv MTAwIEJhc2VUIFBIWSIsMHgwMDIyLDB4MTQ1MCwgJmtzODk5NW1fb3BzLDB9LA0KLQl7IlNNU0Mg TEFOODNDMTg1IDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAwNywweGMwYTMsICZzbXNjXzgzQzE4NV9v cHMsMH0sDQotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTDQotCXsiU3R1YiIsIDB4MTIzNCwg MHg1Njc4LCAmc3R1Yl9vcHMgfSwNCi0jZW5kaWYNCi0JezAsfSwNCi19Ow0KLQ0KLXN0YXRpYyBp bnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcp DQorc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9h ZGRyLCBpbnQgcmVnKQ0KIHsNCiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0 IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0Jdm9sYXRpbGUgdTMyICptaWlfY29udHJv bF9yZWc7DQotCXZvbGF0aWxlIHUzMiAqbWlpX2RhdGFfcmVnOw0KKwl2b2xhdGlsZSB1MzIgKmNv bnN0IG1paV9jb250cm9sX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2NvbnRyb2w7DQorCXZvbGF0aWxl IHUzMiAqY29uc3QgbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsNCiAJdTMyIHRp bWVkb3V0ID0gMjA7DQogCXUzMiBtaWlfY29udHJvbDsNCiANCi0JI2lmZGVmIENPTkZJR19CQ001 MjIyX0RVQUxfUEhZDQotCS8qIEZpcnN0IHRpbWUgd2UgcHJvYmUsIGl0J3MgZm9yIHRoZSBtYWMw IHBoeS4NCi0JICogU2luY2Ugd2UgaGF2ZW4ndCBkZXRlcm1pbmVkIHlldCB0aGF0IHdlIGhhdmUg YSBkdWFsIHBoeSwNCi0JICogYXVwLT5taWktPm1paV9jb250cm9sX3JlZyB3b24ndCBiZSBzZXR1 cCBhbmQgd2UnbGwNCi0JICogZGVmYXVsdCB0byB0aGUgZWxzZSBzdGF0ZW1lbnQuDQotCSAqIEJ5 IHRoZSB0aW1lIHdlIHByb2JlIGZvciB0aGUgbWFjMSBwaHksIHRoZSBtaWlfY29udHJvbF9yZWcN Ci0JICogd2lsbCBiZSBzZXR1cCB0byBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgbWFjMCBwaHkgY29u dHJvbCBzaW5jZQ0KLQkgKiBib3RoIHBoeXMgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBtYWMwLg0K LQkgKi8NCi0JaWYgKGF1cC0+bWlpICYmIGF1cC0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsNCi0J CW1paV9jb250cm9sX3JlZyA9IGF1cC0+bWlpLT5taWlfY29udHJvbF9yZWc7DQotCQltaWlfZGF0 YV9yZWcgPSBhdXAtPm1paS0+bWlpX2RhdGFfcmVnOw0KLQl9DQotCWVsc2UgaWYgKGF1X21hY3Nb MF0tPm1paSAmJiBhdV9tYWNzWzBdLT5taWktPm1paV9jb250cm9sX3JlZykgew0KLQkJLyogYXNz dW1lIGJvdGggcGh5cyBhcmUgY29udHJvbGxlZCB0aHJvdWdoIG1hYzAgKi8NCi0JCW1paV9jb250 cm9sX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnOw0KLQkJbWlpX2RhdGFf cmVnID0gYXVfbWFjc1swXS0+bWlpLT5taWlfZGF0YV9yZWc7DQotCX0NCi0JZWxzZSANCi0JI2Vu ZGlmDQotCXsNCi0JCS8qIGRlZmF1bHQgY29udHJvbCBhbmQgZGF0YSByZWcgYWRkcmVzc2VzICov DQotCQltaWlfY29udHJvbF9yZWcgPSAmYXVwLT5tYWMtPm1paV9jb250cm9sOw0KLQkJbWlpX2Rh dGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0YTsNCi0JfQ0KLQ0KIAl3aGlsZSAoKm1paV9jb250 cm9sX3JlZyAmIE1BQ19NSUlfQlVTWSkgew0KIAkJbWRlbGF5KDEpOw0KIAkJaWYgKC0tdGltZWRv dXQgPT0gMCkgew0KQEAgLTgzNSw3ICsxNTYsNyBAQCBzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1 Y3QgbmV0X2RldmljZSAqDQogCX0NCiANCiAJbWlpX2NvbnRyb2wgPSBNQUNfU0VUX01JSV9TRUxF Q1RfUkVHKHJlZykgfCANCi0JCU1BQ19TRVRfTUlJX1NFTEVDVF9QSFkocGh5X2lkKSB8IE1BQ19N SUlfUkVBRDsNCisJCU1BQ19TRVRfTUlJX1NFTEVDVF9QSFkocGh5X2FkZHIpIHwgTUFDX01JSV9S RUFEOw0KIA0KIAkqbWlpX2NvbnRyb2xfcmVnID0gbWlpX2NvbnRyb2w7DQogDQpAQCAtODUxLDMy ICsxNzIsMTQgQEAgc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKg0KIAly ZXR1cm4gKGludCkqbWlpX2RhdGFfcmVnOw0KIH0NCiANCi1zdGF0aWMgdm9pZCBtZGlvX3dyaXRl KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcsIHUxNiB2YWx1ZSkN CitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlf YWRkciwgaW50IHJlZywgdTE2IHZhbHVlKQ0KIHsNCiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICph dXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsNCi0Jdm9sYXRpbGUgdTMy ICptaWlfY29udHJvbF9yZWc7DQotCXZvbGF0aWxlIHUzMiAqbWlpX2RhdGFfcmVnOw0KKwl2b2xh dGlsZSB1MzIgKmNvbnN0IG1paV9jb250cm9sX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2NvbnRyb2w7 DQorCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2RhdGFfcmVnID0gJmF1cC0+bWFjLT5taWlfZGF0 YTsNCiAJdTMyIHRpbWVkb3V0ID0gMjA7DQogCXUzMiBtaWlfY29udHJvbDsNCiANCi0JI2lmZGVm IENPTkZJR19CQ001MjIyX0RVQUxfUEhZDQotCWlmIChhdXAtPm1paSAmJiBhdXAtPm1paS0+bWlp X2NvbnRyb2xfcmVnKSB7DQotCQltaWlfY29udHJvbF9yZWcgPSBhdXAtPm1paS0+bWlpX2NvbnRy b2xfcmVnOw0KLQkJbWlpX2RhdGFfcmVnID0gYXVwLT5taWktPm1paV9kYXRhX3JlZzsNCi0JfQ0K LQllbHNlIGlmIChhdV9tYWNzWzBdLT5taWkgJiYgYXVfbWFjc1swXS0+bWlpLT5taWlfY29udHJv bF9yZWcpIHsNCi0JCS8qIGFzc3VtZSBib3RoIHBoeXMgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBt YWMwICovDQotCQltaWlfY29udHJvbF9yZWcgPSBhdV9tYWNzWzBdLT5taWktPm1paV9jb250cm9s X3JlZzsNCi0JCW1paV9kYXRhX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2RhdGFfcmVnOw0K LQl9DQotCWVsc2UgDQotCSNlbmRpZg0KLQl7DQotCQkvKiBkZWZhdWx0IGNvbnRyb2wgYW5kIGRh dGEgcmVnIGFkZHJlc3NlcyAqLw0KLQkJbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlf Y29udHJvbDsNCi0JCW1paV9kYXRhX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2RhdGE7DQotCX0NCi0N CiAJd2hpbGUgKCptaWlfY29udHJvbF9yZWcgJiBNQUNfTUlJX0JVU1kpIHsNCiAJCW1kZWxheSgx KTsNCiAJCWlmICgtLXRpbWVkb3V0ID09IDApIHsNCkBAIC04ODcsMTY1ICsxOTAsMTM2IEBAIHN0 YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UNCiAJfQ0KIA0KIAltaWlfY29u dHJvbCA9IE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcocmVnKSB8IA0KLQkJTUFDX1NFVF9NSUlfU0VM RUNUX1BIWShwaHlfaWQpIHwgTUFDX01JSV9XUklURTsNCisJCU1BQ19TRVRfTUlJX1NFTEVDVF9Q SFkocGh5X2FkZHIpIHwgTUFDX01JSV9XUklURTsNCiANCiAJKm1paV9kYXRhX3JlZyA9IHZhbHVl Ow0KIAkqbWlpX2NvbnRyb2xfcmVnID0gbWlpX2NvbnRyb2w7DQogfQ0KIA0KLQ0KLXN0YXRpYyB2 b2lkIGR1bXBfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQpDQorc3RhdGlj IGludCBtZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQg cmVnbnVtKQ0KIHsNCi0JaW50IGksIHZhbDsNCisJc3RydWN0IG5ldF9kZXZpY2UgKmNvbnN0IGRl diA9IGJ1cy0+cHJpdjsgLyogYmV3YXJlOiBidXMtPnBoeV9tYXBbcGh5X2FkZHJdLmF0dGFjaGVk X2RldiA9PSBkZXYgZG9lcyBfTk9UXyBob2xkIGFsd2F5cyAgKi8NCisJZW5hYmxlX21hYyhkZXYs IDApOyAvKiBtYWtlIHN1cmUgTUFDIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1paV9idXMgaXMgZW5h YmxlZCAqLw0KKwlyZXR1cm4gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIHJlZ251bSk7DQorfQ0K IA0KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7DQotCQlpZiAoKHZhbCA9IG1kaW9fcmVhZChk ZXYsIHBoeV9pZCwgaSkpID49IDApDQotCQkJcHJpbnRrKCIlczogTUlJIFJlZyAlZD0leFxuIiwg ZGV2LT5uYW1lLCBpLCB2YWwpOw0KLQl9DQotCWZvciAoaSA9IDE2OyBpIDwgMjU7IGkrKykgew0K LQkJaWYgKCh2YWwgPSBtZGlvX3JlYWQoZGV2LCBwaHlfaWQsIGkpKSA+PSAwKQ0KLQkJCXByaW50 aygiJXM6IE1JSSBSZWcgJWQ9JXhcbiIsIGRldi0+bmFtZSwgaSwgdmFsKTsNCi0JfQ0KK3N0YXRp YyBpbnQgbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGlu dCByZWdudW0sIHUxNiB2YWx1ZSkNCit7DQorCXN0cnVjdCBuZXRfZGV2aWNlICpjb25zdCBkZXYg PSBidXMtPnByaXY7IC8qIGJld2FyZTogYnVzLT5waHlfbWFwW3BoeV9hZGRyXS5hdHRhY2hlZF9k ZXYgPT0gZGV2IGRvZXMgX05PVF8gaG9sZCBhbHdheXMgICovDQorCWVuYWJsZV9tYWMoZGV2LCAw KTsgLyogbWFrZSBzdXJlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtaWlfYnVzIGlzIGVuYWJs ZWQgKi8NCisJbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCByZWdudW0sIHZhbHVlKTsNCisJcmV0 dXJuIDA7DQogfQ0KIA0KLXN0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAq IGRldikNCitzdGF0aWMgaW50IG1kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykNCiB7 DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAq KSBkZXYtPnByaXY7DQotCWludCBwaHlfYWRkcjsNCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9S VVMNCi0JaW50IHBoeV9mb3VuZD0wOw0KLSNlbmRpZg0KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 ID0gYnVzLT5wcml2Ow0KIA0KLQkvKiBzZWFyY2ggZm9yIHRvdGFsIG9mIDMyIHBvc3NpYmxlIG1p aSBwaHkgYWRkcmVzc2VzICovDQotCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IDMyOyBw aHlfYWRkcisrKSB7DQotCQl1MTYgbWlpX3N0YXR1czsNCi0JCXUxNiBwaHlfaWQwLCBwaHlfaWQx Ow0KLQkJaW50IGk7DQorCWVuYWJsZV9tYWMoZGV2LCAwKTsgLyogbWFrZSBzdXJlIE1BQyBhc3Nv Y2lhdGVkIHdpdGggdGhpcyBtaWlfYnVzIGlzIGVuYWJsZWQgKi8NCiANCi0JCSNpZmRlZiBDT05G SUdfQkNNNTIyMl9EVUFMX1BIWQ0KLQkJLyogTWFzayB0aGUgYWxyZWFkeSBmb3VuZCBwaHksIHRy eSBuZXh0IG9uZSAqLw0KLQkJaWYgKGF1X21hY3NbMF0tPm1paSAmJiBhdV9tYWNzWzBdLT5taWkt Pm1paV9jb250cm9sX3JlZykgew0KLQkJCWlmIChhdV9tYWNzWzBdLT5waHlfYWRkciA9PSBwaHlf YWRkcikNCi0JCQkJY29udGludWU7DQotCQl9DQotCQkjZW5kaWYNCisJcmV0dXJuIDA7DQorfQ0K IA0KLQkJbWlpX3N0YXR1cyA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfU1RBVFVTKTsN Ci0JCWlmIChtaWlfc3RhdHVzID09IDB4ZmZmZiB8fCBtaWlfc3RhdHVzID09IDB4MDAwMCkNCi0J CQkvKiB0aGUgbWlpIGlzIG5vdCBhY2Nlc3NhYmxlLCB0cnkgbmV4dCBvbmUgKi8NCi0JCQljb250 aW51ZTsNCi0NCi0JCXBoeV9pZDAgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX1BIWV9J RDApOw0KLQkJcGh5X2lkMSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMSk7 DQotDQotCQkvKiBzZWFyY2ggb3VyIG1paSB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgbWlpICovIA0K LQkJZm9yIChpID0gMDsgbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMTsgaSsrKSB7DQotCQkJaWYg KHBoeV9pZDAgPT0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMCAmJg0KLQkJCSAgICBwaHlfaWQx ID09IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9pZDEpIHsNCi0JCQkJc3RydWN0IG1paV9waHkgKiBt aWlfcGh5ID0gYXVwLT5taWk7DQotDQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCBw aHkgYWRkcmVzcyAlZFxuIiwNCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWlpX2NoaXBfdGFibGVb aV0ubmFtZSwgDQotCQkJCSAgICAgICBwaHlfYWRkcik7DQotI2lmZGVmIENPTkZJR19NSVBTX0JP U1BPUlVTDQotCQkJCXBoeV9mb3VuZCA9IDE7DQotI2VuZGlmDQotCQkJCW1paV9waHktPmNoaXBf aW5mbyA9IG1paV9jaGlwX3RhYmxlK2k7DQotCQkJCWF1cC0+cGh5X2FkZHIgPSBwaHlfYWRkcjsN Ci0JCQkJYXVwLT53YW50X2F1dG9uZWcgPSAxOw0KLQkJCQlhdXAtPnBoeV9vcHMgPSBtaWlfY2hp cF90YWJsZVtpXS5waHlfb3BzOw0KLQkJCQlhdXAtPnBoeV9vcHMtPnBoeV9pbml0KGRldixwaHlf YWRkcik7DQotDQotCQkJCS8vIENoZWNrIGZvciBkdWFsLXBoeSBhbmQgdGhlbiBzdG9yZSByZXF1 aXJlZCANCi0JCQkJLy8gdmFsdWVzIGFuZCBzZXQgaW5kaWNhdG9ycy4gV2UgbmVlZCB0byBkbyAN Ci0JCQkJLy8gdGhpcyBub3cgc2luY2UgbWRpb197cmVhZCx3cml0ZX0gbmVlZCB0aGUgDQotCQkJ CS8vIGNvbnRyb2wgYW5kIGRhdGEgcmVnaXN0ZXIgYWRkcmVzc2VzLg0KLQkJCQkjaWZkZWYgQ09O RklHX0JDTTUyMjJfRFVBTF9QSFkNCi0JCQkJaWYgKCBtaWlfY2hpcF90YWJsZVtpXS5kdWFsX3Bo eSkgew0KLQ0KLQkJCQkJLyogYXNzdW1lIGJvdGggcGh5cyBhcmUgY29udHJvbGxlZCANCi0JCQkJ CSAqIHRocm91Z2ggTUFDMC4gQm9hcmQgc3BlY2lmaWM/ICovDQotCQkJCQkNCi0JCQkJCS8qIHNh bml0eSBjaGVjayAqLw0KLQkJCQkJaWYgKCFhdV9tYWNzWzBdIHx8ICFhdV9tYWNzWzBdLT5taWkp DQotCQkJCQkJcmV0dXJuIC0xOw0KLQkJCQkJYXVwLT5taWktPm1paV9jb250cm9sX3JlZyA9ICh1 MzIgKikNCi0JCQkJCQkmYXVfbWFjc1swXS0+bWFjLT5taWlfY29udHJvbDsNCi0JCQkJCWF1cC0+ bWlpLT5taWlfZGF0YV9yZWcgPSAodTMyICopDQotCQkJCQkJJmF1X21hY3NbMF0tPm1hYy0+bWlp X2RhdGE7DQotCQkJCX0NCi0JCQkJI2VuZGlmDQotCQkJCWdvdG8gZm91bmQ7DQotCQkJfQ0KLQkJ fQ0KK3N0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KK3sNCisJ c3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRl ICopIGRldi0+cHJpdjsNCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7DQorCQ0K KyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0FVMVgwMF9FTkVUX1NUQVRJQ19QSFlfQ09ORklHKQ0K KwlCVUdfT04oYXVwLT5tYWNfaWQgPCAwIHx8IGF1cC0+bWFjX2lkID4gMSk7DQorDQorCWlmKGF1 cC0+bWFjX2lkID09IDApIHsNCisjIGlmIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUX0VUSDBfUEhZ X0FERFI9PS0xDQorCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFkt bGVzcyBjb25maWdcbiIsIGRldi0+bmFtZSk7DQorCQlyZXR1cm4gMDsNCisjIGVsaWYgKENPTkZJ R19NSVBTX0FVMVgwMF9FTkVUX0VUSDBfUEhZX0FERFI+PTApICYmIChDT05GSUdfTUlQU19BVTFY MDBfRU5FVF9FVEgwX1BIWV9BRERSPFBIWV9NQVhfQUREUikNCisJCXBoeWRldiA9IGF1cC0+bWlp X2J1cy5waHlfbWFwW0NPTkZJR19NSVBTX0FVMVgwMF9FTkVUX0VUSDBfUEhZX0FERFJdOw0KKyMg ZWxzZQ0KKyMgIGVycm9yIEJhZCB2YWx1ZSBmb3IgQ09ORklHX01JUFNfQVUxWDAwX0VORVRfRVRI MF9QSFlfQUREUiBnaXZlbg0KKyMgZW5kaWYNCisJfSBlbHNlIGlmIChhdXAtPm1hY19pZCA9PSAx KSB7DQorIyBpZiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVF9FVEgxX1BIWV9BRERSPT0tMQ0KKwkJ cHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3MgY29uZmlnXG4i LCBkZXYtPm5hbWUpOw0KKwkJcmV0dXJuIDA7DQorIyBlbGlmIChDT05GSUdfTUlQU19BVTFYMDBf RU5FVF9FVEgxX1BIWV9BRERSPj0wKSAmJiAoQ09ORklHX01JUFNfQVUxWDAwX0VORVRfRVRIMV9Q SFlfQUREUjxQSFlfTUFYX0FERFIpDQorIyAgaWYgZGVmaW5lZChDT05GSUdfTUlQU19BVTFYMDBf RU5FVF9FVEgxX1BIWV9PTl9NQUMwKQ0KKyMgICBpZiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVF9F VEgxX1BIWV9BRERSPT1DT05GSUdfTUlQU19BVTFYMDBfRU5FVF9FVEgwX1BIWV9BRERSDQorIyAg ICBlcnJvciBnaXZlbiBzYW1lIHN0YXRpYyBQSFkgYWRkcmVzcywgYW5kIGJvdGggUEhZcyBhcmUg b24gdGhlIHNhbWUgYnVzDQorIyAgIGVuZGlmDQorCQlwaHlkZXYgPSBhdV9tYWNzWzBdLT5taWlf YnVzLnBoeV9tYXBbQ09ORklHX01JUFNfQVUxWDAwX0VORVRfRVRIMV9QSFlfQUREUl07DQorIyAg ZWxzZQ0KKwkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLnBoeV9tYXBbQ09ORklHX01JUFNfQVUxWDAw X0VORVRfRVRIMV9QSFlfQUREUl07DQorIyAgZW5kaWYNCisjIGVsc2UNCisjICBlcnJvciBCYWQg dmFsdWUgZm9yIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUX0VUSDBfUEhZX0FERFIgZ2l2ZW4NCisj IGVuZGlmDQogCX0NCi1mb3VuZDoNCiANCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMNCi0J LyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0 Y2gNCi0JICAgVGhlIHNlY29uZCBNQUMgZG9lc24ndCBzZWUgYSBQSFkgY29ubmVjdGVkLi4uIHNv IHdlIG5lZWQgdG8NCi0JICAgdHJpY2sgaXQgaW50byB0aGlua2luZyB3ZSBoYXZlIG9uZS4NCi0J CQ0KLQkgICBJZiB0aGlzIGtlcm5lbCBpcyBydW4gb24gYW5vdGhlciBBdTE1MDAgZGV2ZWxvcG1l bnQgYm9hcmQNCi0JICAgdGhlIHN0dWIgd2lsbCBiZSBmb3VuZCBhcyB3ZWxsIGFzIHRoZSBhY3R1 YWwgUEhZLiBIb3dldmVyLA0KLQkgICB0aGUgbGFzdCBmb3VuZCBQSFkgd2lsbCBiZSB1c2VkLi4u IHVzdWFsbHkgYXQgQWRkciAzMSAoRGIxNTAwKS4JDQotCSovDQotCWlmICggKCFwaHlfZm91bmQp ICkNCi0Jew0KLQkJdTE2IHBoeV9pZDAsIHBoeV9pZDE7DQotCQlpbnQgaTsNCisjZWxzZSAvKiBy dW50aW1lIGRldGVjdGVkIFBIWSBjb25maWd1cmF0aW9uICovDQorCWludCBwaHlfYWRkcjsNCiAN Ci0JCXBoeV9pZDAgPSAweDEyMzQ7DQotCQlwaHlfaWQxID0gMHg1Njc4Ow0KKwkvKiBmaW5kIHRo ZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIFBIWSBvbiB0aGUgY3VycmVudCBNQUMncyBNSUkgYnVz ICovDQorCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2Fk ZHIrKykgDQorCQlpZiAoYXVwLT5taWlfYnVzLnBoeV9tYXBbcGh5X2FkZHJdKSB7DQorCQkJcGh5 ZGV2ID0gYXVwLT5taWlfYnVzLnBoeV9tYXBbcGh5X2FkZHJdOw0KKwkJCWJyZWFrOyAvKiBmb3Vu ZCBpdCAqLw0KKwkJfQ0KKw0KKwkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8NCisJaWYg KCFwaHlkZXYgJiYgKGF1cC0+bWFjX2lkID09IDEpKSB7IC8qIG5vIFBIWSBmb3VuZCwgbWF5YmUg d2UgaGF2ZSBhIGR1YWwgUEhZPyAqLyANCisJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6 IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCBsZXQncyBzZWUgaWYgaXQncyBhdHRhY2hlZCB0byBNQUMw Li4uXG4iKTsNCisNCisJCUJVR19PTighYXVfbWFjc1swXSB8fCAhYXVfbWFjc1swXS0+bWlpX2J1 cyk7DQorDQorCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hl ZCBQSFkgb24gdGhlIE1BQzAgTUlJIGJ1cyAqLw0KKwkJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9h ZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7DQorCQkJc3RydWN0IHBoeV9kZXZpY2Ug KmNvbnN0IHRtcF9waHlkZXYgPSBhdXAtPmF1X21hY3NbMF0tPm1paV9idXMucGh5X21hcFtwaHlf YWRkcl07DQorCQkJDQorCQkJaWYgKCF0bXBfcGh5ZGV2KQ0KKwkJCQljb250aW51ZTsgLyogbm8g UEhZIGhlcmUuLi4gKi8NCisJCQkNCisJCQlpZiAodG1wX3BoeWRldi0+YXR0YWNoZWRfZGV2KQ0K KwkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8NCiANCi0JCS8qIHNl YXJjaCBvdXIgbWlpIHRhYmxlIGZvciB0aGUgY3VycmVudCBtaWkgKi8gDQotCQlmb3IgKGkgPSAw OyBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQxOyBpKyspIHsNCi0JCQlpZiAocGh5X2lkMCA9PSBt aWlfY2hpcF90YWJsZVtpXS5waHlfaWQwICYmDQotCQkJICAgIHBoeV9pZDEgPT0gbWlpX2NoaXBf dGFibGVbaV0ucGh5X2lkMSkgew0KLQkJCQlzdHJ1Y3QgbWlpX3BoeSAqIG1paV9waHk7DQotDQot CQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCBwaHkgYWRkcmVzcyAlZFxuIiwNCi0JCQkJ ICAgICAgIGRldi0+bmFtZSwgbWlpX2NoaXBfdGFibGVbaV0ubmFtZSwgDQotCQkJCSAgICAgICBw aHlfYWRkcik7DQotCQkJCW1paV9waHkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX3BoeSks IA0KLQkJCQkJCUdGUF9LRVJORUwpOw0KLQkJCQlpZiAobWlpX3BoeSkgew0KLQkJCQkJbWlpX3Bo eS0+Y2hpcF9pbmZvID0gbWlpX2NoaXBfdGFibGUraTsNCi0JCQkJCWF1cC0+cGh5X2FkZHIgPSBw aHlfYWRkcjsNCi0JCQkJCW1paV9waHktPm5leHQgPSBhdXAtPm1paTsNCi0JCQkJCWF1cC0+cGh5 X29wcyA9IA0KLQkJCQkJCW1paV9jaGlwX3RhYmxlW2ldLnBoeV9vcHM7DQotCQkJCQlhdXAtPm1p aSA9IG1paV9waHk7DQotCQkJCQlhdXAtPnBoeV9vcHMtPnBoeV9pbml0KGRldixwaHlfYWRkcik7 DQotCQkJCX0gZWxzZSB7DQotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgbWVtb3J5 XG4iLCANCi0JCQkJCQkJZGV2LT5uYW1lKTsNCi0JCQkJCXJldHVybiAtMTsNCi0JCQkJfQ0KLQkJ CQltaWlfcGh5LT5jaGlwX2luZm8gPSBtaWlfY2hpcF90YWJsZStpOw0KLQkJCQlhdXAtPnBoeV9h ZGRyID0gcGh5X2FkZHI7DQotCQkJCWF1cC0+cGh5X29wcyA9IG1paV9jaGlwX3RhYmxlW2ldLnBo eV9vcHM7DQotCQkJCWF1cC0+cGh5X29wcy0+cGh5X2luaXQoZGV2LHBoeV9hZGRyKTsNCi0JCQkJ YnJlYWs7DQotCQkJfQ0KKwkJCXBoeWRldiA9IHRtcF9waHlkZXY7DQorCQkJYnJlYWs7IC8qIGZv dW5kIGl0ICovDQogCQl9DQogCX0NCi0JaWYgKGF1cC0+bWFjX2lkID09IDApIHsNCi0JCS8qIHRo ZSBCb3Nwb3J1cyBwaHkgcmVzcG9uZHMgdG8gYWRkcmVzc2VzIDAtNSBidXQgDQotCQkgKiA1IGlz IHRoZSBjb3JyZWN0IG9uZS4NCi0JCSAqLw0KLQkJYXVwLT5waHlfYWRkciA9IDU7DQotCX0NCi0j ZW5kaWYNCiANCi0JaWYgKGF1cC0+bWlpLT5jaGlwX2luZm8gPT0gTlVMTCkgew0KLQkJcHJpbnRr KEtFUk5fRVJSICIlczogQXUxeCBObyBrbm93biBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kIVxuIiwN Ci0JCQkJZGV2LT5uYW1lKTsNCisjZW5kaWYNCisJaWYgKCFwaHlkZXYpIHsNCisJCXByaW50ayAo S0VSTl9FUlIgRFJWX05BTUUgIjolczogbm8gUEhZIGZvdW5kXG4iLCBkZXYtPm5hbWUpOw0KIAkJ cmV0dXJuIC0xOw0KIAl9DQogDQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyAlcyBhcyBk ZWZhdWx0XG4iLCANCi0JCQlkZXYtPm5hbWUsIGF1cC0+bWlpLT5jaGlwX2luZm8tPm5hbWUpOw0K KwkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRh Y2ggdG8uLi4gKi8NCisJQlVHX09OKCFwaHlkZXYpOw0KKw0KKwlwaHlkZXYgPSBwaHlfY29ubmVj dChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmF1MTAwMF9hZGp1c3RfbGluaywgMCk7DQorCQkN CisJaWYgKElTX0VSUihwaHlkZXYpKSB7DQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBu b3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsNCisJCXJldHVybiBQVFJfRVJSKHBoeWRl dik7DQorCX0NCisJCQ0KKwkvLyBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcw0KKwlw aHlkZXYtPnN1cHBvcnRlZCAmPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiANCisJCQkgICAgICB8 IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgDQorCQkJICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRf SGFsZiANCisJCQkgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIA0KKwkJCSAgICAgIHwg U1VQUE9SVEVEX0F1dG9uZWcgDQorCQkJICAgICAgfCBTVVBQT1JURURfTUlJIA0KKwkJCSAgICAg IHwgU1VQUE9SVEVEX1RQKTsNCisJCQ0KKwlwaHlkZXYtPmFkdmVydGlzaW5nID0gcGh5ZGV2LT5z dXBwb3J0ZWQ7DQorDQorCWF1cC0+b2xkX2xpbmsgPSAwOw0KKwlhdXAtPm9sZF9zcGVlZCA9IDA7 DQorCWF1cC0+b2xkX2R1cGxleCA9IC0xOw0KKwlhdXAtPnBoeV9kZXYgPSBwaHlkZXY7DQorDQor CXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCAlcyAobWlpPSVzLCBpcnE9JWQpXG4iLCAN CisJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19p ZCwgcGh5ZGV2LT5pcnEpOw0KIA0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtMTA5Nyw2ICszNzEsMjQg QEAgc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlIA0KIAlhdV9zeW5jX2Rl bGF5KDEwKTsNCiB9DQogDQorc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlz dHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2 LT5wcml2Ow0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7DQorDQor CWlmKGZvcmNlX3Jlc2V0IHx8ICghYXVwLT5tYWNfZW5hYmxlZCkpIHsNCisJCSphdXAtPmVuYWJs ZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7DQorCQlhdV9zeW5jX2RlbGF5KDIpOw0KKwkJKmF1cC0+ ZW5hYmxlID0gTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyIHwg TUFDX0VOX0NMT0NLX0VOQUJMRTsNCisJCWF1X3N5bmNfZGVsYXkoMik7DQorDQorCQlhdXAtPm1h Y19lbmFibGVkID0gMTsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxv Y2ssIGZsYWdzKTsNCit9DQogDQogc3RhdGljIHZvaWQgcmVzZXRfbWFjKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpDQogew0KQEAgLTExMDksMjMgKzQwMSwxNSBAQCBzdGF0aWMgdm9pZCByZXNldF9t YWMoc3RydWN0IG5ldF9kZXZpY2UgDQogCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCk7DQog DQogCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsNCi0JaWYgKGF1cC0+dGlt ZXIuZnVuY3Rpb24gPT0gJmF1MTAwMF90aW1lcikgey8qIGNoZWNrIGlmIHRpbWVyIGluaXR0ZWQg Ki8NCi0JCWRlbF90aW1lcigmYXVwLT50aW1lcik7DQotCX0NCisJLy8gZml4bWUsIGxvY2sgbWlp YnVzDQogDQogCWhhcmRfc3RvcChkZXYpOw0KLQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9Q SFkNCi0JaWYgKGF1cC0+bWFjX2lkICE9IDApIHsNCi0JI2VuZGlmDQotCQkvKiBJZiBCQ001MjIy LCB3ZSBjYW4ndCBsZWF2ZSBNQUMwIGluIHJlc2V0IGJlY2F1c2UgdGhlbiANCi0JCSAqIHdlIGNh bid0IGFjY2VzcyB0aGUgZHVhbCBwaHkgZm9yIEVUSDEgKi8NCi0JCSphdXAtPmVuYWJsZSA9IE1B Q19FTl9DTE9DS19FTkFCTEU7DQotCQlhdV9zeW5jX2RlbGF5KDIpOw0KLQkJKmF1cC0+ZW5hYmxl ID0gMDsNCi0JCWF1X3N5bmNfZGVsYXkoMik7DQotCSNpZmRlZiBDT05GSUdfQkNNNTIyMl9EVUFM X1BIWQ0KLQl9DQotCSNlbmRpZg0KKw0KKwkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5B QkxFOw0KKwlhdV9zeW5jX2RlbGF5KDIpOw0KKwkqYXVwLT5lbmFibGUgPSAwOw0KKwlhdV9zeW5j X2RlbGF5KDIpOw0KKw0KIAlhdXAtPnR4X2Z1bGwgPSAwOw0KIAlmb3IgKGkgPSAwOyBpIDwgTlVN X1JYX0RNQTsgaSsrKSB7DQogCQkvKiByZXNldCBjb250cm9sIGJpdHMgKi8NCkBAIC0xMTM1LDYg KzQxOSw5IEBAIHN0YXRpYyB2b2lkIHJlc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSANCiAJCS8q IHJlc2V0IGNvbnRyb2wgYml0cyAqLw0KIAkJYXVwLT50eF9kbWFfcmluZ1tpXS0+YnVmZl9zdGF0 ICY9IH4weGY7DQogCX0NCisNCisJYXVwLT5tYWNfZW5hYmxlZCA9IDA7DQorDQogCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOw0KIH0NCiANCkBAIC0xMjM3LDE3OCAr NTI0LDI2IEBAIHN0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2kNCiAJcmV0 dXJuIDA7DQogfQ0KIA0KLXN0YXRpYyBpbnQgYXUxMDAwX3NldHVwX2FuZWcoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgdTMyIGFkdmVydGlzZSkNCi17DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAq YXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsNCi0JdTE2IGN0bCwgYWR2 Ow0KLQ0KLQkvKiBTZXR1cCBzdGFuZGFyZCBhZHZlcnRpc2UgKi8NCi0JYWR2ID0gbWRpb19yZWFk KGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSk7DQotCWFkdiAmPSB+KEFEVkVSVElT RV9BTEwgfCBBRFZFUlRJU0VfMTAwQkFTRTQpOw0KLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNF RF8xMGJhc2VUX0hhbGYpDQotCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsNCi0JaWYgKGFkdmVy dGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQ0KLQkJYWR2IHw9IEFEVkVSVElTRV8xMEZV TEw7DQotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpDQotCQlhZHYg fD0gQURWRVJUSVNFXzEwMEhBTEY7DQotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJh c2VUX0Z1bGwpDQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7DQotCW1kaW9fd3JpdGUoZGV2 LCBhdXAtPnBoeV9hZGRyLCBNSUlfQURWRVJUSVNFLCBhZHYpOw0KLQ0KLQkvKiBTdGFydC9SZXN0 YXJ0IGFuZWcgKi8NCi0JY3RsID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JN Q1IpOw0KLQljdGwgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7DQotCW1kaW9f d3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgY3RsKTsNCi0NCi0JcmV0dXJuIDA7 DQotfQ0KLQ0KLXN0YXRpYyBpbnQgYXUxMDAwX3NldHVwX2ZvcmNlZChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCBpbnQgc3BlZWQsIGludCBmZCkNCi17DQotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAq YXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsNCi0JdTE2IGN0bDsNCi0N Ci0JY3RsID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IpOw0KLQljdGwg Jj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IEJNQ1JfQU5FTkFCTEUpOw0KLQ0K LQkvKiBGaXJzdCByZXNldCB0aGUgUEhZICovDQotCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9h ZGRyLCBNSUlfQk1DUiwgY3RsIHwgQk1DUl9SRVNFVCk7DQotDQotCS8qIFNlbGVjdCBzcGVlZCAm IGR1cGxleCAqLw0KLQlzd2l0Y2ggKHNwZWVkKSB7DQotCQljYXNlIFNQRUVEXzEwOg0KLQkJCWJy ZWFrOw0KLQkJY2FzZSBTUEVFRF8xMDA6DQotCQkJY3RsIHw9IEJNQ1JfU1BFRUQxMDA7DQotCQkJ YnJlYWs7DQotCQljYXNlIFNQRUVEXzEwMDA6DQotCQlkZWZhdWx0Og0KLQkJCXJldHVybiAtRUlO VkFMOw0KLQl9DQotCWlmIChmZCA9PSBEVVBMRVhfRlVMTCkNCi0JCWN0bCB8PSBCTUNSX0ZVTExE UExYOw0KLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IsIGN0bCk7DQot DQotCXJldHVybiAwOw0KLX0NCi0NCi0NCi1zdGF0aWMgdm9pZA0KLWF1MTAwMF9zdGFydF9saW5r KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQ0KLXsNCi0J c3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2 LT5wcml2Ow0KLQl1MzIgYWR2ZXJ0aXNlOw0KLQlpbnQgYXV0b25lZzsNCi0JaW50IGZvcmNlZF9z cGVlZDsNCi0JaW50IGZvcmNlZF9kdXBsZXg7DQotDQotCS8qIERlZmF1bHQgYWR2ZXJ0aXNlICov DQotCWFkdmVydGlzZSA9IEdFTk1JSV9ERUZBVUxUX0FEVkVSVElTRTsNCi0JYXV0b25lZyA9IGF1 cC0+d2FudF9hdXRvbmVnOw0KLQlmb3JjZWRfc3BlZWQgPSBTUEVFRF8xMDA7DQotCWZvcmNlZF9k dXBsZXggPSBEVVBMRVhfRlVMTDsNCi0NCi0JLyogU2V0dXAgbGluayBwYXJhbWV0ZXJzICovDQot CWlmIChjbWQpIHsNCi0JCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsNCi0J CQlhZHZlcnRpc2UgPSBjbWQtPmFkdmVydGlzaW5nOw0KLQkJCWF1dG9uZWcgPSAxOw0KLQkJfSBl bHNlIHsNCi0JCQlhdXRvbmVnID0gMDsNCi0NCi0JCQlmb3JjZWRfc3BlZWQgPSBjbWQtPnNwZWVk Ow0KLQkJCWZvcmNlZF9kdXBsZXggPSBjbWQtPmR1cGxleDsNCi0JCX0NCi0JfQ0KLQ0KLQkvKiBD b25maWd1cmUgUEhZICYgc3RhcnQgYW5lZyAqLw0KLQlhdXAtPndhbnRfYXV0b25lZyA9IGF1dG9u ZWc7DQotCWlmIChhdXRvbmVnKQ0KLQkJYXUxMDAwX3NldHVwX2FuZWcoZGV2LCBhZHZlcnRpc2Up Ow0KLQllbHNlDQotCQlhdTEwMDBfc2V0dXBfZm9yY2VkKGRldiwgZm9yY2VkX3NwZWVkLCBmb3Jj ZWRfZHVwbGV4KTsNCi0JbW9kX3RpbWVyKCZhdXAtPnRpbWVyLCBqaWZmaWVzICsgSFopOw0KLX0N Ci0NCiBzdGF0aWMgaW50IGF1MTAwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRl diwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpDQogew0KIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUg KmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7DQotCXUxNiBsaW5rLCBz cGVlZDsNCiANCi0JY21kLT5zdXBwb3J0ZWQgPSBHRU5NSUlfREVGQVVMVF9GRUFUVVJFUzsNCi0J Y21kLT5hZHZlcnRpc2luZyA9IEdFTk1JSV9ERUZBVUxUX0FEVkVSVElTRTsNCi0JY21kLT5wb3J0 ID0gUE9SVF9NSUk7DQotCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOw0KLQljbWQt PnBoeV9hZGRyZXNzID0gYXVwLT5waHlfYWRkcjsNCi0Jc3Bpbl9sb2NrX2lycSgmYXVwLT5sb2Nr KTsNCi0JY21kLT5hdXRvbmVnID0gYXVwLT53YW50X2F1dG9uZWc7DQotCWF1cC0+cGh5X29wcy0+ cGh5X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZsaW5rLCAmc3BlZWQpOw0KLQlpZiAoKHNw ZWVkID09IElGX1BPUlRfMTAwQkFTRVRYKSB8fCAoc3BlZWQgPT0gSUZfUE9SVF8xMDBCQVNFRlgp KQ0KLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsNCi0JZWxzZSBpZiAoc3BlZWQgPT0gSUZfUE9S VF8xMEJBU0VUKQ0KLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOw0KLQlpZiAobGluayAmJiAoZGV2 LT5pZl9wb3J0ID09IElGX1BPUlRfMTAwQkFTRUZYKSkNCi0JCWNtZC0+ZHVwbGV4ID0gRFVQTEVY X0ZVTEw7DQotCWVsc2UNCi0JCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7DQotCXNwaW5fdW5s b2NrX2lycSgmYXVwLT5sb2NrKTsNCi0JcmV0dXJuIDA7DQotfQ0KKwlpZiAoIWF1cC0+cGh5X2Rl dikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlDQogDQotc3RhdGljIGlu dCBhdTEwMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0 b29sX2NtZCAqY21kKQ0KLXsNCi0JIHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVj dCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsNCi0JICB1bnNpZ25lZCBsb25nIGZlYXR1cmVz ID0gR0VOTUlJX0RFRkFVTFRfRkVBVFVSRVM7DQotDQotCSBpZiAoIWNhcGFibGUoQ0FQX05FVF9B RE1JTikpDQotCQkgcmV0dXJuIC1FUEVSTTsNCi0NCi0JIGlmIChjbWQtPmF1dG9uZWcgIT0gQVVU T05FR19FTkFCTEUgJiYgY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkNCi0JCSByZXR1 cm4gLUVJTlZBTDsNCi0JIGlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgY21k LT5hZHZlcnRpc2luZyA9PSAwKQ0KLQkJIHJldHVybiAtRUlOVkFMOw0KLQkgaWYgKGNtZC0+ZHVw bGV4ICE9IERVUExFWF9IQUxGICYmIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQ0KLQkJIHJl dHVybiAtRUlOVkFMOw0KLQkgaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpDQot CQkgc3dpdGNoIChjbWQtPnNwZWVkKSB7DQotCQkgY2FzZSBTUEVFRF8xMDoNCi0JCQkgaWYgKGNt ZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGICYmDQotCQkJCSAoZmVhdHVyZXMgJiBTVVBQT1JURURf MTBiYXNlVF9IYWxmKSA9PSAwKQ0KLQkJCQkgcmV0dXJuIC1FSU5WQUw7DQotCQkJIGlmIChjbWQt PmR1cGxleCA9PSBEVVBMRVhfRlVMTCAmJg0KLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEw YmFzZVRfRnVsbCkgPT0gMCkNCi0JCQkJIHJldHVybiAtRUlOVkFMOw0KLQkJCSBicmVhazsNCi0J CSBjYXNlIFNQRUVEXzEwMDoNCi0JCQkgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGICYm DQotCQkJCSAoZmVhdHVyZXMgJiBTVVBQT1JURURfMTAwYmFzZVRfSGFsZikgPT0gMCkNCi0JCQkJ IHJldHVybiAtRUlOVkFMOw0KLQkJCSBpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgJiYN Ci0JCQkJIChmZWF0dXJlcyAmIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsKSA9PSAwKQ0KLQkJCQkg cmV0dXJuIC1FSU5WQUw7DQotCQkJIGJyZWFrOw0KLQkJIGRlZmF1bHQ6DQotCQkJIHJldHVybiAt RUlOVkFMOw0KLQkJIH0NCi0JIGVsc2UgaWYgKChmZWF0dXJlcyAmIFNVUFBPUlRFRF9BdXRvbmVn KSA9PSAwKQ0KLQkJIHJldHVybiAtRUlOVkFMOw0KLQ0KLQkgc3Bpbl9sb2NrX2lycSgmYXVwLT5s b2NrKTsNCi0JIGF1MTAwMF9zdGFydF9saW5rKGRldiwgY21kKTsNCi0JIHNwaW5fdW5sb2NrX2ly cSgmYXVwLT5sb2NrKTsNCi0JIHJldHVybiAwOw0KKwlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChh dXAtPnBoeV9kZXYsIGNtZCk7DQogfQ0KIA0KLXN0YXRpYyBpbnQgYXUxMDAwX253YXlfcmVzZXQo c3RydWN0IG5ldF9kZXZpY2UgKmRldikNCitzdGF0aWMgaW50IGF1MTAwMF9zZXRfc2V0dGluZ3Mo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpDQogew0KIAlz dHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYt PnByaXY7DQotDQotCWlmICghYXVwLT53YW50X2F1dG9uZWcpDQotCQlyZXR1cm4gLUVJTlZBTDsN Ci0Jc3Bpbl9sb2NrX2lycSgmYXVwLT5sb2NrKTsNCi0JYXUxMDAwX3N0YXJ0X2xpbmsoZGV2LCBO VUxMKTsNCi0Jc3Bpbl91bmxvY2tfaXJxKCZhdXAtPmxvY2spOw0KLQlyZXR1cm4gMDsNCisJDQor CWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkNCisJCXJldHVybiAtRVBFUk07DQorCQ0KKwlp ZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxl DQorCQ0KKwkvL3NwaW5fbG9ja19pcnEoJmF1cC0+bG9jayk7IG5lZWQgdGhpcz8NCisJcmV0dXJu IHBoeV9ldGh0b29sX3NzZXQoYXVwLT5waHlfZGV2LCBjbWQpOw0KIH0NCiANCiBzdGF0aWMgdm9p ZA0KQEAgLTE0MjMsMTcgKzU1OCwxMSBAQCBhdTEwMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9k ZXZpY2UgKmRlDQogCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsNCiB9DQogDQotc3RhdGljIHUzMiBh dTEwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCXJldHVybiBuZXRp Zl9jYXJyaWVyX29rKGRldik7DQotfQ0KLQ0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXUx MDAwX2V0aHRvb2xfb3BzID0gew0KIAkuZ2V0X3NldHRpbmdzID0gYXUxMDAwX2dldF9zZXR0aW5n cywNCiAJLnNldF9zZXR0aW5ncyA9IGF1MTAwMF9zZXRfc2V0dGluZ3MsDQogCS5nZXRfZHJ2aW5m byA9IGF1MTAwMF9nZXRfZHJ2aW5mbywNCi0JLm53YXlfcmVzZXQgPSBhdTEwMDBfbndheV9yZXNl dCwNCi0JLmdldF9saW5rID0gYXUxMDAwX2dldF9saW5rDQorCS5nZXRfbGluayA9IGV0aHRvb2xf b3BfZ2V0X2xpbmssDQogfTsNCiANCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKg0KQEAgLTE1 MjcsMjQgKzY1NiwyMiBAQCBhdTEwMDBfcHJvYmUodTMyIGlvYWRkciwgaW50IGlycSwgaW50IHBv DQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgaW9hZGRyXG4iLCBkZXYtPm5hbWUpOw0KIAl9 DQogDQotCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0LCBvdGhlcndpc2UgcHJvYmlu ZyB0aGUgbWlpDQotCSAqIHdpbGwgaGFuZyAqLw0KLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xP Q0tfRU5BQkxFOw0KLQlhdV9zeW5jX2RlbGF5KDIpOw0KLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5f UkVTRVQwIHwgTUFDX0VOX1JFU0VUMSB8IA0KLQkJTUFDX0VOX1JFU0VUMiB8IE1BQ19FTl9DTE9D S19FTkFCTEU7DQotCWF1X3N5bmNfZGVsYXkoMik7DQorCSphdXAtPmVuYWJsZSA9IDA7DQorCWF1 cC0+bWFjX2VuYWJsZWQgPSAwOw0KIA0KLQlhdXAtPm1paSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVj dCBtaWlfcGh5KSwgR0ZQX0tFUk5FTCk7DQotCWlmICghYXVwLT5taWkpIHsNCi0JCXByaW50ayhL RVJOX0VSUiAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIGRldi0+bmFtZSk7DQotCQlnb3RvIGVycl9v dXQ7DQorCWF1cC0+bWlpX2J1cy5wcml2ID0gZGV2Ow0KKwlhdXAtPm1paV9idXMucmVhZCA9IG1k aW9idXNfcmVhZDsNCisJYXVwLT5taWlfYnVzLndyaXRlID0gbWRpb2J1c193cml0ZTsNCisJYXVw LT5taWlfYnVzLnJlc2V0ID0gbWRpb2J1c19yZXNldDsNCisJYXVwLT5taWlfYnVzLm5hbWUgPSAi YXUxMDAwX2V0aF9taWkiOw0KKwlhdXAtPm1paV9idXMuaWQgPSBhdXAtPm1hY19pZDsNCisJYXVw LT5taWlfYnVzLmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkqUEhZX01BWF9BRERSLCBHRlBfS0VS TkVMKTsNCisJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpIHsNCisJCWF1cC0+bWlp X2J1cy5waHlfbWFwW2ldID0gTlVMTDsgLyogcGFyYW5vaWEgKi8NCisJCWF1cC0+bWlpX2J1cy5p cnFbaV0gPSBQSFlfUE9MTDsNCiAJfQ0KLQlhdXAtPm1paS0+bmV4dCA9IE5VTEw7DQotCWF1cC0+ bWlpLT5jaGlwX2luZm8gPSBOVUxMOw0KLQlhdXAtPm1paS0+c3RhdHVzID0gMDsNCi0JYXVwLT5t aWktPm1paV9jb250cm9sX3JlZyA9IDA7DQotCWF1cC0+bWlpLT5taWlfZGF0YV9yZWcgPSAwOw0K Kw0KKwltZGlvYnVzX3JlZ2lzdGVyKCZhdXAtPm1paV9idXMpOw0KIA0KIAlpZiAobWlpX3Byb2Jl KGRldikgIT0gMCkgew0KIAkJZ290byBlcnJfb3V0Ow0KQEAgLTE1OTAsNyArNzE3LDYgQEAgYXUx MDAwX3Byb2JlKHUzMiBpb2FkZHIsIGludCBpcnEsIGludCBwbw0KIAlkZXYtPnNldF9tdWx0aWNh c3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsNCiAJZGV2LT5kb19pb2N0bCA9ICZhdTEwMDBfaW9jdGw7 DQogCVNFVF9FVEhUT09MX09QUyhkZXYsICZhdTEwMDBfZXRodG9vbF9vcHMpOw0KLQlkZXYtPnNl dF9jb25maWcgPSAmYXUxMDAwX3NldF9jb25maWc7DQogCWRldi0+dHhfdGltZW91dCA9IGF1MTAw MF90eF90aW1lb3V0Ow0KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIX1RYX1RJTUVPVVQ7DQog DQpAQCAtMTYwNiw3ICs3MzIsNyBAQCBlcnJfb3V0Og0KIAkvKiBoZXJlIHdlIHNob3VsZCBoYXZl IGEgdmFsaWQgZGV2IHBsdXMgYXVwLT4gcmVnaXN0ZXIgYWRkcmVzc2VzDQogCSAqIHNvIHdlIGNh biByZXNldCB0aGUgbWFjIHByb3Blcmx5LiovDQogCXJlc2V0X21hYyhkZXYpOw0KLQlrZnJlZShh dXAtPm1paSk7DQorDQogCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsNCiAJCWlm IChhdXAtPnJ4X2RiX2ludXNlW2ldKQ0KIAkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51 c2VbaV0pOw0KQEAgLTE2NDAsMTkgKzc2NiwxNCBAQCBzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0 cnVjdCBuZXRfZGV2aWNlDQogCXUzMiBmbGFnczsNCiAJaW50IGk7DQogCXUzMiBjb250cm9sOw0K LQl1MTYgbGluaywgc3BlZWQ7DQogDQogCWlmIChhdTEwMDBfZGVidWcgPiA0KSANCiAJCXByaW50 aygiJXM6IGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOw0KIA0KLQlzcGluX2xvY2tfaXJxc2F2 ZSgmYXVwLT5sb2NrLCBmbGFncyk7DQotDQogCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJl c2V0ICovDQotCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7DQotICAgICAgICBh dV9zeW5jX2RlbGF5KDIpOw0KLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fUkVTRVQwIHwgTUFDX0VO X1JFU0VUMSB8IA0KLQkJTUFDX0VOX1JFU0VUMiB8IE1BQ19FTl9DTE9DS19FTkFCTEU7DQotCWF1 X3N5bmNfZGVsYXkoMjApOw0KKwllbmFibGVfbWFjKGRldiwgMSk7DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsNCiANCiAJYXVwLT5tYWMtPmNvbnRyb2wgPSAwOw0K IAlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+ PiAyOw0KQEAgLTE2NjgsMTMgKzc4OSwxNSBAQCBzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVj dCBuZXRfZGV2aWNlDQogCX0NCiAJYXVfc3luYygpOw0KIA0KLQlhdXAtPnBoeV9vcHMtPnBoeV9z dGF0dXMoZGV2LCBhdXAtPnBoeV9hZGRyLCAmbGluaywgJnNwZWVkKTsNCi0JY29udHJvbCA9IE1B Q19ESVNBQkxFX1JYX09XTiB8IE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOw0KKwljb250 cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7IC8qIGZpeG1lOiBzZXQgTUFDX0RJ U0FCTEVfT1dOX1JYIHdoZW4gbmVjZXNzYXJ5ICg9PSAhRFVQTEVYICYmICJub3JtYWwgb3BlcmF0 aW9uIikgKi8NCiAjaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTg0KIAljb250cm9sIHw9 IE1BQ19CSUdfRU5ESUFOOw0KICNlbmRpZg0KLQlpZiAobGluayAmJiAoZGV2LT5pZl9wb3J0ID09 IElGX1BPUlRfMTAwQkFTRUZYKSkgew0KLQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7DQor CWlmIChhdXAtPnBoeV9kZXYpIHsNCisJCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgYXVwLT5w aHlfZGV2LT5kdXBsZXgpIA0KKwkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOyANCisJfSBl bHNlIHsgLyogUEhZLWxlc3Mgb3AsIGFzc3VtZSBmdWxsLWR1cGxleCAqLw0KKwkJY29udHJvbCB8 PSBNQUNfRlVMTF9EVVBMRVg7IA0KIAl9DQogDQogCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJv bDsNCkBAIC0xNjg1LDU3ICs4MDgsNzUgQEAgc3RhdGljIGludCBhdTEwMDBfaW5pdChzdHJ1Y3Qg bmV0X2RldmljZQ0KIAlyZXR1cm4gMDsNCiB9DQogDQotc3RhdGljIHZvaWQgYXUxMDAwX3RpbWVy KHVuc2lnbmVkIGxvbmcgZGF0YSkNCitzdGF0aWMgdm9pZA0KK2F1MTAwMF9hZGp1c3RfbGluayhz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KIHsNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChz dHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7DQogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0g KHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7DQotCXVuc2lnbmVkIGNoYXIgaWZf cG9ydDsNCi0JdTE2IGxpbmssIHNwZWVkOw0KKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0g YXVwLT5waHlfZGV2Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KLQlpZiAoIWRldikgew0K LQkJLyogZmF0YWwgZXJyb3IsIGRvbid0IHJlc3RhcnQgdGhlIHRpbWVyICovDQotCQlwcmludGso S0VSTl9FUlIgImF1MTAwMF90aW1lciBlcnJvcjogTlVMTCBkZXZcbiIpOw0KLQkJcmV0dXJuOw0K LQl9DQorCWludCBzdGF0dXNfY2hhbmdlID0gMDsNCiANCi0JaWZfcG9ydCA9IGRldi0+aWZfcG9y dDsNCi0JaWYgKGF1cC0+cGh5X29wcy0+cGh5X3N0YXR1cyhkZXYsIGF1cC0+cGh5X2FkZHIsICZs aW5rLCAmc3BlZWQpID09IDApIHsNCi0JCWlmIChsaW5rKSB7DQotCQkJaWYgKCFuZXRpZl9jYXJy aWVyX29rKGRldikpIHsNCi0JCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOw0KLQkJCQlwcmludGso S0VSTl9JTkZPICIlczogbGluayB1cFxuIiwgZGV2LT5uYW1lKTsNCi0JCQl9DQotCQl9DQotCQll bHNlIHsNCi0JCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7DQotCQkJCW5ldGlmX2NhcnJp ZXJfb2ZmKGRldik7DQotCQkJCWRldi0+aWZfcG9ydCA9IDA7DQotCQkJCXByaW50ayhLRVJOX0lO Rk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7DQotCQkJfQ0KKwlCVUdfT04oIWF1cC0+ cGh5X2Rldik7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsNCisN CisJaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfc3BlZWQgIT0gcGh5ZGV2LT5zcGVlZCkp IHsNCisJCS8vIHNwZWVkIGNoYW5nZWQgDQorDQorCQlzd2l0Y2gocGh5ZGV2LT5zcGVlZCkgew0K KwkJY2FzZSAxMDoNCisJCWNhc2UgMTAwOg0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlw cmludGsoS0VSTl9XQVJOSU5HDQorCQkJICAgICAgICIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAv MTAwLzEwMDAgPz9cbiIsDQorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCk7DQor CQkJYnJlYWs7DQogCQl9DQorDQorCQlhdXAtPm9sZF9zcGVlZCA9IHBoeWRldi0+c3BlZWQ7DQor DQorCQlzdGF0dXNfY2hhbmdlID0gMTsNCiAJfQ0KIA0KLQlpZiAobGluayAmJiAoZGV2LT5pZl9w b3J0ICE9IGlmX3BvcnQpICYmIA0KLQkJCShkZXYtPmlmX3BvcnQgIT0gSUZfUE9SVF9VTktOT1dO KSkgew0KKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9kdXBsZXggIT0gcGh5ZGV2LT5k dXBsZXgpKSB7DQorCQkvLyBkdXBsZXggbW9kZSBjaGFuZ2VkDQorCQkNCisJCS8qIHN3aXRjaGlu ZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8NCiAJCWhhcmRf c3RvcChkZXYpOw0KLQkJaWYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkgew0K LQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBnb2luZyB0byBmdWxsIGR1cGxleFxuIiwgDQotCQkJ CQlkZXYtPm5hbWUpOw0KKw0KKwkJaWYgKHBoeWRldi0+ZHVwbGV4KQ0KIAkJCWF1cC0+bWFjLT5j b250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsNCi0JCQlhdV9zeW5jX2RlbGF5KDEpOw0KLQkJfQ0K LQkJZWxzZSB7DQorCQllbHNlDQogCQkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19GVUxMX0RV UExFWDsNCi0JCQlhdV9zeW5jX2RlbGF5KDEpOw0KLQkJfQ0KKwkJYXVfc3luY19kZWxheSgxKTsN CisNCiAJCWVuYWJsZV9yeF90eChkZXYpOw0KKwkJYXVwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5k dXBsZXg7DQorDQorCQlzdGF0dXNfY2hhbmdlID0gMTsNCisJfQ0KKw0KKwlpZihwaHlkZXYtPmxp bmsgIT0gYXVwLT5vbGRfbGluaykgew0KKwkJLy8gbGluayBzdGF0ZSBjaGFuZ2VkDQorDQorCQlp ZiAocGh5ZGV2LT5saW5rKSB7IC8vIGxpbmsgd2VudCB1cA0KKwkJCW5ldGlmX3NjaGVkdWxlKGRl dik7DQorCQl9IGVsc2UgeyAvLyBsaW5rIHdlbnQgZG93bg0KKwkJCWF1cC0+b2xkX3NwZWVkID0g MDsNCisJCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsNCisJCX0NCisNCisJCWF1cC0+b2xkX2xpbmsg PSBwaHlkZXYtPmxpbms7DQorCQlzdGF0dXNfY2hhbmdlID0gMTsNCiAJfQ0KIA0KLQlhdXAtPnRp bWVyLmV4cGlyZXMgPSBSVU5fQVQoKDEqSFopKTsgDQotCWF1cC0+dGltZXIuZGF0YSA9ICh1bnNp Z25lZCBsb25nKWRldjsNCi0JYXVwLT50aW1lci5mdW5jdGlvbiA9ICZhdTEwMDBfdGltZXI7IC8q IHRpbWVyIGhhbmRsZXIgKi8NCi0JYWRkX3RpbWVyKCZhdXAtPnRpbWVyKTsNCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7DQogDQorCWlmIChzdGF0dXNfY2hhbmdl KSB7DQorCQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7DQorCX0NCiB9DQogDQogc3RhdGljIGlu dCBhdTEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KQEAgLTE3NDYsMTMgKzg4Nyw2 IEBAIHN0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UNCiAJaWYgKGF1MTAw MF9kZWJ1ZyA+IDQpDQogCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwg ZGV2KTsNCiANCi0JaWYgKChyZXR2YWwgPSBhdTEwMDBfaW5pdChkZXYpKSkgew0KLQkJcHJpbnRr KEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7DQotCQlm cmVlX2lycShkZXYtPmlycSwgZGV2KTsNCi0JCXJldHVybiByZXR2YWw7DQotCX0NCi0JbmV0aWZf c3RhcnRfcXVldWUoZGV2KTsNCi0NCiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmly cSwgJmF1MTAwMF9pbnRlcnJ1cHQsIDAsIA0KIAkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgew0KIAkJ cHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBJUlEgJWRcbiIsIA0KQEAgLTE3NjAs MTEgKzg5NCwxNiBAQCBzdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlDQog CQlyZXR1cm4gcmV0dmFsOw0KIAl9DQogDQotCWluaXRfdGltZXIoJmF1cC0+dGltZXIpOyAvKiB1 c2VkIGluIGlvY3RsKCkgKi8NCi0JYXVwLT50aW1lci5leHBpcmVzID0gUlVOX0FUKCgzKkhaKSk7 IA0KLQlhdXAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7DQotCWF1cC0+dGltZXIu ZnVuY3Rpb24gPSAmYXUxMDAwX3RpbWVyOyAvKiB0aW1lciBoYW5kbGVyICovDQotCWFkZF90aW1l cigmYXVwLT50aW1lcik7DQorCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsNCisJ CXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUp Ow0KKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7DQorCQlyZXR1cm4gcmV0dmFsOw0KKwl9DQor DQorCWlmIChhdXAtPnBoeV9kZXYpDQorCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsNCisNCisJ bmV0aWZfc3RhcnRfcXVldWUoZGV2KTsNCiANCiAJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpDQogCQlw cmludGsoIiVzOiBvcGVuOiBJbml0aWFsaXphdGlvbiBkb25lLlxuIiwgZGV2LT5uYW1lKTsNCkBA IC0xNzg3LDYgKzkyNiw5IEBAIHN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2 aWMNCiAJLyogc3RvcCB0aGUgZGV2aWNlICovDQogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsNCiAN CisJaWYgKGF1cC0+cGh5X2RldikNCisJCXBoeV9zdG9wKGF1cC0+cGh5X2Rldik7DQorDQogCS8q IGRpc2FibGUgdGhlIGludGVycnVwdCAqLw0KIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsNCiAJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7DQpAQCAtMTgwNSw3ICs5 NDcsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgYXUxMDAwX2NsZWFudXBfbW9kdWxlDQogCQlpZiAo ZGV2KSB7DQogCQkJYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7DQog CQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsNCi0JCQlrZnJlZShhdXAtPm1paSk7DQorDQogCQkJ Zm9yIChqID0gMDsgaiA8IE5VTV9SWF9ETUE7IGorKykgew0KIAkJCQlpZiAoYXVwLT5yeF9kYl9p bnVzZVtqXSkNCiAJCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2Vbal0pOw0KQEAg LTE4MzAsNyArOTcyLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBuZXRf ZA0KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmYXVwLT5zdGF0czsNCiANCiAJaWYg KHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsNCi0JCWlmIChkZXYtPmlmX3BvcnQgPT0gSUZf UE9SVF8xMDBCQVNFRlgpIHsNCisJCWlmICghYXVwLT5waHlfZGV2IHx8IGF1cC0+cGh5X2Rldi0+ ZHVwbGV4KSB7DQogCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVO KSkgew0KIAkJCQkvKiBhbnkgb3RoZXIgdHggZXJyb3JzIGFyZSBvbmx5IHZhbGlkDQogCQkJCSAq IGluIGhhbGYgZHVwbGV4IG1vZGUgKi8NCkBAIC0yMTA0LDEyNiArMTI0NiwxNSBAQCBzdGF0aWMg dm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljDQogCX0NCiB9DQogDQotDQogc3RhdGlj IGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpy cSwgaW50IGNtZCkNCiB7DQogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBh dTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsNCi0JdTE2ICpkYXRhID0gKHUxNiAqKSZycS0+aWZy X2lmcnU7DQogDQotCXN3aXRjaChjbWQpIHsgDQotCQljYXNlIFNJT0NERVZQUklWQVRFOgkvKiBH ZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFBIWSBpbiB1c2UuICovDQotCQljYXNlIFNJT0NHTUlJUEhZ Og0KLQkJICAgICAgICBpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7DQot CQkJZGF0YVswXSA9IGF1cC0+cGh5X2FkZHI7DQotCQljYXNlIFNJT0NERVZQUklWQVRFKzE6CS8q IFJlYWQgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIuICovDQotCQljYXNlIFNJT0NHTUlJUkVH Og0KLQkJCWRhdGFbM10gPSAgbWRpb19yZWFkKGRldiwgZGF0YVswXSwgZGF0YVsxXSk7IA0KLQkJ CXJldHVybiAwOw0KLQkJY2FzZSBTSU9DREVWUFJJVkFURSsyOgkvKiBXcml0ZSB0aGUgc3BlY2lm aWVkIE1JSSByZWdpc3RlciAqLw0KLQkJY2FzZSBTSU9DU01JSVJFRzogDQotCQkJaWYgKCFjYXBh YmxlKENBUF9ORVRfQURNSU4pKQ0KLQkJCQlyZXR1cm4gLUVQRVJNOw0KLQkJCW1kaW9fd3JpdGUo ZGV2LCBkYXRhWzBdLCBkYXRhWzFdLGRhdGFbMl0pOw0KLQkJCXJldHVybiAwOw0KLQkJZGVmYXVs dDoNCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQotCX0NCi0NCi19DQorCWlmICghbmV0aWZfcnVu bmluZyhkZXYpKSByZXR1cm4gLUVJTlZBTDsNCiANCisJaWYgKCFhdXAtPnBoeV9kZXYpIHJldHVy biAtRUlOVkFMOyAvLyBQSFkgbm90IGNvbnRyb2xsYWJsZQ0KIA0KLXN0YXRpYyBpbnQgYXUxMDAw X3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApDQot ew0KLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUg KikgZGV2LT5wcml2Ow0KLQl1MTYgY29udHJvbDsNCi0NCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQp ICB7DQotCQlwcmludGsoIiVzOiBzZXRfY29uZmlnIGNhbGxlZDogZGV2LT5pZl9wb3J0ICVkIG1h cC0+cG9ydCAleFxuIiwgDQotCQkJCWRldi0+bmFtZSwgZGV2LT5pZl9wb3J0LCBtYXAtPnBvcnQp Ow0KLQl9DQotDQotCXN3aXRjaChtYXAtPnBvcnQpew0KLQkJY2FzZSBJRl9QT1JUX1VOS05PV046 IC8qIHVzZSBhdXRvIGhlcmUgKi8gICANCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmln IHBoeSBmb3IgYW5lZ1xuIiwgDQotCQkJCQlkZXYtPm5hbWUpOw0KLQkJCWRldi0+aWZfcG9ydCA9 IG1hcC0+cG9ydDsNCi0JCQkvKiBMaW5rIERvd246IHRoZSB0aW1lciB3aWxsIGJyaW5nIGl0IHVw ICovDQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsNCi0JDQotCQkJLyogcmVhZCBjdXJyZW50 IGNvbnRyb2wgKi8NCi0JCQljb250cm9sID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwg TUlJX0NPTlRST0wpOw0KLQkJCWNvbnRyb2wgJj0gfihNSUlfQ05UTF9GRFggfCBNSUlfQ05UTF9G MTAwKTsNCi0NCi0JCQkvKiBlbmFibGUgYXV0byBuZWdvdGlhdGlvbiBhbmQgcmVzZXQgdGhlIG5l Z290aWF0aW9uICovDQotCQkJbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05U Uk9MLCANCi0JCQkJCWNvbnRyb2wgfCBNSUlfQ05UTF9BVVRPIHwgDQotCQkJCQlNSUlfQ05UTF9S U1RfQVVUTyk7DQotDQotCQkJYnJlYWs7DQotICAgIA0KLQkJY2FzZSBJRl9QT1JUXzEwQkFTRVQ6 IC8qIDEwQmFzZVQgKi8gICAgICAgICANCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmln IHBoeSBmb3IgMTBCYXNlVFxuIiwgDQotCQkJCQlkZXYtPm5hbWUpOw0KLQkJCWRldi0+aWZfcG9y dCA9IG1hcC0+cG9ydDsNCi0JDQotCQkJLyogTGluayBEb3duOiB0aGUgdGltZXIgd2lsbCBicmlu ZyBpdCB1cCAqLw0KLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7DQotDQotCQkJLyogc2V0IFNw ZWVkIHRvIDEwTWJwcywgSGFsZiBEdXBsZXggKi8NCi0JCQljb250cm9sID0gbWRpb19yZWFkKGRl diwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJCWNvbnRyb2wgJj0gfihNSUlfQ05U TF9GMTAwIHwgTUlJX0NOVExfQVVUTyB8IA0KLQkJCQkJTUlJX0NOVExfRkRYKTsNCi0JDQotCQkJ LyogZGlzYWJsZSBhdXRvIG5lZ290aWF0aW9uIGFuZCBmb3JjZSAxME0vSEQgbW9kZSovDQotCQkJ bWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MLCBjb250cm9sKTsNCi0J CQlicmVhazsNCi0gICAgDQotCQljYXNlIElGX1BPUlRfMTAwQkFTRVQ6IC8qIDEwMEJhc2VUICov DQotCQljYXNlIElGX1BPUlRfMTAwQkFTRVRYOiAvKiAxMDBCYXNlVHggKi8gDQotCQkJcHJpbnRr KEtFUk5fSU5GTyAiJXM6IGNvbmZpZyBwaHkgZm9yIDEwMEJhc2VUWFxuIiwgDQotCQkJCQlkZXYt Pm5hbWUpOw0KLQkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsNCi0JDQotCQkJLyogTGluayBE b3duOiB0aGUgdGltZXIgd2lsbCBicmluZyBpdCB1cCAqLw0KLQkJCW5ldGlmX2NhcnJpZXJfb2Zm KGRldik7DQotCQ0KLQkJCS8qIHNldCBTcGVlZCB0byAxMDBNYnBzLCBIYWxmIER1cGxleCAqLw0K LQkJCS8qIGRpc2FibGUgYXV0byBuZWdvdGlhdGlvbiBhbmQgZW5hYmxlIDEwME1CaXQgTW9kZSAq Lw0KLQkJCWNvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJP TCk7DQotCQkJY29udHJvbCAmPSB+KE1JSV9DTlRMX0FVVE8gfCBNSUlfQ05UTF9GRFgpOw0KLQkJ CWNvbnRyb2wgfD0gTUlJX0NOVExfRjEwMDsNCi0JCQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlf YWRkciwgTUlJX0NPTlRST0wsIGNvbnRyb2wpOw0KLQkJCWJyZWFrOw0KLSAgICANCi0JCWNhc2Ug SUZfUE9SVF8xMDBCQVNFRlg6IC8qIDEwMEJhc2VGeCAqLw0KLQkJCXByaW50ayhLRVJOX0lORk8g IiVzOiBjb25maWcgcGh5IGZvciAxMDBCYXNlRlhcbiIsIA0KLQkJCQkJZGV2LT5uYW1lKTsNCi0J CQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7DQotCQ0KLQkJCS8qIExpbmsgRG93bjogdGhlIHRp bWVyIHdpbGwgYnJpbmcgaXQgdXAgKi8NCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOw0KLQkN Ci0JCQkvKiBzZXQgU3BlZWQgdG8gMTAwTWJwcywgRnVsbCBEdXBsZXggKi8NCi0JCQkvKiBkaXNh YmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGVuYWJsZSAxMDBNQml0IE1vZGUgKi8NCi0JCQljb250 cm9sID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wpOw0KLQkJCWNv bnRyb2wgJj0gfk1JSV9DTlRMX0FVVE87DQotCQkJY29udHJvbCB8PSAgTUlJX0NOVExfRjEwMCB8 IE1JSV9DTlRMX0ZEWDsNCi0JCQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NP TlRST0wsIGNvbnRyb2wpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBJRl9QT1JUXzEwQkFTRTI6IC8q IDEwQmFzZTIgKi8NCi0JCWNhc2UgSUZfUE9SVF9BVUk6IC8qIEFVSSAqLw0KLQkJLyogVGhlc2Ug TW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKGFyZSB0aGV5PykqLw0KLQkJCXByaW50ayhLRVJOX0VS UiAiJXM6IDEwQmFzZTIvQVVJIG5vdCBzdXBwb3J0ZWQiLCANCi0JCQkJCWRldi0+bmFtZSk7DQot CQkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KLQkJCWJyZWFrOw0KLSAgICANCi0JCWRlZmF1bHQ6DQot CQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBtZWRpYSBzZWxlY3RlZCIsIA0KLQkJCQkJ ZGV2LT5uYW1lKTsNCi0JCQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0KLQlyZXR1cm4gMDsNCisJcmV0 dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOw0KIH0NCiAN CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF1MTAwMF9nZXRfc3RhdHMoc3RydWN0 IG5ldF9kZXZpY2UgKmRldikNCkBAIC0yMjQxLDMgKzEyNzIsMTQgQEAgc3RhdGljIHN0cnVjdCBu ZXRfZGV2aWNlX3N0YXRzICphdTEwMDBfZw0KIA0KIG1vZHVsZV9pbml0KGF1MTAwMF9pbml0X21v ZHVsZSk7DQogbW9kdWxlX2V4aXQoYXUxMDAwX2NsZWFudXBfbW9kdWxlKTsNCisNCisvKg0KKyAq IE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0 eWxlLg0KKyAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUg ZmlsZSBhbmQgYXV0b21hdGljYWxseQ0KKyAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMg YnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQNCisgKiBvZiB0aGUgZmls ZS4NCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBMb2NhbCB2YXJpYWJsZXM6DQorICogYy1m aWxlLXN0eWxlOiAibGludXgiDQorICogRW5kOg0KKyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2F1MTAwMF9ldGguaCBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaA0KaW5kZXggY2NiMzVm YS4uNGVmNzRkYiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaA0KKysrIGIv ZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oDQpAQCAtNDAsMTIwICs0MCw2IEBADQogDQogI2RlZmlu ZSBNVUxUSUNBU1RfRklMVEVSX0xJTUlUIDY0DQogDQotLyogRklYTUUgDQotICogVGhlIFBIWSBk ZWZpbmVzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIGZpbGUuDQotICovDQotDQotLyogTUlJIHJl Z2lzdGVyIG9mZnNldHMgKi8NCi0jZGVmaW5lCU1JSV9DT05UUk9MIDB4MDAwMA0KLSNkZWZpbmUg TUlJX1NUQVRVUyAgMHgwMDAxDQotI2RlZmluZSBNSUlfUEhZX0lEMCAweDAwMDINCi0jZGVmaW5l CU1JSV9QSFlfSUQxIDB4MDAwMw0KLSNkZWZpbmUgTUlJX0FOQURWICAgMHgwMDA0DQotI2RlZmlu ZSBNSUlfQU5MUEFSICAweDAwMDUNCi0jZGVmaW5lIE1JSV9BRVhQICAgIDB4MDAwNg0KLSNkZWZp bmUgTUlJX0FORVhUICAgMHgwMDA3DQotI2RlZmluZSBNSUlfTFNJX1BIWV9DT05GSUcgMHgwMDEx DQotLyogU3RhdHVzIHJlZ2lzdGVyICovDQotI2RlZmluZSBNSUlfTFNJX1BIWV9TVEFUICAgMHgw MDEyDQotI2RlZmluZSBNSUlfQU1EX1BIWV9TVEFUICAgTUlJX0xTSV9QSFlfU1RBVA0KLSNkZWZp bmUgTUlJX0lOVEVMX1BIWV9TVEFUIDB4MDAxMQ0KLQ0KLSNkZWZpbmUgTUlJX0FVWF9DTlRSTCAg MHgwMDE4DQotLyogbWlpIHJlZ2lzdGVycyBzcGVjaWZpYyB0byBBTUQgNzlDOTAxICovDQotI2Rl ZmluZQlNSUlfU1RBVFVTX1NVTU1BUlkgPSAweDAwMTgNCi0NCi0vKiBNSUkgQ29udHJvbCByZWdp c3RlciBiaXQgZGVmaW5pdGlvbnMuICovDQotI2RlZmluZQlNSUlfQ05UTF9GRFggICAgICAweDAx MDANCi0jZGVmaW5lIE1JSV9DTlRMX1JTVF9BVVRPIDB4MDIwMA0KLSNkZWZpbmUJTUlJX0NOVExf SVNPTEFURSAgMHgwNDAwDQotI2RlZmluZSBNSUlfQ05UTF9QV1JEV04gICAweDA4MDANCi0jZGVm aW5lCU1JSV9DTlRMX0FVVE8gICAgIDB4MTAwMA0KLSNkZWZpbmUgTUlJX0NOVExfRjEwMCAgICAg MHgyMDAwDQotI2RlZmluZQlNSUlfQ05UTF9MUEJLICAgICAweDQwMDANCi0jZGVmaW5lIE1JSV9D TlRMX1JFU0VUICAgIDB4ODAwMA0KLQ0KLS8qIE1JSSBTdGF0dXMgcmVnaXN0ZXIgYml0ICAqLw0K LSNkZWZpbmUJTUlJX1NUQVRfRVhUICAgICAgICAweDAwMDEgDQotI2RlZmluZSBNSUlfU1RBVF9K QUIgICAgICAgIDB4MDAwMg0KLSNkZWZpbmUJTUlJX1NUQVRfTElOSyAgICAgICAweDAwMDQNCi0j ZGVmaW5lIE1JSV9TVEFUX0NBTl9BVVRPICAgMHgwMDA4DQotI2RlZmluZQlNSUlfU1RBVF9GQVVM VCAgICAgIDB4MDAxMCANCi0jZGVmaW5lIE1JSV9TVEFUX0FVVE9fRE9ORSAgMHgwMDIwDQotI2Rl ZmluZQlNSUlfU1RBVF9DQU5fVCAgICAgIDB4MDgwMA0KLSNkZWZpbmUgTUlJX1NUQVRfQ0FOX1Rf RkRYICAweDEwMDANCi0jZGVmaW5lCU1JSV9TVEFUX0NBTl9UWCAgICAgMHgyMDAwIA0KLSNkZWZp bmUgTUlJX1NUQVRfQ0FOX1RYX0ZEWCAweDQwMDANCi0jZGVmaW5lCU1JSV9TVEFUX0NBTl9UNCAg ICAgMHg4MDAwDQotDQotDQotI2RlZmluZQkJTUlJX0lEMV9PVUlfTE8JCTB4RkMwMAkvKiBsb3cg Yml0cyBvZiBPVUkgbWFzayAqLw0KLSNkZWZpbmUJCU1JSV9JRDFfTU9ERUwJCTB4MDNGMAkvKiBt b2RlbCBudW1iZXIgKi8NCi0jZGVmaW5lCQlNSUlfSUQxX1JFVgkJMHgwMDBGCS8qIG1vZGVsIG51 bWJlciAqLw0KLQ0KLS8qIE1JSSBOV0FZIFJlZ2lzdGVyIEJpdHMgLi4uDQotICAgdmFsaWQgZm9y IHRoZSBBTkFSIChBdXRvLU5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQpIGFuZA0KLSAgIEFOTFBB UiAoQXV0by1OZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIpIHJlZ2lzdGVycyAqLw0KLSNkZWZpbmUJ TUlJX05XQVlfTk9ERV9TRUwgMHgwMDFmDQotI2RlZmluZSBNSUlfTldBWV9DU01BX0NEICAweDAw MDENCi0jZGVmaW5lCU1JSV9OV0FZX1QJICAweDAwMjANCi0jZGVmaW5lIE1JSV9OV0FZX1RfRkRY ICAgIDB4MDA0MA0KLSNkZWZpbmUJTUlJX05XQVlfVFggICAgICAgMHgwMDgwDQotI2RlZmluZSBN SUlfTldBWV9UWF9GRFggICAweDAxMDANCi0jZGVmaW5lCU1JSV9OV0FZX1Q0ICAgICAgIDB4MDIw MCANCi0jZGVmaW5lIE1JSV9OV0FZX1BBVVNFICAgIDB4MDQwMCANCi0jZGVmaW5lCU1JSV9OV0FZ X1JGICAgICAgIDB4MjAwMCAvKiBSZW1vdGUgRmF1bHQgKi8NCi0jZGVmaW5lIE1JSV9OV0FZX0FD SyAgICAgIDB4NDAwMCAvKiBSZW1vdGUgQWNrbm93bGVkZ2UgKi8NCi0jZGVmaW5lCU1JSV9OV0FZ X05QICAgICAgIDB4ODAwMCAvKiBOZXh0IFBhZ2UgKEVuYWJsZSkgKi8NCi0NCi0vKiBtaWkgc3Rz b3V0IHJlZ2lzdGVyIGJpdHMgKi8NCi0jZGVmaW5lCU1JSV9TVFNPVVRfTElOS19GQUlMIDB4NDAw MA0KLSNkZWZpbmUJTUlJX1NUU09VVF9TUEQgICAgICAgMHgwMDgwDQotI2RlZmluZSBNSUlfU1RT T1VUX0RQTFggICAgICAweDAwNDANCi0NCi0vKiBtaWkgc3RzaWNzIHJlZ2lzdGVyIGJpdHMgKi8N Ci0jZGVmaW5lCU1JSV9TVFNJQ1NfU1BEICAgICAgIDB4ODAwMA0KLSNkZWZpbmUgTUlJX1NUU0lD U19EUExYICAgICAgMHg0MDAwDQotI2RlZmluZQlNSUlfU1RTSUNTX0xJTktTVFMgICAweDAwMDEN Ci0NCi0vKiBtaWkgc3Rzc3VtIHJlZ2lzdGVyIGJpdHMgKi8NCi0jZGVmaW5lCU1JSV9TVFNTVU1f TElOSyAgMHgwMDA4DQotI2RlZmluZSBNSUlfU1RTU1VNX0RQTFggIDB4MDAwNA0KLSNkZWZpbmUJ TUlJX1NUU1NVTV9BVVRPICAweDAwMDINCi0jZGVmaW5lIE1JSV9TVFNTVU1fU1BEICAgMHgwMDAx DQotDQotLyogbHNpIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1JSV9MU0lfUEhZ X1NUQVRfRkRYCTB4MDA0MA0KLSNkZWZpbmUgTUlJX0xTSV9QSFlfU1RBVF9TUEQJMHgwMDgwDQot DQotLyogYW1kIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8NCi0jZGVmaW5lIE1JSV9BTURfUEhZX1NU QVRfRkRYCTB4MDgwMA0KLSNkZWZpbmUgTUlJX0FNRF9QSFlfU1RBVF9TUEQJMHgwNDAwDQotDQot LyogaW50ZWwgcGh5IHN0YXR1cyByZWdpc3RlciAqLw0KLSNkZWZpbmUgTUlJX0lOVEVMX1BIWV9T VEFUX0ZEWAkweDAyMDANCi0jZGVmaW5lIE1JSV9JTlRFTF9QSFlfU1RBVF9TUEQJMHg0MDAwDQot DQotLyogQXV4aWxsaWFyeSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLw0KLSNkZWZpbmUgTUlJ X0FVWF9GRFggICAgICAweDAwMDENCi0jZGVmaW5lIE1JSV9BVVhfMTAwICAgICAgMHgwMDAyDQot I2RlZmluZSBNSUlfQVVYX0YxMDAgICAgIDB4MDAwNA0KLSNkZWZpbmUgTUlJX0FVWF9BTkVHICAg ICAweDAwMDgNCi0NCi10eXBlZGVmIHN0cnVjdCBtaWlfcGh5IHsNCi0Jc3RydWN0IG1paV9waHkg KiBuZXh0Ow0KLQlzdHJ1Y3QgbWlpX2NoaXBfaW5mbyAqIGNoaXBfaW5mbzsNCi0JdTE2IHN0YXR1 czsNCi0JdTMyICptaWlfY29udHJvbF9yZWc7DQotCXUzMiAqbWlpX2RhdGFfcmVnOw0KLX0gbWlp X3BoeV90Ow0KLQ0KLXN0cnVjdCBwaHlfb3BzIHsNCi0JaW50ICgqcGh5X2luaXQpIChzdHJ1Y3Qg bmV0X2RldmljZSAqLCBpbnQpOw0KLQlpbnQgKCpwaHlfcmVzZXQpIChzdHJ1Y3QgbmV0X2Rldmlj ZSAqLCBpbnQpOw0KLQlpbnQgKCpwaHlfc3RhdHVzKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50 LCB1MTYgKiwgdTE2ICopOw0KLX07DQotDQogLyogDQogICogRGF0YSBCdWZmZXIgRGVzY3JpcHRv ci4gRGF0YSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiAzMiBieXRlIA0KICAqIGJvdW5kYXJ5 IGZvciBib3RoLCByZWNlaXZlIGFuZCB0cmFuc21pdC4NCkBAIC0yMDAsNyArODYsNiBAQCB0eXBl ZGVmIHN0cnVjdCBtYWNfcmVnIHsNCiANCiANCiBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgew0KLQkN CiAJZGJfZGVzdF90ICpwREJmcmVlOw0KIAlkYl9kZXN0X3QgZGJbTlVNX1JYX0JVRkZTK05VTV9U WF9CVUZGU107DQogCXZvbGF0aWxlIHJ4X2RtYV90ICpyeF9kbWFfcmluZ1tOVU1fUlhfRE1BXTsN CkBAIC0yMTMsOSArOTgsMTYgQEAgc3RydWN0IGF1MTAwMF9wcml2YXRlIHsNCiAJdTMyIHR4X2Z1 bGw7DQogDQogCWludCBtYWNfaWQ7DQotCW1paV9waHlfdCAqbWlpOw0KLQlzdHJ1Y3QgbWlpX2lm X2luZm8gbWlpX2lmOw0KLQlzdHJ1Y3QgcGh5X29wcyAqcGh5X29wczsNCisNCisJaW50IG1hY19l bmFibGVkOyAgICAgICAvKiB3aGV0aGVyIE1BQyBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgcnVu bmluZyAocmVxLiBmb3IgbWRpbykgKi8NCisNCisJaW50IG9sZF9saW5rOyAgICAgICAgICAvKiB1 c2VkIGJ5IGF1MTAwMF9hZGp1c3RfbGluayAqLw0KKwlpbnQgb2xkX3NwZWVkOyANCisJaW50IG9s ZF9kdXBsZXg7DQorDQorCWludCBwaHlfYWRkcjsgICAgICAgICAgLyogcGh5IGFkZHJlc3MgKi8N CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7DQorCXN0cnVjdCBtaWlfYnVzIG1paV9idXM7 DQogCQ0KIAkvKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGp1c3QgZm9yIHF1aWNrIGFjY2VzcyB0byBj ZXJ0YWluIHJlZ3MgYWRkcmVzc2VzLiAqLw0KIAl2b2xhdGlsZSBtYWNfcmVnX3QgKm1hYzsgIC8q IG1hYyByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgKi8gICANCkBAIC0yMjcsMTEgKzEx OSw5IEBAIHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSB7DQogCXU4ICpoYXNoX3RhYmxlOw0KIAl1MzIg aGFzaF9tb2RlOw0KIAl1MzIgaW50cl93b3JrX2RvbmU7IC8qIG51bWJlciBvZiBSeCBhbmQgVHgg cGt0cyBwcm9jZXNzZWQgaW4gdGhlIGlzciAqLw0KLQlpbnQgcGh5X2FkZHI7ICAgICAgICAgIC8q IHBoeSBhZGRyZXNzICovDQogCXUzMiBvcHRpb25zOyAgICAgICAgICAgLyogVXNlci1zZXR0YWJs ZSBtaXNjLiBkcml2ZXIgb3B0aW9ucy4gKi8NCiAJdTMyIGRydl9mbGFnczsNCi0JaW50IHdhbnRf YXV0b25lZzsNCisNCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7DQotCXN0cnVjdCB0 aW1lcl9saXN0IHRpbWVyOw0KIAlzcGlubG9ja190IGxvY2s7ICAgICAgIC8qIFNlcmlhbGlzZSBh Y2Nlc3MgdG8gZGV2aWNlICovDQogfTsNCm== --=-7NBnvUkjbxuQTR5LDyMk-- --=-gG6GUuD/D7Sog08cBLNj Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iD8DBQBEWcaPSYHgZIg/QUIRAkEqAJwOBi225mr7PxQbS3l/F899bulpTACfamMT Aa5ZD35OuAOefKOpsPDnoq4= =SaYh -----END PGP SIGNATURE----- --=-gG6GUuD/D7Sog08cBLNj--