From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC 1/5] drm: Add DRM support for tiny LCD displays Date: Wed, 16 Mar 2016 14:34:15 +0100 Message-ID: <1458135259-31050-2-git-send-email-noralf@tronnes.org> References: <1458135259-31050-1-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asav22.altibox.net (asav22.altibox.net [109.247.116.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0752F6E931 for ; Wed, 16 Mar 2016 13:40:57 +0000 (UTC) In-Reply-To: <1458135259-31050-1-git-send-email-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: dri-devel@lists.freedesktop.org Cc: thomas.petazzoni@free-electrons.com List-Id: dri-devel@lists.freedesktop.org dGlueWRybSBwcm92aWRlcyBhIHZlcnkgc2ltcGxpZmllZCB2aWV3IG9mIERSTSBmb3IgZGlzcGxh eXMgdGhhdCBoYXMKb25ib2FyZCB2aWRlbyBtZW1vcnkgYW5kIGlzIGNvbm5lY3RlZCB0aHJvdWdo IGEgc2xvdyBidXMgbGlrZSBTUEkvSTJDLgoKU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVz IDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v S2NvbmZpZyAgICAgICAgICAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vY29yZS9pbnRlcm5hbC5oICAgICAgICAgICAgfCAgNDMgKysrCiBkcml2ZXJzL2dw dS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5jICAgICAgICB8IDE5NCArKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jcnRjLmMgICAgICAgIHwg MjAzICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWRl ZmVycmVkLmMgICAgfCAxMTYgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90 aW55ZHJtLWZiZGV2LmMgICAgICAgfCAzNDUgKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tZnJhbWVidWZmZXIuYyB8IDExMiArKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jICAgICB8ICA5 NyArKysrKysKIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jICAg ICAgIHwgIDUwICsrKwogaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmggICAgICAgICAgICAg ICAgICAgICAgfCAxNDIgKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMzI1IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmln CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9pbnRlcm5hbC5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJt LWNvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv dGlueWRybS1jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0tZGVmZXJyZWQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1mYmRldi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZyYW1lYnVmZmVyLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJt LXBsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0u aAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKaW5kZXggYzRiZjlhMS4uM2Y4ZWRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI2NiwzICsyNjYs NSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWciCiBzb3VyY2Ug ImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0v dmM0L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyIK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQppbmRleCAxZTlmZjRjLi5jN2M1YzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC03NSwzICs3NSw0 IEBAIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdl Lwogb2JqLSQoQ09ORklHX0RSTV9GU0xfRENVKSArPSBmc2wtZGN1Lworb2JqLSQoQ09ORklHX0RS TV9USU5ZRFJNKSArPSB0aW55ZHJtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5MDA0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorbWVudWNvbmZpZyBE Uk1fVElOWURSTQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBzbWFsbCBURlQgTENEIGRpc3BsYXkg bW9kdWxlcyIKKwlkZXBlbmRzIG9uIERSTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVj dCBEUk1fS01TX0NNQV9IRUxQRVIKKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCisJc2VsZWN0 IERSTV9QQU5FTAorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUworCWhlbHAKKwkgIENob29zZSB0 aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHRpbnlkcm0gc3VwcG9ydGVkIGRpc3BsYXkuCisJICBJ ZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlueWRybS4KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3 NmVkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxl CkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19EUk1fVElOWURSTSkJCSs9IGNvcmUvCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wMzMwOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vY29yZS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK29iai0kKENPTkZJR19EUk1fVElOWURS TSkJCSs9IHRpbnlkcm0ubwordGlueWRybS15CQkJCSs9IHRpbnlkcm0tY29yZS5vCit0aW55ZHJt LXkJCQkJKz0gdGlueWRybS1jcnRjLm8KK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLWZyYW1lYnVm ZmVyLm8KK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLXBsYW5lLm8KK3Rpbnlkcm0teQkJCQkrPSB0 aW55ZHJtLWhlbHBlcnMubwordGlueWRybS15CQkJCSs9IHRpbnlkcm0tZGVmZXJyZWQubwordGlu eWRybS0kKENPTkZJR19EUk1fS01TX0ZCX0hFTFBFUikJKz0gdGlueWRybS1mYmRldi5vCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL2ludGVybmFsLmggYi9kcml2ZXJz L2dwdS9kcm0vdGlueWRybS9jb3JlL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYTEyNjY1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55ZHJtL2NvcmUvaW50ZXJuYWwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKi8KKworaW50IHRpbnlkcm1fY3J0Y19jcmVhdGUoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0 ZGV2KTsKKworc3RhdGljIGlubGluZSBib29sIHRpbnlkcm1fYWN0aXZlKHN0cnVjdCB0aW55ZHJt X2RldmljZSAqdGRldikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlkcm1fZm9yX2Vh Y2hfY3J0YyhjcnRjLCB0ZGV2LT5iYXNlKQorCQlyZXR1cm4gY3J0Yy0+c3RhdGUgJiYgY3J0Yy0+ c3RhdGUtPmFjdGl2ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCB0aW55ZHJtX21vZGVf Y29uZmlnX2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KTsKKworaW50IHRpbnlkcm1f cGxhbmVfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpOworCisjaWZkZWYgQ09ORklH X0RSTV9LTVNfRkJfSEVMUEVSCitpbnQgdGlueWRybV9mYmRldl9pbml0KHN0cnVjdCB0aW55ZHJt X2RldmljZSAqdGRldik7Cit2b2lkIHRpbnlkcm1fZmJkZXZfZmluaShzdHJ1Y3QgdGlueWRybV9k ZXZpY2UgKnRkZXYpOwordm9pZCB0aW55ZHJtX2ZiZGV2X3Jlc3RvcmVfbW9kZShzdHJ1Y3QgdGlu eWRybV9mYmRldiAqZmJkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHRpbnlkcm1fZmJk ZXZfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCit7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2ZiZGV2X2Zpbmkoc3RydWN0IHRpbnlkcm1fZGV2 aWNlICp0ZGV2KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlueWRybV9mYmRldl9yZXN0 b3JlX21vZGUoc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2KQoreworfQorI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5jIGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jYjNjZjcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwpAQCAtMCwwICsxLDE5NCBAQAorLy8j ZGVmaW5lIERFQlVHCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KKyNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRp YyBpbnQgdGlueWRybV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB1bnNpZ25lZCBsb25n IGZsYWdzKQoreworCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGRkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldDsKKworCURS TV9ERUJVR19LTVMoIlxuIik7CisKKwl0aW55ZHJtX21vZGVfY29uZmlnX2luaXQodGRldik7CisK KwlyZXQgPSB0aW55ZHJtX3BsYW5lX2luaXQodGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IHRpbnlkcm1fY3J0Y19jcmVhdGUodGRldik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWNvbm5lY3RvciA9IGxpc3RfZmlyc3RfZW50cnkoJmRkZXYtPm1vZGVfY29u ZmlnLmNvbm5lY3Rvcl9saXN0LAorCQkJCSAgICAgdHlwZW9mKCpjb25uZWN0b3IpLCBoZWFkKTsK Kwljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCisJZHJt X3BhbmVsX2luaXQoJnRkZXYtPnBhbmVsKTsKKwlkcm1fcGFuZWxfYWRkKCZ0ZGV2LT5wYW5lbCk7 CisJZHJtX3BhbmVsX2F0dGFjaCgmdGRldi0+cGFuZWwsIGNvbm5lY3Rvcik7CisKKwlkcm1fbW9k ZV9jb25maWdfcmVzZXQoZGRldik7CisKKwlyZXQgPSB0aW55ZHJtX2ZiZGV2X2luaXQodGRldik7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCB0aW55ZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3Qg dGlueWRybV9kZXZpY2UgKnRkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVR19L TVMoIlxuIik7CisJdGlueWRybV9mYmRldl9yZXN0b3JlX21vZGUodGRldi0+ZmJkZXYpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW55ZHJtX2ZvcHMgPSB7CisJ Lm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRybV9vcGVuLAorCS5yZWxlYXNlCT0g ZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLAorI2lmZGVmIENPTkZJ R19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5w b2xsCQk9IGRybV9wb2xsLAorCS5yZWFkCQk9IGRybV9yZWFkLAorCS5sbHNlZWsJCT0gbm9fbGxz ZWVrLAorCS5tbWFwCQk9IGRybV9nZW1fY21hX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IGRy bV9kcml2ZXIgdGlueWRybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9H RU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9QUklNRQorCQkJCXwgRFJJVkVSX0FUT01JQywK KwkubG9hZAkJCT0gdGlueWRybV9sb2FkLAorCS5sYXN0Y2xvc2UJCT0gdGlueWRybV9sYXN0Y2xv c2UsCisvLwkudW5sb2FkCQkJPSB0aW55ZHJtX3VubG9hZCwKKwkuZ2V0X3ZibGFua19jb3VudGVy CT0gZHJtX3ZibGFua19jb3VudCwKKy8vCS5lbmFibGVfdmJsYW5rCQk9IHRpbnlkcm1fZW5hYmxl X3ZibGFuaywKKy8vCS5kaXNhYmxlX3ZibGFuawkJPSB0aW55ZHJtX2Rpc2FibGVfdmJsYW5rLAor CS5nZW1fZnJlZV9vYmplY3QJPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29w cwkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5wcmltZV9oYW5kbGVfdG9fZmQJPSBkcm1fZ2Vt X3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dlbV9wcmlt ZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1lX2ltcG9y dCwKKwkuZ2VtX3ByaW1lX2V4cG9ydAk9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJp bWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxl LAorCS5nZW1fcHJpbWVfdm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAorCS5nZW1fcHJp bWVfdnVubWFwCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVfbW1hcAkJ PSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAorCS5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX2NtYV9k dW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0CT0gZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zm c2V0LAorCS5kdW1iX2Rlc3Ryb3kJCT0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisJLmZvcHMJCQk9 ICZ0aW55ZHJtX2ZvcHMsCisJLm5hbWUJCQk9ICJ0aW55ZHJtIiwKKwkuZGVzYwkJCT0gInRpbnlk cm0iLAorCS5kYXRlCQkJPSAiMjAxNTA5MTYiLAorCS5tYWpvcgkJCT0gMSwKKwkubWlub3IJCQk9 IDAsCit9OworCit2b2lkIHRpbnlkcm1fcmVsZWFzZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRk ZXYpCit7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKworCWlmICh0ZGV2LT5kZWZlcnJlZCkKKwkJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0ZGV2LT5kZWZlcnJlZC0+ZHdvcmspOworCisJdGlu eWRybV9mYmRldl9maW5pKHRkZXYpOworCisJZHJtX3BhbmVsX2RldGFjaCgmdGRldi0+cGFuZWwp OworCWRybV9wYW5lbF9yZW1vdmUoJnRkZXYtPnBhbmVsKTsKKworCWRybV9tb2RlX2NvbmZpZ19j bGVhbnVwKHRkZXYtPmJhc2UpOworCWRybV9kZXZfdW5yZWdpc3Rlcih0ZGV2LT5iYXNlKTsKKwlk cm1fZGV2X3VucmVmKHRkZXYtPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3JlbGVh c2UpOworCitpbnQgdGlueWRybV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0 aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyID0gJnRp bnlkcm1fZHJpdmVyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OworCWludCByZXQ7CisKKwlk ZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCitkZXYtPmNvaGVyZW50X2RtYV9tYXNr ID0gRE1BX0JJVF9NQVNLKDMyKTsKKworCWlmIChXQVJOX09OKCF0ZGV2LT5kaXJ0eWZiKSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlkZGV2ID0gZHJtX2Rldl9hbGxvYyhkcml2ZXIsIGRldik7CisJ aWYgKCFkZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRkZXYtPmJhc2UgPSBkZGV2OworCWRk ZXYtPmRldl9wcml2YXRlID0gdGRldjsKKworCXJldCA9IGRybV9kZXZfc2V0X3VuaXF1ZShkZGV2 LCBkZXZfbmFtZShkZGV2LT5kZXYpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJ cmV0ID0gZHJtX2Rldl9yZWdpc3RlcihkZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9m cmVlOworCisJRFJNX0lORk8oIkRldmljZTogJXNcbiIsIGRldl9uYW1lKGRldikpOworCURSTV9J TkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCBvbiBtaW5vciAlZFxuIiwKKwkJIGRyaXZlci0+ bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5taW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLAor CQkgZGRldi0+cHJpbWFyeS0+aW5kZXgpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlOgorCWRy bV9kZXZfdW5yZWYoZGRldik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0aW55 ZHJtX3JlZ2lzdGVyKTsKKworc3RhdGljIHZvaWQgZGV2bV90aW55ZHJtX3JlbGVhc2Uoc3RydWN0 IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCit7CisJdGlueWRybV9yZWxlYXNlKCooc3RydWN0IHRp bnlkcm1fZGV2aWNlICoqKXJlcyk7Cit9CisKK2ludCBkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCit7CisJc3RydWN0 IHRpbnlkcm1fZGV2aWNlICoqcHRyOworCWludCByZXQ7CisKKwlwdHIgPSBkZXZyZXNfYWxsb2Mo ZGV2bV90aW55ZHJtX3JlbGVhc2UsIHNpemVvZigqcHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFw dHIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdGlueWRybV9yZWdpc3RlcihkZXYsIHRk ZXYpOworCWlmIChyZXQpIHsKKwkJZGV2cmVzX2ZyZWUocHRyKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwkqcHRyID0gdGRldjsKKwlkZXZyZXNfYWRkKGRldiwgcHRyKTsKKworCXJldHVybiAwOwor fQorRVhQT1JUX1NZTUJPTChkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIpOworCitNT0RVTEVfTElDRU5T RSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlk cm0tY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNydGMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWIzNDI2Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNydGMuYwpAQCAtMCww ICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o PgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGludCB0 aW55ZHJtX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJaW50IHJldDsKKwor CURSTV9ERUJVR19LTVMoIlxuIik7CisJcmV0ID0gZHJtX3BhbmVsX2dldF9tb2RlcygmdGRldi0+ cGFuZWwpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gcmV0OworCisJbW9kZSA9IGRybV9jdnRf bW9kZShjb25uZWN0b3ItPmRldiwgdGRldi0+d2lkdGgsIHRkZXYtPmhlaWdodCwgNjAsIGZhbHNl LCBmYWxzZSwgZmFsc2UpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIDA7CisKKwltb2RlLT50eXBl IHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVj dG9yLCBtb2RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVy ICoKK3Rpbnlkcm1fY29ubmVjdG9yX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXJldHVybiBkcm1fZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBj b25uZWN0b3ItPmVuY29kZXJfaWRzWzBdKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7 CisJLmdldF9tb2RlcyA9IHRpbnlkcm1fY29ubmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNv ZGVyID0gdGlueWRybV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAorfTsKKworc3RhdGljIGVudW0g ZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3Rpbnlkcm1fY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCURSTV9ERUJVR19LTVMoInN0 YXR1cyA9ICVkXG4iLCBjb25uZWN0b3ItPnN0YXR1cyk7CisKKwlpZiAoZHJtX2RldmljZV9pc191 bnBsdWdnZWQoY29ubmVjdG9yLT5kZXYpKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNj b25uZWN0ZWQ7CisKKwlyZXR1cm4gY29ubmVjdG9yLT5zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lk IHRpbnlkcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlEUk1fREVCVUdfS01TKCJcbiIpOworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKGNv bm5lY3Rvcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0 aW55ZHJtX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kcG1zLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNl dCwKKwkuZGV0ZWN0ID0gdGlueWRybV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0g ZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gdGlu eWRybV9jb25uZWN0b3JfZGVzdHJveSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9Owor CitzdGF0aWMgdm9pZCB0aW55ZHJtX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1fZW5jb2Rlcl9lbmFibGUoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMgaW50IHRpbnlkcm1fZW5j b2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNz ID0geworCS5kaXNhYmxlID0gdGlueWRybV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IHRp bnlkcm1fZW5jb2Rlcl9lbmFibGUsCisJLmF0b21pY19jaGVjayA9IHRpbnlkcm1fZW5jb2Rlcl9h dG9taWNfY2hlY2ssCit9OworCitzdGF0aWMgdm9pZCB0aW55ZHJtX2VuY29kZXJfY2xlYW51cChz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKwlk cm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworCWtmcmVlKGVuY29kZXIpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHRpbnlkcm1fZW5jb2Rlcl9mdW5jcyA9 IHsKKwkuZGVzdHJveSA9IHRpbnlkcm1fZW5jb2Rlcl9jbGVhbnVwLAorfTsKKworc3RhdGljIHZv aWQgdGlueWRybV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9E RUJVR19LTVMoInByZXBhcmVkPSV1LCBlbmFibGVkPSV1XG4iLCB0ZGV2LT5wcmVwYXJlZCwgdGRl di0+ZW5hYmxlZCk7CisKKwkvKiBUaGUgcGFuZWwgbXVzdCBiZSBwcmVwYXJlZCBvbiB0aGUgZmly c3QgY3J0YyBlbmFibGUgYWZ0ZXIgcHJvYmUgKi8KKwl0aW55ZHJtX3ByZXBhcmUodGRldik7CisJ LyogVGhlIHBhbmVsIGlzIGVuYWJsZWQgYWZ0ZXIgdGhlIGZpcnN0IGRpc3BsYXkgdXBkYXRlICov Cit9CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1fY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBjcnRjLT5kZXYtPmRldl9w cml2YXRlOworCisJRFJNX0RFQlVHX0tNUygicHJlcGFyZWQ9JXUsIGVuYWJsZWQ9JXVcbiIsIHRk ZXYtPnByZXBhcmVkLCB0ZGV2LT5lbmFibGVkKTsKKworCXRpbnlkcm1fZGlzYWJsZSh0ZGV2KTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgdGlueWRybV9j cnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IHRpbnlkcm1fY3J0Y19kaXNhYmxlLAor CS5lbmFibGUgPSB0aW55ZHJtX2NydGNfZW5hYmxlLAorfTsKKworc3RhdGljIHZvaWQgdGlueWRy bV9jcnRjX2NsZWFudXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCURSTV9ERUJVR19LTVMo IlxuIik7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKKwlrZnJlZShjcnRjKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB0aW55ZHJtX2NydGNfZnVuY3MgPSB7CisJ LnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKKwkuZGVzdHJveSA9IHRpbnlk cm1fY3J0Y19jbGVhbnVwLAorCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2Nv bmZpZywKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3Rh dGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0 cm95X3N0YXRlLAorfTsKKworaW50IHRpbnlkcm1fY3J0Y19jcmVhdGUoc3RydWN0IHRpbnlkcm1f ZGV2aWNlICp0ZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB0ZGV2LT5iYXNlOwor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgcmV0OworCisJY29ubmVjdG9y ID0ga3phbGxvYyhzaXplb2YoKmNvbm5lY3RvciksIEdGUF9LRVJORUwpOworCWVuY29kZXIgPSBr emFsbG9jKHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOworCWNydGMgPSBremFsbG9jKHNp emVvZigqY3J0YyksIEdGUF9LRVJORUwpOworCWlmICghY29ubmVjdG9yIHx8ICFlbmNvZGVyIHx8 ICFjcnRjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfZnJlZTsKKwl9CisKKwlk cm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZ0aW55ZHJtX2NydGNfaGVscGVyX2Z1bmNzKTsKKwly ZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRldiwgY3J0YywgJnRkZXYtPnBsYW5lLCBO VUxMLAorCQkJCQkmdGlueWRybV9jcnRjX2Z1bmNzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9y X2ZyZWU7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDEgPDwgZHJtX2NydGNfaW5kZXgo Y3J0Yyk7CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmdGlueWRybV9lbmNvZGVy X2hlbHBlcl9mdW5jcyk7CisJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZ0 aW55ZHJtX2VuY29kZXJfZnVuY3MsCisJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9OT05FKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2ZyZWU7CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9h ZGQoY29ubmVjdG9yLCAmdGlueWRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlyZXQgPSBk cm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ0aW55ZHJtX2Nvbm5lY3Rvcl9mdW5j cywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyb3JfZnJlZTsKKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihj b25uZWN0b3IsIGVuY29kZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZTsKKworCXJl dCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycm9yX2ZyZWU7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfZnJlZToKKwlrZnJlZShjcnRjKTsK KwlrZnJlZShlbmNvZGVyKTsKKwlrZnJlZShjb25uZWN0b3IpOworCisJcmV0dXJuIHJldDsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1kZWZlcnJl ZC5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWRlZmVycmVkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NTNhNgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1kZWZlcnJlZC5jCkBAIC0w LDAgKzEsMTE2IEBACisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgorCisjaW5jbHVk ZSAiaW50ZXJuYWwuaCIKKworYm9vbCB0aW55ZHJtX2RlZmVycmVkX2JlZ2luKHN0cnVjdCB0aW55 ZHJtX2RldmljZSAqdGRldiwKKwkJCSAgICBzdHJ1Y3QgdGlueWRybV9mYl9jbGlwICpmYl9jbGlw KQoreworCXN0cnVjdCB0aW55ZHJtX2RlZmVycmVkICpkZWZlcnJlZCA9IHRkZXYtPmRlZmVycmVk OworCisJc3Bpbl9sb2NrKCZkZWZlcnJlZC0+bG9jayk7CisJKmZiX2NsaXAgPSBkZWZlcnJlZC0+ ZmJfY2xpcDsKKwl0aW55ZHJtX3Jlc2V0X2NsaXAoJmRlZmVycmVkLT5mYl9jbGlwLmNsaXApOwor CWRlZmVycmVkLT5mYl9jbGlwLmZiID0gTlVMTDsKKwlkZWZlcnJlZC0+ZmJfY2xpcC52bWVtID0g TlVMTDsKKwlzcGluX3VubG9jaygmZGVmZXJyZWQtPmxvY2spOworCisJLyogVGhlIGNydGMgbWln aHQgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlICovCisJaWYgKCF0 aW55ZHJtX2FjdGl2ZSh0ZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogT24gZmlyc3QgdXBk YXRlIG1ha2Ugc3VyZSB0byBkbyB0aGUgZW50aXJlIGZyYW1lYnVmZmVyICovCisJaWYgKCF0ZGV2 LT5lbmFibGVkKSB7CisJCWZiX2NsaXAtPmNsaXAueDEgPSAwOworCQlmYl9jbGlwLT5jbGlwLngy ID0gZmJfY2xpcC0+ZmItPndpZHRoIC0gMTsKKwkJZmJfY2xpcC0+Y2xpcC55MSA9IDA7CisJCWZi X2NsaXAtPmNsaXAueTIgPSBmYl9jbGlwLT5mYi0+aGVpZ2h0IC0gMTsKKwl9CisKKwkvKiBUT0RP OiBzdXBwb3J0IHBhcnRpYWwgdXBkYXRlcyAqLworCWZiX2NsaXAtPmNsaXAueDEgPSAwOworCWZi X2NsaXAtPmNsaXAueDIgPSBmYl9jbGlwLT5mYi0+d2lkdGggLSAxOworCWZiX2NsaXAtPmNsaXAu eTEgPSAwOworCWZiX2NsaXAtPmNsaXAueTIgPSBmYl9jbGlwLT5mYi0+aGVpZ2h0IC0gMTsKKwor CXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX2RlZmVycmVkX2JlZ2luKTsK Kwordm9pZCB0aW55ZHJtX2RlZmVycmVkX2VuZChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYp Cit7CisJaWYgKHRkZXYtPnByZXBhcmVkICYmICF0ZGV2LT5lbmFibGVkKSB7CisJCWRybV9wYW5l bF9lbmFibGUoJnRkZXYtPnBhbmVsKTsKKwkJdGRldi0+ZW5hYmxlZCA9IHRydWU7CisJfQorfQor RVhQT1JUX1NZTUJPTCh0aW55ZHJtX2RlZmVycmVkX2VuZCk7CisKK2ludCB0aW55ZHJtX2RpcnR5 ZmIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtZW0sIHVuc2lnbmVkIGZsYWdz LAorCQkgICAgdW5zaWduZWQgY29sb3IsIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJ ICAgIHVuc2lnbmVkIG51bV9jbGlwcykKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYg PSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN0cnVjdCB0aW55ZHJtX2RlZmVycmVkICpkZWZl cnJlZCA9IHRkZXYtPmRlZmVycmVkOworCXN0cnVjdCB0aW55ZHJtX2ZiX2NsaXAgKmZiX2NsaXAg PSAmdGRldi0+ZGVmZXJyZWQtPmZiX2NsaXA7CisKKwlib29sIG5vX2RlbGF5ID0gZGVmZXJyZWQt Pm5vX2RlbGF5OworCXVuc2lnbmVkIGxvbmcgZGVsYXk7CisKKwlkZXZfZGJnKHRkZXYtPmJhc2Ut PmRldiwgIiVzKGZiID0gJXAsIHZtZW0gPSAlcCwgY2xpcHMgPSAlcCwgbnVtX2NsaXBzID0gJXUs IG5vX2RlbGF5ID0gJXUpXG4iLCBfX2Z1bmNfXywgZmIsIHZtZW0sIGNsaXBzLCBudW1fY2xpcHMs IG5vX2RlbGF5KTsKKworCWlmICghdm1lbSB8fCAhZmIpCisJCXJldHVybiAtRUlOVkFMOworCisJ c3Bpbl9sb2NrKCZkZWZlcnJlZC0+bG9jayk7CisJZmJfY2xpcC0+ZmIgPSBmYjsKKwlmYl9jbGlw LT52bWVtID0gdm1lbTsKKwl0aW55ZHJtX21lcmdlX2NsaXBzKCZmYl9jbGlwLT5jbGlwLCBjbGlw cywgbnVtX2NsaXBzLCBmbGFncywKKwkJCSAgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOworCWlm ICh0aW55ZHJtX2lzX2Z1bGxfY2xpcCgmZmJfY2xpcC0+Y2xpcCwgZmItPndpZHRoLCBmYi0+aGVp Z2h0KSkKKwkJbm9fZGVsYXkgPSB0cnVlOworCXNwaW5fdW5sb2NrKCZkZWZlcnJlZC0+bG9jayk7 CisKKwlkZWxheSA9IG5vX2RlbGF5ID8gMCA6IG1zZWNzX3RvX2ppZmZpZXMoZGVmZXJyZWQtPmRl ZmVyX21zKTsKKworCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRlZmVycmVkLT5kd29yaywg ZGVsYXkpKQorCQlkZXZfZGJnKHRkZXYtPmJhc2UtPmRldiwgIiVzOiBBbHJlYWR5IHNjaGVkdWxl ZFxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1f ZGlydHlmYik7CisKK3ZvaWQgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1Y3QgZHJtX2NsaXBfcmVj dCAqZHN0LAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywgdW5zaWduZWQgbnVtX2Ns aXBzLAorCQkJIHVuc2lnbmVkIGZsYWdzLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJc3Ry dWN0IGRybV9jbGlwX3JlY3QgZnVsbF9jbGlwID0geworCQkueDEgPSAwLAorCQkueDIgPSB3aWR0 aCAtIDEsCisJCS55MSA9IDAsCisJCS55MiA9IGhlaWdodCAtIDEsCisJfTsKKwlpbnQgaTsKKwor CWlmICghY2xpcHMpIHsKKwkJY2xpcHMgPSAmZnVsbF9jbGlwOworCQludW1fY2xpcHMgPSAxOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKykgeworCQlkc3QtPngxID0gbWlu KGRzdC0+eDEsIGNsaXBzW2ldLngxKTsKKwkJZHN0LT54MiA9IG1heChkc3QtPngyLCBjbGlwc1tp XS54Mik7CisJCWRzdC0+eTEgPSBtaW4oZHN0LT55MSwgY2xpcHNbaV0ueTEpOworCQlkc3QtPnky ID0gbWF4KGRzdC0+eTIsIGNsaXBzW2ldLnkyKTsKKworCQlpZiAoZmxhZ3MgJiBEUk1fTU9ERV9G Ql9ESVJUWV9BTk5PVEFURV9DT1BZKSB7CisJCQlpKys7CisJCQlkc3QtPngyID0gbWF4KGRzdC0+ eDIsIGNsaXBzW2ldLngyKTsKKwkJCWRzdC0+eTIgPSBtYXgoZHN0LT55MiwgY2xpcHNbaV0ueTIp OworCQl9CisJfQorCisJZHN0LT54MiA9IG1pbl90KHUzMiwgZHN0LT54Miwgd2lkdGggLSAxKTsK Kwlkc3QtPnkyID0gbWluX3QodTMyLCBkc3QtPnkyLCBoZWlnaHQgLSAxKTsKK30KK0VYUE9SVF9T WU1CT0wodGlueWRybV9tZXJnZV9jbGlwcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dGlueWRybS9jb3JlL3Rpbnlkcm0tZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2Nv cmUvdGlueWRybS1mYmRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0 YjZhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rp bnlkcm0tZmJkZXYuYwpAQCAtMCwwICsxLDM0NSBAQAorLy8jZGVmaW5lIERFQlVHCisvKgorICog Q29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcworICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KKworI2luY2x1ZGUgImlu dGVybmFsLmgiCisKKyNkZWZpbmUgREVGQVVMVF9ERUZJT19ERUxBWSBIWi8zMAorCitzdHJ1Y3Qg dGlueWRybV9mYmRldiB7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgZmJfaGVscGVyOworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgZmI7CisJdm9pZCAqdm1lbTsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IHRpbnlkcm1fZmJkZXYgKmhlbHBlcl90b19mYmRldihzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqaGVscGVyKQoreworCXJldHVybiBjb250YWluZXJfb2YoaGVscGVyLCBzdHJ1Y3QgdGlueWRy bV9mYmRldiwgZmJfaGVscGVyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlueWRybV9m YmRldiAqZmJfdG9fZmJkZXYoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihmYiwgc3RydWN0IHRpbnlkcm1fZmJkZXYsIGZiKTsKK30KKworc3RhdGlj IHZvaWQgdGlueWRybV9mYmRldl9kaXJ0eShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCwgYm9vbCBydW5fbm93KQoreworCXN0cnVjdCBkcm1fZmJf aGVscGVyICpoZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2 ID0gaGVscGVyLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gaGVscGVyLT5mYjsKKworCWlmICh0ZGV2LT5wbGFuZS5mYiAhPSBmYikKKwkJcmV0dXJuOwor CisJaWYgKHRkZXYtPmRlZmVycmVkKQorCQl0ZGV2LT5kZWZlcnJlZC0+bm9fZGVsYXkgPSBydW5f bm93OworCXRkZXYtPmRpcnR5ZmIoZmIsIGluZm8tPnNjcmVlbl9idWZmZXIsIDAsIDAsIGNsaXAs IDEpOworfQorCitzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2RlZmVycmVkX2lvKHN0cnVjdCBm Yl9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQorewor CXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgbmV4dCwgbWluLCBtYXg7CisJc3RydWN0IGRybV9j bGlwX3JlY3QgY2xpcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKK2ludCBjb3VudCA9IDA7CisKKwlt aW4gPSBVTE9OR19NQVg7CisJbWF4ID0gMDsKKwluZXh0ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHBhZ2UsIHBhZ2VsaXN0LCBscnUpIHsKKwkJc3RhcnQgPSBwYWdlLT5pbmRleCA8PCBQQUdF X1NISUZUOworCQllbmQgPSBzdGFydCArIFBBR0VfU0laRSAtIDE7CisJCW1pbiA9IG1pbihtaW4s IHN0YXJ0KTsKKwkJbWF4ID0gbWF4KG1heCwgZW5kKTsKK2NvdW50Kys7CisJfQorCisJaWYgKG1p biA8IG1heCkgeworCQljbGlwLngxID0gMDsKKwkJY2xpcC54MiA9IGluZm8tPnZhci54cmVzIC0g MTsKKwkJY2xpcC55MSA9IG1pbiAvIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwkJY2xpcC55MiA9 IG1pbl90KHUzMiwgbWF4IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoLAorCQkJCSAgICBpbmZvLT52 YXIueXJlcyAtIDEpOworCQlwcl9kZWJ1ZygiJXM6IHgxPSV1LCB4Mj0ldSwgeTE9JXUsIHkyPSV1 LCBjb3VudD0lZFxuIiwgX19mdW5jX18sIGNsaXAueDEsIGNsaXAueDIsIGNsaXAueTEsIGNsaXAu eTIsIGNvdW50KTsKKwkJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xpcCwgdHJ1ZSk7CisJ fQorfQorCitzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9p bmZvICppbmZvLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sK KwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0geworCQkueDEgPSByZWN0LT5keCwKKwkJLngy ID0gcmVjdC0+ZHggKyByZWN0LT53aWR0aCAtIDEsCisJCS55MSA9IHJlY3QtPmR5LAorCQkueTIg PSByZWN0LT5keSArIHJlY3QtPmhlaWdodCAtIDEsCisJfTsKKworCWRldl9kYmcoaW5mby0+ZGV2 LCAiJXM6IGR4PSVkLCBkeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwKKwkJX19mdW5jX18s IHJlY3QtPmR4LCByZWN0LT5keSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisJc3lzX2Zp bGxyZWN0KGluZm8sIHJlY3QpOworCXRpbnlkcm1fZmJkZXZfZGlydHkoaW5mbywgJmNsaXAsIGZh bHNlKTsKK30KKworc3RhdGljIHZvaWQgdGlueWRybV9mYmRldl9mYl9jb3B5YXJlYShzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEp Cit7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgY2xpcCA9IHsKKwkJLngxID0gYXJlYS0+ZHgsCisJ CS54MiA9IGFyZWEtPmR4ICsgYXJlYS0+d2lkdGggLSAxLAorCQkueTEgPSBhcmVhLT5keSwKKwkJ LnkyID0gYXJlYS0+ZHkgKyBhcmVhLT5oZWlnaHQgLSAxLAorCX07CisKKwlkZXZfZGJnKGluZm8t PmRldiwgIiVzOiBkeD0lZCwgZHk9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCisJCV9fZnVu Y19fLCAgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0KTsKKwlz eXNfY29weWFyZWEoaW5mbywgYXJlYSk7CisJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xp cCwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2ltYWdlYmxpdChz dHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICpp bWFnZSkKK3sKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0geworCQkueDEgPSBpbWFnZS0+ ZHgsCisJCS54MiA9IGltYWdlLT5keCArIGltYWdlLT53aWR0aCAtIDEsCisJCS55MSA9IGltYWdl LT5keSwKKwkJLnkyID0gaW1hZ2UtPmR5ICsgaW1hZ2UtPmhlaWdodCAtIDEsCisJfTsKKworCWRl dl9kYmcoaW5mby0+ZGV2LCAiJXM6IGR4PSVkLCBkeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxu IiwKKwkJX19mdW5jX18sICBpbWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLCBpbWFn ZS0+aGVpZ2h0KTsKKwlzeXNfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwl0aW55ZHJtX2ZiZGV2 X2RpcnR5KGluZm8sICZjbGlwLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRpbnlkcm1f ZmJkZXZfZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgICAgY29uc3QgY2hh ciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sK KwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0geworCQkueDEgPSAwLAorCQkueDIgPSBpbmZv LT52YXIueHJlcyAtIDEsCisJCS55MSA9IDAsCisJCS55MiA9IGluZm8tPnZhci55cmVzIC0gMSwK Kwl9OworCXNzaXplX3QgcmV0OworCisJZGV2X2RiZyhpbmZvLT5kZXYsICIlczpcbiIsIF9fZnVu Y19fKTsKKwlyZXQgPSBmYl9zeXNfd3JpdGUoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7CisJdGlu eWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xpcCwgZmFsc2UpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgdGlueWRybV9mYmRldl9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQoreworfQorCitzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB0 aW55ZHJtX2ZiZGV2X2ZiX2Z1bmNzID0geworCS5kZXN0cm95ID0gdGlueWRybV9mYmRldl9mYl9k ZXN0cm95LAorfTsKKworc3RhdGljIGludCB0aW55ZHJtX2ZiZGV2X2NyZWF0ZShzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqaGVscGVyLAorCQkJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6 ZSAqc2l6ZXMpCit7CisJc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2ID0gaGVscGVyX3RvX2Zi ZGV2KGhlbHBlcik7CisJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgbW9kZV9jbWQgPSB7IDAgfTsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaGVscGVyLT5kZXY7CisJc3RydWN0IHRpbnlkcm1f ZGV2aWNlICp0ZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8g KmZiZGVmaW87CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJdW5zaWduZWQgaW50IGJ5 dGVzX3Blcl9waXhlbCA9IERJVl9ST1VORF9VUChzaXplcy0+c3VyZmFjZV9icHAsIDgpOworCXN0 cnVjdCBmYl9vcHMgKmZib3BzOworCXN0cnVjdCBmYl9pbmZvICpmYmk7CisJc2l6ZV90IHNpemU7 CisJY2hhciAqc2NyZWVuX2J1ZmZlcjsKKwlpbnQgcmV0OworCisJbW9kZV9jbWQud2lkdGggPSBz aXplcy0+c3VyZmFjZV93aWR0aDsKKwltb2RlX2NtZC5oZWlnaHQgPSBzaXplcy0+c3VyZmFjZV9o ZWlnaHQ7CisJbW9kZV9jbWQucGl0Y2hlc1swXSA9IHNpemVzLT5zdXJmYWNlX3dpZHRoICogYnl0 ZXNfcGVyX3BpeGVsOworCW1vZGVfY21kLnBpeGVsX2Zvcm1hdCA9IGRybV9tb2RlX2xlZ2FjeV9m Yl9mb3JtYXQoc2l6ZXMtPnN1cmZhY2VfYnBwLAorCQkJCQkJCXNpemVzLT5zdXJmYWNlX2RlcHRo KTsKKwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1vZGVfY21kLmhlaWdodDsKKworCS8q CisJICogQSBwZXIgZGV2aWNlIGZib3BzIHN0cnVjdHVyZSBpcyBuZWVkZWQgYmVjYXVzZQorCSAq IGZiX2RlZmVycmVkX2lvX2NsZWFudXAoKSBjbGVhcnMgZmJvcHMuZmJfbW1hcAorCSAqLworCWZi b3BzID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmZib3BzKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFmYm9wcykgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRl IGZib3BzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQSBwZXIgZGV2aWNlIHN0 cnVjdHVyZSBpcyBuZWVkZWQgZm9yIGluZGl2aWR1YWwgZGVsYXlzICovCisJZmJkZWZpbyA9IGRl dm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpmYmRlZmlvKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFmYmRlZmlvKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZmJk ZWZpb1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZiaSA9IGRybV9mYl9oZWxwZXJf YWxsb2NfZmJpKGhlbHBlcik7CisJaWYgKElTX0VSUihmYmkpKSB7CisJCWRldl9lcnIoZGV2LT5k ZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZmJpXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZmJpKTsK Kwl9CisKKwlzY3JlZW5fYnVmZmVyID0gdnphbGxvYyhzaXplKTsKKwlpZiAoIXNjcmVlbl9idWZm ZXIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmYmRldiBzY3Jl ZW4gYnVmZmVyLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZiX2luZm9fZGVz dHJveTsKKwl9CisKKwlmYiA9ICZmYmRldi0+ZmI7CisJaGVscGVyLT5mYiA9IGZiOworCWRybV9o ZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChmYiwgJm1vZGVfY21kKTsKKwlyZXQgPSBkcm1fZnJh bWVidWZmZXJfaW5pdChkZXYsIGZiLCAmdGlueWRybV9mYmRldl9mYl9mdW5jcyk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgZnJhbWVidWZmZXI6ICVk XG4iLCByZXQpOworCQl2ZnJlZShzY3JlZW5fYnVmZmVyKTsKKwkJZ290byBlcnJfZmJfaW5mb19k ZXN0cm95OworCX0KKworCURSTV9ERUJVR19LTVMoImZiZGV2IEZCIElEOiAlZCwgdm1lbSA9ICVw XG4iLCBmYi0+YmFzZS5pZCwgZmJkZXYtPnZtZW0pOworCisJZmJpLT5wYXIgPSBoZWxwZXI7CisJ ZmJpLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfCBGQklORk9fVklSVEZCOworCXN0cmNw eShmYmktPmZpeC5pZCwgInRpbnlkcm0iKTsKKworCWZib3BzLT5vd25lciAgICAgICAgICA9IFRI SVNfTU9EVUxFLAorCWZib3BzLT5mYl9maWxscmVjdCAgICA9IHRpbnlkcm1fZmJkZXZfZmJfZmls bHJlY3QsCisJZmJvcHMtPmZiX2NvcHlhcmVhICAgID0gdGlueWRybV9mYmRldl9mYl9jb3B5YXJl YSwKKwlmYm9wcy0+ZmJfaW1hZ2VibGl0ICAgPSB0aW55ZHJtX2ZiZGV2X2ZiX2ltYWdlYmxpdCwK KwlmYm9wcy0+ZmJfd3JpdGUgICAgICAgPSB0aW55ZHJtX2ZiZGV2X2ZiX3dyaXRlLAorCWZib3Bz LT5mYl9jaGVja192YXIgICA9IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyLAorCWZib3BzLT5mYl9z ZXRfcGFyICAgICA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwlmYm9wcy0+ZmJfYmxhbmsgICAg ICAgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAorCWZib3BzLT5mYl9zZXRjbWFwICAgICA9IGRybV9m Yl9oZWxwZXJfc2V0Y21hcCwKKwlmYmktPmZib3BzID0gZmJvcHM7CisKKwlkcm1fZmJfaGVscGVy X2ZpbGxfZml4KGZiaSwgZmItPnBpdGNoZXNbMF0sIGZiLT5kZXB0aCk7CisJZHJtX2ZiX2hlbHBl cl9maWxsX3ZhcihmYmksIGhlbHBlciwgc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVpZ2h0 KTsKKworCWZiZGV2LT52bWVtID0gc2NyZWVuX2J1ZmZlcjsKKwlmYmktPnNjcmVlbl9idWZmZXIg PSBzY3JlZW5fYnVmZmVyOworCWZiaS0+c2NyZWVuX3NpemUgPSBzaXplOworCWZiaS0+Zml4LnNt ZW1fbGVuID0gc2l6ZTsKKworCWlmICh0ZGV2LT5kZWZlcnJlZCkKKwkJZmJkZWZpby0+ZGVsYXkg PSBtc2Vjc190b19qaWZmaWVzKHRkZXYtPmRlZmVycmVkLT5kZWZlcl9tcyk7CisJZWxzZQorCQlm YmRlZmlvLT5kZWxheSA9IERFRkFVTFRfREVGSU9fREVMQVk7CisJLyogZGVsYXk9MCBpcyB0dXJu ZWQgaW50byBkZWxheT1IWiwgc28gdXNlIDEgYXMgYSBtaW5pbXVtICovCisJaWYgKCFmYmRlZmlv LT5kZWxheSkKKwkJZmJkZWZpby0+ZGVsYXkgPSAxOworCWZiZGVmaW8tPmRlZmVycmVkX2lvID0g dGlueWRybV9mYmRldl9kZWZlcnJlZF9pbzsKKwlmYmktPmZiZGVmaW8gPSBmYmRlZmlvOworCWZi X2RlZmVycmVkX2lvX2luaXQoZmJpKTsKKworCXJldHVybiAwOworCitlcnJfZmJfaW5mb19kZXN0 cm95OgorCWRybV9mYl9oZWxwZXJfcmVsZWFzZV9mYmkoaGVscGVyKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2Zi X2hlbHBlcl9mdW5jcyA9IHsKKwkuZmJfcHJvYmUgPSB0aW55ZHJtX2ZiZGV2X2NyZWF0ZSwKK307 CisKK2ludCB0aW55ZHJtX2ZiZGV2X2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQor eworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB0ZGV2LT5iYXNlOworCXN0cnVjdCBkcm1fZmJf aGVscGVyICpoZWxwZXI7CisJc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2OworCWludCByZXQ7 CisKKwlEUk1fREVCVUdfS01TKCJJTlxuIik7CisKKwlmYmRldiA9IGRldm1fa3phbGxvYyhkZXYt PmRldiwgc2l6ZW9mKCpmYmRldiksIEdGUF9LRVJORUwpOworCWlmICghZmJkZXYpIHsKKwkJZGV2 X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkcm0gZmJkZXYuXG4iKTsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfQorCisJaGVscGVyID0gJmZiZGV2LT5mYl9oZWxwZXI7CisKKwlkcm1f ZmJfaGVscGVyX3ByZXBhcmUoZGV2LCBoZWxwZXIsICZ0aW55ZHJtX2ZiX2hlbHBlcl9mdW5jcyk7 CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZGV2LCBoZWxwZXIsIDEsIDEpOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcm0g ZmIgaGVscGVyLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZHJtX2ZiX2hlbHBl cl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKGhlbHBlcik7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgY29ubmVjdG9ycy5cbiIpOworCQlnb3Rv IGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7CisKKwl9CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2lu aXRpYWxfY29uZmlnKGhlbHBlciwgMTYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2 LT5kZXYsICJGYWlsZWQgdG8gc2V0IGluaXRpYWwgaHcgY29uZmlndXJhdGlvbi5cbiIpOworCQln b3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7CisJfQorCisJdGRldi0+ZmJkZXYgPSBmYmRldjsK KwlEUk1fREVCVUdfS01TKCJPVVRcbiIpOworCisJcmV0dXJuIDA7CisKK2Vycl9kcm1fZmJfaGVs cGVyX2Zpbmk6CisJZHJtX2ZiX2hlbHBlcl9maW5pKGhlbHBlcik7CisKKwlyZXR1cm4gcmV0Owor fQorCit2b2lkIHRpbnlkcm1fZmJkZXZfZmluaShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYp Cit7CisJc3RydWN0IHRpbnlkcm1fZmJkZXYgKmZiZGV2ID0gdGRldi0+ZmJkZXY7CisJc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9ICZmYmRldi0+ZmJfaGVscGVyOworCisJRFJNX0RF QlVHX0tNUygiSU5cbiIpOworCisJZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaShmYl9oZWxw ZXIpOworCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoZmJfaGVscGVyLT5mYmRldik7CisJZHJtX2Zi X2hlbHBlcl9yZWxlYXNlX2ZiaShmYl9oZWxwZXIpOworCWRybV9mYl9oZWxwZXJfZmluaShmYl9o ZWxwZXIpOworCisJZHJtX2ZyYW1lYnVmZmVyX3VucmVnaXN0ZXJfcHJpdmF0ZSgmZmJkZXYtPmZi KTsKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmZmJkZXYtPmZiKTsKKworCXZmcmVlKGZiZGV2 LT52bWVtKTsKKworCXRkZXYtPmZiZGV2ID0gTlVMTDsKKwlEUk1fREVCVUdfS01TKCJPVVRcbiIp OworfQorCisvKiBUT0RPOiBwYXNzIHRkZXYgaW5zdGVhZCA/ICovCit2b2lkIHRpbnlkcm1fZmJk ZXZfcmVzdG9yZV9tb2RlKHN0cnVjdCB0aW55ZHJtX2ZiZGV2ICpmYmRldikKK3sKKwlpZiAoZmJk ZXYpCisJCWRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlX3VubG9ja2VkKCZmYmRldi0+ ZmJfaGVscGVyKTsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9mYmRldl9yZXN0b3JlX21vZGUp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZyYW1l YnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tZnJhbWVidWZm ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDU2YmM2Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWZyYW1lYnVm ZmVyLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxm IFRyw7hubmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciAqdG9fdGlueWRybV9mcmFtZWJ1ZmZlcihzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZiLCBzdHJ1 Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1f ZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1 Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciAqdGlueWRybV9mYiA9IHRvX3Rpbnlkcm1fZnJhbWVidWZm ZXIoZmIpOworCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGZiLT5kZXYtPmRldl9wcml2 YXRlOworCisJRFJNX0RFQlVHX0tNUygiZmIgPSAlcCwgY21hX29iaiA9ICVwXG4iLCBmYiwgdGlu eWRybV9mYi0+Y21hX29iaik7CisKKwlpZiAodGRldi0+ZGVmZXJyZWQpCisJCWZsdXNoX2RlbGF5 ZWRfd29yaygmdGRldi0+ZGVmZXJyZWQtPmR3b3JrKTsKKworCWlmICh0aW55ZHJtX2ZiLT5jbWFf b2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmdGlueWRybV9mYi0+ Y21hX29iai0+YmFzZSk7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7CisJa2ZyZWUo dGlueWRybV9mYik7Cit9CisKK3N0YXRpYyBpbnQgdGlueWRybV9mcmFtZWJ1ZmZlcl9kaXJ0eShz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LAorCQkJCSAgICAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCSAg ICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCSAgICAgdW5zaWduZWQgbnVtX2Ns aXBzKQoreworCXN0cnVjdCB0aW55ZHJtX2ZyYW1lYnVmZmVyICp0ZmIgPSB0b190aW55ZHJtX2Zy YW1lYnVmZmVyKGZiKTsKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBmYi0+ZGV2LT5k ZXZfcHJpdmF0ZTsKKworCWRldl9kYmcoZmItPmRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsK KworCXJldHVybiB0ZGV2LT5kaXJ0eWZiKGZiLCB0ZmItPmNtYV9vYmotPnZhZGRyLCBmbGFncywg Y29sb3IsIGNsaXBzLCBudW1fY2xpcHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlcl9mdW5jcyB0aW55ZHJtX2ZiX2Z1bmNzID0geworCS5kZXN0cm95ID0gdGlueWRy bV9mcmFtZWJ1ZmZlcl9kZXN0cm95LAorCS5kaXJ0eSA9IHRpbnlkcm1fZnJhbWVidWZmZXJfZGly dHksCisvKglUT0RPPworICoJLmNyZWF0ZV9oYW5kbGUgPSB0aW55ZHJtX2ZyYW1lYnVmZmVyX2Ny ZWF0ZV9oYW5kbGUsICovCit9OworCitzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCit0 aW55ZHJtX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCisJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQorewor CXN0cnVjdCB0aW55ZHJtX2ZyYW1lYnVmZmVyICp0aW55ZHJtX2ZiOworCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwkvKiBUT0RPPyBWYWxpZGF0ZSB0aGUgcGl4ZWwg Zm9ybWF0LCBzaXplIGFuZCBwaXRjaGVzICovCisJRFJNX0RFQlVHX0tNUygicGl4ZWxfZm9ybWF0 PSVzXG4iLCBkcm1fZ2V0X2Zvcm1hdF9uYW1lKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpKTsKKwlE Uk1fREVCVUdfS01TKCJ3aWR0aD0ldVxuIiwgbW9kZV9jbWQtPndpZHRoKTsKKwlEUk1fREVCVUdf S01TKCJoZWlnaHQ9JXVcbiIsIG1vZGVfY21kLT5oZWlnaHQpOworCURSTV9ERUJVR19LTVMoInBp dGNoZXNbMF09JXVcbiIsIG1vZGVfY21kLT5waXRjaGVzWzBdKTsKKworCW9iaiA9IGRybV9nZW1f b2JqZWN0X2xvb2t1cChkZGV2LCBmaWxlX3ByaXYsIG1vZGVfY21kLT5oYW5kbGVzWzBdKTsKKwlp ZiAoIW9iaikKKwkJcmV0dXJuIE5VTEw7CisKKwl0aW55ZHJtX2ZiID0ga3phbGxvYyhzaXplb2Yo KnRpbnlkcm1fZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRpbnlkcm1fZmIpCisJCXJldHVybiBO VUxMOworCisJdGlueWRybV9mYi0+Y21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwor CisJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGRldiwgJnRpbnlkcm1fZmItPmJhc2UsICZ0 aW55ZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHRpbnlkcm1fZmIpOworCQlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJnRpbnlkcm1fZmItPmJhc2Us IG1vZGVfY21kKTsKKworCXJldHVybiAmdGlueWRybV9mYi0+YmFzZTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgdGlueWRybV9tb2RlX2NvbmZpZ19mdW5j cyA9IHsKKwkuZmJfY3JlYXRlID0gdGlueWRybV9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVjayA9 IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0LAorfTsKKwordm9pZCB0aW55ZHJtX21vZGVfY29uZmlnX2luaXQoc3RydWN0 IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gdGRl di0+YmFzZTsKKworCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOworCisJZGRldi0+bW9kZV9j b25maWcubWluX3dpZHRoID0gdGRldi0+d2lkdGg7CisJZGRldi0+bW9kZV9jb25maWcubWluX2hl aWdodCA9IHRkZXYtPmhlaWdodDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSB0ZGV2 LT53aWR0aDsKKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gdGRldi0+aGVpZ2h0Owor CWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnRpbnlkcm1fbW9kZV9jb25maWdfZnVuY3M7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVy cy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ5YTE1Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwpAQCAtMCww ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcworICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2ts aWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgImludGVybmFs LmgiCisKK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0 KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xp Z2h0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUo ZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7CisJaWYgKCFucCkKKwkJcmV0dXJuIE5VTEw7 CisKKwliYWNrbGlnaHQgPSBvZl9maW5kX2JhY2tsaWdodF9ieV9ub2RlKG5wKTsKKwlvZl9ub2Rl X3B1dChucCk7CisKKwlpZiAoIWJhY2tsaWdodCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9E RUZFUik7CisKKwlyZXR1cm4gYmFja2xpZ2h0OworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX29m X2ZpbmRfYmFja2xpZ2h0KTsKKworaW50IHRpbnlkcm1fcGFuZWxfZW5hYmxlX2JhY2tsaWdodChz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYg PSB0aW55ZHJtX2Zyb21fcGFuZWwocGFuZWwpOworCisJaWYgKHRkZXYtPmJhY2tsaWdodCkgewor CQlpZiAodGRldi0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID09IDApCisJCQl0ZGV2LT5i YWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPQorCQkJCQl0ZGV2LT5iYWNrbGlnaHQtPnByb3Bz Lm1heF9icmlnaHRuZXNzOworCQl0ZGV2LT5iYWNrbGlnaHQtPnByb3BzLnN0YXRlICY9IH5CTF9D T1JFX1NVU1BFTkRFRDsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXModGRldi0+YmFja2xpZ2h0 KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9wYW5lbF9lbmFi bGVfYmFja2xpZ2h0KTsKKworaW50IHRpbnlkcm1fcGFuZWxfZGlzYWJsZV9iYWNrbGlnaHQoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0g dGlueWRybV9mcm9tX3BhbmVsKHBhbmVsKTsKKworCWlmICh0ZGV2LT5iYWNrbGlnaHQpIHsKKwkJ dGRldi0+YmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSB8PSBCTF9DT1JFX1NVU1BFTkRFRDsKKwkJYmFj a2xpZ2h0X3VwZGF0ZV9zdGF0dXModGRldi0+YmFja2xpZ2h0KTsKKwl9CisKKwlyZXR1cm4gMDsK K30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodCk7CisKK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlueWRybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKworCXRpbnlkcm1fZGlzYWJsZSh0ZGV2KTsKKwl0aW55ZHJtX3VucHJlcGFyZSh0ZGV2 KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpbnlkcm1f cG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2Ug KnRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXRpbnlkcm1fcHJlcGFyZSh0ZGV2KTsK KwkvKiBUaGUgcGFuZWwgaXMgZW5hYmxlZCBhZnRlciB0aGUgZmlyc3QgZGlzcGxheSB1cGRhdGUg Ki8KKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aW55ZHJtX3Np bXBsZV9wbV9vcHMgPSB7CisgICAgICAgIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHRpbnlkcm1f cG1fc3VzcGVuZCwgdGlueWRybV9wbV9yZXN1bWUpCit9OworRVhQT1JUX1NZTUJPTCh0aW55ZHJt X3NpbXBsZV9wbV9vcHMpOworCit2b2lkIHRpbnlkcm1fc3BpX3NodXRkb3duKHN0cnVjdCBzcGlf ZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gc3BpX2dldF9k cnZkYXRhKHNwaSk7CisKKwl0aW55ZHJtX2Rpc2FibGUodGRldik7CisJdGlueWRybV91bnByZXBh cmUodGRldik7Cit9CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fc3BpX3NodXRkb3duKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jIGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBsYW5lLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3NGU4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlk cm0uaD4KKworLyogVE9ETzogQ29uZmlndXJhYmxlICovCitzdGF0aWMgY29uc3QgdWludDMyX3Qg dGlueWRybV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9Y UkdCODg4OCwKK307CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1fcGxhbmVfYXRvbWljX3VwZGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xk X3N0YXRlKQoreworCURSTV9ERUJVRygiaGFuZGxlIDB4JXgsIGNydGMgJWR4JWQrJWQrJWRcbiIs IDAsCisJCSAgcGxhbmUtPnN0YXRlLT5jcnRjX3csIHBsYW5lLT5zdGF0ZS0+Y3J0Y19oLAorCQkg IHBsYW5lLT5zdGF0ZS0+Y3J0Y194LCBwbGFuZS0+c3RhdGUtPmNydGNfeSk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyB0aW55ZHJtX3BsYW5lX2hlbHBl cl9mdW5jcyA9IHsKKwkuYXRvbWljX3VwZGF0ZSA9IHRpbnlkcm1fcGxhbmVfYXRvbWljX3VwZGF0 ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHRpbnlkcm1fcGxh bmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVf cGxhbmUsCisJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKKwkuZGVzdHJveQkJPSBkcm1fcGxhbmVfY2xlYW51cCwKKwkucmVzZXQJCQk9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0 ZQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9OworCitpbnQgdGlu eWRybV9wbGFuZV9pbml0KHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlkcm1fcGxh bmVfaGVscGVyX2FkZCgmdGRldi0+cGxhbmUsICZ0aW55ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyk7 CisJcmV0dXJuIGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCh0ZGV2LT5iYXNlLCAmdGRldi0+cGxh bmUsIDAsCisJCQkJCSZ0aW55ZHJtX3BsYW5lX2Z1bmNzLCB0aW55ZHJtX2Zvcm1hdHMsCisJCQkJ CUFSUkFZX1NJWkUodGlueWRybV9mb3JtYXRzKSwKKwkJCQkJRFJNX1BMQU5FX1RZUEVfUFJJTUFS WSk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0uaCBiL2luY2x1 ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjY5NWU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlk cm0uaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYg VHLDuG5uZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y CisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYg X19MSU5VWF9USU5ZRFJNX0gKKyNkZWZpbmUgX19MSU5VWF9USU5ZRFJNX0gKKworCisjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisKK3N0cnVjdCB0aW55ZHJtX2RlZmVycmVkOworc3RydWN0IHRpbnlkcm1f ZmJkZXY7CitzdHJ1Y3Qgc3BpX2RldmljZTsKK3N0cnVjdCByZWd1bGF0b3I7CitzdHJ1Y3QgbGNk cmVnOworCitzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciB7CisJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciBiYXNlOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7Cit9OworCitz dHJ1Y3QgdGlueWRybV9kZXZpY2UgeworCXN0cnVjdCBkcm1fZGV2aWNlICpiYXNlOworCXUzMiB3 aWR0aCwgaGVpZ2h0OworCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7CisJc3RydWN0IGRybV9wbGFu ZSBwbGFuZTsKKwlzdHJ1Y3QgdGlueWRybV9mYmRldiAqZmJkZXY7CisJc3RydWN0IHRpbnlkcm1f ZGVmZXJyZWQgKmRlZmVycmVkOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7 CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOworCXN0cnVjdCBsY2RyZWcgKmxjZHJlZzsK Kwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKKwl2b2lkICpkZXZfcHJpdmF0ZTsKKwor CWludCAoKmRpcnR5ZmIpKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2bWVtLCB1 bnNpZ25lZCBmbGFncywKKwkJICAgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcHMsCisJCSAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMpOworfTsKKworaW50IGRl dm1fdGlueWRybV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2Rl dmljZSAqdGRldik7CitpbnQgdGlueWRybV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cit2b2lkIHRpbnlkcm1fcmVsZWFzZShzdHJ1Y3Qg dGlueWRybV9kZXZpY2UgKnRkZXYpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2Rl dmljZSAqdGlueWRybV9mcm9tX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJl dHVybiBwYW5lbC0+Y29ubmVjdG9yLT5kZXYtPmRldl9wcml2YXRlOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgdGlueWRybV9wcmVwYXJlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sK KwlpZiAoIXRkZXYtPnByZXBhcmVkKSB7CisJCWRybV9wYW5lbF9wcmVwYXJlKCZ0ZGV2LT5wYW5l bCk7CisJCXRkZXYtPnByZXBhcmVkID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCB0aW55ZHJtX3VucHJlcGFyZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCit7CisJaWYg KHRkZXYtPnByZXBhcmVkKSB7CisJCWRybV9wYW5lbF91bnByZXBhcmUoJnRkZXYtPnBhbmVsKTsK KwkJdGRldi0+cHJlcGFyZWQgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0 aW55ZHJtX2VuYWJsZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCit7CisJaWYgKCF0ZGV2 LT5lbmFibGVkKSB7CisJCWRybV9wYW5lbF9lbmFibGUoJnRkZXYtPnBhbmVsKTsKKwkJdGRldi0+ ZW5hYmxlZCA9IHRydWU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlueWRybV9kaXNh YmxlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlpZiAodGRldi0+ZW5hYmxlZCkg eworCQlkcm1fcGFuZWxfZGlzYWJsZSgmdGRldi0+cGFuZWwpOworCQl0ZGV2LT5lbmFibGVkID0g ZmFsc2U7CisJfQorfQorCitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqdGlueWRybV9vZl9maW5k X2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IHRpbnlkcm1fcGFuZWxfZW5hYmxl X2JhY2tsaWdodChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7CitpbnQgdGlueWRybV9wYW5lbF9k aXNhYmxlX2JhY2tsaWdodChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7CitleHRlcm4gY29uc3Qg c3RydWN0IGRldl9wbV9vcHMgdGlueWRybV9zaW1wbGVfcG1fb3BzOwordm9pZCB0aW55ZHJtX3Nw aV9zaHV0ZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKKworc3RydWN0IHRpbnlkcm1fZmJf Y2xpcCB7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9jbGlwX3Jl Y3QgY2xpcDsKKwl2b2lkICp2bWVtOworfTsKKworc3RydWN0IHRpbnlkcm1fZGVmZXJyZWQgewor CXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7CisJc3RydWN0IHRpbnlkcm1fZmJfY2xpcCBmYl9j bGlwOworCXVuc2lnbmVkIGRlZmVyX21zOworCXNwaW5sb2NrX3QgbG9jazsKKwlib29sIG5vX2Rl bGF5OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKndvcmtfdG9f dGlueWRybShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHRpbnlkcm1fZGVm ZXJyZWQgKmRlZmVycmVkOworCisJZGVmZXJyZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0 IHRpbnlkcm1fZGVmZXJyZWQsIGR3b3JrLndvcmspOworCXJldHVybiBkZWZlcnJlZC0+ZmJfY2xp cC5mYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworYm9vbCB0aW55ZHJtX2RlZmVycmVkX2JlZ2lu KHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiwKKwkJCSAgICBzdHJ1Y3QgdGlueWRybV9mYl9j bGlwICpmYl9jbGlwKTsKK3ZvaWQgdGlueWRybV9kZWZlcnJlZF9lbmQoc3RydWN0IHRpbnlkcm1f ZGV2aWNlICp0ZGV2KTsKK2ludCB0aW55ZHJtX2RpcnR5ZmIoc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsIHZvaWQgKnZtZW0sIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgdW5zaWduZWQgY29sb3Is IHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJICAgIHVuc2lnbmVkIG51bV9jbGlwcyk7 CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0aW55ZHJtX2lzX2Z1bGxfY2xpcChzdHJ1Y3QgZHJtX2Ns aXBfcmVjdCAqY2xpcCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCXJldHVybiBjbGlwLT54 MSA9PSAwICYmIGNsaXAtPngyID49ICh3aWR0aCAtIDEpICYmCisJICAgICAgIGNsaXAtPnkxID09 IDAgJiYgY2xpcC0+eTIgPj0gKGhlaWdodCAtMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0 aW55ZHJtX3Jlc2V0X2NsaXAoc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApCit7CisJY2xpcC0+ eDEgPSB+MDsKKwljbGlwLT54MiA9IDA7CisJY2xpcC0+eTEgPSB+MDsKKwljbGlwLT55MiA9IDA7 Cit9CisKK3ZvaWQgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqZHN0 LAorCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywgdW5zaWduZWQgbnVtX2NsaXBzLAor CQkJIHVuc2lnbmVkIGZsYWdzLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpOworCisjZW5kaWYgLyog X19MSU5VWF9USU5ZRFJNX0ggKi8KLS0gCjIuMi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK