From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v11,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: <278a26ba3d314f3f91506a4d22be1bc3@bgmail101.nvidia.com> Date: Tue, 11 Sep 2018 04:16:49 +0000 To: Peter Rosin , "wsa@the-dreams.de" , "heikki.krogerus@linux.intel.com" Cc: "linux-usb@vger.kernel.org" , "linux-i2c@vger.kernel.org" List-ID: SGkgUGV0ZXIsDQoNCj4gPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkIGhhcyBVU0IgVHlwZS1DIGlu dGVyZmFjZS4gVGhlcmUgaXMgYSBUeXBlLUMNCj4gPiBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBh Y2Nlc3NlZCBvdmVyIEkyQy4NCj4gPg0KPiA+IFRoaXMgZHJpdmVyIGFkZHMgSTJDIGJ1cyBkcml2 ZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBUeXBlLUMgY29udHJvbGxlci4NCj4gPiBJMkMgY2xpZW50 IGRyaXZlciB3aWxsIGJlIHBhcnQgb2YgVVNCIFR5cGUtQyBVQ1NJIGRyaXZlci4NCj4gPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+DQo+ID4gUmV2aWV3 ZWQtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4NCj4gPiBS ZXZpZXdlZC1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwu Y29tPg0KPiA+IC0tLQ0KPiA+IENoYW5nZXMgZnJvbSB2MSAtPiB2Mg0KPiA+IAlOb25lDQo+ID4g Q2hhbmdlcyBmcm9tIHYyIC0+IHYzDQo+ID4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEFu ZHkgYW5kIFRoaWVycnkNCj4gPiAJUmVuYW1lIGkyYy1ncHUuYyAtPiBpMmMtbnZpZGlhLWdwdS5j DQo+ID4gQ2hhbmdlcyBmcm9tIHYzIC0+IHY0DQo+ID4gCUZpeGVkIHJldmlldyBjb21tZW50cyBm cm9tIEFuZHkNCj4gPiBDaGFuZ2VzIGZyb20gdjQgLT4gdjUNCj4gPiAJRml4ZWQgcmV2aWV3IGNv bW1lbnRzIGZyb20gQW5keQ0KPiA+IENoYW5nZXMgZnJvbSB2NSAtPiB2Ng0KPiA+IAlOb25lDQo+ ID4gQ2hhbmdlcyBmcm9tIHY2IC0+IHY3IC0+IHY4DQo+ID4gCUZpeGVkIHJldmlldyBjb21tZW50 cyBmcm9tIFBldGVyDQo+ID4gCS0gQWRkIGltcGxpY2l0IFNUT1AgZm9yIGxhc3Qgd3JpdGUgbWVz c2FnZQ0KPiA+IAktIEFkZCBpMmNfYWRhcHRlcl9xdWlya3Mgd2l0aCBtYXhfcmVhZF9sZW4gYW5k DQo+ID4gCSAgSTJDX0FRX0NPTUIgZmxhZ3MNCj4gPiBDaGFuZ2VzIGZyb20gdjggLT4gdjkNCj4g PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXINCj4gPiAJLSBEcm9wIGRvX3N0YXJ0 IGZsYWcNCj4gPiAJLSBVc2UgaTJjXzhiaXRfYWRkcl9mcm9tX21zZygpDQo+ID4gQ2hhbmdlcyBm cm9tIHY5IC0+IHYxMA0KPiA+IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcg0KPiA+ IAktIERyb3BwZWQgSTJDX0ZVTkNfU01CVVNfRU1VTA0KPiA+IAktIERyb3BwZWQgbG9jYWwgbXV0 ZXgNCj4gPiBDaGFuZ2VzIGZyb20gdjEwIC0+IHYxMQ0KPiA+IAlGaXhlZCByZXZpZXcgY29tbWVu dHMgZnJvbSBQZXRlcg0KPiA+IAktIE1vdmVkIHN0b3AgaW4gbWFzdGVyX3hmZXIgYXQgZW5kIG9m IG1lc3NhZ2UNCj4gPiAJLSBDaGFuZ2UgaTJjX3JlYWQgd2l0aG91dCBTVE9QDQo+ID4gCS0gRHJv cHBlZCBJMkNfQUNfQ09NQiogZmxhZ3MNCj4gPg0KPiA+ICBEb2N1bWVudGF0aW9uL2kyYy9idXNz ZXMvaTJjLW52aWRpYS1ncHUgfCAgMTggKysNCj4gPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA3ICsNCj4gPiAgZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcg ICAgICAgICAgICAgIHwgICA5ICsNCj4gPiAgZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlICAg ICAgICAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1 LmMgICAgIHwgMzcyDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDUg ZmlsZXMgY2hhbmdlZCwgNDA3IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IERvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUNCj4gPiBi L0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQ0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uMzE4ODRkMg0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUNCj4gPiBA QCAtMCwwICsxLDE4IEBADQo+ID4gK0tlcm5lbCBkcml2ZXIgaTJjLW52aWRpYS1ncHUNCj4gPiAr DQo+ID4gK0RhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJsZS4NCj4gPiArDQo+ID4gK0F1 dGhvcnM6DQo+ID4gKwlBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPg0KPiA+ICsNCj4gPiAr RGVzY3JpcHRpb24NCj4gPiArLS0tLS0tLS0tLS0NCj4gPiArDQo+ID4gK2kyYy1udmlkaWEtZ3B1 IGlzIGEgZHJpdmVyIGZvciBJMkMgY29udHJvbGxlciBpbmNsdWRlZCBpbiBOVklESUENCj4gPiAr VHVyaW5nIGFuZCBsYXRlciBHUFVzIGFuZCBpdCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGgg VHlwZS1DIGNvbnRyb2xsZXINCj4gb24gR1BVcy4NCj4gPiArDQo+ID4gK0lmIHlvdXIgJ2xzcGNp IC12JyBsaXN0aW5nIHNob3dzIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcsDQo+ID4gKw0K PiA+ICswMTowMC4zIFNlcmlhbCBidXMgY29udHJvbGxlciBbMGM4MF06IE5WSURJQSBDb3Jwb3Jh dGlvbiBEZXZpY2UgMWFkOQ0KPiA+ICsocmV2IGExKQ0KPiA+ICsNCj4gPiArdGhlbiB0aGlzIGRy aXZlciBzaG91bGQgc3VwcG9ydCB0aGUgSTJDIGNvbnRyb2xsZXIgb2YgeW91ciBHUFUuDQo+ID4g ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMgaW5kZXggZDg3MGNiNS4uYjcx YjBiNCAxMDA2NDQNCj4gPiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBiL01BSU5UQUlORVJT DQo+ID4gQEAgLTY3OTgsNiArNjc5OCwxMyBAQCBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9y Zw0KPiA+ICBTOglNYWludGFpbmVkDQo+ID4gIEY6CWRyaXZlcnMvaTJjL2kyYy1jb3JlLWFjcGku Yw0KPiA+DQo+ID4gK0kyQyBDT05UUk9MTEVSIERSSVZFUiBGT1IgTlZJRElBIEdQVQ0KPiA+ICtN OglBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPg0KPiA+ICtMOglsaW51eC1pMmNAdmdlci5r ZXJuZWwub3JnDQo+ID4gK1M6CU1haW50YWluZWQNCj4gPiArRjoJRG9jdW1lbnRhdGlvbi9pMmMv YnVzc2VzL2kyYy1udmlkaWEtZ3B1DQo+ID4gK0Y6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZp ZGlhLWdwdS5jDQo+ID4gKw0KPiA+ICBJMkMgTVVYRVMNCj4gPiAgTToJUGV0ZXIgUm9zaW4gPHBl ZGFAYXhlbnRpYS5zZT4NCj4gPiAgTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZw0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nl cy9LY29uZmlnDQo+ID4gaW5kZXggNDUxZDRhZS4uZWVkODI3YiAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9L Y29uZmlnDQo+ID4gQEAgLTIyNCw2ICsyMjQsMTUgQEAgY29uZmlnIEkyQ19ORk9SQ0UyX1M0OTg1 DQo+ID4gIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYg c28sIHRoZSBtb2R1bGUNCj4gPiAgCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW5mb3JjZTItczQ5ODUu DQo+ID4NCj4gPiArY29uZmlnIEkyQ19OVklESUFfR1BVDQo+ID4gKwl0cmlzdGF0ZSAiTlZJRElB IEdQVSBJMkMgY29udHJvbGxlciINCj4gPiArCWRlcGVuZHMgb24gUENJDQo+ID4gKwloZWxwDQo+ ID4gKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5j bHVkZWQgZm9yIHRoZQ0KPiA+ICsJICBOVklESUEgR1BVIEkyQyBjb250cm9sbGVyIHdoaWNoIGlz IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUNCj4gR1BVJ3MNCj4gPiArCSAgVHlwZS1DIGNv bnRyb2xsZXIuIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGNhbGxl ZA0KPiA+ICsJICBpMmMtbnZpZGlhLWdwdS4NCj4gPiArDQo+ID4gIGNvbmZpZyBJMkNfU0lTNTU5 NQ0KPiA+ICAJdHJpc3RhdGUgIlNpUyA1NTk1Ig0KPiA+ICAJZGVwZW5kcyBvbiBQQ0kNCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVz c2VzL01ha2VmaWxlDQo+ID4gaW5kZXggMThiMjZhZi4uZDQ5OTgxMyAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL2kyYy9idXNz ZXMvTWFrZWZpbGUNCj4gPiBAQCAtMTQwLDUgKzE0MCw2IEBAIG9iai0kKENPTkZJR19JMkNfU0lC WVRFKQkrPSBpMmMtc2lieXRlLm8NCj4gPiAgb2JqLSQoQ09ORklHX0kyQ19YR0VORV9TTElNUFJP KSArPSBpMmMteGdlbmUtc2xpbXByby5vDQo+ID4gIG9iai0kKENPTkZJR19TQ3gyMDBfQUNCKQkr PSBzY3gyMDBfYWNiLm8NCj4gPiAgb2JqLSQoQ09ORklHX0kyQ19GU0kpCQkrPSBpMmMtZnNpLm8N Cj4gPiArb2JqLSQoQ09ORklHX0kyQ19OVklESUFfR1BVKQkrPSBpMmMtbnZpZGlhLWdwdS5vDQo+ ID4NCj4gPiAgY2NmbGFncy0kKENPTkZJR19JMkNfREVCVUdfQlVTKSA6PSAtRERFQlVHIGRpZmYg LS1naXQNCj4gPiBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jDQo+ID4gYi9k cml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uZTg4NDI0Zg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYw0KPiA+IEBAIC0wLDAgKzEs MzcyIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8q DQo+ID4gKyAqIE52aWRpYSBHUFUgSTJDIGNvbnRyb2xsZXIgRHJpdmVyDQo+ID4gKyAqDQo+ID4g KyAqIENvcHlyaWdodCAoQykgMjAxOCBOVklESUEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQo+ID4gKyAqIEF1dGhvcjogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4gICov ICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+ICNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4gI2luY2x1ZGUNCj4gPiArPGxpbnV4L21vZHVsZS5o PiAjaW5jbHVkZSA8bGludXgvcGNpLmg+ICNpbmNsdWRlDQo+ID4gKzxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4gI2luY2x1ZGUgPGxpbnV4L3BtLmg+ICNpbmNsdWRlDQo+ID4gKzxsaW51eC9wbV9y dW50aW1lLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPg0KPiA+ICsN Cj4gPiArLyogSTJDIGRlZmluaXRpb25zICovDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9DTlRMCQkJ CTB4MDANCj4gPiArI2RlZmluZSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUCQkJQklUKDApDQo+ID4g KyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgSTJD X01TVF9DTlRMX0NNRF9OT05FCQkJKDAgPDwgMikNCj4gPiArI2RlZmluZSBJMkNfTVNUX0NOVExf Q01EX1JFQUQJCQkoMSA8PCAyKQ0KPiA+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfV1JJVEUJ CQkoMiA8PCAyKQ0KPiA+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fUkFCCQkJQklUKDQpDQo+ ID4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQJCTYNCj4gPiArI2RlZmlu ZSBJMkNfTVNUX0NOVExfR0VOX05BQ0sJCQlCSVQoMjgpDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9D TlRMX1NUQVRVUwkJCUdFTk1BU0soMzAsIDI5KQ0KPiA+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9T VEFUVVNfT0tBWQkJKDAgPDwgMjkpDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19O T19BQ0sJCSgxIDw8IDI5KQ0KPiA+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfVElNRU9V VAkJKDIgPDwgMjkpDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19CVVNfQlVTWQkJ KDMgPDwgMjkpDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIJCUJJVCgz MSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9BRERSCQkJCTB4MDQNCj4gPiArDQo+ID4g KyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlORwkJCQkweDA4DQo+ID4gKyNkZWZpbmUgSTJDX01T VF9JMkMwX1RJTUlOR19TQ0xfUEVSSU9EXzEwMEtIWgkJMHgxMGUNCj4gPiArI2RlZmluZSBJMkNf TVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVAkJMTYNCj4gPiArI2RlZmluZSBJMkNfTVNU X0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1NQ0KPiA+ICsjZGVmaW5lIEkyQ19N U1RfSTJDMF9USU1JTkdfVElNRU9VVF9DSEVDSwkJQklUKDI0KQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBJMkNfTVNUX0RBVEEJCQkJCTB4MGMNCj4gPiArDQo+ID4gKyNkZWZpbmUgSTJDX01TVF9IWUJS SURfUEFEQ1RMCQkJCTB4MjANCj4gPiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURDVExfTU9E RV9JMkMJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURDVExfSTJDX1ND TF9JTlBVVF9SQ1YNCj4gCUJJVCgxNCkNCj4gPiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURD VExfSTJDX1NEQV9JTlBVVF9SQ1YNCj4gCUJJVCgxNSkNCj4gPiArDQo+ID4gK3N0cnVjdCBncHVf aTJjX2RldiB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwl2b2lkIF9faW9tZW0g KnJlZ3M7DQo+ID4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsNCj4gPiArCXN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBncHVf ZW5hYmxlX2kyY19idXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKSB7DQo+ID4gKwl1MzIgdmFs Ow0KPiA+ICsNCj4gPiArCS8qIGVuYWJsZSBJMkMgKi8NCj4gPiArCXZhbCA9IHJlYWRsKGkyY2Qt PnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwpOw0KPiA+ICsJdmFsIHw9IEkyQ19NU1RfSFlC UklEX1BBRENUTF9NT0RFX0kyQyB8DQo+ID4gKwkJSTJDX01TVF9IWUJSSURfUEFEQ1RMX0kyQ19T Q0xfSU5QVVRfUkNWIHwNCj4gPiArCQlJMkNfTVNUX0hZQlJJRF9QQURDVExfSTJDX1NEQV9JTlBV VF9SQ1Y7DQo+ID4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9IWUJSSURfUEFE Q1RMKTsNCj4gPiArDQo+ID4gKwkvKiBlbmFibGUgMTAwS0haIG1vZGUgKi8NCj4gPiArCXZhbCA9 IEkyQ19NU1RfSTJDMF9USU1JTkdfU0NMX1BFUklPRF8xMDBLSFo7DQo+ID4gKwl2YWwgfD0gKEky Q19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UX01BWA0KPiA+ICsJICAgIDw8IEkyQ19N U1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UKTsNCj4gPiArCXZhbCB8PSBJMkNfTVNUX0ky QzBfVElNSU5HX1RJTUVPVVRfQ0hFQ0s7DQo+ID4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsg STJDX01TVF9JMkMwX1RJTUlORyk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19j aGVja19zdGF0dXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKSB7DQo+ID4gKwl1bnNpZ25lZCBs b25nIHRhcmdldCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOw0KPiA+ICsJdTMy IHZhbDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ID4gKwkJdmFsID0gcmVhZGwoaTJjZC0+cmVncyAr IEkyQ19NU1RfQ05UTCk7DQo+ID4gKwkJaWYgKCEodmFsICYgSTJDX01TVF9DTlRMX0NZQ0xFX1RS SUdHRVIpKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlpZiAoKHZhbCAmIEkyQ19NU1RfQ05UTF9T VEFUVVMpICE9DQo+ID4gKwkJCQlJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZKQ0KPiA+ICsJ CQlicmVhazsNCj4gPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ID4gKwl9IHdoaWxl ICh0aW1lX2lzX2FmdGVyX2ppZmZpZXModGFyZ2V0KSk7DQo+ID4gKw0KPiA+ICsJaWYgKHRpbWVf aXNfYmVmb3JlX2ppZmZpZXModGFyZ2V0KSkgew0KPiA+ICsJCWRldl9lcnIoaTJjZC0+ZGV2LCAi aTJjIHRpbWVvdXQgZXJyb3IgJXhcbiIsIHZhbCk7DQo+ID4gKwkJcmV0dXJuIC1FSU87DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7 DQo+ID4gKwlzd2l0Y2ggKHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFUVVMpIHsNCj4gPiArCWNhc2Ug STJDX01TVF9DTlRMX1NUQVRVU19PS0FZOg0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJY2FzZSBJ MkNfTVNUX0NOVExfU1RBVFVTX05PX0FDSzoNCj4gPiArCQlyZXR1cm4gLUVJTzsNCj4gPiArCWNh c2UgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUOg0KPiA+ICsJCXJldHVybiAtRVRJTUU7DQo+ ID4gKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVTX0JVU1k6DQo+ID4gKwkJcmV0dXJuIC1F QlVTWTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19yZWFkKHN0cnVjdCBncHVfaTJjX2RldiAq aTJjZCwgdTggKmRhdGEsIHUxNiBsZW4pDQo+ID4gK3sNCj4gPiArCWludCBzdGF0dXM7DQo+ID4g Kwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJ MkNfTVNUX0NOVExfQ01EX1JFQUQgfA0KPiA+ICsJCShsZW4gPDwgSTJDX01TVF9DTlRMX0JVUlNU X1NJWkVfU0hJRlQpIHwNCj4gPiArCQlJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUiB8DQo+IEky Q19NU1RfQ05UTF9HRU5fTkFDSzsNCj4gPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fUkFC IHwgSTJDX01TVF9DTlRMX0dFTl9TVE9QKTsNCj4gDQo+IEhtbSwgSSBkaWRuJ3Qgbm90aWNlIHRo aXMgYmVmb3JlLCBidXQgdGhpcyBtYXNrcyBvdXQgYml0cyB0aGF0IGFyZSBhbHJlYWR5IHplcm8N Cj4gYW5kIGNhbiBiZSBkcm9wcGVkIEFGQUlDVC4NCldlIGNhbiByZW1vdmUgYnV0IEkgdGhvdWdo dCBpdHMgYmV0dGVyIGZvciBjb2RlIHJlYWRhYmlsaXR5IG9uIHdoYXQgaXMgbm90IGJlaW5nDQpk b25lLg0KDQo+IA0KPiA+ICsJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7 DQo+ID4gKw0KPiA+ICsJc3RhdHVzID0gZ3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7DQo+ID4g KwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0KPiA+ICsNCj4gPiArCXZh bCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0RBVEEpOw0KPiA+ICsJc3dpdGNoIChsZW4p IHsNCj4gPiArCWNhc2UgMToNCj4gPiArCQlkYXRhWzBdID0gdmFsOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSAyOg0KPiA+ICsJCXB1dF91bmFsaWduZWRfYmUxNih2YWwsIGRhdGEpOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAzOg0KPiA+ICsJCXB1dF91bmFsaWduZWRfYmUxNih2YWwg Pj4gOCwgZGF0YSk7DQo+ID4gKwkJZGF0YVsyXSA9IHZhbDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgNDoNCj4gPiArCQlwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBkYXRhKTsNCj4gPiArCQli cmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKwlyZXR1 cm4gc3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdwdV9pMmNfc3RhcnQo c3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKSB7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiAr CXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfQ01EX05PTkUgfA0K PiA+ICsJCUkyQ19NU1RfQ05UTF9HRU5fTkFDSzsNCj4gPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05U TF9HRU5fU1RPUCB8IEkyQ19NU1RfQ05UTF9HRU5fUkFCKTsNCj4gDQo+IERpdG8uIEkgYWxzbyBz dXNwZWN0IHRoYXQgLi4uX0dFTl9OQUNLIGlzIGluc2lnbmlmaWNhbnQgaGVyZT8gSSBoYXZlIG5v IHdheSBvZg0KPiBrbm93aW5nIHRoYXQsIGJ1dCBpZiBzbywgYW5kIGdpdmVuIHRoYXQgLi4uX0NN RF9OT05FIGlzIHplcm8sIHRoaXMgY2FuIGJlY29tZQ0KPiBtdWNoIG1vcmUgcmVhZGFibGUgd2l0 aCBhIHNpbXBsZQ0Kb2sNCj4gDQo+IAl3cml0ZWwoSTJDX01TVF9DTlRMX0dFTl9TVEFSVCwgaTJj ZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7DQo+IA0KPiA+ICsJd3JpdGVsKHZhbCwgaTJjZC0+cmVn cyArIEkyQ19NU1RfQ05UTCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGdwdV9pMmNfY2hlY2tfc3Rh dHVzKGkyY2QpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdwdV9pMmNfc3RvcChz dHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QpIHsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJ dmFsID0gSTJDX01TVF9DTlRMX0dFTl9TVE9QIHwgSTJDX01TVF9DTlRMX0NNRF9OT05FIHwNCj4g PiArCQlJMkNfTVNUX0NOVExfR0VOX05BQ0s7DQo+ID4gKwl2YWwgJj0gfihJMkNfTVNUX0NOVExf R0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dFTl9SQUIpOw0KPiANCj4gRGl0bywgYnV0DQo+IA0K PiAJd3JpdGVsKEkyQ19NU1RfQ05UTF9HRU5fU1RPUCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQ05U TCk7DQo+IA0Kb2sNCj4gPiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwp Ow0KPiA+ICsNCj4gPiArCXJldHVybiBncHVfaTJjX2NoZWNrX3N0YXR1cyhpMmNkKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBncHVfaTJjX3dyaXRlKHN0cnVjdCBncHVfaTJjX2Rl diAqaTJjZCwgdTggZGF0YSkgew0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwl3cml0ZWwo ZGF0YSwgaTJjZC0+cmVncyArIEkyQ19NU1RfREFUQSk7DQo+ID4gKw0KPiA+ICsJdmFsID0gSTJD X01TVF9DTlRMX0NNRF9XUklURSB8ICgxIDw8DQo+IEkyQ19NU1RfQ05UTF9CVVJTVF9TSVpFX1NI SUZUKSB8DQo+ID4gKwkJSTJDX01TVF9DTlRMX0dFTl9OQUNLOw0KPiA+ICsJdmFsICY9IH4oSTJD X01TVF9DTlRMX0dFTl9TVEFSVCB8IEkyQ19NU1RfQ05UTF9HRU5fU1RPUCB8DQo+ID4gKwkJIEky Q19NU1RfQ05UTF9HRU5fUkFCKTsNCj4gDQo+IEFnYWluLCB6ZXJvaW5nIG91dCBlbXB0eSBiaXRz Lg0KPiANCj4gPiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOw0KPiA+ ICsNCj4gPiArCXJldHVybiBncHVfaTJjX2NoZWNrX3N0YXR1cyhpMmNkKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBncHVfaTJjX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcCwNCj4gPiArCQkJICAgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKSB7 DQo+ID4gKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXAp Ow0KPiA+ICsJaW50IHN0YXR1cywgc3RhdHVzMjsNCj4gPiArCWludCBpLCBqOw0KPiA+ICsNCj4g PiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgew0KPiA+ICsJCWlmIChtc2dzW2ldLmZsYWdz ICYgSTJDX01fUkQpIHsNCj4gPiArCQkJLyogcHJvZ3JhbSBjbGllbnQgYWRkcmVzcyBiZWZvcmUg c3RhcnRpbmcgcmVhZCAqLw0KPiA+ICsJCQl3cml0ZWwobXNnc1tpXS5hZGRyLCBpMmNkLT5yZWdz ICsgSTJDX01TVF9BRERSKTsNCj4gPiArCQkJLyogZ3B1X2kyY19yZWFkIGhhcyBpbXBsaWNpdCBz dGFydCAqLw0KPiA+ICsJCQlzdGF0dXMgPSBncHVfaTJjX3JlYWQoaTJjZCwgbXNnc1tpXS5idWYs IG1zZ3NbaV0ubGVuKTsNCj4gPiArCQkJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJCQlyZXR1cm4g c3RhdHVzOw0KPiANCj4gCQkJCWdvdG8gc3RvcDsNCj4gDQo+IEhtbSwgdGhhdCBnb3RvIHN0b3Ag aXMgaG93ZXZlciBub3QgcGVyZmVjdC4gSWRlYWxseSwgDQoNCj4geW91IHNob3VsZG4ndCBpc3N1 ZSBzdG9wIGlmIGkgPT0gMCBhbmQgZ3B1X2kyY19yZWFkIGZhaWxlZCANCkhvdyBjYW4gdGhlcmUg YmUgYSByZWFkIHdpdGhvdXQgcmFiIHdyaXRlIGZpcnN0Pw0KQUZBSVUsIGdwdV9pMmNfcmVhZCgp IGNhbiBnZXQgY2FsbGVkIG9ubHkgd2l0aCBpPTEgb253YXJkLg0KDQo+IGR1ZSB0byBmYWlsdXJl IHRvIG91dHB1dCBzdGFydC5Ob3Qgc3VyZSBpZiB5b3UgY2FuIGtub3cgdGhhdD8gDQpUaGVyZSBp cyBubyB3YXkgdG8gdGVsbCB0aGF0Lg0KDQo+IE1heWJlIHlvdSBjYW4gbWFrZSB0aGUgc3RhcnQg b2YgcmVhZHMgYmUgZXhwbGljaXQsIGp1c3QgbGlrZQ0KPiB5b3UgY291bGQgd2l0aCB0aGUgc3Rv cD8gDQpJIG5lZWQgdG8gc2VlIGlmIHRoYXQgd29ya3MuDQoNCj4gSW4gdGhhdCBjYXNlLCBtYXli ZSB5b3UgY2FuIG1vdmUgdGhlIGJlbG93DQo+IGdwdV9pMmNfc3RhcnQgY2FsbCAod2l0aCBmaXhl ZCBlcnJvciBoYW5kbGluZykgdG8gYmVmb3JlIHRoZSBhYm92ZSBpZiAoLi4uICYNCj4gSTJDX01f UkQpPw0KT2ssIHdpbGwgY2hlY2suDQo+IA0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXU4IGFk ZHIgPSBpMmNfOGJpdF9hZGRyX2Zyb21fbXNnKG1zZ3MgKyBpKTsNCj4gPiArDQo+ID4gKwkJCXN0 YXR1cyA9IGdwdV9pMmNfc3RhcnQoaTJjZCk7DQo+ID4gKwkJCWlmIChzdGF0dXMgPCAwKQ0KPiA+ ICsJCQkJcmV0dXJuIHN0YXR1czsNCj4gDQo+IFlvdSBmYWlsIHRvIGlzc3VlIGEgdGVybWluYXRp bmcgc3RvcCBpZiBhIHJlc3RhcnQgZmFpbHMuDQpvaw0KPiANCj4gCQkJaWYgKHN0YXR1cyA8IDAp IHsNCj4gCQkJCWlmIChpID09IDApDQo+IAkJCQkJcmV0dXJuIHN0YXR1czsNCj4gCQkJCWdvdG8g c3RvcDsNCj4gCQkJfQ0KPiANCj4gPiArDQo+ID4gKwkJCXN0YXR1cyA9IGdwdV9pMmNfd3JpdGUo aTJjZCwgYWRkcik7DQo+ID4gKwkJCWlmIChzdGF0dXMgPCAwKQ0KPiA+ICsJCQkJZ290byBzdG9w Ow0KPiA+ICsNCj4gPiArCQkJZm9yIChqID0gMDsgaiA8IG1zZ3NbaV0ubGVuOyBqKyspIHsNCj4g PiArCQkJCXN0YXR1cyA9IGdwdV9pMmNfd3JpdGUoaTJjZCwgbXNnc1tpXS5idWZbal0pOw0KPiA+ ICsJCQkJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJCQkJZ290byBzdG9wOw0KPiA+ICsJCQl9DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJc3RhdHVzID0gZ3B1X2kyY19zdG9wKGkyY2QpOw0KPiA+ ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0YXR1czsNCj4gPiArCXJldHVybiBp Ow0KPiA+ICtzdG9wOg0KPiA+ICsJc3RhdHVzMiA9IGdwdV9pMmNfc3RvcChpMmNkKTsNCj4gPiAr CWlmIChzdGF0dXMyIDwgMCkNCj4gPiArCQlkZXZfZXJyKGkyY2QtPmRldiwgImkyYyBzdG9wIGZh aWxlZCAlZFxuIiwgc3RhdHVzMik7DQo+ID4gKwlyZXR1cm4gc3RhdHVzOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hZGFwdGVyX3F1aXJrcyBncHVfaTJjX3F1 aXJrcyA9IHsNCj4gPiArCS5tYXhfcmVhZF9sZW4gPSA0LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIHUzMiBncHVfaTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFw KSB7DQo+ID4gKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsgfQ0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdwdV9pMmNfYWxn b3JpdGhtID0gew0KPiA+ICsJLm1hc3Rlcl94ZmVyCT0gZ3B1X2kyY19tYXN0ZXJfeGZlciwNCj4g PiArCS5mdW5jdGlvbmFsaXR5CT0gZ3B1X2kyY19mdW5jdGlvbmFsaXR5LA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArLyoNCj4gPiArICogVGhpcyBkcml2ZXIgaXMgZm9yIE52aWRpYSBHUFUgY2FyZHMg d2l0aCBVU0IgVHlwZS1DIGludGVyZmFjZS4NCj4gPiArICogV2Ugd2FudCB0byBpZGVudGlmeSB0 aGUgY2FyZHMgdXNpbmcgdmVuZG9yIElEIGFuZCBjbGFzcyBjb2RlIG9ubHkNCj4gPiArICogdG8g YXZvaWQgZGVwZW5kZW5jeSBvZiBhZGRpbmcgcHJvZHVjdCBpZCBmb3IgYW55IG5ldyBjYXJkIHdo aWNoDQo+ID4gKyAqIHJlcXVpcmVzIHRoaXMgZHJpdmVyLg0KPiA+ICsgKiBDdXJyZW50bHkgdGhl cmUgaXMgbm8gY2xhc3MgY29kZSBkZWZpbmVkIGZvciBVQ1NJIGRldmljZSBvdmVyIFBDSQ0KPiA+ ICsgKiBzbyB1c2luZyBVTktOT1dOIGNsYXNzIGZvciBub3cgYW5kIGl0IHdpbGwgYmUgdXBkYXRl ZCB3aGVuIFVDU0kNCj4gPiArICogb3ZlciBQQ0kgZ2V0cyBhIGNsYXNzIGNvZGUuDQo+ID4gKyAq IFRoZXJlIGlzIG5vIG90aGVyIE5WSURJQSBjYXJkcyB3aXRoIFVOS05PV04gY2xhc3MgY29kZS4g RXZlbiBpZg0KPiA+ICt0aGUNCj4gPiArICogZHJpdmVyIGdldHMgbG9hZGVkIGZvciBhbiB1bmRl c2lyZWQgY2FyZCB0aGVuIGV2ZW50dWFsbHkNCj4gPiAraTJjX3JlYWQoKQ0KPiA+ICsgKiAoaW5p dGlhdGVkIGZyb20gVUNTSSBpMmNfY2xpZW50KSB3aWxsIHRpbWVvdXQgb3IgVUNTSSBjb21tYW5k cw0KPiA+ICt3aWxsDQo+ID4gKyAqIHRpbWVvdXQuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFBD SV9DTEFTU19TRVJJQUxfVU5LTk9XTgkweDBjODANCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBw Y2lfZGV2aWNlX2lkIGdwdV9pMmNfaWRzW10gPSB7DQo+ID4gKwl7IFBDSV9WRU5ET1JfSURfTlZJ RElBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELA0KPiA+ICsJCVBDSV9DTEFT U19TRVJJQUxfVU5LTk9XTiA8PCA4LCAweGZmZmZmZjAwfSwNCj4gPiArCXsgfQ0KPiA+ICt9Ow0K PiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ3B1X2kyY19pZHMpOw0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBncHVfcG9wdWxhdGVfY2xpZW50KHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCwg aW50IGlycSkgew0KPiA+ICsJc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBncHVfY2NneF91 Y3NpID0gew0KPiA+ICsJCUkyQ19CT0FSRF9JTkZPKCJjY2d4LXVjc2kiLCAweDgpLA0KPiA+ICsJ fTsNCj4gDQo+IFNob3VsZG4ndCB0aGlzIHN0cnVjdCBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQg YW5kIGF0dGFjaGVkIHRvIHN0cnVjdA0KPiBncHVfaTJjX2RldiBzbyB0aGF0IHlvdSAobWF5YmUp IGNvdWxkIGhhdmUgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZT8NCkN1cnJlbnRseSB0aGUgc3RydWN0 dXJlIGlzIGxvY2FsIHZhcmlhYmxlLiBXaWxsIHRoYXQgbm90IHdvcmsgaW4gbXVsdGkNCmluc3Rh bmNlIGNhc2VzPw0KDQpUaGFua3MNCkFqYXkNCg0KLS0NCm52cHVibGljDQotLQ0KPiANCj4gQ2hl ZXJzLA0KPiBQZXRlcg0KPiANCj4gPiArDQo+ID4gKwlncHVfY2NneF91Y3NpLmlycSA9IGlycTsN Cj4gPiArCWkyY2QtPmNsaWVudCA9IGkyY19uZXdfZGV2aWNlKCZpMmNkLT5hZGFwdGVyLCAmZ3B1 X2NjZ3hfdWNzaSk7DQo+ID4gKwlpZiAoIWkyY2QtPmNsaWVudCkNCj4gPiArCQlyZXR1cm4gLUVO T0RFVjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBncHVfaTJjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QNCj4g PiArcGNpX2RldmljZV9pZCAqaWQpIHsNCj4gPiArCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZDsN Cj4gPiArCWludCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJaTJjZCA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2Yoc3RydWN0IGdwdV9pMmNfZGV2KSwNCj4gR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIWkyY2QpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJaTJjZC0+ ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpMmNk KTsNCj4gPiArDQo+ID4gKwlzdGF0dXMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7DQo+ID4g KwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaW1fZW5h YmxlX2RldmljZSBmYWlsZWQgJWRcbiIsDQo+IHN0YXR1cyk7DQo+ID4gKwkJcmV0dXJuIHN0YXR1 czsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwY2lfc2V0X21hc3RlcihwZGV2KTsNCj4gPiArDQo+ ID4gKwlpMmNkLT5yZWdzID0gcGNpbV9pb21hcChwZGV2LCAwLCAwKTsNCj4gPiArCWlmICghaTJj ZC0+cmVncykgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaW1faW9tYXAgZmFpbGVk XG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlzdGF0 dXMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwgMSwgUENJX0lSUV9NU0kpOw0KPiA+ ICsJaWYgKHN0YXR1cyA8IDApIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfYWxs b2NfaXJxX3ZlY3RvcnMgZXJyICVkXG4iLA0KPiBzdGF0dXMpOw0KPiA+ICsJCXJldHVybiBzdGF0 dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZ3B1X2VuYWJsZV9pMmNfYnVzKGkyY2QpOw0KPiA+ ICsNCj4gPiArCWkyY19zZXRfYWRhcGRhdGEoJmkyY2QtPmFkYXB0ZXIsIGkyY2QpOw0KPiA+ICsJ aTJjZC0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOw0KPiA+ICsJc3RybGNweShpMmNkLT5h ZGFwdGVyLm5hbWUsICJOVklESUEgR1BVIEkyQyBhZGFwdGVyIiwNCj4gPiArCQlzaXplb2YoaTJj ZC0+YWRhcHRlci5uYW1lKSk7DQo+ID4gKwlpMmNkLT5hZGFwdGVyLmFsZ28gPSAmZ3B1X2kyY19h bGdvcml0aG07DQo+ID4gKwlpMmNkLT5hZGFwdGVyLnF1aXJrcyA9ICZncHVfaTJjX3F1aXJrczsN Cj4gPiArCWkyY2QtPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7DQo+ID4gKwlzdGF0 dXMgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyY2QtPmFkYXB0ZXIpOw0KPiA+ICsJaWYgKHN0YXR1cyA8 IDApDQo+ID4gKwkJZ290byBmcmVlX2lycV92ZWN0b3JzOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9 IGdwdV9wb3B1bGF0ZV9jbGllbnQoaTJjZCwgcGRldi0+aXJxKTsNCj4gPiArCWlmIChzdGF0dXMg PCAwKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3B1X3BvcHVsYXRlX2NsaWVudCBm YWlsZWQgJWRcbiIsDQo+IHN0YXR1cyk7DQo+ID4gKwkJZ290byBkZWxfYWRhcHRlcjsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2RlbF9hZGFwdGVyOg0KPiA+ ICsJaTJjX2RlbF9hZGFwdGVyKCZpMmNkLT5hZGFwdGVyKTsNCj4gPiArZnJlZV9pcnFfdmVjdG9y czoNCj4gPiArCXBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpOw0KPiA+ICsJcmV0dXJuIHN0YXR1 czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZ3B1X2kyY19yZW1vdmUoc3RydWN0 IHBjaV9kZXYgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9n ZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsNCj4gPiArDQo+ID4gKwlpMmNfZGVsX2FkYXB0ZXIoJmky Y2QtPmFkYXB0ZXIpOw0KPiA+ICsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KSB7DQo+ID4gKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsNCj4gPiArDQo+ID4gKwlncHVfZW5hYmxlX2kyY19idXMoaTJjZCk7DQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArVU5JVkVSU0FMX0RFVl9QTV9PUFMoZ3B1X2kyY19kcml2 ZXJfcG0sIE5VTEwsIGdwdV9pMmNfcmVzdW1lLA0KPiBOVUxMKTsNCj4gPiArDQo+ID4gK3N0YXRp YyBzdHJ1Y3QgcGNpX2RyaXZlciBncHVfaTJjX2RyaXZlciA9IHsNCj4gPiArCS5uYW1lCQk9ICJu dmlkaWEtZ3B1IiwNCj4gPiArCS5pZF90YWJsZQk9IGdwdV9pMmNfaWRzLA0KPiA+ICsJLnByb2Jl CQk9IGdwdV9pMmNfcHJvYmUsDQo+ID4gKwkucmVtb3ZlCQk9IGdwdV9pMmNfcmVtb3ZlLA0KPiA+ ICsJLmRyaXZlcgkJPSB7DQo+ID4gKwkJLnBtCT0gJmdwdV9pMmNfZHJpdmVyX3BtLA0KPiA+ICsJ fSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9wY2lfZHJpdmVyKGdwdV9pMmNfZHJpdmVy KTsNCj4gPiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5j b20+Iik7DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTnZpZGlhIEdQVSBJMkMgY29udHJvbGxl ciBEcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+Cg==