From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v3 1/7] drm: Add DRM support for tiny LCD displays Date: Tue, 31 Jan 2017 17:03:13 +0100 Message-ID: <20170131160319.9695-2-noralf@tronnes.org> References: <20170131160319.9695-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170131160319.9695-1-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, devicetree@vger.kernel.org Cc: thomas.petazzoni@free-electrons.com, linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org dGlueWRybSBwcm92aWRlcyBoZWxwZXJzIGZvciB2ZXJ5IHNpbXBsZSBkaXNwbGF5cyB0aGF0IGNh biB1c2UKQ01BIGJhY2tlZCBmcmFtZWJ1ZmZlcnMgYW5kIG5lZWQgZmx1c2hpbmcgb24gY2hhbmdl cy4KClNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgpB Y2tlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KLS0tCgpDaGFu Z2VzIHNpbmNlIHZlcnNpb24gMjoKLSBSZW1vdmUgZmJkZXYgYWZ0ZXIgZHJtIHVucmVnaXN0ZXIs IG5vdCBiZWZvcmUuCgpDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMToKLSBBZGQgdGlueWRybS5yc3QK LSBTZXQgdGRldi0+ZmJkZXZfY21hPU5VTEwgb24gdW5yZWdpc3RlciAobGFzdGNsb3NlIGlzIGNh bGxlZCBhZnRlciB0aGF0KS4KLSBSZW1vdmUgc29tZSBEUk1fREVCVUcqKCkKCiBEb2N1bWVudGF0 aW9uL2dwdS9pbmRleC5yc3QgICAgICAgICAgICAgICAgIHwgICAxICsKIERvY3VtZW50YXRpb24v Z3B1L3Rpbnlkcm0ucnN0ICAgICAgICAgICAgICAgfCAgMjEgKysKIGRyaXZlcnMvZ3B1L2RybS9L Y29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9L Y29uZmlnICAgICAgICAgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2Vm aWxlICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtl ZmlsZSAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0t Y29yZS5jIHwgMzc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1waXBlLmMgfCAyMzQgKysrKysrKysrKysrKysrKysKIGlu Y2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS5oICAgICAgICAgICAgICAgfCAxMTUgKysrKysrKysr CiAxMCBmaWxlcyBjaGFuZ2VkLCA3NjMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IERvY3VtZW50YXRpb24vZ3B1L3Rpbnlkcm0ucnN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vY29yZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1jb3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tcGlwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2dwdS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9pbmRleC5yc3QKaW5kZXggMzY3ZDdj My4uZjgxMjc4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvaW5kZXgucnN0CisrKyBi L0RvY3VtZW50YXRpb24vZ3B1L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQCBMaW51eCBHUFUg RHJpdmVyIERldmVsb3BlcidzIEd1aWRlCiAgICBkcm0ta21zLWhlbHBlcnMKICAgIGRybS11YXBp CiAgICBpOTE1CisgICB0aW55ZHJtCiAgICB2Z2Etc3dpdGNoZXJvbwogICAgdmdhYXJiaXRlcgoK ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L3Rpbnlkcm0ucnN0IGIvRG9jdW1lbnRhdGlv bi9ncHUvdGlueWRybS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0 YTIwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L3Rpbnlkcm0ucnN0CkBA IC0wLDAgKzEsMjEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09Citkcm0vdGlueWRybSBE cml2ZXIgbGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jb3JlLmMKKyAgIDpkb2M6 IG92ZXJ2aWV3CisKK0NvcmUgZnVuY3Rpb25hbGl0eQorPT09PT09PT09PT09PT09PT09CisKKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5j CisgICA6ZG9jOiBjb3JlCisKKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2RybS90aW55ZHJtL3Rp bnlkcm0uaAorICAgOmludGVybmFsOgorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYworICAgOmV4cG9ydDoKKworLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1waXBlLmMKKyAgIDpleHBv cnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCmluZGV4IDkwYmM2NWQuLjg4ZTAxZTA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI2Myw2ICsy NjMsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9teHNmYi9LY29uZmlnIgoKIHNvdXJjZSAi ZHJpdmVycy9ncHUvZHJtL21lc29uL0tjb25maWciCgorc291cmNlICJkcml2ZXJzL2dwdS9kcm0v dGlueWRybS9LY29uZmlnIgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAoKIG1lbnVjb25m aWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDkyZGUzOTkuLjNlZTk1NzkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUK QEAgLTk0LDMgKzk0LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9BUkNQR1UpKz0gYXJjLwogb2JqLXkJ CQkrPSBoaXNpbGljb24vCiBvYmotJChDT05GSUdfRFJNX1pURSkJKz0genRlLwogb2JqLSQoQ09O RklHX0RSTV9NWFNGQikJKz0gbXhzZmIvCitvYmotJChDT05GSUdfRFJNX1RJTllEUk0pICs9IHRp bnlkcm0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5mZmI4NzNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK21lbnVjb25maWcgRFJNX1RJTllEUk0KKwl0cmlz dGF0ZSAiU3VwcG9ydCBmb3Igc2ltcGxlIGRpc3BsYXlzIgorCWRlcGVuZHMgb24gRFJNCisJc2Vs ZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgorCWhlbHAKKwkg IENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHRpbnlkcm0gc3VwcG9ydGVkIGRpc3Bs YXkuCisJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlueWRy bS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNzQ3NmVkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJt L01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19EUk1fVElOWURSTSkJCSs9IGNv cmUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi40ZjE0YTBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK3Rpbnlkcm0teSA6PSB0 aW55ZHJtLWNvcmUubyB0aW55ZHJtLXBpcGUubworCitvYmotJChDT05GSUdfRFJNX1RJTllEUk0p ICs9IHRpbnlkcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90 aW55ZHJtLWNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jb3Jl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhMmViNgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1jb3JlLmMKQEAg LTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVz CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5o PgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4K KworLyoqCisgKiBET0M6IG92ZXJ2aWV3CisgKgorICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGRy aXZlciBoZWxwZXJzIGZvciB2ZXJ5IHNpbXBsZSBkaXNwbGF5IGhhcmR3YXJlLgorICoKKyAqIEl0 IGlzIGJhc2VkIG9uICZkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBjb3VwbGVkIHdpdGggYSAmZHJt X2Nvbm5lY3RvciB3aGljaAorICogaGFzIG9ubHkgb25lIGZpeGVkICZkcm1fZGlzcGxheV9tb2Rl LiBUaGUgZnJhbWVidWZmZXJzIGFyZSBiYWNrZWQgYnkgdGhlCisgKiBjbWEgaGVscGVyIGFuZCBo YXZlIHN1cHBvcnQgZm9yIGZyYW1lYnVmZmVyIGZsdXNoaW5nIChkaXJ0eSkuCisgKiBmYmRldiBz dXBwb3J0IGlzIGFsc28gaW5jbHVkZWQuCisgKgorICovCisKKy8qKgorICogRE9DOiBjb3JlCisg KgorICogVGhlIGRyaXZlciBhbGxvY2F0ZXMgJnRpbnlkcm1fZGV2aWNlLCBpbml0aWFsaXplcyBp dCB1c2luZworICogZGV2bV90aW55ZHJtX2luaXQoKSwgc2V0cyB1cCB0aGUgcGlwZWxpbmUgdXNp bmcgdGlueWRybV9kaXNwbGF5X3BpcGVfaW5pdCgpCisgKiBhbmQgcmVnaXN0ZXJzIHRoZSBEUk0g ZGV2aWNlIHVzaW5nIGRldm1fdGlueWRybV9yZWdpc3RlcigpLgorICovCisKKy8qKgorICogdGlu eWRybV9sYXN0Y2xvc2UgLSBEUk0gbGFzdGNsb3NlIGhlbHBlcgorICogQGRybTogRFJNIGRldmlj ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGZiZGV2IGlzIHJlc3RvcmVkIHdo ZW4gZHJtX2xhc3RjbG9zZSgpIGlzIGNhbGxlZAorICogb24gdGhlIGxhc3QgZHJtX3JlbGVhc2Uo KS4gRHJpdmVycyBjYW4gdXNlIHRoaXMgYXMgdGhlaXIKKyAqICZkcm1fZHJpdmVyLT5sYXN0Y2xv c2UgY2FsbGJhY2suCisgKi8KK3ZvaWQgdGlueWRybV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZp Y2UgKmRybSkKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBkcm0tPmRldl9wcml2 YXRlOworCisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9k ZSh0ZGV2LT5mYmRldl9jbWEpOworfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX2xhc3RjbG9zZSk7 CisKKy8qKgorICogdGlueWRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSAtIFByb2R1 Y2UgYSBDTUEgR0VNIG9iamVjdCBmcm9tCisgKiAgICAgYW5vdGhlciBkcml2ZXIncyBzY2F0dGVy L2dhdGhlciB0YWJsZSBvZiBwaW5uZWQgcGFnZXMKKyAqIEBkcm06IERSTSBkZXZpY2UgdG8gaW1w b3J0IGludG8KKyAqIEBhdHRhY2g6IERNQS1CVUYgYXR0YWNobWVudAorICogQHNndDogU2NhdHRl ci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBv cnRzIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgZXhwb3J0ZWQgdmlhIERNQS1CVUYgYnkKKyAqIGFu b3RoZXIgZHJpdmVyIHVzaW5nIGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgpLiBJ dCBzZXRzIHRoZQorICoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvbiB0aGUgQ01BIG9iamVjdC4g RHJpdmVycyBzaG91bGQgdXNlIHRoaXMgYXMgdGhlaXIKKyAqICZkcm1fZHJpdmVyLT5nZW1fcHJp bWVfaW1wb3J0X3NnX3RhYmxlIGNhbGxiYWNrIGlmIHRoZXkgbmVlZCB0aGUgdmlydHVhbAorICog YWRkcmVzcy4gdGlueWRybV9nZW1fY21hX2ZyZWVfb2JqZWN0KCkgc2hvdWxkIGJlIHVzZWQgaW4g Y29tYmluYXRpb24gd2l0aAorICogdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICog QSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2JqZWN0IG9yIGFuIEVSUl9QVFItZW5j b2RlZCBuZWdhdGl2ZQorICogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKgordGlueWRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCSAgICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaCwKKwkJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKK3sKKwlzdHJ1Y3QgZHJt X2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwor CXZvaWQgKnZhZGRyOworCisJdmFkZHIgPSBkbWFfYnVmX3ZtYXAoYXR0YWNoLT5kbWFidWYpOwor CWlmICghdmFkZHIpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gdm1hcCBQUklNRSBidWZmZXJc biIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlvYmogPSBkcm1fZ2VtX2Nt YV9wcmltZV9pbXBvcnRfc2dfdGFibGUoZHJtLCBhdHRhY2gsIHNndCk7CisJaWYgKElTX0VSUihv YmopKSB7CisJCWRtYV9idWZfdnVubWFwKGF0dGFjaC0+ZG1hYnVmLCB2YWRkcik7CisJCXJldHVy biBvYmo7CisJfQorCisJY21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOworCWNtYV9v YmotPnZhZGRyID0gdmFkZHI7CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTCh0aW55 ZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlKTsKKworLyoqCisgKiB0aW55ZHJtX2dl bV9jbWFfZnJlZV9vYmplY3QgLSBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBDTUEg R0VNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKKyAqIEBnZW1fb2Jq OiBHRU0gb2JqZWN0IHRvIGZyZWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBiYWNr aW5nIG1lbW9yeSBvZiB0aGUgQ01BIEdFTSBvYmplY3QsIGNsZWFucyB1cCB0aGUKKyAqIEdFTSBv YmplY3Qgc3RhdGUgYW5kIGZyZWVzIHRoZSBtZW1vcnkgdXNlZCB0byBzdG9yZSB0aGUgb2JqZWN0 IGl0c2VsZiB1c2luZworICogZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QoKS4gSXQgYWxzbyBoYW5k bGVzIFBSSU1FIGJ1ZmZlcnMgd2hpY2ggaGFzIHRoZSBrZXJuZWwKKyAqIHZpcnR1YWwgYWRkcmVz cyBzZXQgYnkgdGlueWRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgpLiBEcml2ZXJz CisgKiBjYW4gdXNlIHRoaXMgYXMgdGhlaXIgJmRybV9kcml2ZXItPmdlbV9mcmVlX29iamVjdCBj YWxsYmFjay4KKyAqLwordm9pZCB0aW55ZHJtX2dlbV9jbWFfZnJlZV9vYmplY3Qoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnZW1fb2JqKQoreworCWlmIChnZW1fb2JqLT5pbXBvcnRfYXR0YWNoKSB7 CisJCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisKKwkJY21hX29iaiA9IHRv X2RybV9nZW1fY21hX29iaihnZW1fb2JqKTsKKwkJZG1hX2J1Zl92dW5tYXAoZ2VtX29iai0+aW1w b3J0X2F0dGFjaC0+ZG1hYnVmLCBjbWFfb2JqLT52YWRkcik7CisJCWNtYV9vYmotPnZhZGRyID0g TlVMTDsKKwl9CisKKwlkcm1fZ2VtX2NtYV9mcmVlX29iamVjdChnZW1fb2JqKTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKHRpbnlkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCk7CisKK2NvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgdGlueWRybV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVM RSwKKwkub3BlbgkJPSBkcm1fb3BlbiwKKwkucmVsZWFzZQk9IGRybV9yZWxlYXNlLAorCS51bmxv Y2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9p b2N0bAk9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkucG9sbAkJPSBkcm1fcG9sbCwKKwku cmVhZAkJPSBkcm1fcmVhZCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkubW1hcAkJPSBkcm1f Z2VtX2NtYV9tbWFwLAorfTsKK0VYUE9SVF9TWU1CT0wodGlueWRybV9mb3BzKTsKKworc3RhdGlj IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgordGlueWRybV9mYl9jcmVhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQoreworCXN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldiA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlyZXR1cm4gZHJtX2ZiX2NtYV9jcmVhdGVfd2l0 aF9mdW5jcyhkcm0sIGZpbGVfcHJpdiwgbW9kZV9jbWQsCisJCQkJCSAgICB0ZGV2LT5mYl9mdW5j cyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHRpbnlk cm1fbW9kZV9jb25maWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IHRpbnlkcm1fZmJfY3JlYXRl LAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2Nv bW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBpbnQgdGlueWRy bV9pbml0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2 LAorCQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAqZmJfZnVuY3MsCisJCQlz dHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisK KwltdXRleF9pbml0KCZ0ZGV2LT5kaXJ0eV9sb2NrKTsKKwl0ZGV2LT5mYl9mdW5jcyA9IGZiX2Z1 bmNzOworCisJLyoKKwkgKiBXZSBkb24ndCBlbWJlZCBkcm1fZGV2aWNlLCBiZWNhdXNlIHRoYXQg cHJldmVudCB1cyBmcm9tIHVzaW5nCisJICogZGV2bV9remFsbG9jKCkgdG8gYWxsb2NhdGUgdGlu eWRybV9kZXZpY2UgaW4gdGhlIGRyaXZlciBzaW5jZQorCSAqIGRybV9kZXZfdW5yZWYoKSBmcmVl cyB0aGUgc3RydWN0dXJlLiBUaGUgZGV2bV8gZnVuY3Rpb25zIHByb3ZpZGUKKwkgKiBmb3IgZWFz eSBlcnJvciBoYW5kbGluZy4KKwkgKi8KKwlkcm0gPSBkcm1fZGV2X2FsbG9jKGRyaXZlciwgcGFy ZW50KTsKKwlpZiAoSVNfRVJSKGRybSkpCisJCXJldHVybiBQVFJfRVJSKGRybSk7CisKKwl0ZGV2 LT5kcm0gPSBkcm07CisJZHJtLT5kZXZfcHJpdmF0ZSA9IHRkZXY7CisJZHJtX21vZGVfY29uZmln X2luaXQoZHJtKTsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJnRpbnlkcm1fbW9kZV9jb25m aWdfZnVuY3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGlueWRybV9maW5pKHN0 cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cCh0 ZGV2LT5kcm0pOworCW11dGV4X2Rlc3Ryb3koJnRkZXYtPmRpcnR5X2xvY2spOworCXRkZXYtPmRy bS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRybV9kZXZfdW5yZWYodGRldi0+ZHJtKTsKK30KKwor c3RhdGljIHZvaWQgZGV2bV90aW55ZHJtX3JlbGVhc2Uodm9pZCAqZGF0YSkKK3sKKwl0aW55ZHJt X2ZpbmkoZGF0YSk7Cit9CisKKy8qKgorICogZGV2bV90aW55ZHJtX2luaXQgLSBJbml0aWFsaXpl IHRpbnlkcm0gZGV2aWNlCisgKiBAcGFyZW50OiBQYXJlbnQgZGV2aWNlIG9iamVjdAorICogQHRk ZXY6IHRpbnlkcm0gZGV2aWNlCisgKiBAZmJfZnVuY3M6IEZyYW1lYnVmZmVyIGZ1bmN0aW9ucwor ICogQGRyaXZlcjogRFJNIGRyaXZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMg QHRkZXYsIHRoZSB1bmRlcmx5aW5nIERSTSBkZXZpY2UgYW5kIGl0J3MKKyAqIG1vZGVfY29uZmln LiBSZXNvdXJjZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIG9uIGRyaXZlciBkZXRhY2gg KGRldnJlcykKKyAqIHVzaW5nIGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKCkgYW5kIGRybV9kZXZf dW5yZWYoKS4KKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkZXZtX3Rpbnlkcm1faW5pdChzdHJ1Y3Qg ZGV2aWNlICpwYXJlbnQsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiwKKwkJICAgICAgY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAqZmJfZnVuY3MsCisJCSAgICAgIHN0cnVj dCBkcm1fZHJpdmVyICpkcml2ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHRpbnlkcm1faW5p dChwYXJlbnQsIHRkZXYsIGZiX2Z1bmNzLCBkcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSBkZXZtX2FkZF9hY3Rpb24ocGFyZW50LCBkZXZtX3Rpbnlkcm1fcmVsZWFz ZSwgdGRldik7CisJaWYgKHJldCkKKwkJdGlueWRybV9maW5pKHRkZXYpOworCisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0woZGV2bV90aW55ZHJtX2luaXQpOworCitzdGF0aWMgaW50IHRp bnlkcm1fcmVnaXN0ZXIoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSB0ZGV2LT5kcm07CisJaW50IGJwcCA9IGRybS0+bW9kZV9jb25maWcu cHJlZmVycmVkX2RlcHRoOworCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKKwlpbnQgcmV0 OworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcih0ZGV2LT5kcm0sIDApOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlmYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdF93aXRoX2Z1bmNzKGRy bSwgYnBwID8gYnBwIDogMzIsCisJCQkJCSAgICAgIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMs CisJCQkJCSAgICAgIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCQkJICAgICAg dGRldi0+ZmJfZnVuY3MpOworCWlmIChJU19FUlIoZmJkZXYpKQorCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBpbml0aWFsaXplIGZiZGV2OiAlbGRcbiIsIFBUUl9FUlIoZmJkZXYpKTsKKwllbHNlCisJ CXRkZXYtPmZiZGV2X2NtYSA9IGZiZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHRpbnlkcm1fdW5yZWdpc3RlcihzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCit7CisJc3Ry dWN0IGRybV9mYmRldl9jbWEgKmZiZGV2X2NtYSA9IHRkZXYtPmZiZGV2X2NtYTsKKworCWRybV9j cnRjX2ZvcmNlX2Rpc2FibGVfYWxsKHRkZXYtPmRybSk7CisJLyogZG9uJ3QgcmVzdG9yZSBmYmRl diBpbiBsYXN0Y2xvc2UsIGtlZXAgcGlwZWxpbmUgZGlzYWJsZWQgKi8KKwl0ZGV2LT5mYmRldl9j bWEgPSBOVUxMOworCWRybV9kZXZfdW5yZWdpc3Rlcih0ZGV2LT5kcm0pOworCWlmIChmYmRldl9j bWEpCisJCWRybV9mYmRldl9jbWFfZmluaShmYmRldl9jbWEpOworfQorCitzdGF0aWMgdm9pZCBk ZXZtX3Rpbnlkcm1fcmVnaXN0ZXJfcmVsZWFzZSh2b2lkICpkYXRhKQoreworCXRpbnlkcm1fdW5y ZWdpc3RlcihkYXRhKTsKK30KKworLyoqCisgKiBkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIgLSBSZWdp c3RlciB0aW55ZHJtIGRldmljZQorICogQHRkZXY6IHRpbnlkcm0gZGV2aWNlCisgKgorICogVGhp cyBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIHVuZGVybHlpbmcgRFJNIGRldmljZSBhbmQgZmJkZXYu CisgKiBUaGVzZSByZXNvdXJjZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXJlZCBv biBkcml2ZXIgZGV0YWNoIChkZXZyZXMpCisgKiBhbmQgdGhlIGRpc3BsYXkgcGlwZWxpbmUgd2ls bCBiZSBkaXNhYmxlZC4KKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkZXZtX3Rpbnlkcm1fcmVnaXN0 ZXIoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9 IHRkZXYtPmRybS0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSB0aW55ZHJtX3JlZ2lzdGVyKHRk ZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkZXZtX2FkZF9hY3Rpb24o ZGV2LCBkZXZtX3Rpbnlkcm1fcmVnaXN0ZXJfcmVsZWFzZSwgdGRldik7CisJaWYgKHJldCkKKwkJ dGlueWRybV91bnJlZ2lzdGVyKHRkZXYpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1C T0woZGV2bV90aW55ZHJtX3JlZ2lzdGVyKTsKKworLyoqCisgKiB0aW55ZHJtX3NodXRkb3duIC0g U2h1dGRvd24gdGlueWRybQorICogQHRkZXY6IHRpbnlkcm0gZGV2aWNlCisgKgorICogVGhpcyBm dW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGRpc3BsYXkgcGlwZWxpbmUgaXMgZGlzYWJsZWQu CisgKiBVc2VkIGJ5IGRyaXZlcnMgaW4gdGhlaXIgc2h1dGRvd24gY2FsbGJhY2sgdG8gdHVybiBv ZmYgdGhlIGRpc3BsYXkKKyAqIG9uIG1hY2hpbmUgc2h1dGRvd24gYW5kIHJlYm9vdC4KKyAqLwor dm9pZCB0aW55ZHJtX3NodXRkb3duKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlk cm1fY3J0Y19mb3JjZV9kaXNhYmxlX2FsbCh0ZGV2LT5kcm0pOworfQorRVhQT1JUX1NZTUJPTCh0 aW55ZHJtX3NodXRkb3duKTsKKworLyoqCisgKiB0aW55ZHJtX3N1c3BlbmQgLSBTdXNwZW5kIHRp bnlkcm0KKyAqIEB0ZGV2OiB0aW55ZHJtIGRldmljZQorICoKKyAqIFVzZWQgaW4gZHJpdmVyIFBN IG9wZXJhdGlvbnMgdG8gc3VzcGVuZCB0aW55ZHJtLgorICogU3VzcGVuZHMgZmJkZXYgYW5kIERS TS4KKyAqIFJlc3VtZSB3aXRoIHRpbnlkcm1fcmVzdW1lKCkuCisgKgorICogUmV0dXJuczoKKyAq IFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitp bnQgdGlueWRybV9zdXNwZW5kKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisKKwlpZiAodGRldi0+c3VzcGVuZF9zdGF0ZSkg eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzdXNwZW5kOiBzdGF0ZSBhbHJlYWR5IHNldFxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRybV9mYmRldl9jbWFfc2V0X3N1c3BlbmRfdW5s b2NrZWQodGRldi0+ZmJkZXZfY21hLCAxKTsKKwlzdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3N1 c3BlbmQodGRldi0+ZHJtKTsKKwlpZiAoSVNfRVJSKHN0YXRlKSkgeworCQlkcm1fZmJkZXZfY21h X3NldF9zdXNwZW5kX3VubG9ja2VkKHRkZXYtPmZiZGV2X2NtYSwgMCk7CisJCXJldHVybiBQVFJf RVJSKHN0YXRlKTsKKwl9CisKKwl0ZGV2LT5zdXNwZW5kX3N0YXRlID0gc3RhdGU7CisKKwlyZXR1 cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGlueWRybV9zdXNwZW5kKTsKKworLyoqCisgKiB0aW55 ZHJtX3Jlc3VtZSAtIFJlc3VtZSB0aW55ZHJtCisgKiBAdGRldjogdGlueWRybSBkZXZpY2UKKyAq CisgKiBVc2VkIGluIGRyaXZlciBQTSBvcGVyYXRpb25zIHRvIHJlc3VtZSB0aW55ZHJtLgorICog U3VzcGVuZCB3aXRoIHRpbnlkcm1fc3VzcGVuZCgpLgorICoKKyAqIFJldHVybnM6CisgKiBaZXJv IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHRp bnlkcm1fcmVzdW1lKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKK3sKKwlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUgPSB0ZGV2LT5zdXNwZW5kX3N0YXRlOworCWludCByZXQ7CisK KwlpZiAoIXN0YXRlKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc3VtZTogc3RhdGUgaXMg bm90IHNldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRkZXYtPnN1c3BlbmRfc3Rh dGUgPSBOVUxMOworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKHRkZXYtPmRybSwg c3RhdGUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJFcnJvciByZXN1bWluZyBzdGF0ZTog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2ZiZGV2X2NtYV9zZXRfc3Vz cGVuZF91bmxvY2tlZCh0ZGV2LT5mYmRldl9jbWEsIDApOworCisJcmV0dXJuIDA7Cit9CitFWFBP UlRfU1lNQk9MKHRpbnlkcm1fcmVzdW1lKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBpcGUuYyBiL2Ry aXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1waXBlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0M2ZiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1waXBlLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbW9k ZXMuaD4KKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLmg+CisKK3N0cnVjdCB0aW55ZHJt X2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbnlk cm1fY29ubmVjdG9yICoKK3RvX3Rpbnlkcm1fY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0 aW55ZHJtX2Nvbm5lY3RvciwgYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgdGlueWRybV9jb25uZWN0 b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0 IHRpbnlkcm1fY29ubmVjdG9yICp0Y29ubiA9IHRvX3Rpbnlkcm1fY29ubmVjdG9yKGNvbm5lY3Rv cik7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwltb2RlID0gZHJtX21vZGVf ZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LCB0Y29ubi0+bW9kZSk7CisJaWYgKCFtb2RlKSB7CisJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGR1cGxpY2F0ZSBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJaWYgKG1vZGUtPm5hbWVbMF0gPT0gJ1wwJykKKwkJZHJtX21vZGVfc2V0X25hbWUobW9k ZSk7CisKKwltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2Rl X3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKworCWlmIChtb2RlLT53aWR0aF9tbSkgewor CQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IG1vZGUtPndpZHRoX21tOworCQlj b25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBtb2RlLT5oZWlnaHRfbW07CisJfQor CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgdGlueWRybV9jb25uZWN0b3JfaGZ1bmNzID0geworCS5nZXRfbW9kZXMgPSB0aW55 ZHJtX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGRybV9hdG9taWNfaGVs cGVyX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVz Cit0aW55ZHJtX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgYm9vbCBmb3JjZSkKK3sKKwlpZiAoZHJtX2RldmljZV9pc191bnBsdWdnZWQoY29ubmVjdG9y LT5kZXYpKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwlyZXR1 cm4gY29ubmVjdG9yLT5zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHRpbnlkcm1fY29ubmVjdG9y X2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdGlu eWRybV9jb25uZWN0b3IgKnRjb25uID0gdG9fdGlueWRybV9jb25uZWN0b3IoY29ubmVjdG9yKTsK KworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKHRjb25uKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpbnlkcm1fY29ubmVj dG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMs CisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5kZXRlY3Qg PSB0aW55ZHJtX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3By b2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSB0aW55ZHJtX2Nvbm5lY3Rv cl9kZXN0cm95LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0cnVjdCBkcm1f Y29ubmVjdG9yICoKK3Rpbnlkcm1fY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLAorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJIGludCBj b25uZWN0b3JfdHlwZSkKK3sKKwlzdHJ1Y3QgdGlueWRybV9jb25uZWN0b3IgKnRjb25uOworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldDsKKworCXRjb25uID0ga3ph bGxvYyhzaXplb2YoKnRjb25uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0Y29ubikKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisKKwl0Y29ubi0+bW9kZSA9IG1vZGU7CisJY29ubmVjdG9yID0g JnRjb25uLT5iYXNlOworCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnRp bnlkcm1fY29ubmVjdG9yX2hmdW5jcyk7CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybSwg Y29ubmVjdG9yLCAmdGlueWRybV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIGNvbm5lY3Rvcl90eXBl KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHRjb25uKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsK Kwl9CisKKwljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwor CisJcmV0dXJuIGNvbm5lY3RvcjsKK30KKworLyoqCisgKiB0aW55ZHJtX2Rpc3BsYXlfcGlwZV91 cGRhdGUgLSBEaXNwbGF5IHBpcGUgdXBkYXRlIGhlbHBlcgorICogQHBpcGU6IFNpbXBsZSBkaXNw bGF5IHBpcGUKKyAqIEBvbGRfc3RhdGU6IE9sZCBwbGFuZSBzdGF0ZQorICoKKyAqIFRoaXMgZnVu Y3Rpb24gZG9lcyBhIGZ1bGwgZnJhbWVidWZmZXIgZmx1c2ggaWYgdGhlIHBsYW5lIGZyYW1lYnVm ZmVyCisgKiBoYXMgY2hhbmdlZC4gSXQgYWxzbyBoYW5kbGVzIHZibGFuayBldmVudHMuIERyaXZl cnMgY2FuIHVzZSB0aGlzIGFzIHRoZWlyCisgKiAmZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVu Y3MtPnVwZGF0ZSBjYWxsYmFjay4KKyAqLwordm9pZCB0aW55ZHJtX2Rpc3BsYXlfcGlwZV91cGRh dGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCSBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2 ID0gcGlwZV90b190aW55ZHJtKHBpcGUpOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGlwZS0+cGxhbmUuc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZ0ZGV2LT5w aXBlLmNydGM7CisKKwlpZiAoZmIgJiYgKGZiICE9IG9sZF9zdGF0ZS0+ZmIpKSB7CisJCXBpcGUt PnBsYW5lLmZiID0gZmI7CisJCWlmIChmYi0+ZnVuY3MtPmRpcnR5KQorCQkJZmItPmZ1bmNzLT5k aXJ0eShmYiwgTlVMTCwgMCwgMCwgTlVMTCwgMCk7CisJfQorCisJaWYgKGNydGMtPnN0YXRlLT5l dmVudCkgeworCQlzcGluX2xvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCQlkcm1f Y3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBjcnRjLT5zdGF0ZS0+ZXZlbnQpOworCQlzcGlu X3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJCWNydGMtPnN0YXRlLT5ldmVu dCA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTCh0aW55ZHJtX2Rpc3BsYXlfcGlwZV91cGRh dGUpOworCisvKioKKyAqIHRpbnlkcm1fZGlzcGxheV9waXBlX3ByZXBhcmVfZmIgLSBEaXNwbGF5 IHBpcGUgcHJlcGFyZV9mYiBoZWxwZXIKKyAqIEBwaXBlOiBTaW1wbGUgZGlzcGxheSBwaXBlCisg KiBAcGxhbmVfc3RhdGU6IFBsYW5lIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGRy bV9mYl9jbWFfcHJlcGFyZV9mYigpIHRvIGNoZWNrIGlmIHRoZSBwbGFuZSBGQiBoYXMgYW4KKyAq IGRtYS1idWYgYXR0YWNoZWQsIGV4dHJhY3RzIHRoZSBleGNsdXNpdmUgZmVuY2UgYW5kIGF0dGFj aGVzIGl0IHRvIHBsYW5lCisgKiBzdGF0ZSBmb3IgdGhlIGF0b21pYyBoZWxwZXIgdG8gd2FpdCBv bi4gRHJpdmVycyBjYW4gdXNlIHRoaXMgYXMgdGhlaXIKKyAqICZkcm1fc2ltcGxlX2Rpc3BsYXlf cGlwZV9mdW5jcy0+cHJlcGFyZV9mYiBjYWxsYmFjay4KKyAqLworaW50IHRpbnlkcm1fZGlzcGxh eV9waXBlX3ByZXBhcmVfZmIoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAor CQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlyZXR1cm4g ZHJtX2ZiX2NtYV9wcmVwYXJlX2ZiKCZwaXBlLT5wbGFuZSwgcGxhbmVfc3RhdGUpOworfQorRVhQ T1JUX1NZTUJPTCh0aW55ZHJtX2Rpc3BsYXlfcGlwZV9wcmVwYXJlX2ZiKTsKKworc3RhdGljIGlu dCB0aW55ZHJtX3JvdGF0ZV9tb2RlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ ICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlpZiAocm90YXRpb24gPT0gMCB8fCBy b3RhdGlvbiA9PSAxODApIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChyb3RhdGlvbiA9PSA5 MCB8fCByb3RhdGlvbiA9PSAyNzApIHsKKwkJc3dhcChtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRp c3BsYXkpOworCQlzd2FwKG1vZGUtPmhzeW5jX3N0YXJ0LCBtb2RlLT52c3luY19zdGFydCk7CisJ CXN3YXAobW9kZS0+aHN5bmNfZW5kLCBtb2RlLT52c3luY19lbmQpOworCQlzd2FwKG1vZGUtPmh0 b3RhbCwgbW9kZS0+dnRvdGFsKTsKKwkJc3dhcChtb2RlLT53aWR0aF9tbSwgbW9kZS0+aGVpZ2h0 X21tKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQor CisvKioKKyAqIHRpbnlkcm1fZGlzcGxheV9waXBlX2luaXQgLSBJbml0aWFsaXplIGRpc3BsYXkg cGlwZQorICogQHRkZXY6IHRpbnlkcm0gZGV2aWNlCisgKiBAZnVuY3M6IERpc3BsYXkgcGlwZSBm dW5jdGlvbnMKKyAqIEBjb25uZWN0b3JfdHlwZTogQ29ubmVjdG9yIHR5cGUKKyAqIEBmb3JtYXRz OiBBcnJheSBvZiBzdXBwb3J0ZWQgZm9ybWF0cyAoRFJNX0ZPUk1BVFxfXCopCisgKiBAZm9ybWF0 X2NvdW50OiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gQGZvcm1hdHMKKyAqIEBtb2RlOiBTdXBwb3J0 ZWQgbW9kZQorICogQHJvdGF0aW9uOiBJbml0aWFsIEBtb2RlIHJvdGF0aW9uIGluIGRlZ3JlZXMg Q291bnRlciBDbG9jayBXaXNlCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGEgJmRybV9z aW1wbGVfZGlzcGxheV9waXBlIHdpdGggYSAmZHJtX2Nvbm5lY3RvciB0aGF0CisgKiBoYXMgb25l IGZpeGVkICZkcm1fZGlzcGxheV9tb2RlIHdoaWNoIGlzIHJvdGF0ZWQgYWNjb3JkaW5nIHRvIEBy b3RhdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludAordGlueWRybV9kaXNwbGF5X3BpcGVfaW5p dChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fc2lt cGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyAqZnVuY3MsCisJCQkgIGludCBjb25uZWN0b3JfdHlwZSwK KwkJCSAgY29uc3QgdWludDMyX3QgKmZvcm1hdHMsCisJCQkgIHVuc2lnbmVkIGludCBmb3JtYXRf Y291bnQsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHRkZXYt PmRybTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZV9jb3B5OworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IHJldDsKKworCW1vZGVfY29weSA9IGRldm1fa21h bGxvYyhkcm0tPmRldiwgc2l6ZW9mKCptb2RlX2NvcHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1v ZGVfY29weSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqbW9kZV9jb3B5ID0gKm1vZGU7CisJcmV0 ID0gdGlueWRybV9yb3RhdGVfbW9kZShtb2RlX2NvcHksIHJvdGF0aW9uKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiSWxsZWdhbCByb3RhdGlvbiB2YWx1ZSAldVxuIiwgcm90YXRpb24pOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IG1v ZGVfY29weS0+aGRpc3BsYXk7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSBtb2RlX2Nv cHktPmhkaXNwbGF5OworCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IG1vZGVfY29weS0+ dmRpc3BsYXk7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gbW9kZV9jb3B5LT52ZGlz cGxheTsKKworCWNvbm5lY3RvciA9IHRpbnlkcm1fY29ubmVjdG9yX2NyZWF0ZShkcm0sIG1vZGVf Y29weSwgY29ubmVjdG9yX3R5cGUpOworCWlmIChJU19FUlIoY29ubmVjdG9yKSkKKwkJcmV0dXJu IFBUUl9FUlIoY29ubmVjdG9yKTsKKworCXJldCA9IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2lu aXQoZHJtLCAmdGRldi0+cGlwZSwgZnVuY3MsIGZvcm1hdHMsCisJCQkJCSAgIGZvcm1hdF9jb3Vu dCwgY29ubmVjdG9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9 CitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fZGlzcGxheV9waXBlX2luaXQpOwpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmggYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlk cm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjljYTIwCi0tLSAvZGV2 L251bGwKKysrIGIvaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmgKQEAgLTAsMCArMSwxMTUg QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVElOWURSTV9ICisj ZGVmaW5lIF9fTElOVVhfVElOWURSTV9ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgorCisvKioKKyAqIHN0cnVjdCB0aW55ZHJtX2Rldmlj ZSAtIHRpbnlkcm0gZGV2aWNlCisgKiBAZHJtOiBEUk0gZGV2aWNlCisgKiBAcGlwZTogRGlzcGxh eSBwaXBlIHN0cnVjdHVyZQorICogQGRpcnR5X2xvY2s6IFNlcmlhbGl6ZXMgZnJhbWVidWZmZXIg Zmx1c2hpbmcKKyAqIEBmYmRldl9jbWE6IENNQSBmYmRldiBzdHJ1Y3R1cmUKKyAqIEBzdXNwZW5k X3N0YXRlOiBBdG9taWMgc3RhdGUgd2hlbiBzdXNwZW5kZWQKKyAqIEBmYl9mdW5jczogRnJhbWVi dWZmZXIgZnVuY3Rpb25zIHVzZWQgd2hlbiBjcmVhdGluZyBmcmFtZWJ1ZmZlcnMKKyAqLworc3Ry dWN0IHRpbnlkcm1fZGV2aWNlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBk cm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBwaXBlOworCXN0cnVjdCBtdXRleCBkaXJ0eV9sb2NrOwor CXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldl9jbWE7CisJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN1c3BlbmRfc3RhdGU7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyAq ZmJfZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqCitw aXBlX3RvX3Rpbnlkcm0oc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQorewor CXJldHVybiBjb250YWluZXJfb2YocGlwZSwgc3RydWN0IHRpbnlkcm1fZGV2aWNlLCBwaXBlKTsK K30KKworLyoqCisgKiBUSU5ZRFJNX0dFTV9EUklWRVJfT1BTIC0gZGVmYXVsdCB0aW55ZHJtIGdl bSBvcGVyYXRpb25zCisgKgorICogVGhpcyBtYWNybyBwcm92aWRlcyBhIHNob3J0Y3V0IGZvciBz ZXR0aW5nIHRoZSB0aW55ZHJtIEdFTSBvcGVyYXRpb25zIGluCisgKiB0aGUgJmRybV9kcml2ZXIg c3RydWN0dXJlLgorICovCisjZGVmaW5lIFRJTllEUk1fR0VNX0RSSVZFUl9PUFMgXAorCS5nZW1f ZnJlZV9vYmplY3QJPSB0aW55ZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsIFwKKwkuZ2VtX3ZtX29w cwkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLCBcCisJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9n ZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLCBcCisJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9nZW1f cHJpbWVfZmRfdG9faGFuZGxlLCBcCisJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1l X2ltcG9ydCwgXAorCS5nZW1fcHJpbWVfZXhwb3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQsIFwK KwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJs ZSwgXAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gdGlueWRybV9nZW1fY21hX3ByaW1l X2ltcG9ydF9zZ190YWJsZSwgXAorCS5nZW1fcHJpbWVfdm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmlt ZV92bWFwLCBcCisJLmdlbV9wcmltZV92dW5tYXAJPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAs IFwKKwkuZ2VtX3ByaW1lX21tYXAJCT0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwgXAorCS5kdW1i X2NyZWF0ZQkJPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwgXAorCS5kdW1iX21hcF9vZmZzZXQJ PSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsIFwKKwkuZHVtYl9kZXN0cm95CQk9IGRybV9n ZW1fZHVtYl9kZXN0cm95LCBcCisJLmZvcHMJCQk9ICZ0aW55ZHJtX2ZvcHMKKworLyoqCisgKiBU SU5ZRFJNX01PREUgLSB0aW55ZHJtIGRpc3BsYXkgbW9kZQorICogQGhkOiBIb3Jpem9udGFsIHJl c29sdXRpb24sIHdpZHRoCisgKiBAdmQ6IFZlcnRpY2FsIHJlc29sdXRpb24sIGhlaWdodAorICog QGhkX21tOiBEaXNwbGF5IHdpZHRoIGluIG1pbGxpbWV0ZXJzCisgKiBAdmRfbW06IERpc3BsYXkg aGVpZ2h0IGluIG1pbGxpbWV0ZXJzCisgKgorICogVGhpcyBtYWNybyBjcmVhdGVzIGEgJmRybV9k aXNwbGF5X21vZGUgZm9yIHVzZSB3aXRoIHRpbnlkcm0uCisgKi8KKyNkZWZpbmUgVElOWURSTV9N T0RFKGhkLCB2ZCwgaGRfbW0sIHZkX21tKSBcCisJLmhkaXNwbGF5ID0gKGhkKSwgXAorCS5oc3lu Y19zdGFydCA9IChoZCksIFwKKwkuaHN5bmNfZW5kID0gKGhkKSwgXAorCS5odG90YWwgPSAoaGQp LCBcCisJLnZkaXNwbGF5ID0gKHZkKSwgXAorCS52c3luY19zdGFydCA9ICh2ZCksIFwKKwkudnN5 bmNfZW5kID0gKHZkKSwgXAorCS52dG90YWwgPSAodmQpLCBcCisJLndpZHRoX21tID0gKGhkX21t KSwgXAorCS5oZWlnaHRfbW0gPSAodmRfbW0pLCBcCisJLnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RS SVZFUiwgXAorCS5jbG9jayA9IDEgLyogcGFzcyB2YWxpZGF0aW9uICovCisKK2V4dGVybiBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbnlkcm1fZm9wczsKK3ZvaWQgdGlueWRybV9sYXN0 Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cit2b2lkIHRpbnlkcm1fZ2VtX2NtYV9mcmVl X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOworc3RydWN0IGRybV9nZW1f b2JqZWN0ICoKK3Rpbnlkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gsCisJCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpOworaW50IGRldm1fdGlueWRybV9p bml0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2LAor CQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzICpmYl9mdW5jcywKKwkJ ICAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7CitpbnQgZGV2bV90aW55ZHJtX3JlZ2lz dGVyKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cit2b2lkIHRpbnlkcm1fc2h1dGRvd24o c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KTsKK2ludCB0aW55ZHJtX3N1c3BlbmQoc3RydWN0 IHRpbnlkcm1fZGV2aWNlICp0ZGV2KTsKK2ludCB0aW55ZHJtX3Jlc3VtZShzdHJ1Y3QgdGlueWRy bV9kZXZpY2UgKnRkZXYpOworCit2b2lkIHRpbnlkcm1fZGlzcGxheV9waXBlX3VwZGF0ZShzdHJ1 Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkJIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKm9sZF9zdGF0ZSk7CitpbnQgdGlueWRybV9kaXNwbGF5X3BpcGVfcHJlcGFyZV9mYihz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkJICAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKK2ludAordGlueWRybV9kaXNwbGF5X3BpcGVfaW5p dChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fc2lt cGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyAqZnVuY3MsCisJCQkgIGludCBjb25uZWN0b3JfdHlwZSwK KwkJCSAgY29uc3QgdWludDMyX3QgKmZvcm1hdHMsCisJCQkgIHVuc2lnbmVkIGludCBmb3JtYXRf Y291bnQsCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pOworCisjZW5kaWYgLyogX19MSU5VWF9USU5ZRFJNX0ggKi8K LS0KMi4xMC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK