From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v2 10/13] drm/mediatek: add hdmi driver for MT2701 and MT7623 Date: Fri, 7 Sep 2018 10:28:41 +0800 Message-ID: <1536287321.25853.19.camel@mtksdaap41> References: <20180905083146.14727-1-bibby.hsieh@mediatek.com> <20180905083146.14727-11-bibby.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180905083146.14727-11-bibby.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bibby Hsieh Cc: linux-kernel@vger.kernel.org, Sascha Hauer , chunhui dai , David Airlie , Daniel Vetter , Cawa Cheng , dri-devel@lists.freedesktop.org, Mao Huang , Thierry Reding , linux-mediatek@lists.infradead.org, Matthias Brugger , Yingjoe Chen , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIEJpYmJ5OgoKT24gV2VkLCAyMDE4LTA5LTA1IGF0IDE2OjMxICswODAwLCBCaWJieSBIc2ll aCB3cm90ZToKPiBGcm9tOiBjaHVuaHVpIGRhaSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29tPgo+ IAo+IFRoaXMgcGF0Y2ggYWRkcyBoZG1pIGRpcnZlciBzdXBwb3QgZm9yIGJvdGggTVQyNzAxIGFu ZCBNVDc2MjMuCj4gQW5kIGFsc28gc3VwcG9ydCBvdGhlciAoZXhpc3Rpbmcgb3IgZnV0dXJlKSBj aGlwcyB0aGF0IHVzZQo+IHRoZSBzYW1lIGJpbmRpbmcgYW5kIGRyaXZlci4KPiAKPiBTaWduZWQt b2ZmLWJ5OiBjaHVuaHVpIGRhaSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29tPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmggICAgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYyAgICAgICAgfCAgIDMgKwo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210MjcwMV9oZG1pX3BoeS5jIHwgMzA3ICsr KysrKysrKysrKysrKysrKysrKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAzMTIgaW5zZXJ0aW9u cygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t dDI3MDFfaGRtaV9waHkuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiBpbmRleCA3 Zjk0Nzk3OWQ2OGYuLmJmMDA2N2I1ZWU2ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp bGUKPiBAQCAtMiw2ICsyLDcgQEAKPiAgbWVkaWF0ZWstZHJtLWhkbWktb2JqcyA6PSBtdGtfY2Vj Lm8gXAo+ICAJCQkgIG10a19oZG1pLm8gXAo+ICAJCQkgIG10a19oZG1pX2RkYy5vIFwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICBtdGtfbXQyNzAxX2hkbWlfcGh5Lm8gXAo+ICAJCQkgIG10 a19tdDgxNzNfaGRtaV9waHkubyBcCj4gIAkJCSAgbXRrX2hkbWlfcGh5Lm8KPiAgCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19oZG1pLmgKPiBpbmRleCBhMzUwYTZjOTI3MWYuLmZhMTJlYjYyODhm MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oCj4gQEAgLTQ1LDUgKzQ1LDYg QEAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2NlY19kcml2ZXI7Cj4gIGV4dGVy biBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXI7Cj4gIGV4dGVybiBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXI7Cj4gIGV4dGVybiBzdHJ1 Y3QgbXRrX2hkbWlfcGh5X2NvbmYgbXRrX2hkbWlfcGh5XzgxNzNfY29uZjsKPiArZXh0ZXJuIHN0 cnVjdCBtdGtfaGRtaV9waHlfY29uZiBtdGtfaGRtaV9waHlfMjcwMV9jb25mOwo+ICAKPiAgI2Vu ZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19oZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o ZG1pX3BoeS5jCj4gaW5kZXggODJlZDczNTc1ZTA0Li42MDZmYzdhMGMxM2IgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jCj4gQEAgLTEzNSw2ICsxMzUsOSBAQCBz dGF0aWMgaW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiAgfQo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlf cGh5X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1oZG1p LXBoeSIsCj4gKwkgIC5kYXRhID0gJm10a19oZG1pX3BoeV8yNzAxX2NvbmYsCj4gKwl9LAo+ICAJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLAo+ICAJICAuZGF0YSA9 ICZtdGtfaGRtaV9waHlfODE3M19jb25mLAo+ICAJfSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19tdDI3MDFfaGRtaV9waHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfbXQyNzAxX2hkbWlfcGh5LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uNDI4ZWYxNTU3YTE0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQyNzAxX2hkbWlfcGh5LmMKPiBAQCAtMCwwICsx LDMwNyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IENodW5odWkg RGFpIDxjaHVuaHVpLmRhaUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9kZWJ1Z2ZzLmg+CgpXaHkgbmVlZCBkZWJ1Z2ZzLmg/Cgo+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvbWZkL3N5c2Nvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSAibXRrX2hkbWkuaCIKCkkg ZG9uJ3Qga25vdyB3aHkgdGhlIGluY2x1ZGVkIGZpbGUgaXMgZGlmZmVyZW50IGluIG10a19tdDgx NzNfaGRtaV9waHkuYwp3aXRoIHRoaXMgZmlsZS4gVGhlIGRpZmZlcmVuY2Ugb2YgdGhlc2UgdHdv IGZpbGVzIGFyZSBoYXJkd2FyZSBjb250cm9sLApzbyBJIHRoaW5rIHRoZXNlIHR3byBmaWxlcyB3 b3VsZCBpbmNsdWRlIHRoZSBzYW1lIGhlYWRlciBmaWxlcy4gSWYgdGhlc2UKdHdvIGZpbGUgaW5j bHVkZSB0aGUgc2FtZSBmaWxlcywgbWF5YmUgd2Ugc2hvdWxkIG1vdmUgdGhlIGNvbW1vbiBpbmNs dWRlCnN0YXRlbWVudCBpbiBzb21lIGhlYWRlciBmaWxlIHRvIHByZXZlbnQgZHVwbGljYXRlIGlu IHRoZXNlIHR3byBmaWxlcy4KCj4gKwo+ICsjZGVmaW5lIEhETUlfQ09OMAkweDAwCj4gKyNkZWZp bmUgUkdfSERNSVRYX0RSVl9JQklBUwkJKDApCgpZb3UgbmVlZCBub3QgdG8gZW1icmFjZSBhIHNp bmdsZSBudW1iZXIuCgo+ICsjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfTUFTSwkoMHgzRiA8 PCAwKQoKVXNlIGxvd2VyIGNhc2UgZm9yIGhleCBudW1iZXIuCgo+ICsjZGVmaW5lIFJHX0hETUlU WF9FTl9TRVIJCSgxMikKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fU0VSX01BU0sJCSgweDBGIDw8 IDEyKQo+ICsjZGVmaW5lIFJHX0hETUlUWF9FTl9TTERPCQkoMTYpCj4gKyNkZWZpbmUgUkdfSERN SVRYX0VOX1NMRE9fTUFTSwkJKDB4MEYgPDwgMTYpCj4gKyNkZWZpbmUgUkdfSERNSVRYX0VOX1BS RUQJCSgyMCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fUFJFRF9NQVNLCQkoMHgwRiA8PCAyMCkK PiArI2RlZmluZSBSR19IRE1JVFhfRU5fSU1QCQkoMjQpCj4gKyNkZWZpbmUgUkdfSERNSVRYX0VO X0lNUF9NQVNLCQkoMHgwRiA8PCAyNCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fRFJWCQkoMjgp Cj4gKyNkZWZpbmUgUkdfSERNSVRYX0VOX0RSVl9NQVNLCQkoMHgwRiA8PCAyOCkKPiArCj4gKyNk ZWZpbmUgSERNSV9DT04xCTB4MDQKPiArI2RlZmluZSBSR19IRE1JVFhfUFJFRF9JQklBUwkJKDE4 KQo+ICsjZGVmaW5lIFJHX0hETUlUWF9QUkVEX0lCSUFTX01BU0sJKDB4MEYgPDwgMTgpCj4gKyNk ZWZpbmUgUkdfSERNSVRYX1BSRURfSU1QCQkoMHgwMSA8PCAyMikKPiArI2RlZmluZSBSR19IRE1J VFhfRFJWX0lNUAkJKDI2KQo+ICsjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX01BU0sJCSgweDNG IDw8IDI2KQo+ICsKPiArI2RlZmluZSBIRE1JX0NPTjIJMHgwOAo+ICsjZGVmaW5lIFJHX0hETUlU WF9FTl9UWF9DS0xETwkJKDB4MDEgPDwgMCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fVFhfUE9T RElWCQkoMHgwMSA8PCAxKQo+ICsjZGVmaW5lIFJHX0hETUlUWF9UWF9QT1NESVYJCSgzKQo+ICsj ZGVmaW5lIFJHX0hETUlUWF9UWF9QT1NESVZfTUFTSwkoMHgwMyA8PCAzKQo+ICsjZGVmaW5lIFJH X0hETUlUWF9FTl9NQklBUwkJKDB4MDEgPDwgNikKPiArI2RlZmluZSBSR19IRE1JVFhfTUJJQVNf TFBGX0VOCQkoMHgwMSA8PCA3KQo+ICsKPiArI2RlZmluZSBIRE1JX0NPTjQJMHgxMAo+ICsjZGVm aW5lIFJHX0hETUlUWF9SRVNFUlZFX01BU0sJCSgweEZGRkZGRkZGIDw8IDApCj4gKwo+ICsjZGVm aW5lIEhETUlfQ09ONgkweDE4Cj4gKyNkZWZpbmUgUkdfSFRQTExfQlIJCQkoMCkKPiArI2RlZmlu ZSBSR19IVFBMTF9CUl9NQVNLCQkoMHgwMyA8PCAwKQo+ICsjZGVmaW5lIFJHX0hUUExMX0JDCQkJ KDIpCj4gKyNkZWZpbmUgUkdfSFRQTExfQkNfTUFTSwkJKDB4MDMgPDwgMikKPiArI2RlZmluZSBS R19IVFBMTF9CUAkJCSg0KQo+ICsjZGVmaW5lIFJHX0hUUExMX0JQX01BU0sJCSgweDBGIDw8IDQp Cj4gKyNkZWZpbmUgUkdfSFRQTExfSVIJCQkoOCkKPiArI2RlZmluZSBSR19IVFBMTF9JUl9NQVNL CQkoMHgwRiA8PCA4KQo+ICsjZGVmaW5lIFJHX0hUUExMX0lDCQkJKDEyKQo+ICsjZGVmaW5lIFJH X0hUUExMX0lDX01BU0sJCSgweDBGIDw8IDEyKQo+ICsjZGVmaW5lIFJHX0hUUExMX1BPU0RJVgkJ CSgxNikKPiArI2RlZmluZSBSR19IVFBMTF9QT1NESVZfTUFTSwkJKDB4MDMgPDwgMTYpCj4gKyNk ZWZpbmUgUkdfSFRQTExfUFJFRElWCQkJKDE4KQo+ICsjZGVmaW5lIFJHX0hUUExMX1BSRURJVl9N QVNLCQkoMHgwMyA8PCAxOCkKPiArI2RlZmluZSBSR19IVFBMTF9GQktTRUwJCQkoMjApCj4gKyNk ZWZpbmUgUkdfSFRQTExfRkJLU0VMX01BU0sJCSgweDAzIDw8IDIwKQo+ICsjZGVmaW5lIFJHX0hU UExMX1JMSF9FTgkJCSgweDAxIDw8IDIyKQo+ICsjZGVmaW5lIFJHX0hUUExMX0ZCS0RJVgkJCSgy NCkKPiArI2RlZmluZSBSR19IVFBMTF9GQktESVZfTUFTSwkJKDB4N0YgPDwgMjQpCj4gKyNkZWZp bmUgUkdfSFRQTExfRU4JCQkoMHgwMSA8PCAzMSkKPiArCj4gKyNkZWZpbmUgSERNSV9DT043CTB4 MWMKPiArI2RlZmluZSBSR19IVFBMTF9BVVRPS19FTgkJKDB4MDEgPDwgMjMpCj4gKyNkZWZpbmUg UkdfSFRQTExfRElWRU4JCQkoMjgpCj4gKyNkZWZpbmUgUkdfSFRQTExfRElWRU5fTUFTSwkJKDB4 MDcgPDwgMjgpCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaV9waHkgKnRvX210 a19oZG1pX3BsbChzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9v Zihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKPiArfQoKdG9fbXRrX2hkbWlfcGxs KCkgaXMgdGhlIHNhbWUgYXMgdG9fbXRrX2hkbWlfcGh5KCkgaW4KbXRrX210ODE3M19oZG1pX3Bo eS5jLCBJIHdvdWxkIGxpa2UgdGhlIG1lcmdlIHRoZXNlIHR3byBmdW5jdGlvbnMuIE1heWJlCnlv dSBjb3VsZCB0aGVzZSBjb21tb24gZnVuY3Rpb24gdG8gYSAuaCBvciAuYyBmaWxlLgoKPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9wbGxfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfcGh5 ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKPiArCQkJCSAgICAgdTMyIHZhbCwgdTMyIG1hc2spCj4g K3sKPiArCXUzMiB0bXAgPSByZWFkbChoZG1pX3BoeS0+cmVncyAgKyBvZmZzZXQpICYgfm1hc2s7 Cj4gKwo+ICsJdG1wIHw9ICh2YWwgJiBtYXNrKTsKPiArCXdyaXRlbCh0bXAsIGhkbWlfcGh5LT5y ZWdzICsgb2Zmc2V0KTsKPiArfQoKRGl0dG8uCgo+ICsKPiArc3RhdGljIGludCBtdGtfaGRtaV9w bGxfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5 ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BsbChodyk7Cj4gKwo+ICsJbXRrX2hkbWlfcGxsX21h c2soaGRtaV9waHksIEhETUlfQ09ONywgUkdfSFRQTExfQVVUT0tfRU4sCj4gKwkJCSAgUkdfSFRQ TExfQVVUT0tfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwg MCwgUkdfSFRQTExfUkxIX0VOKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjYsICgweDMgPDwgUkdfSFRQTExfUE9TRElWKSwKPiArCQkJICBSR19IVFBMTF9QT1NESVZf TUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04yLCBSR19IRE1J VFhfRU5fTUJJQVMsCj4gKwkJCSAgUkdfSERNSVRYX0VOX01CSUFTKTsKPiArCXVzbGVlcF9yYW5n ZSg4MCwgMTAwKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsIFJH X0hUUExMX0VOLCBSR19IVFBMTF9FTik7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwg SERNSV9DT04yLCBSR19IRE1JVFhfRU5fVFhfQ0tMRE8sCj4gKwkJCSAgUkdfSERNSVRYX0VOX1RY X0NLTERPKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYg PDwgUkdfSERNSVRYX0VOX1NMRE8pLAo+ICsJCQkgIFJHX0hETUlUWF9FTl9TTERPX01BU0spOwo+ ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHks IEhETUlfQ09OMiwgUkdfSERNSVRYX01CSUFTX0xQRl9FTiwKPiArCQkJICBSR19IRE1JVFhfTUJJ QVNfTFBGX0VOKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJH X0hETUlUWF9FTl9UWF9QT1NESVYsCj4gKwkJCSAgUkdfSERNSVRYX0VOX1RYX1BPU0RJVik7Cj4g KwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAoMHhmIDw8IFJHX0hETUlU WF9FTl9TRVIpLAo+ICsJCQkgIFJHX0hETUlUWF9FTl9TRVJfTUFTSyk7Cj4gKwltdGtfaGRtaV9w bGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAoMHhmIDw8IFJHX0hETUlUWF9FTl9QUkVEKSwK PiArCQkJICBSR19IRE1JVFhfRU5fUFJFRF9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhk bWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX0RSViksCj4gKwkJCSAgUkdf SERNSVRYX0VOX0RSVl9NQVNLKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9wbGxfZGlzYWJsZShzdHJ1Y3Qg Y2xrX2h3ICpodykKPiArewo+ICsJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19t dGtfaGRtaV9wbGwoaHcpOwo+ICsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjAsIDAsIFJHX0hETUlUWF9FTl9EUlZfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayho ZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfRU5fUFJFRF9NQVNLKTsKPiArCW10a19o ZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9FTl9TRVJfTUFT Syk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04yLCAwLCBSR19IRE1J VFhfRU5fVFhfUE9TRElWKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjIsIDAsIFJHX0hETUlUWF9NQklBU19MUEZfRU4pOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDAp Owo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRY X0VOX1NMRE9fTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04y LCAwLCBSR19IRE1JVFhfRU5fVFhfQ0tMRE8pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9w aHksIEhETUlfQ09ONiwgMCwgUkdfSFRQTExfRU4pOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDAp Owo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwgUkdfSERNSVRY X0VOX01CSUFTKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsIDAs IFJHX0hUUExMX1BPU0RJVl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBI RE1JX0NPTjYsIDAsIFJHX0hUUExMX1JMSF9FTik7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1p X3BoeSwgSERNSV9DT043LCAwLCBSR19IVFBMTF9BVVRPS19FTik7Cj4gKwl1c2xlZXBfcmFuZ2Uo ODAsIDEwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGxsX3NldF9yYXRlKHN0 cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gKwkJCQkgdW5zaWduZWQgbG9u ZyBwYXJlbnRfcmF0ZSkKPiArewo+ICsJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0 b19tdGtfaGRtaV9wbGwoaHcpOwo+ICsJdTMyIHBvc19kaXY7Cj4gKwo+ICsJaWYgKHJhdGUgPD0g NjQwMDAwMDApCj4gKwkJcG9zX2RpdiA9IDM7Cj4gKwllbHNlIGlmIChyYXRlIDw9IDEyODAwMDAw KQo+ICsJCXBvc19kaXYgPSAxOwo+ICsJZWxzZQo+ICsJCXBvc19kaXYgPSAxOwo+ICsKPiArCW10 a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDMgPDwgUkdfSFRQTExfUFJF RElWKSwKPiArCQkJICBSR19IVFBMTF9QUkVESVZfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFz ayhoZG1pX3BoeSwgSERNSV9DT042LCAoMHgzIDw8IFJHX0hUUExMX1BPU0RJViksCj4gKwkJCSAg UkdfSFRQTExfUE9TRElWX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhE TUlfQ09ONiwgKDB4MSA8PCBSR19IVFBMTF9JQyksCj4gKwkJCSAgUkdfSFRQTExfSUNfTUFTSyk7 Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAoMHgxIDw8IFJHX0hU UExMX0lSKSwKPiArCQkJICBSR19IVFBMTF9JUl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjIsIChwb3NfZGl2IDw8IFJHX0hETUlUWF9UWF9QT1NESVYpLAo+ ICsJCQkgIFJHX0hETUlUWF9UWF9QT1NESVZfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayho ZG1pX3BoeSwgSERNSV9DT042LCAoMSA8PCBSR19IVFBMTF9GQktTRUwpLAo+ICsJCQkgIFJHX0hU UExMX0ZCS1NFTF9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjYsICgxOSA8PCBSR19IVFBMTF9GQktESVYpLAo+ICsJCQkgIFJHX0hUUExMX0ZCS0RJVl9NQVNL KTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjcsICgweDIgPDwgUkdf SFRQTExfRElWRU4pLAo+ICsJCQkgIFJHX0hUUExMX0RJVkVOX01BU0spOwo+ICsJbXRrX2hkbWlf cGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDB4YyA8PCBSR19IVFBMTF9CUCksCj4gKwkJ CSAgUkdfSFRQTExfQlBfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT042LCAoMHgyIDw8IFJHX0hUUExMX0JDKSwKPiArCQkJICBSR19IVFBMTF9CQ19NQVNLKTsK PiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDEgPDwgUkdfSFRQ TExfQlIpLAo+ICsJCQkgIFJHX0hUUExMX0JSX01BU0spOwo+ICsKPiArCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIDAsIFJHX0hETUlUWF9QUkVEX0lNUCk7Cj4gKwltdGtf aGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAoMHgzIDw8IFJHX0hETUlUWF9QUkVE X0lCSUFTKSwKPiArCQkJICBSR19IRE1JVFhfUFJFRF9JQklBU19NQVNLKTsKPiArCW10a19oZG1p X3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweDAgPDwgUkdfSERNSVRYX0VOX0lNUCks Cj4gKwkJCSAgUkdfSERNSVRYX0VOX0lNUF9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhk bWlfcGh5LCBIRE1JX0NPTjEsICgweDI4IDw8IFJHX0hETUlUWF9EUlZfSU1QKSwKPiArCQkJICBS R19IRE1JVFhfRFJWX0lNUF9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBI RE1JX0NPTjQsIDB4MjgsIFJHX0hETUlUWF9SRVNFUlZFX01BU0spOwo+ICsJbXRrX2hkbWlfcGxs X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4YSA8PCBSR19IRE1JVFhfRFJWX0lCSUFTKSwK PiArCQkJICBSR19IRE1JVFhfRFJWX0lCSUFTX01BU0spOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBsb25nIG10a19oZG1pX3BsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3Jh dGUpCj4gK3sKPiArCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlf cGxsKGh3KTsKPiArCj4gKwloZG1pX3BoeS0+cGxsX3JhdGUgPSByYXRlOwoKSW4gbXRrX210ODE3 M19oZG1pX3BoeS5jLCBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZSBhZGp1c3QgdGhlCnBhcmVudF9y YXRlLCBzbyBtdDI3MDEgbmVlZCBub3QgdG8gYWRqdXN0PwoKPiArCXJldHVybiByYXRlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUoc3Ry dWN0IGNsa19odyAqaHcsCj4gKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkK PiArewo+ICsJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9wbGwo aHcpOwo+ICsKPiArCXJldHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfaGRtaV9waHlfcGxsX29wcyA9IHsKPiArCS5lbmFi bGUgPSBtdGtfaGRtaV9wbGxfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSBtdGtfaGRtaV9wbGxfZGlz YWJsZSwKCldoeSBtdDI3MDEgaW1wbGVtZW50IGVuYWJsZS9kaXNhYmxlLCBidXQgbXQ4MTczIGlt cGxlbWVudApwcmVwYXJlL3VucHJlcGFyZT8gSSB3b3VsZCBsaWtlIHRoZXNlIHR3byB1c2UgdGhl IHNhbWUgbWV0aG9kLiBJZiB0aGVzZQp0d28gd291bGQgYmUgZGlmZmVyZW50LCBkZXNjcmliZSAn d2h5JyBpbiBjb21taXQgbWVzc2FnZS4KCj4gKwkuc2V0X3JhdGUgPSBtdGtfaGRtaV9wbGxfc2V0 X3JhdGUsCj4gKwkucm91bmRfcmF0ZSA9IG10a19oZG1pX3BsbF9yb3VuZF9yYXRlLAo+ICsJLnJl Y2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlLAo+ICt9Owo+ICsKPiArc3RhdGlj IHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlf cGh5KQo+ICt7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT043LCBSR19I VFBMTF9BVVRPS19FTiwKPiArCQkJICBSR19IVFBMTF9BVVRPS19FTik7Cj4gKwltdGtfaGRtaV9w bGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19IVFBMTF9STEhfRU4pOwoKSW4gbXRr X210ODE3M19oZG1pX3BoeS5jLCBpdCBkZWZpbmUgbXRrX2hkbWlfcGh5X3NldF9iaXRzKCkgYW5k Cm10a19oZG1pX3BoeV9jbGVhcl9iaXRzKCkuIEkgdGhpbmsgd2UgY291bGQgcmV1c2UgaXQgdG8g cmVkdWNlIHRoZSBjb2RlCnNpemUuCgo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhE TUlfQ09ONiwgKDB4MyA8PCBSR19IVFBMTF9QT1NESVYpLAo+ICsJCQkgIFJHX0hUUExMX1BPU0RJ Vl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJHX0hE TUlUWF9FTl9NQklBUywKPiArCQkJICBSR19IRE1JVFhfRU5fTUJJQVMpOwo+ICsJdXNsZWVwX3Jh bmdlKDgwLCAxMDApOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwg UkdfSFRQTExfRU4sIFJHX0hUUExMX0VOKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9FTl9UWF9DS0xETywKPiArCQkJICBSR19IRE1JVFhfRU5f VFhfQ0tMRE8pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4 ZiA8PCBSR19IRE1JVFhfRU5fU0xETyksCj4gKwkJCSAgUkdfSERNSVRYX0VOX1NMRE9fTUFTSyk7 Cj4gKwl1c2xlZXBfcmFuZ2UoODAsIDEwMCk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3Bo eSwgSERNSV9DT04yLCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOLAo+ICsJCQkgIFJHX0hETUlUWF9N QklBU19MUEZfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwg UkdfSERNSVRYX0VOX1RYX1BPU0RJViwKPiArCQkJICBSR19IRE1JVFhfRU5fVFhfUE9TRElWKTsK PiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERN SVRYX0VOX1NFUiksCj4gKwkJCSAgUkdfSERNSVRYX0VOX1NFUl9NQVNLKTsKPiArCW10a19oZG1p X3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1BSRUQp LAo+ICsJCQkgIFJHX0hETUlUWF9FTl9QUkVEX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2so aGRtaV9waHksIEhETUlfQ09OMCwgKDB4ZiA8PCBSR19IRE1JVFhfRU5fRFJWKSwKPiArCQkJICBS R19IRE1JVFhfRU5fRFJWX01BU0spOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfZGlzYWJsZV90bWRzKHN0cnVjdCBtdGtfaGRt aV9waHkgKmhkbWlfcGh5KQo+ICt7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT04wLCAwLCBSR19IRE1JVFhfRU5fRFJWX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2so aGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VOX1BSRURfTUFTSyk7Cj4gKwltdGtf aGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfRU5fU0VSX01B U0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwgUkdfSERN SVRYX0VOX1RYX1BPU0RJVik7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9D T04yLCAwLCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAw KTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlU WF9FTl9TTERPX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09O MiwgMCwgUkdfSERNSVRYX0VOX1RYX0NLTERPKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlf cGh5LCBIRE1JX0NPTjYsIDAsIFJHX0hUUExMX0VOKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAw KTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlU WF9FTl9NQklBUyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAw LCBSR19IVFBMTF9QT1NESVZfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwg SERNSV9DT042LCAwLCBSR19IVFBMTF9STEhfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRt aV9waHksIEhETUlfQ09ONywgMCwgUkdfSFRQTExfQVVUT0tfRU4pOwo+ICsJdXNsZWVwX3Jhbmdl KDgwLCAxMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19oZG1pX3BoeV9wb3dlcl9vbihz dHJ1Y3QgcGh5ICpwaHkpCj4gK3sKPiArCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0g cGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKGhkbWlfcGh5KTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0 cnVjdCBwaHkgKnBoeSkKPiArewo+ICsJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBw aHlfZ2V0X2RydmRhdGEocGh5KTsKPiArCj4gKwltdGtfaGRtaV9waHlfZGlzYWJsZV90bWRzKGhk bWlfcGh5KTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pX3BoeS0+cGxsKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10a19o ZG1pX3BoeV9kZXZfb3BzID0gewo+ICsJLnBvd2VyX29uID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29u LAo+ICsJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYsCj4gKwkub3duZXIgPSBU SElTX01PRFVMRSwKPiArfTsKCgptdGtfaGRtaV9waHlfcG93ZXJfb24oKSwgbXRrX2hkbWlfcGh5 X3Bvd2VyX29mZigpLCBtdGtfaGRtaV9waHlfZGV2X29wcwppcyB0aGUgc2FtZSBhcyB0aG9zZSBp biBtdGtfbXQ4MTczX2hkbWlfcGh5LmMsIHNvIEkgdGhpbmsgeW91IHNob3VsZAptZXJnZSB0aGVt IHRvIHByZXZlbnQgZHVwbGljYXRlIGNvZGUuCgpSZWdhcmRzLApDSwoKPiArCj4gK3N0cnVjdCBt dGtfaGRtaV9waHlfY29uZiBtdGtfaGRtaV9waHlfMjcwMV9jb25mID0gewo+ICsJLnR6X2VuYWJs ZWQgPSBmYWxzZSwKPiArCS5oZG1pX3BoeV9jbGtfb3BzID0gJm10a19oZG1pX3BoeV9wbGxfb3Bz LAo+ICsJLmhkbWlfcGh5X2Rldl9vcHMgPSAmbXRrX2hkbWlfcGh5X2Rldl9vcHMsCj4gK307Cj4g Kwo+ICtNT0RVTEVfQVVUSE9SKCJDaHVuaHVpIERhaSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29t PiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgUEhZIERyaXZlciIpOwo+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==