From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 6/7] drm/i915: write AVI infoframes for LSPCON Date: Wed, 1 Nov 2017 11:48:55 +0200 Message-ID: <20171101094855.GA10981@intel.com> References: <1502261186-10417-1-git-send-email-shashank.sharma@intel.com> <1502261186-10417-7-git-send-email-shashank.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3E4B76E1F8 for ; Wed, 1 Nov 2017 09:49:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBOb3YgMDEsIDIwMTcgYXQgMTA6Mjc6MjNBTSArMDEwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT3AgMDktMDgtMTcgb20gMDg6NDYgc2NocmVlZiBTaGFzaGFuayBTaGFybWE6 Cj4gPiBUbyBwYXNzIEFWSSBpbmZvZnJhbWVzIGZyb20gZGlzcGxheSBjb250cm9sbGVyIHRvIExT UENPTiwgd2UKPiA+IGhhdmUgdG8gd3JpdGUgaW5mb2ZyYW1lIHBhY2tldHMgaW50byB2ZW5kb3Ig c3BlY2lmaWVkIEFVWCBhZGRyZXNzLAo+ID4gaW4gdmVuZG9yIHNwZWNpZmllZCB3YXkuCj4gPgo+ ID4gQWxzbywgTFNQQ09OIHZlbmRvcnMgcHJvdmlkZSBBVVggb2Zmc2V0cywgdG8gaW5mb3JtIHRo ZSBMU1BDT04KPiA+IGNoaXAgdGhhdCB0aGUgQVZJIElGIHBhY2tldHMgYXJlIHdyaXR0ZW4sIHNv IHRoYXQgdGhlIGZpcm13YXJlCj4gPiBjYW4gcGljayBpdCB1cCBhbmQgYXBwbHkuCj4gPgo+ID4g VGhpcyBwYXRjaCBhZGRzIGZ1bmN0aW9uIHRvIHdyaXRlIEFWSSBpbmZvZnJhbWVzIGZvciBib3Ro IE1DQSBhcwo+ID4gd2VsbCBhcyBQYXJhZGUgVGVjaCBMU1BDT04gY2hpcHMuIFRoZXNlIHR3byB2 ZW5kb3JzIHByb3ZpZGUgZGlmZmVyZW50Cj4gPiBtZXRob2RzIGZvciB3cml0aW5nIGluZm9mcmFt ZXMsIHNvIHRoaXMgcGF0Y2ggY29udGFpbnMgdHdvIGRpZmZlcmVudAo+ID4gZnVuY3Rpb25zLCBv bmUgZm9yIGVhY2guCj4gPgo+ID4gVjI6IFJlYmFzZQo+ID4KPiA+IENjOiBWaWxsZSBTeXJqw6Rs w6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gQ2M6IEltcmUgRGVhayA8aW1y ZS5kZWFrQGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFNoYXNoYW5rIFNoYXJtYSA8c2hh c2hhbmsuc2hhcm1hQGludGVsLmNvbT4KPiA+IC0tLQo+IFRoaXMgcGF0Y2ggd2lsbCBmYWlsIHRv IGNvbXBpbGUgd2l0aG91dCA3LzcgYXBwbGllZDoKPiAtIGVuY190b19pbnRlbF9sc3Bjb24gbWlz c2luZy4KPiAtIGNydGNfc3RhdGUtPmxzcGNvbl9hY3RpdmUgbWlzc2luZy4KPiAKPiA+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyAgICB8ICAxMiArLQo+ID4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oICAgIHwgIDE2ICsrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2hkbWkuYyAgIHwgIDE1ICsrLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xzcGNvbi5jIHwgMjQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjg0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4g Pgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+IGluZGV4IDkzODQwODAuLjA4ZjM1Njcg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+IEBAIC0yMTkzLDYgKzIxOTMs MTUgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGUoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gPiAgCQkJCQlwaXBlX2NvbmZpZy0+c2hhcmVkX2RwbGwsCj4gPiAgCQkJ CQlpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLAo+ID4gIAkJCQkJCQkgICAgSU5URUxf T1VUUFVUX0RQX01TVCkpOwo+ID4gKwo+ID4gKwkJaWYgKHBpcGVfY29uZmlnLT5sc3Bjb25fYWN0 aXZlKSB7Cj4gPiArCQkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPQo+ID4g KwkJCQkJZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKPiA+ICsKPiA+ICsJCQlkaWdf cG9ydC0+c2V0X2luZm9mcmFtZXMoJmVuY29kZXItPmJhc2UsCj4gPiArCQkJCSBwaXBlX2NvbmZp Zy0+aGFzX2luZm9mcmFtZSwKPiA+ICsJCQkJIHBpcGVfY29uZmlnLCBjb25uX3N0YXRlKTsKPiA+ ICsJCX0KPiA+ICAJfQo+ID4gIAlpZiAodHlwZSA9PSBJTlRFTF9PVVRQVVRfSERNSSkgewo+ID4g IAkJaW50ZWxfZGRpX3ByZV9lbmFibGVfaGRtaShlbmNvZGVyLAo+ID4gQEAgLTI3MzQsOCArMjc0 Myw2IEBAIHZvaWQgaW50ZWxfZGRpX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LCBlbnVtIHBvcnQgcG9ydCkKPiA+ICAJaW50ZWxfZW5jb2Rlci0+Y3J0Y19tYXNrID0gKDEg PDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpOwo+ID4gIAlpbnRlbF9lbmNvZGVyLT5jbG9uZWFi bGUgPSAwOwo+ID4gIAo+ID4gLQlpbnRlbF9pbmZvZnJhbWVfaW5pdChpbnRlbF9kaWdfcG9ydCk7 Cj4gPiAtCj4gPiAgCWlmIChpbml0X2RwKSB7Cj4gPiAgCQlpZiAoIWludGVsX2RkaV9pbml0X2Rw X2Nvbm5lY3RvcihpbnRlbF9kaWdfcG9ydCkpCj4gPiAgCQkJZ290byBlcnI7Cj4gPiBAQCAtMjc2 NSw2ICsyNzcyLDcgQEAgdm9pZCBpbnRlbF9kZGlfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBwb3J0KQo+ID4gIAkJCQlwb3J0X25hbWUocG9ydCkpOwo+ ID4gIAl9Cj4gPiAgCj4gPiArCWludGVsX2luZm9mcmFtZV9pbml0KGludGVsX2RpZ19wb3J0KTsK PiA+ICAJcmV0dXJuOwo+ID4gIAo+ID4gIGVycjoKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiBpbmRleCBhZGFiNjM1Li45OWVhYWI2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCj4gPiBAQCAtMTA1Miw2ICsxMDUyLDEwIEBAIHN0cnVjdCBpbnRlbF9sc3Bjb24gewo+ ID4gIAlib29sIGFjdGl2ZTsKPiA+ICAJZW51bSBkcm1fbHNwY29uX21vZGUgbW9kZTsKPiA+ICAJ ZW51bSBsc3Bjb25fdmVuZG9yIHZlbmRvcjsKPiA+ICsKPiA+ICsJdm9pZCAoKndyaXRlX2luZm9m cmFtZSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4gKwkJCQljb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkJdW5pb24gaGRtaV9pbmZvZnJh bWUgKmZyYW1lKTsKPiA+ICB9Owo+ID4gIAo+ID4gIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg ewo+ID4gQEAgLTE5NzgsNiArMTk4MiwxOCBAQCB2b2lkIGludGVsX2NvbG9yX2xvYWRfbHV0cyhz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ID4gIGJvb2wgbHNwY29uX2luaXQo c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpOwo+ID4gIHZvaWQgbHNw Y29uX3Jlc3VtZShzdHJ1Y3QgaW50ZWxfbHNwY29uICpsc3Bjb24pOwo+ID4gIHZvaWQgbHNwY29u X3dhaXRfcGNvbl9tb2RlKHN0cnVjdCBpbnRlbF9sc3Bjb24gKmxzcGNvbik7Cj4gPiArYm9vbCBs c3Bjb25feWNiY3I0MjBfY29uZmlnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4g PiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY29uZmlnKTsKPiA+ICt2b2lkIGxz cGNvbl93cml0ZV9pbmZvZnJhbWUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4gKwkJ CSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkg ICAgZW51bSBoZG1pX2luZm9mcmFtZV90eXBlIHR5cGUsCj4gPiArCQkJICAgIGNvbnN0IHZvaWQg KmJ1Ziwgc3NpemVfdCBsZW4pOwo+ID4gK3ZvaWQgbHNwY29uX3NldF9pbmZvZnJhbWVzKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiA+ICsJCQkgICBib29sIGVuYWJsZSwKPiA+ICsJCQkg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICsJCQkgICBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Cj4gPiArYm9vbCBs c3Bjb25faW5mb2ZyYW1lX2VuYWJsZWQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4g KwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4g PiAgCj4gPiAgLyogaW50ZWxfcGlwZV9jcmMuYyAqLwo+ID4gIGludCBpbnRlbF9waXBlX2NyY19j cmVhdGUoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hk bWkuYwo+ID4gaW5kZXggZTRhMjdlMS4uNTcxMDAyOSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfaGRtaS5jCj4gPiBAQCAtMTkwOSw5ICsxOTA5LDE4IEBAIHZvaWQgaW50ZWxfaW5mb2Zy YW1lX2luaXQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCj4gPiAg CQlpbnRlbF9kaWdfcG9ydC0+c2V0X2luZm9mcmFtZXMgPSBnNHhfc2V0X2luZm9mcmFtZXM7Cj4g PiAgCQlpbnRlbF9kaWdfcG9ydC0+aW5mb2ZyYW1lX2VuYWJsZWQgPSBnNHhfaW5mb2ZyYW1lX2Vu YWJsZWQ7Cj4gPiAgCX0gZWxzZSBpZiAoSEFTX0RESShkZXZfcHJpdikpIHsKPiA+IC0JCWludGVs X2RpZ19wb3J0LT53cml0ZV9pbmZvZnJhbWUgPSBoc3dfd3JpdGVfaW5mb2ZyYW1lOwo+ID4gLQkJ aW50ZWxfZGlnX3BvcnQtPnNldF9pbmZvZnJhbWVzID0gaHN3X3NldF9pbmZvZnJhbWVzOwo+ID4g LQkJaW50ZWxfZGlnX3BvcnQtPmluZm9mcmFtZV9lbmFibGVkID0gaHN3X2luZm9mcmFtZV9lbmFi bGVkOwo+ID4gKwkJaWYgKGludGVsX2RpZ19wb3J0LT5sc3Bjb24uYWN0aXZlKSB7Cj4gPiArCQkJ aW50ZWxfZGlnX3BvcnQtPndyaXRlX2luZm9mcmFtZSA9Cj4gPiArCQkJCQkJbHNwY29uX3dyaXRl X2luZm9mcmFtZTsKPiA+ICsJCQlpbnRlbF9kaWdfcG9ydC0+c2V0X2luZm9mcmFtZXMgPSBsc3Bj b25fc2V0X2luZm9mcmFtZXM7Cj4gPiArCQkJaW50ZWxfZGlnX3BvcnQtPmluZm9mcmFtZV9lbmFi bGVkID0KPiA+ICsJCQkJCQlsc3Bjb25faW5mb2ZyYW1lX2VuYWJsZWQ7Cj4gPiArCQl9IGVsc2Ug ewo+ID4gKwkJCWludGVsX2RpZ19wb3J0LT5zZXRfaW5mb2ZyYW1lcyA9IGhzd19zZXRfaW5mb2Zy YW1lczsKPiA+ICsJCQlpbnRlbF9kaWdfcG9ydC0+aW5mb2ZyYW1lX2VuYWJsZWQgPQo+ID4gKwkJ CQkJCWhzd19pbmZvZnJhbWVfZW5hYmxlZDsKPiA+ICsJCQlpbnRlbF9kaWdfcG9ydC0+d3JpdGVf aW5mb2ZyYW1lID0gaHN3X3dyaXRlX2luZm9mcmFtZTsKPiA+ICsJCX0KPiA+ICAJfSBlbHNlIGlm IChIQVNfUENIX0lCWChkZXZfcHJpdikpIHsKPiA+ICAJCWludGVsX2RpZ19wb3J0LT53cml0ZV9p bmZvZnJhbWUgPSBpYnhfd3JpdGVfaW5mb2ZyYW1lOwo+ID4gIAkJaW50ZWxfZGlnX3BvcnQtPnNl dF9pbmZvZnJhbWVzID0gaWJ4X3NldF9pbmZvZnJhbWVzOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHNwY29uLmMKPiA+IGluZGV4IDkzNTA3YzUuLmI0ZmNkMzAgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sc3Bjb24uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHNwY29uLmMKPiA+IEBAIC0zMSw2ICszMSwxOCBAQAo+ID4gICNkZWZp bmUgTFNQQ09OX1ZFTkRPUl9QQVJBREVfT1VJIDB4MDAxQ0Y4Cj4gPiAgI2RlZmluZSBMU1BDT05f VkVORE9SX01DQV9PVUkgMHgwMDYwQUQKPiA+ICAKPiA+ICsvKiBBVVggYWRkcmVzc2VzIHRvIHdy aXRlIEFWSSBJRiBpbnRvICovCj4gPiArI2RlZmluZSBMU1BDT05fTUNBX0FWSV9JRl9XUklURV9P RkZTRVQgMHg1QzAKPiA+ICsjZGVmaW5lIExTUENPTl9NQ0FfQVZJX0lGX0NUUkwgMHg1REYKPiA+ ICsjZGVmaW5lICBMU1BDT05fTUNBX0FWSV9JRl9LSUNLT0ZGICgxIDw8IDApCj4gPiArI2RlZmlu ZSAgTFNQQ09OX01DQV9BVklfSUZfSEFORExFRCAoMSA8PCAxKQo+ID4gKwo+ID4gKyNkZWZpbmUg TFNQQ09OX1BBUkFERV9BVklfSUZfV1JJVEVfT0ZGU0VUIDB4NTE2Cj4gPiArI2RlZmluZSBMU1BD T05fUEFSQURFX0FWSV9JRl9DVFJMIDB4NTFFCj4gPiArI2RlZmluZSAgTFNQQ09OX1BBUkFERV9B VklfSUZfS0lDS09GRiAoMSA8PCA3KQo+ID4gKyNkZWZpbmUgTFNQQ09OX1BBUkFERV9BVklfSUZf U1RBVFVTIDB4NTFGCj4gPiArI2RlZmluZSAgTFNQQ09OX1BBUkFERV9BVklfSUZfSEFORExFRCAo MiA8PCA2KQo+ID4gKwo+ID4gIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZHAgKmxzcGNvbl90b19pbnRl bF9kcChzdHJ1Y3QgaW50ZWxfbHNwY29uICpsc3Bjb24pCj4gPiAgewo+ID4gIAlzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9Cj4gPiBAQCAtMjI3LDYgKzIzOSwyNDAgQEAgc3Rh dGljIHZvaWQgbHNwY29uX3Jlc3VtZV9pbl9wY29uX3dhKHN0cnVjdCBpbnRlbF9sc3Bjb24gKmxz cGNvbikKPiA+ICAJRFJNX0RFQlVHX0tNUygiTFNQQ09OIERQIGRlc2NyaXB0b3IgbWlzbWF0Y2gg YWZ0ZXIgcmVzdW1lXG4iKTsKPiA+ICB9Cj4gPiAgCj4gPiArYm9vbCBsc3Bjb25feWNiY3I0MjBf Y29uZmlnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArCQkJICAgICBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY29uZmlnKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kaXNw bGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gPiArCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlOwo+ID4g Kwo+ID4gKwlpZiAoZHJtX21vZGVfaXNfNDIwX29ubHkoaW5mbywgbW9kZSkpIHsKPiA+ICsKPiA+ ICsJCWlmICghY29ubmVjdG9yLT55Y2Jjcl80MjBfYWxsb3dlZCkgewo+ID4gKwkJCURSTV9FUlJP UigiUGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dFxuIik7Cj4gPiArCQkJ cmV0dXJuIGZhbHNlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJY29uZmlnLT5wb3J0X2Nsb2NrIC89 IDI7Cj4gPiArCQlyZXR1cm4gdHJ1ZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gZmFsc2U7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIF9sc3Bjb25fd3JpdGVfYXZpX2luZm9mcmFt ZV9wYXJhZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCwKPiA+ICsJCQkJCSAgICAgICBjb25zdCB1 aW50OF90ICpidWZmZXIsCj4gPiArCQkJCQkgICAgICAgc3NpemVfdCBsZW4pCj4gPiArewo+ID4g Kwl1OCBhdmlfaWZfY3RybDsKPiA+ICsJdTggYXZpX2lmX3N0YXR1czsKPiA+ICsJdTggY291bnQg PSAwOwo+ID4gKwl1OCByZXRyeSA9IDU7Cj4gPiArCXU4IGF2aV9idWZbOF0gPSB7MCwgfTsKPiBJ bml0aWFsaXplIHRoZSBmaXJzdCBieXRlIHRvIDEsIGFuZCB5b3UgY2FuIHJlbW92ZSB0aGUgc3Bl Y2lhbCBjYXNlIGZvciBjb3VudCA9PSAwPwo+ID4gKwl1aW50MTZfdCByZWc7Cj4gPiArCXNzaXpl X3QgcmV0Owo+ID4gKwo+ID4gKwl3aGlsZSAoY291bnQrKyA8IDQpIHsKPiA+ICsKPiA+ICsJCWRv IHsKPiA+ICsJCQkvKiBJcyBMU1BDT04gRlcgcmVhZHkgKi8KPiA+ICsJCQlyZWcgPSBMU1BDT05f UEFSQURFX0FWSV9JRl9DVFJMOwo+ID4gKwkJCXJldCA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBy ZWcsICZhdmlfaWZfY3RybCwgMSk7Cj4gPiArCQkJaWYgKHJldCA8IDApIHsKPiA+ICsJCQkJRFJN X0VSUk9SKCJEUENEIHJlYWQgZmFpbGVkLCBhZGQ6MHgleFxuIiwgcmVnKTsKPiA+ICsJCQkJcmV0 dXJuIGZhbHNlOwo+ID4gKwkJCX0KPiA+ICsKPiA+ICsJCQlpZiAoYXZpX2lmX2N0cmwgJiBMU1BD T05fUEFSQURFX0FWSV9JRl9LSUNLT0ZGKQo+ID4gKwkJCQlicmVhazsKPiA+ICsJCQl1c2xlZXBf cmFuZ2UoMTAwLCAyMDApOwo+ID4gKwkJfSB3aGlsZSAoLS1yZXRyeSk7Cj4gPiArCj4gPiArCQlp ZiAoIShhdmlfaWZfY3RybCAmIExTUENPTl9QQVJBREVfQVZJX0lGX0tJQ0tPRkYpKSB7Cj4gPiAr CQkJRFJNX0VSUk9SKCJMU1BDT04gRlcgbm90IHJlYWR5IGZvciBpbmZvZnJhbWVzXG4iKTsKPiA+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogQVZJ IEluZm9mcmFtZSBjb250YWlucyAzMSBieXRlcyBvZiBkYXRhOgo+ID4gKwkJICoJSEIwIHRvIEhC MiAgICgzIGJ5dGVzIGhlYWRlcikKPiA+ICsJCSAqCVBCMCB0byBQQjI3ICgyOCBieXRlcyBkYXRh KQo+ID4gKwkJICogQXMgcGVyIFBhcmFkZSBzcGVjLCB3aGlsZSBzZW5kaW5nIGZpcnN0IGJsb2Nr ICg4Ynl0ZXMpLAo+ID4gKwkJICogYnl0ZSAwIGlzIGtlcHQgZm9yIHJlcXVlc3QgdG9rZW4gbm8s IGFuZCBieXRlMSAtIGJ5dGU3Cj4gPiArCQkgKiBjb250YWluIGZyYW1lIGRhdGEuIFNvIHdlIGhh dmUgdG8gcGFjayBmcmFtZSBsaWtlIHRoaXM6Cj4gPiArCQkgKglmaXJzdCBibG9jayBvZiA4IGJ5 dGVzOiA8dG9rZW4+IDxIQjAtSEIyPiA8UEIwLVBCMz4KPiA+ICsJCSAqCW5leHQgMyBibG9ja3M6 IDxQQjQtUEIyNz4KPiA+ICsJCSAqLwo+ID4gKwkJaWYgKGNvdW50KQo+ID4gKwkJCW1lbWNweShh dmlfYnVmLCBidWZmZXIgKyBjb3VudCAqIDggLSAxLCA4KTsKPiA+ICsJCWVsc2Ugewo+ID4gKwkJ CWF2aV9idWZbMF0gPSAxOwo+ID4gKwkJCW1lbWNweSgmYXZpX2J1ZlsxXSwgYnVmZmVyLCA3KTsK PiA+ICsJCX0KPiBeVGhpcyB3b24ndCB3b3JrLCBJIHRoaW5rLgo+IAo+IGZvciAoY291bnQgPSAw OyBjb3VudCA8IDQ7IGNvdW50KyspCj4gPiArCj4gPiArCQkvKiBXcml0ZSA4IGJ5dGVzIG9mIGRh dGEgYXQgYSB0aW1lICovCj4gPiArCQlyZWcgPSBMU1BDT05fUEFSQURFX0FWSV9JRl9XUklURV9P RkZTRVQ7Cj4gPiArCQlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZShhdXgsIHJlZywgYXZpX2J1Ziwg OCk7Cj4gPiArCQlpZiAocmV0IDwgMCkgewo+ID4gKwkJCURSTV9FUlJPUigiRFBDRCB3cml0ZSBm YWlsZWQsIGFkZDoweCV4XG4iLCByZWcpOwo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCX0K PiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBXaGlsZSBzZW5kaW5nIGEgYmxvY2sgb2YgOCBieWVz LCB3ZSBuZWVkIHRvIGluZm9ybSBibG9jawo+ID4gKwkJICogbnVtYmVyIHRvIEZXLCBieSBwcm9n cmFtbWluZyBiaXRzWzE6MF0gb2YgY3RybCByZWcgd2l0aAo+ID4gKwkJICogYmxvY2sgbnVtYmVy Cj4gPiArCQkgKi8KPiA+ICsJCWF2aV9pZl9jdHJsID0gMHg4MCArIGNvdW50Owo+ID4gKwkJcmVn ID0gTFNQQ09OX1BBUkFERV9BVklfSUZfQ1RSTDsKPiA+ICsJCXJldCA9IGRybV9kcF9kcGNkX3dy aXRlKGF1eCwgcmVnLCAmYXZpX2lmX2N0cmwsIDEpOwo+ID4gKwkJaWYgKHJldCA8IDApIHsKPiA+ ICsJCQlEUk1fRVJST1IoIkRQQ0Qgd3JpdGUgZmFpbGVkLCBhZGQ6MHgleFxuIiwgcmVnKTsKPiA+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogQ2hlY2sg TFNQQ09OIEZXIHN0YXR1cyAqLwo+ID4gKwlyZWcgPSBMU1BDT05fUEFSQURFX0FWSV9JRl9TVEFU VVM7Cj4gPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCByZWcsICZhdmlfaWZfc3RhdHVz LCAxKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiRFBDRCB3cml0ZSBm YWlsZWQsIGFkZHJlc3MgMHgleFxuIiwgcmVnKTsKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlpZiAoYXZpX2lmX3N0YXR1cyAmIExTUENPTl9QQVJBREVfQVZJX0lGX0hB TkRMRUQpCj4gPiArCQlEUk1fREVCVUdfS01TKCJBVkkgSUYgaGFuZGxlZCBieSBGV1xuIik7Cj4g eW91IHNob3VsZCBjaGVjayBmb3IgKGF2aV9pZl9zdGF0dXMgJiBBVklfSUZfU1RBVFVTX01BU0sp ID09IElGX0hBTkRMRUQsCj4gYWZhaWN0IGZyb20gc3BlY3MsIGlmIHRoZSBzdGF0dXMgY29tcGxl dGVzIHdpdGggYW4gZXJyb3IsIHlvdSBzdGlsbCByZXBvcnQgc3VjY2VzcyBoZXJlLgo+IAo+ID4g KwlyZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgX2xzcGNvbl93cml0 ZV9hdmlfaW5mb2ZyYW1lX21jYShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LAo+ID4gKwkJCQkJICAg IGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgc3NpemVfdCBsZW4pCj4gPiArewo+ID4gKwlpbnQgcmV0 Owo+ID4gKwl1aW50MzJfdCB2YWwgPSAwOwo+ID4gKwl1aW50MTZfdCByZWc7Cj4gPiArCWNvbnN0 IHVpbnQ4X3QgKmRhdGEgPSBidWZmZXI7Cj4gPiArCj4gPiArCXJlZyA9IExTUENPTl9NQ0FfQVZJ X0lGX1dSSVRFX09GRlNFVDsKPiA+ICsJd2hpbGUgKHZhbCA8IGxlbikgewo+ID4gKwkJcmV0ID0g ZHJtX2RwX2RwY2Rfd3JpdGUoYXV4LCByZWcsICh2b2lkICopZGF0YSwgMSk7Cj4gPiArCQlpZiAo cmV0IDwgMCkgewo+ID4gKwkJCURSTV9FUlJPUigiRFBDRCB3cml0ZSBmYWlsZWQsIGFkZDoweCV4 XG4iLCByZWcpOwo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCX0KPiA+ICsJCXZhbCsrOyBy ZWcrKzsgZGF0YSsrOwo+ID4gKwl9Cj4gPiArCj4gPiArCXZhbCA9IDA7Cj4gPiArCXJlZyA9IExT UENPTl9NQ0FfQVZJX0lGX0NUUkw7Cj4gPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBy ZWcsICZ2YWwsIDEpOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJRFJNX0VSUk9SKCJEUENE IHJlYWQgZmFpbGVkLCBhZGRyZXNzIDB4JXhcbiIsIHJlZyk7Cj4gPiArCQlyZXR1cm4gZmFsc2U7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogSW5kaWNhdGUgTFNQQ09OIGNoaXAgYWJvdXQgaW5mb2Zy YW1lLCBjbGVhciBiaXQgMSBhbmQgc2V0IGJpdCAwICovCj4gPiArCXZhbCAmPSB+TFNQQ09OX01D QV9BVklfSUZfSEFORExFRDsKPiA+ICsJdmFsIHw9IExTUENPTl9NQ0FfQVZJX0lGX0tJQ0tPRkY7 Cj4gPiArCj4gPiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eCwgcmVnLCAmdmFsLCAxKTsK PiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiRFBDRCByZWFkIGZhaWxlZCwg YWRkcmVzcyAweCV4XG4iLCByZWcpOwo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXZhbCA9IDA7Cj4gPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCByZWcsICZ2 YWwsIDEpOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJRFJNX0VSUk9SKCJEUENEIHJlYWQg ZmFpbGVkLCBhZGRyZXNzIDB4JXhcbiIsIHJlZyk7Cj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJaWYgKHZhbCA9PSBMU1BDT05fTUNBX0FWSV9JRl9IQU5ETEVEKQo+ID4g KwkJRFJNX0RFQlVHX0tNUygiQVZJIElGIGhhbmRsZWQgYnkgRldcbiIpOwo+ID4gKwo+ID4gKwly ZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBsc3Bjb25fd3JpdGVfaW5mb2ZyYW1l KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiA+ICsJCQkgICAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiArCQkJICAgIGVudW0gaGRtaV9pbmZvZnJh bWVfdHlwZSB0eXBlLAo+ID4gKwkJCSAgICBjb25zdCB2b2lkICpmcmFtZSwgc3NpemVfdCBsZW4p Cj4gPiArewo+ID4gKwlib29sIHJldDsKPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9 IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiA+ICsJc3RydWN0IGludGVsX2xzcGNvbiAqbHNw Y29uID0gZW5jX3RvX2ludGVsX2xzcGNvbihlbmNvZGVyKTsKPiA+ICsKPiA+ICsJLyogTFNQQ09O IG9ubHkgbmVlZHMgQVZJIElGICovCj4gPiArCWlmICh0eXBlICE9IEhETUlfSU5GT0ZSQU1FX1RZ UEVfQVZJKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAobHNwY29uLT52ZW5kb3IgPT0g TFNQQ09OX1ZFTkRPUl9NQ0EpCj4gPiArCQlyZXQgPSBfbHNwY29uX3dyaXRlX2F2aV9pbmZvZnJh bWVfbWNhKCZpbnRlbF9kcC0+YXV4LAo+ID4gKwkJCQkJCSAgICAgIGZyYW1lLCBsZW4pOwo+ID4g KwllbHNlCj4gPiArCQlyZXQgPSBfbHNwY29uX3dyaXRlX2F2aV9pbmZvZnJhbWVfcGFyYWRlKCZp bnRlbF9kcC0+YXV4LAo+ID4gKwkJCQkJCQkgZnJhbWUsIGxlbik7Cj4gPiArCj4gPiArCWlmICgh cmV0KQo+ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gd3JpdGUgQVZJIGluZm9mcmFtZXNcbiIp Owo+IFdlbGwsIGJvdGggaW5mb2ZyYW1lIHdyaXRlIGZ1bmN0aW9ucyBhbHJlYWR5IHJlcG9ydCBh IERSTV9FUlJPUiwgdGhpcyBwcmludCBjb3VsZCBiZSBsb3dlciBvciByZW1vdmVkLiA6KQo+ID4g KwllbHNlCj4gPiArCQlEUk1fREVCVUdfRFJJVkVSKCJBVkkgaW5mb2ZyYW1lcyB1cGRhdGVkIHN1 Y2Nlc3NmdWxseVxuIik7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbHNwY29uX3NldF9pbmZvZnJh bWVzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiA+ICsJCQkgICBib29sIGVuYWJsZSwK PiA+ICsJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ ICsJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiA+ ICt7Cj4gPiArCXNzaXplX3QgcmV0Owo+ID4gKwl1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFtZTsK PiA+ICsJdWludDhfdCBidWZbVklERU9fRElQX0RBVEFfU0laRV07Cj4gPiArCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KGVuY29kZXIpOwo+ID4g KwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gJmRpZ19wb3J0LT5kcDsKPiA+ICsJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9y LT5iYXNlOwo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRj X3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGU7Cj4gPiArCWJvb2wgaXNfaGRtaTJfc2luayA9IGNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhkbWkuc2NkYy5zdXBwb3J0ZWQ7Cj4gPiArCj4gPiArCWlm ICghY3J0Y19zdGF0ZS0+bHNwY29uX2FjdGl2ZSkgewo+ID4gKwkJRFJNX0VSUk9SKCJXcml0aW5n IGluZm9mcmFtZXMgd2hpbGUgTFNQQ09OIGRpc2FibGVkID9cbiIpOwo+ID4gKwkJcmV0dXJuOwo+ ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRybV9oZG1pX2F2aV9pbmZvZnJhbWVfZnJvbV9kaXNw bGF5X21vZGUoJmZyYW1lLmF2aSwKPiA+ICsJCQkJCQkgICAgICAgbW9kZSwgaXNfaGRtaTJfc2lu ayk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlEUk1fRVJST1IoImNvdWxkbid0IGZpbGwg QVZJIGluZm9mcmFtZVxuIik7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYg KGNydGNfc3RhdGUtPnljYmNyNDIwKQo+ID4gKwkJZnJhbWUuYXZpLmNvbG9yc3BhY2UgPSBIRE1J X0NPTE9SU1BBQ0VfWVVWNDIwOwo+ID4gKwllbHNlCj4gPiArCQlmcmFtZS5hdmkuY29sb3JzcGFj ZSA9IEhETUlfQ09MT1JTUEFDRV9SR0I7Cj4gPiArCj4gPiArCWRybV9oZG1pX2F2aV9pbmZvZnJh bWVfcXVhbnRfcmFuZ2UoJmZyYW1lLmF2aSwgbW9kZSwKPiA+ICsJCQkJCSAgIGNydGNfc3RhdGUt PmxpbWl0ZWRfY29sb3JfcmFuZ2UgPwo+ID4gKwkJCQkJICAgSERNSV9RVUFOVElaQVRJT05fUkFO R0VfTElNSVRFRCA6Cj4gPiArCQkJCQkgICBIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9GVUxMLAo+ ID4gKwkJCQkJICAgZmFsc2UpOwo+ID4gKwo+ID4gKwlyZXQgPSBoZG1pX2luZm9mcmFtZV9wYWNr KCZmcmFtZSwgYnVmLCBzaXplb2YoYnVmKSk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBwYWNrIEFWSSBJRlxuIik7Cj4gSW4gZ2VuZXJhbCwgaXQgd291 bGQgYmUgbmljZSBpZiB3ZSBhbHNvIGdldCB0aGUgcmV0dXJuZWQgZXJyb3IgY29kZSBmb3IgZGVi dWdnaW5nLiA6KQoKU3BlYWtpbmcgb2YgaW5mb2ZyYW1lIHJlbGF0ZWQgZXJyb3JzLCBJJ3ZlIHN0 YXJ0ZWQgb24gYSBicmFuY2ggd2hlcmUgSQptb3ZlIHRoZSBpbmZvZnJhbWUgc2V0dXAvdmFsaWRh dGlvbiBpbnRvIC5jb21wdXRlX2NvbmZpZygpLiBJIGd1ZXNzIEkKc2hvdWxkIGZpbmlzaCBpdCBh bmQgc2VuZCBpdCBvdXQuCgo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRpZ19w b3J0LT53cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwgSERNSV9JTkZPRlJBTUVf VFlQRV9BVkksCj4gPiArCQkJCSAgYnVmLCByZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtib29sIGxz cGNvbl9pbmZvZnJhbWVfZW5hYmxlZChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gPiAr CQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+ID4g K3sKPiA+ICsJcmV0dXJuIGVuY190b19pbnRlbF9sc3Bjb24oZW5jb2RlciktPmFjdGl2ZTsKPiA+ ICt9Cj4gPiArCj4gPiAgdm9pZCBsc3Bjb25fcmVzdW1lKHN0cnVjdCBpbnRlbF9sc3Bjb24gKmxz cGNvbikKPiA+ICB7Cj4gPiAgCWVudW0gZHJtX2xzcGNvbl9tb2RlIGV4cGVjdGVkX21vZGU7Cj4g CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK