From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 09/11] drm/fbdevdrm: Add primary plane Date: Tue, 26 Mar 2019 10:17:42 +0100 Message-ID: <20190326091744.11542-10-tzimmermann@suse.de> References: <20190326091744.11542-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDDBD6E7B4 for ; Tue, 26 Mar 2019 09:17:57 +0000 (UTC) In-Reply-To: <20190326091744.11542-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, b.zolnierkie@samsung.com Cc: linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fbW9kZXMuYyAgIHwgIDQyICsrCiBkcml2 ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fbW9kZXMuaCAgIHwgICA3ICsKIGRyaXZlcnMv Z3B1L2RybS9mYmRldmRybS9mYmRldmRybV9tb2Rlc2V0LmMgfCAgIDkgKy0KIGRyaXZlcnMvZ3B1 L2RybS9mYmRldmRybS9mYmRldmRybV9tb2Rlc2V0LmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJt L2ZiZGV2ZHJtL2ZiZGV2ZHJtX3ByaW1hcnkuYyB8IDQ5OCArKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX3ByaW1hcnkuaCB8ICAyNyArKwogNyBm aWxlcyBjaGFuZ2VkLCA1ODUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9wcmltYXJ5LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fcHJpbWFy eS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlCmluZGV4IDJjYTkwNmEzMjU4Yi4uNTUwNzE1 MmQ4MTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQCBmYmRl dmRybS15IDo9IGZiZGV2ZHJtX2JvLm8gXAogCSAgICAgIGZiZGV2ZHJtX2Zvcm1hdC5vIFwKIAkg ICAgICBmYmRldmRybV9tb2Rlcy5vIFwKIAkgICAgICBmYmRldmRybV9tb2Rlc2V0Lm8gXAorCSAg ICAgIGZiZGV2ZHJtX3ByaW1hcnkubyBcCiAJICAgICAgZmJkZXZkcm1fdHRtLm8KIAogb2JqLSQo Q09ORklHX0RSTV9GQkRFVkRSTSkgKz0gZmJkZXZkcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZk cm0vZmJkZXZkcm1fbW9kZXMuYwppbmRleCBiZDNhZDY5MWU3Y2UuLjhkZWE3ZWYzNjlkYyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmMKQEAgLTExLDggKzExLDEy IEBACiAgKi8KIAogI2luY2x1ZGUgImZiZGV2ZHJtX21vZGVzLmgiCisjaW5jbHVkZSA8ZHJtL2Ry bS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBUQVNLX0NPTU1fTEVOIGluIDxk cm0vZHJtX2ZyYW1lYnVmZmVyLmg+ICovCisjaW5jbHVkZSA8ZHJtL2RybV9mcmFtZWJ1ZmZlci5o PgogI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2lu Y2x1ZGUgImZiZGV2ZHJtX2Zvcm1hdC5oIgogCiB2b2lkIGRybV9tb2RlX3VwZGF0ZV9mcm9tX2Zi X3ZpZGVvbW9kZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkgICAgICAgY29u c3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJfbW9kZSkKQEAgLTE1MSwzICsxNTUsNDEgQEAgZmJk ZXZkcm1faW5pdF9mYl92YXJfc2NyZWVuaW5mb19mcm9tX21vZGUoc3RydWN0IGZiX3Zhcl9zY3Jl ZW5pbmZvICpmYl92YXIsCiAJbWVtc2V0KGZiX3ZhciwgMCwgc2l6ZW9mKCpmYl92YXIpKTsKIAlm YmRldmRybV91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9tb2RlKGZiX3ZhciwgbW9kZSk7 CiB9CisKK2ludCBmYmRldmRybV91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mcmFtZWJ1 ZmZlcigKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3Zhciwgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsCisJc2l6ZV90IHZyYW1fc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgd2lkdGgs IHBpdGNoOworCXVpbnQ2NF90IGNwcCwgbGluZXM7CisJaW50IHJldDsKKworCS8qIE91ciB2aXJ0 dWFsIHNjcmVlbiBjb3ZlcnMgYWxsIHRoZSBncmFwaGljcyBtZW1vcnkgKHNhbnMgc29tZQorCSAq IHRyYWlsaW5nIGJ5dGVzKS4gVGhpcyBhbGxvd3MgZm9yIHNldHRpbmcgdGhlIHNjYW5vdXQgYnVm ZmVyJ3MKKwkgKiBhZGRyZXNzIHdpdGggZmJfcGFuX2Rpc3BsYXkoKS4KKwkgKi8KKworCXdpZHRo ID0gZmItPnBpdGNoZXNbMF07CisJY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPmZvcm1h dFswXS5mb3JtYXQsIDApOworCWRvX2Rpdih3aWR0aCwgY3BwKTsKKworCWlmICh3aWR0aCA+IChf X3UzMiktMSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHdvdWxkIG92ZXJmbG93IGZiX3Zhci0+eHJl c192aXJ0dWFsICovCisKKwlwaXRjaCA9IGZiLT5waXRjaGVzWzBdOworCWxpbmVzID0gdnJhbV9z aXplOworCWRvX2RpdihsaW5lcywgcGl0Y2gpOworCisJaWYgKGxpbmVzID4gKF9fdTMyKS0xKQor CQlyZXR1cm4gLUVJTlZBTDsgLyogd291bGQgb3ZlcmZsb3cgZmJfdmFyLT55cmVzX3ZpcnR1YWwg Ki8KKworCWZiX3Zhci0+eHJlc192aXJ0dWFsID0gd2lkdGg7CisJZmJfdmFyLT55cmVzX3ZpcnR1 YWwgPSBsaW5lczsKKworCXJldCA9IGZiZGV2ZHJtX3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5mb19m cm9tX2Zvcm1hdCgKKwkJZmJfdmFyLCBmYi0+Zm9ybWF0WzBdLmZvcm1hdCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0v ZmJkZXZkcm1fbW9kZXMuaAppbmRleCBmODhhODZhODM4NTguLjkyNWVlYTc4ZTNmMCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzLmgKQEAgLTEzLDggKzEzLDExIEBA CiAjaWZuZGVmIEZCREVWRFJNX01PREVTX0gKICNkZWZpbmUgRkJERVZEUk1fTU9ERVNfSAogCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IGRybV9kZXZpY2U7CiBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXI7CiBzdHJ1Y3QgZmJfdmlkZW9t b2RlOwogc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvOwogCkBAIC00Myw0ICs0Niw4IEBAIHZvaWQK IGZiZGV2ZHJtX2luaXRfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9tb2RlKHN0cnVjdCBmYl92YXJf c2NyZWVuaW5mbyAqdmFyLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKTsKIAoraW50IGZiZGV2ZHJtX3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5mb19mcm9tX2ZyYW1l YnVmZmVyKAorCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyLCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwKKwlzaXplX3QgdnJhbV9zaXplKTsKKwogI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fbW9kZXNldC5jIGIvZHJpdmVycy9n cHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzZXQuYwppbmRleCA1ODVmMzQ3OGYxOTAuLjM0 NzNiODVhY2JmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJt X21vZGVzZXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fbW9kZXNl dC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92 dGFibGVzLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KICNpbmNsdWRlIDxs aW51eC9mYi5oPgorI2luY2x1ZGUgImZiZGV2ZHJtX3ByaW1hcnkuaCIKIAogLyoKICAqIENSVEMK QEAgLTM3Niw3ICszNzcsMTMgQEAgaW50IGZiZGV2ZHJtX21vZGVzZXRfaW5pdChzdHJ1Y3QgZmJk ZXZkcm1fbW9kZXNldCAqbW9kZXNldCwKIAkgKiBjb25uZWN0IHRoZW0gd2l0aCBlYWNoIG90aGVy LgogCSAqLwogCi0JcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkZXYsICZtb2Rlc2V0 LT5jcnRjLCBOVUxMLCBOVUxMLAorCXJldCA9IGZiZGV2ZHJtX2luaXRfcHJpbWFyeV9wbGFuZV9m cm9tX2ZiX2luZm8oCisJCSZtb2Rlc2V0LT5wcmltYXJ5X3BsYW5lLCBkZXYsIDAsIGZiX2luZm8p OworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RybV9tb2RlX2NvbmZpZ19jbGVhbnVwOworCisJcmV0 ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkZXYsICZtb2Rlc2V0LT5jcnRjLAorCQkJCQkm bW9kZXNldC0+cHJpbWFyeV9wbGFuZSwgTlVMTCwKIAkJCQkJJmZiZGV2ZHJtX2NydGNfZnVuY3Ms IE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2RybV9tb2RlX2NvbmZpZ19jbGVhbnVwOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX21vZGVzZXQuaCBi L2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9tb2Rlc2V0LmgKaW5kZXggMjFlODdj YWE4MTk2Li5lYzc1MzAxNGFiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRy bS9mYmRldmRybV9tb2Rlc2V0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2 ZHJtX21vZGVzZXQuaApAQCAtMTYsMTEgKzE2LDEzIEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jb25u ZWN0b3IuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2Vu Y29kZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CiAKIHN0cnVjdCBkcm1fZGV2aWNl Owogc3RydWN0IGZiX2luZm87CiAKIHN0cnVjdCBmYmRldmRybV9tb2Rlc2V0IHsKKwlzdHJ1Y3Qg ZHJtX3BsYW5lIHByaW1hcnlfcGxhbmU7CiAJc3RydWN0IGRybV9jcnRjIGNydGM7CiAJc3RydWN0 IGRybV9lbmNvZGVyIGVuY29kZXI7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX3ByaW1hcnkuYyBi L2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9wcmltYXJ5LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44YmE4ZTZiZDFjMTQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fcHJpbWFyeS5jCkBAIC0wLDAg KzEsNDk4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgor ICoKKyAqIE9uZSBwdXJwb3NlIG9mIHRoaXMgZHJpdmVyIGlzIHRvIGFsbG93IGZvciBlYXN5IGNv bnZlcnNpb24gb2YgZnJhbWVidWZmZXIKKyAqIGRyaXZlcnMgdG8gRFJNLiBBcyBhIHNwZWNpYWwg ZXhjZXB0aW9uIHRvIHRoZSBHTlUgR1BMLCB5b3UgYXJlIGFsbG93ZWQgdG8KKyAqIHJlbGljZW5z ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZiB5b3VyIGNob2ljZSBp ZiB5b3UncmUKKyAqIHBvcnRpbmcgYSBmcmFtZWJ1ZmZlciBkcml2ZXIuIEluIG9yZGVyIHRvIGRv IHNvLCB1cGRhdGUgdGhlIFNQRFggbGljZW5zZQorICogaWRlbnRpZmllciB0byB0aGUgbmV3IGxp Y2Vuc2UgYW5kIHJlbW92ZSB0aGlzIGV4Y2VwdGlvbi4KKyAqCisgKiBJZiB5b3UgYWRkIGNvZGUg dG8gdGhpcyBmaWxlLCBwbGVhc2UgZW5zdXJlIHRoYXQgaXQncyBjb21wYXRpYmxlIHdpdGggdGhl CisgKiBzdGF0ZWQgZXhjZXB0aW9uLgorICovCisKKyNpbmNsdWRlICJmYmRldmRybV9wcmltYXJ5 LmgiCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9k cm1fcGxhbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgImZiZGV2ZHJtX2Jv LmgiCisjaW5jbHVkZSAiZmJkZXZkcm1fZm9ybWF0LmgiCisjaW5jbHVkZSAiZmJkZXZkcm1fbW9k ZXMuaCIKKyNpbmNsdWRlICJmYmRldmRybV9tb2Rlc2V0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgZmJk ZXZkcm1fbW9kZXNldCogZmJkZXZkcm1fbW9kZXNldF9vZl9wcmltYXJ5X3BsYW5lKAorCXN0cnVj dCBkcm1fcGxhbmUgKnByaW1hcnlfcGxhbmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwcmlt YXJ5X3BsYW5lLCBzdHJ1Y3QgZmJkZXZkcm1fbW9kZXNldCwKKwkJCSAgICBwcmltYXJ5X3BsYW5l KTsKK30KKworLyoKKyAqIFByaW1hcnkgcGxhbmUKKyAqLworCitzdGF0aWMgaW50IHByaW1hcnlf cGxhbmVfaGVscGVyX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKK3sKKyAgICAgICAgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnZW07CisgICAgICAgIHN0cnVjdCBmYmRldmRybV9ibyAqZmJvOworCWlu dCByZXQ7CisKKwlpZiAoIW5ld19zdGF0ZS0+ZmIpCisJCXJldHVybiAwOworCisJZ2VtID0gbmV3 X3N0YXRlLT5mYi0+b2JqWzBdOworCWZibyA9IGZiZGV2ZHJtX2JvX29mX2dlbShnZW0pOworCisg ICAgICAgIHJldCA9IGZiZGV2ZHJtX2JvX3BpbihmYm8sIFRUTV9QTF9GTEFHX1ZSQU0pOworICAg ICAgICBpZiAocmV0KQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgcHJpbWFyeV9wbGFuZV9oZWxwZXJfY2xlYW51cF9mYihzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9z dGF0ZSkKK3sKKyAgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisgICAgICAgIHN0 cnVjdCBmYmRldmRybV9ibyAqZmJvOworCisJaWYgKCFvbGRfc3RhdGUtPmZiKQorCQlyZXR1cm47 CisKKwlnZW0gPSBvbGRfc3RhdGUtPmZiLT5vYmpbMF07CisJZmJvID0gZmJkZXZkcm1fYm9fb2Zf Z2VtKGdlbSk7CisKKwlmYmRldmRybV9ib191bnBpbihmYm8pOworfQorCitzdGF0aWMgdm9pZCBm YmRldmRybV91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9jcnRjX3N0YXRlKAorCXN0cnVj dCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyLCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUqIGNydGNf c3RhdGUpCit7CisJZmJkZXZkcm1fdXBkYXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fbW9kZShm Yl92YXIsICZjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIGludCBwcmlt YXJ5X3BsYW5lX2hlbHBlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKKwlpbnQgcmV0OworCXN0cnVjdCBmYmRldmRybV9t b2Rlc2V0ICptb2Rlc2V0OworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBmYl92YXI7CisKKwlp ZiAoIXN0YXRlLT5jcnRjKQorCQlyZXR1cm4gMDsKKworCW5ld19jcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLAorCQkJCQkJICAgICAgIHN0YXRl LT5jcnRjKTsKKwlpZiAoIW5ld19jcnRjX3N0YXRlKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRy bV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lX3N0YXRlKHN0YXRlLCBuZXdfY3J0Y19zdGF0ZSwK KwkJCQkJCSAgMSA8PCAxNiwgMSA8PCAxNiwKKwkJCQkJCSAgZmFsc2UsIHRydWUpOworCWlmIChy ZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmJkcm1kZXY6ICVzOiVkIHJldD0lZDpcbiIsIF9fZnVu Y19fLCBfX0xJTkVfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIXN0YXRlLT52 aXNpYmxlIHx8ICFzdGF0ZS0+ZmIpCisJCXJldHVybiAwOworCisJLyogVmlydHVhbCBzY3JlZW4g c2l6ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisJICovCisKKwlpZiAoZHJtX3JlY3Rfd2lkdGgoJnN0 YXRlLT5kc3QpICE9IHN0YXRlLT5mYi0+d2lkdGggfHwKKwkgICAgZHJtX3JlY3RfaGVpZ2h0KCZz dGF0ZS0+ZHN0KSAhPSBzdGF0ZS0+ZmItPmhlaWdodCkgeworCQlEUk1fRVJST1IoImZiZGV2ZHJt OiAlczolZDogdmlydHVhbCBzY3JlZW4gc2l6ZXMgbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18s IF9fTElORV9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChzdGF0ZS0+ZHN0LngxIHx8 IHN0YXRlLT5kc3QueTEpIHsKKwkJRFJNX0VSUk9SKCJmYmRldmRybTogJXM6JWQ6IHZpcnR1YWwg c2NyZWVuIG9mZnNldCBub3Qgc3VwcG9ydGVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBQaXhlbCBmb3JtYXRzIGhhdmUgdG8gYmUgY29tcGF0 aWJsZSB3aXRoIGZiZGV2LiBUaGlzIGlzCisJICogdXN1YWxseSBzb21lIHZhcmlhdGlvbiBvZiBY UkdCLgorCSAqLworCisJaWYgKCFwbGFuZS0+c3RhdGUgfHwKKwkgICAgIXBsYW5lLT5zdGF0ZS0+ ZmIgfHwKKwkgICAgcGxhbmUtPnN0YXRlLT5mYi0+Zm9ybWF0WzBdLmZvcm1hdCAhPSBzdGF0ZS0+ ZmItPmZvcm1hdFswXS5mb3JtYXQpIHsKKworCQltb2Rlc2V0ID0gZmJkZXZkcm1fbW9kZXNldF9v Zl9wcmltYXJ5X3BsYW5lKHBsYW5lKTsKKworCQlpZiAobW9kZXNldC0+ZmJfaW5mby0+ZmJvcHMt PmZiX2NoZWNrX3ZhcikgeworCQkJbWVtY3B5KCZmYl92YXIsICZtb2Rlc2V0LT5mYl9pbmZvLT52 YXIsCisJCQkgICAgICAgc2l6ZW9mKGZiX3ZhcikpOworCQkJZmJkZXZkcm1fdXBkYXRlX2ZiX3Zh cl9zY3JlZW5pbmZvX2Zyb21fY3J0Y19zdGF0ZSgKKwkJCQkmZmJfdmFyLCBuZXdfY3J0Y19zdGF0 ZSk7CisJCQlmYmRldmRybV91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mcmFtZWJ1ZmZl cigKKwkJCQkmZmJfdmFyLCBzdGF0ZS0+ZmIsCisJCQkJbW9kZXNldC0+ZmJfaW5mby0+Zml4LnNt ZW1fbGVuKTsKKwkJCXJldCA9IG1vZGVzZXQtPmZiX2luZm8tPmZib3BzLT5mYl9jaGVja192YXIo CisJCQkJJmZiX3ZhciwgbW9kZXNldC0+ZmJfaW5mbyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQly ZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3Bh bGV0dGVfY21hcChzdHJ1Y3QgZmJfaW5mbyogZmJfaW5mbykKK3sKKwlfX3UzMiBsZW47CisJY29u c3Qgc3RydWN0IGZiX2NtYXAqIGRlZmF1bHRfY21hcDsKKwlzdHJ1Y3QgZmJfY21hcCBjbWFwOwor CWludCByZXQ7CisJY29uc3QgX191MzIgZ2FtbWFfbGVuWzNdID0geworCQlmYl9pbmZvLT52YXIu cmVkLmxlbmd0aCwKKwkJZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0aCwKKwkJZmJfaW5mby0+dmFy LmJsdWUubGVuZ3RoCisJfTsKKworCWxlbiA9IG1heDMoZ2FtbWFfbGVuWzBdLCBnYW1tYV9sZW5b MV0sIGdhbW1hX2xlblsyXSk7CisJaWYgKCFsZW4gfHwgKGxlbiA+IDMxKSkgeworCQlEUk1fRVJS T1IoImZiZGV2ZHJtOiBnYW1tYSBMVVQgaGFzIGludmFsaWQgYml0IGNvdW50IgorCQkJICAiIG9m ICV1XG4iLCAodW5zaWduZWQgaW50KWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRl ZmF1bHRfY21hcCA9IGZiX2RlZmF1bHRfY21hcCgxdWwgPDwgbGVuKTsKKwlpZiAoIWRlZmF1bHRf Y21hcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJmNtYXAsIDAsIHNpemVvZihjbWFw KSk7CisJcmV0ID0gZmJfYWxsb2NfY21hcCgmY21hcCwgZGVmYXVsdF9jbWFwLT5sZW4sIDApOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gZmJfY29weV9jbWFwKGRlZmF1bHRfY21h cCwgJmNtYXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZiX2RlYWxsb2NfY21hcDsKKwlyZXQg PSBmYl9zZXRfY21hcCgmY21hcCwgZmJfaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KwlmYl9kZWFsbG9jX2NtYXAoJmNtYXApOworCisJcmV0dXJuIDA7CisKK2Vycl9mYl9kZWFsbG9j X2NtYXA6CisJZmJfZGVhbGxvY19jbWFwKCZjbWFwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHNldF9saW5lYXJfY21hcChzdHJ1Y3QgZmJfaW5mbyogZmJfaW5mbykKK3sKKwlzdHJ1 Y3QgZmJfY21hcCBjbWFwOworCWludCByZXQ7CisJc2l6ZV90IGk7CisJdW5zaWduZWQgaW50IGo7 CisJdTE2ICpsdXQ7CisJdTE2IGluY3I7CisJdTE2ICpnYW1tYV9sdXRbM107CisJX191MzIgbGVu OworCWNvbnN0IF9fdTMyIGdhbW1hX2xlblszXSA9IHsKKwkJZmJfaW5mby0+dmFyLnJlZC5sZW5n dGgsCisJCWZiX2luZm8tPnZhci5ncmVlbi5sZW5ndGgsCisJCWZiX2luZm8tPnZhci5ibHVlLmxl bmd0aAorCX07CisKKwlsZW4gPSBtYXgzKGdhbW1hX2xlblswXSwgZ2FtbWFfbGVuWzFdLCBnYW1t YV9sZW5bMl0pOworCWlmICghbGVuIHx8IChsZW4gPiA4KSkgeworCQlEUk1fRVJST1IoImZiZGV2 ZHJtOiBnYW1tYSBMVVQgaGFzIGludmFsaWQgYml0IGNvdW50IgorCQkJICAiIG9mICV1XG4iLCAo dW5zaWduZWQgaW50KWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmY21h cCwgMCwgc2l6ZW9mKGNtYXApKTsKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZjbWFwLCAxdWwgPDwg bGVuLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2FtbWFfbHV0WzBdID0gY21h cC5yZWQ7CisJZ2FtbWFfbHV0WzFdID0gY21hcC5ncmVlbjsKKwlnYW1tYV9sdXRbMl0gPSBjbWFw LmJsdWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnYW1tYV9sdXQpOyArK2kpIHsK KwkJbHV0ID0gZ2FtbWFfbHV0W2ldOworCQlsZW4gPSAxdWwgPDwgZ2FtbWFfbGVuW2ldOworCQlp bmNyID0gMHgxMDAwMHUgPj4gZ2FtbWFfbGVuW2ldOworCQlmb3IgKGogPSAwOyBqIDwgbGVuOyAr K2osICsrbHV0KSB7CisJCQkqbHV0ID0gaW5jciAqIGo7CisJCX0KKwkJLyogSW4gb3JkZXIgdG8g aGF2ZSBubyBpbnRlbnNpdHkgYXQgaW5kZXggMCBhbmQgZnVsbAorCQkgKiBpbnRlbnNpdHkgYXQg dGhlIGZpbmFsIGluZGV4IG9mIHRoZSBMVVQsIHdlIGZpeC11cCB0aGUKKwkJICogdGFibGUncyBm aW5hbCBlbnRyaWVzLiBUaGUgZml4LXVwIG1ha2VzIGludGVuc2l0eSBncm93CisJCSAqIGZhc3Rl ciBuZWFyIHRoZSBmaW5hbCBlbnRyaWVzIG9mIHRoZSBnYW1tYSBMVVQuIFRoZSBodW1hbgorCQkg KiBleWUgaXMgbW9yZSBzZW5zaXRpdmUgdG8gY2hhbmdlcyB0byB0aGUgbG93ZXIgaW50ZW5zaXRp ZXMsCisJCSAqIHNvIHRoaXMgaXMgcHJvYmFibHkgbm90IGRpcmVjdGx5IHBlcmNlaXZhYmxlLgor CQkgKi8KKwkJZm9yIChsdXQgLT0gZ2FtbWFfbGVuW2ldLCBqID0gZ2FtbWFfbGVuW2ldOyBqID4g MDsgKytsdXQpIHsKKwkJCS0tajsKKwkJCSpsdXQgKz0gKGluY3IgPj4gaikgLSAxOyAvKiBzdWJ0 cmFjdCAxIHRvIG5vdAorCQkJCQkJICAqIG92ZXJmbG93IHRoZSBMVVQncworCQkJCQkJICAqIGZp bmFsIGVudHJ5ICovCisJCX0KKwl9CisKKwlyZXQgPSBmYl9zZXRfY21hcCgmY21hcCwgZmJfaW5m byk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZmJfZGVhbGxvY19jbWFwOworCWZiX2RlYWxsb2Nf Y21hcCgmY21hcCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZiX2RlYWxsb2NfY21hcDoKKwlmYl9k ZWFsbG9jX2NtYXAoJmNtYXApOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNl dF9jbWFwKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCWludCByZXQgPSAwOworCisJc3dp dGNoIChmYl9pbmZvLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6 CisJCXJldCA9IHNldF9wYWxldHRlX2NtYXAoZmJfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgRkJf VklTVUFMX0RJUkVDVENPTE9SOgorCQlyZXQgPSBzZXRfbGluZWFyX2NtYXAoZmJfaW5mbyk7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIHByaW1hcnlfcGxhbmVfaGVscGVyX2F0b21pY191cGRhdGUoCisJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlz dHJ1Y3QgZmJkZXZkcm1fbW9kZXNldCAqbW9kZXNldDsKKwl1aW50MzJfdCBmb3JtYXQ7CisJc3Ry dWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGZiX3ZhcjsKKwlpbnQgcmV0OworICAgICAgICBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmdlbTsKKyAgICAgICAgc3RydWN0IGZiZGV2ZHJtX2JvICpmYm87CisJ X191MzIgbGluZV9sZW5ndGg7CisJdWludDY0X3QgeW9mZnNldDsKKwl1aW50MzJfdCB4b2Zmc2V0 OworCisJbW9kZXNldCA9IGZiZGV2ZHJtX21vZGVzZXRfb2ZfcHJpbWFyeV9wbGFuZShwbGFuZSk7 CisKKwlmb3JtYXQgPSBmYmRldmRybV9mb3JtYXRfb2ZfZmJfaW5mbyhtb2Rlc2V0LT5mYl9pbmZv KTsKKworCS8qIERSTSBwb3J0aW5nIG5vdGVzOiBTb21lIGZiZGV2IGRyaXZlcnMgcmVwb3J0IGFs cGhhIGNoYW5uZWxzIGZvcgorCSAqIHRoZWlyIGZyYW1lYnVmZmVyLCBldmVuIHRob3VnaCB0aGV5 IGRvbid0IHN1cHBvcnQgdHJhbnNwYXJlbnQKKwkgKiBwcmltYXJ5IHBsYW5lcy4gRm9yIHRoZSBm b3JtYXQgdGVzdCBiZWxvdywgd2UgaWdub3JlIHRoZSBhbHBoYQorCSAqIGNoYW5uZWwgYW5kIHVz ZSB0aGUgbm9uLXRyYW5zcGFyZW50IGVxdWl2YWxlbnQgb2YgdGhlIHBpeGVsIGZvcm1hdC4KKwkg KiBJZiB5b3UncmUgcG9ydGluZyBhbiBmYmRldiBkcml2ZXIgdG8gRFJNLCByZW1vdmUgdGhpcyBz d2l0Y2gKKwkgKiBzdGF0ZW1lbnQgYW5kIHJlcG9ydCB0aGUgY29ycmVjdCBmb3JtYXQgaW5zdGVh ZC4KKwkgKi8KKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK KwkJZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9S TUFUX0FCR1I4ODg4OgorCQlmb3JtYXQgPSBEUk1fRk9STUFUX1hCR1I4ODg4OworCQlicmVhazsK KwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCWZvcm1hdCA9IERSTV9GT1JNQVRfUkdCWDg4 ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJZm9ybWF0ID0gRFJN X0ZPUk1BVF9CR1JYODg4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJ aWYgKChmb3JtYXQgIT0gcGxhbmUtPnN0YXRlLT5mYi0+Zm9ybWF0WzBdLmZvcm1hdCkgfHwKKwkg ICAgKG1vZGVzZXQtPmZiX2luZm8tPnZhci54cmVzX3ZpcnR1YWwgIT0gcGxhbmUtPnN0YXRlLT5m Yi0+d2lkdGgpKSB7CisKKwkJLyogUGl4ZWwgZm9ybWF0IGNoYW5nZWQsIHVwZGF0ZSBmYl9pbmZv IGFjY29yZGluZ2x5CisJCSAqLworCisJCW1lbWNweSgmZmJfdmFyLCAmbW9kZXNldC0+ZmJfaW5m by0+dmFyLCBzaXplb2YoZmJfdmFyKSk7CisJCXJldCA9IGZiZGV2ZHJtX3VwZGF0ZV9mYl92YXJf c2NyZWVuaW5mb19mcm9tX2ZyYW1lYnVmZmVyKAorCQkJJmZiX3ZhciwgcGxhbmUtPnN0YXRlLT5m YiwKKwkJCW1vZGVzZXQtPmZiX2luZm8tPmZpeC5zbWVtX2xlbik7CisJCWlmIChyZXQpCisJCQly ZXR1cm47CisKKwkJZmJfdmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworCisJCXJldCA9 IGZiX3NldF92YXIobW9kZXNldC0+ZmJfaW5mbywgJmZiX3Zhcik7CisJCWlmIChyZXQpIHsKKwkJ CURSTV9FUlJPUigiZmJkZXZkcm06IGZiX3NldF92YXIoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwor CQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKCFvbGRfc3RhdGUtPmZiIHx8IC8qIGZpcnN0LXRp bWUgdXBkYXRlICovCisJICAgIChmb3JtYXQgIT0gcGxhbmUtPnN0YXRlLT5mYi0+Zm9ybWF0WzBd LmZvcm1hdCkpIHsKKworCQkvKiBEUk0gcG9ydGluZyBub3RlczogQmVsb3cgd2Ugc2V0IHRoZSBM VVRzIGZvciBwYWxldHRlIGFuZAorCQkgKiBnYW1tYSBjb3JyZWN0aW9uLiBUaGlzIGlzIHJlcXVp cmVkIGJ5IHNvbWUgZmJkZXYgZHJpdmVycywKKwkJICogc3VjaCBhcyBudmlkaWFmYiBhbmQgYXR5 ZmIsIHdoaWNoIGRvbid0IGluaXRpYWxpemUgdGhlCisJCSAqIHRhYmxlIHRvIHBhc3MtdGhyb3Vn aCB0aGUgZnJhbWVidWZmZXIgdmFsdWVzIHVuY2hhbmdlZC4gVGhpcworCQkgKiBpcyBhY3R1YWxs eSBDUlRDIHN0YXRlLCBidXQgdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb24KKwkJICogY3J0Y19oZWxw ZXJfbW9kZV9zZXRfbm9mYigpIGlzIG9ubHkgY2FsbGVkIHdoZW4gYSBDUlRDCisJCSAqIHByb3Bl cnR5IGNoYW5nZXMsIGNoYW5nZXMgaW4gY29sb3IgZm9ybWF0cyBhcmUgbm90IGhhbmRsZWQKKwkJ ICogdGhlcmUuIFdoZW4geW91J3JlIHBvcnRpbmcgYSBmYmRldiBkcml2ZXIgdG8gRFJNLCByZW1v dmUKKwkJICogdGhlIGNhbGwuIEdhbW1hIExVVHMgYXJlIENSVEMgcHJvcGVydGllcyBhbmQgc2hv dWxkIGJlCisJCSAqIGhhbmRsZWQgdGhlcmUuIEVpdGhlciByZW1vdmUgZ2FtbWEgY29ycmVjdGlv biBvciBzZXQgdXAKKwkJICogdGhlIHJlc3BlY3RpdmUgQ1JUQyBwcm9wZXJ0aWVzIGZvciB1c2Vy c3BhY2UuCisJCSAqLworCQlzZXRfY21hcChtb2Rlc2V0LT5mYl9pbmZvKTsKKwl9CisKKwkvKiBX aXRoIHRoZSBmYiBpbnRlcmZhY2UsIHdlIGNhbm5vdCBkaXJlY3RseSBwcm9ncmFtCisJICogdGhl IHNjYW5vdXQgYnVmZmVyJ3MgYWRkcmVzcy4gSW5zdGVhZCB3ZSB1c2UgdGhlCisJICogcGFubmlu ZyBmdW5jdGlvbiB0byBwb2ludCB0aGUgZ3JhcGhpY3MgY2FyZCB0byB0aGUKKwkgKiBidWZmZXIn cyBsb2NhdGlvbi4KKwkgKi8KKworCWdlbSA9IHBsYW5lLT5zdGF0ZS0+ZmItPm9ialswXTsKKwlm Ym8gPSBmYmRldmRybV9ib19vZl9nZW0oZ2VtKTsKKworCWxpbmVfbGVuZ3RoID0gcGxhbmUtPnN0 YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwl5b2Zmc2V0ID0gZmJvLT5iby5vZmZzZXQ7CisJeG9mZnNl dCA9IGRvX2Rpdih5b2Zmc2V0LCBsaW5lX2xlbmd0aCk7CisJaWYgKHlvZmZzZXQgPiAoX191MzIp LTEpIHsKKwkJLyogVGhlIHZhbHVlIG9mIHlvZmZzZXQgZG9lc24ndCBmaXQgaW50byBhIDMyLWJp dCB2YWx1ZSwKKwkJICogc28gd2UgY2Fubm90IHVzZSBpdCBmb3IgZGlzcGxheSBwYW5uaW5nLiBF aXRoZXIgdGhlCisJCSAqIGdyYXBoaWNzIGNhcmQgaGFzIEdpQnMgb2YgVlJBTSBvciB0aGlzIGlz IGEgYnVnIHdpdGgKKwkJICogbWVtb3J5IG1hbmFnZW1lbnQuICovCisJCURSTV9FUlJPUigiZmJk ZXZkcm06IGJ1ZmZlciBvYmplY3QgaXMgbm90IGFsaWduZWQgdG8gYSAiCisJCQkgICJtdWx0aXBs ZSBvZiB0aGUgc2NhbmxpbmUgc2l6ZS5cbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmICh4b2Zm c2V0KSB7CisJCS8qIFRoZSBidWZmZXIgc3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSBzY2FubGlu ZS4gVGhlCisJCSAqIG1lbW9yeSBtYW5hZ2VyIHNob3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzLiBU aGlzCisJCSAqIHByb2JsZW0gaW5kaWNhdGVzIGEgYnVnIHdpdGggdGhlIGJ1ZmZlciBhbGlnbmlu Zy4gKi8KKwkJRFJNX0VSUk9SKCJmYmRldmRybTogYnVmZmVyIG9iamVjdCBpcyBub3QgYWxpZ25l ZCB0byBhICIKKwkJCSAgIm11bHRpcGxlIG9mIHRoZSBzY2FubGluZSBzaXplLlxuIik7CisJCXJl dHVybjsKKwl9CisKKwltZW1jcHkoJmZiX3ZhciwgJm1vZGVzZXQtPmZiX2luZm8tPnZhciwgc2l6 ZW9mKGZiX3ZhcikpOworCWZiX3Zhci54b2Zmc2V0ID0geG9mZnNldDsKKwlmYl92YXIueW9mZnNl dCA9IHlvZmZzZXQ7CisKKwlyZXQgPSBmYl9wYW5fZGlzcGxheShtb2Rlc2V0LT5mYl9pbmZvLCAm ZmJfdmFyKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmJkZXZkcm06IGZiX3Bhbl9kaXNw bGF5KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZv aWQgcHJpbWFyeV9wbGFuZV9oZWxwZXJfYXRvbWljX2Rpc2FibGUoCisJc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sgfQorCitzdGF0 aWMgaW50IHByaW1hcnlfcGxhbmVfaGVscGVyX2F0b21pY19hc3luY19jaGVjaygKKwlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW1hcnlfcGxhbmVfaGVscGVyX2F0b21pY19hc3lu Y191cGRhdGUoCisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKm5ld19zdGF0ZSkKK3sKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBwcmltYXJ5X3BsYW5lX2hlbHBl cl9mdW5jcyA9IHsKKwkucHJlcGFyZV9mYiA9IHByaW1hcnlfcGxhbmVfaGVscGVyX3ByZXBhcmVf ZmIsCisJLmNsZWFudXBfZmIgPSBwcmltYXJ5X3BsYW5lX2hlbHBlcl9jbGVhbnVwX2ZiLAorCS5h dG9taWNfY2hlY2sgPSBwcmltYXJ5X3BsYW5lX2hlbHBlcl9hdG9taWNfY2hlY2ssCisJLmF0b21p Y191cGRhdGUgPSBwcmltYXJ5X3BsYW5lX2hlbHBlcl9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNf ZGlzYWJsZSA9IHByaW1hcnlfcGxhbmVfaGVscGVyX2F0b21pY19kaXNhYmxlLAorCS5hdG9taWNf YXN5bmNfY2hlY2sgPSBwcmltYXJ5X3BsYW5lX2hlbHBlcl9hdG9taWNfYXN5bmNfY2hlY2ssCisJ LmF0b21pY19hc3luY191cGRhdGUgPSBwcmltYXJ5X3BsYW5lX2hlbHBlcl9hdG9taWNfYXN5bmNf dXBkYXRlCit9OworCitzdGF0aWMgdm9pZCBwcmltYXJ5X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUpCit7CisJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBwcmltYXJ5X3BsYW5lX2Z1bmNzID0gewor CS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCisJLmRpc2Fi bGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAorCS5kZXN0cm95ID0g cHJpbWFyeV9wbGFuZV9kZXN0cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5l X3Jlc2V0LAorCS5zZXRfcHJvcGVydHkgPSBOVUxMLCAvKiB1bnVzZWQgKi8KKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95 X3N0YXRlLAorCS5hdG9taWNfc2V0X3Byb3BlcnR5ID0gTlVMTCwgLyogdW51c2VkICovCisJLmF0 b21pY19nZXRfcHJvcGVydHkgPSBOVUxMLCAvKiB1bnVzZWQgKi8KKwkubGF0ZV9yZWdpc3RlciA9 IE5VTEwsIC8qIHVudXNlZCAqLworCS5lYXJseV91bnJlZ2lzdGVyID0gTlVMTCwgLyogdW51c2Vk ICovCisJLmF0b21pY19wcmludF9zdGF0ZSA9IE5VTEwsIC8qIHVudXNlZCAqLworCS5mb3JtYXRf bW9kX3N1cHBvcnRlZCA9IE5VTEwgLyogdW51c2VkICovCit9OworCitzdGF0aWMgY29uc3QgdWlu dDMyX3QqCitmb3JtYXRzX2Zyb21fZmJfaW5mbyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyogZmJfaW5m bywgdW5zaWduZWQgaW50KiBmb3JtYXRfY291bnQpCit7CisJLyogVE9ETzogRGV0ZWN0IHRoZSBh Y3R1YWxseSBzdXBwb3J0ZWQgZm9ybWF0cyBvciBoYXZlIHNvbWUKKwkgKiAgICAgICBzb3J0IG9m IHdoaXRlbGlzdCBmb3Iga25vd24gaGFyZHdhcmUgZGV2aWNlcy4KKwkgKi8KKwlzdGF0aWMgY29u c3QgdWludDMyX3QgZm9ybWF0c1tdID0geworCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQlEUk1f Rk9STUFUX1JHQjU2NQorCX07CisKKwkqZm9ybWF0X2NvdW50ID0gQVJSQVlfU0laRShmb3JtYXRz KTsKKworCXJldHVybiBmb3JtYXRzOworfQorCitpbnQgZmJkZXZkcm1faW5pdF9wcmltYXJ5X3Bs YW5lX2Zyb21fZmJfaW5mbyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJICAgICBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHVpbnQzMl90IHBvc3NpYmxlX2NydGNzLAor CQkJCQkgICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCXVpbnQzMl90IGN1cl9mb3Jt YXQ7CisJY29uc3QgdWludDMyX3QqIGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0X2NvdW50 OworCWludCByZXQ7CisKKwkvKiBXZSBmaXJzdCB0cnkgdG8gZmluZCB0aGUgc3VwcG9ydGVkIHBp eGVsIGZvcm1hdHMgZnJvbSB0aGUKKwkgKiBmYl9pbmZvJ3MgaGFyZHdhcmUgc2V0dGluZ3MuIElm IHRoYXQgZmFpbHMsIHdlIHRha2UgdGhlCisJICogY3VycmVudCBzZXR0aW5ncy4gKi8KKwlmb3Jt YXQgPSBmb3JtYXRzX2Zyb21fZmJfaW5mbyhmYl9pbmZvLCAmZm9ybWF0X2NvdW50KTsKKwlpZiAo IWZvcm1hdF9jb3VudCkgeworCQljdXJfZm9ybWF0ID0gZmJkZXZkcm1fZm9ybWF0X29mX2ZiX2lu Zm8oZmJfaW5mbyk7CisJCWZvcm1hdCA9ICZjdXJfZm9ybWF0OworCQlmb3JtYXRfY291bnQgPSAx OworCX0KKwlpZiAoIWZvcm1hdF9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBk cm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgcG9zc2libGVfY3J0Y3MsCisJCQkJ ICAgICAgICZwcmltYXJ5X3BsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBmb3JtYXQsIGZvcm1hdF9j b3VudCwKKwkJCQkgICAgICAgTlVMTCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwgTlVMTCk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUs ICZwcmltYXJ5X3BsYW5lX2hlbHBlcl9mdW5jcyk7CisKKwlyZXQgPSBkcm1fcGxhbmVfY3JlYXRl X3JvdGF0aW9uX3Byb3BlcnR5KHBsYW5lLCBEUk1fTU9ERV9ST1RBVEVfMCwKKwkJCQkJCSBEUk1f TU9ERV9ST1RBVEVfMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RybV9wbGFuZV9jbGVh bnVwOworCisJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eShw bGFuZSwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RybV9wbGFuZV9jbGVhbnVwOwor CisJcmV0dXJuIDA7CisKK2Vycl9kcm1fcGxhbmVfY2xlYW51cDoKKwlkcm1fcGxhbmVfY2xlYW51 cChwbGFuZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9m YmRldmRybS9mYmRldmRybV9wcmltYXJ5LmggYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJk ZXZkcm1fcHJpbWFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NTI5YzI3MmM2ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJt L2ZiZGV2ZHJtX3ByaW1hcnkuaApAQCAtMCwwICsxLDI3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorICoKKyAqIE9uZSBwdXJwb3NlIG9mIHRoaXMgZHJp dmVyIGlzIHRvIGFsbG93IGZvciBlYXN5IGNvbnZlcnNpb24gb2YgZnJhbWVidWZmZXIKKyAqIGRy aXZlcnMgdG8gRFJNLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR1BMLCB5b3Ug YXJlIGFsbG93ZWQgdG8KKyAqIHJlbGljZW5zZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9m IGEgbGljZW5zZSBvZiB5b3VyIGNob2ljZSBpZiB5b3UncmUKKyAqIHBvcnRpbmcgYSBmcmFtZWJ1 ZmZlciBkcml2ZXIuIEluIG9yZGVyIHRvIGRvIHNvLCB1cGRhdGUgdGhlIFNQRFggbGljZW5zZQor ICogaWRlbnRpZmllciB0byB0aGUgbmV3IGxpY2Vuc2UgYW5kIHJlbW92ZSB0aGlzIGV4Y2VwdGlv bi4KKyAqCisgKiBJZiB5b3UgYWRkIGNvZGUgdG8gdGhpcyBmaWxlLCBwbGVhc2UgZW5zdXJlIHRo YXQgaXQncyBjb21wYXRpYmxlIHdpdGggdGhlCisgKiBzdGF0ZWQgZXhjZXB0aW9uLgorICovCisK KyNpZm5kZWYgRkJERVZEUk1fUFJJTUFSWV9ICisjZGVmaW5lIEZCREVWRFJNX1BSSU1BUllfSAor CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3Qg ZHJtX3BsYW5lOworc3RydWN0IGZiX2luZm87CisKK2ludCBmYmRldmRybV9pbml0X3ByaW1hcnlf cGxhbmVfZnJvbV9mYl9pbmZvKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCQkgICAgIHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgdWludDMyX3QgcG9zc2libGVfY3J0Y3Ms CisJCQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworCisjZW5kaWYKLS0gCjIuMjEu MAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs