From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v2 7/8] drm/fb-helper: Add generic fbdev emulation Date: Tue, 9 Jan 2018 11:46:50 +0100 Message-ID: <20180109104650.GT26573@phenom.ffwll.local> References: <20180103222110.45855-1-noralf@tronnes.org> <20180103222110.45855-8-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180103222110.45855-8-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, laurent.pinchart@ideasonboard.com List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKYW4gMDMsIDIwMTggYXQgMTE6MjE6MDlQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IEFkZCBnZW5lcmljIGZiZGV2IGVtdWxhdGlvbiB3aGljaCB1c2VzIGEgZHJtX2Zp bGUgdG8gZ2V0IGEgZHVtYl9idWZmZXIKPiBhbmQgZHJtX2ZyYW1lYnVmZmVyLiBUaGUgYnVmZmVy IGlzIGV4cG9ydGVkIGFuZCB2bWFwL21tYXAgY2FsbGVkIG9uCj4gdGhlIGRtYS1idWYuCj4gCj4g U2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgfCAzMDEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQo+ICBpbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgg ICAgIHwgIDMzICsrKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzMzIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxw ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiBpbmRleCBmOWRjYzdhNTc2 MWYuLjI3MGZmNmRjODA0NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hl bHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+IEBAIC0zMCwx MiArMzAsMTUgQEAKPiAgI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZt dAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Rt YS1idWYuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICAjaW5jbHVkZSA8bGludXgv c3lzcnEuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXV0 aC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2R1 bWJfYnVmZmVycy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiAgI2luY2x1 ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+ Cj4gQEAgLTE5NTEsNyArMTk1NCw5IEBAIHN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVf ZmJfcHJvYmUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCWlmIChmYl9oZWxw ZXItPmZiZGV2LT5mYm9wcy0+ZmJfb3BlbiA9PSBkcm1fZmJfaGVscGVyX2ZiX29wZW4pCj4gIAkJ YXRvbWljX3NldCgmZmJfaGVscGVyLT5vcGVuX2NvdW50LCAwKTsKPiAgCj4gLQlzdHJjcHkoZmJf aGVscGVyLT5mYi0+Y29tbSwgIltmYmNvbl0iKTsKPiArCWlmIChmYl9oZWxwZXItPmZiKQo+ICsJ CXN0cmNweShmYl9oZWxwZXItPmZiLT5jb21tLCAiW2ZiY29uXSIpOwo+ICsKPiAgCXJldHVybiAw Owo+ICB9Cj4gIAo+IEBAIC0yOTc1LDYgKzI5ODAsMzAwIEBAIHZvaWQgZHJtX2ZiX2hlbHBlcl9v dXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIH0KPiAgRVhQT1JU X1NZTUJPTChkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2NoYW5nZWQpOwo+ICAKPiArc3RhdGlj IHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZGVmaW8gPSB7Cj4g KwkuZGVsYXkJCT0gSFogLyAyMCwKPiArCS5kZWZlcnJlZF9pbwk9IGRybV9mYl9oZWxwZXJfZGVm ZXJyZWRfaW8sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfZ2VuZXJpY19h bGxvY19idWYoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiArewo+ICsJc3RydWN0 IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcyA9ICZmYl9oZWxwZXItPnNpemVzOwo+ ICsJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iIGR1bWJfYXJncyA9IHsgMCB9Owo+ICsJc3Ry dWN0IGRybV9wcmltZV9oYW5kbGUgcHJpbWVfYXJncyA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9t b2RlX2ZiX2NtZDIgZmJfYXJncyA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGZiX2hlbHBlci0+ZGV2Owo+ICsJc3RydWN0IGZiX2luZm8gKmZiaSA9IGZiX2hlbHBlci0+ZmJk ZXY7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiArCXN0cnVjdCBkbWFfYnVmICpk bWFfYnVmOwo+ICsJc3RydWN0IGRybV9maWxlICpmaWxlOwo+ICsJdm9pZCAqdmFkZHI7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWZpbGUgPSBkcm1fZmlsZV9hbGxvYyhkZXYtPnByaW1hcnkpOwo+ICsJ aWYgKElTX0VSUihmaWxlKSkKPiArCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiArCj4gKwlkcm1f ZHJvcG1hc3Rlcl9pb2N0bChkZXYsIE5VTEwsIGZpbGUpOwoKSG0gLi4uLiB3aHkgZG8gd2UgbmVl ZCB0aGlzPyBGZWVscyBhIGJpdCBsaWtlIGRybV9maWxlX2FsbG9jIHNob3VsZG4ndCBkbwp0aGUg ZW50aXJlIG1hc3RlciBkYW5jZSBmb3IgdXMgLi4uCgpPdGhlcndpc2UgdGhpcyBsb29rcyBhd2Vz b21lLCBJIHJlYWxseSBsaWtlIGl0LgoKUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmll bC52ZXR0ZXJAZmZ3bGwuY2g+Ci1EYW5pZWwKCj4gKwo+ICsJZHVtYl9hcmdzLndpZHRoID0gc2l6 ZXMtPnN1cmZhY2Vfd2lkdGg7Cj4gKwlkdW1iX2FyZ3MuaGVpZ2h0ID0gc2l6ZXMtPnN1cmZhY2Vf aGVpZ2h0Owo+ICsJZHVtYl9hcmdzLmJwcCA9IHNpemVzLT5zdXJmYWNlX2JwcDsKPiArCXJldCA9 IGRybV9tb2RlX2NyZWF0ZV9kdW1iX2lvY3RsKGRldiwgJmR1bWJfYXJncywgZmlsZSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWVfZmlsZTsKPiArCj4gKwlmYl9hcmdzLndpZHRoID0g ZHVtYl9hcmdzLndpZHRoOwo+ICsJZmJfYXJncy5oZWlnaHQgPSBkdW1iX2FyZ3MuaGVpZ2h0Owo+ ICsJZmJfYXJncy5waXhlbF9mb3JtYXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVz LT5zdXJmYWNlX2JwcCwKPiArCQkJCQkJCSBzaXplcy0+c3VyZmFjZV9kZXB0aCk7Cj4gKwlmYl9h cmdzLmhhbmRsZXNbMF0gPSBkdW1iX2FyZ3MuaGFuZGxlOwo+ICsJZmJfYXJncy5waXRjaGVzWzBd ID0gZHVtYl9hcmdzLnBpdGNoOwo+ICsJcmV0ID0gZHJtX21vZGVfYWRkZmIyKGRldiwgJmZiX2Fy Z3MsIGZpbGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9mcmVlX2ZpbGU7Cj4gKwo+ICsJ ZmIgPSBkcm1fZnJhbWVidWZmZXJfbG9va3VwKGRldiwgZmlsZSwgZmJfYXJncy5mYl9pZCk7Cj4g KwlpZiAoIWZiKSB7Cj4gKwkJcmV0ID0gLUVOT0VOVDsKPiArCQlnb3RvIGVycl9mcmVlX2ZpbGU7 Cj4gKwl9Cj4gKwo+ICsJLyogZHJvcCB0aGUgcmVmZXJlbmNlIHdlIHBpY2tlZCB1cCBpbiBmcmFt ZWJ1ZmZlciBsb29rdXAgKi8KPiArCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ICsKPiArCXN0 cmNweShmYi0+Y29tbSwgIltmYmNvbl0iKTsKPiArCj4gKwlwcmltZV9hcmdzLmhhbmRsZSA9IGR1 bWJfYXJncy5oYW5kbGU7Cj4gKwlyZXQgPSBkcm1fcHJpbWVfaGFuZGxlX3RvX2ZkX2lvY3RsKGRl diwgJnByaW1lX2FyZ3MsIGZpbGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9mcmVlX2Zp bGU7Cj4gKwo+ICsJZG1hX2J1ZiA9IGRtYV9idWZfZ2V0KHByaW1lX2FyZ3MuZmQpOwo+ICsJaWYg KFdBUk5fT04oSVNfRVJSKGRtYV9idWYpKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoZG1hX2J1Zik7 Cj4gKwkJZ290byBlcnJfZnJlZV9maWxlOwo+ICsJfQo+ICsKPiArCXZhZGRyID0gZG1hX2J1Zl92 bWFwKGRtYV9idWYpOwo+ICsJaWYgKCF2YWRkcikgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJ Z290byBlcnJfcHV0X2RtYWJ1ZjsKPiArCX0KPiArCj4gKwlpZiAoZmItPmZ1bmNzLT5kaXJ0eSkg ewo+ICsJCWZiaS0+ZmJkZWZpbyA9ICZkcm1fZmJfaGVscGVyX2dlbmVyaWNfZGVmaW87Cj4gKwkJ ZmJfZGVmZXJyZWRfaW9faW5pdChmYmkpOwo+ICsJfQo+ICsKPiArCWZiaS0+c2NyZWVuX3NpemUg PSBmYi0+aGVpZ2h0ICogZmItPnBpdGNoZXNbMF07Cj4gKwlmYmktPmZpeC5zbWVtX2xlbiA9IGZi aS0+c2NyZWVuX3NpemU7Cj4gKwlmYmktPnNjcmVlbl9idWZmZXIgPSB2YWRkcjsKPiArCj4gKwlm Yl9oZWxwZXItPmRtYV9idWYgPSBkbWFfYnVmOwo+ICsJZmJfaGVscGVyLT5maWxlID0gZmlsZTsK PiArCj4gKwltdXRleF9sb2NrKCZmYl9oZWxwZXItPmxvY2spOwo+ICsJZmJfaGVscGVyLT5mYiA9 IGZiOwo+ICsJZHJtX3NldHVwX2NydGNzX2ZiKGZiX2hlbHBlcik7Cj4gKwltdXRleF91bmxvY2so JmZiX2hlbHBlci0+bG9jayk7Cj4gKwo+ICsJLyogRmlyc3QgdGltZSBzZXR1cCAqLwo+ICsJaWYg KCFmYmktPnZhci5iaXRzX3Blcl9waXhlbCkgewo+ICsJCXN0cnVjdCBmYl92aWRlb21vZGUgbW9k ZTsKPiArCj4gKwkJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRjaGVzWzBdLCBm Yi0+Zm9ybWF0LT5kZXB0aCk7Cj4gKwkJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGZiX2hl bHBlciwgc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVpZ2h0KTsKPiArCj4gKwkJLyogRHJv cCB0aGUgbW9kZSBhZGRlZCBieSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpICovCj4gKwkJZmJfZGVz dHJveV9tb2RlbGlzdCgmZmJfaGVscGVyLT5mYmRldi0+bW9kZWxpc3QpOwo+ICsKPiArCQlmYl92 YXJfdG9fdmlkZW9tb2RlKCZtb2RlLCAmZmJpLT52YXIpOwo+ICsJCWZiX2FkZF92aWRlb21vZGUo Jm1vZGUsICZmYmktPm1vZGVsaXN0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vy cl9wdXRfZG1hYnVmOgo+ICsJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7Cj4gK2Vycl9mcmVlX2ZpbGU6 Cj4gKwlkcm1fZmlsZV9mcmVlKGZpbGUpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfZ2VuZXJpY19mcmVlX2J1ZihzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyKQo+ICt7Cj4gKwltdXRleF9sb2NrKCZmYl9oZWxwZXItPmxvY2sp Owo+ICsJZmJfaGVscGVyLT5mYiA9IE5VTEw7Cj4gKwlkcm1fc2V0dXBfY3J0Y3NfZmIoZmJfaGVs cGVyKTsKPiArCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKPiArCj4gKwlpZiAoZmJf aGVscGVyLT5mYmRldi0+ZmJkZWZpbykgewo+ICsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygm ZmJfaGVscGVyLT5mYmRldi0+ZGVmZXJyZWRfd29yayk7Cj4gKwkJY2FuY2VsX3dvcmtfc3luYygm ZmJfaGVscGVyLT5kaXJ0eV93b3JrKTsKPiArCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGZiX2hl bHBlci0+ZmJkZXYpOwo+ICsJfQo+ICsKPiArCWRtYV9idWZfdnVubWFwKGZiX2hlbHBlci0+ZG1h X2J1ZiwgZmJfaGVscGVyLT5mYmRldi0+c2NyZWVuX2J1ZmZlcik7Cj4gKwlkbWFfYnVmX3B1dChm Yl9oZWxwZXItPmRtYV9idWYpOwo+ICsJZHJtX2ZpbGVfZnJlZShmYl9oZWxwZXItPmZpbGUpOwo+ ICsKPiArCWZiX2hlbHBlci0+ZmJkZXYtPnNjcmVlbl9idWZmZXIgPSBOVUxMOwo+ICsJZmJfaGVs cGVyLT5kbWFfYnVmID0gTlVMTDsKPiArCWZiX2hlbHBlci0+ZmlsZSA9IE5VTEw7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9nZW5lcmljX2ZiX29wZW4oc3RydWN0IGZiX2lu Zm8gKmluZm8sIGludCB1c2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyID0gaW5mby0+cGFyOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZmJfaGVscGVy X2ZiX29wZW4oaW5mbywgdXNlcik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJaWYgKCFmYl9oZWxwZXItPmZiZGV2LT5zY3JlZW5fYnVmZmVyKSB7Cj4gKwkJLyoKPiArCQkg KiBFeHBvcnRpbmcgYSBidWZmZXIgdG8gZ2V0IGEgdmlydHVhbCBhZGRyZXNzIHJlc3VsdHMgaW4K PiArCQkgKiBkbWEtYnVmIHBpbm5pbmcgdGhlIGRyaXZlciBtb2R1bGUuIFRoaXMgbWVhbnMgdGhh dCB3ZSBoYXZlCj4gKwkJICogdG8gZGVmZXIgdGhpcyB0byBvcGVuL2Nsb3NlIGluIG9yZGVyIHRv IHVubG9hZCB0aGUgZHJpdmVyCj4gKwkJICogbW9kdWxlLgo+ICsJCSAqLwo+ICsJCXJldCA9IGRy bV9mYl9oZWxwZXJfZ2VuZXJpY19hbGxvY19idWYoZmJfaGVscGVyKTsKPiArCQlpZiAocmV0KSB7 Cj4gKwkJCURSTV9FUlJPUigiZmJkZXY6IEZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXI6ICVkXG4i LCByZXQpOwo+ICsJCQlkcm1fZmJfaGVscGVyX2ZiX3JlbGVhc2UoaW5mbywgdXNlcik7Cj4gKwkJ CXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRybV9mYl9oZWxwZXJfZ2VuZXJpY19mYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZv ICppbmZvLCBpbnQgdXNlcikKPiArewo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl ciA9IGluZm8tPnBhcjsKPiArCj4gKwlkcm1fZmJfaGVscGVyX2ZiX3JlbGVhc2UoaW5mbywgdXNl cik7Cj4gKwo+ICsJaWYgKCFhdG9taWNfcmVhZCgmZmJfaGVscGVyLT5vcGVuX2NvdW50KSkKPiAr CQlkcm1fZmJfaGVscGVyX2dlbmVyaWNfZnJlZV9idWYoZmJfaGVscGVyKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZmJfbW1h cChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPiArCQkJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCj4gK3sKPiArCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7 Cj4gKwo+ICsJcmV0dXJuIGRtYV9idWZfbW1hcChmYl9oZWxwZXItPmRtYV9idWYsIHZtYSwgMCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGRybV9mYl9oZWxwZXJfZ2VuZXJpY19m YmRldl9vcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gKwlEUk1fRkJfSEVMUEVS X0RFRkFVTFRfT1BTLAo+ICsJLmZiX29wZW4JPSBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZmJfb3Bl biwKPiArCS5mYl9yZWxlYXNlCT0gZHJtX2ZiX2hlbHBlcl9nZW5lcmljX2ZiX3JlbGVhc2UsCj4g KwkuZmJfbW1hcAk9IGRybV9mYl9oZWxwZXJfZ2VuZXJpY19mYl9tbWFwLAo+ICsJLmZiX3JlYWQJ PSBkcm1fZmJfaGVscGVyX3N5c19yZWFkLAo+ICsJLmZiX3dyaXRlCT0gZHJtX2ZiX2hlbHBlcl9z eXNfd3JpdGUsCj4gKwkuZmJfZmlsbHJlY3QJPSBkcm1fZmJfaGVscGVyX3N5c19maWxscmVjdCwK PiArCS5mYl9jb3B5YXJlYQk9IGRybV9mYl9oZWxwZXJfc3lzX2NvcHlhcmVhLAo+ICsJLmZiX2lt YWdlYmxpdAk9IGRybV9mYl9oZWxwZXJfc3lzX2ltYWdlYmxpdCwKPiArfTsKPiArCj4gK3N0YXRp YyBpbnQgZHJtX2ZiX2hlbHBlcl9nZW5lcmljX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXpl ICpzaXplcykKPiArewo+ICsJc3RydWN0IGZiX29wcyAqZmJvcHM7Cj4gKwlzdHJ1Y3QgZmJfaW5m byAqZmJpOwo+ICsKPiArCURSTV9ERUJVR19LTVMoInN1cmZhY2Ugd2lkdGgoJWQpLCBoZWlnaHQo JWQpIGFuZCBicHAoJWQpXG4iLAo+ICsJCSAgICAgIHNpemVzLT5zdXJmYWNlX3dpZHRoLCBzaXpl cy0+c3VyZmFjZV9oZWlnaHQsCj4gKwkJICAgICAgc2l6ZXMtPnN1cmZhY2VfYnBwKTsKPiArCj4g KwlmYl9oZWxwZXItPnNpemVzID0gKnNpemVzOwo+ICsKPiArCS8qCj4gKwkgKiBmYl9kZWZlcnJl ZF9pb19jbGVhbnVwKCkgY2xlYXJzICZmYm9wcy0+ZmJfbW1hcCBzbyBhIHBlciBpbnN0YW5jZQo+ ICsJICogdmVyc2lvbiBpcyBuZWNlc3NhcnkuIFdlIGRvIGl0IGZvciBhbGwgdXNlcnMgc2luY2Ug d2UgZG9uJ3Qga25vdwo+ICsJICogeWV0IGlmIHRoZSBmYiBoYXMgYSBkaXJ0eSBjYWxsYmFjay4g VGhpcyBhbHNvIGdpdmVzIHVzIHRoZQo+ICsJICogb3Bwb3J0dW5pdHkgdG8gc2V0IHRoZSBjb3Jy ZWN0IG93bmVyLgo+ICsJICovCj4gKwlmYm9wcyA9IGt6YWxsb2Moc2l6ZW9mKCpmYm9wcyksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFmYm9wcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkq ZmJvcHMgPSBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZmJkZXZfb3BzOwo+ICsJZmJvcHMtPm93bmVy ID0gZmJfaGVscGVyLT5kZXYtPmRyaXZlci0+Zm9wcy0+b3duZXI7Cj4gKwo+ICsJZmJpID0gZHJt X2ZiX2hlbHBlcl9hbGxvY19mYmkoZmJfaGVscGVyKTsKPiArCWlmIChJU19FUlIoZmJpKSkgewo+ ICsJCWtmcmVlKGZib3BzKTsKPiArCQlyZXR1cm4gUFRSX0VSUihmYmkpOwo+ICsJfQo+ICsKPiAr CWZiaS0+cGFyID0gZmJfaGVscGVyOwo+ICsJZmJpLT5mYm9wcyA9IGZib3BzOwo+ICsJc3RyY3B5 KGZiaS0+Zml4LmlkLCAiZ2VuZXJpYyIpOwo+ICsKPiArCS8qIFRoZSByZXN0IG9mIHRoZSBzZXR1 cCBpcyBkZWZlcnJlZCB0byBmYl9vcGVuICovCj4gKwo+ICsJYXRvbWljX3NldCgmZmJfaGVscGVy LT5vcGVuX2NvdW50LCAwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZHJtX2ZiX2hlbHBlcl9nZW5lcmljX3JlbGVhc2Uoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlcikKPiArewo+ICsJc3RydWN0IGZiX29wcyAqZmJvcHMgPSBmYl9oZWxwZXItPmZiZGV2 LT5mYm9wczsKPiArCj4gKwlkcm1fZmJfaGVscGVyX2ZpbmkoZmJfaGVscGVyKTsKPiArCWtmcmVl KGZiX2hlbHBlcik7Cj4gKwlrZnJlZShmYm9wcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZnVuY3MgPSB7 Cj4gKwkuZmJfcHJvYmUJPSBkcm1fZmJfaGVscGVyX2dlbmVyaWNfcHJvYmUsCj4gKwkucmVzdG9y ZQk9IGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlX3VubG9ja2VkLAo+ICsJLmhvdHBs dWdfZXZlbnQJPSBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQsCj4gKwkudW5yZWdpc3Rlcgk9 IGRybV9mYl9oZWxwZXJfdW5yZWdpc3Rlcl9mYmksCj4gKwkucmVsZWFzZQk9IGRybV9mYl9oZWxw ZXJfZ2VuZXJpY19yZWxlYXNlLAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGRybV9mYl9oZWxwZXJf Z2VuZXJpY19mYmRldl9zZXR1cCgpIC0gU2V0dXAgZ2VuZXJpYyBmYmRldiBlbXVsYXRpb24KPiAr ICogQGRldjogRFJNIGRldmljZQo+ICsgKiBAcHJlZmVycmVkX2JwcDogUHJlZmVycmVkIGJpdHMg cGVyIHBpeGVsIGZvciB0aGUgZGV2aWNlLgo+ICsgKiAgICAgICAgICAgICAgICAgQGRldi0+bW9k ZV9jb25maWcucHJlZmVycmVkX2RlcHRoIGlzIHVzZWQgaWYgdGhpcyBpcyB6ZXJvLgo+ICsgKiBA bWF4X2Nvbm5fY291bnQ6IE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3RvcnMuCj4gKyAqICAgICAg ICAgICAgICAgICAgQGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciBpcyB1c2VkIGlmIHRo aXMgaXMgemVyby4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGdlbmVyaWMgZmJk ZXYgZW11bGF0aW9uIGZvciBkcml2ZXJzIHRoYXQgc3VwcG9ydHMKPiArICogZHVtYiBidWZmZXJz IHdoaWNoIGNhbiBiZSBleHBvcnRlZC4gVGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8gZG8gYW55 dGhpbmcKPiArICogZWxzZSB0aGFuIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgcmVzdG9yZSwgaG90 cGx1ZyBldmVudHMgYW5kIHRlYXJkb3duIGFyZQo+ICsgKiBhbGwgdGFrZW4gY2FyZSBvZi4KPiAr ICoKPiArICogUmV0dXJuczoKPiArICogWmVybyBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9y IGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1fZmJfaGVscGVyX2dlbmVyaWNfZmJk ZXZfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSAgICAgIHVuc2lnbmVkIGlu dCBwcmVmZXJyZWRfYnBwLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+ICsJaW50IHJldDsK PiArCj4gKwlpZiAoIWRybV9mYmRldl9lbXVsYXRpb24pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ ZmJfaGVscGVyID0ga3phbGxvYyhzaXplb2YoKmZiX2hlbHBlciksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFmYl9oZWxwZXIpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gZHJtX2Zi X2hlbHBlcl9mYmRldl9zZXR1cChkZXYsIGZiX2hlbHBlciwKPiArCQkJCQkmZHJtX2ZiX2hlbHBl cl9nZW5lcmljX2Z1bmNzLAo+ICsJCQkJCXByZWZlcnJlZF9icHAsIG1heF9jb25uX2NvdW50KTsK PiArCWlmIChyZXQpIHsKPiArCQlrZnJlZShmYl9oZWxwZXIpOwo+ICsJCXJldHVybiByZXQ7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVy X2dlbmVyaWNfZmJkZXZfc2V0dXApOwo+ICsKPiAgLyogVGhlIEtjb25maWcgRFJNX0tNU19IRUxQ RVIgc2VsZWN0cyBGUkFNRUJVRkZFUl9DT05TT0xFIChpZiAhRVhQRVJUKQo+ICAgKiBidXQgdGhl IG1vZHVsZSBkb2Vzbid0IGRlcGVuZCBvbiBhbnkgZmIgY29uc29sZSBzeW1ib2xzLiAgQXQgbGVh c3QKPiAgICogYXR0ZW1wdCB0byBsb2FkIGZiY29uIHRvIGF2b2lkIGxlYXZpbmcgdGhlIHN5c3Rl bSB3aXRob3V0IGEgdXNhYmxlIGNvbnNvbGUuCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAo+IGluZGV4IDM4NWY5 NjdjMzU1Mi4uYzY5NDBhYjZmZmFjIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9o ZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAo+IEBAIC0yNzksNiAr Mjc5LDI4IEBAIHN0cnVjdCBkcm1fZmJfaGVscGVyIHsKPiAgCSAqIGluaXRpYWwgdmFsdWUgdG8g MCB0aGVtc2VsdmVzLgo+ICAJICovCj4gIAlhdG9taWNfdCBvcGVuX2NvdW50Owo+ICsKPiArCS8q Kgo+ICsJICogQGZpbGU6Cj4gKwkgKgo+ICsJICogT3B0aW9uYWwgRFJNIGZpbGUuIFVzZWQgYnkg dGhlIGdlbmVyaWMgZmJkZXYgY29kZS4KPiArCSAqLwo+ICsJc3RydWN0IGRybV9maWxlICpmaWxl Owo+ICsKPiArCS8qKgo+ICsJICogQGRtYV9idWY6Cj4gKwkgKgo+ICsJICogT3B0aW9uYWwgcG9p bnRlciB0byBhIERNQSBidWZmZXIgb2JqZWN0Lgo+ICsJICogVXNlZCBieSB0aGUgZ2VuZXJpYyBm YmRldiBjb2RlLgo+ICsJICovCj4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKPiArCj4gKwkv KioKPiArCSAqIEBzaXplczoKPiArCSAqCj4gKwkgKiBPcHRpb25hbCBzdXJmYWNlIHNpemVzLiBV c2VkIGJ5IHRoZSBnZW5lcmljIGZiZGV2IGNvZGUuCj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fZmJf aGVscGVyX3N1cmZhY2Vfc2l6ZSBzaXplczsKPiAgfTsKPiAgCj4gIC8qKgo+IEBAIC0zODAsNiAr NDAyLDEwIEBAIHZvaWQgZHJtX2ZiX2hlbHBlcl9mYmRldl90ZWFyZG93bihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKPiAgCj4gIHZvaWQgZHJtX2ZiX2hlbHBlcl9sYXN0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gIHZvaWQgZHJtX2ZiX2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFuZ2Vk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICsKPiAraW50IGRybV9mYl9oZWxwZXJfZ2VuZXJp Y19mYmRldl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJICAgICAgdW5zaWdu ZWQgaW50IHByZWZlcnJlZF9icHAsCj4gKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5f Y291bnQpOwo+ICAjZWxzZQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2ZiX2hlbHBlcl9wcmVw YXJlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCQkJc3RydWN0IGRybV9mYl9oZWxwZXIg KmhlbHBlciwKPiBAQCAtNjI0LDYgKzY1MCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Zi X2hlbHBlcl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsK PiAgfQo+ICAKPiArc3RhdGljIGlubGluZSBpbnQKPiArZHJtX2ZiX2hlbHBlcl9nZW5lcmljX2Zi ZGV2X3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkgIHVuc2lnbmVkIGludCBw cmVmZXJyZWRfYnBwLAo+ICsJCQkJICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQpCj4gK3sK PiArCXJldHVybiAwOwo+ICt9Cj4gICNlbmRpZgo+ICAKPiAgc3RhdGljIGlubGluZSBpbnQKPiAt LSAKPiAyLjE0LjIKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRl bCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK