From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v4 1/6] drm: Add SCDC helpers Date: Thu, 23 Feb 2017 13:41:42 +0200 Message-ID: <20170223114142.GS31595@intel.com> References: <1487769511-17359-1-git-send-email-shashank.sharma@intel.com> <1487769511-17359-2-git-send-email-shashank.sharma@intel.com> <20170222170937.GK31595@intel.com> <4d579bc7-3679-7416-6b03-d53ad93c25f6@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <4d579bc7-3679-7416-6b03-d53ad93c25f6@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Sharma, Shashank" Cc: jose.abreu@synopsys.com, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, treding@nvidia.com List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMjMsIDIwMTcgYXQgMDg6NTE6MDNBTSArMDUzMCwgU2hhcm1hLCBTaGFzaGFu ayB3cm90ZToKPiBUaGFua3MgZm9yIHRoZSByZXZpZXcgVmlsbGUsIG15IGNvbW1lbnRzIGlubGlu ZS4KPiAKPiBSZWdhcmRzCj4gCj4gU2hhc2hhbmsKPiAKPiAKPiBPbiAyLzIyLzIwMTcgMTA6Mzkg UE0sIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+IE9uIFdlZCwgRmViIDIyLCAyMDE3IGF0IDA2 OjQ4OjI2UE0gKzA1MzAsIFNoYXNoYW5rIFNoYXJtYSB3cm90ZToKPiA+PiBGcm9tOiBUaGllcnJ5 IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+ID4+Cj4gPj4gU0NEQyBpcyBhIG1lY2hhbmlz bSBkZWZpbmVkIGluIHRoZSBIRE1JIDIuMCBzcGVjaWZpY2F0aW9uIHRoYXQgYWxsb3dzCj4gPj4g dGhlIHNvdXJjZSBhbmQgc2luayBkZXZpY2VzIHRvIGNvbW11bmljYXRlLgo+ID4+Cj4gPj4gVGhp cyBjb21taXQgaW50cm9kdWNlcyBoZWxwZXJzIHRvIGFjY2VzcyB0aGUgU0NEQyBhbmQgcHJvdmlk ZXMgdGhlCj4gPj4gc3ltYm9saWMgbmFtZXMgZm9yIHRoZSB2YXJpb3VzIHJlZ2lzdGVycyBkZWZp bmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uLgo+ID4+Cj4gPj4gVjI6IFJlYmFzZS4KPiA+PiBWMzog QWRkZWQgUi1CIGZyb20gSm9zZS4KPiA+PiBWNDogUmViYXNlCj4gPj4KPiA+PiBTaWduZWQtb2Zm LWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+ID4+IFNpZ25lZC1vZmYt Ynk6IFNoYXNoYW5rIFNoYXJtYSA8c2hhc2hhbmsuc2hhcm1hQGludGVsLmNvbT4KPiA+PiBSZXZp ZXdlZC1ieTogSm9zZSBBYnJldSA8am9hYnJldUBzeW5vcHN5cy5jb20+Cj4gPj4gLS0tCj4gPj4g ICBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0IHwgIDEyICsrKysKPiA+PiAg IGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDMgKy0KPiA+PiAgIGRy aXZlcnMvZ3B1L2RybS9kcm1fc2NkY19oZWxwZXIuYyAgICAgfCAxMTEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ID4+ICAgaW5jbHVkZS9kcm0vZHJtX3NjZGNfaGVscGVyLmggICAgICAg ICB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4gICA0IGZpbGVz IGNoYW5nZWQsIDI1NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gPj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9zY2RjX2hlbHBlci5jCj4gPj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX3NjZGNfaGVscGVyLmgKPiA+Pgo+ID4+IGRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0IGIvRG9jdW1l bnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+ID4+IGluZGV4IDAzMDQwYWEuLjc1OTI3 NTYgMTAwNjQ0Cj4gPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJz dAo+ID4+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiA+PiBA QCAtMjE3LDYgKzIxNywxOCBAQCBFRElEIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gPj4g ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiA+PiAgICAgIDpl eHBvcnQ6Cj4gPj4gICAKPiA+PiArU0NEQyBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQo+ID4+ ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPj4gKwo+ID4+ICsuLiBrZXJuZWwt ZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9zY2RjX2hlbHBlci5jCj4gPj4gKyAgIDpkb2M6IHNj ZGMgaGVscGVycwo+ID4+ICsKPiA+PiArLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvZHJtL2RybV9z Y2RjX2hlbHBlci5oCj4gPj4gKyAgIDppbnRlcm5hbDoKPiA+PiArCj4gPj4gKy4uIGtlcm5lbC1k b2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX3NjZGNfaGVscGVyLmMKPiA+PiArICAgOmV4cG9ydDoK PiA+PiArCj4gPj4gICBSZWN0YW5nbGUgVXRpbGl0aWVzIFJlZmVyZW5jZQo+ID4+ICAgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiA+PiAgIAo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+PiBpbmRleCA5 MmRlMzk5Li5hZDkxY2Q5IDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4+IEBAIC0zMSw3ICszMSw4 IEBAIGRybS0kKENPTkZJR19ERUJVR19GUykgKz0gZHJtX2RlYnVnZnMubyBkcm1fZGVidWdmc19j cmMubwo+ID4+ICAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBf aGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKPiA+PiAgIAkJZHJtX3BsYW5lX2hlbHBlci5v IGRybV9kcF9tc3RfdG9wb2xvZ3kubyBkcm1fYXRvbWljX2hlbHBlci5vIFwKPiA+PiAgIAkJZHJt X2ttc19oZWxwZXJfY29tbW9uLm8gZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIubyBcCj4gPj4gLQkJ ZHJtX3NpbXBsZV9rbXNfaGVscGVyLm8gZHJtX21vZGVzZXRfaGVscGVyLm8KPiA+PiArCQlkcm1f c2ltcGxlX2ttc19oZWxwZXIubyBkcm1fbW9kZXNldF9oZWxwZXIubyBcCj4gPj4gKwkJZHJtX3Nj ZGNfaGVscGVyLm8KPiA+PiAgIAo+ID4+ICAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0xP QURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gPj4gICBkcm1fa21zX2hlbHBl ci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8KPiA+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zY2RjX2hlbHBlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9zY2RjX2hlbHBlci5jCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+PiBp bmRleCAwMDAwMDAwLi5mZTBlMTIxCj4gPj4gLS0tIC9kZXYvbnVsbAo+ID4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fc2NkY19oZWxwZXIuYwo+ID4+IEBAIC0wLDAgKzEsMTExIEBACj4gPj4g Ky8qCj4gPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBOVklESUEgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4gPj4gKyAqCj4gPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+PiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YiBsaWNlbnNlLAo+ID4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+PiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK PiA+PiArICoKPiA+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKPiA+PiArICogbmV4dCBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKPiA+ PiArICogb2YgdGhlIFNvZnR3YXJlLgo+ID4+ICsgKgo+ID4+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP Ugo+ID4+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiA+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCj4gPj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIKPiA+PiArICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ID4+ICsgKi8KPiA+ PiArCj4gPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8 ZHJtL2RybV9zY2RjX2hlbHBlci5oPgo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIERPQzogc2Nk YyBoZWxwZXJzCj4gPj4gKyAqCj4gPj4gKyAqIFN0YXR1cyBhbmQgQ29udHJvbCBEYXRhIENoYW5u ZWwgKFNDREMpIGlzIGEgbWVjaGFuaXNtIGludHJvZHVjZWQgYnkgdGhlCj4gPj4gKyAqIEhETUkg Mi4wIHNwZWNpZmljYXRpb24uIEl0IGlzIGEgcG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wgdGhhdCBh bGxvd3MgdGhlCj4gPj4gKyAqIEhETUkgc291cmNlIGFuZCBIRE1JIHNpbmsgdG8gZXhjaGFuZ2Ug ZGF0YS4gVGhlIHNhbWUgSTJDIGludGVyZmFjZSB0aGF0Cj4gPj4gKyAqIGlzIHVzZWQgdG8gYWNj ZXNzIEVESUQgc2VydmVzIGFzIHRoZSB0cmFuc3BvcnQgbWVjaGFuaXNtIGZvciBTQ0RDLgo+ID4+ ICsgKi8KPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19JMkNfU0xBVkVfQUREUkVTUyAweDU0Cj4g Pj4gKwo+ID4+ICsvKioKPiA+PiArICogZHJtX3NjZGNfcmVhZCAtIHJlYWQgYSBibG9jayBvZiBk YXRhIGZyb20gU0NEQwo+ID4+ICsgKiBAYWRhcHRlcjogSTJDIGNvbnRyb2xsZXIKPiA+PiArICog QG9mZnNldDogc3RhcnQgb2Zmc2V0IG9mIGJsb2NrIHRvIHJlYWQKPiA+PiArICogQGJ1ZmZlcjog cmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgYmxvY2sgdG8gcmVhZAo+ID4+ICsgKiBAc2l6ZTogc2l6 ZSBvZiB0aGUgYmxvY2sgdG8gcmVhZAo+ID4+ICsgKgo+ID4+ICsgKiBSZWFkcyBhIGJsb2NrIG9m IGRhdGEgZnJvbSBTQ0RDLCBzdGFydGluZyBhdCBhIGdpdmVuIG9mZnNldC4KPiA+PiArICoKPiA+ PiArICogUmV0dXJuczoKPiA+PiArICogVGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gU0NE QyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+PiArICovCj4gPj4gK3Nz aXplX3QgZHJtX3NjZGNfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IG9mZnNl dCwgdm9pZCAqYnVmZmVyLAo+ID4+ICsJCSAgICAgIHNpemVfdCBzaXplKQo+ID4+ICt7Cj4gPj4g KwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0gewo+ID4+ICsJCXsKPiA+PiArCQkJLmFkZHIgPSBT Q0RDX0kyQ19TTEFWRV9BRERSRVNTLAo+ID4+ICsJCQkuZmxhZ3MgPSAwLAo+ID4+ICsJCQkubGVu ID0gMSwKPiA+PiArCQkJLmJ1ZiA9ICZvZmZzZXQsCj4gPj4gKwkJfSwgewo+ID4+ICsJCQkuYWRk ciA9IFNDRENfSTJDX1NMQVZFX0FERFJFU1MsCj4gPj4gKwkJCS5mbGFncyA9IEkyQ19NX1JELAo+ ID4+ICsJCQkubGVuID0gc2l6ZSwKPiA+PiArCQkJLmJ1ZiA9IGJ1ZmZlciwKPiA+PiArCQl9Cj4g Pj4gKwl9Owo+ID4+ICsKPiA+PiArCXJldHVybiBpMmNfdHJhbnNmZXIoYWRhcHRlciwgbXNncywg QVJSQVlfU0laRShtc2dzKSk7Cj4gPiBUaGF0IHN0aWxsIGRpc2FncmVlcyB3aXRoIHRoZSBkb2N1 bWVudGF0aW9uLiBJIHdvdWxkIHN1Z2dlc3QgZG9pbmcgd2hhdAo+ID4gdGhlIERQIGR1YWwgbW9k ZSBoZWxwZXIgZG9lcy4KPiBTdXJlLCBJIGd1ZXNzIHRoaXMgaXMgYWJvdXQgaG93IHdlIGFyZSBo YW5kbGluZyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIAo+IEkyQyBsYXllciwgSSB3aWxsIGNoYW5n ZSBpdAo+IHRoZSB3YXkgaXRzIGhhbmRsZWQgaW4gZHJtX2RwX2R1YWxfbW9kZSBmdW5jdGlvbnMK PiA+Cj4gPj4gK30KPiA+PiArRVhQT1JUX1NZTUJPTChkcm1fc2NkY19yZWFkKTsKPiA+PiArCj4g Pj4gKy8qKgo+ID4+ICsgKiBkcm1fc2NkY193cml0ZSAtIHdyaXRlIGEgYmxvY2sgb2YgZGF0YSB0 byBTQ0RDCj4gPj4gKyAqIEBhZGFwdGVyOiBJMkMgY29udHJvbGxlcgo+ID4+ICsgKiBAb2Zmc2V0 OiBzdGFydCBvZmZzZXQgb2YgYmxvY2sgdG8gd3JpdGUKPiA+PiArICogQGJ1ZmZlcjogYmxvY2sg b2YgZGF0YSB0byB3cml0ZQo+ID4+ICsgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmxvY2sgdG8gd3Jp dGUKPiA+PiArICoKPiA+PiArICogV3JpdGVzIGEgYmxvY2sgb2YgZGF0YSB0byBTQ0RDLCBzdGFy dGluZyBhdCBhIGdpdmVuIG9mZnNldC4KPiA+PiArICoKPiA+PiArICogUmV0dXJuczoKPiA+PiAr ICogVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIFNDREMgb3IgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUuCj4gPj4gKyAqLwo+ID4+ICtzc2l6ZV90IGRybV9zY2RjX3dyaXRl KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTggb2Zmc2V0LAo+ID4+ICsJCSAgICAgICBj b25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgaTJj X21zZyBtc2cgPSB7Cj4gPj4gKwkJLmFkZHIgPSBTQ0RDX0kyQ19TTEFWRV9BRERSRVNTLAo+ID4+ ICsJCS5mbGFncyA9IDAsCj4gPj4gKwkJLmxlbiA9IDEgKyBzaXplLAo+ID4+ICsJCS5idWYgPSBO VUxMLAo+ID4+ICsJfTsKPiA+PiArCXZvaWQgKmRhdGE7Cj4gPj4gKwlpbnQgZXJyOwo+ID4+ICsK PiA+PiArCWRhdGEgPSBrbWFsbG9jKDEgKyBzaXplLCBHRlBfVEVNUE9SQVJZKTsKPiA+PiArCWlm ICghZGF0YSkKPiA+PiArCQlyZXR1cm4gLUVOT01FTTsKPiA+PiArCj4gPj4gKwltc2cuYnVmID0g ZGF0YTsKPiA+PiArCj4gPj4gKwltZW1jcHkoZGF0YSwgJm9mZnNldCwgc2l6ZW9mKG9mZnNldCkp Owo+ID4+ICsJbWVtY3B5KGRhdGEgKyAxLCBidWZmZXIsIHNpemUpOwo+ID4+ICsKPiA+PiArCWVy ciA9IGkyY190cmFuc2ZlcihhZGFwdGVyLCAmbXNnLCAxKTsKPiA+PiArCj4gPj4gKwlrZnJlZShk YXRhKTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gZXJyOwo+ID4+ICt9Cj4gPj4gK0VYUE9SVF9TWU1C T0woZHJtX3NjZGNfd3JpdGUpOwo+ID4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fc2Nk Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9zY2RjX2hlbHBlci5oCj4gPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwLi45M2IwN2JjCj4gPj4gLS0tIC9kZXYvbnVs bAo+ID4+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9zY2RjX2hlbHBlci5oCj4gPj4gQEAgLTAsMCAr MSwxMzIgQEAKPiA+PiArLyoKPiA+PiArICogQ29weXJpZ2h0IChjKSAyMDE1IE5WSURJQSBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+PiArICoKPiA+PiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiA+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+PiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ID4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCj4gPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+ID4+ICsgKgo+ID4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQo+ID4+ICsgKiBuZXh0 IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucwo+ID4+ICsgKiBvZiB0aGUgU29mdHdhcmUuCj4gPj4gKyAqCj4gPj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZF TlQgU0hBTEwKPiA+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+PiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKPiA+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+ID4+ICsgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu Cj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArI2lmbmRlZiBEUk1fU0NEQ19IRUxQRVJfSAo+ID4+ICsj ZGVmaW5lIERSTV9TQ0RDX0hFTFBFUl9ICj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8bGludXgvaTJj Lmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4+ICsKPiA+PiArI2RlZmluZSBT Q0RDX1NJTktfVkVSU0lPTiAweDAxCj4gPj4gKwo+ID4+ICsjZGVmaW5lIFNDRENfU09VUkNFX1ZF UlNJT04gMHgwMgo+ID4+ICsKPiA+PiArI2RlZmluZSBTQ0RDX1VQREFURV8wIDB4MTAKPiA+PiAr I2RlZmluZSAgU0NEQ19SRUFEX1JFUVVFU1RfVEVTVCAoMSA8PCAyKQo+ID4+ICsjZGVmaW5lICBT Q0RDX0NFRF9VUERBVEUgKDEgPDwgMSkKPiA+PiArI2RlZmluZSAgU0NEQ19TVEFUVVNfVVBEQVRF ICgxIDw8IDApCj4gPj4gKwo+ID4+ICsjZGVmaW5lIFNDRENfVVBEQVRFXzEgMHgxMQo+ID4+ICsK PiA+PiArI2RlZmluZSBTQ0RDX1RNRFNfQ09ORklHIDB4MjAKPiA+PiArI2RlZmluZSAgU0NEQ19U TURTX0JJVF9DTE9DS19SQVRJT19CWV80MCAoMSA8PCAxKQo+ID4+ICsjZGVmaW5lICBTQ0RDX1RN RFNfQklUX0NMT0NLX1JBVElPX0JZXzEwICgwIDw8IDEpCj4gPj4gKyNkZWZpbmUgIFNDRENfU0NS QU1CTElOR19FTkFCTEUgKDEgPDwgMCkKPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19TQ1JBTUJM RVJfU1RBVFVTIDB4MjEKPiA+PiArI2RlZmluZSAgU0NEQ19TQ1JBTUJMSU5HX1NUQVRVUyAoMSA8 PCAwKQo+ID4+ICsKPiA+PiArI2RlZmluZSBTQ0RDX0NPTkZJR18wIDB4MzAKPiA+PiArI2RlZmlu ZSAgU0NEQ19SRUFEX1JFUVVFU1RfRU5BQkxFICgxIDw8IDApCj4gPj4gKwo+ID4+ICsjZGVmaW5l IFNDRENfU1RBVFVTX0ZMQUdTXzAgMHg0MAo+ID4+ICsjZGVmaW5lICBTQ0RDX0NIMl9MT0NLICgx IDwgMykKPiA+PiArI2RlZmluZSAgU0NEQ19DSDFfTE9DSyAoMSA8IDIpCj4gPj4gKyNkZWZpbmUg IFNDRENfQ0gwX0xPQ0sgKDEgPCAxKQo+ID4+ICsjZGVmaW5lICBTQ0RDX0NIX0xPQ0tfTUFTSyAo U0NEQ19DSDJfTE9DSyB8IFNDRENfQ0gxX0xPQ0sgfCBTQ0RDX0NIMF9MT0NLKQo+ID4+ICsjZGVm aW5lICBTQ0RDX0NMT0NLX0RFVEVDVCAoMSA8PCAwKQo+ID4+ICsKPiA+PiArI2RlZmluZSBTQ0RD X1NUQVRVU19GTEFHU18xIDB4NDEKPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzBf TCAweDUwCj4gPj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzBfSCAweDUxCj4gPj4gKyNkZWZpbmUg U0NEQ19FUlJfREVUXzFfTCAweDUyCj4gPj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzFfSCAweDUz Cj4gPj4gKyNkZWZpbmUgU0NEQ19FUlJfREVUXzJfTCAweDU0Cj4gPj4gKyNkZWZpbmUgU0NEQ19F UlJfREVUXzJfSCAweDU1Cj4gPj4gKyNkZWZpbmUgIFNDRENfQ0hBTk5FTF9WQUxJRCAoMSA8PCA3 KQo+ID4+ICsKPiA+PiArI2RlZmluZSBTQ0RDX0VSUl9ERVRfQ0hFQ0tTVU0gMHg1Ngo+ID4+ICsK PiA+PiArI2RlZmluZSBTQ0RDX1RFU1RfQ09ORklHXzAgMHhjMAo+ID4+ICsjZGVmaW5lICBTQ0RD X1RFU1RfUkVBRF9SRVFVRVNUICgxIDw8IDcpCj4gPj4gKyNkZWZpbmUgIFNDRENfVEVTVF9SRUFE X1JFUVVFU1RfREVMQVkoeCkgKCh4KSAmIDB4N2YpCj4gPj4gKwo+ID4+ICsjZGVmaW5lIFNDRENf TUFOVUZBQ1RVUkVSX0lFRUVfT1VJIDB4ZDAKPiA+PiArI2RlZmluZSBTQ0RDX01BTlVGQUNUVVJF Ul9JRUVFX09VSV9TSVpFIDMKPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19ERVZJQ0VfSUQgMHhk Mwo+ID4+ICsjZGVmaW5lIFNDRENfREVWSUNFX0lEX1NJWkUgOAo+ID4+ICsKPiA+PiArI2RlZmlu ZSBTQ0RDX0RFVklDRV9IQVJEV0FSRV9SRVZJU0lPTiAweGRiCj4gPj4gKyNkZWZpbmUgIFNDRENf REVWSUNFX0hBUkRXQVJFX1JFVklTSU9OX01BSk9SKHgpICgoKHgpID4+IDQpICYgMHhmKQo+ID4+ ICsjZGVmaW5lICBTQ0RDX0RFVklDRV9IQVJEV0FSRV9SRVZJU0lPTl9NSU5PUih4KSAoKCh4KSA+ PiAwKSAmIDB4ZikKPiA+IFdlIGRvbid0IHVzdWFsbHkgZGVmaW5lIG1hY3JvcyBsaWtlIHRoaXMg dG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHRoZQo+ID4gcmVnaXN0ZXIuIEl0J3MgZWFzeSB0 byBjb25mdXNlIHRoZW0gd2l0aCB0aGUgbm9ybWFsIG1hY3JvcyBmb3Igc2V0dGluZwo+ID4gYml0 cy4KPiBIb3cgYWJvdXQgaWYgSSBhZGQgYW5vdGhlciBzdWIgbWFjcm8gY2FsbGVkIF9NQUpPUiwg YW5kIHVzZSBpdCBsaWtlIHRoaXM6Cj4gCj4gI2RlZmluZSBfTUFKT1IoeCkgKHggJiAweGYpCj4g I2RlZmluZSAgU0NEQ19ERVZJQ0VfSEFSRFdBUkVfUkVWSVNJT05fTUFKT1IoeCkgKF9NQUpPUigo eCkgPj4gNCkpCj4gCj4gT3Igd2lsbCB5b3UgcHJlZmVyIG5vIG1hY3JvIGZvciB0aGlzIGpvYiBh dCBhbGwgPwoKSSB0aGluayB0aGUgdXN1YWwgcGF0dGVybiBpcyBhIFNISUZUICsgTUFTSyBtYWNy b3MgZm9yIGV4dHJhY3RpbmcKdGhpbmdzIGZyb20gcmVnaXN0ZXIgdmFsdWVzLiBCdXQgdGhhdCBp cyBhIGxpdHRsZSBlcnJvciBwcm9uZSBhbmQgcmF0aGVyCnZlcmJvc2UgdG8gdXNlLCBzbyBJIGRv IGFjdHVhbGx5IGxpa2UgdGhlIGlkZWEgb2YgaGF2aW5nIG1hY3JvcyBmb3IKZXh0cmFjdGluZyBi aXRzIGZyb20gcmVnaXN0ZXJzLgoKSG1tLiBBZnRlciBsb29raW5nIGFyb3VuZCBhIGJpdCwgSSBk byBzZWUgdGhhdCBEUF9HRVRfU0lOS19DT1VOVCgpIGlzIGFuCmV4dHJhY3Rpb24gbWFjcm8gc2lt aWxhciB0byB3aGF0IHlvdSBoYXZlIGhlcmUuIElmIHdlIGZvbGxvdyB0aGF0IGV4YW1wbGUKdGhl biBqdXN0IGFkZGluZyBfR0VUXyB0byB0aGUgbmFtZSBzaG91bGQgYmUgZ29vZCBlbm91Z2ggdG8g ZGlzdGluZ3Vpc2gKdGhpcyBmcm9tIGFueSBtYWNybyB0byBzZXQgdGhlIGJpdHMuCgo+IAo+IC0g U2hhc2hhbmsKPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19ERVZJQ0VfU09GVFdBUkVfTUFKT1Jf UkVWSVNJT04gMHhkYwo+ID4+ICsjZGVmaW5lIFNDRENfREVWSUNFX1NPRlRXQVJFX01JTk9SX1JF VklTSU9OIDB4ZGQKPiA+PiArCj4gPj4gKyNkZWZpbmUgU0NEQ19NQU5VRkFDVFVSRVJfU1BFQ0lG SUMgMHhkZQo+ID4+ICsjZGVmaW5lIFNDRENfTUFOVUZBQ1RVUkVSX1NQRUNJRklDX1NJWkUgMzQK PiA+PiArCj4gPj4gK3NzaXplX3QgZHJtX3NjZGNfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXB0ZXIsIHU4IG9mZnNldCwgdm9pZCAqYnVmZmVyLAo+ID4+ICsJCSAgICAgIHNpemVfdCBzaXpl KTsKPiA+PiArc3NpemVfdCBkcm1fc2NkY193cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0 ZXIsIHU4IG9mZnNldCwKPiA+PiArCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qg c2l6ZSk7Cj4gPj4gKwo+ID4+ICsvKioKPiA+PiArICogZHJtX3NjZGNfcmVhZGIgLSByZWFkIGEg c2luZ2xlIGJ5dGUgZnJvbSBTQ0RDCj4gPj4gKyAqIEBhZGFwdGVyOiBJMkMgYWRhcHRlcgo+ID4+ ICsgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgcmVnaXN0ZXIgdG8gcmVhZAo+ID4+ICsgKiBAdmFsdWU6 IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIHJlZ2lzdGVyIHZhbHVlCj4gPj4gKyAqCj4gPj4gKyAq IFJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSBTQ0RDLiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3Jh cHBlciBhcm91bmQgdGhlCj4gPj4gKyAqIGRybV9zY2RjX3JlYWQoKSBmdW5jdGlvbi4KPiA+PiAr ICoKPiA+PiArICogUmV0dXJuczoKPiA+PiArICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4+ICsgKi8KPiA+PiArc3RhdGljIGlubGluZSBpbnQg ZHJtX3NjZGNfcmVhZGIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBvZmZzZXQsCj4g Pj4gKwkJCQkgdTggKnZhbHVlKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gZHJtX3NjZGNfcmVhZChh ZGFwdGVyLCBvZmZzZXQsIHZhbHVlLCBzaXplb2YoKnZhbHVlKSk7Cj4gPj4gK30KPiA+PiArCj4g Pj4gKy8qKgo+ID4+ICsgKiBkcm1fc2NkY193cml0ZWIgLSB3cml0ZSBhIHNpbmdsZSBieXRlIHRv IFNDREMKPiA+PiArICogQGFkYXB0ZXI6IEkyQyBhZGFwdGVyCj4gPj4gKyAqIEBvZmZzZXQ6IG9m ZnNldCBvZiByZWdpc3RlciB0byByZWFkCj4gPj4gKyAqIEB2YWx1ZTogcmV0dXJuIGxvY2F0aW9u IGZvciB0aGUgcmVnaXN0ZXIgdmFsdWUKPiA+PiArICoKPiA+PiArICogV3JpdGVzIGEgc2luZ2xl IGJ5dGUgdG8gU0NEQy4gVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRoZQo+ ID4+ICsgKiBkcm1fc2NkY193cml0ZSgpIGZ1bmN0aW9uLgo+ID4+ICsgKgo+ID4+ICsgKiBSZXR1 cm5zOgo+ID4+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCj4gPj4gKyAqLwo+ID4+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fc2NkY193cml0ZWIo c3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBvZmZzZXQsCj4gPj4gKwkJCQkgIHU4IHZh bHVlKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gZHJtX3NjZGNfd3JpdGUoYWRhcHRlciwgb2Zmc2V0 LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsjZW5kaWYKPiA+ PiAtLSAKPiA+PiAxLjkuMQoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==