From mboxrd@z Thu Jan 1 00:00:00 1970 From: YT Shen Subject: Re: [PATCH v4 6/8] drm/mediatek: add dsi transfer function Date: Tue, 26 Jul 2016 18:42:36 +0800 Message-ID: <1469529756.4678.30.camel@mtksdaap41> References: <1468577274-6178-1-git-send-email-yt.shen@mediatek.com> <1468577274-6178-7-git-send-email-yt.shen@mediatek.com> <1468994346.11841.31.camel@mtksdaap41> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1468994346.11841.31.camel@mtksdaap41> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: CK Hu Cc: Mark Rutland , dri-devel@lists.freedesktop.org, Russell King , Mao Huang , yingjoe.chen@mediatek.com, devicetree@vger.kernel.org, Sascha Hauer , Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , shaoming chen , linux-arm-kernel@lists.infradead.org, srv_heupstream@mediatek.com, emil.l.velikov@gmail.com, linux-kernel@vger.kernel.org, Kumar Gala List-Id: devicetree@vger.kernel.org SGkgQ0ssCgpUaGFua3MgZm9yIHRoZSByZXZpZXcuCgpPbiBXZWQsIDIwMTYtMDctMjAgYXQgMTM6 NTkgKzA4MDAsIENLIEh1IHdyb3RlOgo+IEhpLCBZVDoKPiAKPiBTb21lIGNvbW1lbnRzIGlubGlu ZS4KPiAKPiBPbiBGcmksIDIwMTYtMDctMTUgYXQgMTg6MDcgKzA4MDAsIFlUIFNoZW4gd3JvdGU6 Cj4gPiBGcm9tOiBzaGFvbWluZyBjaGVuIDxzaGFvbWluZy5jaGVuQG1lZGlhdGVrLmNvbT4KPiA+ IAo+ID4gYWRkIGRzaSByZWFkL3dyaXRlIGNvbW1hbmRzIGZvciB0cmFuc2ZlciBmdW5jdGlvbgo+ ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBzaGFvbWluZyBjaGVuIDxzaGFvbWluZy5jaGVuQG1lZGlh dGVrLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMg fCAgMzIyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDEgZmlsZSBj aGFuZ2VkLCAzMjIgaW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHNpLmMKPiA+IGluZGV4IGRlNWFkN2YuLjFmOTk4OTQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RzaS5jCj4gPiBAQCAtMjQsNiArMjQsNyBAQAo+ID4gICNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gPiAgI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rp c3BsYXkuaD4KPiA+ICAjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gPiAgCj4gPiAgI2lu Y2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKPiA+IEBAIC04MCw4ICs4MSwxNiBAQAo+ID4gICNk ZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAo+ID4gICNkZWZpbmUgRFNJX0hGUF9XQwkJMHg1OAo+ID4g IAo+ID4gKyNkZWZpbmUgRFNJX0NNRFFfU0laRQkJMHg2MAo+ID4gKyNkZWZpbmUgQ01EUV9TSVpF CQkweDNmCj4gPiArCj4gPiAgI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKPiA+ICAKPiA+ ICsjZGVmaW5lIERTSV9SWF9EQVRBMAkJMHg3NAo+ID4gKyNkZWZpbmUgRFNJX1JYX0RBVEExCQkw eDc4Cj4gPiArI2RlZmluZSBEU0lfUlhfREFUQTIJCTB4N2MKPiA+ICsjZGVmaW5lIERTSV9SWF9E QVRBMwkJMHg4MAo+ID4gKwo+ID4gICNkZWZpbmUgRFNJX1JBQ0sJCTB4ODQKPiA+ICAjZGVmaW5l IFJBQ0sJCQlCSVQoMCkKPiA+ICAKPiA+IEBAIC0xMTcsOCArMTI2LDI1IEBACj4gPiAgI2RlZmlu ZSBDTEtfSFNfUE9TVAkJCSgweGZmIDw8IDgpCj4gPiAgI2RlZmluZSBDTEtfSFNfRVhJVAkJCSgw eGZmIDw8IDE2KQo+ID4gIAo+ID4gKyNkZWZpbmUgRFNJX0NNRFEwCQkweDE4MAo+ID4gKwo+ID4g ICNkZWZpbmUgTlNfVE9fQ1lDTEUobiwgYykgICAgKChuKSAvIChjKSArICgoKG4pICUgKGMpKSA/ IDEgOiAwKSkKPiA+ICAKPiA+ICsjZGVmaW5lIE1US19EU0lfSE9TVF9JU19SRUFEKHR5cGUpIFwK PiA+ICsJKCh0eXBlID09IE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzBfUEFSQU0pIHx8 IFwKPiA+ICsJKHR5cGUgPT0gTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMV9QQVJBTSkg fHwgXAo+ID4gKwkodHlwZSA9PSBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFN KSB8fCBcCj4gPiArCSh0eXBlID09IE1JUElfRFNJX0RDU19SRUFEKSkKPiA+ICsKPiA+ICsjZGVm aW5lIE1US19EU0lfSE9TVF9JU19XUklURSh0eXBlKSBcCj4gPiArCSgodHlwZSA9PSBNSVBJX0RT SV9HRU5FUklDX1NIT1JUX1dSSVRFXzBfUEFSQU0pIHx8IFwKPiA+ICsJKHR5cGUgPT0gTUlQSV9E U0lfR0VORVJJQ19TSE9SVF9XUklURV8xX1BBUkFNKSB8fCBcCj4gPiArCSh0eXBlID09IE1JUElf RFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMl9QQVJBTSkgfHwgXAo+ID4gKwkodHlwZSA9PSBNSVBJ X0RTSV9EQ1NfU0hPUlRfV1JJVEUpIHx8IFwKPiA+ICsJKHR5cGUgPT0gTUlQSV9EU0lfRENTX1NI T1JUX1dSSVRFX1BBUkFNKSB8fCBcCj4gPiArCSh0eXBlID09IE1JUElfRFNJX0dFTkVSSUNfTE9O R19XUklURSkgfHwgXAo+ID4gKwkodHlwZSA9PSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURSkpCj4g PiArCj4gPiAgc3RydWN0IHBoeTsKPiA+ICAKPiA+ICBzdHJ1Y3QgbXRrX2RzaSB7Cj4gPiBAQCAt MTQ4LDYgKzE3NCwzOCBAQCBzdHJ1Y3QgbXRrX2RzaSB7Cj4gPiAgCWludCBpcnFfbnVtLCBpcnFf ZGF0YTsKPiA+ICB9Owo+ID4gIAo+ID4gK3N0cnVjdCBkc2lfY21kX3QwIHsKPiA+ICsJdTggY29u ZmlnOwo+ID4gKwl1OCB0eXBlOwo+ID4gKwl1OCBkYXRhMDsKPiA+ICsJdTggZGF0YTE7Cj4gPiAr fTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZHNpX2NtZF90MiB7Cj4gPiArCXU4IGNvbmZpZzsKPiA+ICsJ dTggdHlwZTsKPiA+ICsJdTE2IHdjMTY7Cj4gPiArCXU4ICpwZGF0YTsKPiA+ICt9Owo+ID4gKwo+ ID4gK3N0cnVjdCBkc2lfcnhfZGF0YSB7Cj4gPiArCXU4IGJ5dGUwOwo+ID4gKwl1OCBieXRlMTsK PiA+ICsJdTggYnl0ZTI7Cj4gPiArCXU4IGJ5dGUzOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0 IGRzaV90eF9jbWRxIHsKPiA+ICsJdTggYnl0ZTA7Cj4gPiArCXU4IGJ5dGUxOwo+ID4gKwl1OCBi eXRlMjsKPiA+ICsJdTggYnl0ZTM7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZHNpX3R4X2Nt ZHFfcmVncyB7Cj4gPiArCXN0cnVjdCBkc2lfdHhfY21kcSBkYXRhWzEyOF07Cj4gPiArfTsKPiA+ ICsKPiA+ICBlbnVtIHsKPiA+ICAJRFNJX0lOVF9TTEVFUE9VVF9ET05FX0ZMQUcJPSBCSVQoNiks Cj4gPiAgCURTSV9JTlRfVk1fQ01EX0RPTkVfRkxBRwk9IEJJVCg1KSwKPiA+IEBAIC04NTgsOSAr OTE2LDI3MyBAQCBzdGF0aWMgaW50IG10a19kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3QsCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgdm9p ZCBtdGtfZHNpX3NldF9jbWRxKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEp Cj4gPiArewo+ID4gKwl1MzIgdGVtcCA9IHJlYWRsKHJlZyk7Cj4gPiArCj4gPiArCXdyaXRlbCgo dGVtcCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayksIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIG10a19kc2lfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgbXRrX2RzaSAqZHNpKQo+ID4g K3sKPiA+ICsJdTMyIHRpbWVvdXRfbXMgPSA1MDAwMDA7IC8qIHRvdGFsIDFzIH4gMnMgdGltZW91 dCAqLwo+ID4gKwo+ID4gKwl3aGlsZSAodGltZW91dF9tcy0tKSB7Cj4gPiArCQlpZiAoIShyZWFk bChkc2ktPnJlZ3MgKyBEU0lfSU5UU1RBKSAmIERTSV9CVVNZKSkKPiA+ICsJCQlicmVhazsKPiA+ ICsKPiA+ICsJCXVzbGVlcF9yYW5nZSgyLCA0KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAodGlt ZW91dF9tcyA9PSAwKSB7Cj4gPiArCQlkZXZfaW5mbyhkc2ktPmRldiwgInBvbGxpbmcgZHNpIHdh aXQgbm90IGJ1c3kgdGltZW91dCFcbiIpOwo+ID4gKwo+ID4gKwkJbXRrX2RzaV9lbmFibGUoZHNp KTsKPiA+ICsJCW10a19kc2lfcmVzZXRfZW5naW5lKGRzaSk7Cj4gPiArCX0KPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHNzaXplX3QgbXRrX2RzaV9ob3N0X3JlYWRfY21kKHN0cnVjdCBtdGtfZHNp ICpkc2ksCj4gPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ID4g K3sKPiA+ICsJdTggbWF4X3RyeV9jb3VudCA9IDU7Cj4gPiArCXUzMiByZWN2X2RhdGFfY250LCB0 bXBfdmFsOwo+ID4gKwl1MzIgcmVjdl9kYXRhMCwgcmVjdl9kYXRhMSwgcmVjdl9kYXRhMiwgcmVj dl9kYXRhMzsKPiA+ICsJc3RydWN0IGRzaV9yeF9kYXRhIHJlYWRfZGF0YTAsIHJlYWRfZGF0YTEs IHJlYWRfZGF0YTIsIHJlYWRfZGF0YTM7Cj4gPiArCXN0cnVjdCBkc2lfY21kX3QwIHQwOwo+ID4g KwlzMzIgcmV0Owo+ID4gKwo+ID4gKwl1OCAqYnVmZmVyID0gbXNnLT5yeF9idWY7Cj4gPiArCXU4 IGJ1ZmZlcl9zaXplID0gbXNnLT5yeF9sZW47Cj4gPiArCXU4IHBhY2tldF90eXBlOwo+ID4gKwo+ ID4gKwlpZiAocmVhZGwoZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCkgJiAweDAzKSB7Cj4gPiAr CQlkZXZfaW5mbyhkc2ktPmRldiwgImRzaSBlbmdpbmUgaXMgbm90IGNvbW1hbmQgbW9kZVxuIik7 Cj4gPiArCQlyZXR1cm4gLTE7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFidWZmZXIpIHsKPiA+ ICsJCWRldl9pbmZvKGRzaS0+ZGV2LCAiZHNpIHJlY2VpdmUgYnVmZmVyIHNpemUgbWF5IGJlIE5V TExcbiIpOwo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRvIHsKPiA+ICsJ CWlmIChtYXhfdHJ5X2NvdW50ID09IDApIHsKPiA+ICsJCQlkZXZfaW5mbyhkc2ktPmRldiwgImRz aSBlbmdpbmUgcmVhZCBjb3VudGVyIGhhcyBiZWVuIG1heGludW1cbiIpOwo+ID4gKwkJCXJldHVy biAtMTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCW1heF90cnlfY291bnQtLTsKPiA+ICsJCXJlY3Zf ZGF0YV9jbnQgPSAwOwo+ID4gKwo+ID4gKwkJbXRrX2RzaV93YWl0X2Zvcl9pZGxlKGRzaSk7Cj4g PiArCj4gPiArCQl0MC5jb25maWcgPSAweDA0Owo+ID4gKwkJdDAuZGF0YTAgPSAqKCh1OCAqKSht c2ctPnR4X2J1ZikpOwo+ID4gKwo+ID4gKwkJaWYgKGJ1ZmZlcl9zaXplIDwgMHgzKQo+IAo+IEl0 J3MgYmV0dGVyIHRvIHVzZSAnMycgaW5zdGVhZCBvZiAnMHgzJy4KT0suCgo+IAo+ID4gKwkJCXQw LnR5cGUgPSBNSVBJX0RTSV9EQ1NfUkVBRDsKPiA+ICsJCWVsc2UKPiA+ICsJCQl0MC50eXBlID0g TUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMV9QQVJBTTsKPiA+ICsKPiA+ICsJCXQwLmRh dGExID0gMDsKPiA+ICsKPiA+ICsJCXRtcF92YWwgPSAodDAuZGF0YTEgPDwgMjQpIHwgKHQwLmRh dGEwIDw8IDE2KSB8ICh0MC50eXBlIDw8IDgpIHwKPiA+ICsJCQl0MC5jb25maWc7Cj4gCj4gV2h5 IG5lZWQgJ3N0cnVjdCBkc2lfY21kX3QwIHQwJz8gSSB0aGluayBjb2RlIGlzIG1vcmUgc2ltcGxl IHdoZW4gZ2V0Cj4gcmlkIG9mIHRoaXMgc3RydWN0dXJlLiBUaGUgY29kZSBsb29rcyBsaWtlOgo+ IAo+IHRtcF92YWwgPSAoZGF0YTEgPDwgMjQpIHwgKGRhdGEwIDw8IDE2KSB8ICh0eXBlIDw8IDgp IHwgY29uZmlnOwpXZSB3aWxsIGNoZWNrIHRoaXMgcGFydC4KCj4gCj4gPiArCj4gPiArCQl3cml0 ZWwodG1wX3ZhbCwgZHNpLT5yZWdzICsgRFNJX0NNRFEwKTsKPiA+ICsJCW10a19kc2lfbWFzayhk c2ksIERTSV9DTURRX1NJWkUsIENNRFFfU0laRSwgMSk7Cj4gPiArCj4gPiArCQltdGtfZHNpX21h c2soZHNpLCBEU0lfUkFDSywgUkFDSywgUkFDSyk7Cj4gPiArCQltdGtfZHNpX21hc2soZHNpLCBE U0lfSU5UU1RBLCBMUFJYX1JEX1JEWV9JTlRfRkxBRywKPiA+ICsJCQkgICAgIH5MUFJYX1JEX1JE WV9JTlRfRkxBRyk7Cj4gPiArCQltdGtfZHNpX21hc2soZHNpLCBEU0lfSU5UU1RBLCBDTURfRE9O RV9JTlRfRkxBRywKPiA+ICsJCQkgICAgIH5DTURfRE9ORV9JTlRfRkxBRyk7Cj4gCj4gSSB0aGlu ayBpbnRlcnJ1cHQgc3RhdHVzIHNob3VsZCBiZSBjbGVhcmVkIGluIGlycSBoYW5kbGVyLiBTbyB5 b3UgbmVlZAo+IG5vdCB0byBjbGVhciBpdCBoZXJlLgp3aWxsIHJlbW92ZS4KCj4gCj4gPiArCQlt dGtfZHNpX21hc2soZHNpLCBEU0lfSU5URU4sIERTSV9JTlRfTFBSWF9SRF9SRFlfRkxBRywKPiA+ ICsJCQkgICAgIERTSV9JTlRfTFBSWF9SRF9SRFlfRkxBRyk7Cj4gPiArCQltdGtfZHNpX21hc2so ZHNpLCBEU0lfSU5URU4sIERTSV9JTlRfQ01EX0RPTkVfRkxBRywKPiA+ICsJCQkgICAgIERTSV9J TlRfQ01EX0RPTkVfRkxBRyk7Cj4gCj4gV2h5IGVuYWJsZSBjbWRfZG9uZSBpbnRlcnJ1cHQ/IFlv dSBqdXN0IG5lZWQgaW50ZXJydXB0IG9mIExQUlhfUkRfUkRZLgp3aWxsIHJlbW92ZS4KCj4gCj4g PiArCj4gPiArCQltdGtfZHNpX3N0YXJ0KGRzaSk7Cj4gPiArCj4gPiArCQlkZXZfaW5mbyhkc2kt PmRldiwgIlN0YXJ0IHBvbGxpbmcgRFNJIHJlYWQgcmVhZHkhISFcbiIpOwo+ID4gKwo+ID4gKwkJ IC8qIDJzIHRpbWVvdXQqLwo+ID4gKwkJcmV0ID0gbXRrX2RzaV93YWl0X2Zvcl9pcnFfdGltZW91 dChkc2ksCj4gPiArCQkJCQkJICAgRFNJX0lOVF9MUFJYX1JEX1JEWV9GTEFHLAo+ID4gKwkJCQkJ CSAgIDIwMDApOwo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCWRldl9pbmZvKGRzaS0+ZGV2LCAi UG9sbGluZyBEU0kgcmVhZCByZWFkeSB0aW1lb3V0ISEhXG4iKTsKPiA+ICsKPiA+ICsJCQltdGtf ZHNpX2VuYWJsZShkc2kpOwo+ID4gKwkJCW10a19kc2lfcmVzZXRfZW5naW5lKGRzaSk7Cj4gPiAr Cj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRldl9pbmZvKGRzaS0+ ZGV2LCAiRW5kIHBvbGxpbmcgRFNJIHJlYWQgcmVhZHkhISFcbiIpOwo+ID4gKwo+ID4gKwkJbXRr X2RzaV9tYXNrKGRzaSwgRFNJX1JBQ0ssIFJBQ0ssIFJBQ0spOwo+ID4gKwkJbXRrX2RzaV9tYXNr KGRzaSwgRFNJX0lOVFNUQSwgTFBSWF9SRF9SRFlfSU5UX0ZMQUcsCj4gPiArCQkJICAgICB+TFBS WF9SRF9SRFlfSU5UX0ZMQUcpOwo+ID4gKwo+ID4gKwkJcmVjdl9kYXRhMCA9IHJlYWRsKGRzaS0+ cmVncyArIERTSV9SWF9EQVRBMCk7Cj4gPiArCQlyZWN2X2RhdGExID0gcmVhZGwoZHNpLT5yZWdz ICsgRFNJX1JYX0RBVEExKTsKPiA+ICsJCXJlY3ZfZGF0YTIgPSByZWFkbChkc2ktPnJlZ3MgKyBE U0lfUlhfREFUQTIpOwo+ID4gKwkJcmVjdl9kYXRhMyA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9S WF9EQVRBMyk7Cj4gPiArCj4gPiArCQlyZWFkX2RhdGEwID0gKigoc3RydWN0IGRzaV9yeF9kYXRh ICopKCZyZWN2X2RhdGEwKSk7Cj4gPiArCQlyZWFkX2RhdGExID0gKigoc3RydWN0IGRzaV9yeF9k YXRhICopKCZyZWN2X2RhdGExKSk7Cj4gPiArCQlyZWFkX2RhdGEyID0gKigoc3RydWN0IGRzaV9y eF9kYXRhICopKCZyZWN2X2RhdGEyKSk7Cj4gPiArCQlyZWFkX2RhdGEzID0gKigoc3RydWN0IGRz aV9yeF9kYXRhICopKCZyZWN2X2RhdGEzKSk7Cj4gCj4gWW91IG9ubHkgdXNlIHJlYWRfZGF0YTAu IHJlYWRfZGF0YTEsIHJlYWRfZGF0YTIsIGFuZCByZWFkX2RhdGEzIGFyZSBqdXN0Cj4gZm9yIGRl YnVnLiBSZW1vdmUgdGhlIGRlYnVnIG9ubHkgbW9kaWZpY2F0aW9uIGlmIHRoZXkgYXJlIG5vdCBu ZWNlc3NhcnkuCj4gT3IgbW92ZSB0aGVtIHRvIGFub3RoZXIgcGF0Y2ggdG8gbWFrZSB0aGlzIHBh dGNoIGNsZWFyLgpXZSB3aWxsIHJlbW92ZSB0aGUgZGVidWcgbWVzc2FnZXMgaGVyZS4KCj4gCj4g PiArCj4gPiArCQlyZXQgPSByZWFkbChkc2ktPnJlZ3MgKyBEU0lfQ01EUV9TSVpFKTsKPiA+ICsJ CWRldl9pbmZvKGRzaS0+ZGV2LCAiRFNJX0NNRFFfU0laRSA6IDB4JXhcbiIsIHJldCAmIENNRFFf U0laRSk7Cj4gPiArCj4gPiArCQlyZXQgPSByZWFkbChkc2ktPnJlZ3MgKyBEU0lfQ01EUTApOwo+ ID4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJEU0lfQ01EUV9EQVRBMCA6IDB4JXhcbiIsCj4gPiAr CQkJIHJldCAmIDB4ZmYpOwo+ID4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJEU0lfQ01EUV9EQVRB MSA6IDB4JXhcbiIsCj4gPiArCQkJIChyZXQgPj4gOCkgJiAweGZmKTsKPiA+ICsJCWRldl9pbmZv KGRzaS0+ZGV2LCAiRFNJX0NNRFFfREFUQTIgOiAweCV4XG4iLAo+ID4gKwkJCSAocmV0ID4+IDE2 KSAmIDB4ZmYpOwo+ID4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJEU0lfQ01EUV9EQVRBMyA6IDB4 JXhcbiIsCj4gPiArCQkJIChyZXQgPj4gMjQpICYgMHhmZik7Cj4gPiArCj4gPiArCQlkZXZfaW5m byhkc2ktPmRldiwgIkRTSV9SWF9EQVRBMDogMHgleFxuIiwgcmVjdl9kYXRhMCk7Cj4gPiArCQlk ZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9SWF9EQVRBMTogMHgleFxuIiwgcmVjdl9kYXRhMSk7Cj4g PiArCQlkZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9SWF9EQVRBMjogMHgleFxuIiwgcmVjdl9kYXRh Mik7Cj4gPiArCQlkZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9SWF9EQVRBMzogMHgleFxuIiwgcmVj dl9kYXRhMyk7Cj4gPiArCj4gPiArCQlkZXZfaW5mbyhkc2ktPmRldiwgInJlYWRfZGF0YTA6ICV4 LCV4LCV4LCV4XG4iLAo+ID4gKwkJCSByZWFkX2RhdGEwLmJ5dGUwLCByZWFkX2RhdGEwLmJ5dGUx LCByZWFkX2RhdGEwLmJ5dGUyLAo+ID4gKwkJCSByZWFkX2RhdGEwLmJ5dGUzKTsKPiA+ICsJCWRl dl9pbmZvKGRzaS0+ZGV2LCAicmVhZF9kYXRhMTogJXgsJXgsJXgsJXhcbiIsCj4gPiArCQkJIHJl YWRfZGF0YTEuYnl0ZTAsIHJlYWRfZGF0YTEuYnl0ZTEsIHJlYWRfZGF0YTEuYnl0ZTIsCj4gPiAr CQkJIHJlYWRfZGF0YTEuYnl0ZTMpOwo+ID4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJyZWFkX2Rh dGEyOiAleCwleCwleCwleFxuIiwKPiA+ICsJCQkgcmVhZF9kYXRhMi5ieXRlMCwgcmVhZF9kYXRh Mi5ieXRlMSwgcmVhZF9kYXRhMi5ieXRlMiwKPiA+ICsJCQkgcmVhZF9kYXRhMi5ieXRlMyk7Cj4g PiArCQlkZXZfaW5mbyhkc2ktPmRldiwgInJlYWRfZGF0YTM6ICV4LCV4LCV4LCV4XG4iLAo+ID4g KwkJCSByZWFkX2RhdGEzLmJ5dGUwLCByZWFkX2RhdGEzLmJ5dGUxLCByZWFkX2RhdGEzLmJ5dGUy LAo+ID4gKwkJCSByZWFkX2RhdGEzLmJ5dGUzKTsKPiA+ICsKPiA+ICsJCXBhY2tldF90eXBlID0g cmVhZF9kYXRhMC5ieXRlMDsKPiA+ICsJCWRldl9pbmZvKGRzaS0+ZGV2LCAiRFNJIHJlYWQgcGFj a2V0X3R5cGUgaXMgMHgleFxuIiwKPiA+ICsJCQkgcGFja2V0X3R5cGUpOwo+ID4gKwo+ID4gKwkJ aWYgKHBhY2tldF90eXBlID09IDB4MWEgfHwgcGFja2V0X3R5cGUgPT0gMHgxYykgewo+ID4gKwkJ CXZvaWQgKnJlYWRfdG1wID0gKHZvaWQgKikmcmVjdl9kYXRhMTsKPiA+ICsKPiA+ICsJCQlyZWN2 X2RhdGFfY250ID0gcmVhZF9kYXRhMC5ieXRlMSArCj4gPiArCQkJCQlyZWFkX2RhdGEwLmJ5dGUy ICogMTY7Cj4gPiArCQkJaWYgKHJlY3ZfZGF0YV9jbnQgPiAxMCkKPiA+ICsJCQkJcmVjdl9kYXRh X2NudCA9IDEwOwo+IAo+IFdoeSBkbyB5b3UgZHJvcCBkYXRhIG92ZXIgc2l6ZSBvZiAxMD8gSXNu J3QgaXQgYW4gZXJyb3I/CldlIHdpbGwgdXBkYXRlIHRoZXNlIGNvZGVzIGluIHRoZSBuZXh0IHZl cnNpb24uCgo+IAo+ID4gKwo+ID4gKwkJCWlmIChyZWN2X2RhdGFfY250ID4gYnVmZmVyX3NpemUp Cj4gPiArCQkJCXJlY3ZfZGF0YV9jbnQgPSBidWZmZXJfc2l6ZTsKPiAKPiBJc24ndCBpdCBhbiBl cnJvciB3aGlsZSB5b3UgZHJvcCBkYXRhIG92ZXIgdGhlIGJ1ZmZlciBzaXplPwpXZSB3aWxsIHVw ZGF0ZSB0aGVzZSBjb2RlcyBpbiB0aGUgbmV4dCB2ZXJzaW9uLgoKPiAKPiA+ICsKPiA+ICsJCQlt ZW1jcHkoYnVmZmVyLCByZWFkX3RtcCwgcmVjdl9kYXRhX2NudCk7Cj4gPiArCQl9IGVsc2Ugewo+ ID4gKwkJCS8qIHNob3J0ICBwYWNrZXQgKi8KPiA+ICsJCQlyZWN2X2RhdGFfY250ID0gMjsKPiA+ ICsJCQlpZiAocmVjdl9kYXRhX2NudCA+IGJ1ZmZlcl9zaXplKQo+ID4gKwkJCQlyZWN2X2RhdGFf Y250ID0gYnVmZmVyX3NpemU7Cj4gCj4gSXNuJ3QgaXQgYW4gZXJyb3Igd2hpbGUgeW91IGRyb3Ag ZGF0YSBvdmVyIHRoZSBidWZmZXIgc2l6ZT8KV2Ugd2lsbCB1cGRhdGUgdGhlc2UgY29kZXMgaW4g dGhlIG5leHQgdmVyc2lvbi4KCj4gCj4gPiArCj4gPiArCQkJbWVtY3B5KGJ1ZmZlciwgJnJlYWRf ZGF0YTAuYnl0ZTEsIDIpOwo+IAo+IElmIGJ1ZmZlcl9zaXplIGlzIDEsIHdoeSBkbyB5b3Ugc3Rp bGwgY29weSAyIGJ5dGVzPwpXaWxsIGZpeC4KCj4gCj4gPiArCQl9Cj4gPiArCX0gd2hpbGUgKHBh Y2tldF90eXBlICE9IDB4MWMgJiYgcGFja2V0X3R5cGUgIT0gMHgyMSAmJgo+ID4gKwkJcGFja2V0 X3R5cGUgIT0gMHgyMiAmJiBwYWNrZXRfdHlwZSAhPSAweDFhKTsKPiAKPiBDb3VsZCB5b3UgZ2l2 ZSB0aGVzZSBtYWdpYyBudW1iZXIgYSBkZXNjcmlwdGl2ZSBuYW1lPwpPSy4KCj4gCj4gPiArCj4g PiArCWRldl9pbmZvKGRzaS0+ZGV2LCAiZHNpIGdldCAlZCBieXRlIGRhdGEgZnJvbSB0aGUgcGFu ZWwgYWRkcmVzcygweCV4KVxuIiwKPiA+ICsJCSByZWN2X2RhdGFfY250LCAqKCh1OCAqKShtc2ct PnR4X2J1ZikpKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJlY3ZfZGF0YV9jbnQ7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IG10a19kc2lfaG9zdF93cml0ZV9jbWQoc3RydWN0IG10a19k c2kgKmRzaSwKPiA+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ ID4gK3sKPiA+ICsJdTMyIGk7Cj4gPiArCXUzMiBnb3RvX2FkZHIsIG1hc2tfcGFyYSwgc2V0X3Bh cmEsIHJlZ192YWw7Cj4gPiArCXZvaWQgX19pb21lbSAqY21kcV9yZWc7Cj4gPiArCXN0cnVjdCBk c2lfY21kX3QwIHQwOwo+ID4gKwlzdHJ1Y3QgZHNpX2NtZF90MiB0MjsKPiA+ICsJY29uc3QgY2hh ciAqdHhfYnVmID0gbXNnLT50eF9idWY7Cj4gPiArCXN0cnVjdCBkc2lfdHhfY21kcV9yZWdzICpk c2lfY21kX3JlZzsKPiA+ICsKPiA+ICsJZHNpX2NtZF9yZWcgPSAoc3RydWN0IGRzaV90eF9jbWRx X3JlZ3MgKikoZHNpLT5yZWdzICsgRFNJX0NNRFEwKTsKPiA+ICsKPiA+ICsJbXRrX2RzaV93YWl0 X2Zvcl9pZGxlKGRzaSk7Cj4gPiArCj4gPiArCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsKPiA+ICsJ CXQyLmNvbmZpZyA9IDI7Cj4gPiArCQl0Mi50eXBlID0gbXNnLT50eXBlOwo+ID4gKwkJdDIud2Mx NiA9IG1zZy0+dHhfbGVuOwo+ID4gKwo+ID4gKwkJcmVnX3ZhbCA9ICh0Mi53YzE2IDw8IDE2KSB8 ICh0Mi50eXBlIDw8IDgpIHwgdDIuY29uZmlnOwo+IAo+IFdoeSBuZWVkICdzdHJ1Y3QgZHNpX2Nt ZF90MiB0Mic/IEkgdGhpbmsgY29kZSBpcyBtb3JlIHNpbXBsZSB3aGVuIGdldAo+IHJpZCBvZiB0 aGlzIHN0cnVjdHVyZS4gVGhlIGNvZGUgbG9va3MgbGlrZToKPiAKPiByZWdfdmFsID0gKHdjMTYg PDwgMTYpIHwgKHR5cGUgPDwgOCkgfCBjb25maWc7CldlIHdpbGwgY2hlY2sgdGhpcyBwYXJ0LgoK PiAKPiA+ICsKPiA+ICsJCXdyaXRlbChyZWdfdmFsLCAmZHNpX2NtZF9yZWctPmRhdGFbMF0pOwo+ ID4gKwo+ID4gKwkJZ290b19hZGRyID0gKHUzMikoJmRzaV9jbWRfcmVnLT5kYXRhWzFdLmJ5dGUw KTsKPiA+ICsJCW1hc2tfcGFyYSA9ICgweGZmIDw8ICgoZ290b19hZGRyICYgMHgzKSAqIDgpKTsK PiA+ICsJCXNldF9wYXJhID0gKHR4X2J1ZlswXSA8PCAoKGdvdG9fYWRkciAmIDB4MykgKiA4KSk7 Cj4gPiArCQljbWRxX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoZ290b19hZGRyICYgKH4weDMpKTsK PiA+ICsJCW10a19kc2lfc2V0X2NtZHEoY21kcV9yZWcsIG1hc2tfcGFyYSwgc2V0X3BhcmEpOwo+ IAo+IEkgdGhpbmsgeW91IGNhbiBtZXJnZSB0aGlzIHNldHRpbmcgaW50byAnZm9yIGxvb3AnIGFu ZCB0aGUgbG9vcCBsb29rCj4gbGlrZSB0aGlzOgo+IAo+IGZvciAoaSA9IDA7IGkgPCBtc2ctPnR4 X2xlbjsgaSsrKSB7Cj4gCWdvdG9fYWRkciA9ICh1MzIpKCZkc2lfY21kX3JlZy0+ZGF0YVsxXS5i eXRlMCkgKyBpOwo+IAltYXNrX3BhcmEgPSAoMHhmZiA8PCAoKGdvdG9fYWRkciAmIDB4MykgKiA4 KSk7Cj4gCXNldF9wYXJhID0gKHR4X2J1ZltpXSA8PCAoKGdvdG9fYWRkciAmIDB4MykgKiA4KSk7 Cj4gCWNtZHFfcmVnID0gKHZvaWQgX19pb21lbSAqKShnb3RvX2FkZHIgJiAofjB4MykpOwo+IAlt dGtfZHNpX3NldF9jbWRxKGNtZHFfcmVnLCBtYXNrX3BhcmEsIHNldF9wYXJhKTsKPiB9Ck9LLCB3 ZSB3aWxsIG1lcmdlIGl0IGludG8gdGhlIGxvb3AuCgo+IAo+ID4gKwo+ID4gKwkJZm9yIChpID0g MTsgaSA8IG1zZy0+dHhfbGVuOyBpKyspIHsKPiA+ICsJCQlnb3RvX2FkZHIgPSAodTMyKSgmZHNp X2NtZF9yZWctPmRhdGFbMV0uYnl0ZTEpICsgaSAtIDE7Cj4gPiArCQkJbWFza19wYXJhID0gKDB4 ZmYgPDwgKChnb3RvX2FkZHIgJiAweDMpICogOCkpOwo+ID4gKwkJCXNldF9wYXJhID0gKHR4X2J1 ZltpXSA8PCAoKGdvdG9fYWRkciAmIDB4MykgKiA4KSk7Cj4gPiArCQkJY21kcV9yZWcgPSAodm9p ZCBfX2lvbWVtICopKGdvdG9fYWRkciAmICh+MHgzKSk7Cj4gPiArCQkJbXRrX2RzaV9zZXRfY21k cShjbWRxX3JlZywgbWFza19wYXJhLCBzZXRfcGFyYSk7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlt dGtfZHNpX21hc2soZHNpLCBEU0lfQ01EUV9TSVpFLCBDTURRX1NJWkUsCj4gPiArCQkJICAgICAy ICsgKG1zZy0+dHhfbGVuIC0gMSkgLyA0KTsKPiAKPiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBj aGFuZ2UgZm9ybXVsYSBvZiBEU0lfQ01EUV9TSVpFIHRvICcxICsKPiAobXNnLT50eF9sZW4gKyAz KSAvIDQnLiBUaGUgJzEnIG1lYW5zIHRoZSBmaXJzdCBjbWQgd2hpY2ggZGVzY3JpYmUgdGhlCj4g c2l6ZSBvZiB0eF9idWYsIGFuZCB0aGUgcmVzdCBtZWFucyB0aGUgb3RoZXIgY21kcyBmb3IgYm9k eSBvZiB0eF9idWYuCk9LLgoKUmVnYXJkcywKeXQuc2hlbgoKPiAKPiA+ICsJfSBlbHNlIHsKPiA+ ICsJCXQwLmNvbmZpZyA9IDA7Cj4gPiArCQl0MC5kYXRhMCA9IHR4X2J1ZlswXTsKPiA+ICsJCWlm IChtc2ctPnR4X2xlbiA9PSAyKSB7Cj4gPiArCQkJdDAudHlwZSA9IE1JUElfRFNJX0RDU19TSE9S VF9XUklURV9QQVJBTTsKPiA+ICsJCQl0MC5kYXRhMSA9IHR4X2J1ZlsxXTsKPiA+ICsJCX0gZWxz ZSB7Cj4gPiArCQkJdDAudHlwZSA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURTsKPiA+ICsJCQl0 MC5kYXRhMSA9IDA7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlyZWdfdmFsID0gKHQwLmRhdGExIDw8 IDI0KSB8ICh0MC5kYXRhMCA8PCAxNikgfCAodDAudHlwZSA8PCA4KSB8Cj4gPiArCQkJICAgdDAu Y29uZmlnOwo+ID4gKwo+ID4gKwkJd3JpdGVsKHJlZ192YWwsICZkc2lfY21kX3JlZy0+ZGF0YVsw XSk7Cj4gPiArCQltdGtfZHNpX21hc2soZHNpLCBEU0lfQ01EUV9TSVpFLCBDTURRX1NJWkUsIDEp Owo+ID4gKwl9Cj4gPiArCj4gPiArCW10a19kc2lfc3RhcnQoZHNpKTsKPiA+ICsJbXRrX2RzaV93 YWl0X2Zvcl9pZGxlKGRzaSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgc3NpemVfdCBtdGtfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hv c3QgKmhvc3QsCj4gPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ ID4gK3sKPiA+ICsJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwo+ID4g Kwl1OCB0eXBlID0gbXNnLT50eXBlOwo+ID4gKwlzc2l6ZV90IHJldCA9IDA7Cj4gPiArCj4gPiAr CWlmIChNVEtfRFNJX0hPU1RfSVNfUkVBRCh0eXBlKSkKPiA+ICsJCXJldCA9IG10a19kc2lfaG9z dF9yZWFkX2NtZChkc2ksIG1zZyk7Cj4gPiArCWVsc2UgaWYgKE1US19EU0lfSE9TVF9JU19XUklU RSh0eXBlKSkKPiA+ICsJCXJldCA9IG10a19kc2lfaG9zdF93cml0ZV9jbWQoZHNpLCBtc2cpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG10a19kc2lfb3BzID0gewo+ID4gIAkuYXR0YWNoID0gbXRr X2RzaV9ob3N0X2F0dGFjaCwKPiA+ICAJLmRldGFjaCA9IG10a19kc2lfaG9zdF9kZXRhY2gsCj4g PiArCS50cmFuc2ZlciA9IG10a19kc2lfaG9zdF90cmFuc2ZlciwKPiA+ICB9Owo+ID4gIAo+ID4g IHN0YXRpYyBpbnQgbXRrX2RzaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZSAqbWFzdGVyLCB2b2lkICpkYXRhKQo+IAo+IAo+IFJlZ2FyZHMsCj4gQ0sKPiAKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK