From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [RFC 1/5] drm: Add DRM support for tiny LCD displays Date: Fri, 1 Apr 2016 21:15:45 +0200 Message-ID: <56FEC8E1.50907@tronnes.org> References: <1458135259-31050-1-git-send-email-noralf@tronnes.org> <1458135259-31050-2-git-send-email-noralf@tronnes.org> <20160316151123.GP14170@phenom.ffwll.local> <56EB26FB.3030402@tronnes.org> <20160318174733.GI14170@phenom.ffwll.local> <56F2CD6C.9080002@tronnes.org> <20160323172825.GD2510@phenom.ffwll.local> <56F515E8.3040408@tronnes.org> <20160329072708.GH2510@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id CBE286E31F for ; Fri, 1 Apr 2016 19:15:50 +0000 (UTC) In-Reply-To: <20160329072708.GH2510@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: thomas.petazzoni@free-electrons.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAyOS4wMy4yMDE2IDA5OjI3LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+IE9uIEZyaSwgTWFy IDI1LCAyMDE2IGF0IDExOjQxOjQ0QU0gKzAxMDAsIE5vcmFsZiBUcsO4bm5lcyB3cm90ZToKPj4g RGVuIDIzLjAzLjIwMTYgMTg6MjgsIHNrcmV2IERhbmllbCBWZXR0ZXI6Cj4+PiBPbiBXZWQsIE1h ciAyMywgMjAxNiBhdCAwNjowNzo1NlBNICswMTAwLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4+ Pj4gRGVuIDE4LjAzLjIwMTYgMTg6NDcsIHNrcmV2IERhbmllbCBWZXR0ZXI6Cj4+Pj4+IE9uIFRo dSwgTWFyIDE3LCAyMDE2IGF0IDEwOjUxOjU1UE0gKzAxMDAsIE5vcmFsZiBUcsO4bm5lcyB3cm90 ZToKPj4+Pj4+IERlbiAxNi4wMy4yMDE2IDE2OjExLCBza3JldiBEYW5pZWwgVmV0dGVyOgo+Pj4+ Pj4+IE9uIFdlZCwgTWFyIDE2LCAyMDE2IGF0IDAyOjM0OjE1UE0gKzAxMDAsIE5vcmFsZiBUcsO4 bm5lcyB3cm90ZToKPj4+Pj4+Pj4gdGlueWRybSBwcm92aWRlcyBhIHZlcnkgc2ltcGxpZmllZCB2 aWV3IG9mIERSTSBmb3IgZGlzcGxheXMgdGhhdCBoYXMKPj4+Pj4+Pj4gb25ib2FyZCB2aWRlbyBt ZW1vcnkgYW5kIGlzIGNvbm5lY3RlZCB0aHJvdWdoIGEgc2xvdyBidXMgbGlrZSBTUEkvSTJDLgo+ Pj4+Pj4+Pgo+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0 cm9ubmVzLm9yZz4KPj4+Pj4+PiBZYXksIGl0IGZpbmFsbHkgaGFwcGVucyEgSSBhbHJlYWR5IG1h ZGUgYSBjb21tZW50IG9uIHRoZSBjb3ZlciBsZXR0ZXIKPj4+Pj4+PiBhYm91dCB0aGUgZmJkZXYg c3R1ZmYsIEkgdGhpbmsgdGhhdCdzIHRoZSBiaWdnZXN0IHBhcnQgdG8gc3BsaXQgb3V0IGZyb20K Pj4+Pj4+PiB0aW55ZHJtIGhlcmUuIEknbSBub3QgZW50aXJlbHkgc3VyZSBhIGRldGFpbGVkIGNv ZGUgcmV2aWV3IG1ha2VzIHNlbnNlCj4+Pj4+Pj4gYmVmb3JlIHRoYXQgcGFydCBpcyBkb25lIChh bmQgaGV5IHdlIGNhbiBzdGFydCBtZXJnaW5nIGFscmVhZHkpLCBzbyBqdXN0IGEKPj4+Pj4+PiBo aWdoIGxldmVsIHJldmlldyBmb3Igbm93Ogo+Pj4+IFsuLi5dCj4+Pj4+Pj4gSW4gdGhlIGNhc2Ug b2YgdGlueWRybSBJIHRoaW5rIHRoYXQgbWVhbnMgd2Ugc2hvdWxkIGhhdmUgYSBidW5jaCBvZiBu ZXcKPj4+Pj4+PiBkcm0gaGVscGVycywgb3IgZXh0ZW5zaW9ucyBmb3IgZXhpc3Rpbmcgb25lczoK Pj4+Pj4+PiAtIGZiZGV2IGRlZmVycmVkIGlvIHN1cHBvcnQgdXNpbmcgLT5kaXJ0eWZiIGluIGRy bV9mYl9oZWxwZXIuYy4KPj4+Pj4+IEFyZSB5b3UgdGhpbmtpbmcgc29tZXRoaW5nIGxpa2UgdGhp cz8KPj4+Pj4+Cj4+Pj4+PiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB7Cj4+Pj4+PiAgICAg IGludCAoKmRpcnR5ZmIpKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4+Pj4+PiAg ICAgICAgICAgICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApOwo+Pj4+PiBXZSBhbHJl YWR5IGhhdmUgYSBkaXJ0eV9mYiBmdW5jdGlvbiBpbgo+Pj4+PiBkZXYtPm1vZGVfY29uZmlnLT5m dW5jcy0+ZGlydHlfZmIoKS4gVGhpcyBpcyB0aGUgb2ZmaWNpYWwgaW50ZXJmYWNlIG5hdGl2ZQo+ Pj4+PiBkcm0va21zIHVzZXJzcGFjZSBpcyBzdXBwb3NlZCB0byB1c2UgdG8gZmx1c2ggZnJvbnRi dWZmZXIgcmVuZGVyaW5nLiBUaGUKPj4+Pj4geGZyZWU4Ni12aWRlby1tb2Rlc2V0dGluZyBkcml2 ZXIgdXNlcyBpdC4KPj4+PiBJIGNvdWxkbid0IGZpbmQgdGhpcyBkaXJ0eV9mYigpIGZ1bmN0aW9u LCBidXQgSSBhc3N1bWUgeW91IG1lYW4KPj4+PiBkcm1fZnJhbWVidWZmZXJfZnVuY3MuZGlydHko KS4KPj4+IFl1cC4KPj4+Cj4+Pj4+PiB9Owo+Pj4+Pj4KPj4+Pj4+IHN0cnVjdCBkcm1fZmJfaGVs cGVyIHsKPj4+Pj4+ICAgICAgc3BpbmxvY2tfdCBkaXJ0eV9sb2NrOwo+Pj4+Pj4gICAgICBzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqZGlydHlfY2xpcDsKPj4+Pj4+IH07Cj4+Pj4+IFllYWgsIHRoaXMg cGFydCBpcyBuZWVkZWQgZm9yIHRoZSBkZWxheWVkIHdvcmsgZm9yIHRoZSBmYmRldiBoZWxwZXIu Cj4+Pj4+IHN0cnVjdCB3b3JrIGRpcnR5X2ZiX3dvcms7IGlzIG1pc3NpbmcuCj4+Pj4gVGhpcyBj b25mdXNlcyBtZS4KPj4+PiBJZiB3ZSBoYXZlIHRoaXMgdGhlbiB0aGVyZSdzIG5vIG5lZWQgZm9y IGEgZmItPmZ1bmNzLT5kaXJ0eSgpIGNhbGwsCj4+Pj4gdGhlIGRyaXZlciBjYW4ganVzdCBhZGQg YSB3b3JrIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZC4KPj4+Pgo+Pj4+IFBvc3NpYmxlIGZiIGRpcnR5 KCkgY2FsbCBjaGFpbjoKPj4+PiBDYWxscyB0byBkcm1fZmJfaGVscGVyX3N5c18qIG9yIG1tYXAg cGFnZSB3cml0ZXMgd2lsbCBzY2hlZHVsZQo+Pj4+IGZiX2luZm8tPmRlZmVycmVkX3dvcmsuIFRo ZSB3b3JrZXIgZnVuYyBmYl9kZWZlcnJlZF9pb193b3JrKCkgY2FsbHMKPj4+PiBmYl9pbmZvLT5m YmRlZmlvLT5kZWZlcnJlZF9pbygpLgo+Pj4+IFRoZW4gZGVmZXJyZWRfaW8oKSBjYW4gY2FsbCBm Yl9oZWxwZXItPmZiLT5mdW5jcy0+ZGlydHkoKS4KPj4+Pgo+Pj4+IEluIG15IHVzZS1jYXNlIHRo aXMgZGlydHkoKSBmdW5jdGlvbiB3b3VsZCBzY2hlZHVsZSBhIGRlbGF5ZWRfd29yayB0byBydW4K Pj4+PiBpbW1lZGlhdGVseSBzaW5jZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlZmVycmVkIGNvbGxl Y3RpbmcgY2hhbmdlcy4KPj4+PiBUaGUgcmVndWxhciBkcm0gc2lkZSBmcmFtZWJ1ZmZlciBkaXJ0 eSgpIGNvbGxlY3RzIGRhbWFnZSBhbmQgc2NoZWR1bGVzCj4+Pj4gdGhlIHNhbWUgd29ya2VyIHRv IHJ1biBkZWZlcnJlZC4KPj4+Pgo+Pj4+IEkgZG9uJ3Qgc2VlIGFuIGVhc3kgd2F5IGZvciBhIGRy aXZlciB0byBzZXQgdGhlIGRpcnR5KCkgZnVuY3Rpb24gaW4KPj4+PiBkcm1fZmJfY21hX2hlbHBl ciBhcGFydCBmcm9tIGRvaW5nIHRoaXM6Cj4+Pj4KPj4+PiAgIHN0cnVjdCBkcm1fZmJkZXZfY21h IHsKPj4+PiAgICAgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXIgICAgZmJfaGVscGVyOwo+Pj4+ ICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZiX2NtYSAgICAgICAqZmI7Cj4+Pj4gKyAgICAgICAgaW50 ICgqZGlydHkpKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgdW5zaWduZWQgZmxh Z3MsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHMsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51 bV9jbGlwcyk7Cj4+Pj4gICB9Owo+Pj4gV2VsbCBteSBwb2ludCBpcyB0aGF0IGRybSBjb3JlIGFs cmVhZHkgaGFzIGEgY2Fub25pY2FsIGludGVyZmFjZQo+Pj4gKGRybV9mcmFtZWJ1ZmZlcl9mdW5j cy5kaXJ0eSkgdG8gZmx1c2ggb3V0IHJlbmRlcmluZy4gQW5kIGl0J3Mgc3VwcG9zZWQgdG8KPj4+ IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCwgYW5kIHVzZXJzcGFjZSBpcyBzdXBwb3Nl ZCB0byBiYXRjaCB1cAo+Pj4gZGlydHkgdXBkYXRlcy4KClsuLi5dCgo+Cj4+PiBXaGF0IEknZCBs aWtlIGlzIHRoYXQgdGhlIGZiZGV2IGVtdWxhdGlvbiB1c2VzIGV4YWN0bHkgdGhhdCBpbnRlcmZh Y2UsCj4+PiB3aXRob3V0IHJlcXVpcmluZyBkcml2ZXJzIHRvIHdyaXRlIGFueSBhZGRpdGlvbmFs IGZiZGV2IGNvZGUgKGxpa2UgcXhsIGFuZAo+Pj4gdWRsIGN1cnJlbnRseSBoYXZlKS4gU2luY2Ug dGhlIGRybV9mcmFtZWJ1ZmZlcl9mdW5jcy5kaXJ0eSBpcyBhbHJlYWR5Cj4+PiBleHBlY3RlZCB0 byBydW4gaW4gcHJvY2VzcyBjb250ZXh0IEkgdGhpbmsgdGhlIG9ubHkgYml0IHdlIG5lZWQgaXMg dGhlCj4+PiBkZWZlcnJlZF93b3JrIHlvdSBhbHJlYWR5IGFkZGVkIGluIGZiZGV2LCBzbyB0aGF0 IHdlIGNhbiBzY2hlZHVsZSB0aGUKPj4+IGRyaXZlcidzIC0+ZGlydHkoKSBmdW5jdGlvbi4KPj4+ Cj4+PiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG5lZWQgdG8gaGF2ZSBhbm90aGVyIC0+ZGlydHko KSBmdW5jdGlvbiBhbnl3aGVyZQo+Pj4gZWxzZS4KPj4gSSdsbCB0cnkgYW5kIHNlZSBpZiBJIGNh biBleHBsYWluIGJldHRlciB3aXRoIHNvbWUgY29kZS4KPj4gRmlyc3QgdGhlIGRybV9mYl9oZWxw ZXIgcGFydDoKPj4KPj4gdm9pZCBkcm1fZmJfaGVscGVyX2RlZmVycmVkX2lvKHN0cnVjdCBmYl9p bmZvICppbmZvLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKnBhZ2VsaXN0KQo+PiB7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyICpo ZWxwZXIgPSBpbmZvLT5wYXI7Cj4+ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwg bWluLCBtYXg7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0IGNsaXA7Cj4+ICAgICAg ICAgIHN0cnVjdCBwYWdlICpwYWdlOwo+Pgo+PiAgICAgICAgICBpZiAoIWhlbHBlci0+ZmItPmZ1 bmNzLT5kaXJ0eSkKPj4gICAgICAgICAgICAgICAgICByZXR1cm47Cj4+Cj4+ICAgICAgICAgIHNw aW5fbG9jaygmaGVscGVyLT5kaXJ0eV9sb2NrKTsKPj4gICAgICAgICAgY2xpcCA9ICpoZWxwZXIt PmRpcnR5X2NsaXA7Cj4+ICAgICAgICAgIC8qIHJlc2V0IGRpcnR5X2NsaXAgKi8KPj4gICAgICAg ICAgc3Bpbl91bmxvY2soJmhlbHBlci0+ZGlydHlfbG9jayk7Cj4+Cj4+ICAgICAgICAgIG1pbiA9 IFVMT05HX01BWDsKPj4gICAgICAgICAgbWF4ID0gMDsKPj4gICAgICAgICAgbGlzdF9mb3JfZWFj aF9lbnRyeShwYWdlLCBwYWdlbGlzdCwgbHJ1KSB7Cj4+ICAgICAgICAgICAgICAgICAgc3RhcnQg PSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwo+PiAgICAgICAgICAgICAgICAgIGVuZCA9IHN0 YXJ0ICsgUEFHRV9TSVpFIC0gMTsKPj4gICAgICAgICAgICAgICAgICBtaW4gPSBtaW4obWluLCBz dGFydCk7Cj4+ICAgICAgICAgICAgICAgICAgbWF4ID0gbWF4KG1heCwgZW5kKTsKPj4gICAgICAg ICAgfQo+Pgo+PiAgICAgICAgICBpZiAobWluIDwgbWF4KSB7Cj4+ICAgICAgICAgICAgICAgICAg LyogVE9ETyBtZXJnZSB3aXRoIGNsaXAgKi8KPj4gICAgICAgICAgfQo+Pgo+PiAgICAgICAgICBo ZWxwZXItPmZiLT5mdW5jcy0+ZGlydHkoaGVscGVyLT5mYiwgTlVMTCwgMCwgMCwgJmNsaXAsIDEp Owo+PiB9Cj4+IEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9kZWZlcnJlZF9pbyk7Cj4+Cj4+ IC8qIENhbGxlZCBieSB0aGUgZHJtX2ZiX2hlbHBlcl9zeXNfKigpIGZ1bmN0aW9ucyAqLwo+PiBz dGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX3N5c19kZWZlcnJlZChzdHJ1Y3QgZmJfaW5mbyAqaW5m bywgdTMyIHgsIHUzMiB5LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQo+PiB7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZmJf aGVscGVyICpoZWxwZXIgPSBpbmZvLT5wYXI7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fY2xpcF9y ZWN0IGNsaXA7Cj4+Cj4+ICAgICAgICAgIGlmICghaW5mby0+ZmJkZWZpbykKPj4gICAgICAgICAg ICAgICAgICByZXR1cm47Cj4+Cj4+ICAgICAgICAgIGNsaXAueDEgPSB4Owo+PiAgICAgICAgICBj bGlwLngyID0geCArIHdpZHRoIC0xOwo+PiAgICAgICAgICBjbGl5LnkxID0geTsKPj4gICAgICAg ICAgY2xpcC55MiA9IHkgKyBoZWlnaHQgLSAxOwo+Pgo+PiAgICAgICAgICBzcGluX2xvY2soJmhl bHBlci0+ZGlydHlfbG9jayk7Cj4+ICAgICAgICAgIC8qIFRPRE8gbWVyZ2UgY2xpcCB3aXRoIGhl bHBlci0+ZGlydHlfY2xpcCAqLwo+PiAgICAgICAgICBzcGluX3VubG9jaygmaGVscGVyLT5kaXJ0 eV9sb2NrKTsKPj4KPj4gICAgICAgICAgc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZl cnJlZF93b3JrLCBpbmZvLT5mYmRlZmlvLT5kZWxheSk7Cj4+IH0KPj4KPj4KPj4gU28gdGhlIHF1 ZXN0aW9uIEkgaGF2ZSBhc2tlZCBpcyB0aGlzOiBIb3cgY2FuIHRoZSBkcml2ZXIgc2V0IHRoZQo+ PiBkaXJ0eSgpIGZ1bmN0aW9uIHdpdGhpbiBkcm1fZmJfY21hX2hlbHBlcj8KPj4KPj4gSGF2aW5n IGxvb2tlZCBhdCB0aGUgY29kZSBvdmVyIGFuZCBvdmVyIGFnYWluLCBJIGhhdmUgYSBzdWdnZXN0 aW9uLAo+PiBidXQgaXQgYXNzdW1lcyB0aGF0IGl0J3MgYWxsb3dlZCB0byBjaGFuZ2UgZmItPmZ1 bmNzLgo+Pgo+PiBGaXJzdCB0aGUgbmVjZXNzYXJ5IGRybV9mYl9jbWFfaGVscGVyIGNoYW5nZXM6 Cj4+Cj4+IEVYUE9SVF9TWU1CT0woZHJtX2ZiX2NtYV9kZXN0cm95KTsKPj4gRVhQT1JUX1NZTUJP TChkcm1fZmJfY21hX2NyZWF0ZV9oYW5kbGUpOwo+PiBFWFBPUlRfU1lNQk9MKGRybV9mYmRldl9j bWFfY3JlYXRlKTsKPj4KPj4gLyogVGhpcyBpcyB0aGUgZHJtX2ZiZGV2X2NtYV9pbml0KCkgY29k ZSB3aXRoIG9uZSBjaGFuZ2UgKi8KPj4gc3RydWN0IGRybV9mYmRldl9jbWEgKmRybV9mYmRldl9j bWFfaW5pdF93aXRoX2Z1bmNzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICAgICAgICAgIHVu c2lnbmVkIGludCBwcmVmZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbnVtX2NydGMsCj4+ICAgICAg ICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9jb3VudCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9m dW5jcyAqZnVuY3MpCj4+IHsKPj4gWy4uLl0KPj4gICAgICAgICAgZHJtX2ZiX2hlbHBlcl9wcmVw YXJlKGRldiwgaGVscGVyLCBmdW5jcyk7Cj4+IFsuLi5dCj4+IH0KPj4KPj4gc3RydWN0IGRybV9m YmRldl9jbWEgKmRybV9mYmRldl9jbWFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiAg ICAgICAgICB1bnNpZ25lZCBpbnQgcHJlZmVycmVkX2JwcCwgdW5zaWduZWQgaW50IG51bV9jcnRj LAo+PiAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQpCj4+IHsKPj4gICAgICAg ICAgcmV0dXJuIGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNzKGRldiwgcHJlZmVycmVkX2Jw cCwgbnVtX2NydGMsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXhfY29ubl9jb3VudCwKPj4gJmRybV9mYl9jbWFfaGVscGVyX2Z1bmNzKTsKPj4gfQo+ Pgo+Pgo+PiBOb3cgdGlueWRybSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlzOgo+Pgo+PiBzdGF0 aWMgaW50IHRpbnlkcm1fZmJkZXZfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsIHVu c2lnbmVkIGNvbG9yLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fY2xpcF9yZWN0ICpjbGlwcywKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBudW1fY2xpcHMpCj4+IHsKPj4gICAgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXIg KmhlbHBlciA9IGluZm8tPnBhcjsKPj4gICAgICAgICAgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0 ZGV2ID0gaGVscGVyLT5kZXYtPmRldl9wcml2YXRlOwo+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IGhlbHBlci0+ZmI7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmNtYV9vYmo7Cj4+Cj4+ICAgICAgICAgIGlmICh0ZGV2LT5wbGFuZS5mYiAhPSBm YikKPj4gICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4KPj4gICAgICAgICAgY21hX29iaiA9 IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOwo+PiAgICAgICAgICBpZiAoIWNtYV9vYmop IHsKPj4gICAgICAgICAgICAgICAgICBkZXZfZXJyX29uY2UoaW5mby0+ZGV2LCAiQ2FuJ3QgZ2V0 IGNtYV9vYmpcbiIpOwo+PiAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiAgICAg ICAgICB9Cj4+Cj4+ICAgICAgICAgIHJldHVybiB0ZGV2LT5kaXJ0eWZiKGZiLCBjbWFfb2JqLT52 YWRkciwgZmxhZ3MsIGNvbG9yLCBjbGlwcywKPj4gbnVtX2NsaXBzKTsKPj4gfQo+Pgo+PiBzdGF0 aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB0aW55ZHJtX2ZiX2NtYV9mdW5jcyA9IHsK Pj4gICAgICAgICAgLmRlc3Ryb3kgICAgICAgID0gZHJtX2ZiX2NtYV9kZXN0cm95LAo+PiAgICAg ICAgICAuY3JlYXRlX2hhbmRsZSAgPSBkcm1fZmJfY21hX2NyZWF0ZV9oYW5kbGUsCj4+ICAgICAg ICAgIC5kaXJ0eSAgICAgICAgICA9IHRpbnlkcm1fZmJkZXZfZGlydHksCj4+IH07Cj4gQWgsIGNt YSBtaWRsYXllciBzdHJpa2VzIGFnYWluLiBXZSd2ZSBoYWQgYSBzaW1pbGFyIGRpc2N1c3Npb24g YXJvdW5kIHRoZQo+IGdlbSBzaWRlIHdoZW4gdmM0IGxhbmRlZCBmb3Igc2ltaWxhciByZWFzb25z IGlpcmMgLSBpdCdzIGhhcmQgdG8gb3ZlcndyaXRlCj4gc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9u cyB0byBjdXN0b21pemUgdGhlIGJlaGF2aW91ci4KPgo+IEkgZ3Vlc3MgdGhlIHNpbXBsZXN0IHNv bHV0aW9uIHdvdWxkIGJlIHRvIGV4cG9ydAo+IGRybV9mYl9jbWFfZGVzdHJveS9jcmVhdGVfaGFu ZGxlIGZ1bmN0aW9ucywgYW5kIHRoZW4gYWRkIGEKPiBkcm1fZmJfY21hX2NyZWF0ZV93aXRoX2Z1 bmNzIGhlbHBlciB3aGljaCB5b3UgY2FuIHVzZSBsaWtlIHRoaXM6Cj4KPiBzdGF0aWMgaW50IHRp bnlkcm1fZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9z aXplICpzaXplcykKPiB7Cj4gCXJldHVybiBkcm1fZmJfY21hX2NyZWF0ZV93aXRoX2Z1bmNzKGhl bHBlciwgc2l6ZXMsIHRpbnlkcm1fZmJfY21hX2Z1bmNzKTsKPiB9Cj4KPiBDaGFuZ2luZyBmYi0+ ZnVuY3MgYWZ0ZXIgZHJtX2ZyYW1lYnVmZmVyX2luaXQgaXMgY2FsbGVkIGlzIGEgbm8tZ28sIHNp bmNlCj4gdGhhdCBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGUgZnJhbWVidWZmZXIgYW5kIG1h a2VzIGl0IHVzZXJzcGFjZQo+IGFjY2Vzc2libGUuIFNvIGFmdGVyIHRoYXQgcG9pbnQgb3RoZXIg dGhyZWFkcyBjYW4gZ28mbG9vayBhdCBmYi0+ZnVuY3MuCj4KPj4gc3RhdGljIGludCB0aW55ZHJt X2ZiZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUg KnNpemVzKQo+PiB7Cj4+ICAgICAgICAgIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGhl bHBlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gICAgICAgICAgc3RydWN0IGZiX2RlZmVycmVkX2lv ICpmYmRlZmlvOwo+PiAgICAgICAgICBzdHJ1Y3QgZmJfb3BzICpmYm9wczsKPj4gICAgICAgICAg c3RydWN0IGZiX2luZm8gKmluZm87Cj4+Cj4+ICAgICAgICAgIC8qCj4+ICAgICAgICAgICAqIEEg cGVyIGRldmljZSBzdHJ1Y3R1cmUgaXMgbmVlZGVkIGZvcjoKPj4gICAgICAgICAgICogLSBmYm9w cyBiZWNhdXNlIGZiX2RlZmVycmVkX2lvX2NsZWFudXAoKSBjbGVhcnMgZmJvcHMuZmJfbW1hcAo+ PiAgICAgICAgICAgKiAtIGZiZGVmaW8gdG8gZ2V0IHBlciBkZXZpY2UgZGVsYXkKPj4gICAgICAg ICAgICovCj4+ICAgICAgICAgIGZib3BzID0gZGV2bV9remFsbG9jKGhlbHBlci0+ZGV2LT5kZXYs IHNpemVvZigqZmJvcHMpLCBHRlBfS0VSTkVMKTsKPj4gICAgICAgICAgZmJkZWZpbyA9IGRldm1f a3phbGxvYyhoZWxwZXItPmRldi0+ZGV2LCBzaXplb2YoKmZiZGVmaW8pLAo+PiBHRlBfS0VSTkVM KTsKPj4gICAgICAgICAgaWYgKCFmYm9wcyB8fCAhZmJkZWZpbykKPj4gICAgICAgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsKPj4KPj4gICAgICAgICAgcmV0ID0gZHJtX2ZiZGV2X2NtYV9jcmVh dGUoaGVscGVyLCBzaXplcyk7Cj4+ICAgICAgICAgIGlmIChyZXQpCj4+ICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPj4KPj4gICAgICAgICAgaGVscGVyLT5mYi0+ZnVuY3MgPSAmdGlueWRy bV9mYl9jbWFfZnVuY3M7Cj4gT2ssIGZpcnN0IHRoaW5nIEkndmUgZm9yZ290dGVuIGlzIHRoYXQg dGhlIGZiZGV2IGNtYSBoZWxwZXIgZG9lc24ndCBjYWxsCj4gbW9kZV9jb25maWctPmZ1bmNzLT5m Yl9jcmVhdGUgYW5kIHNvIGdldHMgdGhlIHdyb25nIGZiLT5mdW5jcy4gT25lIHRoaW5nCj4gSSd2 ZSBwb25kZXJlZCBmb3IgZGlmZmVyZW50IHJlYXNvbnMgbGF0ZWx5IGlzIHdoZXRoZXIgdGhlIGZi ZGV2IGVtdWxhdGlvbgo+IHNob3VsZCBncm93IGEgZmFrZSBkcm1fZmlsZSBmcHJpdi4gV2l0aCB0 aGF0IHdlIGNvdWxkIGp1c3QgYWxsb2NhdGUgYSBkdW1iCj4gYnVmZmVyIGFuZCBwYXNzIGl0IHRv IC0+ZmJfY3JlYXRlIChpdCB0YWtlcyBhIGhhbmRsZSwgd2hpY2ggbWVhbnMgd2UgbmVlZAo+IGEg ZmFrZSBmcHJpdikuIEkgdGhpbmsgdGhhdCB3b3VsZCBmdWxseSBkZW1pZGxheWVyIGNtYSBoZWxw ZXJzLiBPciB3ZQo+IGNyZWF0ZSBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gZG8gLT5mYl9jcmVh dGUgYnV0IHdpdGggZ2VtIG9iamVjdHMKPiBpbnN0ZWFkIG9mIGlkcyBsaWtlIHdoYXQgd2UndmUg ZG9uZSBmb3IgdmM0LiBPciB3ZSBqdXN0IG9wZW4tY29kZSBpdCBhbGwuCj4KPiBOb3Qgc3VyZSB3 aGljaCBpcyBiZXR0ZXIgaGVyZS4KPgo+PiAgICAgICAgICBpbmZvID0gZmJfaGVscGVyLT5mYmRl djsKPj4gICAgICAgICAgLyoKPj4gICAgICAgICAgICogZmJfZGVmZXJyZWRfaW8gcmVxdWlyZXMg YSB2bWFsbG9jIGFkZHJlc3Mgb3IgYSBwaHlzaWNhbCBhZGRyZXNzLgo+PiAgICAgICAgICAgKiBk cm1fZmJkZXZfY21hX2NyZWF0ZSgpIHNldHMgc21lbV9zdGFydCB0byB0aGUgZG1hIGFkZHJlc3Mg d2hpY2gKPj4gaXMKPj4gICAgICAgICAgICogYSBkZXZpY2UgYWRkcmVzcy4gVGhpcyBpc24ndCBh bHdheXMgYSBwaHlzaWNhbCBhZGRyZXNzLgo+PiAgICAgICAgICAgKi8KPj4gICAgICAgICAgaW5m by0+c21lbV9zdGFydCA9IHBhZ2VfdG9fcGh5cyh2aXJ0X3RvX3BhZ2UoaW5mby0+c2NyZWVuX2J1 ZmZlcikpOwo+Pgo+PiAgICAgICAgICAqZmJvcHMgPSAqaW5mby0+ZmJvcHM7Cj4+ICAgICAgICAg IGluZm8tPmZib3BzID0gZmJvcHM7Cj4+Cj4+ICAgICAgICAgIGluZm8tPmZiZGVmaW8gPSBmYmRl ZmlvOwo+PiAgICAgICAgICBmYmRlZmlvLT5kZWZlcnJlZF9pbyA9IGRybV9mYl9oZWxwZXJfZGVm ZXJyZWRfaW87Cj4+ICAgICAgICAgIGZiZGVmaW8tPmRlbGF5ID0gbXNlY3NfdG9famlmZmllcyh0 ZGV2LT5kZWZlcnJlZC0+ZGVmZXJfbXMpOwo+PiAgICAgICAgICAvKiBkZWxheT0wIGlzIHR1cm5l ZCBpbnRvIGRlbGF5PUhaLCBzbyB1c2UgMSBhcyBhIG1pbmltdW0gKi8KPj4gICAgICAgICAgaWYg KCFmYmRlZmlvLT5kZWxheSkKPj4gICAgICAgICAgICAgICAgICBmYmRlZmlvLT5kZWxheSA9IDE7 Cj4+ICAgICAgICAgIGZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7Cj4+Cj4+ICAgICAgICAgIHJl dHVybiAwOwo+PiB9Cj4+Cj4+IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5j cyB0aW55ZHJtX2ZiX2hlbHBlcl9mdW5jcyA9IHsKPj4gICAgICAgICAgLmZiX3Byb2JlID0gdGlu eWRybV9mYmRldl9jcmVhdGUsCj4+IH07Cj4+Cj4+IGludCB0aW55ZHJtX2ZiZGV2X2luaXQoc3Ry dWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+PiB7Cj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSB0ZGV2LT5iYXNlOwo+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAq Y21hOwo+Pgo+PiAgICAgICAgICBjbWEgPSBkcm1fZmJkZXZfY21hX2luaXRfd2l0aF9mdW5jcyhk ZXYsIDE2LAo+PiBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+PiBkZXYtPm1vZGVfY29uZmln Lm51bV9jb25uZWN0b3IsCj4+ICZ0aW55ZHJtX2ZiX2hlbHBlcl9mdW5jcyk7Cj4+ICAgICAgICAg IGlmIChJU19FUlIoY21hKSkKPj4gICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjbWEp Owo+IEkgd2FzIHdvbmRlcmluZyB3aGV0aGVyIHdlIGNvdWxkbid0IGF2b2lkIHRoZSBfd2l0aF9m dW5jcyBoZXJlIGJ5IHNldHRpbmcKPiB1cCBmYmRlZmlvIGlmZiAtPmRpcnR5IGlzIHNldC4gVGhl biB5b3UgY291bGQgYWRkIHRoZSBnZW5lcmljIGRlZmlvIHNldHVwCj4gY29kZSB0byBkcm1fZmJk ZXZfY21hX2NyZWF0ZSBhZnRlciBoZWxwZXItPmZiIGlzIGFsbG9jYXRlZCwgYnV0IG9ubHkgaWYK PiBoZWxwZXItPmZiLT5mdW5jcy0+ZGlydHkgaXMgc2V0LiBNYWtlcyBmb3IgYSBiaXQgbGVzcyBi b2lsZXJwbGF0ZS4KPgo+IE9yIGRpZCBJIG1pc3Mgc29tZXRoaW5nPwoKSSBkb24ndCBzZWUgaG93 IEkgY2FuIGF2b2lkIGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNzKCk6CgpzdGF0aWMgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB0aW55ZHJtX2ZiX2NtYV9mdW5jcyA9IHsKICAgICAg ICAgLmRlc3Ryb3kgICAgICAgID0gZHJtX2ZiX2NtYV9kZXN0cm95LAogICAgICAgICAuY3JlYXRl X2hhbmRsZSAgPSBkcm1fZmJfY21hX2NyZWF0ZV9oYW5kbGUsCiAgICAgICAgIC5kaXJ0eSAgICAg ICAgICA9IHRpbnlkcm1fZmJkZXZfZGlydHksCn07CgpzdGF0aWMgaW50IHRpbnlkcm1fZmJkZXZf Y3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCnsK ICAgICAgICAgcmV0dXJuIGRybV9mYmRldl9jbWFfY3JlYXRlX3dpdGhfZnVuY3MoaGVscGVyLCBz aXplcywKJnRpbnlkcm1fZmJfY21hX2Z1bmNzKTsKfQoKc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f ZmJfaGVscGVyX2Z1bmNzIHRpbnlkcm1fZmJfaGVscGVyX2Z1bmNzID0gewogICAgICAgICAuZmJf cHJvYmUgPSB0aW55ZHJtX2ZiZGV2X2NyZWF0ZSwKfTsKCmludCB0aW55ZHJtX2ZiZGV2X2luaXQo c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQp7CiAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSB0ZGV2LT5iYXNlOwogICAgICAgICBzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqY21hOwoK ICAgICAgICAgY21hID0gZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhfZnVuY3MoZGV2LCAxNiwKZGV2 LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAom dGlueWRybV9mYl9oZWxwZXJfZnVuY3MpOwogICAgICAgICBpZiAoSVNfRVJSKGNtYSkpCiAgICAg ICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoY21hKTsKCiAgICAgICAgIHRkZXYtPmZiZGV2X2Nt YSA9IGNtYTsKCiAgICAgICAgIHJldHVybiAwOwp9CgoKVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNr IHNvIGZhciBEYW5pZWwsIEkgcXVpdGUgbGlrZSB0aGUgZGlyZWN0aW9uIHRoaXMgaXMKdGFraW5n LiBJJ2xsIHRyeSBhbmQgaW1wbGVtZW50IGl0IGluIGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNo c2V0LgoKCk5vcmFsZi4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=