From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH V3 3/5] ALSA: add Intel HDMI LPE audio driver for BYT/CHT-T Date: Wed, 18 Jan 2017 12:46:22 +0100 Message-ID: References: <20170110050841.31900-1-jerome.anand@intel.com> <20170110050841.31900-4-jerome.anand@intel.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8598A6E863 for ; Wed, 18 Jan 2017 11:46:26 +0000 (UTC) In-Reply-To: <20170110050841.31900-4-jerome.anand@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jerome Anand Cc: alsa-devel@alsa-project.org, intel-gfx@lists.freedesktop.org, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAxMCBKYW4gMjAxNyAwNjowODozOSArMDEwMCwKSmVyb21lIEFuYW5kIHdyb3RlOgo+ IAo+IE9uIEJheXRyYWlsIGFuZCBDaGVycnl0cmFpbCwgSERhdWRpbyBtYXkgYmUgZnVzZWQgb3V0 IG9yIGRpc2FibGVkCj4gYnkgdGhlIEJJT1MuIFRoaXMgZHJpdmVyIGVuYWJsZXMgYW4gYWx0ZXJu YXRlIHBhdGggdG8gdGhlIGk5MTUKPiBkaXNwbGF5IHJlZ2lzdGVycyBhbmQgRE1BLgo+IAo+IEFs dGhvdWdoIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHBhdGggYmV0d2VlbiBpOTE1IGRpc3BsYXkgYW5k IExQRS9TU1QKPiBhdWRpbyBjbHVzdGVycywgdGhpcyBIRE1JIGNhcGFiaWxpdHkgaXMgcmVmZXJy ZWQgdG8gaW4gdGhlIGRvY3VtZW50YXRpb24KPiBhcyAiSERNSSBMUEUgQXVkaW8iIHNvIHdlIGtl ZXAgdGhlIG5hbWUgZm9yIGNvbnNpc3RlbmN5LiBUaGVyZSBpcyBubwo+IGhhcmR3YXJlIHBhdGgg b3IgY29udHJvbCBkZXBlbmRlbmNpZXMgd2l0aCB0aGUgTFBFL1NTVCBEU1AgZnVuY3Rpb25hbGl0 eS4KPiAKPiBUaGUgaGRtaS1scGUtYXVkaW8gZHJpdmVyIHdpbGwgYmUgcHJvYmVkIHdoZW4gdGhl IGk5MTUgZHJpdmVyIGNyZWF0ZXMKPiBhIGNoaWxkIHBsYXRmb3JtIGRldmljZS4KPiAKPiBTaW5j ZSB0aGlzIGRyaXZlciBpcyBuZWl0aGVyIFNvQyBub3IgUENJLCBhIG5ldyB4ODYgZm9sZGVyIGlz IGFkZGVkCj4gQWRkaXRpb25hbCBpbmRpcmVjdGlvbnMgaW4gdGhlIGNvZGUgd2lsbCBiZSBjbGVh bmVkIHVwIGluIHRoZSBuZXh0IHNlcmllcwo+IHRvIGFpZCBzbW9vdGhlciBEUCBpbnRlZ3JhdGlv bgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMu Ym9zc2FydEBsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmVyb21lIEFuYW5kIDxq ZXJvbWUuYW5hbmRAaW50ZWwuY29tPgoKSnVzdCBhIGZldyBrbml0cGlja3MgYmVsb3c6Cgo+IC0t LSBhL3NvdW5kL01ha2VmaWxlCj4gKysrIGIvc291bmQvTWFrZWZpbGUKPiBAQCAtNSw3ICs1LDcg QEAgb2JqLSQoQ09ORklHX1NPVU5EKSArPSBzb3VuZGNvcmUubwo+ICBvYmotJChDT05GSUdfU09V TkRfUFJJTUUpICs9IG9zcy8KPiAgb2JqLSQoQ09ORklHX0RNQVNPVU5EKSArPSBvc3MvCj4gIG9i ai0kKENPTkZJR19TTkQpICs9IGNvcmUvIGkyYy8gZHJpdmVycy8gaXNhLyBwY2kvIHBwYy8gYXJt LyBzaC8gc3ludGgvIHVzYi8gXAo+IC0JZmlyZXdpcmUvIHNwYXJjLyBzcGkvIHBhcmlzYy8gcGNt Y2lhLyBtaXBzLyBzb2MvIGF0bWVsLyBoZGEvCj4gKwlmaXJld2lyZS8gc3BhcmMvIHNwaS8gcGFy aXNjLyBwY21jaWEvIG1pcHMvIHNvYy8gYXRtZWwvIGhkYS8geDg2Lwo+ICBvYmotJChDT05GSUdf U05EX0FPQSkgKz0gYW9hLwo+ICAKPiAgIyBUaGlzIG9uZSBtdXN0IGJlIGNvbXBpbGFibGUgZXZl biBpZiBzb3VuZCBpcyBjb25maWd1cmVkIG91dAo+IGRpZmYgLS1naXQgYS9zb3VuZC94ODYvS2Nv bmZpZyBiL3NvdW5kL3g4Ni9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi5lOTI5N2QwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NvdW5kL3g4Ni9LY29uZmln Cj4gQEAgLTAsMCArMSwxNiBAQAo+ICttZW51Y29uZmlnIFNORF9YODYKPiArCXRyaXN0YXRlICJY ODYgc291bmQgZGV2aWNlcyIKClRoaXMgc2hvdWxkIGRlcGVuZHMgb24gWDg2LgoKCj4gKwktLS1o ZWxwLS0tCj4gKwo+ICsJICBYODYgc291bmQgZGV2aWNlcyB0aGF0IGRvbid0IGZhbGwgdW5kZXIg U29DIG9yIFBDSSBjYXRlZ29yaWVzCj4gKwo+ICtpZiBTTkRfWDg2Cj4gKwo+ICtjb25maWcgSERN SV9MUEVfQVVESU8KPiArCXRyaXN0YXRlICJIRE1JIGF1ZGlvIHdpdGhvdXQgSERhdWRpbyBvbiBJ bnRlbCBBdG9tIHBsYXRmb3JtcyIKPiArCWRlcGVuZHMgb24gRFJNX0k5MTUKPiArCWRlZmF1bHQg bgoKZGVmYXVsdD1uIGlzIHN1cGVyZmx1b3VzLgoKPiArCWhlbHAKPiArCSBDaG9vc2UgdGhpcyBv cHRpb24gdG8gc3VwcG9ydCBIRE1JIExQRSBBdWRpbyBtb2RlCj4gKwo+ICtlbmRpZgkjIFNORF9Y ODYKPiBkaWZmIC0tZ2l0IGEvc291bmQveDg2L01ha2VmaWxlIGIvc291bmQveDg2L01ha2VmaWxl Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41NGQwMDJkCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL3NvdW5kL3g4Ni9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsNiBAQAo+ICtj Y2ZsYWdzLXkgKz0gLUlpbmNsdWRlL2RybQoKRG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8KCj4gK3Nu ZC1oZG1pLWxwZS1hdWRpby1vYmpzICs9IFwKPiArCWludGVsX2hkbWlfbHBlX2F1ZGlvLm8KPiAr Cj4gK29iai0kKENPTkZJR19IRE1JX0xQRV9BVURJTykgKz0gc25kLWhkbWktbHBlLWF1ZGlvLm8K PiBkaWZmIC0tZ2l0IGEvc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmMgYi9zb3VuZC94 ODYvaW50ZWxfaGRtaV9scGVfYXVkaW8uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uYzJlYmNlMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zb3VuZC94ODYvaW50ZWxf aGRtaV9scGVfYXVkaW8uYwo+IEBAIC0wLDAgKzEsNjE0IEBACj4gKy8qCj4gKyAqICBpbnRlbF9o ZG1pX2xwZV9hdWRpby5jIC0gSW50ZWwgSERNSSBMUEUgYXVkaW8gZHJpdmVyIGZvciBBdG9tIHBs YXRmb3Jtcwo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnAKPiArICog IEF1dGhvcnM6Cj4gKyAqCQlKZXJvbWUgQW5hbmQgPGplcm9tZS5hbmFuZEBpbnRlbC5jb20+Cj4g KyAqCQlBcmF2aW5kIFNpZGRhcHBhamkgPGFyYXZpbmR4LnNpZGRhcHBhamlAaW50ZWwuY29tPgo+ ICsgKiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPiArICoKPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQo+ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLgo+ICsgKgo+ICsgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAo+ICsgKiAgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKPiArICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K PiArICoKPiArICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsj aW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KPiArI2luY2x1 ZGUgPHNvdW5kL2NvcmUuaD4KClVzdWFsbHkgc291bmQvY29yZS5oIGNvbWVzIGJlZm9yZSBvdGhl ciBzb3VuZC8qIGluY2x1c2lvbnMuCgo+ICsjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgo+ ICsjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgo+ICsjaW5jbHVkZSA8c291bmQvY29udHJvbC5o Pgo+ICsjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2ludGVsX2xw ZV9hdWRpby5oPgo+ICsjaW5jbHVkZSAiaW50ZWxfaGRtaV9scGVfYXVkaW8uaCIKPiArCj4gKy8q IGdsb2JhbHMqLwo+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpobHBlX3BkZXY7Cj4gK2ludCBo bHBlX3N0YXRlOwo+ICt1bmlvbiBvdG1faGRtaV9lbGRfdCBobHBlX2VsZDsKCkFyZSB0aGVzZSBy ZWFsbHkgZ2xvYmFscz8gIEkgY291bGRuJ3QgZmluZCB0aGUgcmVmZXJlbmNlIGZyb20gb3RoZXJz CmluIHRoZSBwYXRjaHNldC4KCj4gKwo+ICtzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4IHsKPiAr CWludCBpcnE7Cj4gKwl2b2lkIF9faW9tZW0gKm1taW9fc3RhcnQ7Cj4gKwloYWRfZXZlbnRfY2Fs bF9iYWNrIGhhZF9ldmVudF9jYWxsYmFja3M7Cj4gKwlzdHJ1Y3Qgc25kX2ludGVsX2hhZF9pbnRl cmZhY2UgKmhhZF9pbnRlcmZhY2U7Cj4gKwl2b2lkICpoYWRfcHZ0X2RhdGE7Cj4gKwlpbnQgdG1k c19jbG9ja19zcGVlZDsKPiArCXVuc2lnbmVkIGludCBoYWRfY29uZmlnX29mZnNldDsKPiArCWlu dCBoZG1pX2F1ZGlvX2ludGVycnVwdF9tYXNrOwo+ICsJc3RydWN0IHdvcmtfc3RydWN0IGhkbWlf YXVkaW9fd3E7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaGRtaV9zZXRfZWxkKHZv aWQgKmVsZCkKCllvdSBuZWVkIG5vIGlubGluZSB1bmxlc3MgaXQncyByZWFsbHkgbWFuZGF0b3J5 LgpMZXQgY29tcGlsZXIgb3B0aW1pemUuICBJdCdzIG9mdGVuIHNtYXJ0ZXIgdGhhbiB1cy4KCj4g K3sKPiArCWludCBzaXplOwo+ICsKPiArCUJVSUxEX0JVR19PTihzaXplb2YoaGxwZV9lbGQpID4g SERNSV9NQVhfRUxEX0JZVEVTKTsKPiArCj4gKwlzaXplID0gc2l6ZW9mKGhscGVfZWxkKTsKPiAr CW1lbWNweSgodm9pZCAqKSZobHBlX2VsZCwgZWxkLCBzaXplKTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBpbnQgaGRtaV9nZXRfZWxkKHZvaWQgKmVsZCkKPiArewo+ICsJdWludDhfdCAqZWxk X2RhdGEgPSAodWludDhfdCAqKSZobHBlX2VsZDsKPiArCj4gKwltZW1jcHkoZWxkLCAodm9pZCAq KSZobHBlX2VsZCwgc2l6ZW9mKGhscGVfZWxkKSk7Cj4gKwo+ICsJcHJpbnRfaGV4X2R1bXBfYnl0 ZXMoImVsZDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgZWxkX2RhdGEsCj4gKwkJCXNpemVvZihobHBl X2VsZCkpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBoZG1pX2xwZV9hdWRpb19jdHggKmdldF9oZG1pX2NvbnRleHQodm9pZCkKPiArewo+ICsJc3Ry dWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4Owo+ICsKPiArCWN0eCA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKGhscGVfcGRldik7Cj4gKwlyZXR1cm4gY3R4Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBy ZXR1cm4gd2hldGhlciBIRE1JIGF1ZGlvIGRldmljZSBpcyBidXN5Lgo+ICsgKi8KPiArYm9vbCBt aWRfaGRtaV9hdWRpb19pc19idXN5KHZvaWQgKmRkZXYpCj4gK3sKPiArCXN0cnVjdCBoZG1pX2xw ZV9hdWRpb19jdHggKmN0eDsKPiArCWludCBoZG1pX2F1ZGlvX2J1c3kgPSAwOwo+ICsJc3RydWN0 IGhkbWlfYXVkaW9fZXZlbnQgaGRtaV9hdWRpb19ldmVudDsKPiArCj4gKwlkZXZfZGJnKCZobHBl X3BkZXYtPmRldiwgIiVzOiBFbnRlciIsICBfX2Z1bmNfXyk7Cj4gKwo+ICsJY3R4ID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEoaGxwZV9wZGV2KTsKPiArCj4gKwlpZiAoaGxwZV9zdGF0ZSA9PSBoZG1p X2Nvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Cj4gKwkJLyogSERNSSBpcyBub3QgY29u bmVjdGVkLCBhc3N1bWluZyBhdWRpbyBkZXZpY2UgaXMgaWRsZS4gKi8KPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKGN0eC0+aGFkX2ludGVyZmFjZSkgewo+ICsJCWhkbWlfYXVk aW9fZXZlbnQudHlwZSA9IEhBRF9FVkVOVF9RVUVSWV9JU19BVURJT19CVVNZOwo+ICsJCWhkbWlf YXVkaW9fYnVzeSA9IGN0eC0+aGFkX2ludGVyZmFjZS0+cXVlcnkoCj4gKwkJCQljdHgtPmhhZF9w dnRfZGF0YSwKPiArCQkJCWhkbWlfYXVkaW9fZXZlbnQpOwo+ICsJCXJldHVybiBoZG1pX2F1ZGlv X2J1c3kgIT0gMDsKPiArCX0KPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArLyoKPiArICog cmV0dXJuIHdoZXRoZXIgSERNSSBhdWRpbyBkZXZpY2UgaXMgc3VzcGVuZGVkLgoKSXQncyBhIGJp dCBjb25mdXNpbmcgZGVzY3JpcHRpb24uICBUaGUgZnVuY3Rpb24gZG9lcyBzdXNwZW5kIGFuZApy ZXR1cm5zIHRydWUgaWYgaXQgaGFzIHN1c3BlbmRlZCwgb3IgZGlzY29ubmVjdGVkIC8gSUYgZG9l c24ndCBleGlzdC4KCklNTywgYSBzdGFuZGFyZCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8g cmV0dXJuIHZhbHVlIHdvdWxkIGJlIG1vcmUKc3RyYWlnaHRmb3J3YXJkIGluIHN1Y2ggYSBjYXNl LgoKPiArICovCj4gK2Jvb2wgbWlkX2hkbWlfYXVkaW9fc3VzcGVuZCh2b2lkICpkZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7Cj4gKwlzdHJ1Y3QgaGRtaV9hdWRp b19ldmVudCBoZG1pX2F1ZGlvX2V2ZW50Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJY3R4ID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEoaGxwZV9wZGV2KTsKPiArCj4gKwlpZiAoaGxwZV9zdGF0ZSA9 PSBoZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Cj4gKwkJLyogSERNSSBpcyBu b3QgY29ubmVjdGVkLCBhc3N1bWluZyBhdWRpbyBkZXZpY2UKPiArCQkgKiBpcyBzdXNwZW5kZWQg YWxyZWFkeS4KPiArCQkgKi8KPiArCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwlkZXZfZGJn KCZobHBlX3BkZXYtPmRldiwgIiVzOiBobHBlX3N0YXRlICVkIiwgIF9fZnVuY19fLAo+ICsJCQlo bHBlX3N0YXRlKTsKPiArCj4gKwlpZiAoY3R4LT5oYWRfaW50ZXJmYWNlKSB7Cj4gKwkJaGRtaV9h dWRpb19ldmVudC50eXBlID0gMDsKPiArCQlyZXQgPSBjdHgtPmhhZF9pbnRlcmZhY2UtPnN1c3Bl bmQoY3R4LT5oYWRfcHZ0X2RhdGEsCj4gKwkJCQloZG1pX2F1ZGlvX2V2ZW50KTsKPiArCQlyZXR1 cm4gKHJldCA9PSAwKSA/IHRydWUgOiBmYWxzZTsKPiArCX0KPiArCXJldHVybiB0cnVlOwo+ICt9 Cj4gKwo+ICt2b2lkIG1pZF9oZG1pX2F1ZGlvX3Jlc3VtZSh2b2lkICpkZGV2KQo+ICt7Cj4gKwlz dHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7Cj4gKwo+ICsJY3R4ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEoaGxwZV9wZGV2KTsKPiArCj4gKwlpZiAoaGxwZV9zdGF0ZSA9PSBoZG1pX2Nvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Cj4gKwkJLyogSERNSSBpcyBub3QgY29ubmVjdGVk LCB0aGVyZSBpcyBubyBuZWVkCj4gKwkJICogdG8gcmVzdW1lIGF1ZGlvIGRldmljZS4KPiArCQkg Ki8KPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZGV2X2RiZygmaGxwZV9wZGV2LT5kZXYsICIl czogaGxwZV9zdGF0ZSAlZCIsICBfX2Z1bmNfXywgaGxwZV9zdGF0ZSk7Cj4gKwo+ICsJaWYgKGN0 eC0+aGFkX2ludGVyZmFjZSkKPiArCQljdHgtPmhhZF9pbnRlcmZhY2UtPnJlc3VtZShjdHgtPmhh ZF9wdnRfZGF0YSk7Cj4gK30KPiArCj4gK3ZvaWQgbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2ZW50 KGVudW0gaGFkX2V2ZW50X3R5cGUgZXZlbnQpCj4gK3sKPiArCXN0cnVjdCBoZG1pX2xwZV9hdWRp b19jdHggKmN0eDsKPiArCj4gKwlkZXZfZGJnKCZobHBlX3BkZXYtPmRldiwgIiVzOiBFbnRlclxu IiwgX19mdW5jX18pOwo+ICsKPiArCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRl dik7Cj4gKwo+ICsJaWYgKGN0eC0+aGFkX2V2ZW50X2NhbGxiYWNrcykKPiArCQkoKmN0eC0+aGFk X2V2ZW50X2NhbGxiYWNrcykoZXZlbnQsCj4gKwkJCWN0eC0+aGFkX3B2dF9kYXRhKTsKCklzbid0 IHRoaXMgcmFjeT8gIFRoaXMgZGlzcGF0Y2hlciBzZWVtcyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBw bGFjZXMKaW5jbHVkaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBiZWxvdy4KCgo+ICt9Cj4gKwo+ ICsvKioKPiArICogaGRtaV9hdWRpb193cml0ZToKPiArICogdXNlZCB0byB3cml0ZSBpbnRvIGRp c3BsYXkgY29udHJvbGxlciBIRE1JIGF1ZGlvIHJlZ2lzdGVycy4KCk5vIG5lZWQgdG8gdXNlIGtl cm5lbC1kb2Mgc3R5bGUgY29tbWVudHMgaGVyZSB1bmxlc3MgeW91IHJlYWxseSB3YW50CnRvIGxp c3QgaW4gdGhlIGtlcm5lbCBBUEkgZG9jdW1lbnRhdGlvbi4KCgo+ICsgKgo+ICsgKi8KPiArc3Rh dGljIGludCBoZG1pX2F1ZGlvX3dyaXRlKHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKQoKV2Ug ZG9uJ3QgdXNlIHVpbnQzMl90IGluIGtlcm5lbCBjb2RlcywgYnV0IGEgc2ltcGxlciBmb3JtLCB1 MzIsIGlzCnByZWZlcnJlZCBpbiBtb3N0IGNhc2VzLiAgdWludDMyX3QgaXMgc3RpbGwgYWxsb3dl ZCwgYnV0IGl0J3MgdXN1YWxseQpvbmx5IGZvciB1c2VyIEFQSSBkZWZpbml0aW9ucy4KCgo+ICt7 Cj4gKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7Cj4gKwo+ICsJY3R4ID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEoaGxwZV9wZGV2KTsKPiArCj4gKwlkZXZfZGJnKCZobHBlX3BkZXYtPmRl diwgIiVzOiByZWdbMHgleF0gPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOwo+ICsKPiAr CWlvd3JpdGUzMih2YWwsIChjdHgtPm1taW9fc3RhcnQrcmVnKSk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBoZG1pX2F1ZGlvX3JlYWQ6Cj4gKyAqIHVzZWQgdG8gZ2V0 IHRoZSByZWdpc3RlciB2YWx1ZSByZWFkIGZyb20KPiArICogZGlzcGxheSBjb250cm9sbGVyIEhE TUkgYXVkaW8gcmVnaXN0ZXJzLgo+ICsgKi8KPiArc3RhdGljIGludCBoZG1pX2F1ZGlvX3JlYWQo dWludDMyX3QgcmVnLCB1aW50MzJfdCAqdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRtaV9scGVfYXVk aW9fY3R4ICpjdHg7Cj4gKwo+ICsJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoaGxwZV9wZGV2 KTsKPiArCSp2YWwgPSBpb3JlYWQzMihjdHgtPm1taW9fc3RhcnQrcmVnKTsKPiArCWRldl9kYmco JmhscGVfcGRldi0+ZGV2LCAiJXM6IHJlZ1sweCV4XSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZWcs ICp2YWwpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBoZG1pX2F1ZGlvX3Jt dzoKPiArICogdXNlZCB0byB1cGRhdGUgdGhlIG1hc2tlZCBiaXRzIGluIGRpc3BsYXkgY29udHJv bGxlciBIRE1JCj4gKyAqIGF1ZGlvIHJlZ2lzdGVycy4KPiArICovCj4gK3N0YXRpYyBpbnQgaGRt aV9hdWRpb19ybXcodWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spCj4g K3sKPiArCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKPiArCXVpbnQzMl90IHZhbF90 bXAgPSAwOwo+ICsKPiArCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7Cj4g Kwo+ICsJdmFsX3RtcCA9ICh2YWwgJiBtYXNrKSB8Cj4gKwkJCSgoaW9yZWFkMzIoY3R4LT5tbWlv X3N0YXJ0ICsgcmVnKSkgJiB+bWFzayk7Cj4gKwo+ICsJaW93cml0ZTMyKHZhbF90bXAsIChjdHgt Pm1taW9fc3RhcnQrcmVnKSk7Cj4gKwlkZXZfZGJnKCZobHBlX3BkZXYtPmRldiwgIiVzOiByZWdb MHgleF0gPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVnLCB2YWxfdG1wKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGhkbWlfYXVkaW9fZ2V0X2NhcHM6Cj4gKyAqIHVzZWQg dG8gcmV0dXJuIHRoZSBIRE1JIGF1ZGlvIGNhcGFiaWxpdGllcy4KPiArICogZS5nLiByZXNvbHV0 aW9uLCBmcmFtZSByYXRlLgo+ICsgKi8KPiArc3RhdGljIGludCBoZG1pX2F1ZGlvX2dldF9jYXBz KGVudW0gaGFkX2NhcHNfbGlzdCBnZXRfZWxlbWVudCwKPiArCQkJdm9pZCAqY2FwYWJpbGl0aWVz KQo+ICt7Cj4gKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7Cj4gKwlpbnQgcmV0ID0g MDsKPiArCj4gKwljdHggPSBnZXRfaGRtaV9jb250ZXh0KCk7Cj4gKwo+ICsJZGV2X2RiZygmaGxw ZV9wZGV2LT5kZXYsICIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKPiArCj4gKwlzd2l0Y2ggKGdl dF9lbGVtZW50KSB7Cj4gKwljYXNlIEhBRF9HRVRfRUxEOgo+ICsJCXJldCA9IGhkbWlfZ2V0X2Vs ZChjYXBhYmlsaXRpZXMpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIQURfR0VUX0RJU1BMQVlfUkFU RToKPiArCQkvKiBUb0RvOiBWZXJpZnkgaWYgc2FtcGxpbmcgZnJlcSBsb2dpYyBpcyBjb3JyZWN0 ICovCj4gKwkJbWVtY3B5KGNhcGFiaWxpdGllcywgJihjdHgtPnRtZHNfY2xvY2tfc3BlZWQpLAo+ ICsJCQlzaXplb2YodWludDMyX3QpKTsKCldoeSBtZW1jcHk/ICBCb3RoIHNvdXJjZSBhbmQgZGVz dGluYXRpb24gYXJlIDMyYml0IGludCwgbm8/Cgo+ICsJCWRldl9kYmcoJmhscGVfcGRldi0+ZGV2 LCAiJXM6IHRtZHNfY2xvY2tfc3BlZWQgPSAweCV4XG4iLCBfX2Z1bmNfXywKPiArCQkJCWN0eC0+ dG1kc19jbG9ja19zcGVlZCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBoZG1pX2F1ZGlv X2dldF9yZWdpc3Rlcl9iYXNlCj4gKyAqIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGhkbWkgYmFz ZSBhZGRyZXNzCj4gKyAqLwo+ICtpbnQgaGRtaV9hdWRpb19nZXRfcmVnaXN0ZXJfYmFzZSh1aW50 MzJfdCAqKnJlZ19iYXNlLAo+ICsJCXVpbnQzMl90ICpjb25maWdfb2Zmc2V0KQo+ICt7Cj4gKwlz dHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7Cj4gKwo+ICsJY3R4ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEoaGxwZV9wZGV2KTsKPiArCSpyZWdfYmFzZSA9ICh1aW50MzJfdCAqKShjdHgtPm1t aW9fc3RhcnQpOwo+ICsJKmNvbmZpZ19vZmZzZXQgPSBjdHgtPmhhZF9jb25maWdfb2Zmc2V0Owo+ ICsJZGV2X2RiZygmaGxwZV9wZGV2LT5kZXYsICIlczogcmVnX2Jhc2UgPSAweCVwLCBjZmdfb2Zm ID0gMHgleFxuIiwgX19mdW5jX18sCj4gKwkJCSpyZWdfYmFzZSwgKmNvbmZpZ19vZmZzZXQpOwo+ ICsJcmV0dXJuIDA7CgpXZWxsLCBJIHNlZSBubyByZWFzb24gd2h5IHRoaXMgZnVuY3Rpb24gLyBj YWxsYmFjayBpcyBuZWVkZWQuClRoZSBiYXNlIGFkZHJlc3MgaXMgbmV2ZXIgcmVmZXJyZWQgaW4g b3RoZXIgY29kZXMsIGFuZCB0aGUKY29uZmlnX29mZnNldCBpcyBhbHdheXMgcGFzc2VkIHRvIHJl YWQvd3JpdGUgYWNjZXNzb3JzLCBzbyBpdCBjYW4gYmUKY2FsY3VsYXRlZCB0aGVyZSBkaXJlY3Rs eS4KCkFueSBvdGhlciBtaXNzaW5nIGNhc2VzPwoKCj4gK30KPiArCj4gKy8qKgo+ICsgKiBoZG1p X2F1ZGlvX3NldF9jYXBzOgo+ICsgKiB1c2VkIHRvIHNldCB0aGUgSERNSSBhdWRpbyBjYXBhYmls aXRpZXMuCj4gKyAqIGUuZy4gQXVkaW8gSU5ULgo+ICsgKi8KPiAraW50IGhkbWlfYXVkaW9fc2V0 X2NhcHMoZW51bSBoYWRfY2Fwc19saXN0IHNldF9lbGVtZW50LAo+ICsJCQl2b2lkICpjYXBhYmls dGllcykKPiArewo+ICsJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4Owo+ICsKPiArCWN0 eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7Cj4gKwo+ICsJZGV2X2RiZygmaGxw ZV9wZGV2LT5kZXYsICIlczogY2FwX2lkID0gMHgleFxuIiwgX19mdW5jX18sIHNldF9lbGVtZW50 KTsKPiArCj4gKwlzd2l0Y2ggKHNldF9lbGVtZW50KSB7Cj4gKwljYXNlIEhBRF9TRVRfRU5BQkxF X0FVRElPX0lOVDoKPiArCQl7Cj4gKwkJCXVpbnQzMl90IHN0YXR1c19yZWc7Cj4gKwo+ICsJCQlo ZG1pX2F1ZGlvX3JlYWQoQVVEX0hETUlfU1RBVFVTX3YyICsKPiArCQkJCWN0eC0+aGFkX2NvbmZp Z19vZmZzZXQsICZzdGF0dXNfcmVnKTsKPiArCQkJc3RhdHVzX3JlZyB8PQo+ICsJCQkJSERNSV9B VURJT19CVUZGRVJfRE9ORSB8IEhETUlfQVVESU9fVU5ERVJSVU47Cj4gKwkJCWhkbWlfYXVkaW9f d3JpdGUoQVVEX0hETUlfU1RBVFVTX3YyICsKPiArCQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQs IHN0YXR1c19yZWcpOwo+ICsJCQloZG1pX2F1ZGlvX3JlYWQoQVVEX0hETUlfU1RBVFVTX3YyICsK PiArCQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQsICZzdGF0dXNfcmVnKTsKPiArCj4gKwkJfQo+ ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCAgaGRtaV9hdWRpb19yZWdpc3RlcnNfb3BzIGhk bWlfYXVkaW9fcmVnX29wcyA9IHsKPiArCS5oZG1pX2F1ZGlvX2dldF9yZWdpc3Rlcl9iYXNlID0g aGRtaV9hdWRpb19nZXRfcmVnaXN0ZXJfYmFzZSwKPiArCS5oZG1pX2F1ZGlvX3JlYWRfcmVnaXN0 ZXIgPSBoZG1pX2F1ZGlvX3JlYWQsCj4gKwkuaGRtaV9hdWRpb193cml0ZV9yZWdpc3RlciA9IGhk bWlfYXVkaW9fd3JpdGUsCj4gKwkuaGRtaV9hdWRpb19yZWFkX21vZGlmeSA9IGhkbWlfYXVkaW9f cm13LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBoZG1pX2F1ZGlvX3F1ZXJ5X3NldF9vcHMg aGRtaV9hdWRpb19nZXRfc2V0X29wcyA9IHsKPiArCS5oZG1pX2F1ZGlvX2dldF9jYXBzID0gaGRt aV9hdWRpb19nZXRfY2FwcywKPiArCS5oZG1pX2F1ZGlvX3NldF9jYXBzID0gaGRtaV9hdWRpb19z ZXRfY2FwcywKPiArfTsKPiArCj4gK2ludCBtaWRfaGRtaV9hdWRpb19zZXR1cCgKPiArCQloYWRf ZXZlbnRfY2FsbF9iYWNrIGF1ZGlvX2NhbGxiYWNrcywKPiArCQlzdHJ1Y3QgaGRtaV9hdWRpb19y ZWdpc3RlcnNfb3BzICpyZWdfb3BzLAo+ICsJCXN0cnVjdCBoZG1pX2F1ZGlvX3F1ZXJ5X3NldF9v cHMgKnF1ZXJ5X29wcykKPiArewo+ICsJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4Owo+ ICsKPiArCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7Cj4gKwo+ICsJZGV2 X2RiZygmaGxwZV9wZGV2LT5kZXYsICIlczogY2FsbGVkXG4iLCAgX19mdW5jX18pOwo+ICsKPiAr CXJlZ19vcHMtPmhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UgPQo+ICsJCShoZG1pX2F1ZGlv X3JlZ19vcHMuaGRtaV9hdWRpb19nZXRfcmVnaXN0ZXJfYmFzZSk7Cj4gKwlyZWdfb3BzLT5oZG1p X2F1ZGlvX3JlYWRfcmVnaXN0ZXIgPQo+ICsJCShoZG1pX2F1ZGlvX3JlZ19vcHMuaGRtaV9hdWRp b19yZWFkX3JlZ2lzdGVyKTsKPiArCXJlZ19vcHMtPmhkbWlfYXVkaW9fd3JpdGVfcmVnaXN0ZXIg PQo+ICsJCShoZG1pX2F1ZGlvX3JlZ19vcHMuaGRtaV9hdWRpb193cml0ZV9yZWdpc3Rlcik7Cj4g KwlyZWdfb3BzLT5oZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5ID0KPiArCQkoaGRtaV9hdWRpb19yZWdf b3BzLmhkbWlfYXVkaW9fcmVhZF9tb2RpZnkpOwo+ICsJcXVlcnlfb3BzLT5oZG1pX2F1ZGlvX2dl dF9jYXBzID0KPiArCQloZG1pX2F1ZGlvX2dldF9zZXRfb3BzLmhkbWlfYXVkaW9fZ2V0X2NhcHM7 Cj4gKwlxdWVyeV9vcHMtPmhkbWlfYXVkaW9fc2V0X2NhcHMgPQo+ICsJCWhkbWlfYXVkaW9fZ2V0 X3NldF9vcHMuaGRtaV9hdWRpb19zZXRfY2FwczsKPiArCj4gKwljdHgtPmhhZF9ldmVudF9jYWxs YmFja3MgPSBhdWRpb19jYWxsYmFja3M7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3Zv aWQgX2hhZF93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCgpNaXNzaW5nIHN0YXRpYy4KCgp0 aGFua3MsCgpUYWthc2hpCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=