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: [v12,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: <4d00f1db072a4fc2a7a49e09b503fe72@bgmail101.nvidia.com> Date: Wed, 12 Sep 2018 22:22:09 +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: SGkgUGV0ZXIsDQoNCj4gPj4+IFRoaXMgZHJpdmVyIGFkZHMgSTJDIGJ1cyBkcml2ZXIgdG8gY29t bXVuaWNhdGUgd2l0aCBUeXBlLUMgY29udHJvbGxlci4NCj4gPj4+IEkyQyBjbGllbnQgZHJpdmVy IHdpbGwgYmUgcGFydCBvZiBVU0IgVHlwZS1DIFVDU0kgZHJpdmVyLg0KPiA+Pj4NCj4gPj4+IFNp Z25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+DQo+ID4+PiBSZXZpZXdl ZC1ieTogQW5keSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21haWwuY29tPg0KPiA+Pj4g UmV2aWV3ZWQtYnk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVs LmNvbT4NCj4gPj4+IC0tLQ0KPiA+Pj4gQ2hhbmdlcyBmcm9tIHYxIC0+IHYyDQo+ID4+PiAJTm9u ZQ0KPiA+Pj4gQ2hhbmdlcyBmcm9tIHYyIC0+IHYzDQo+ID4+PiAJRml4ZWQgcmV2aWV3IGNvbW1l bnRzIGZyb20gQW5keSBhbmQgVGhpZXJyeQ0KPiA+Pj4gCVJlbmFtZSBpMmMtZ3B1LmMgLT4gaTJj LW52aWRpYS1ncHUuYyBDaGFuZ2VzIGZyb20gdjMgLT4gdjQNCj4gPj4+IAlGaXhlZCByZXZpZXcg Y29tbWVudHMgZnJvbSBBbmR5DQo+ID4+PiBDaGFuZ2VzIGZyb20gdjQgLT4gdjUNCj4gPj4+IAlG aXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBBbmR5DQo+ID4+PiBDaGFuZ2VzIGZyb20gdjUgLT4g djYNCj4gPj4+IAlOb25lDQo+ID4+PiBDaGFuZ2VzIGZyb20gdjYgLT4gdjcgLT4gdjgNCj4gPj4+ IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcg0KPiA+Pj4gCS0gQWRkIGltcGxpY2l0 IFNUT1AgZm9yIGxhc3Qgd3JpdGUgbWVzc2FnZQ0KPiA+Pj4gCS0gQWRkIGkyY19hZGFwdGVyX3F1 aXJrcyB3aXRoIG1heF9yZWFkX2xlbiBhbmQNCj4gPj4+IAkgIEkyQ19BUV9DT01CIGZsYWdzDQo+ ID4+PiBDaGFuZ2VzIGZyb20gdjggLT4gdjkNCj4gPj4+IAlGaXhlZCByZXZpZXcgY29tbWVudHMg ZnJvbSBQZXRlcg0KPiA+Pj4gCS0gRHJvcCBkb19zdGFydCBmbGFnDQo+ID4+PiAJLSBVc2UgaTJj XzhiaXRfYWRkcl9mcm9tX21zZygpDQo+ID4+PiBDaGFuZ2VzIGZyb20gdjkgLT4gdjEwDQo+ID4+ PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXINCj4gPj4+IAktIERyb3BwZWQgSTJD X0ZVTkNfU01CVVNfRU1VTA0KPiA+Pj4gCS0gRHJvcHBlZCBsb2NhbCBtdXRleA0KPiA+Pj4gQ2hh bmdlcyBmcm9tIHYxMCAtPiB2MTENCj4gPj4+IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQ ZXRlcg0KPiA+Pj4gCS0gTW92ZWQgc3RvcCBpbiBtYXN0ZXJfeGZlciBhdCBlbmQgb2YgbWVzc2Fn ZQ0KPiA+Pj4gCS0gQ2hhbmdlIGkyY19yZWFkIHdpdGhvdXQgU1RPUA0KPiA+Pj4gCS0gRHJvcHBl ZCBJMkNfQUNfQ09NQiogZmxhZ3MNCj4gPj4+IENoYW5nZXMgZnJvbSB2MTEgLT4gdjEyDQo+ID4+ PiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXINCj4gPj4+IAktIFJlbW92ZWQgY2xl YXJpbmcgb2YgZW1wdHkgYml0cw0KPiA+Pj4gCS0gRml4IG1hc3Rlcl94ZmVyIGZvciBjb3JyZWN0 IHN0b3AgdXNlDQo+ID4+Pg0KPiA+Pj4gIERvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZp ZGlhLWdwdSB8ICAxOCArKw0KPiA+Pj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNyArDQo+ID4+PiAgZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgICAgICAg ICAgICAgIHwgICA5ICsNCj4gPj4+ICBkcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgIDEgKw0KPiA+Pj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5j ICAgICB8IDM2OA0KPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+Pj4g IDUgZmlsZXMgY2hhbmdlZCwgNDAzIGluc2VydGlvbnMoKykNCj4gPj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1DQo+ID4+PiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jDQo+ID4+ Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlh LWdwdQ0KPiA+Pj4gYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUNCj4g Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+PiBpbmRleCAwMDAwMDAwLi4zMTg4NGQyDQo+ ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMv aTJjLW52aWRpYS1ncHUNCj4gPj4+IEBAIC0wLDAgKzEsMTggQEANCj4gPj4+ICtLZXJuZWwgZHJp dmVyIGkyYy1udmlkaWEtZ3B1DQo+ID4+PiArDQo+ID4+PiArRGF0YXNoZWV0OiBub3QgcHVibGlj bHkgYXZhaWxhYmxlLg0KPiA+Pj4gKw0KPiA+Pj4gK0F1dGhvcnM6DQo+ID4+PiArCUFqYXkgR3Vw dGEgPGFqYXlnQG52aWRpYS5jb20+DQo+ID4+PiArDQo+ID4+PiArRGVzY3JpcHRpb24NCj4gPj4+ ICstLS0tLS0tLS0tLQ0KPiA+Pj4gKw0KPiA+Pj4gK2kyYy1udmlkaWEtZ3B1IGlzIGEgZHJpdmVy IGZvciBJMkMgY29udHJvbGxlciBpbmNsdWRlZCBpbiBOVklESUENCj4gPj4+ICtUdXJpbmcgYW5k IGxhdGVyIEdQVXMgYW5kIGl0IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBUeXBlLUMNCj4g Pj4+ICtjb250cm9sbGVyDQo+ID4+IG9uIEdQVXMuDQo+ID4+PiArDQo+ID4+PiArSWYgeW91ciAn bHNwY2kgLXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZywNCj4g Pj4+ICsNCj4gPj4+ICswMTowMC4zIFNlcmlhbCBidXMgY29udHJvbGxlciBbMGM4MF06IE5WSURJ QSBDb3Jwb3JhdGlvbiBEZXZpY2UNCj4gPj4+ICsxYWQ5IChyZXYgYTEpDQo+ID4+PiArDQo+ID4+ PiArdGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgSTJDIGNvbnRyb2xsZXIgb2Yg eW91ciBHUFUuDQo+ID4+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUyBp bmRleCBkODcwY2I1Li5iNzFiMGI0DQo+IDEwMDY0NA0KPiA+Pj4gLS0tIGEvTUFJTlRBSU5FUlMN Cj4gPj4+ICsrKyBiL01BSU5UQUlORVJTDQo+ID4+PiBAQCAtNjc5OCw2ICs2Nzk4LDEzIEBAIEw6 CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnDQo+ID4+PiAgUzoJTWFpbnRhaW5lZA0KPiA+Pj4g IEY6CWRyaXZlcnMvaTJjL2kyYy1jb3JlLWFjcGkuYw0KPiA+Pj4NCj4gPj4+ICtJMkMgQ09OVFJP TExFUiBEUklWRVIgRk9SIE5WSURJQSBHUFUNCj4gPj4+ICtNOglBamF5IEd1cHRhIDxhamF5Z0Bu dmlkaWEuY29tPg0KPiA+Pj4gK0w6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcNCj4gPj4+ICtT OglNYWludGFpbmVkDQo+ID4+PiArRjoJRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1udmlk aWEtZ3B1DQo+ID4+PiArRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMNCj4g Pj4+ICsNCj4gPj4+ICBJMkMgTVVYRVMNCj4gPj4+ICBNOglQZXRlciBSb3NpbiA8cGVkYUBheGVu dGlhLnNlPg0KPiA+Pj4gIEw6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcNCj4gPj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9L Y29uZmlnDQo+ID4+PiBpbmRleCA0NTFkNGFlLi5lZWQ4MjdiIDEwMDY0NA0KPiA+Pj4gLS0tIGEv ZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcNCj4gPj4+ICsrKyBiL2RyaXZlcnMvaTJjL2J1c3Nl cy9LY29uZmlnDQo+ID4+PiBAQCAtMjI0LDYgKzIyNCwxNSBAQCBjb25maWcgSTJDX05GT1JDRTJf UzQ5ODUNCj4gPj4+ICAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVs ZS4gIElmIHNvLCB0aGUgbW9kdWxlDQo+ID4+PiAgCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW5mb3Jj ZTItczQ5ODUuDQo+ID4+Pg0KPiA+Pj4gK2NvbmZpZyBJMkNfTlZJRElBX0dQVQ0KPiA+Pj4gKwl0 cmlzdGF0ZSAiTlZJRElBIEdQVSBJMkMgY29udHJvbGxlciINCj4gPj4+ICsJZGVwZW5kcyBvbiBQ Q0kNCj4gPj4+ICsJaGVscA0KPiA+Pj4gKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9u LCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZQ0KPiA+Pj4gKwkgIE5WSURJQSBHUFUg STJDIGNvbnRyb2xsZXIgd2hpY2ggaXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQ0KPiA+ PiBHUFUncw0KPiA+Pj4gKwkgIFR5cGUtQyBjb250cm9sbGVyLiBUaGlzIGRyaXZlciBjYW4gYWxz byBiZSBidWlsdCBhcyBhIG1vZHVsZSBjYWxsZWQNCj4gPj4+ICsJICBpMmMtbnZpZGlhLWdwdS4N Cj4gPj4+ICsNCj4gPj4+ICBjb25maWcgSTJDX1NJUzU1OTUNCj4gPj4+ICAJdHJpc3RhdGUgIlNp UyA1NTk1Ig0KPiA+Pj4gIAlkZXBlbmRzIG9uIFBDSQ0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQ0KPiA+Pj4gYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZp bGUgaW5kZXggMThiMjZhZi4uZDQ5OTgxMyAxMDA2NDQNCj4gPj4+IC0tLSBhL2RyaXZlcnMvaTJj L2J1c3Nlcy9NYWtlZmlsZQ0KPiA+Pj4gKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxl DQo+ID4+PiBAQCAtMTQwLDUgKzE0MCw2IEBAIG9iai0kKENPTkZJR19JMkNfU0lCWVRFKQkrPSBp MmMtc2lieXRlLm8NCj4gPj4+ICBvYmotJChDT05GSUdfSTJDX1hHRU5FX1NMSU1QUk8pICs9IGky Yy14Z2VuZS1zbGltcHJvLm8NCj4gPj4+ICBvYmotJChDT05GSUdfU0N4MjAwX0FDQikJKz0gc2N4 MjAwX2FjYi5vDQo+ID4+PiAgb2JqLSQoQ09ORklHX0kyQ19GU0kpCQkrPSBpMmMtZnNpLm8NCj4g Pj4+ICtvYmotJChDT05GSUdfSTJDX05WSURJQV9HUFUpCSs9IGkyYy1udmlkaWEtZ3B1Lm8NCj4g Pj4+DQo+ID4+PiAgY2NmbGFncy0kKENPTkZJR19JMkNfREVCVUdfQlVTKSA6PSAtRERFQlVHIGRp ZmYgLS1naXQNCj4gPj4+IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMNCj4g Pj4+IGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMNCj4gPj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4+PiBpbmRleCAwMDAwMDAwLi4wYzE2YjBhDQo+ID4+PiAtLS0gL2Rl di9udWxsDQo+ID4+PiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYw0K PiA+Pj4gQEAgLTAsMCArMSwzNjggQEANCj4gPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMA0KPiA+Pj4gKy8qDQo+ID4+PiArICogTnZpZGlhIEdQVSBJMkMgY29udHJvbGxl ciBEcml2ZXINCj4gPj4+ICsgKg0KPiA+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBOVklESUEg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4+PiArICogQXV0aG9yOiBBamF5 IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiAgKi8gI2luY2x1ZGUNCj4gPj4+ICs8bGludXgvZGVs YXkuaD4gI2luY2x1ZGUgPGxpbnV4L2kyYy5oPiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ DQo+ID4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiAjaW5jbHVkZSA8bGludXgvcGNpLmg+ ICNpbmNsdWRlDQo+ID4+PiArPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPiAjaW5jbHVkZSA8bGlu dXgvcG0uaD4gI2luY2x1ZGUNCj4gPj4+ICs8bGludXgvcG1fcnVudGltZS5oPg0KPiA+Pj4gKw0K PiA+Pj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+DQo+ID4+PiArDQo+ID4+PiArLyogSTJD IGRlZmluaXRpb25zICovDQo+ID4+PiArI2RlZmluZSBJMkNfTVNUX0NOVEwJCQkJMHgwMA0KPiA+ Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9TVEFSVAkJCUJJVCgwKQ0KPiA+Pj4gKyNkZWZp bmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJQklUKDEpDQo+ID4+PiArI2RlZmluZSBJMkNfTVNU X0NOVExfQ01EX1JFQUQJCQkoMSA8PCAyKQ0KPiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NN RF9XUklURQkJCSgyIDw8IDIpDQo+ID4+PiArI2RlZmluZSBJMkNfTVNUX0NOVExfQlVSU1RfU0la RV9TSElGVAkJNg0KPiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9OQUNLCQkJQklUKDI4 KQ0KPiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVUwkJCUdFTk1BU0soMzAsIDI5KQ0K PiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19PS0FZCQkoMCA8PCAyOSkNCj4gPj4+ ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfTk9fQUNLCQkoMSA8PCAyOSkNCj4gPj4+ICsj ZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfVElNRU9VVAkJKDIgPDwgMjkpDQo+ID4+PiArI2Rl ZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZCQkoMyA8PCAyOSkNCj4gPj4+ICsjZGVm aW5lIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSCQlCSVQoMzEpDQo+ID4+PiArDQo+ID4+PiAr I2RlZmluZSBJMkNfTVNUX0FERFIJCQkJMHgwNA0KPiA+Pj4gKw0KPiA+Pj4gKyNkZWZpbmUgSTJD X01TVF9JMkMwX1RJTUlORwkJCQkweDA4DQo+ID4+PiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElN SU5HX1NDTF9QRVJJT0RfMTAwS0haCQkweDEwZQ0KPiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9JMkMw X1RJTUlOR19USU1FT1VUX0NMS19DTlQJCTE2DQo+ID4+PiArI2RlZmluZSBJMkNfTVNUX0kyQzBf VElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1NQ0KPiA+Pj4gKyNkZWZpbmUgSTJDX01TVF9J MkMwX1RJTUlOR19USU1FT1VUX0NIRUNLCQlCSVQoMjQpDQo+ID4+PiArDQo+ID4+PiArI2RlZmlu ZSBJMkNfTVNUX0RBVEEJCQkJCTB4MGMNCj4gPj4+ICsNCj4gPj4+ICsjZGVmaW5lIEkyQ19NU1Rf SFlCUklEX1BBRENUTAkJCQkweDIwDQo+ID4+PiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURD VExfTU9ERV9JMkMJCQlCSVQoMCkNCj4gPj4+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENU TF9JMkNfU0NMX0lOUFVUX1JDVg0KPiA+PiAJQklUKDE0KQ0KPiA+Pj4gKyNkZWZpbmUgSTJDX01T VF9IWUJSSURfUEFEQ1RMX0kyQ19TREFfSU5QVVRfUkNWDQo+ID4+IAlCSVQoMTUpDQo+ID4+PiAr DQo+ID4+PiArc3RydWN0IGdwdV9pMmNfZGV2IHsNCj4gPj4+ICsJc3RydWN0IGRldmljZSAqZGV2 Ow0KPiA+Pj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7DQo+ID4+PiArCXN0cnVjdCBpMmNfYWRhcHRl ciBhZGFwdGVyOw0KPiA+Pj4gKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmdwdV9jY2d4X3Vjc2k7 IH07DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIHZvaWQgZ3B1X2VuYWJsZV9pMmNfYnVzKHN0cnVj dCBncHVfaTJjX2RldiAqaTJjZCkgew0KPiA+Pj4gKwl1MzIgdmFsOw0KPiA+Pj4gKw0KPiA+Pj4g KwkvKiBlbmFibGUgSTJDICovDQo+ID4+PiArCXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNf TVNUX0hZQlJJRF9QQURDVEwpOw0KPiA+Pj4gKwl2YWwgfD0gSTJDX01TVF9IWUJSSURfUEFEQ1RM X01PREVfSTJDIHwNCj4gPj4+ICsJCUkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0NMX0lOUFVU X1JDViB8DQo+ID4+PiArCQlJMkNfTVNUX0hZQlJJRF9QQURDVExfSTJDX1NEQV9JTlBVVF9SQ1Y7 DQo+ID4+PiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwp Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBlbmFibGUgMTAwS0haIG1vZGUgKi8NCj4gPj4+ICsJdmFs ID0gSTJDX01TVF9JMkMwX1RJTUlOR19TQ0xfUEVSSU9EXzEwMEtIWjsNCj4gPj4+ICsJdmFsIHw9 IChJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgNCj4gPj4+ICsJICAgIDw8 IEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UKTsNCj4gPj4+ICsJdmFsIHw9IEky Q19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DSEVDSzsNCj4gPj4+ICsJd3JpdGVsKHZhbCwgaTJj ZC0+cmVncyArIEkyQ19NU1RfSTJDMF9USU1JTkcpOyB9DQo+ID4+PiArDQo+ID4+PiArc3RhdGlj IGludCBncHVfaTJjX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QpIHsNCj4g Pj4+ICsJdW5zaWduZWQgbG9uZyB0YXJnZXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygx MDAwKTsNCj4gPj4+ICsJdTMyIHZhbDsNCj4gPj4+ICsNCj4gPj4+ICsJZG8gew0KPiA+Pj4gKwkJ dmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7DQo+ID4+PiArCQlpZiAoISh2 YWwgJiBJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUikpDQo+ID4+DQo+ID4+IEl0IG9jY3VycmVk IHRvIG1lIHRoYXQgZ2VuZXJhdGluZyBOQUNLIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHJlYWRzLA0K PiA+PiBhbmQgdGhhdCB5b3Ugb25seSB3YW50IHRvIGhhdmUgYSBOQUNLIGFmdGVyIHRoZSBmaW5h bCBieXRlIGluIGEgcmVhZA0KPiA+PiBtZXNzYWdlcy4gU28sIGhlcmUncyBhIG5ldyBhdHRlbXB0 Lg0KPiA+Pg0KPiA+PiBXaGF0IGlmIHlvdSByZXBsYWNlIHRoZSBhYm92ZSB0ZXN0IHdpdGgNCj4g Pj4NCj4gPj4gCQlpZiAoISh2YWwgJiBJMkNfTVNUX0NOVExfUkVBRCkpDQo+ID4+DQo+ID4+IChz aW5jZSBhbGwgY3ljbGUtdHJpZ2dlcnMgYXJlIGFsc28gcmVhZHMsIGF0IGxlYXN0IGN1cnJlbnRs eSwgYW5kIHdlDQo+ID4+IGFsc28gd2FudCB0byB3YWl0IGZvciB0aGUgdGFpbCByZWFkcyB0byBj b21wbGV0ZSBiZWZvcmUgd2UgdHJ5IHRvIGdldA0KPiA+PiB0aGUgcmVjZWl2ZWQgZGF0YSBmcm9t IHRoZSByZWdpc3RlcikNCj4gPj4NCj4gPj4gYW5kIHRoZW4uLi4NCj4gPj4NCj4gPj4+ICsJCQli cmVhazsNCj4gPj4+ICsJCWlmICgodmFsICYgSTJDX01TVF9DTlRMX1NUQVRVUykgIT0NCj4gPj4+ ICsJCQkJSTJDX01TVF9DTlRMX1NUQVRVU19CVVNfQlVTWSkNCj4gPj4+ICsJCQlicmVhazsNCj4g Pj4+ICsJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsNCj4gPj4+ICsJfSB3aGlsZSAodGltZV9p c19hZnRlcl9qaWZmaWVzKHRhcmdldCkpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAodGltZV9pc19i ZWZvcmVfamlmZmllcyh0YXJnZXQpKSB7DQo+ID4+PiArCQlkZXZfZXJyKGkyY2QtPmRldiwgImky YyB0aW1lb3V0IGVycm9yICV4XG4iLCB2YWwpOw0KPiA+Pj4gKwkJcmV0dXJuIC1FVElNRTsNCj4g Pj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01T VF9DTlRMKTsNCj4gPj4+ICsJc3dpdGNoICh2YWwgJiBJMkNfTVNUX0NOVExfU1RBVFVTKSB7DQo+ ID4+PiArCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19PS0FZOg0KPiA+Pj4gKwkJcmV0dXJuIDA7 DQo+ID4+PiArCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0s6DQo+ID4+PiArCQlyZXR1 cm4gLUVJTzsNCj4gPj4+ICsJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX1RJTUVPVVQ6DQo+ID4+ PiArCQlyZXR1cm4gLUVUSU1FOw0KPiA+Pj4gKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVT X0JVU1k6DQo+ID4+PiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+Pj4gKwlkZWZhdWx0Og0KPiA+Pj4g KwkJcmV0dXJuIDA7DQo+ID4+PiArCX0NCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGlj IGludCBncHVfaTJjX3JlYWQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCB1OCAqZGF0YSwgdTE2 DQo+ID4+PiArbGVuKSB7DQo+ID4+PiArCWludCBzdGF0dXM7DQo+ID4+PiArCXUzMiB2YWw7DQo+ ID4+PiArDQo+ID4+PiArCXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NO VExfQ01EX1JFQUQgfA0KPiA+Pj4gKwkJKGxlbiA8PCBJMkNfTVNUX0NOVExfQlVSU1RfU0laRV9T SElGVCkgfA0KPiA+Pj4gKwkJSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIgfA0KPiA+PiBJMkNf TVNUX0NOVExfR0VOX05BQ0s7DQo+ID4+PiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNf TVNUX0NOVEwpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlzdGF0dXMgPSBncHVfaTJjX2NoZWNrX3N0YXR1 cyhpMmNkKTsNCj4gPj4+ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4+PiArCQlyZXR1cm4gc3RhdHVz Ow0KPiA+Pj4gKw0KPiA+Pj4gKwl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9EQVRB KTsNCj4gPj4+ICsJc3dpdGNoIChsZW4pIHsNCj4gPj4+ICsJY2FzZSAxOg0KPiA+Pj4gKwkJZGF0 YVswXSA9IHZhbDsNCj4gPj4+ICsJCWJyZWFrOw0KPiA+Pj4gKwljYXNlIDI6DQo+ID4+PiArCQlw dXRfdW5hbGlnbmVkX2JlMTYodmFsLCBkYXRhKTsNCj4gPj4+ICsJCWJyZWFrOw0KPiA+Pj4gKwlj YXNlIDM6DQo+ID4+PiArCQlwdXRfdW5hbGlnbmVkX2JlMTYodmFsID4+IDgsIGRhdGEpOw0KPiA+ Pj4gKwkJZGF0YVsyXSA9IHZhbDsNCj4gPj4+ICsJCWJyZWFrOw0KPiA+Pj4gKwljYXNlIDQ6DQo+ ID4+PiArCQlwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBkYXRhKTsNCj4gPj4+ICsJCWJyZWFrOw0K PiA+Pj4gKwlkZWZhdWx0Og0KPiA+Pj4gKwkJYnJlYWs7DQo+ID4+PiArCX0NCj4gPj4+ICsJcmV0 dXJuIHN0YXR1czsNCj4gPj4+ICt9DQo+ID4+DQo+ID4+IC4uLnJlcGxhY2UgeW91ciBncHVfaTJj X3JlYWQgd2l0aCB0aGlzOg0KPiA+Pg0KPiA+PiAjZGVmaW5lIEdQVV9NQVhfQlVSU1QgMQ0KPiA+ PiBzdGF0aWMgaW50IGdwdV9pMmNfcmVhZChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QsIHU4ICpk YXRhLCB1MTYgbGVuKSB7DQo+ID4+IAl1MTYgYnVyc3QgPSBtaW4obGVuLCBHUFVfTUFYX0JVUlNU KTsNCj4gPj4gCWludCBzdGF0dXM7DQo+ID4+IAl1MzIgdmFsOw0KPiA+Pg0KPiA+PiAJdmFsID0g STJDX01TVF9DTlRMX0dFTl9TVEFSVCB8IEkyQ19NU1RfQ05UTF9DTURfUkVBRCB8DQo+ID4+IAkJ KGJ1cnN0IDw8IEkyQ19NU1RfQ05UTF9CVVJTVF9TSVpFX1NISUZUKSB8DQo+ID4+IAkJSTJDX01T VF9DTlRMX0NZQ0xFX1RSSUdHRVI7DQo+ID4+DQo+ID4+IAlmb3IgKDs7KSB7DQo+ID4+IAkJaWYg KGxlbiA8PSBHUFVfTUFYX0JVUlNUKQ0KPiA+PiAJCQl2YWwgfD0gSTJDX01TVF9DTlRMX0dFTl9O QUNLOw0KPiA+PiAJCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOw0KPiA+ Pg0KPiA+PiAJCXN0YXR1cyA9IGdwdV9pMmNfY2hlY2tfc3RhdHVzKGkyY2QpOw0KPiA+PiAJCWlm IChzdGF0dXMgPCAwKQ0KPiA+PiAJCQlyZXR1cm4gc3RhdHVzOw0KPiA+Pg0KPiA+PiAJCXZhbCA9 IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0RBVEEpOw0KPiA+PiAJCXN3aXRjaCAoYnVyc3Qp IHsNCj4gPj4gCQljYXNlIDE6DQo+ID4+IAkJCWRhdGFbMF0gPSB2YWw7DQo+ID4+IAkJCWJyZWFr Ow0KPiA+PiAJCWNhc2UgMjoNCj4gPj4gCQkJcHV0X3VuYWxpZ25lZF9iZTE2KHZhbCwgZGF0YSk7 DQo+ID4+IAkJCWJyZWFrOw0KPiA+PiAJCWNhc2UgMzoNCj4gPj4gCQkJcHV0X3VuYWxpZ25lZF9i ZTE2KHZhbCA+PiA4LCBkYXRhKTsNCj4gPj4gCQkJZGF0YVsyXSA9IHZhbDsNCj4gPj4gCQkJYnJl YWs7DQo+ID4+IAkJY2FzZSA0Og0KPiA+PiAJCQlwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBkYXRh KTsNCj4gPj4gCQkJYnJlYWs7DQo+ID4+IAkJZGVmYXVsdDoNCj4gPj4gCQkJYnJlYWs7DQo+ID4+ IAkJfQ0KPiA+Pg0KPiA+PiAJCWlmIChsZW4gPD0gR1BVX01BWF9CVVJTVCkNCj4gPj4gCQkJYnJl YWs7DQo+ID4+DQo+ID4+IAkJZGF0YSArPSBHUFVfTUFYX0JVUlNUOw0KPiA+PiAJCWxlbiAtPSBH UFVfTUFYX0JVUlNUOw0KPiA+Pg0KPiA+PiAJCWJ1cnN0ID0gbWluKGxlbiwgR1BVX01BWF9CVVJT VCk7DQo+ID4+IAkJdmFsID0gSTJDX01TVF9DTlRMX0NNRF9SRUFEIHwNCj4gPj4gCQkJKGJ1cnN0 IDw8IEkyQ19NU1RfQ05UTF9CVVJTVF9TSVpFX1NISUZUKTsNCj4gPj4gCX0NCj4gPj4NCj4gPj4g CXJldHVybiBzdGF0dXM7DQo+ID4+IH0NCj4gPj4NCj4gPj4gSWYgdGhhdCB3b3JrcywNCj4gPj4g dGhlbiBjaGFuZ2UgR1BVX01BWF9CVVJTVCB0byA0LCBkcm9wIHRoZSBxdWlyayBhbmQgdGhlIHNw bGl0dGluZyBvZg0KPiA+PiB0aGUgcmVhZHMgaW4gcGF0Y2ggMi8yIGFuZCBjaGVjayB0aGF0IHRv by4uLg0KPiA+Pg0KPiA+PiAqZmluZ2VycyBjcm9zc2VkKg0KPiA+IFVuZm9ydHVuYXRlbHksIHRo YXQgYWxzbyBkaWRuJ3Qgd29yay4gSSB0cmllZCBzb21lIHR3ZWFrcyB3aXRoDQo+ID4gX1RSSUdH RVIgYW5kIF9TVEFSVCBidXQgdGhhdCBhbHNvIGRpZG4ndCBoZWxwLg0KPiANCj4gRGlkIHlvdSBu b3RpY2UgdGhlIGFib3ZlIGNoYW5nZSB0byBncHVfaTJjX2NoZWNrX3N0YXR1cz8NClllcy4gDQo+ IEkgYXNzdW1lIHNvIGFuZA0KPiB0aGF0IHRoZXJlIHNpbXBseSBpcyBzb21ldGhpbmcgYWJvdXQg dGhlIGNoaXAgdGhhdCBpcyBub3QgdW5kZXJzdG9vZC4NCkNhbiB3ZSBnZXQgdGhlIHdvcmtpbmcg c2V0IGluIHdoaWxlIHRoZSBpc3N1ZXMgaXMgYmVpbmcgZGVidWdnZWQ/DQogDQo+ID4+PiArc3Rh dGljIGludCBncHVfcG9wdWxhdGVfY2xpZW50KHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCwgaW50 IGlycSkgew0KPiA+Pj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2NneF9jbGllbnQ7DQo+ID4+PiAr DQo+ID4+PiArCWkyY2QtPmdwdV9jY2d4X3Vjc2kgPSBkZXZtX2t6YWxsb2MoaTJjZC0+ZGV2LA0K PiA+Pj4gKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyksDQo+ID4+DQo+ID4+ IEkgcHJlZmVyIHNpemVvZigqaTJjZC0+Z3B1X2NjZ3hfdWNzaSkuIEVzcGVjaWFsbHkgd2hlbiB0 aGUgdHlwZSBpcw0KPiA+PiBmYXIgYXdheSBhcyBpdCBpcyBoZXJlLi4uDQo+ID4gRmlyc3Qgb25l IGxvb2tzIG1vcmUgcmVhZGFibGUgYW5kIGNsZWFuZXIgdG8gbWUgYnV0IHdpbGwgY2hhbmdlLg0K PiA+DQo+ID4gc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyksDQo+ID4gc2l6ZW9mKCppMmNk LT5ncHVfY2NneF91Y3NpKSwNCj4gDQo+IEluIG15IGV4cGVyaWVuY2UsIHRoZSBsYXR0ZXIgdmFy aWFudCBpcyBlYXNpZXIgdG8ga2VlcCBjb3JyZWN0IGlmL3doZW4gdGhlIGNvZGUNCj4gaXMgY2hh bmdlZC4gQnV0IHllcywgaXQgaXMgYSBtYXR0ZXIgb2YgdGFzdGUuLi4NCj4gDQo+ID4+PiArCQkJ CQkgICBHRlBfS0VSTkVMKTsNCj4gPj4+ICsJaWYgKCFpMmNkLT5ncHVfY2NneF91Y3NpKQ0KPiA+ Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4+PiArDQo+ID4+PiArCXN0cmxjcHkoaTJjZC0+Z3B1 X2NjZ3hfdWNzaS0+dHlwZSwgImNjZ3gtdWNzaSIsDQo+ID4+PiArCQlzaXplb2YoaTJjZC0+Z3B1 X2NjZ3hfdWNzaS0+dHlwZSkpOw0KPiA+Pj4gKwlpMmNkLT5ncHVfY2NneF91Y3NpLT5hZGRyID0g MHg4Ow0KPiA+Pj4gKwlpMmNkLT5ncHVfY2NneF91Y3NpLT5pcnEgPSBpcnE7DQo+ID4+PiArCWNj Z3hfY2xpZW50ID0gaTJjX25ld19kZXZpY2UoJmkyY2QtPmFkYXB0ZXIsIGkyY2QtPmdwdV9jY2d4 X3Vjc2kpOw0KPiA+Pj4gKwlpZiAoIWNjZ3hfY2xpZW50KQ0KPiA+Pj4gKwkJcmV0dXJuIC1FTk9E RVY7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiAwOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ ICtzdGF0aWMgaW50IGdwdV9pMmNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0 cnVjdA0KPiA+Pj4gK3BjaV9kZXZpY2VfaWQgKmlkKSB7DQo+ID4+PiArCXN0cnVjdCBncHVfaTJj X2RldiAqaTJjZDsNCj4gPj4+ICsJaW50IHN0YXR1czsNCj4gPj4+ICsNCj4gPj4+ICsJaTJjZCA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGdwdV9pMmNfZGV2KSwNCj4g Pj4+ICtHRlBfS0VSTkVMKTsNCj4gPj4NCj4gPj4gV2hpbGUgYXQgaXQsIHlvdSBtaWdodCBhcyB3 ZWxsIGNoYW5nZSB0aGlzIHRvIHNpemVvZigqaTJjZCksIGFuZA0KPiA+IE9rLg0KPiA+DQo+ID4+ IHBsZWFzZSBjaGVjayBmb3IgdGhlIHBhdHRlcm4gaW4gcGF0Y2ggMi8yLg0KPiA+IEkgaG9wZSB5 b3Ugc2F3IHRoZSBsYXRlc3QgcmVzcG9uc2UgYXQgWzFdLiBUaGUgY2hhbmdlIHdvcmtzIG9uDQo+ ID4gbXVsdGlwbGUgc3lzdGVtcyBhbmQgbm8gZXJyb3IgaGFzIGJlZW4gcmVwb3J0ZWQgeWV0Lg0K PiA+IFdoYXQgZWxzZSAoYW5kIGhvdykgdG8gY2hlY2sgPw0KPiA+DQo+ID4gWzFdIGh0dHBzOi8v bWFyYy5pbmZvLz9sPWxpbnV4LXVzYiZtPTE1MzY2NzEyNzUwMjk1OSZ3PTINCj4gDQo+IFllcywg SSBzYXcgdGhhdC4gSSBnZW5lcmFsbHkgYXNzdW1lIHRoYXQgcGF0Y2hlcyB3b3JrIGZvciB0aGUg c2VuZGVyLCBidXQgaWYgSQ0KPiBzZWUgc29tZXRoaW5nIHRoYXQgSSBjYW4ndCB1bmRlcnN0YW5k IGhvdyBpdCBjYW4gd29yaywgaXQgdGVuZCB0byBub3QgaG9sZCBvbg0KPiB0byB0aGUgYXNzdW1w dGlvbiBhbmQgZXhwbGljaXRseSBhc2sgaWYgdGhlIGNvZGUgaGFzIGluIGZhY3QgYmVlbiB0ZXN0 ZWQuLi4NClNvIEkgYXNzdW1lIG5vdGhpbmcgbW9yZSBsZWZ0IHRvIGNoZWNrIG9uIHRoaXMgZm9y IG5vdy4NCg0KVGhhbmtzDQpBamF5DQoNCi0tbnZwdWJsaWMgDQo+IENoZWVycywNCj4gUGV0ZXIK