Return-Path: From: "Zhang, Zhenhua" To: "linux-bluetooth@vger.kernel.org" CC: "Gustavo F. Padovan" Date: Fri, 13 Nov 2009 09:01:10 +0800 Subject: RE: [PATCH] oFonoHFP profile to enable audio routing in BlueZ Message-ID: <0463F45F3606F4428ED35AC8C709F92E089CD174BB@pdsmsx502.ccr.corp.intel.com> References: <0463F45F3606F4428ED35AC8C709F92E089CA6A628@pdsmsx502.ccr.corp.intel.com> In-Reply-To: <0463F45F3606F4428ED35AC8C709F92E089CA6A628@pdsmsx502.ccr.corp.intel.com> Content-Type: multipart/mixed; boundary="_002_0463F45F3606F4428ED35AC8C709F92E089CD174BBpdsmsx502ccrc_" MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --_002_0463F45F3606F4428ED35AC8C709F92E089CD174BBpdsmsx502ccrc_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksDQoNCk9wcywgZm9yZ290IHRvIGFkZCBvZm9uby1oZnAuYyBpbnRvIEJsdWVaIHBhdGNoLiBT byBJIGFkZCB0aGVtIGFuZA0KcmVzZW5kIDAwMDEgcGF0Y2guDQoNCmxpbnV4LWJsdWV0b290aC1v d25lckB2Z2VyLmtlcm5lbC5vcmcgd3JvdGU6DQo+IEhpLA0KPiANCj4gVGhlc2UgdGhyZWUgcGF0 Y2hlcyBhcmUgY3JlYXRlZCB0byBlbmFibGUgYXVkaW8gcm91dGluZyBmb3IgSGFuZHNmcmVlDQo+ IFByb2ZpbGUuIEl0IHdhcyBjcmVhdGVkIGR1cmluZyB0aGUgdm9pY2VjYWxsIGRyaXZlciBpbXBs ZW1lbnRhdGlvbiBpbg0KPiBvRm9ubyBzbyBpdCBkb2VzIG5vdCB1c2UgdGhlIG5ldyBoZnAtYXBp IHlldC4gWW91IGNhbiB0YWtlIGl0DQo+IGFzIHJlZmVyZW5jZSBvbmx5IHNpbmNlIGl0IHdpbGwg bm90IGJlIGNvbW1pdGVkIGludG8gdHJ1bmsuDQo+IA0KPiBCYXNpY2FsbHksIGEgbmV3IHByb2Zp bGUgb0Zvbm9IRlAgd2FzIGFkZGVkIHRvIGNyZWF0ZSBSRkNPTU0NCj4gY29ubmVjdGlvbiBhbmQg dHVybiBJTyBpbnRvIFRUWSBkZXZpY2UgZm9yIG9Gb25vLiBJdCBzZW5kcyBUVFkNCj4gZGV2aWNl IHN0cmluZyB0byBvRm9ubyB0aHJvdWdoIEQtQnVzLiBNZWFud2hpbGUsIGl0IGxpc3RlbnMNCj4g b0Zvbm8gcHJvcGVydHkgY2hhbmdlcyB0byBlbWl0IENhbGxTdGFydGVkIGFuZCBDYWxsRW5kZWQN Cj4gc2lnbmFscy4gUHVsc2VBdWRpbyBjb3VsZCBsaXN0ZW4gdGhlc2Ugc2lnbmFscyBhbmQgcmVk aXJlY3QNCj4gYXVkaW8gc291cmNlL3NpbmsgdG8gdXNlIGJsdWV0b290aCBvbmUuDQo+IA0KPiBJ ZiB5b3UgYXJlIGludGVyZXN0ZWQgYXQgaXQsIHlvdSBtYXkgYXBwbHkgMDAwMS4uMDAwMyBpbnRv DQo+IEJsdWVaLCBvRm9ubyBhbmQgUEEgcmVzcGVjdGl2ZWx5LiBMYXN0IGNvbW1pdCBTSEEtMSBp cyBpbiBwYXRjaCBub3RlLg0KPiANCj4gQW5kIHlvdSBuZWVkIHRvIGVuYWJsZSBvRm9ub0hGUCBi eSBtb2RpZnkgYXVkaW8uY29uZjogCURpc2FibGU9R2F0ZXdheQ0KPiAJRW5hYmxlPW9Gb25vSEZQ LCBIZWFkc2V0DQo+IA0KPiBJbiBvZm9ubyBtb2RlbS5jb25mLCBzcGVjaWZ5IGRldmljZSBhZGRy ZXNzIGxpa2U6DQo+IAlbaGZwXQ0KPiAJRHJpdmVyPWhmcA0KPiAJQWRkcmVzcz0wMDoyMjpBOTo4 QzpBRjozNA0KPiANCj4gQW5kIHBvd2VyIG9uIG1vZGVtIGJ5Og0KPiAJZGJ1cy1zZW5kIC0tc3lz dGVtIC0tcHJpbnQtcmVwbHkgLS1kZXN0PW9yZy5vZm9ubyAvaGZwMA0KPiBvcmcub2Zvbm8uTW9k ZW0uU2V0UHJvcGVydHkgc3RyaW5nOlBvd2VyZWQgdmFyaWFudDpib29sZWFuOnRydWUNCj4gDQo+ IFRoZSBQdWxzZUF1ZGlvIHdpbGwgbG9hZCBtb2R1bGUtYmx1ZXRvb3RoLWRpc2NvdmVyDQo+IGF1 dG9tYXRpY2FsbHkuIElmIG5vdCwgcGxlYXNlIGxvYWQgaXQgbWFudWFsbHkuIFRoaXMgbW9kdWxl DQo+IGxpc3RlbnMgQmx1ZVogc2lnbmFsIGFuZCBsb2FkIG1vZHVsZS1ibHVldG9vdGgtZGV2aWNl DQo+IGF1dG9tYXRpY2FsbHkuIFVuZm9ydHVuYXRlbHksIHlvdSBuZWVkIHRvIGxvYWQgbW9kdWxl LWxvb3BiYWNrDQo+IG1hbnVhbGx5IHRvIHJlZGlyZWN0IGJsdWV6IHNvdXJjZS9zaW5rIHRvIGFs c2EsIGUuZy46DQo+IAlsb2FkLW1vZHVsZSBtb2R1bGUtbG9vcGJhY2sgc291cmNlPSJibHVlel9z b3VyY2UuWFguLlhYIg0KPiBzaW5rPSJhbHNhX291dHB1dC4wLmFuYWxvZy1zdGVyZW8iDQo+IAls b2FkLW1vZHVsZSBtb2R1bGUtbG9vcGJhY2sgc291cmNlPSJhbHNhX2lucHV0LjAuYW5hbG9nLXN0 ZXJlbyINCj4gc2luaz0iYmx1ZXpfc2luay5YWC4uWFgiIA0KPiANCj4gRmVlbCBmcmVlIHRvIGxl dCBtZSBrbm93IGlmIGFueSBwcm9ibGVtcy4gVGhhbmtzLg0KPiANCj4gUmVnYXJkcywNCj4gWmhl bmh1YQ0KDQpSZWdhcmRzLA0KWmhlbmh1YQ0KDQo= --_002_0463F45F3606F4428ED35AC8C709F92E089CD174BBpdsmsx502ccrc_ Content-Type: application/octet-stream; name="0001-oFonoHFP-Add-oFonoHFP-profile-in-BlueZ.patch" Content-Description: 0001-oFonoHFP-Add-oFonoHFP-profile-in-BlueZ.patch Content-Disposition: attachment; filename="0001-oFonoHFP-Add-oFonoHFP-profile-in-BlueZ.patch"; size=41939; creation-date="Thu, 12 Nov 2009 15:45:43 GMT"; modification-date="Fri, 13 Nov 2009 08:56:10 GMT" Content-Transfer-Encoding: base64 RnJvbSBhMjAyYjRiOTFmNWY3MjUzYmNjOTUzMmUyNzM3YjMyN2Y4MDFjMzU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGVuaHVhIFpoYW5nIDx6aGVuaHVhLnpoYW5nQGludGVsLmNv bT4KRGF0ZTogVGh1LCAxMiBOb3YgMjAwOSAyMjoyNDoxNSArMDgwMApTdWJqZWN0OiBbUEFUQ0hd IG9Gb25vSEZQOiBBZGQgb0Zvbm9IRlAgcHJvZmlsZSBpbiBCbHVlWgoKVGhlIG9Gb25vSEZQIHBy b2ZpbGUgaXMgdXNlZCB0byBwcm92aWRlIHNlcnZpY2UgZm9yIG9Gb25vIEhGUAp0ZWxlcGhvbnkg cGx1Z2lucy4gSXQgZXhwb3NlcyB0d28gbWV0aG9kczogQ29ubmVjdCBhbmQgRGlzY29ubmVjdCwK YW5kIHR3byBwcm9wZXJ0aWVzOiBEZXZpY2UgYW5kIENvbm5lY3RlZC4KCk9uY2Ugb0Zvbm8gcmVx dWVzdCB0byBjcmVhdGUgY29ubmVjdGlvbiB3aXRoIEJsdWV0b290aCBkZXZpY2UsIGl0CmNyZWF0 ZXMgdGhlIHJmY29tbSBjb25uZWN0aW9uIGFuZCB0dXJucyBpbyBpbnRvIGEgVFRZIGRldmljZS4g QW5kCml0IHJldHVybnMgVFRZIGRldmljZSBuYW1lIHRvIG9Gb25vIHRocm91Z2ggRC1CdXMuIEl0 IGxpc3RlbnMKb0Zvbm8gcHJvcGVydHkgY2hhbmdlcyB0byBlbWl0IENhbGxTdGFydGVkIGFuZCBD YWxsRW5kZWQgc2lnbmFsCnRvIFB1bHNlQXVkaW8uCi0tLQogTWFrZWZpbGUuYW0gICAgICAgfCAg ICAxICsKIGF1ZGlvL2RldmljZS5jICAgIHwgICAgNSArCiBhdWRpby9kZXZpY2UuaCAgICB8ICAg IDMgKy0KIGF1ZGlvL21haW4uYyAgICAgIHwgICAxNCArCiBhdWRpby9tYW5hZ2VyLmMgICB8ICAx OTMgKysrKysrKysrKysrKy0KIGF1ZGlvL21hbmFnZXIuaCAgIHwgICAgMSArCiBhdWRpby9vZm9u by1oZnAuYyB8ICA3OTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGF1ZGlvL29mb25vLWhmcC5oIHwgICA1MCArKysrCiBhdWRpby91bml4LmMg ICAgICB8ICAxMjAgKysrKysrKystCiBkb2MvYXVkaW8tYXBpLnR4dCB8ICAgMzcgKysrCiAxMCBm aWxlcyBjaGFuZ2VkLCAxMjA1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGF1ZGlvL29mb25vLWhmcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXVkaW8v b2Zvbm8taGZwLmgKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4 IGQzNjBhY2IuLjJhZWJhNjcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxl LmFtCkBAIC0xMjEsNiArMTIxLDcgQEAgYnVpbHRpbl9zb3VyY2VzICs9IGF1ZGlvL21haW4uYyBc CiAJCQlhdWRpby9hdmR0cC5oIGF1ZGlvL2F2ZHRwLmMgXAogCQkJYXVkaW8vaXBjLmggYXVkaW8v aXBjLmMgXAogCQkJYXVkaW8vdW5peC5oIGF1ZGlvL3VuaXguYyBcCisJCQlhdWRpby9vZm9uby1o ZnAuaCBhdWRpby9vZm9uby1oZnAuYyBcCiAJCQlhdWRpby90ZWxlcGhvbnkuaAogYnVpbHRpbl9u b2Rpc3QgKz0gYXVkaW8vdGVsZXBob255LmMKIApkaWZmIC0tZ2l0IGEvYXVkaW8vZGV2aWNlLmMg Yi9hdWRpby9kZXZpY2UuYwppbmRleCBlZWYyYWFiLi42M2FmN2I1IDEwMDY0NAotLS0gYS9hdWRp by9kZXZpY2UuYworKysgYi9hdWRpby9kZXZpY2UuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1 ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJoZWFkc2V0LmgiCiAjaW5jbHVkZSAiZ2F0ZXdheS5o IgorI2luY2x1ZGUgIm9mb25vLWhmcC5oIgogI2luY2x1ZGUgInNpbmsuaCIKICNpbmNsdWRlICJz b3VyY2UuaCIKIApAQCAtNjQ3LDYgKzY0OCwxMCBAQCBnYm9vbGVhbiBhdWRpb19kZXZpY2VfaXNf YWN0aXZlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKIAllbHNlIGlmICghc3RyY21wKGludGVy ZmFjZSwgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UpICYmIGRldi0+Z2F0ZXdheSAmJgogCQkJCWdh dGV3YXlfaXNfY29ubmVjdGVkKGRldikpCiAJCXJldHVybiBUUlVFOworCWVsc2UgaWYgKCFzdHJj bXAoaW50ZXJmYWNlLCBBVURJT19PRk9OT19IRlBfSU5URVJGQUNFKQorCQkJCSYmIGRldi0+b2Zv bm9faGZwCisJCQkJJiYgb2Zvbm9faGZwX2lzX2Nvbm5lY3RlZChkZXYpKQorCQlyZXR1cm4gVFJV RTsKIAogCXJldHVybiBGQUxTRTsKIH0KZGlmZiAtLWdpdCBhL2F1ZGlvL2RldmljZS5oIGIvYXVk aW8vZGV2aWNlLmgKaW5kZXggYzg5OWQyMC4uMDVmN2NmZiAxMDA2NDQKLS0tIGEvYXVkaW8vZGV2 aWNlLmgKKysrIGIvYXVkaW8vZGV2aWNlLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgc3RydWN0IHRhcmdl dDsKIHN0cnVjdCBzaW5rOwogc3RydWN0IGhlYWRzZXQ7CiBzdHJ1Y3QgZ2F0ZXdheTsKK3N0cnVj dCBvZm9ub19oZnA7CiBzdHJ1Y3QgZGV2X3ByaXY7CiAKIHN0cnVjdCBhdWRpb19kZXZpY2UgewpA QCAtNjIsMTEgKzYzLDExIEBAIHN0cnVjdCBhdWRpb19kZXZpY2UgewogCiAJc3RydWN0IGhlYWRz ZXQgKmhlYWRzZXQ7CiAJc3RydWN0IGdhdGV3YXkgKmdhdGV3YXk7CisJc3RydWN0IG9mb25vX2hm cCAqb2Zvbm9faGZwOwogCXN0cnVjdCBzaW5rICpzaW5rOwogCXN0cnVjdCBzb3VyY2UgKnNvdXJj ZTsKIAlzdHJ1Y3QgY29udHJvbCAqY29udHJvbDsKIAlzdHJ1Y3QgdGFyZ2V0ICp0YXJnZXQ7Ci0K IAlndWludCBoc19wcmVhdXRoX2lkOwogCiAJc3RydWN0IGRldl9wcml2ICpwcml2OwpkaWZmIC0t Z2l0IGEvYXVkaW8vbWFpbi5jIGIvYXVkaW8vbWFpbi5jCmluZGV4IDlkZWZlNjAuLjNhMTU3MDkg MTAwNjQ0Ci0tLSBhL2F1ZGlvL21haW4uYworKysgYi9hdWRpby9tYWluLmMKQEAgLTQ2LDYgKzQ2 LDcgQEAKICNpbmNsdWRlICJoZWFkc2V0LmgiCiAjaW5jbHVkZSAibWFuYWdlci5oIgogI2luY2x1 ZGUgImdhdGV3YXkuaCIKKyNpbmNsdWRlICJvZm9uby1oZnAuaCIKIAogc3RhdGljIEdJT0NoYW5u ZWwgKnNjb19zZXJ2ZXIgPSBOVUxMOwogCkBAIC05OCw2ICs5OSwxMSBAQCBzdGF0aWMgdm9pZCBz Y29fc2VydmVyX2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdFcnJvciAqZXJyLCBncG9pbnRlciBkYXRh KQogCQkJCQkJRkFMU0UpOwogCiAJaWYgKCFkZXZpY2UpCisJCWRldmljZSA9IG1hbmFnZXJfZmlu ZF9kZXZpY2UoTlVMTCwgJnNyYywgJmRzdCwKKwkJCQkJCUFVRElPX09GT05PX0hGUF9JTlRFUkZB Q0UsCisJCQkJCQlGQUxTRSk7CisKKwlpZiAoIWRldmljZSkKIAkJZ290byBkcm9wOwogCiAJaWYg KGRldmljZS0+aGVhZHNldCkgewpAQCAtMTI0LDYgKzEzMCwxNCBAQCBzdGF0aWMgdm9pZCBzY29f c2VydmVyX2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdFcnJvciAqZXJyLCBncG9pbnRlciBkYXRhKQog CiAJCWlmIChnYXRld2F5X2Nvbm5lY3Rfc2NvKGRldmljZSwgY2hhbikgPCAwKQogCQkJZ290byBk cm9wOworCX0gZWxzZSBpZiAoZGV2aWNlLT5vZm9ub19oZnApIHsKKwkJaWYgKCFvZm9ub19oZnBf aXNfY29ubmVjdGVkKGRldmljZSkpIHsKKwkJCWRlYnVnKCJSZWZ1c2luZyBTQ08gZnJvbSBub24t Y29ubmVjdGVkIEFHIik7CisJCQlnb3RvIGRyb3A7CisJCX0KKworCQlpZiAob2Zvbm9faGZwX2Nv bm5lY3Rfc2NvKGRldmljZSwgY2hhbikgPCAwKQorCQkJZ290byBkcm9wOwogCX0gZWxzZQogCQln b3RvIGRyb3A7CiAKZGlmZiAtLWdpdCBhL2F1ZGlvL21hbmFnZXIuYyBiL2F1ZGlvL21hbmFnZXIu YwppbmRleCBjNjNlOThhLi45NmE2MjJmIDEwMDY0NAotLS0gYS9hdWRpby9tYW5hZ2VyLmMKKysr IGIvYXVkaW8vbWFuYWdlci5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiYTJkcC5oIgog I2luY2x1ZGUgImhlYWRzZXQuaCIKICNpbmNsdWRlICJnYXRld2F5LmgiCisjaW5jbHVkZSAib2Zv bm8taGZwLmgiCiAjaW5jbHVkZSAic2luay5oIgogI2luY2x1ZGUgInNvdXJjZS5oIgogI2luY2x1 ZGUgImNvbnRyb2wuaCIKQEAgLTc0LDExICs3NSwxMiBAQAogdHlwZWRlZiBlbnVtIHsKIAlIRUFE U0VUCT0gMSA8PCAwLAogCUdBVEVXQVkJPSAxIDw8IDEsCi0JU0lOSwk9IDEgPDwgMiwKLQlTT1VS Q0UJPSAxIDw8IDMsCi0JQ09OVFJPTAk9IDEgPDwgNCwKLQlUQVJHRVQJPSAxIDw8IDUsCi0JSU5W QUxJRAk9IDEgPDwgNgorCU9GT05PX0hGUCA9IDEgPDwgMiwKKwlTSU5LCT0gMSA8PCAzLAorCVNP VVJDRQk9IDEgPDwgNCwKKwlDT05UUk9MCT0gMSA8PCA1LAorCVRBUkdFVAk9IDEgPDwgNiwKKwlJ TlZBTElECT0gMSA8PCA3CiB9IGF1ZGlvX3NlcnZpY2VfdHlwZTsKIAogdHlwZWRlZiBlbnVtIHsK QEAgLTExMCw2ICsxMTIsNyBAQCBzdGF0aWMgc3RydWN0IGVuYWJsZWRfaW50ZXJmYWNlcyBlbmFi bGVkID0gewogCS5oZnAJCT0gVFJVRSwKIAkuaGVhZHNldAk9IFRSVUUsCiAJLmdhdGV3YXkJPSBG QUxTRSwKKwkub2Zvbm9faGZwCT0gRkFMU0UsCiAJLnNpbmsJCT0gVFJVRSwKIAkuc291cmNlCQk9 IEZBTFNFLAogCS5jb250cm9sCT0gVFJVRSwKQEAgLTE0MCw3ICsxNDMsNyBAQCBnYm9vbGVhbiBz ZXJ2ZXJfaXNfZW5hYmxlZChiZGFkZHJfdCAqc3JjLCB1aW50MTZfdCBzdmMpCiAJY2FzZSBIQU5E U0ZSRUVfU1ZDTEFTU19JRDoKIAkJcmV0dXJuIGVuYWJsZWQuaGVhZHNldCAmJiBlbmFibGVkLmhm cDsKIAljYXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRDoKLQkJcmV0dXJuIGVuYWJsZWQuZ2F0 ZXdheTsKKwkJcmV0dXJuIGVuYWJsZWQuZ2F0ZXdheSB8fCBlbmFibGVkLm9mb25vX2hmcDsKIAlj YXNlIEFVRElPX1NJTktfU1ZDTEFTU19JRDoKIAkJcmV0dXJuIGVuYWJsZWQuc2luazsKIAljYXNl IEFVRElPX1NPVVJDRV9TVkNMQVNTX0lEOgpAQCAtMTk4LDggKzIwMSwxMSBAQCBzdGF0aWMgdm9p ZCBoYW5kbGVfdXVpZChjb25zdCBjaGFyICp1dWlkc3RyLCBzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXZpY2UpCiAJCWJyZWFrOwogCWNhc2UgSEFORFNGUkVFX0FHV19TVkNMQVNTX0lEOgogCQlkZWJ1 ZygiRm91bmQgSGFuZHNmcmVlIEFHIHJlY29yZCIpOwotCQlpZiAoZGV2aWNlLT5nYXRld2F5ID09 IE5VTEwpCisJCWlmIChlbmFibGVkLmdhdGV3YXkgJiYgKGRldmljZS0+Z2F0ZXdheSA9PSBOVUxM KSkKIAkJCWRldmljZS0+Z2F0ZXdheSA9IGdhdGV3YXlfaW5pdChkZXZpY2UpOworCisJCWlmIChl bmFibGVkLm9mb25vX2hmcCAmJiAoZGV2aWNlLT5vZm9ub19oZnAgPT0gTlVMTCkpCisJCQlkZXZp Y2UtPm9mb25vX2hmcCA9IG9mb25vX2hmcF9pbml0KGRldmljZSk7CiAJCWJyZWFrOwogCWNhc2Ug QVVESU9fU0lOS19TVkNMQVNTX0lEOgogCQlkZWJ1ZygiRm91bmQgQXVkaW8gU2luayIpOwpAQCAt NTQ1LDYgKzU1MSwyMyBAQCBzdGF0aWMgdm9pZCBnYXRld2F5X2F1dGhfY2IoREJ1c0Vycm9yICpk ZXJyLCB2b2lkICp1c2VyX2RhdGEpCiAJfQogfQogCitzdGF0aWMgdm9pZCBvZm9ub19oZnBfYXV0 aF9jYihEQnVzRXJyb3IgKmRlcnIsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9f ZGV2aWNlICpkZXZpY2UgPSB1c2VyX2RhdGE7CisKKwlpZiAoZGVyciAmJiBkYnVzX2Vycm9yX2lz X3NldChkZXJyKSkKKwkJZXJyb3IoIkFjY2VzcyBkZW5pZWQ6ICVzIiwgZGVyci0+bWVzc2FnZSk7 CisJZWxzZSB7CisJCWNoYXIgYWdfYWRkcmVzc1sxOF07CisKKwkJYmEyc3RyKCZkZXZpY2UtPmRz dCwgYWdfYWRkcmVzcyk7CisJCWRlYnVnKCJBY2NlcHRlZCBBRyBjb25uZWN0aW9uIGZyb20gJXMg Zm9yICVzIiwKKwkJCWFnX2FkZHJlc3MsIGRldmljZS0+cGF0aCk7CisKKwkJb2Zvbm9faGZwX3N0 YXJ0X3NlcnZpY2UoZGV2aWNlKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGhmX2lvX2NiKEdJT0No YW5uZWwgKmNoYW4sIGdwb2ludGVyIGRhdGEpCiB7CiAJYmRhZGRyX3Qgc3JjLCBkc3Q7CkBAIC02 MDYsNiArNjI5LDY3IEBAIGRyb3A6CiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBvZm9ub19o Zl9pb19jYihHSU9DaGFubmVsICpjaGFuLCBncG9pbnRlciBkYXRhKQoreworCWJkYWRkcl90IHNy YywgZHN0OworCUdFcnJvciAqZXJyID0gTlVMTDsKKwl1aW50OF90IGNoOworCWNvbnN0IGNoYXIg KnNlcnZlcl91dWlkLCAqcmVtb3RlX3V1aWQ7CisJdWludDE2X3Qgc3ZjbGFzczsKKwlzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXZpY2U7CisJaW50IHBlcnI7CisKKwlidF9pb19nZXQoY2hhbiwgQlRf SU9fUkZDT01NLCAmZXJyLAorCQkJQlRfSU9fT1BUX1NPVVJDRV9CREFERFIsICZzcmMsCisJCQlC VF9JT19PUFRfREVTVF9CREFERFIsICZkc3QsCisJCQlCVF9JT19PUFRfQ0hBTk5FTCwgJmNoLAor CQkJQlRfSU9fT1BUX0lOVkFMSUQpOworCisJaWYgKGVycikgeworCQllcnJvcigiJXMiLCBlcnIt Pm1lc3NhZ2UpOworCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKwkJcmV0dXJuOworCX0KKworCXNlcnZl cl91dWlkID0gSEZQX0hTX1VVSUQ7CisJcmVtb3RlX3V1aWQgPSBIRlBfQUdfVVVJRDsKKwlzdmNs YXNzID0gSEFORFNGUkVFX0FHV19TVkNMQVNTX0lEOworCisJZGV2aWNlID0gbWFuYWdlcl9nZXRf ZGV2aWNlKCZzcmMsICZkc3QsIFRSVUUpOworCWlmICghZGV2aWNlKQorCQlnb3RvIGRyb3A7CisK KwlpZiAoIWRldmljZS0+b2Zvbm9faGZwKSB7CisJCWJ0ZF9kZXZpY2VfYWRkX3V1aWQoZGV2aWNl LT5idGRfZGV2LCByZW1vdGVfdXVpZCk7CisJCWlmICghZGV2aWNlLT5vZm9ub19oZnApCisJCQln b3RvIGRyb3A7CisJfQorCisJaWYgKG9mb25vX2hmcF9pc19jb25uZWN0ZWQoZGV2aWNlKSkgewor CQlkZWJ1ZygiUmVmdXNpbmcgbmV3IGNvbm5lY3Rpb24gc2luY2Ugb25lIGFscmVhZHkgZXhpc3Rz Iik7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlpZiAob2Zvbm9faGZwX2Nvbm5lY3RfcmZjb21tKGRl dmljZSwgY2hhbiwgY2gpIDwgMCkgeworCQllcnJvcigiQWxsb2NhdGluZyBuZXcgR0lPQ2hhbm5l bCBmYWlsZWQhIik7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlwZXJyID0gYXVkaW9fZGV2aWNlX3Jl cXVlc3RfYXV0aG9yaXphdGlvbihkZXZpY2UsIHNlcnZlcl91dWlkLAorCQkJCQkJb2Zvbm9faGZw X2F1dGhfY2IsIGRldmljZSk7CisJaWYgKHBlcnIgPCAwKSB7CisJCWRlYnVnKCJBdXRob3JpemF0 aW9uIGRlbmllZCEiKTsKKwkJZ290byBkcm9wOworCX0KKworCXJldHVybjsKKworZHJvcDoKKwln X2lvX2NoYW5uZWxfc2h1dGRvd24oY2hhbiwgVFJVRSwgTlVMTCk7CisJZ19pb19jaGFubmVsX3Vu cmVmKGNoYW4pOworCXJldHVybjsKK30KKwogc3RhdGljIGludCBoZWFkc2V0X3NlcnZlcl9pbml0 KHN0cnVjdCBhdWRpb19hZGFwdGVyICphZGFwdGVyKQogewogCXVpbnQ4X3QgY2hhbiA9IERFRkFV TFRfSFNfQUdfQ0hBTk5FTDsKQEAgLTc2MCw2ICs4NDQsNjEgQEAgc3RhdGljIGludCBnYXRld2F5 X3NlcnZlcl9pbml0KHN0cnVjdCBhdWRpb19hZGFwdGVyICphZGFwdGVyKQogCXJldHVybiAwOwog fQogCitzdGF0aWMgaW50IG9mb25vX2hmcF9zZXJ2ZXJfaW5pdChzdHJ1Y3QgYXVkaW9fYWRhcHRl ciAqYWRhcHRlcikKK3sKKwl1aW50OF90IGNoYW4gPSBERUZBVUxUX0hGUF9IU19DSEFOTkVMOwor CXNkcF9yZWNvcmRfdCAqcmVjb3JkOworCWdib29sZWFuIG1hc3RlciA9IFRSVUU7CisJR0Vycm9y ICplcnIgPSBOVUxMOworCUdJT0NoYW5uZWwgKmlvOworCWJkYWRkcl90IHNyYzsKKworCWlmIChj b25maWcpIHsKKwkJZ2Jvb2xlYW4gdG1wOworCisJCXRtcCA9IGdfa2V5X2ZpbGVfZ2V0X2Jvb2xl YW4oY29uZmlnLCAiR2VuZXJhbCIsICJNYXN0ZXIiLAorCQkJCQkJJmVycik7CisJCWlmIChlcnIp IHsKKwkJCWRlYnVnKCJhdWRpby5jb25mOiAlcyIsIGVyci0+bWVzc2FnZSk7CisJCQlnX2NsZWFy X2Vycm9yKCZlcnIpOworCQl9IGVsc2UKKwkJCW1hc3RlciA9IHRtcDsKKwl9CisKKwlhZGFwdGVy X2dldF9hZGRyZXNzKGFkYXB0ZXItPmJ0ZF9hZGFwdGVyLCAmc3JjKTsKKworCWlvID0gYnRfaW9f bGlzdGVuKEJUX0lPX1JGQ09NTSwgTlVMTCwgb2Zvbm9faGZfaW9fY2IsIGFkYXB0ZXIsCisJCQkJ TlVMTCwgJmVyciwKKwkJCQlCVF9JT19PUFRfU09VUkNFX0JEQUREUiwgJnNyYywKKwkJCQlCVF9J T19PUFRfQ0hBTk5FTCwgY2hhbiwKKwkJCQlCVF9JT19PUFRfU0VDX0xFVkVMLCBCVF9JT19TRUNf TUVESVVNLAorCQkJCUJUX0lPX09QVF9NQVNURVIsIG1hc3RlciwKKwkJCQlCVF9JT19PUFRfSU5W QUxJRCk7CisJaWYgKCFpbykgeworCQllcnJvcigiJXMiLCBlcnItPm1lc3NhZ2UpOworCQlnX2Vy cm9yX2ZyZWUoZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFkYXB0ZXItPmhmcF9oc19zZXJ2 ZXIgPSBpbzsKKwlyZWNvcmQgPSBoZnBfaHNfcmVjb3JkKGNoYW4pOworCWlmICghcmVjb3JkKSB7 CisJCWVycm9yKCJVbmFibGUgdG8gYWxsb2NhdGUgbmV3IHNlcnZpY2UgcmVjb3JkIik7CisJCXJl dHVybiAtMTsKKwl9CisKKwlpZiAoYWRkX3JlY29yZF90b19zZXJ2ZXIoJnNyYywgcmVjb3JkKSA8 IDApIHsKKwkJZXJyb3IoIlVuYWJsZSB0byByZWdpc3RlciBIRlAgSFMgc2VydmljZSByZWNvcmQi KTsKKwkJc2RwX3JlY29yZF9mcmVlKHJlY29yZCk7CisJCWdfaW9fY2hhbm5lbF91bnJlZihhZGFw dGVyLT5oZnBfaHNfc2VydmVyKTsKKwkJYWRhcHRlci0+aGZwX2hzX3NlcnZlciA9IE5VTEw7CisJ CXJldHVybiAtMTsKKwl9CisKKwlhZGFwdGVyLT5oZnBfaHNfcmVjb3JkX2lkID0gcmVjb3JkLT5o YW5kbGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXVkaW9fcHJvYmUoc3RydWN0IGJ0 ZF9kZXZpY2UgKmRldmljZSwgR1NMaXN0ICp1dWlkcykKIHsKIAlzdHJ1Y3QgYnRkX2FkYXB0ZXIg KmFkYXB0ZXIgPSBkZXZpY2VfZ2V0X2FkYXB0ZXIoZGV2aWNlKTsKQEAgLTEwMjIsNiArMTE2MSwy MiBAQCBzdGF0aWMgdm9pZCBhdnJjcF9zZXJ2ZXJfcmVtb3ZlKHN0cnVjdCBidGRfYWRhcHRlciAq YWRhcHRlcikKIAlhdWRpb19hZGFwdGVyX3VucmVmKGFkcCk7CiB9CiAKK3N0YXRpYyBpbnQgb2Zv bm9faGZwX3NlcnZlcl9wcm9iZShzdHJ1Y3QgYnRkX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3Ry dWN0IGF1ZGlvX2FkYXB0ZXIgKmFkcDsKKworCWFkcCA9IGF1ZGlvX2FkYXB0ZXJfZ2V0KGFkYXB0 ZXIpOworCWlmICghYWRwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBvZm9ub19oZnBf c2VydmVyX2luaXQoYWRwKTsKK30KKworc3RhdGljIHZvaWQgb2Zvbm9faGZwX3NlcnZlcl9yZW1v dmUoc3RydWN0IGJ0ZF9hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBnYXRld2F5X3NlcnZl cl9yZW1vdmUoYWRhcHRlcik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYnRkX2RldmljZV9kcml2ZXIg YXVkaW9fZHJpdmVyID0gewogCS5uYW1lCT0gImF1ZGlvIiwKIAkudXVpZHMJPSBCVERfVVVJRFMo SFNQX0hTX1VVSUQsIEhGUF9IU19VVUlELCBIU1BfQUdfVVVJRCwgSEZQX0FHX1VVSUQsCkBAIC0x MDU1LDYgKzEyMTAsMTIgQEAgc3RhdGljIHN0cnVjdCBidGRfYWRhcHRlcl9kcml2ZXIgYXZyY3Bf c2VydmVyX2RyaXZlciA9IHsKIAkucmVtb3ZlCT0gYXZyY3Bfc2VydmVyX3JlbW92ZSwKIH07CiAK K3N0YXRpYyBzdHJ1Y3QgYnRkX2FkYXB0ZXJfZHJpdmVyIG9mb25vX2hmcF9zZXJ2ZXJfZHJpdmVy ID0geworCS5uYW1lCT0gIm9mb25vLWhhbmRzZnJlZSIsCisJLnByb2JlCT0gb2Zvbm9faGZwX3Nl cnZlcl9wcm9iZSwKKwkucmVtb3ZlCT0gb2Zvbm9faGZwX3NlcnZlcl9yZW1vdmUsCit9OworCiBp bnQgYXVkaW9fbWFuYWdlcl9pbml0KERCdXNDb25uZWN0aW9uICpjb25uLCBHS2V5RmlsZSAqY29u ZiwKIAkJCQkJCQlnYm9vbGVhbiAqZW5hYmxlX3NjbykKIHsKQEAgLTEwODMsNiArMTI0NCw4IEBA IGludCBhdWRpb19tYW5hZ2VyX2luaXQoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIEdLZXlGaWxlICpj b25mLAogCQkJZW5hYmxlZC5zb3VyY2UgPSBUUlVFOwogCQllbHNlIGlmIChnX3N0cl9lcXVhbChs aXN0W2ldLCAiQ29udHJvbCIpKQogCQkJZW5hYmxlZC5jb250cm9sID0gVFJVRTsKKwkJZWxzZSBp ZiAoZ19zdHJfZXF1YWwobGlzdFtpXSwgIm9Gb25vSEZQIikpCisJCQllbmFibGVkLm9mb25vX2hm cCA9IFRSVUU7CiAJfQogCWdfc3RyZnJlZXYobGlzdCk7CiAKQEAgLTEwOTksNiArMTI2Miw4IEBA IGludCBhdWRpb19tYW5hZ2VyX2luaXQoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIEdLZXlGaWxlICpj b25mLAogCQkJZW5hYmxlZC5zb3VyY2UgPSBGQUxTRTsKIAkJZWxzZSBpZiAoZ19zdHJfZXF1YWwo bGlzdFtpXSwgIkNvbnRyb2wiKSkKIAkJCWVuYWJsZWQuY29udHJvbCA9IEZBTFNFOworCQllbHNl IGlmIChnX3N0cl9lcXVhbChsaXN0W2ldLCAib0Zvbm9IRlAiKSkKKwkJCWVuYWJsZWQub2Zvbm9f aGZwID0gRkFMU0U7CiAJfQogCWdfc3RyZnJlZXYobGlzdCk7CiAKQEAgLTExNDAsOSArMTMwNSwx MiBAQCBwcm9jZWVkOgogCWlmIChlbmFibGVkLmNvbnRyb2wpCiAJCWJ0ZF9yZWdpc3Rlcl9hZGFw dGVyX2RyaXZlcigmYXZyY3Bfc2VydmVyX2RyaXZlcik7CiAKKwlpZiAoZW5hYmxlZC5vZm9ub19o ZnApCisJCWJ0ZF9yZWdpc3Rlcl9hZGFwdGVyX2RyaXZlcigmb2Zvbm9faGZwX3NlcnZlcl9kcml2 ZXIpOworCiAJYnRkX3JlZ2lzdGVyX2RldmljZV9kcml2ZXIoJmF1ZGlvX2RyaXZlcik7CiAKLQkq ZW5hYmxlX3NjbyA9IChlbmFibGVkLmdhdGV3YXkgfHwgZW5hYmxlZC5oZWFkc2V0KTsKKwkqZW5h YmxlX3NjbyA9IChlbmFibGVkLmdhdGV3YXkgfHwgZW5hYmxlZC5oZWFkc2V0IHx8IGVuYWJsZWQu b2Zvbm9faGZwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE2OSw2ICsxMzM3LDExIEBAIHZvaWQg YXVkaW9fbWFuYWdlcl9leGl0KHZvaWQpCiAJaWYgKGVuYWJsZWQuZ2F0ZXdheSkKIAkJYnRkX3Vu cmVnaXN0ZXJfYWRhcHRlcl9kcml2ZXIoJmdhdGV3YXlfc2VydmVyX2RyaXZlcik7CiAKKwlpZiAo ZW5hYmxlZC5vZm9ub19oZnApIHsKKwkJYnRkX3VucmVnaXN0ZXJfYWRhcHRlcl9kcml2ZXIoJm9m b25vX2hmcF9zZXJ2ZXJfZHJpdmVyKTsKKwkJb2Zvbm9faGZwX2V4aXQoKTsKKwl9CisKIAlpZiAo ZW5hYmxlZC5zb3VyY2UgfHwgZW5hYmxlZC5zaW5rKQogCQlidGRfdW5yZWdpc3Rlcl9hZGFwdGVy X2RyaXZlcigmYTJkcF9zZXJ2ZXJfZHJpdmVyKTsKIApAQCAtMTIxOCw2ICsxMzkxLDEwIEBAIHN0 cnVjdCBhdWRpb19kZXZpY2UgKm1hbmFnZXJfZmluZF9kZXZpY2UoY29uc3QgY2hhciAqcGF0aCwK IAkJCQkmJiAhZGV2LT5jb250cm9sKQogCQkJY29udGludWU7CiAKKwkJaWYgKGludGVyZmFjZSAm JiAhc3RyY21wKEFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UsIGludGVyZmFjZSkKKwkJCQkmJiAh ZGV2LT5vZm9ub19oZnApCisJCQljb250aW51ZTsKKwogCQlpZiAoY29ubmVjdGVkICYmICFhdWRp b19kZXZpY2VfaXNfYWN0aXZlKGRldiwgaW50ZXJmYWNlKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYg LS1naXQgYS9hdWRpby9tYW5hZ2VyLmggYi9hdWRpby9tYW5hZ2VyLmgKaW5kZXggY2I5ZDYzYy4u NjVjYTQxOSAxMDA2NDQKLS0tIGEvYXVkaW8vbWFuYWdlci5oCisrKyBiL2F1ZGlvL21hbmFnZXIu aApAQCAtMjYsNiArMjYsNyBAQCBzdHJ1Y3QgZW5hYmxlZF9pbnRlcmZhY2VzIHsKIAlnYm9vbGVh biBoZnA7CiAJZ2Jvb2xlYW4gaGVhZHNldDsKIAlnYm9vbGVhbiBnYXRld2F5OworCWdib29sZWFu IG9mb25vX2hmcDsKIAlnYm9vbGVhbiBzaW5rOwogCWdib29sZWFuIHNvdXJjZTsKIAlnYm9vbGVh biBjb250cm9sOwpkaWZmIC0tZ2l0IGEvYXVkaW8vb2Zvbm8taGZwLmMgYi9hdWRpby9vZm9uby1o ZnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzBiMjA4Ci0tLSAvZGV2 L251bGwKKysrIGIvYXVkaW8vb2Zvbm8taGZwLmMKQEAgLTAsMCArMSw3OTcgQEAKKy8qCisgKgor ICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAqICBD b3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgTm9raWEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQg KEMpIDIwMDQtMjAwOSAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICog IENvcHlyaWdodCAoQykgMjAwOC0yMDA5ICBMZW9uaWQgTW92c2hvdmljaCA8ZXZlbnQucmlnYUBn bWFpbC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMDkgIFpoZW5odWEgWmhhbmcgPHpo ZW5odWEuemhhbmdAaW50ZWwuY29tPgorICoKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJ R19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRl IDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4K KyNpbmNsdWRlIDxnZGJ1cy5oPgorCisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPgor I2luY2x1ZGUgPGJsdWV0b290aC9yZmNvbW0uaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvaGNpLmg+ CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvc2Nv Lmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL3NkcC5oPgorI2luY2x1ZGUgPGJsdWV0b290aC9zZHBf bGliLmg+CisKKyNpbmNsdWRlICJnbGliLWhlbHBlci5oIgorI2luY2x1ZGUgImRldmljZS5oIgor I2luY2x1ZGUgImxvZ2dpbmcuaCIKKyNpbmNsdWRlICJlcnJvci5oIgorI2luY2x1ZGUgImJ0aW8u aCIKKyNpbmNsdWRlICJkYnVzLWNvbW1vbi5oIgorI2luY2x1ZGUgIm9mb25vLWhmcC5oIgorCisj ZGVmaW5lIE9GT05PX0JVU19OQU1FICJvcmcub2Zvbm8iCisjZGVmaW5lIE9GT05PX1BBVEggIi8i CisjZGVmaW5lIE9GT05PX01PREVNX0lOVEVSRkFDRSAib3JnLm9mb25vLk1vZGVtIgorI2RlZmlu ZSBPRk9OT19WQ01BTkFHRVJfSU5URVJGQUNFICJvcmcub2Zvbm8uVm9pY2VDYWxsTWFuYWdlciIK KworI2RlZmluZSBIQU5EU0ZSRUUgImhmcCIKKyNkZWZpbmUgUFJPUEVSVFlfQ0hBTkdFRCAiUHJv cGVydHlDaGFuZ2VkIgorCisjZGVmaW5lIE1BWF9PUEVOX1RSSUVTIDUKKyNkZWZpbmUgT1BFTl9X QUlUIDMwMAorCitzdHJ1Y3Qgb2Zvbm9faGZwIHsKKwllbnVtIG9mb25vX2hmcF9zdGF0ZSBzdGF0 ZTsKKwlpbnQgY2hhbm5lbDsKKwljaGFyICp0dHk7CQkvKiBndy0+dHR5IGNyZWF0ZWQgZnJvbSBy ZmNvbW0gKi8KKwlHSU9DaGFubmVsICpyZmNvbW07IAkvKiByZW1vdGUgQUcgcmVxdWVzdGVkIHJm Y29tbSBjb25uZWN0aW9uICovCisJaW50IHJmY29tbV9pZDsJCS8qIHByZXNlbnQgTiBpbiAvZGV2 L3JmY29tbU4gKi8KKwlpbnQgcmZjb21tX2ZkOworCUdJT0NoYW5uZWwgKnNjbzsKKwlvZm9ub19o ZnBfc3RyZWFtX2NiX3Qgc2NvX3N0YXJ0X2NiOworCXZvaWQgKnNjb19zdGFydF9jYl9kYXRhOwor CURCdXNNZXNzYWdlICpjb25uZWN0X21lc3NhZ2U7Cit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlv X2RldmljZSAqYWN0aXZlOwkvKiBzaW5nbGUgYWN0aXZlIGRldmljZSB3aXRoIG9Gb25vICovCitz dGF0aWMgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247CisKK3N0YXRpYyBpbnQgb2Zvbm9faGZw X2Nsb3NlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IG9mb25vX2hm cF9yZWxlYXNlX3R0eShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpOworCitzdGF0aWMgZ2Jv b2xlYW4gb2Zvbm9fc2NvX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0NvbmRpdGlvbiBjb25k LAorCQkJCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb2Zvbm9faGZwICpn dyA9IGRldi0+b2Zvbm9faGZwOworCisJaWYgKGNvbmQgJiBHX0lPX05WQUwpCisJCXJldHVybiBG QUxTRTsKKworCWlmIChjb25kICYgKEdfSU9fRVJSIHwgR19JT19IVVApKSB7CisJCWRlYnVnKCJz Y28gY29ubmVjdGlvbiBpcyByZWxlYXNlZCIpOworCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24oZ3ct PnNjbywgVFJVRSwgTlVMTCk7CisJCWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2NvKTsKKwkJZ3ct PnNjbyA9IE5VTEw7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwor c3RhdGljIHZvaWQgb2Zvbm9fc2NvX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwgR0Vycm9y ICplcnIsCisJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldiA9IChzdHJ1Y3QgYXVkaW9fZGV2aWNlICopIHVzZXJfZGF0YTsKKwlzdHJ1Y3Qgb2Zvbm9f aGZwICpndyA9IGRldi0+b2Zvbm9faGZwOworCisJZGVidWcoIkluIG9mb25vX3Njb19jb25uZWN0 X2NiKClcbiIpOworCisJZ3ctPnNjbyA9IGNoYW47CisJZ19pb19jaGFubmVsX3JlZihjaGFuKTsK KworCWlmIChlcnIpIHsKKwkJZXJyb3IoIm9mb25vX3Njb19jb25uZWN0X2NiKCk6ICVzIiwgZXJy LT5tZXNzYWdlKTsKKwkJb2Zvbm9faGZwX2Nsb3NlKGRldik7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoZ3ctPnNjb19zdGFydF9jYikKKwkJZ3ctPnNjb19zdGFydF9jYihkZXYsIGd3LT5zY29fc3Rh cnRfY2JfZGF0YSk7CisKKwlmY250bChnX2lvX2NoYW5uZWxfdW5peF9nZXRfZmQoY2hhbiksIEZf U0VURkwsIDApOworCWdfaW9fYWRkX3dhdGNoKGd3LT5zY28sIEdfSU9fRVJSIHwgR19JT19IVVAg fCBHX0lPX05WQUwsCisJCQkJKEdJT0Z1bmMpIG9mb25vX3Njb19pb19jYiwgZGV2KTsKKworfQor CitzdGF0aWMgdm9pZCBvcGVuX25vdGlmeShpbnQgZmQsIGludCBlcnIsIHN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldikKK3sKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCXN0cnVjdCBvZm9u b19oZnAgKmd3ID0gZGV2LT5vZm9ub19oZnA7CisJY29uc3QgY2hhciAqcmVzdWx0ID0gIm9rIjsK KworCWlmIChlcnIpIHsKKwkJLyogTWF4IHRyaWVzIGV4Y2VlZGVkICovCisJCW9mb25vX2hmcF9j bG9zZShkZXYpOworCisJCWlmIChndy0+Y29ubmVjdF9tZXNzYWdlKQorCQkJcmVwbHkgPSBnX2Ri dXNfY3JlYXRlX2Vycm9yKGd3LT5jb25uZWN0X21lc3NhZ2UsCisJCQkJCQlFUlJPUl9JTlRFUkZB Q0UgIi5GYWlsZWQiLAorCQkJCQkJc3RyZXJyb3IoZXJyKSk7CisJfSBlbHNlIHsKKwkJaWYgKGd3 LT5jb25uZWN0X21lc3NhZ2UpCisJCQlyZXBseSA9IGdfZGJ1c19jcmVhdGVfcmVwbHkoZ3ctPmNv bm5lY3RfbWVzc2FnZSwKKwkJCQkJCURCVVNfVFlQRV9TVFJJTkcsICZyZXN1bHQsCisJCQkJCQlE QlVTX1RZUEVfSU5WQUxJRCk7CisKKwkJZW1pdF9wcm9wZXJ0eV9jaGFuZ2VkKGRldi0+Y29ubiwg ZGV2LT5wYXRoLAorCQkJCQlBVURJT19PRk9OT19IRlBfSU5URVJGQUNFLAorCQkJCQkiRGV2aWNl IiwgREJVU19UWVBFX1NUUklORywKKwkJCQkJJmd3LT50dHkpOworCisJCWd3LT5zdGF0ZSA9IE9G T05PX0hGUF9TVEFURV9DT05ORUNURUQ7CisJCWFjdGl2ZSA9IGRldjsKKwl9CisKKwkvKiBSZXBs eSB0byB0aGUgcmVxdWVzdG9yICovCisJaWYgKGd3LT5jb25uZWN0X21lc3NhZ2UgJiYgcmVwbHkp CisJCWdfZGJ1c19zZW5kX21lc3NhZ2UoZGV2LT5jb25uLCByZXBseSk7Cit9CisKK3N0YXRpYyBn Ym9vbGVhbiBvcGVuX2NvbnRpbnVlKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYgPSB1c2VyX2RhdGE7CisJc3RydWN0IG9mb25vX2hmcCAqZ3cgPSBkZXYt Pm9mb25vX2hmcDsKKwlpbnQgZmQ7CisJc3RhdGljIGludCBudHJpZXMgPSBNQVhfT1BFTl9UUklF UzsKKworCWZkID0gb3Blbihndy0+dHR5LCBPX1JET05MWSB8IE9fTk9DVFRZKTsKKwlpZiAoZmQg PCAwKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJZXJyb3IoIkNvdWxkIG5vdCBvcGVuICVzOiAl cyAoJWQpIiwKKwkJCQlndy0+dHR5LCBzdHJlcnJvcihlcnIpLCBlcnIpOworCQlpZiAoIS0tbnRy aWVzKSB7CisJCQkvKiBSZXBvcnRpbmcgZXJyb3IgKi8KKwkJCW9wZW5fbm90aWZ5KGZkLCBlcnIs IGRldik7CisJCQludHJpZXMgPSBNQVhfT1BFTl9UUklFUzsKKwkJCXJldHVybiBGQUxTRTsKKwkJ fQorCQlyZXR1cm4gVFJVRTsKKwl9CisJLyogQ29ubmVjdGlvbiBzdWNjZWVkZWQgKi8KKwlvcGVu X25vdGlmeShmZCwgMCwgZGV2KTsKKwlndy0+cmZjb21tX2ZkID0gZmQ7CisJcmV0dXJuIEZBTFNF OworfQorCitzdGF0aWMgaW50IHBvcnRfb3BlbihzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCit7 CisJaW50IGZkOworCisJZmQgPSBvcGVuKGRldi0+b2Zvbm9faGZwLT50dHksIE9fUkRPTkxZIHwg T19OT0NUVFkpOworCWlmIChmZCA8IDApIHsKKwkJZ190aW1lb3V0X2FkZChPUEVOX1dBSVQsIG9w ZW5fY29udGludWUsIGRldik7CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJfQorCisJcmV0dXJu IGZkOworfQorCit2b2lkIHJmY29tbV9jb25uZWN0X2NiKEdJT0NoYW5uZWwgKnJmY29tbSwgR0Vy cm9yICplcnIsCisJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZp Y2UgKmRldiA9IChzdHJ1Y3QgYXVkaW9fZGV2aWNlICopdXNlcl9kYXRhOworCXN0cnVjdCBvZm9u b19oZnAgKmd3ID0gZGV2LT5vZm9ub19oZnA7CisJc3RydWN0IHJmY29tbV9kZXZfcmVxIHJlcTsK KwlpbnQgc2ssIGZkLCBpZDsKKwljb25zdCBjaGFyICplcnJfbXNnOworCWNoYXIgc3JjWzE4XSwg ZHN0WzE4XTsKKworCWlmIChlcnIpIHsKKwkJZXJyX21zZyA9IGVyci0+bWVzc2FnZTsKKwkJaWYg KGd3LT5zY29fc3RhcnRfY2IpCisJCQlndy0+c2NvX3N0YXJ0X2NiKE5VTEwsIGd3LT5zY29fc3Rh cnRfY2JfZGF0YSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwliYTJzdHIoJmRldi0+c3JjLCBzcmMp OworCWJhMnN0cigmZGV2LT5kc3QsIGRzdCk7CisKKwkvKiBtYWtlIC9kZXYvcmZjb21tIHNlcmlh bCBwb3J0IGZyb20gcmZjb21tICovCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwly ZXEuZGV2X2lkID0gLTE7CisJcmVxLmZsYWdzID0gKDEgPDwgUkZDT01NX1JFVVNFX0RMQyk7CisJ YmFjcHkoJnJlcS5zcmMsICZkZXYtPnNyYyk7CisJYmFjcHkoJnJlcS5kc3QsICZkZXYtPmRzdCk7 CisJcmVxLmNoYW5uZWwgPSBndy0+Y2hhbm5lbDsKKworCXNrID0gZ19pb19jaGFubmVsX3VuaXhf Z2V0X2ZkKHJmY29tbSk7CisJaWQgPSBpb2N0bChzaywgUkZDT01NQ1JFQVRFREVWLCAmcmVxKTsK KwlpZiAoaWQgPCAwKSB7CisJCWVycl9tc2cgPSBzdHJlcnJvcihlcnJubyk7CisJCWVycm9yKCJp b2N0bChSRkNPTU1DUkVBVEVERVYpIGZhaWxlZDogJXMgKCVkKSIsCisJCQkJc3RyZXJyb3IoZXJy bm8pLCBlcnJubyk7CisJCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihyZmNvbW0sIFRSVUUsIE5VTEwp OworCQlnX2lvX2NoYW5uZWxfdW5yZWYocmZjb21tKTsKKwkJcmZjb21tID0gTlVMTDsKKwkJZ290 byBmYWlsOworCX0KKworCWd3LT5yZmNvbW1faWQgPSBpZDsKKwlndy0+dHR5ID0gZ19zdHJkdXBf cHJpbnRmKCIvZGV2L3JmY29tbSVkIiwgaWQpOworCisJZ19pb19jaGFubmVsX3NodXRkb3duKHJm Y29tbSwgVFJVRSwgTlVMTCk7CisKKwkvKiBBZGRyZXNzaW5nIGNvbm5lY3QgcG9ydCAqLworCWZk ID0gcG9ydF9vcGVuKGRldik7CisJaWYgKGZkIDwgMCkKKwkJLyogT3BlbiBpbiBwcm9ncmVzczog V2FpdCB0aGUgY2FsbGJhY2sgKi8KKwkJcmV0dXJuOworCisJb3Blbl9ub3RpZnkoZmQsIDAsIGRl dik7CisJZ3ctPnJmY29tbV9mZCA9IGZkOworCXJldHVybjsKKworZmFpbDoKKwllcnJvcigiJXMi LCBlcnJfbXNnKTsKKwlpZiAoZ3ctPmNvbm5lY3RfbWVzc2FnZSkgeworCQllcnJvcl9jb21tb25f cmVwbHkoZGV2LT5jb25uLCBndy0+Y29ubmVjdF9tZXNzYWdlLAorCQkJCUVSUk9SX0lOVEVSRkFD RSAiLkNvbm5lY3Rpb25BdHRlbXB0RmFpbGVkIiwKKwkJCQllcnJfbXNnKTsKKwkJZGJ1c19tZXNz YWdlX3VucmVmKGd3LT5jb25uZWN0X21lc3NhZ2UpOworCQlndy0+Y29ubmVjdF9tZXNzYWdlID0g TlVMTDsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9s aXN0X3QgKnJlY3MsIGludCBwZXJyLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJc3RydWN0IGF1 ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRhOworCXN0cnVjdCBvZm9ub19oZnAgKmd3ID0gZGV2 LT5vZm9ub19oZnA7CisJaW50IGNoID0gLTE7CisJc2RwX2xpc3RfdCAqcHJvdG9zLCAqY2xhc3Nl czsKKwl1dWlkX3QgdXVpZDsKKwlvZm9ub19oZnBfc3RyZWFtX2NiX3Qgc2NvX2NiOworCUdJT0No YW5uZWwgKmlvOworCUdFcnJvciAqZXJyID0gTlVMTDsKKwljaGFyIGVycl9tc2dbMjU2XTsKKwln Ym9vbGVhbiBjb25uID0gRkFMU0U7CisKKwlpZiAocGVyciA8IDApIHsKKwkJc3ByaW50ZihlcnJf bXNnLCAiVW5hYmxlIHRvIGdldCBzZXJ2aWNlIHJlY29yZDogJXMgKCVkKSIsCisJCQkJc3RyZXJy b3IoLXBlcnIpLCAtcGVycik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIXJlY3MgfHwgIXJl Y3MtPmRhdGEpIHsKKwkJc3ByaW50ZihlcnJfbXNnLCAiTm8gcmVjb3JkcyBmb3VuZCIpOworCQln b3RvIGZhaWw7CisJfQorCisJaWYgKHNkcF9nZXRfc2VydmljZV9jbGFzc2VzKHJlY3MtPmRhdGEs ICZjbGFzc2VzKSA8IDApIHsKKwkJc3ByaW50ZihlcnJfbXNnLCAiVW5hYmxlIHRvIGdldCBzZXJ2 aWNlIGNsYXNzZXMgZnJvbSByZWNvcmQiKTsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChzZHBf Z2V0X2FjY2Vzc19wcm90b3MocmVjcy0+ZGF0YSwgJnByb3RvcykgPCAwKSB7CisJCXNwcmludGYo ZXJyX21zZywgIlVuYWJsZSB0byBnZXQgYWNjZXNzIHByb3RvY29scyBmcm9tIHJlY29yZCIpOwor CQlnb3RvIGZhaWw7CisJfQorCisJbWVtY3B5KCZ1dWlkLCBjbGFzc2VzLT5kYXRhLCBzaXplb2Yo dXVpZCkpOworCXNkcF9saXN0X2ZyZWUoY2xhc3NlcywgZnJlZSk7CisKKwlpZiAoIXNkcF91dWlk MTI4X3RvX3V1aWQoJnV1aWQpIHx8IHV1aWQudHlwZSAhPSBTRFBfVVVJRDE2IHx8CisJCQl1dWlk LnZhbHVlLnV1aWQxNiAhPSBIQU5EU0ZSRUVfQUdXX1NWQ0xBU1NfSUQpIHsKKwkJc2RwX2xpc3Rf ZnJlZShwcm90b3MsIE5VTEwpOworCQlzcHJpbnRmKGVycl9tc2csICJJbnZhbGlkIHNlcnZpY2Ug cmVjb3JkIG9yIG5vdCBIRlAiKTsKKwkJZ290byBmYWlsOworCX0KKworCWNoID0gc2RwX2dldF9w cm90b19wb3J0KHByb3RvcywgUkZDT01NX1VVSUQpOworCXNkcF9saXN0X2ZvcmVhY2gocHJvdG9z LCAoc2RwX2xpc3RfZnVuY190KSBzZHBfbGlzdF9mcmVlLCBOVUxMKTsKKwlzZHBfbGlzdF9mcmVl KHByb3RvcywgTlVMTCk7CisJaWYgKGNoIDw9IDApIHsKKwkJc3ByaW50ZihlcnJfbXNnLCAiVW5h YmxlIHRvIGV4dHJhY3QgUkZDT01NIGNoYW5uZWwiCisJCQkJCSJmcm9tIHNlcnZpY2UgcmVjb3Jk Iik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlndy0+Y2hhbm5lbCA9IGNoOworCisJaW8gPSBidF9p b19jb25uZWN0KEJUX0lPX1JGQ09NTSwgcmZjb21tX2Nvbm5lY3RfY2IsIGRldiwgTlVMTCwgJmVy ciwKKwkJCQlCVF9JT19PUFRfU09VUkNFX0JEQUREUiwgJmRldi0+c3JjLAorCQkJCUJUX0lPX09Q VF9ERVNUX0JEQUREUiwgJmRldi0+ZHN0LAorCQkJCUJUX0lPX09QVF9DSEFOTkVMLCBjaCwKKwkJ CQlCVF9JT19PUFRfSU5WQUxJRCk7CisJaWYgKCFpbykgeworCQlzcHJpbnRmKGVycl9tc2csICJV bmFibGUgdG8gY29ubmVjdDogJXMiLCBlcnItPm1lc3NhZ2UpOworCQlpZiAoZXJyKQorCQkJZ19l cnJvcl9mcmVlKGVycik7CisJCW9mb25vX2hmcF9jbG9zZShkZXYpOworCQlnb3RvIGZhaWw7CisJ fQorCisJZ19pb19jaGFubmVsX3VucmVmKGlvKTsKKwlyZXR1cm47CisKK2ZhaWw6CisJZXJyb3Io IiVzIiwgZXJyX21zZyk7CisJaWYgKGd3LT5jb25uZWN0X21lc3NhZ2UpIHsKKwkJZXJyb3JfY29t bW9uX3JlcGx5KGRldi0+Y29ubiwgZ3ctPmNvbm5lY3RfbWVzc2FnZSwKKwkJCQlFUlJPUl9JTlRF UkZBQ0UgIi5Db25uZWN0aW9uQXR0ZW1wdEZhaWxlZCIsCisJCQkJZXJyX21zZyk7CisJCWRidXNf bWVzc2FnZV91bnJlZihndy0+Y29ubmVjdF9tZXNzYWdlKTsKKwkJZ3ctPmNvbm5lY3RfbWVzc2Fn ZSA9IE5VTEw7CisJfQorCisJZW1pdF9wcm9wZXJ0eV9jaGFuZ2VkKGRldi0+Y29ubiwgZGV2LT5w YXRoLAorCQkJCUFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UsCisJCQkJIkNvbm5lY3RlZCIsIERC VVNfVFlQRV9CT09MRUFOLCAmY29ubik7CisKKwlzY29fY2IgPSBkZXYtPm9mb25vX2hmcC0+c2Nv X3N0YXJ0X2NiOworCWlmIChzY29fY2IpCisJCXNjb19jYihOVUxMLCBkZXYtPm9mb25vX2hmcC0+ c2NvX3N0YXJ0X2NiX2RhdGEpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBnZXRfcmVjb3Jk cyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCit7CisJdXVpZF90IHV1aWQ7CisKKwlzZHBf dXVpZDE2X2NyZWF0ZSgmdXVpZCwgSEFORFNGUkVFX0FHV19TVkNMQVNTX0lEKTsKKwlyZXR1cm4g YnRfc2VhcmNoX3NlcnZpY2UoJmRldmljZS0+c3JjLCAmZGV2aWNlLT5kc3QsICZ1dWlkLAorCQkJ CWdldF9yZWNvcmRfY2IsIGRldmljZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAq b2Zvbm9fY29ubmVjdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKKwkJ CQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmF1X2RldiA9IChzdHJ1Y3Qg YXVkaW9fZGV2aWNlICopIGRhdGE7CisJc3RydWN0IG9mb25vX2hmcCAqZ3cgPSBhdV9kZXYtPm9m b25vX2hmcDsKKworCWRlYnVnKCJhdCB0aGUgYmVnaW4gb2Ygb2Zvbm9fY29ubmVjdCgpICVwIiwg YXVfZGV2KTsKKworCWlmIChndy0+dHR5KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvciht c2csIEVSUk9SX0lOVEVSRkFDRQorCQkJCQkiLkFscmVhZHlDb25uZWN0ZWQiLAorCQkJCQkiQWxy ZWFkeSBDb25uZWN0ZWQiKTsKKworCWd3LT5jb25uZWN0X21lc3NhZ2UgPSBkYnVzX21lc3NhZ2Vf cmVmKG1zZyk7CisJaWYgKGdldF9yZWNvcmRzKGF1X2RldikgPCAwKSB7CisJCWRidXNfbWVzc2Fn ZV91bnJlZihndy0+Y29ubmVjdF9tZXNzYWdlKTsKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJy b3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJIi5Db25uZWN0QXR0ZW1wdEZhaWxlZCIsCisJ CQkJCSJDb25uZWN0IEF0dGVtcHQgRmFpbGVkIik7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyBpbnQgb2Zvbm9faGZwX3JlbGVhc2VfdHR5KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRl dmljZSkKK3sKKwlzdHJ1Y3Qgb2Zvbm9faGZwICpndyA9IGRldmljZS0+b2Zvbm9faGZwOworCXN0 cnVjdCByZmNvbW1fZGV2X3JlcSByZXE7CisJaW50IHJmY29tbV9jdGw7CisJaW50IGVyciA9IDA7 CisKKwlyZmNvbW1fY3RsID0gc29ja2V0KEFGX0JMVUVUT09USCwgU09DS19SQVcsIEJUUFJPVE9f UkZDT01NKTsKKwlpZiAocmZjb21tX2N0bCA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlpZiAo Z3ctPnJmY29tbV9mZCkgeworCQljbG9zZShndy0+cmZjb21tX2ZkKTsKKwkJZ3ctPnJmY29tbV9m ZCA9IC0xOworCX0KKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJcmVxLmRldl9p ZCA9IGd3LT5yZmNvbW1faWQ7CisKKwlyZXEuZmxhZ3MgPSAoMSA8PCBSRkNPTU1fSEFOR1VQX05P Vyk7CisKKwlpZiAoaW9jdGwocmZjb21tX2N0bCwgUkZDT01NUkVMRUFTRURFViwgJnJlcSkgPCAw KSB7CisJCWVyciA9IGVycm5vOworCQllcnJvcigiQ2FuJ3QgcmVsZWFzZSBkZXZpY2UgJXM6ICVz ICglZCkiLAorCQkJCWd3LT50dHksIHN0cmVycm9yKGVyciksIGVycik7CisJfQorCWNsb3NlKHJm Y29tbV9jdGwpOworCWd3LT5yZmNvbW1faWQgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBvZm9ub19oZnBfY2xvc2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQoreworCXN0 cnVjdCBvZm9ub19oZnAgKmd3ID0gZGV2aWNlLT5vZm9ub19oZnA7CisJZ2Jvb2xlYW4gdmFsdWUg PSBGQUxTRTsKKworCWlmIChndy0+dHR5KSB7CisJCW9mb25vX2hmcF9yZWxlYXNlX3R0eShkZXZp Y2UpOworCQlnX2ZyZWUoZ3ctPnR0eSk7CisJCWd3LT50dHkgPSBOVUxMOworCX0KKworCWlmIChn dy0+cmZjb21tKSB7CisJCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihndy0+cmZjb21tLCBUUlVFLCBO VUxMKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKGd3LT5yZmNvbW0pOworCQlndy0+cmZjb21tID0g TlVMTDsKKwl9CisKKwlpZiAoZ3ctPnNjbykgeworCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24oZ3ct PnNjbywgVFJVRSwgTlVMTCk7CisJCWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2NvKTsKKwkJZ3ct PnNjbyA9IE5VTEw7CisJCWd3LT5zY29fc3RhcnRfY2IgPSBOVUxMOworCQlndy0+c2NvX3N0YXJ0 X2NiX2RhdGEgPSBOVUxMOworCX0KKworCWd3LT5zdGF0ZSA9IE9GT05PX0hGUF9TVEFURV9ESVND T05ORUNURUQ7CisKKwllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2aWNlLT5jb25uLCBkZXZpY2Ut PnBhdGgsCisJCQkJQVVESU9fT0ZPTk9fSEZQX0lOVEVSRkFDRSwKKwkJCQkiQ29ubmVjdGVkIiwg REJVU19UWVBFX0JPT0xFQU4sICZ2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBEQnVz TWVzc2FnZSAqb2Zvbm9fZGlzY29ubmVjdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3Nh Z2UgKm1zZywKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZp Y2UgPSBkYXRhOworCXN0cnVjdCBvZm9ub19oZnAgKmd3ID0gZGV2aWNlLT5vZm9ub19oZnA7CisJ REJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwljaGFyIGd3X2FkZHJbMThdOworCisJaWYgKGNv bm5lY3Rpb24gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXBseSA9IGRidXNfbWVzc2Fn ZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxMOwor CisJaWYgKCFndy0+dHR5ICYmICFndy0+cmZjb21tKQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9l cnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQorCQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAorCQkJCQkJ IkRldmljZSBub3QgQ29ubmVjdGVkIik7CisKKwlvZm9ub19oZnBfY2xvc2UoZGV2aWNlKTsKKwli YTJzdHIoJmRldmljZS0+ZHN0LCBnd19hZGRyKTsKKwlkZWJ1ZygiRGlzY29ubmVjdGVkIGZyb20g JXMsICVzIiwgZ3dfYWRkciwgZGV2aWNlLT5wYXRoKTsKKworCXJldHVybiByZXBseTsKK30KKwor c3RhdGljIEdEQnVzTWV0aG9kVGFibGUgb2Zvbm9faGZwX21ldGhvZHNbXSA9IHsKKwl7ICJDb25u ZWN0IiwgIiIsICIiLCBvZm9ub19jb25uZWN0LCBHX0RCVVNfTUVUSE9EX0ZMQUdfQVNZTkMgfSwK Kwl7ICJEaXNjb25uZWN0IiwgIiIsICIiLCBvZm9ub19kaXNjb25uZWN0IH0sCisJeyBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBHREJ1c1NpZ25hbFRhYmxlIG9mb25vX2hm cF9zaWduYWxzW10gPSB7CisJeyAiUHJvcGVydHlDaGFuZ2VkIiwgInN2IiB9LAorCXsgIkNhbGxT dGFydGVkIiwgIiIgfSwKKwl7ICJDYWxsRW5kZWQiLCAiIiB9LAorCXsgTlVMTCwgTlVMTCB9Cit9 OworCitzdGF0aWMgdm9pZCBoYW5kbGVfdmNtYW5hZ2VyX3Byb3BlcnR5X2NoYW5nZWQoREJ1c01l c3NhZ2UgKm1zZywKKwkJCQkJCXZvaWQgKnVzZXJfZGF0YSwKKwkJCQkJCWNvbnN0IGNoYXIgKm9i al9wYXRoKQoreworCURCdXNNZXNzYWdlSXRlciBpdGVyLCBzdWIsIGFycmF5OworCXN0cnVjdCBh dWRpb19kZXZpY2UgKmRldiA9IChzdHJ1Y3QgYXVkaW9fZGV2aWNlICopIHVzZXJfZGF0YTsKKwlz dHJ1Y3Qgb2Zvbm9faGZwICpndyA9IGRldi0+b2Zvbm9faGZwOworCWNvbnN0IGNoYXIgKnByb3Bl cnR5LCAqdmNfb2JqX3BhdGggPSBOVUxMOworCXVuc2lnbmVkIGludCBjYWxsX251bSA9IDA7CisK KwlpZiAoZGV2ICE9IGFjdGl2ZSB8fCBndy0+c3RhdGUgIT0gT0ZPTk9fSEZQX1NUQVRFX0NPTk5F Q1RFRCkKKwkJcmV0dXJuOworCisJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtc2csICZpdGVyKTsK KworCWlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQ RV9TVFJJTkcpIHsKKwkJZXJyb3IoIlVuZXhwZWN0ZWQgc2lnbmF0dXJlIGluIHZjbWFuYWdlciIK KwkJCQkJIiBQcm9wZXJ0eUNoYW5nZWQgc2lnbmFsIik7CisJCXJldHVybjsKKwl9CisKKwlkYnVz X21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZwcm9wZXJ0eSk7CisKKwlkYnVzX21lc3Nh Z2VfaXRlcl9uZXh0KCZpdGVyKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAm c3ViKTsKKwlpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZzdWIpICE9IERCVVNf VFlQRV9BUlJBWSkgeworCQllcnJvcigiVW5leHBlY3RlZCBzaWduYXR1cmUgaW4gdmNtYW5hZ2Vy IgorCQkJCQkiIFByb3BlcnR5Q2hhbmdlZCBzaWduYWwiKTsKKwkJcmV0dXJuOworCX0KKwlkYnVz X21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZzdWIsICZhcnJheSk7CisJd2hpbGUgKGRidXNfbWVzc2Fn ZV9pdGVyX2dldF9hcmdfdHlwZSgmYXJyYXkpICE9IERCVVNfVFlQRV9JTlZBTElEKSB7CisJCWRi dXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmYXJyYXksICZ2Y19vYmpfcGF0aCk7CisJCWNhbGxf bnVtKys7CisJCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJmFycmF5KTsKKwl9CisKKwlpZiAoY2Fs bF9udW0gPT0gMSkgeworCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgs CisJCQkJCUFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UsCisJCQkJCSJDYWxsU3RhcnRlZCIsIERC VVNfVFlQRV9JTlZBTElEKTsKKwl9IGVsc2UgaWYgKGNhbGxfbnVtID09IDApIHsKKwkJZ19kYnVz X2VtaXRfc2lnbmFsKGRldi0+Y29ubiwgZGV2LT5wYXRoLAorCQkJCQlBVURJT19PRk9OT19IRlBf SU5URVJGQUNFLAorCQkJCQkiQ2FsbEVuZGVkIiwgREJVU19UWVBFX0lOVkFMSUQpOworCX0KK30K Kworc3RhdGljIHZvaWQgaGFuZGxlX29mb25vX2hmcF9wcm9wZXJ0eShjb25zdCBjaGFyICpwcm9w ZXJ0eSwKKwlEQnVzTWVzc2FnZUl0ZXIgc3ViLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2ID0gKHN0cnVjdCBhdWRpb19kZXZpY2UgKikgdXNlcl9kYXRhOwor CXN0cnVjdCBvZm9ub19oZnAgKmd3ID0gZGV2LT5vZm9ub19oZnA7CisJZ2Jvb2xlYW4gcG93ZXJl ZDsKKwljb25zdCBjaGFyICpjYWxsczsKKworCWlmIChkZXYgIT0gYWN0aXZlKQorCQlyZXR1cm47 CisKKwlpZiAoZ19zdHJfZXF1YWwocHJvcGVydHksICJQb3dlcmVkIikpIHsKKwkJaWYgKGRidXNf bWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3ViKSAhPSBEQlVTX1RZUEVfQk9PTEVBTikgewor CQkJZXJyb3IoIkludmFsaWQgYXJnIHR5cGUgb2YgUG93ZXJlZCIpOworCQkJcmV0dXJuOworCQl9 CisJCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmc3ViLCAmcG93ZXJlZCk7CisKKwkJZ3ct PnN0YXRlID0gcG93ZXJlZDsKKwkJaWYgKHBvd2VyZWQpCisJCQlndy0+c3RhdGUgPSBPRk9OT19I RlBfU1RBVEVfQ09OTkVDVEVEOworCQllbHNlCisJCQlvZm9ub19oZnBfY2xvc2UoZGV2KTsKKwl9 IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHByb3BlcnR5LCAiUHJvcGVydHlDaGFuZ2VkIikpIHsKKwkJ aWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3ViKSAhPSBEQlVTX1RZUEVfU1RS SU5HKSB7CisJCQllcnJvcigiSW52YWxpZCBhcmcgdHlwZSBvZiBQb3dlcmVkIik7CisJCQlyZXR1 cm47CisJCX0KKwkJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZzdWIsICZjYWxscyk7CisK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9vZm9ub19oZnBfcHJvcGVydHlfY2hhbmdlZChE QnVzTWVzc2FnZSAqbXNnLAorCQkJCQl2b2lkICp1c2VyX2RhdGEpCit7CisJREJ1c01lc3NhZ2VJ dGVyIGl0ZXIsIHN1YjsKKwljb25zdCBjaGFyICpwcm9wZXJ0eTsKKworCWRidXNfbWVzc2FnZV9p dGVyX2luaXQobXNnLCAmaXRlcik7CisKKwlpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190 eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfU1RSSU5HKSB7CisJCWVycm9yKCJVbmV4cGVjdGVkIHNp Z25hdHVyZSBpbiBvRm9ubyBQcm9wZXJ0eUNoYW5nZWQgc2lnbmFsIik7CisJCXJldHVybjsKKwl9 CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmcHJvcGVydHkpOworCisJZGJ1 c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgm aXRlciwgJnN1Yik7CisKKwloYW5kbGVfb2Zvbm9faGZwX3Byb3BlcnR5KHByb3BlcnR5LCBzdWIs IHVzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBvZm9ub19zaWduYWwo REJ1c0Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqdXNlcl9k YXRhKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJaWYgKGRidXNfbWVzc2FnZV9nZXRfdHlwZSht c2cpICE9IERCVVNfTUVTU0FHRV9UWVBFX1NJR05BTCkKKwkJcmV0dXJuIERCVVNfSEFORExFUl9S RVNVTFRfTk9UX1lFVF9IQU5ETEVEOworCisJcGF0aCA9IGRidXNfbWVzc2FnZV9nZXRfcGF0aCht c2cpOworCisJaWYgKHN0cnN0cihwYXRoLCBIQU5EU0ZSRUUpKSB7CisJCWlmIChkYnVzX21lc3Nh Z2VfaXNfc2lnbmFsKG1zZywKKwkJCQlPRk9OT19NT0RFTV9JTlRFUkZBQ0UsIFBST1BFUlRZX0NI QU5HRUQpKSB7CisJCQloYW5kbGVfb2Zvbm9faGZwX3Byb3BlcnR5X2NoYW5nZWQobXNnLCB1c2Vy X2RhdGEpOworCQkJcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOwor CQl9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobXNnLAorCQkJCU9GT05PX1ZDTUFO QUdFUl9JTlRFUkZBQ0UsIFBST1BFUlRZX0NIQU5HRUQpKSB7CisJCQloYW5kbGVfdmNtYW5hZ2Vy X3Byb3BlcnR5X2NoYW5nZWQobXNnLCB1c2VyX2RhdGEsIHBhdGgpOworCQkJcmV0dXJuIERCVVNf SEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworCQl9CisJfQorCisJcmV0dXJuIERCVVNf SEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQorCitzdHJ1Y3Qgb2Zvbm9faGZwICpv Zm9ub19oZnBfaW5pdChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9mb25v X2hmcCAqZ3c7CisJY2hhciBtYXRjaF9zdHJpbmdbMTI4XTsKKworCWd3ID0gZ19uZXcwKHN0cnVj dCBvZm9ub19oZnAsIDEpOworCisJY29ubmVjdGlvbiA9IGRidXNfY29ubmVjdGlvbl9yZWYoZGV2 LT5jb25uKTsKKworCWlmICghZ19kYnVzX3JlZ2lzdGVyX2ludGVyZmFjZShkZXYtPmNvbm4sIGRl di0+cGF0aCwKKwkJCQkJQVVESU9fT0ZPTk9fSEZQX0lOVEVSRkFDRSwKKwkJCQkJb2Zvbm9faGZw X21ldGhvZHMsIG9mb25vX2hmcF9zaWduYWxzLAorCQkJCQlOVUxMLCBkZXYsIE5VTEwpKQorCQly ZXR1cm4gTlVMTDsKKworCWlmICghZGJ1c19jb25uZWN0aW9uX2FkZF9maWx0ZXIoZGV2LT5jb25u LCBvZm9ub19zaWduYWwsCisJCQkJCWRldiwgTlVMTCkpIHsKKwkJZXJyb3IoIm9mb25vX2hmcDog Q2FuJ3QgYWRkIHNpZ25hbCBmaWx0ZXIiKTsKKwl9CisKKwlzbnByaW50ZihtYXRjaF9zdHJpbmcs IHNpemVvZihtYXRjaF9zdHJpbmcpLCAidHlwZT1zaWduYWwsaW50ZXJmYWNlPSVzIiwKKwkJCU9G T05PX01PREVNX0lOVEVSRkFDRSk7CisJZGJ1c19idXNfYWRkX21hdGNoKGRldi0+Y29ubiwgbWF0 Y2hfc3RyaW5nLCBOVUxMKTsKKworCXNucHJpbnRmKG1hdGNoX3N0cmluZywgc2l6ZW9mKG1hdGNo X3N0cmluZyksICJ0eXBlPXNpZ25hbCxpbnRlcmZhY2U9JXMiLAorCQkJT0ZPTk9fVkNNQU5BR0VS X0lOVEVSRkFDRSk7CisJZGJ1c19idXNfYWRkX21hdGNoKGRldi0+Y29ubiwgbWF0Y2hfc3RyaW5n LCBOVUxMKTsKKworCXJldHVybiBndzsKK30KKwordm9pZCBvZm9ub19oZnBfZXhpdCgpCit7CisJ ZGJ1c19jb25uZWN0aW9uX3JlbW92ZV9maWx0ZXIoY29ubmVjdGlvbiwgb2Zvbm9fc2lnbmFsLCBO VUxMKTsKKwlkYnVzX2Nvbm5lY3Rpb25fdW5yZWYoY29ubmVjdGlvbik7CisJY29ubmVjdGlvbiA9 IE5VTEw7Cit9CisKK2dib29sZWFuIG9mb25vX2hmcF9pc19jb25uZWN0ZWQoc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2ICYmIGRldi0+b2Zvbm9faGZwICYmCisJCQlk ZXYtPm9mb25vX2hmcC0+c3RhdGUgPT0gT0ZPTk9fSEZQX1NUQVRFX0NPTk5FQ1RFRCk7Cit9CisK K2ludCBvZm9ub19oZnBfY29ubmVjdF9zY28oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9D aGFubmVsICppbykKK3sKKwlzdHJ1Y3Qgb2Zvbm9faGZwICpndyA9IGRldi0+b2Zvbm9faGZwOwor CisJaWYgKGd3LT5zY28pCisJCXJldHVybiAtRUlTQ09OTjsKKworCWd3LT5zY28gPSBnX2lvX2No YW5uZWxfcmVmKGlvKTsKKworCWdfaW9fYWRkX3dhdGNoKGd3LT5zY28sIEdfSU9fRVJSIHwgR19J T19IVVAgfCBHX0lPX05WQUwsCisJCQkoR0lPRnVuYykgb2Zvbm9fc2NvX2lvX2NiLCBkZXYpOwor CisJcmV0dXJuIDA7Cit9CisKK2ludCBvZm9ub19oZnBfY29ubmVjdF9yZmNvbW0oc3RydWN0IGF1 ZGlvX2RldmljZSAqZGV2LAorCQlHSU9DaGFubmVsICpjaGFuLCBpbnQgY2gpCit7CisJaWYgKCFj aGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdfaW9fY2hhbm5lbF9yZWYoY2hhbik7CisJZGV2 LT5vZm9ub19oZnAtPnJmY29tbSA9IGNoYW47CisJZGV2LT5vZm9ub19oZnAtPmNoYW5uZWwgPSBj aDsKKworCXJldHVybiAwOworfQorCit2b2lkIG9mb25vX2hmcF9zdGFydF9zZXJ2aWNlKHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb2Zvbm9faGZwICpndyA9IGRldi0+b2Zv bm9faGZwOworCUdFcnJvciAqZXJyID0gTlVMTDsKKworCWlmIChndy0+cmZjb21tID09IE5VTEwp CisJCXJldHVybjsKKworCWlmICghYnRfaW9fYWNjZXB0KGd3LT5yZmNvbW0sIHJmY29tbV9jb25u ZWN0X2NiLCBkZXYsIE5VTEwsCisJCQkJCQkJJmVycikpIHsKKwkJZXJyb3IoImJ0X2lvX2FjY2Vw dDogJXMiLCBlcnItPm1lc3NhZ2UpOworCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKwl9Cit9CisKKy8q IFRoZXNlIGFyZSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20gdW5peC5jIGZvciBhdWRpbyBz eXN0ZW0KKyAqIGlmYWNlcyAoYWxzYSwgZ3N0cmVhbWVyLCBldGMuKSAqLworZ2Jvb2xlYW4gb2Zv bm9faGZwX3JlcXVlc3Rfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJCQlvZm9u b19oZnBfc3RyZWFtX2NiX3QgY2IsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2Zvbm9f aGZwICpndyA9IGRldi0+b2Zvbm9faGZwOworCUdFcnJvciAqZXJyID0gTlVMTDsKKwlHSU9DaGFu bmVsICppbzsKKworCWlmICghZ3ctPnR0eSAmJiAhZ3ctPnJmY29tbSkgeworCQlndy0+c2NvX3N0 YXJ0X2NiID0gY2I7CisJCWd3LT5zY29fc3RhcnRfY2JfZGF0YSA9IHVzZXJfZGF0YTsKKwkJZ2V0 X3JlY29yZHMoZGV2KTsKKwl9IGVsc2UgaWYgKCFndy0+c2NvKSB7CisJCWNoYXIgc291cmNlWzEy OF0sIGRlc3RpbmF0aW9uWzEyOF07CisKKwkJZ3ctPnNjb19zdGFydF9jYiA9IGNiOworCQlndy0+ c2NvX3N0YXJ0X2NiX2RhdGEgPSB1c2VyX2RhdGE7CisJCWJhMnN0cigmZGV2LT5zcmMsIHNvdXJj ZSk7CisJCWJhMnN0cigmZGV2LT5kc3QsIGRlc3RpbmF0aW9uKTsKKwkJaW8gPSBidF9pb19jb25u ZWN0KEJUX0lPX1NDTywgb2Zvbm9fc2NvX2Nvbm5lY3RfY2IsIGRldiwKKwkJCQlOVUxMLCAmZXJy LAorCQkJCUJUX0lPX09QVF9TT1VSQ0VfQkRBRERSLCAmZGV2LT5zcmMsCisJCQkJQlRfSU9fT1BU X0RFU1RfQkRBRERSLCAmZGV2LT5kc3QsCisJCQkJQlRfSU9fT1BUX0lOVkFMSUQpOworCQlpZiAo IWlvKSB7CisJCQllcnJvcigiJXMiLCBlcnItPm1lc3NhZ2UpOworCQkJZ19lcnJvcl9mcmVlKGVy cik7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY2IpCisJCQljYihk ZXYsIHVzZXJfZGF0YSk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK2ludCBvZm9ub19oZnBf Y29uZmlnX3N0cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCisJCQkJb2Zvbm9faGZwX3N0 cmVhbV9jYl90IHNjb19jYiwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBvZm9ub19oZnAg Kmd3ID0gZGV2LT5vZm9ub19oZnA7CisKKwlpZiAoIWd3LT5yZmNvbW0gJiYgIWd3LT50dHkpIHsK KwkJZ3ctPnNjb19zdGFydF9jYiA9IHNjb19jYjsKKwkJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0g dXNlcl9kYXRhOworCQlyZXR1cm4gZ2V0X3JlY29yZHMoZGV2KTsKKwl9CisKKwlpZiAoc2NvX2Ni KQorCQlzY29fY2IoZGV2LCB1c2VyX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK2dib29sZWFu IG9mb25vX2hmcF9jYW5jZWxfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdW5zaWdu ZWQgaW50IGlkKQoreworCW9mb25vX2hmcF9jbG9zZShkZXYpOworCXJldHVybiBUUlVFOworfQor CitpbnQgb2Zvbm9faGZwX2dldF9zY29fZmQoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQorewor CXN0cnVjdCBvZm9ub19oZnAgKmd3ID0gZGV2LT5vZm9ub19oZnA7CisKKwlpZiAoIWd3IHx8ICFn dy0+c2NvKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ19pb19jaGFubmVsX3VuaXhfZ2V0X2Zk KGd3LT5zY28pOworfQorCit2b2lkIG9mb25vX2hmcF9zdXNwZW5kX3N0cmVhbShzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9mb25vX2hmcCAqZ3cgPSBkZXYtPm9mb25vX2hm cDsKKworCWlmICghZ3cgfHwgIWd3LT5zY28pCisJCXJldHVybjsKKworCWdfaW9fY2hhbm5lbF9z aHV0ZG93bihndy0+c2NvLCBUUlVFLCBOVUxMKTsKKwlnX2lvX2NoYW5uZWxfdW5yZWYoZ3ctPnNj byk7CisJZ3ctPnNjbyA9IE5VTEw7CisJZ3ctPnNjb19zdGFydF9jYiA9IE5VTEw7CisJZ3ctPnNj b19zdGFydF9jYl9kYXRhID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2F1ZGlvL29mb25vLWhmcC5o IGIvYXVkaW8vb2Zvbm8taGZwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YThjYjVkZgotLS0gL2Rldi9udWxsCisrKyBiL2F1ZGlvL29mb25vLWhmcC5oCkBAIC0wLDAgKzEs NTAgQEAKKy8qCisgKgorICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBM aW51eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgTm9raWEgQ29ycG9yYXRpb24K KyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9s dG1hbm4ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDA5ICBaaGVuaHVhIFpoYW5nIDx6 aGVuaHVhLnpoYW5nQGludGVsLmNvbT4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjZGVmaW5lIEFVRElPX09G T05PX0hGUF9JTlRFUkZBQ0UgIm9yZy5ibHVlei5vRm9ub0hGUCIKKworZW51bSBvZm9ub19oZnBf c3RhdGV7CisJT0ZPTk9fSEZQX1NUQVRFX0RJU0NPTk5FQ1RFRCwKKwlPRk9OT19IRlBfU1RBVEVf Q09OTkVDVEVECit9OworCit0eXBlZGVmIHZvaWQgKCpvZm9ub19oZnBfc3RyZWFtX2NiX3QpIChz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCisJCQl2b2lkICp1c2VyX2RhdGEpOworCitzdHJ1Y3Qg b2Zvbm9faGZwICpvZm9ub19oZnBfaW5pdChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpOwor dm9pZCBvZm9ub19oZnBfZXhpdCgpOworZ2Jvb2xlYW4gb2Zvbm9faGZwX2lzX2Nvbm5lY3RlZChz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpOworaW50IG9mb25vX2hmcF9jb25uZWN0X3NjbyhzdHJ1 Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKmNoYW4pOwordm9pZCByZmNvbW1fY29u bmVjdF9jYihHSU9DaGFubmVsICpyZmNvbW0sIEdFcnJvciAqZXJyLCBncG9pbnRlciB1c2VyX2Rh dGEpOworaW50IG9mb25vX2hmcF9jb25uZWN0X3JmY29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXYsCisJCQlHSU9DaGFubmVsICpjaGFuLCBpbnQgY2gpOwordm9pZCBvZm9ub19oZnBfc3RhcnRf c2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpOworZ2Jvb2xlYW4gb2Zvbm9faGZw X3JlcXVlc3Rfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJCW9mb25vX2hmcF9z dHJlYW1fY2JfdCBjYiwgdm9pZCAqdXNlcl9kYXRhKTsKK2ludCBvZm9ub19oZnBfY29uZmlnX3N0 cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIG9mb25vX2hmcF9zdHJlYW1fY2JfdCBjYiwK KwkJCXZvaWQgKnVzZXJfZGF0YSk7CitnYm9vbGVhbiBvZm9ub19oZnBfY2FuY2VsX3N0cmVhbShz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgb2Zvbm9faGZw X2dldF9zY29fZmQoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KTsKK3ZvaWQgb2Zvbm9faGZwX3N1 c3BlbmRfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9hdWRp by91bml4LmMgYi9hdWRpby91bml4LmMKaW5kZXggNmI0M2JkNC4uZTRmNGU0ZCAxMDA2NDQKLS0t IGEvYXVkaW8vdW5peC5jCisrKyBiL2F1ZGlvL3VuaXguYwpAQCAtNDgsNiArNDgsNyBAQAogI2lu Y2x1ZGUgImhlYWRzZXQuaCIKICNpbmNsdWRlICJzaW5rLmgiCiAjaW5jbHVkZSAiZ2F0ZXdheS5o IgorI2luY2x1ZGUgIm9mb25vLWhmcC5oIgogI2luY2x1ZGUgInVuaXguaCIKICNpbmNsdWRlICJn bGliLWhlbHBlci5oIgogCkBAIC01Nyw4ICs1OCw5IEBAIHR5cGVkZWYgZW51bSB7CiAJVFlQRV9O T05FLAogCVRZUEVfSEVBRFNFVCwKIAlUWVBFX0dBVEVXQVksCisJVFlQRV9PRk9OT19IRlAsCiAJ VFlQRV9TSU5LLAotCVRZUEVfU09VUkNFCisJVFlQRV9TT1VSQ0UsCiB9IHNlcnZpY2VfdHlwZV90 OwogCiB0eXBlZGVmIHZvaWQgKCpub3RpZnlfY2JfdCkgKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSk7CkBAIC0xOTYsNiArMTk4LDkgQEAgc3RhdGljIHNlcnZpY2VfdHlwZV90 IHNlbGVjdF9zZXJ2aWNlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaW50 ZXIKIAkJcmV0dXJuIFRZUEVfSEVBRFNFVDsKIAllbHNlIGlmICghc3RyY21wKGludGVyZmFjZSwg QVVESU9fR0FURVdBWV9JTlRFUkZBQ0UpICYmIGRldi0+Z2F0ZXdheSkKIAkJcmV0dXJuIFRZUEVf R0FURVdBWTsKKwllbHNlIGlmICghc3RyY21wKGludGVyZmFjZSwgQVVESU9fT0ZPTk9fSEZQX0lO VEVSRkFDRSkKKwkJCQkJJiYgZGV2LT5vZm9ub19oZnApCisJCXJldHVybiBUWVBFX09GT05PX0hG UDsKIAogCXJldHVybiBUWVBFX05PTkU7CiB9CkBAIC0zNDQsNiArMzQ5LDMyIEBAIHN0YXRpYyB2 b2lkIGdhdGV3YXlfc2V0dXBfY29tcGxldGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB2b2lk ICp1c2VyX2RhdGEpCiAJdW5peF9pcGNfc2VuZG1zZyhjbGllbnQsICZyc3AtPmgpOwogfQogCitz dGF0aWMgdm9pZCBvZm9ub19oZnBfc2V0dXBfY29tcGxldGUoc3RydWN0IGF1ZGlvX2RldmljZSAq ZGV2LCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQgPSB1 c2VyX2RhdGE7CisJY2hhciBidWZbQlRfU1VHR0VTVEVEX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3Qg YnRfc2V0X2NvbmZpZ3VyYXRpb25fcnNwICpyc3AgPSAodm9pZCAqKSBidWY7CisKKwlpZiAoIWRl dikgeworCQl1bml4X2lwY19lcnJvcihjbGllbnQsIEJUX1NFVF9DT05GSUdVUkFUSU9OLCBFSU8p OworCQlyZXR1cm47CisJfQorCisJY2xpZW50LT5yZXFfaWQgPSAwOworCisJbWVtc2V0KGJ1Ziwg MCwgc2l6ZW9mKGJ1ZikpOworCisJcnNwLT5oLnR5cGUgPSBCVF9SRVNQT05TRTsKKwlyc3AtPmgu bmFtZSA9IEJUX1NFVF9DT05GSUdVUkFUSU9OOworCXJzcC0+aC5sZW5ndGggPSBzaXplb2YoKnJz cCk7CisKKwlyc3AtPmxpbmtfbXR1ID0gNDg7CisKKwljbGllbnQtPmRhdGFfZmQgPSBvZm9ub19o ZnBfZ2V0X3Njb19mZChkZXYpOworCisJdW5peF9pcGNfc2VuZG1zZyhjbGllbnQsICZyc3AtPmgp OworfQorCiBzdGF0aWMgdm9pZCBoZWFkc2V0X3Jlc3VtZV9jb21wbGV0ZShzdHJ1Y3QgYXVkaW9f ZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKIHsKIAlzdHJ1Y3QgdW5peF9jbGllbnQgKmNs aWVudCA9IHVzZXJfZGF0YTsKQEAgLTQxOCw2ICs0NDksNDQgQEAgc3RhdGljIHZvaWQgZ2F0ZXdh eV9yZXN1bWVfY29tcGxldGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB2b2lkICp1c2VyX2Rh dGEpCiAJY2xpZW50LT5yZXFfaWQgPSAwOwogfQogCitzdGF0aWMgdm9pZCBvZm9ub19oZnBfcmVz dW1lX2NvbXBsZXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9pZCAqdXNlcl9kYXRhKQor eworCXN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50ID0gdXNlcl9kYXRhOworCWNoYXIgYnVmW0JU X1NVR0dFU1RFRF9CVUZGRVJfU0laRV07CisJc3RydWN0IGJ0X3N0YXJ0X3N0cmVhbV9yc3AgKnJz cCA9ICh2b2lkICopIGJ1ZjsKKwlzdHJ1Y3QgYnRfbmV3X3N0cmVhbV9pbmQgKmluZCA9ICh2b2lk ICopIGJ1ZjsKKworCWlmICghZGV2KQorCQlnb3RvIGZhaWxlZDsKKworCW1lbXNldChidWYsIDAs IHNpemVvZihidWYpKTsKKwlyc3AtPmgudHlwZSA9IEJUX1JFU1BPTlNFOworCXJzcC0+aC5uYW1l ID0gQlRfU1RBUlRfU1RSRUFNOworCXJzcC0+aC5sZW5ndGggPSBzaXplb2YoKnJzcCk7CisKKwl1 bml4X2lwY19zZW5kbXNnKGNsaWVudCwgJnJzcC0+aCk7CisKKwltZW1zZXQoYnVmLCAwLCBzaXpl b2YoYnVmKSk7CisJaW5kLT5oLnR5cGUgPSBCVF9JTkRJQ0FUSU9OOworCWluZC0+aC5uYW1lID0g QlRfTkVXX1NUUkVBTTsKKwlpbmQtPmgubGVuZ3RoID0gc2l6ZW9mKCppbmQpOworCisJdW5peF9p cGNfc2VuZG1zZyhjbGllbnQsICZpbmQtPmgpOworCisJY2xpZW50LT5kYXRhX2ZkID0gb2Zvbm9f aGZwX2dldF9zY29fZmQoZGV2KTsKKwlpZiAodW5peF9zZW5kbXNnX2ZkKGNsaWVudC0+c29jaywg Y2xpZW50LT5kYXRhX2ZkKSA8IDApIHsKKwkJZXJyb3IoInVuaXhfc2VuZG1zZ19mZDogJXMoJWQp Iiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisJCXVuaXhfaXBjX2Vycm9yKGNsaWVudCwgQlRf U1RBUlRfU1RSRUFNLCBFSU8pOworCX0KKworCWNsaWVudC0+cmVxX2lkID0gMDsKKwlyZXR1cm47 CisKK2ZhaWxlZDoKKwllcnJvcigib2Zvbm9faGZwX3Jlc3VtZV9jb21wbGV0ZTogcmVzdW1lIGZh aWxlZCIpOworCXVuaXhfaXBjX2Vycm9yKGNsaWVudCwgQlRfU1RBUlRfU1RSRUFNLCBFSU8pOwor fQorCiBzdGF0aWMgdm9pZCBoZWFkc2V0X3N1c3BlbmRfY29tcGxldGUoc3RydWN0IGF1ZGlvX2Rl dmljZSAqZGV2LCB2b2lkICp1c2VyX2RhdGEpCiB7CiAJc3RydWN0IHVuaXhfY2xpZW50ICpjbGll bnQgPSB1c2VyX2RhdGE7CkBAIC04NzAsNiArOTM5LDcgQEAgc3RhdGljIHZvaWQgc3RhcnRfZGlz Y292ZXJ5KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgc3RydWN0IHVuaXhfY2xpZW50ICpjbGll bnQKIAogCWNhc2UgVFlQRV9IRUFEU0VUOgogCWNhc2UgVFlQRV9HQVRFV0FZOgorCWNhc2UgVFlQ RV9PRk9OT19IRlA6CiAJCWhlYWRzZXRfZGlzY292ZXJ5X2NvbXBsZXRlKGRldiwgY2xpZW50KTsK IAkJYnJlYWs7CiAKQEAgLTk2OSw4ICsxMDM5LDkgQEAgc3RhdGljIHZvaWQgc3RhcnRfb3Blbihz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50KQogCQl9 CiAJCWJyZWFrOwogCi0gICAgICAgIGNhc2UgVFlQRV9HQVRFV0FZOgotICAgICAgICAgICAgICAg IGJyZWFrOworCWNhc2UgVFlQRV9HQVRFV0FZOgorCWNhc2UgVFlQRV9PRk9OT19IRlA6CisJCWJy ZWFrOwogCWRlZmF1bHQ6CiAJCWVycm9yKCJObyBrbm93biBzZXJ2aWNlcyBmb3IgZGV2aWNlIik7 CiAJCWdvdG8gZmFpbGVkOwpAQCAtMTAzOCw3ICsxMTA5LDE0IEBAIHN0YXRpYyB2b2lkIHN0YXJ0 X2NvbmZpZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHN0cnVjdCB1bml4X2NsaWVudCAqY2xp ZW50KQogCQl9IGVsc2UKIAkJCWlkID0gMDsKIAkJYnJlYWs7Ci0KKwljYXNlIFRZUEVfT0ZPTk9f SEZQOgorCQlpZiAob2Zvbm9faGZwX2NvbmZpZ19zdHJlYW0oZGV2LCBvZm9ub19oZnBfc2V0dXBf Y29tcGxldGUsCisJCQkJCQljbGllbnQpID49IDApIHsKKwkJCWNsaWVudC0+Y2FuY2VsID0gb2Zv bm9faGZwX2NhbmNlbF9zdHJlYW07CisJCQlpZCA9IDE7CisJCX0gZWxzZQorCQkJaWQgPSAwOwor CQlicmVhazsKIAlkZWZhdWx0OgogCQllcnJvcigiTm8ga25vd24gc2VydmljZXMgZm9yIGRldmlj ZSIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTExMTEsNiArMTE4OSwxNSBAQCBzdGF0aWMgdm9pZCBz dGFydF9yZXN1bWUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBzdHJ1Y3QgdW5peF9jbGllbnQg KmNsaWVudCkKIAkJY2xpZW50LT5jYW5jZWwgPSBnYXRld2F5X2NhbmNlbF9zdHJlYW07CiAJCWJy ZWFrOwogCisJY2FzZSBUWVBFX09GT05PX0hGUDoKKwkJaWYgKG9mb25vX2hmcF9yZXF1ZXN0X3N0 cmVhbShkZXYsIG9mb25vX2hmcF9yZXN1bWVfY29tcGxldGUsCisJCQkJCWNsaWVudCkpCisJCQlp ZCA9IDE7CisJCWVsc2UKKwkJCWlkID0gMDsKKwkJY2xpZW50LT5jYW5jZWwgPSBvZm9ub19oZnBf Y2FuY2VsX3N0cmVhbTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQllcnJvcigiTm8ga25vd24g c2VydmljZXMgZm9yIGRldmljZSIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTExODUsNiArMTI3Miwx MyBAQCBzdGF0aWMgdm9pZCBzdGFydF9zdXNwZW5kKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwg c3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQpCiAJCWlkID0gMTsKIAkJYnJlYWs7CiAKKwljYXNl IFRZUEVfT0ZPTk9fSEZQOgorCQlvZm9ub19oZnBfc3VzcGVuZF9zdHJlYW0oZGV2KTsKKwkJY2xp ZW50LT5jYW5jZWwgPSBvZm9ub19oZnBfY2FuY2VsX3N0cmVhbTsKKwkJaGVhZHNldF9zdXNwZW5k X2NvbXBsZXRlKGRldiwgY2xpZW50KTsKKwkJaWQgPSAxOworCQlicmVhazsKKwogCWRlZmF1bHQ6 CiAJCWVycm9yKCJObyBrbm93biBzZXJ2aWNlcyBmb3IgZGV2aWNlIik7CiAJCWdvdG8gZmFpbGVk OwpAQCAtMTI0MSw3ICsxMzM1LDggQEAgc3RhdGljIHZvaWQgc3RhcnRfY2xvc2Uoc3RydWN0IGF1 ZGlvX2RldmljZSAqZGV2LCBzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCwKIAkJfQogCQlicmVh azsKICAgICAgICAgY2FzZSBUWVBFX0dBVEVXQVk6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJ Y2FzZSBUWVBFX09GT05PX0hGUDoKKwkJYnJlYWs7CiAJY2FzZSBUWVBFX1NPVVJDRToKIAljYXNl IFRZUEVfU0lOSzoKIAkJYTJkcCA9ICZjbGllbnQtPmQuYTJkcDsKQEAgLTEzMTcsNiArMTQxMiwx MyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZ2V0Y2FwYWJpbGl0aWVzX3JlcShzdHJ1Y3QgdW5peF9j bGllbnQgKmNsaWVudCwKIAkJCWludGVyZmFjZSA9IE5VTEw7CiAJCWRldiA9IG1hbmFnZXJfZmlu ZF9kZXZpY2UocmVxLT5vYmplY3QsICZzcmMsICZkc3QsCiAJCQkJCQkJaW50ZXJmYWNlLCBUUlVF KTsKKworCQlpZiAoIWRldiAmJiAocmVxLT50cmFuc3BvcnQgPT0gQlRfQ0FQQUJJTElUSUVTX1RS QU5TUE9SVF9TQ08pKSB7CisJCQlpbnRlcmZhY2UgPSBnX3N0cmR1cChBVURJT19PRk9OT19IRlBf SU5URVJGQUNFKTsKKwkJCWRldiA9IG1hbmFnZXJfZmluZF9kZXZpY2UocmVxLT5vYmplY3QsICZz cmMsICZkc3QsCisJCQkJCQkJaW50ZXJmYWNlLCBUUlVFKTsKKwkJfQorCiAJCWlmICghZGV2ICYm IChyZXEtPmZsYWdzICYgQlRfRkxBR19BVVRPQ09OTkVDVCkpCiAJCQlkZXYgPSBtYW5hZ2VyX2Zp bmRfZGV2aWNlKHJlcS0+b2JqZWN0LCAmc3JjLCAmZHN0LAogCQkJCQkJCWludGVyZmFjZSwgRkFM U0UpOwpAQCAtMTM1Myw3ICsxNDU1LDggQEAgc3RhdGljIGludCBoYW5kbGVfc2NvX29wZW4oc3Ry dWN0IHVuaXhfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBidF9vcGVuX3JlcSAqcmVxKQogCWlmICgh Y2xpZW50LT5pbnRlcmZhY2UpCiAJCWNsaWVudC0+aW50ZXJmYWNlID0gZ19zdHJkdXAoQVVESU9f SEVBRFNFVF9JTlRFUkZBQ0UpOwogCWVsc2UgaWYgKCFnX3N0cl9lcXVhbChjbGllbnQtPmludGVy ZmFjZSwgQVVESU9fSEVBRFNFVF9JTlRFUkZBQ0UpICYmCi0JCSFnX3N0cl9lcXVhbChjbGllbnQt PmludGVyZmFjZSwgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UpKQorCQkhZ19zdHJfZXF1YWwoY2xp ZW50LT5pbnRlcmZhY2UsIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFKSAmJgorCQkhZ19zdHJfZXF1 YWwoY2xpZW50LT5pbnRlcmZhY2UsIEFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UpKQogCQlyZXR1 cm4gLUVJTzsKIAogCWRlYnVnKCJvcGVuIHNjbyAtIG9iamVjdD0lcyBzb3VyY2U9JXMgZGVzdGlu YXRpb249JXMgbG9jaz0lcyVzIiwKQEAgLTE0NDcsMTAgKzE1NTAsMTMgQEAgc3RhdGljIGludCBo YW5kbGVfc2NvX3RyYW5zcG9ydChzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCwKIAkJCWNsaWVu dC0+aW50ZXJmYWNlID0gZ19zdHJkdXAoQVVESU9fSEVBRFNFVF9JTlRFUkZBQ0UpOwogCQllbHNl IGlmIChkZXYtPmdhdGV3YXkpCiAJCQljbGllbnQtPmludGVyZmFjZSA9IGdfc3RyZHVwKEFVRElP X0dBVEVXQVlfSU5URVJGQUNFKTsKKwkJZWxzZSBpZiAoZGV2LT5vZm9ub19oZnApCisJCQljbGll bnQtPmludGVyZmFjZSA9IGdfc3RyZHVwKEFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UpOwogCQll bHNlCiAJCQlyZXR1cm4gLUVJTzsKIAl9IGVsc2UgaWYgKCFnX3N0cl9lcXVhbChjbGllbnQtPmlu dGVyZmFjZSwgQVVESU9fSEVBRFNFVF9JTlRFUkZBQ0UpICYmCi0JCQkhZ19zdHJfZXF1YWwoY2xp ZW50LT5pbnRlcmZhY2UsIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFKSkKKwkJCSFnX3N0cl9lcXVh bChjbGllbnQtPmludGVyZmFjZSwgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UpICYmCisJCQkhZ19z dHJfZXF1YWwoY2xpZW50LT5pbnRlcmZhY2UsIEFVRElPX09GT05PX0hGUF9JTlRFUkZBQ0UpKQog CQlyZXR1cm4gLUVJTzsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZG9jL2F1ZGlvLWFwaS50 eHQgYi9kb2MvYXVkaW8tYXBpLnR4dAppbmRleCAxZjA5Y2Q1Li41YzQxODJjIDEwMDY0NAotLS0g YS9kb2MvYXVkaW8tYXBpLnR4dAorKysgYi9kb2MvYXVkaW8tYXBpLnR4dApAQCAtNDU2LDMgKzQ1 Niw0MCBAQCBwcm9wZXJ0aWVzCWJvb2xlYW4gQ29ubmVjdGVkIFtyZWFkb25seV0KIAkJdWludDE2 IE1pY3JvcGhvbmVHYWluICBbcmVhZG9ubHldCiAKIAkJCVRoZSBzcGVha2VyIGdhaW4gd2hlbiBh dmFpbGFibGUuCisKKworb0Zvbm9IRlAgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09PT09 PT0KKworU2VydmljZQkJb3JnLmJsdWV6CitJbnRlcmZhY2UJb3JnLmJsdWV6Lm9Gb25vSEZQCitP YmplY3QgcGF0aAlbdmFyaWFibGUgcHJlZml4XS97aGNpMCxoY2kxLC4uLn0vZGV2X1hYX1hYX1hY X1hYX1hYX1hYCisKK1RoaXMgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBmb3IgcmVtb3RlIGRldmlj ZXMgd2hpY2ggY2FuIGZ1bmN0aW9uIGluIHRoZSBBdWRpbworR2F0ZXdheSByb2xlIG9mIHRoZSBI RlAgcHJvZmlsZXMuIEl0IHByb3ZpZGVzIGNvbm5lY3Rpb24gc2VydmljZSBmb3Igb0Zvbm8gdG8K K2NyZWF0ZSByZmNvbW0gY29ubmVjdGlvbiB3aXRoIHJlbW90ZSBkZXZpY2VzLgorCitNZXRob2Rz CQl2b2lkIENvbm5lY3QoKQorCisJCQlDb25uZWN0IHRvIHRoZSBBRyBzZXJ2aWNlIG9uIHRoZSBy ZW1vdGUgZGV2aWNlIGFuZAorCQkJdHVybiBSRkNPTU0gY29ubmVjdGlvbiBpbnRvIFRUWSBkZXZp Y2UuIFNlbmQgVFRZCisJCQlkZXZpY2UgbmFtZSB0byBvRm9ubyB0aHJvdWdoIEQtQnVzLgorCisJ CXZvaWQgRGlzY29ubmVjdCgpCisKKwkJCURpc2Nvbm5lY3QgZnJvbSB0aGUgQUcgc2VydmljZSBv biB0aGUgcmVtb3RlIGRldmljZS4KKworU2lnbmFscwkJUHJvcGVydHlDaGFuZ2VkKHN0cmluZyBu YW1lLCB2YXJpYW50IHZhbHVlKQorCisJCQlUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgYSBjaGFuZ2Vk IHZhbHVlIG9mIHRoZSBnaXZlbgorCQkJcHJvcGVydHkuCisKK3Byb3BlcnRpZXMJYm9vbGVhbiBD b25uZWN0ZWQgW3JlYWRvbmx5XQorCisJCQlJbmRpY2F0ZXMgaWYgdGhlcmUgaXMgYW4gYWN0aXZl IGNvbm5lY3Rpb24gdG8gdGhlCisJCQlBRyBzZXJ2aWNlIG9uIHRoZSByZW1vdGUgZGV2aWNlLgor CisJCXN0cmluZyBEZXZpY2VbcmVhZG9ubHldCisKKwkJCVRoZSBUVFkgZGV2aWNlIG5hbWUgY3Jl YXRlZCBmcm9tIFJGQ09NTSBjb25uZWN0aW9uLgorCi0tIAoxLjYuMi41Cgo= --_002_0463F45F3606F4428ED35AC8C709F92E089CD174BBpdsmsx502ccrc_--