From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v6 2/4] drm/i915: implement sync_audio_rate callback Date: Wed, 02 Sep 2015 10:52:24 +0300 Message-ID: <87613t45s7.fsf@intel.com> References: <1441174301-144177-1-git-send-email-libin.yang@intel.com> <1441174301-144177-2-git-send-email-libin.yang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 4BD166E82D for ; Wed, 2 Sep 2015 00:49:19 -0700 (PDT) In-Reply-To: <1441174301-144177-2-git-send-email-libin.yang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: libin.yang@intel.com, alsa-devel@alsa-project.org, tiwai@suse.de, intel-gfx@lists.freedesktop.org, daniel.vetter@ffwll.ch, ville.syrjala@linux.intel.com List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAwMiBTZXAgMjAxNSwgbGliaW4ueWFuZ0BpbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTog TGliaW4gWWFuZyA8bGliaW4ueWFuZ0BpbnRlbC5jb20+Cj4KPiBIRE1JIGF1ZGlvIG1heSBub3Qg d29yayBhdCBzb21lIGZyZXF1ZW5jaWVzCj4gd2l0aCB0aGUgSFcgcHJvdmlkZWQgTi9DVFMuCj4K PiBUaGlzIHBhdGNoIHNldHMgdGhlIHByb3BlciBOIHZhbHVlIGZvciB0aGUKPiBnaXZlbiBhdWRp byBzYW1wbGUgcmF0ZSBhdCB0aGUgaW1wYWN0ZWQgZnJlcXVlbmNpZXMuCj4gQXQgb3RoZXIgZnJl cXVlbmNpZXMsIGl0IHdpbGwgdXNlIHRoZSBOL0NUUyB2YWx1ZQo+IHdoaWNoIEhXIHByb3ZpZGVz Lgo+Cj4gU2lnbmVkLW9mZi1ieTogTGliaW4gWWFuZyA8bGliaW4ueWFuZ0BpbnRlbC5jb20+CgpP a2F5LCBzbyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcXVlc3Rpb25zIGFuZCBjb21tZW50cyB0aGlz IHBhdGNoIHN0aWxsCnJhaXNlcy4gUGxlYXNlIGZpbmQgdGhlbSBpbmxpbmUuCgoqSG93ZXZlcios IHdlIHNob3VsZCByZWFsbHkgZ2V0IHRoaXMgZmluYWxseSBtb3ZpbmcgZm9yd2FyZCwgYW5kIEkg ZG9uJ3QKdGhpbmsgdGhlIGlzc3VlcyBhcmUgb3IgbmVlZCB0byBiZSBibG9ja2Vycywgc28gdGhp cyBpcwoKUmV2aWV3ZWQtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+CgpJ IHRoaW5rIHdlIChhcyBpbiBpOTE1IGZvbGtzKSBjYW4gY2xlYW4gdGhlIHJlc3Qgb2YgdGhlIGJp a2VzaGVkZGluZyB1cCwKYW5kIEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIGJlIE5BS2luZyB0aGlz IGFkIGluZmluaXR1bSB0byB0ZWFjaCB5b3UgdG8KYmVjb21lIGFuIGk5MTUgZGV2ZWxvcGVyLi4u IHVubGVzcyB5b3Ugd2FudCB0byBiZSBvbmUuIDspCgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RtYS5jICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICB8ICAgNSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdWRpby5jIHwg MTM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFu Z2VkLCAxNDQgaW5zZXJ0aW9ucygrKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXgg MDk3ZDRiYS4uOGZmYjVkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RtYS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBAIC04NTgs NiArODU4LDcgQEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dW5zaWduZWQgbG9uZyBmbGFncykKPiAgCW11dGV4X2luaXQoJmRldl9wcml2LT5zYl9sb2NrKTsK PiAgCW11dGV4X2luaXQoJmRldl9wcml2LT5tb2Rlc2V0X3Jlc3RvcmVfbG9jayk7Cj4gIAltdXRl eF9pbml0KCZkZXZfcHJpdi0+Y3NyX2xvY2spOwo+ICsJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmF2 X211dGV4KTsKPiAgCj4gIAlpbnRlbF9wbV9zZXR1cChkZXYpOwo+ICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPiBpbmRleCAwNWZmZDVhLi4yYzZiNzZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gQEAgLTE4ODIsNiArMTg4MiwxMSBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7 Cj4gIAo+ICAJLyogaGRhL2k5MTUgYXVkaW8gY29tcG9uZW50ICovCj4gIAlib29sIGF1ZGlvX2Nv bXBvbmVudF9yZWdpc3RlcmVkOwo+ICsJLyoqCj4gKwkgKiBhdl9tdXRleCAtIG11dGV4IGZvciBh dWRpby92aWRlbyBzeW5jCj4gKwkgKgo+ICsJICovCj4gKwlzdHJ1Y3QgbXV0ZXggYXZfbXV0ZXg7 Cj4gIAo+ICAJdWludDMyX3QgaHdfY29udGV4dF9zaXplOwo+ICAJc3RydWN0IGxpc3RfaGVhZCBj b250ZXh0X2xpc3Q7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F1 ZGlvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdWRpby5jCj4gaW5kZXggZGMzMmNm NC4uYTAyMTcyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdWRp by5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYwo+IEBAIC02OCw2 ICs2OCwzMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiAgCXsgMTQ4NTAwLCBBVURfQ09ORklH X1BJWEVMX0NMT0NLX0hETUlfMTQ4NTAwIH0sCj4gIH07Cj4gIAo+ICsvKiBIRE1JIE4vQ1RTIHRh YmxlICovCj4gKyNkZWZpbmUgVE1EU18yOTdNIDI5NzAwMAo+ICsjZGVmaW5lIFRNRFNfMjk2TSBE SVZfUk9VTkRfVVAoMjk3MDAwICogMTAwMCwgMTAwMSkKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7 Cj4gKwlpbnQgc2FtcGxlX3JhdGU7Cj4gKwlpbnQgY2xvY2s7Cj4gKwlpbnQgbjsKPiArCWludCBj dHM7Cj4gK30gYXVkX25jdHNbXSA9IHsKPiArCXsgNDQxMDAsIFRNRFNfMjk2TSwgNDQ1OSwgMjM0 Mzc1IH0sCj4gKwl7IDQ0MTAwLCBUTURTXzI5N00sIDQ3MDQsIDI0NzUwMCB9LAo+ICsJeyA0ODAw MCwgVE1EU18yOTZNLCA1ODI0LCAyODEyNTAgfSwKPiArCXsgNDgwMDAsIFRNRFNfMjk3TSwgNTEy MCwgMjQ3NTAwIH0sCj4gKwl7IDMyMDAwLCBUTURTXzI5Nk0sIDU4MjQsIDQyMTg3NSB9LAo+ICsJ eyAzMjAwMCwgVE1EU18yOTdNLCAzMDcyLCAyMjI3NTAgfSwKPiArCXsgODgyMDAsIFRNRFNfMjk2 TSwgODkxOCwgMjM0Mzc1IH0sCj4gKwl7IDg4MjAwLCBUTURTXzI5N00sIDk0MDgsIDI0NzUwMCB9 LAo+ICsJeyA5NjAwMCwgVE1EU18yOTZNLCAxMTY0OCwgMjgxMjUwIH0sCj4gKwl7IDk2MDAwLCBU TURTXzI5N00sIDEwMjQwLCAyNDc1MDAgfSwKPiArCXsgMTc2NDAwLCBUTURTXzI5Nk0sIDE3ODM2 LCAyMzQzNzUgfSwKPiArCXsgMTc2NDAwLCBUTURTXzI5N00sIDE4ODE2LCAyNDc1MDAgfSwKPiAr CXsgMTkyMDAwLCBUTURTXzI5Nk0sIDIzMjk2LCAyODEyNTAgfSwKPiArCXsgMTkyMDAwLCBUTURT XzI5N00sIDIwNDgwLCAyNDc1MDAgfSwKPiArfTsKCk9rYXksIEkgYWRtaXQsIEkgZGlkIG5vdCBs b29rIHRoZXNlIHVwIGluIHRoZSBzcGVjLiAqYmx1c2gqLiBJJ20gc3VyZQpWaWxsZSBoYXMvd2ls bC4gOykKCj4gKwo+ICAvKiBnZXQgQVVEX0NPTkZJR19QSVhFTF9DTE9DS19IRE1JXyogdmFsdWUg Zm9yIG1vZGUgKi8KPiAgc3RhdGljIHUzMiBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAgewo+IEBAIC05MCw2ICsxMTUsMzEgQEAg c3RhdGljIHUzMiBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKPiAgCXJldHVybiBoZG1pX2F1ZGlvX2Nsb2NrW2ldLmNvbmZpZzsKPiAg fQo+ICAKPiArc3RhdGljIGludCBhdWRpb19jb25maWdfZ2V0X24oY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsIGludCByYXRlKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdWRfbmN0cyk7IGkrKykgewo+ICsJCWlmICgocmF0ZSA9 PSBhdWRfbmN0c1tpXS5zYW1wbGVfcmF0ZSkgJiYKPiArCQkJKG1vZGUtPmNsb2NrID09IGF1ZF9u Y3RzW2ldLmNsb2NrKSkgewo+ICsJCQlyZXR1cm4gYXVkX25jdHNbaV0ubjsKPiArCQl9Cj4gKwl9 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyogY2hlY2sgd2hldGhlciBOL0NUUy9NIG5lZWQg YmUgc2V0IG1hbnVhbGx5ICovCj4gK3N0YXRpYyBib29sIGF1ZGlvX3JhdGVfbmVlZF9wcm9nKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQo+ICt7Cj4gKwlpZiAoKChtb2RlLT5jbG9jayA9PSBUTURTXzI5N00pIHx8Cj4gKwkJICht b2RlLT5jbG9jayA9PSBUTURTXzI5Nk0pKSAmJgo+ICsJCWludGVsX3BpcGVfaGFzX3R5cGUoY3J0 YywgSU5URUxfT1VUUFVUX0hETUkpKQo+ICsJCXJldHVybiB0cnVlOwo+ICsJZWxzZQo+ICsJCXJl dHVybiBmYWxzZTsKPiArfQo+ICsKPiAgc3RhdGljIGJvb2wgaW50ZWxfZWxkX3VwdG9kYXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJCSAgICAgICBpbnQgcmVnX2VsZHYs IHVpbnQzMl90IGJpdHNfZWxkdiwKPiAgCQkJICAgICAgIGludCByZWdfZWxkYSwgdWludDMyX3Qg Yml0c19lbGRhLAo+IEBAIC0xODQsNiArMjM0LDggQEAgc3RhdGljIHZvaWQgaHN3X2F1ZGlvX2Nv ZGVjX2Rpc2FibGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIAo+ICAJRFJNX0RF QlVHX0tNUygiRGlzYWJsZSBhdWRpbyBjb2RlYyBvbiBwaXBlICVjXG4iLCBwaXBlX25hbWUocGlw ZSkpOwo+ICAKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5hdl9tdXRleCk7Cj4gKwoKQmlrZXNo ZWQuIFdlIHNob3VsZCB0aGluayBhYm91dCBtb3ZpbmcgdGhlIGxvY2tpbmcgdG8KaW50ZWxfYXVk aW9fY29kZWNfZW5hYmxlIGFuZCBpbnRlbF9hdWRpb19jb2RlY19kaXNhYmxlIGZvcgpjb25zaXN0 ZW5jeS4gV2UnbGwgYmUgYWRkaW5nIG5ldyBwbGF0Zm9ybSBob29rcyBldmVudHVhbGx5IGFueXdh eSwgbm8KbmVlZCB0byBkdXBsaWNhdGUgdGhlIGxvY2tpbmcgZXZlcnl3aGVyZS4KCj4gIAkvKiBE aXNhYmxlIHRpbWVzdGFtcHMgKi8KPiAgCXRtcCA9IEk5MTVfUkVBRChIU1dfQVVEX0NGRyhwaXBl KSk7Cj4gIAl0bXAgJj0gfkFVRF9DT05GSUdfTl9WQUxVRV9JTkRFWDsKPiBAQCAtMTk5LDYgKzI1 MSw4IEBAIHN0YXRpYyB2b2lkIGhzd19hdWRpb19jb2RlY19kaXNhYmxlKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyKQo+ICAJdG1wICY9IH5BVURJT19FTERfVkFMSUQocGlwZSk7Cj4gIAl0 bXAgJj0gfkFVRElPX09VVFBVVF9FTkFCTEUocGlwZSk7Cj4gIAlJOTE1X1dSSVRFKEhTV19BVURf UElOX0VMRF9DUF9WTEQsIHRtcCk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YXZf bXV0ZXgpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBoc3dfYXVkaW9fY29kZWNfZW5hYmxlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gQEAgLTIxNSw2ICsyNjksOCBAQCBzdGF0 aWMgdm9pZCBoc3dfYXVkaW9fY29kZWNfZW5hYmxlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gIAlEUk1fREVCVUdfS01TKCJFbmFibGUgYXVkaW8gY29kZWMgb24gcGlwZSAlYywg JXUgYnl0ZXMgRUxEXG4iLAo+ICAJCSAgICAgIHBpcGVfbmFtZShwaXBlKSwgZHJtX2VsZF9zaXpl KGVsZCkpOwo+ICAKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5hdl9tdXRleCk7Cj4gKwo+ICAJ LyogRW5hYmxlIGF1ZGlvIHByZXNlbmNlIGRldGVjdCwgaW52YWxpZGF0ZSBFTEQgKi8KPiAgCXRt cCA9IEk5MTVfUkVBRChIU1dfQVVEX1BJTl9FTERfQ1BfVkxEKTsKPiAgCXRtcCB8PSBBVURJT19P VVRQVVRfRU5BQkxFKHBpcGUpOwo+IEBAIC0yNTMsNiArMzA5LDggQEAgc3RhdGljIHZvaWQgaHN3 X2F1ZGlvX2NvZGVjX2VuYWJsZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJ ZWxzZQo+ICAJCXRtcCB8PSBhdWRpb19jb25maWdfaGRtaV9waXhlbF9jbG9jayhtb2RlKTsKPiAg CUk5MTVfV1JJVEUoSFNXX0FVRF9DRkcocGlwZSksIHRtcCk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+YXZfbXV0ZXgpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbGtfYXVkaW9f Y29kZWNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKPiBAQCAtNTE0LDEy ICs1NzIsOTIgQEAgc3RhdGljIGludCBpOTE1X2F1ZGlvX2NvbXBvbmVudF9nZXRfY2RjbGtfZnJl cShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICtzdGF0aWMg aW50IGk5MTVfYXVkaW9fY29tcG9uZW50X3N5bmNfYXVkaW9fcmF0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJCQkJCWludCBwb3J0LCBpbnQgcmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2X3RvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2ID0gZGV2X3ByaXYtPmRldjsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpp bnRlbF9lbmNvZGVyOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3Bv cnQ7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlOwo+ICsJZW51bSBwaXBlIHBpcGUgPSAtMTsKCk5pdHBpY2suIEluaXRpYWxpemUg dG8gSU5WQUxJRF9QSVBFLgoKPiArCXUzMiB0bXA7Cj4gKwlpbnQgbl9sb3csIG5fdXAsIG47Cj4g Kwo+ICsJLyogSFNXLCBCRFcgU0tMIG5lZWQgdGhpcyBmaXggKi8KPiArCWlmICghSVNfU0tZTEFL RShkZXZfcHJpdikgJiYKPiArCQkhSVNfQlJPQURXRUxMKGRldl9wcml2KSAmJgo+ICsJCSFJU19I QVNXRUxMKGRldl9wcml2KSkKPiArCQlyZXR1cm4gMDsKCk5pdHBpY2suIFdlIHNob3VsZCBlbGFi b3JhdGUgdGhhdCBhIGJpdCBtb3JlLiBJcyBpdCBiYXNpY2FsbHkgdGhhdCBvbmx5CnRoZSBhYm92 ZSBwbGF0Zm9ybXMgc3VwcG9ydCBIRE1JIG1vZGUgYW5kIGF1ZGlvIHNhbXBsZSByYXRlIGNvbWJp bmF0aW9ucwp0aGF0IHRoZSBhdXRvbWF0aWMgbW9kZSBpbiBoYXJkd2FyZSBjYW4ndCBzdXBwb3J0 PyBJbiBvdGhlciB3b3Jkcywgd291bGQKYXVkaW9fcmF0ZV9uZWVkX3Byb2coKSBhbHdheXMgcmV0 dXJuIGZhbHNlIG9uIG90aGVyIHBsYXRmb3JtcyB0aGFuCmhzdy9iZHcvc2tsPyBBbmQgaWYgc28s IHdoeSBkbyB3ZSBoYXZlIHRoaXMgY2hlY2s/IFBlcmhhcHMgd2Ugc2hvdWxkCnRha2UgY2FyZSB0 byBtYWtlIGF1ZGlvX3JhdGVfbmVlZF9wcm9nKCkgZG8gdGhlIHJpZ2h0IHRoaW5nLCBhbmQgZG8g dGhhdAphcyB0aGUgZmlyc3QgdGhpbmcgaGVyZS4KCj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2X3By aXYtPmF2X211dGV4KTsKPiArCS8qIDEuIGdldCB0aGUgcGlwZSAqLwo+ICsJZm9yX2VhY2hfaW50 ZWxfZW5jb2Rlcihkcm1fZGV2LCBpbnRlbF9lbmNvZGVyKSB7Cj4gKwkJaWYgKGludGVsX2VuY29k ZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0hETUkpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWludGVs X2RpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KCZpbnRlbF9lbmNvZGVyLT5iYXNlKTsKPiArCQlp ZiAocG9ydCA9PSBpbnRlbF9kaWdfcG9ydC0+cG9ydCkgewo+ICsJCQljcnRjID0gdG9faW50ZWxf Y3J0YyhpbnRlbF9lbmNvZGVyLT5iYXNlLmNydGMpOwo+ICsJCQlpZiAoIWNydGMpIHsKPiArCQkJ CURSTV9ERUJVR19LTVMoIiVzOiBjcnRjIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKCkRSTV9ERUJV R19LTVMgaW5jbHVkZXMgX19mdW5jX18gYWxyZWFkeS4KCj4gKwkJCQljb250aW51ZTsKPiArCQkJ fQo+ICsJCQlwaXBlID0gY3J0Yy0+cGlwZTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWlmIChwaXBlID09IElOVkFMSURfUElQRSkgewo+ICsJCURSTV9ERUJVR19LTVMoIm5vIHBp cGUgZm9yIHRoZSBwb3J0ICVjXG4iLCBwb3J0X25hbWUocG9ydCkpOwo+ICsJCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmF2X211dGV4KTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKCk5pdHBpY2suIEkg YW0gbm90IGZvbmQgb2YgZWFybHkgcmV0dXJucyB3aGVuIGNsZWFudXAgbGlrZSBtdXRleCB1bmxv Y2sKaXMgcmVxdWlyZWQuIFRoZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBnb3RvIGxhYmVscyBhdCB0 aGUgZW5kIHdpdGgKY2xlYW51cC4gKE9UT0ggaWYgd2UgbW92ZSBsb2NraW5nIHRvIGhpZ2hlciBs ZXZlbCB0aGlzIHByb2JsZW0gZ29lcwphd2F5LikKCj4gKwl9Cj4gKwlEUk1fREVCVUdfS01TKCJw aXBlICVjIGNvbm5lY3RzIHBvcnQgJWNcbiIsCj4gKwkJCQkgIHBpcGVfbmFtZShwaXBlKSwgcG9y dF9uYW1lKHBvcnQpKTsKPiArCW1vZGUgPSAmY3J0Yy0+Y29uZmlnLT5iYXNlLmFkanVzdGVkX21v ZGU7Cj4gKwo+ICsJLyogMi4gY2hlY2sgd2hldGhlciB0byBzZXQgdGhlIE4vQ1RTL00gbWFudWFs bHkgb3Igbm90ICovCj4gKwlpZiAoIWF1ZGlvX3JhdGVfbmVlZF9wcm9nKGNydGMsIG1vZGUpKSB7 Cj4gKwkJdG1wID0gSTkxNV9SRUFEKEhTV19BVURfQ0ZHKHBpcGUpKTsKPiArCQl0bXAgJj0gfkFV RF9DT05GSUdfTl9QUk9HX0VOQUJMRTsKPiArCQlJOTE1X1dSSVRFKEhTV19BVURfQ0ZHKHBpcGUp LCB0bXApOwo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmF2X211dGV4KTsKPiArCQlyZXR1 cm4gMDsKCk5pdHBpY2suIFNhbWUgaGVyZSwgeW91IGNvdWxkIGhhdmUgYW4gYXV0bzogbGFiZWwg YXQgdGhlIGVuZCB3aXRoIHRoZQphdXRvIHByb2dyYW1taW5nLi4uCgo+ICsJfQo+ICsKPiArCW4g PSBhdWRpb19jb25maWdfZ2V0X24obW9kZSwgcmF0ZSk7Cj4gKwlpZiAobiA9PSAwKSB7Cj4gKwkJ RFJNX0RFQlVHX0tNUygiVXNpbmcgYXV0b21hdGljIG1vZGUgZm9yIE4gdmFsdWUgb24gcG9ydCAl Y1xuIiwKPiArCQkJCQkgIHBvcnRfbmFtZShwb3J0KSk7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKEhT V19BVURfQ0ZHKHBpcGUpKTsKPiArCQl0bXAgJj0gfkFVRF9DT05GSUdfTl9QUk9HX0VOQUJMRTsK PiArCQlJOTE1X1dSSVRFKEhTV19BVURfQ0ZHKHBpcGUpLCB0bXApOwo+ICsJCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmF2X211dGV4KTsKPiArCQlyZXR1cm4gMDsKCi4uLmVzcGVjaWFsbHkgYmVj YXVzZSB0aGlzIGJpdCBpcyBkdXBsaWNhdGVkIGZvciBubyBnb29kIHJlYXNvbi4KCkZhbGxiYWNr IHRvIGF1dG8gbW9kZSBpZiB0aGUgbW9kZSBpc24ndCBpbiB0aGUgbGlzdCBpcywgSSB0aGluaywg YSBnb29kCnRoaW5nLiBNYXliZSBpdCB3b3VsZCBkZXNlcnZlIGEgRFJNX0VSUk9SLCBiZWNhdXNl IGNsZWFybHkgdGhhdApzaG91bGRuJ3QgaGFwcGVuLgoKQnV0IGl0J3MgYWN0dWFsbHkgdGhlICFh dWRpb19yYXRlX25lZWRfcHJvZyBjYXNlIHRoYXQgbWFrZXMgbWUgd29uZGVyLiBJCnRoaW5rIHdl J3ZlIGNvbmZpcm1lZCB3aXRoIHRoZSBzaWxpY29uIGZvbGtzIHRoYXQgd2UgY2FuIGNoYW5nZSBO IG9uIHRoZQpmbHkuLi4gYnV0IEknbSBhY3R1YWxseSBub3Qgc3VyZSBpZiB3ZSd2ZSBjb25maXJt ZWQgdGhhdCB3ZSBjYW4gc3dpdGNoCmJldHdlZW4gYXV0b21hdGljIGFuZCBtYW51YWwgbW9kZXMg b24gdGhlIGZseS4gSSB0aGluayBJJ3ZlIHNhaWQgaXQKYmVmb3JlLCBidXQgSSB0aGluayBJJ2Qg cHJlZmVyIGl0IGlmIHdlIGFsd2F5cyB1c2VkIHRoZSBtYW51YWwgbW9kZQphbnl3YXkgdG8gcmVk dWNlIHRoZSBjb21wbGV4aXR5IGFuZCBoYXZlIG9ubHkgb25lIGNvZGUgcGF0aCB0byBkZWJ1ZywK YW5kIHRoYXQgd291bGQgYWxzbyBjb3ZlciB0aGUgc29tZXdoYXQgb2YgYSBjb3JuZXIgY2FzZSAo YnV0IHN0aWxsIHJlYWwKY2FzZSkgb2Ygc3dpdGNoaW5nIGJldHdlZW4gYXV0b21hdGljL21hbnVh bCBtb2RlcyBvbiB0aGUgZmx5LiBBbmQgb2YKY291cnNlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIHdo YXQgSSBzYWlkIGFib3V0IHRoZSBwbGF0Zm9ybSBzdXBwb3J0IGNoZWNrCmFib3ZlLCBzbyBuZWVk cyB0aG91Z2h0LgoKPiArCX0KPiArCW5fbG93ID0gbiAmIDB4ZmZmOwo+ICsJbl91cCA9IChuID4+ IDEyKSAmIDB4ZmY7Cj4gKwo+ICsJLyogNC4gc2V0IHRoZSBOL0NUUy9NICovCj4gKwl0bXAgPSBJ OTE1X1JFQUQoSFNXX0FVRF9DRkcocGlwZSkpOwo+ICsJdG1wICY9IH4oQVVEX0NPTkZJR19VUFBF Ul9OX01BU0sgfCBBVURfQ09ORklHX0xPV0VSX05fTUFTSyk7Cj4gKwl0bXAgfD0gKChuX3VwIDw8 IEFVRF9DT05GSUdfVVBQRVJfTl9TSElGVCkgfAo+ICsJCQkobl9sb3cgPDwgQVVEX0NPTkZJR19M T1dFUl9OX1NISUZUKSB8Cj4gKwkJCUFVRF9DT05GSUdfTl9QUk9HX0VOQUJMRSk7Cj4gKwlJOTE1 X1dSSVRFKEhTV19BVURfQ0ZHKHBpcGUpLCB0bXApOwo+ICsKPiArCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPmF2X211dGV4KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICBzdGF0aWMgY29uc3Qg c3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50X29wcyBpOTE1X2F1ZGlvX2NvbXBvbmVudF9vcHMg PSB7Cj4gIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gIAkuZ2V0X3Bvd2VyCT0gaTkxNV9hdWRp b19jb21wb25lbnRfZ2V0X3Bvd2VyLAo+ICAJLnB1dF9wb3dlcgk9IGk5MTVfYXVkaW9fY29tcG9u ZW50X3B1dF9wb3dlciwKPiAgCS5jb2RlY193YWtlX292ZXJyaWRlID0gaTkxNV9hdWRpb19jb21w b25lbnRfY29kZWNfd2FrZV9vdmVycmlkZSwKPiAgCS5nZXRfY2RjbGtfZnJlcQk9IGk5MTVfYXVk aW9fY29tcG9uZW50X2dldF9jZGNsa19mcmVxLAo+ICsJLnN5bmNfYXVkaW9fcmF0ZSA9IGk5MTVf YXVkaW9fY29tcG9uZW50X3N5bmNfYXVkaW9fcmF0ZSwKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbnQg aTkxNV9hdWRpb19jb21wb25lbnRfYmluZChzdHJ1Y3QgZGV2aWNlICppOTE1X2RldiwKPiAtLSAK PiAxLjkuMQo+CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xvZ3kg Q2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==