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: [v10,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <169669881fb04e9694893f712baacff2@bgmail102.nvidia.com> Date: Mon, 10 Sep 2018 17:32:58 +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: SGkgUGV0ZXIsDQoNCj4gPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkcyBoYXZlIGEgQ3lwcmVzcyBD Q0d4IFR5cGUtQyBjb250cm9sbGVyIG92ZXIgSTJDDQo+ID4gaW50ZXJmYWNlLg0KPiA+DQo+ID4g VGhpcyBVQ1NJIEkyQyBkcml2ZXIgdXNlcyBJMkMgYnVzIGRyaXZlciBpbnRlcmZhY2UgZm9yIGNv bW11bmljYXRpbmcNCj4gPiB3aXRoIFR5cGUtQyBjb250cm9sbGVyLg0KPiA+DQo+ID4gU2lnbmVk LW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4NCj4gPiBSZXZpZXdlZC1ieTog QW5keSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21haWwuY29tPg0KPiA+IEFja2VkLWJ5 OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20+DQo+ID4g LS0tDQo+ID4gQ2hhbmdlcyBmcm9tIHYxIC0+IHYyDQo+ID4gCUZpeGVkIGlkZW50YXRpb24gaW4g ZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnIENoYW5nZXMgZnJvbSB2MiAtPg0KPiA+IHYz DQo+ID4gCUZpeGVkIG1vc3Qgb2YgY29tbWVudHMgZnJvbSBIZWlra2kNCj4gPiAJUmVuYW1lIHVj c2lfaTJjX2NjZy5jIC0+IHVjc2lfY2NnLmMNCj4gPiBDaGFuZ2VzIGZyb20gdjMgLT4gdjQNCj4g PiAJRml4ZWQgY29tbWVudHMgZnJvbSBBbmR5DQo+ID4gQ2hhbmdlcyBmcm9tIHY0IC0+IHY1DQo+ ID4gCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQ0KPiA+IENoYW5nZXMgZnJvbSB2NSAtPiB2Ng0K PiA+IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBHcmVnDQo+ID4gQ2hhbmdlcyBmcm9tIHY2 IC0+IHY3DQo+ID4gCU5vbmUNCj4gPiBDaGFuZ2VzIGZyb20gdjcgLT4gdjgNCj4gPiAJRml4ZWQg cmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXINCj4gPiAJLSBSZW1vdmVkIGVtcHR5IFNUT1AgbWVz c2FnZQ0KPiA+IAktIFVzaW5nIHN0YWNrIG1lbW9yeSBmb3IgaTJjX3RyYW5zZmVyKCkgQ2hhbmdl cyBmcm9tIHY4IC0+IHY5DQo+ID4gCU5vbmUNCj4gPiBDaGFuZ2VzIGZyb20gdjkgLT4gdjEwDQo+ ID4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyDQo+ID4gCS0gVXNlIFVDU0kgbWFj cm9zDQo+ID4gCS0gQ2xlYW51cHMNCj4gPg0KPiA+ICBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tj b25maWcgICAgfCAgMTAgKysNCj4gPiAgZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZSAg IHwgICAyICsNCj4gPiAgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jIHwgMzI0DQo+ ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBj aGFuZ2VkLCAzMzYgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvdHlwZWMvdWNzaS9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tj b25maWcgaW5kZXggZTM2ZDZjNy4uNzgxMTg4OCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3Vz Yi90eXBlYy91Y3NpL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tj b25maWcNCj4gPiBAQCAtMjMsNiArMjMsMTYgQEAgY29uZmlnIFRZUEVDX1VDU0kNCj4gPg0KPiA+ ICBpZiBUWVBFQ19VQ1NJDQo+ID4NCj4gPiArY29uZmlnIFVDU0lfQ0NHDQo+ID4gKwl0cmlzdGF0 ZSAiVUNTSSBJbnRlcmZhY2UgRHJpdmVyIGZvciBDeXByZXNzIENDR3giDQo+ID4gKwlkZXBlbmRz IG9uIEkyQw0KPiA+ICsJaGVscA0KPiA+ICsJICBUaGlzIGRyaXZlciBlbmFibGVzIFVDU0kgc3Vw cG9ydCBvbiBwbGF0Zm9ybXMgdGhhdCBleHBvc2UgYQ0KPiA+ICsJICBDeXByZXNzIENDR3ggVHlw ZS1DIGNvbnRyb2xsZXIgb3ZlciBJMkMgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArCSAgVG8gY29t cGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdp bGwNCj4gYmUNCj4gPiArCSAgY2FsbGVkIHVjc2lfY2NnLg0KPiA+ICsNCj4gPiAgY29uZmlnIFVD U0lfQUNQSQ0KPiA+ICAJdHJpc3RhdGUgIlVDU0kgQUNQSSBJbnRlcmZhY2UgRHJpdmVyIg0KPiA+ ICAJZGVwZW5kcyBvbiBBQ1BJDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vj c2kvTWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgaW5kZXgg N2FmYmVhNS4uMmY0OTAwYiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3VzYi90eXBlYy91Y3Np L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZQ0KPiA+ IEBAIC04LDMgKzgsNSBAQCB0eXBlY191Y3NpLXkJCQk6PSB1Y3NpLm8NCj4gPiAgdHlwZWNfdWNz aS0kKENPTkZJR19UUkFDSU5HKQkrPSB0cmFjZS5vDQo+ID4NCj4gPiAgb2JqLSQoQ09ORklHX1VD U0lfQUNQSSkJCSs9IHVjc2lfYWNwaS5vDQo+ID4gKw0KPiA+ICtvYmotJChDT05GSUdfVUNTSV9D Q0cpCQkrPSB1Y3NpX2NjZy5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vj c2kvdWNzaV9jY2cuYw0KPiA+IGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5jMzQ2ZTZhDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cu Yw0KPiA+IEBAIC0wLDAgKzEsMzI0IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIFVDU0kgZHJpdmVyIGZvciBDeXByZXNzIENDR3gg VHlwZS1DIGNvbnRyb2xsZXINCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3LTIw MTggTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKiBBdXRo b3I6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+DQo+ID4gKyAqDQo+ID4gKyAqIFNvbWUg Y29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9hY3BpLmMNCj4g PiArICovDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8YXNtL3Vu YWxpZ25lZC5oPg0KPiA+ICsjaW5jbHVkZSAidWNzaS5oIg0KPiA+ICsNCj4gPiArc3RydWN0IHVj c2lfY2NnIHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArCXN0cnVjdCB1Y3NpICp1 Y3NpOw0KPiA+ICsJc3RydWN0IHVjc2lfcHBtIHBwbTsNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQ7DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBD Q0dYX0kyQ19SQUJfREVWSUNFX01PREUJCQkweDAwDQo+ID4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFC X1JFQURfU0lMSUNPTl9JRAkJCTB4Mg0KPiA+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9JTlRSX1JF RwkJCQkweDA2DQo+ID4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX0ZXMV9WRVJTSU9OCQkJMHgyOA0K PiA+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9GVzJfVkVSU0lPTgkJCTB4MjANCj4gPiArI2RlZmlu ZSBDQ0dYX0kyQ19SQUJfVUNTSV9DT05UUk9MCQkJMHgzOQ0KPiA+ICsjZGVmaW5lIENDR1hfSTJD X1JBQl9VQ1NJX0NPTlRST0xfU1RBUlQJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBDQ0dYX0kyQ19S QUJfVUNTSV9DT05UUk9MX1NUT1AJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJf UkVTUE9OU0VfUkVHCQkJMHg3RQ0KPiA+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFf QkxPQ0sob2Zmc2V0KQkoMHhmMDAwIHwgKChvZmZzZXQpICYNCj4gMHhmZikpDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFVTQkNfVkVSU0lPTl9PRkZTRVQJKDB4MCkNCj4gPiArI2RlZmluZSBVU0JDX1ZF UlNJT05fU0laRQkoMikNCj4gPiArI2RlZmluZSBVU0JDX0NDSV9PRkZTRVQJCSgweDQpDQo+ID4g KyNkZWZpbmUgVVNCQ19DQ0lfU0laRQkJKDQpDQo+ID4gKyNkZWZpbmUgVVNCQ19DT05UUk9MX09G RlNFVAkoMHg4KQ0KPiA+ICsjZGVmaW5lIFVTQkNfQ09OVFJPTF9TSVpFCSg4KQ0KPiA+ICsjZGVm aW5lIFVTQkNfTVNHX0lOX09GRlNFVAkoMHgxMCkNCj4gPiArI2RlZmluZSBVU0JDX01TR19JTl9T SVpFCSgxNikNCj4gPiArI2RlZmluZSBVU0JDX01TR19PVVRfT0ZGU0VUCSgweDIwKQ0KPiA+ICsj ZGVmaW5lIFVTQkNfTVNHX09VVF9TSVpFCSgxNikNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY2Nn X3JlYWQoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEsIHUzMiBsZW4pDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB1Yy0+Y2xpZW50Ow0KPiA+ ICsJdW5zaWduZWQgY2hhciBidWZbMl07DQo+ID4gKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7 DQo+ID4gKwkJew0KPiA+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwNCj4gPiArCQkJLmZsYWdz ICA9IDB4MCwNCj4gPiArCQkJLmxlbgk9IDB4MiwNCj4gDQo+IHNpemVvZihidWYpPw0Kb2sNCj4g DQo+ID4gKwkJCS5idWYJPSBidWYsDQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS5hZGRy CT0gY2xpZW50LT5hZGRyLA0KPiA+ICsJCQkuZmxhZ3MgID0gSTJDX01fUkQsDQo+ID4gKwkJCS5i dWYJPSBkYXRhLA0KPiA+ICsJCX0sDQo+ID4gKwl9Ow0KPiA+ICsJdTMyIHJsZW4sIHJlbV9sZW4g PSBsZW47DQo+ID4gKwlpbnQgc3RhdHVzOw0KPiA+ICsNCj4gDQo+IElmIHlvdXIgdGFyZ2V0IEky QyBhZGFwdGVyIGhhZCBzdXBwb3J0ZWQgbGFyZ2VyIHJlYWRzLCB0aGlzIHdvdWxkIGhhdmUgYmVl biBhDQo+IHNpbmdsZSB4ZmVyIGluc3RlYWQgb2YgdGhlIGxvb3AsIGNvcnJlY3Q/IEkgdGhpbmsg dGhpcyBkZXNlcnZlcyBhIGNvbW1lbnQsIGFuZA0KPiBwZXJoYXBzIGUuZy4gdGhlIGVlcHJvbSBk cml2ZXJzIHNob3VsZCBiZSBleGFtaW5lZCB0byBzZWUgaG93IHRoZXkgaGFuZGxlDQo+IGRlZmlj aWVudCBJMkMgYWRhcHRlcnMgKHRoZXJlIGlzIGEgbW9kdWxlX3BhcmFtIG5hbWVkIGlvX2xpbWl0 IGluIHRoZSBhdDI0DQo+IGRyaXZlcikuIEJlY2F1c2UgaXQgaXMgYSBsaXR0bGUgYml0IHNhZCB0 byBwZW5hbGlzZSBhbGwgdXNlcnMganVzdCBiZWNhdXNlIHlvdSBoYXZlDQo+IGFuIGFkYXB0ZXIg d2l0aCBsaW1pdGF0aW9ucy4NCj4gT3IgaXMgdGhpcyBkcml2ZXIgdGllZCB0byB0aGF0IGFkYXB0 ZXI/DQo+IEFueXdheSwgSSdtIHNhdGlzZmllZCB3aXRoIGEgY29tbWVudCwgYXMgSSBkb24ndCBj YXJlIGFsbCB0aGF0IG11Y2guDQpJIGFtIHRoaW5raW5nIG9mIG1vdmluZyB0aGUgbG9vcCB0byB0 aGUgaTJjIGRyaXZlci4gDQogDQo+ID4gKwl3aGlsZSAocmVtX2xlbiA+IDApIHsNCj4gPiArCQlt c2dzWzFdLmJ1ZiA9ICZkYXRhW2xlbiAtIHJlbV9sZW5dOw0KPiA+ICsJCXJsZW4gPSBtaW5fdCh1 MTYsIHJlbV9sZW4sIDQpOw0KPiA+ICsJCW1zZ3NbMV0ubGVuID0gcmxlbjsNCj4gPiArCQlwdXRf dW5hbGlnbmVkX2xlMTYocmFiLCBidWYpOw0KPiA+ICsJCXN0YXR1cyA9IGkyY190cmFuc2Zlcihj bGllbnQtPmFkYXB0ZXIsIG1zZ3MsDQo+IEFSUkFZX1NJWkUobXNncykpOw0KPiA+ICsJCWlmIChz dGF0dXMgPCAwKSB7DQo+ID4gKwkJCWRldl9lcnIodWMtPmRldiwgImkyY190cmFuc2ZlciBmYWls ZWQgJWRcbiIsIHN0YXR1cyk7DQo+ID4gKwkJCXJldHVybiBzdGF0dXM7DQo+ID4gKwkJfQ0KPiA+ ICsJCXJhYiArPSBybGVuOw0KPiA+ICsJCXJlbV9sZW4gLT0gcmxlbjsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBjY2dfd3Jp dGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEsIHUzMiBsZW4pDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB1Yy0+Y2xpZW50Ow0KPiA+ICsJ dW5zaWduZWQgY2hhciBidWZbMl07DQo+ID4gKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7DQo+ ID4gKwkJew0KPiA+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwNCj4gPiArCQkJLmZsYWdzICA9 IDB4MCwNCj4gPiArCQkJLmxlbgk9IDB4MiwNCj4gDQo+IHNpemVvZihidWYpPw0Kb2sNCj4gDQo+ ID4gKwkJCS5idWYJPSBidWYsDQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS5hZGRyCT0g Y2xpZW50LT5hZGRyLA0KPiA+ICsJCQkuZmxhZ3MgID0gMHgwLA0KPiA+ICsJCQkuYnVmCT0gZGF0 YSwNCj4gPiArCQkJLmxlbgk9IGxlbiwNCj4gPiArCQl9LA0KPiA+ICsJfTsNCj4gPiArCWludCBz dGF0dXM7DQo+ID4gKw0KPiA+ICsJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsNCj4gPiAr CXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUo bXNncykpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApIHsNCj4gPiArCQlkZXZfZXJyKHVjLT5kZXYs ICJpMmNfdHJhbnNmZXIgZmFpbGVkICVkXG4iLCBzdGF0dXMpOw0KPiA+ICsJCXJldHVybiBzdGF0 dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgdWNzaV9jY2dfaW5pdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKSB7DQo+ID4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSB1Yy0+ZGV2Ow0KPiA+ICsJdW5zaWduZWQgaW50IGNvdW50ID0g MTA7DQo+ID4gKwl1OCBkYXRhWzY0XTsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJ c3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfSTJDX1JBQl9ERVZJQ0VfTU9ERSwgZGF0YSwNCj4g c2l6ZW9mKGRhdGEpKTsNCj4gPiArCWlmIChzdGF0dXMgPCAwKQ0KPiA+ICsJCXJldHVybiBzdGF0 dXM7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYsICJTaWxpY29uIGlkICUycGgiLCBkYXRhICsN Cj4gQ0NHWF9JMkNfUkFCX1JFQURfU0lMSUNPTl9JRCk7DQo+ID4gKwlkZXZfZGJnKGRldiwgIkZX MSB2ZXJzaW9uICU4cGhcbiIsIGRhdGEgKw0KPiBDQ0dYX0kyQ19SQUJfRlcxX1ZFUlNJT04pOw0K PiA+ICsJZGV2X2RiZyhkZXYsICJGVzIgdmVyc2lvbiAlOHBoXG4iLCBkYXRhICsNCj4gQ0NHWF9J MkNfUkFCX0ZXMl9WRVJTSU9OKTsNCj4gPiArDQo+ID4gKwlkYXRhWzBdID0gQ0NHWF9JMkNfUkFC X1VDU0lfQ09OVFJPTF9TVE9QOw0KPiA+ICsJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX0ky Q19SQUJfVUNTSV9DT05UUk9MLCBkYXRhLCAweDEpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApDQo+ ID4gKwkJcmV0dXJuIHN0YXR1czsNCj4gPiArDQo+ID4gKwlkYXRhWzBdID0gQ0NHWF9JMkNfUkFC X1VDU0lfQ09OVFJPTF9TVEFSVDsNCj4gPiArCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9J MkNfUkFCX1VDU0lfQ09OVFJPTCwgZGF0YSwgMHgxKTsNCj4gPiArCWlmIChzdGF0dXMgPCAwKQ0K PiA+ICsJCXJldHVybiBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEZsdXNoIEND R3ggUkVTUE9OU0UgcXVldWUgYnkgYWNraW5nIGludGVycnVwdHMNCj4gPiArCSAqIC0gYWJvdmUg dWNzaSBjb250cm9sIHJlZ2lzdGVyIHdyaXRlIHdpbGwgcHVzaCByZXNwb25zZQ0KPiA+ICsJICog d2hpY2ggbXVzdCBiZSBmbHVzaGVkDQo+ID4gKwkgKiAtIGFmZmVjdHMgZi93IHVwZGF0ZSB3aGlj aCByZWFkcyByZXNwb25zZSByZWdpc3Rlcg0KPiA+ICsJICovDQo+ID4gKwlkYXRhWzBdID0gMHhm ZjsNCj4gPiArCWRvIHsNCj4gPiArCQlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JB Ql9JTlRSX1JFRywgZGF0YSwgMHgxKTsNCj4gPiArCQlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQkJ cmV0dXJuIHN0YXR1czsNCj4gPiArDQo+ID4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7 DQo+ID4gKw0KPiA+ICsJCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX0kyQ19SQUJfSU5UUl9S RUcsIGRhdGEsIDB4MSk7DQo+ID4gKwkJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJCXJldHVybiBz dGF0dXM7DQo+ID4gKwl9IHdoaWxlICgoZGF0YVswXSAhPSAweDAwKSAmJiBjb3VudC0tKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB1Y3Np X2NjZ19zZW5kX2RhdGEoc3RydWN0IHVjc2lfY2NnICp1Yykgew0KPiA+ICsJdW5zaWduZWQgY2hh ciBidWYxW1VTQkNfTVNHX09VVF9TSVpFXTsNCj4gPiArCXVuc2lnbmVkIGNoYXIgYnVmMltVU0JD X0NPTlRST0xfU0laRV07DQo+ID4gKwlpbnQgc3RhdHVzOw0KPiA+ICsJdTE2IHJhYjsNCj4gPiAr DQo+ID4gKwltZW1jcHkoYnVmMSwgKHU4ICopKHVjLT5wcG0uZGF0YSkgKyBVU0JDX01TR19PVVRf T0ZGU0VULA0KPiBzaXplb2YoYnVmMSkpOw0KPiA+ICsJbWVtY3B5KGJ1ZjIsICh1OCAqKSh1Yy0+ cHBtLmRhdGEpICsgVVNCQ19DT05UUk9MX09GRlNFVCwNCj4gPiArc2l6ZW9mKGJ1ZjIpKTsNCj4g DQo+IEhtbSwgbm93IHRoYXQgSSBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGluc3RlYWQg b2YganVzdCBzZWVpbmcgYSBidW5jaCBvZg0KPiBtYWdpYyBudW1iZXJzLCBJIHdvbmRlciB3aHkg eW91IG1ha2UgY29waWVzIGluc3RlYWQgb2YgZmVlZGluZyB0aGUgY29ycmVjdA0KPiBzZWN0aW9u IG9mIHRoZSBwcG0uZGF0YSBidWZmZXIgZGlyZWN0bHkgdG8gY2NnX3dyaXRlLCBsaWtlIHlvdSBk byBiZWxvdyBmb3INCj4gcmVjdj8NCk9rLCB3aWxsIGZpeC4NCj4gDQo+ID4gKw0KPiA+ICsJcmFi ID0gQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhVU0JDX01TR19PVVRfT0ZGU0VUKTsNCj4g PiArCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgcmFiLCBidWYxLCBzaXplb2YoYnVmMSkpOw0KPiA+ ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0YXR1czsNCj4gPiArDQo+ID4gKwly YWIgPSBDQ0dYX0kyQ19SQUJfVUNTSV9EQVRBX0JMT0NLKFVTQkNfQ09OVFJPTF9PRkZTRVQpOw0K PiA+ICsJcmV0dXJuIGNjZ193cml0ZSh1YywgcmFiLCBidWYyLCBzaXplb2YoYnVmMikpOyB9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3JlY3ZfZGF0YShzdHJ1Y3QgdWNzaV9jY2cg KnVjKSB7DQo+ID4gKwl1OCAqcHBtID0gKHU4ICopdWMtPnBwbS5kYXRhOw0KPiA+ICsJaW50IHN0 YXR1czsNCj4gPiArCXUxNiByYWI7DQo+ID4gKw0KPiA+ICsJcmFiID0gQ0NHWF9JMkNfUkFCX1VD U0lfREFUQV9CTE9DSyhVU0JDX0NDSV9PRkZTRVQpOw0KPiA+ICsJc3RhdHVzID0gY2NnX3JlYWQo dWMsIHJhYiwgcHBtICsgVVNCQ19DQ0lfT0ZGU0VULCBVU0JDX0NDSV9TSVpFKTsNCj4gPiArCWlm IChzdGF0dXMgPCAwKQ0KPiA+ICsJCXJldHVybiBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJcmFiID0g Q0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhVU0JDX01TR19JTl9PRkZTRVQpOw0KPiA+ICsJ cmV0dXJuIGNjZ19yZWFkKHVjLCByYWIsIHBwbSArIFVTQkNfTVNHX0lOX09GRlNFVCwNCj4gPiAr VVNCQ19NU0dfSU5fU0laRSk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfYWNr X2ludGVycnVwdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKSB7DQo+ID4gKwlpbnQgc3RhdHVzOw0KPiA+ ICsJdW5zaWduZWQgY2hhciBidWZbMV0gPSB7MHgwfTsNCj4gDQo+IFRoZSBpbml0aWFsaXplciBj YW4gYmUgZHJvcHBlZC4NCm9rDQo+IA0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IGNjZ19yZWFkKHVj LCBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcsIGJ1ZiwgMHgxKTsNCj4gDQo+IHNpemVvZihidWYpPw0K b2sNCj4gDQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0KPiA+ ICsNCj4gPiArCXJldHVybiBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9JTlRSX1JFRywgYnVm LCAweDEpOw0KPiANCj4gc2l6ZW9mKGJ1Zik/DQpvaw0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCB1Y3NpX2NjZ19zeW5jKHN0cnVjdCB1Y3NpX3BwbSAqcHBtKSB7DQo+ID4gKwlz dHJ1Y3QgdWNzaV9jY2cgKnVjID0gY29udGFpbmVyX29mKHBwbSwgc3RydWN0IHVjc2lfY2NnLCBw cG0pOw0KPiA+ICsJaW50IHN0YXR1czsNCj4gPiArDQo+ID4gKwlzdGF0dXMgPSB1Y3NpX2NjZ19y ZWN2X2RhdGEodWMpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0YXR1 czsNCj4gPiArDQo+ID4gKwkvKiBhY2sgaW50ZXJydXB0IHRvIGFsbG93IG5leHQgY29tbWFuZCB0 byBydW4gKi8NCj4gPiArCXJldHVybiB1Y3NpX2NjZ19hY2tfaW50ZXJydXB0KHVjKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19jbWQoc3RydWN0IHVjc2lfcHBtICpw cG0sIHN0cnVjdCB1Y3NpX2NvbnRyb2wNCj4gPiArKmN0cmwpIHsNCj4gPiArCXN0cnVjdCB1Y3Np X2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1Y3QgdWNzaV9jY2csIHBwbSk7DQo+ID4g Kw0KPiA+ICsJcHBtLT5kYXRhLT5jdHJsLnJhd19jbWQgPSBjdHJsLT5yYXdfY21kOw0KPiA+ICsJ cmV0dXJuIHVjc2lfY2NnX3NlbmRfZGF0YSh1Yyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpcnFyZXR1cm5fdCBjY2dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkgew0KPiA+ ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGRhdGE7DQo+ID4gKw0KPiA+ICsJdWNzaV9ub3RpZnko dWMtPnVjc2kpOw0KPiA+ICsNCj4gPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50LA0KPiA+ICsJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4gPiArew0K PiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0KPiA+ICsJc3RydWN0IHVj c2lfY2NnICp1YzsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4gKwl1MTYgcmFiOw0KPiA+ICsNCj4g PiArCXVjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1YyksIEdGUF9LRVJORUwpOw0KPiA+ ICsJaWYgKCF1YykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwl1Yy0+cHBt LmRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHVjc2lfZGF0YSksDQo+IEdG UF9LRVJORUwpOw0KPiA+ICsJaWYgKCF1Yy0+cHBtLmRhdGEpDQo+ID4gKwkJcmV0dXJuIC1FTk9N RU07DQo+IA0KPiBXYWl0IGEgbWludXRlLCBwcG0uZGF0YSBpcyBhbGxvY2F0ZWQgYXMgYSBzdHJ1 Y3Q/IEFuZCBpdCdzIF9fcGFja2VkISBTbywgaXQncw0KPiBjbGVhcmx5IGludGVuZGVkIHRvIG1h dGNoIHNvbWV0aGluZyByZWFsLiBJIGRpZG4ndCBub3RpY2UgdGhhdCBiZWZvcmUsIGJ1dCB0aGF0 DQo+IG1lYW5zIHRoYXQgYWxsIHRoZSBuZXcgb2Zmc2V0cyBhbmQgc2l6ZXMgZGVmaW5lZCBpbiB2 MTAgYXJlIGF2YWlsYWJsZSB3aXRoDQo+IG9mZnNldG9mKCkgYW5kIHNpemVvZigpIHdoaWNoIHdv dWxkIGJlIG11Y2ggbmVhdGVyIHRoYW4gYSBidW5jaCBvZiBkZWZpbmVzLg0KPiBTb3JyeSBmb3Ig bm90IGNhdGNoaW5nIHRoaXMgZWFybGllciENCj4gDQo+IFNlZSBiZWxvdyBmb3IgYW4gZXhhbXBs ZS4NClN1cmUuDQo+IA0KPiA+ICsNCj4gPiArCXVjLT5wcG0uY21kID0gdWNzaV9jY2dfY21kOw0K PiA+ICsJdWMtPnBwbS5zeW5jID0gdWNzaV9jY2dfc3luYzsNCj4gPiArCXVjLT5kZXYgPSBkZXY7 DQo+ID4gKwl1Yy0+Y2xpZW50ID0gY2xpZW50Ow0KPiA+ICsNCj4gPiArCS8qIHJlc2V0IGNjZyBk ZXZpY2UgYW5kIGluaXRpYWxpemUgdWNzaSAqLw0KPiA+ICsJc3RhdHVzID0gdWNzaV9jY2dfaW5p dCh1Yyk7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCWRldl9lcnIodWMtPmRldiwg InVjc2lfY2NnX2luaXQgZmFpbGVkIC0gJWRcbiIsIHN0YXR1cyk7DQo+ID4gKwkJcmV0dXJuIHN0 YXR1czsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl1Yy0+aXJxID0gY2xpZW50LT5pcnE7DQo+ID4g Kw0KPiA+ICsJc3RhdHVzID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHVjLT5pcnEs IE5VTEwsDQo+IGNjZ19pcnFfaGFuZGxlciwNCj4gPiArCQkJCQkgICBJUlFGX09ORVNIT1QgfA0K PiBJUlFGX1RSSUdHRVJfSElHSCwNCj4gPiArCQkJCQkgICBkZXZfbmFtZShkZXYpLCB1Yyk7DQo+ ID4gKwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCWRldl9lcnIodWMtPmRldiwgInJlcXVlc3Rf dGhyZWFkZWRfaXJxIGZhaWxlZCAtICVkXG4iLA0KPiBzdGF0dXMpOw0KPiA+ICsJCXJldHVybiBz dGF0dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdWMtPnVjc2kgPSB1Y3NpX3JlZ2lzdGVyX3Bw bShkZXYsICZ1Yy0+cHBtKTsNCj4gPiArCWlmIChJU19FUlIodWMtPnVjc2kpKSB7DQo+ID4gKwkJ ZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9yZWdpc3Rlcl9wcG0gZmFpbGVkXG4iKTsNCj4gPiArCQly ZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmFiID0gQ0NH WF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhVU0JDX1ZFUlNJT05fT0ZGU0VUKTsNCj4gPiArCXN0 YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsICh1OCAqKSh1Yy0+cHBtLmRhdGEpICsNCj4gVVNCQ19W RVJTSU9OX09GRlNFVCwNCj4gPiArCQkJICBVU0JDX1ZFUlNJT05fU0laRSk7DQo+IA0KPiBFLmcu DQo+IAlyYWIgPSBDQ0dYX0kyQ19SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1 Y3NpX2RhdGEsDQo+IHZlcnNpb24pKTsNCj4gCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsICh1 OCAqKSZ1Yy0+cHBtLmRhdGEtPnZlcnNpb24sDQo+IAkJCSAgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+ dmVyc2lvbikpOw0KPiANCj4gSG1tLCBidXQgdGhpcyBoaWdobGlnaHRzIHRoYXQgeW91IGFyZSBu b3QgZG9pbmcgYW55IGVuZGlhbiBjb252ZXJzaW9uIG9mIHRoZQ0KPiBmaWVsZHMgaW4gdGhhdCBz dHJ1Y3QgYXMgeW91IHJlYWQvd3JpdGUgaXQuIA0KDQo+IERvIHlvdSBuZWVkIHRvIGluIGNhc2Ug eW91IGhhdmUgYW4gZW5kaWFuIG1pc21hdGNoPw0KTG9va3MgbGlrZSBkb24ndCBuZWVkIGl0LiBJ IGhhdmUgdGVzdGVkIGl0IGFuZCBpdCB3b3JrcyBhcyBpcy4NCg0KVGhhbmtzDQpBamF5DQoNCi0t DQpudnB1YmxpYw0KLS0NCj4gDQo+IENoZWVycywNCj4gUGV0ZXINCj4gDQo+ID4gKwlpZiAoc3Rh dHVzIDwgMCkgew0KPiA+ICsJCXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOw0KPiA+ICsJ CXJldHVybiBzdGF0dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaTJjX3NldF9jbGllbnRkYXRh KGNsaWVudCwgdWMpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgdWNzaV9jY2dfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpIHsNCj4gPiAr CXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gPiAr DQo+ID4gKwl1Y3NpX3VucmVnaXN0ZXJfcHBtKHVjLT51Y3NpKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkIHVjc2lfY2NnX2RldmljZV9pZFtdID0gew0KPiA+ICsJeyJjY2d4LXVjc2kiLCAwfSwNCj4g PiArCXt9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y3NpX2NjZ19k ZXZpY2VfaWQpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHVjc2lfY2Nn X2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUgPSAidWNzaV9jY2ci LA0KPiA+ICsJfSwNCj4gPiArCS5wcm9iZSA9IHVjc2lfY2NnX3Byb2JlLA0KPiA+ICsJLnJlbW92 ZSA9IHVjc2lfY2NnX3JlbW92ZSwNCj4gPiArCS5pZF90YWJsZSA9IHVjc2lfY2NnX2RldmljZV9p ZCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9pMmNfZHJpdmVyKHVjc2lfY2NnX2RyaXZl cik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEu Y29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlVDU0kgZHJpdmVyIGZvciBDeXByZXNz IENDR3ggVHlwZS1DIGNvbnRyb2xsZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp Ow0KPiA+Cg==