From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Gaignard Subject: [PATCH v10 1/3] create SMAF module Date: Tue, 4 Oct 2016 13:47:22 +0200 Message-ID: <1475581644-10600-2-git-send-email-benjamin.gaignard@linaro.org> References: <1475581644-10600-1-git-send-email-benjamin.gaignard@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x231.google.com (mail-wm0-x231.google.com [IPv6:2a00:1450:400c:c09::231]) by gabe.freedesktop.org (Postfix) with ESMTPS id AE0F36E21B for ; Tue, 4 Oct 2016 11:47:41 +0000 (UTC) Received: by mail-wm0-x231.google.com with SMTP id b201so139747081wmb.0 for ; Tue, 04 Oct 2016 04:47:41 -0700 (PDT) In-Reply-To: <1475581644-10600-1-git-send-email-benjamin.gaignard@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, cc.ma@mediatek.com, joakim.bech@linaro.org, burt.lien@linaro.org, linus.walleij@linaro.org Cc: linaro-mm-sig@lists.linaro.org, linaro-kernel@lists.linaro.org List-Id: dri-devel@lists.freedesktop.org U2VjdXJlIE1lbW9yeSBBbGxvY2F0aW9uIEZyYW1ld29yayBnb2FsIGlzIHRvIGJlIGFibGUKdG8g YWxsb2NhdGUgbWVtb3J5IHRoYXQgY2FuIGJlIHNlY3VyaW5nLgpUaGVyZSBpcyBzbyBtdWNoIHdh eXMgdG8gYWxsb2NhdGUgYW5kIHNlY3VyaW5nIG1lbW9yeSB0aGF0IFNNQUYKZG9lc24ndCBkbyBp dCBieSBpdHNlbGYgYnV0IG5lZWQgaGVscCBvZiBhZGRpdGlvbmFsIG1vZHVsZXMuClRvIGJlIHN1 cmUgdG8gdXNlIHRoZSBjb3JyZWN0IGFsbG9jYXRpb24gbWV0aG9kIFNNQUYgaW1wbGVtZW50CmRl ZmVycmVkIGFsbG9jYXRpb24gKGkuZS4gYWxsb2NhdGUgbWVtb3J5IHdoZW4gb25seSByZWFsbHkg bmVlZGVkKQoKQWxsb2NhdGlvbiBtb2R1bGVzIChzbWFmLWFsbG9jdG9yLmgpOgpTTUFGIGNvdWxk IG1hbmFnZSB3aXRoIG11bHRpcGxlIGFsbG9jYXRpb24gbW9kdWxlcyBhdCBzYW1lIHRpbWUuClRv IHNlbGVjdCB0aGUgZ29vZCBvbmUgU01BRiBjYWxsIG1hdGNoKCkgdG8gYmUgc3VyZSB0aGF0IGEg bW9kdWxlCmNhbiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZ2l2ZW4gbGlzdCBvZiBkZXZpY2VzLiBJ dCBpcyB0byB0aGUgbW9kdWxlCnRvIGNoZWNrIGlmIHRoZSBkZXZpY2VzIGFyZSBjb21wYXRpYmxl IG9yIG5vdCB3aXRoIGl0IGFsbG9jYXRpb24KbWV0aG9kLgoKU2VjdXJpbmcgbW9kdWxlIChzbWFm LXNlY3VyZS5oKToKVGhlIHdheSBvZiBob3cgc2VjdXJpbmcgbWVtb3J5IGl0IGlzIGRvbmUgaXMg cGxhdGZvcm0gc3BlY2lmaWMuClNlY3VyZSBtb2R1bGUgaXMgcmVzcG9uc2libGUgb2YgZ3JhbnQv cmV2b2tlIG1lbW9yeSBhY2Nlc3MuCgpTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8 YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLS0tCiBkcml2ZXJzL0tjb25maWcgICAgICAg ICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvc21hZi9LY29uZmlnICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL3NtYWYvTWFr ZWZpbGUgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9zbWFmL3NtYWYtY29yZS5jICAgICAgIHwg ODE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2xp bnV4L3NtYWYtYWxsb2NhdG9yLmggfCAgNDUgKysrCiBpbmNsdWRlL2xpbnV4L3NtYWYtc2VjdXJl LmggICAgfCAgNjUgKysrKwogaW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaCAgICAgIHwgIDg1ICsr KysrCiA4IGZpbGVzIGNoYW5nZWQsIDEwMjIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc21hZi9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zbWFm L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zbWFmL3NtYWYtY29yZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zbWFmLWFsbG9jYXRvci5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zbWFmLXNlY3VyZS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZp ZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCBlMWUyMDY2Li4wNjk3NDY2IDEwMDY0NAotLS0gYS9k cml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0yMDIsNCArMjAyLDYgQEAg c291cmNlICJkcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9LY29uZmlnIgogCiBzb3VyY2UgImRy aXZlcnMvZnBnYS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc21hZi9LY29uZmlnIgorCiBl bmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQpp bmRleCA1M2FiYjRhLi5iMTI5YmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvTWFrZWZpbGUKQEAgLTE3MywzICsxNzMsNCBAQCBvYmotJChDT05GSUdfU1RNKQkJ Kz0gaHd0cmFjaW5nL3N0bS8KIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gYW5kcm9pZC8KIG9i ai0kKENPTkZJR19OVk1FTSkJCSs9IG52bWVtLwogb2JqLSQoQ09ORklHX0ZQR0EpCQkrPSBmcGdh Lworb2JqLSQoQ09ORklHX1NNQUYpIAkJKz0gc21hZi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc21h Zi9LY29uZmlnIGIvZHJpdmVycy9zbWFmL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZDM2NjUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc21hZi9LY29u ZmlnCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIFNNQUYKKwl0cmlzdGF0ZSAiU2VjdXJlIE1lbW9y eSBBbGxvY2F0aW9uIEZyYW1ld29yayIKKwlkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSCisJ aGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBTZWN1cmUgTWVtb3J5IEFsbG9j YXRpb24gRnJhbWV3b3JrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NtYWYvTWFrZWZpbGUgYi9kcml2 ZXJzL3NtYWYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBj ZDg4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc21hZi9NYWtlZmlsZQpAQCAtMCwwICsx IEBACitvYmotJChDT05GSUdfU01BRikgKz0gc21hZi1jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvc21hZi9zbWFmLWNvcmUuYyBiL2RyaXZlcnMvc21hZi9zbWFmLWNvcmUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZkNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9zbWFmL3NtYWYtY29yZS5jCkBAIC0wLDAgKzEsODE4IEBACisvKgorICogc21hZi1jb3Jl LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbmFybyBTQSAyMDE1CisgKiBBdXRob3I6IEJlbmph bWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPiBmb3IgTGluYXJvLgor ICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJz aW9uIDIKKyAqCisgKiBTZWN1cmUgTWVtb3J5IEFsbG9jYXRvciBGcmFtZXdvcmsgKFNNQUYpIGFs bG93IHRvIHJlZ2lzdGVyIG1lbW9yeQorICogYWxsb2NhdG9ycyBhbmQgYSBzZWN1cmUgbW9kdWxl IHVuZGVyIGEgY29tbW9uIEFQSS4KKyAqIE11bHRpcGxlIGFsbG9jYXRvcnMgY2FuIGJlIHJlZ2lz dGVyZWQgdG8gZml0IHdpdGggaGFyZHdyYWUgZGV2aWNlcworICogcmVxdWlyZW1lbnQuIEVhY2gg YWxsb2NhdG9yIG11c3QgcHJvdmlkZSBhIG1hdGNoKCkgZnVuY3Rpb24gdG8gY2hlY2sKKyAqIGl0 IGNhcGF0aWNpdHkgdG8gaGFuZGxlIHRoZSBkZXZpY2VzIGF0dGFjaGVkIChsaWtlIGRlZmluZWQg YnkgZG1hYnVmKS4KKyAqIE9ubHkgb25lIHNlY3VyZSBtb2R1bGUgY2FuIGJlIHJlZ2lzdGVyZWQg c2luY2UgaXQgZGVkaWNhdGVkIHRvIG9uZQorICogaGFyZHdhcmUgcGxhdGZvcm0uCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51 eC9saXN0X3NvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4 L3NtYWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWFmLWFsbG9jYXRvci5oPgorI2luY2x1ZGUgPGxp bnV4L3NtYWYtc2VjdXJlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdHJ1Y3Qg c21hZl9oYW5kbGUgeworCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisJc3RydWN0IHNtYWZfYWxs b2NhdG9yICphbGxvY2F0b3I7CisJc3RydWN0IGRtYV9idWYgKmRiX2FsbG9jOworCXNpemVfdCBs ZW5ndGg7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCBmZDsKKwlhdG9taWNfdCBpc19zZWN1 cmU7CisJdm9pZCAqc2VjdXJlX2N0eDsKK307CisKKy8qKgorICogc3RydWN0IHNtYWZfZGV2aWNl IC0gc21hZiBkZXZpY2Ugbm9kZSBwcml2YXRlIGRhdGEKKyAqIEBtaXNjX2RldjoJdGhlIG1pc2Mg ZGV2aWNlCisgKiBAaGVhZDoJbGlzdCBvZiBhbGxvY2F0b3IKKyAqIEBsb2NrOglsaXN0IGFuZCBz ZWN1cmUgcG9pbnRlciBtdXRleAorICogQHNlY3VyZToJcG9pbnRlciB0byBzZWN1cmUgZnVuY3Rp b25zIGhlbHBlcnMKKyAqLworc3RydWN0IHNtYWZfZGV2aWNlIHsKKwlzdHJ1Y3QgbWlzY2Rldmlj ZSBtaXNjX2RldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJLyogbGlzdCBhbmQgc2VjdXJl IHBvaW50ZXIgbG9jayovCisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IHNtYWZfc2VjdXJl ICpzZWN1cmU7Cit9OworCitzdGF0aWMgbG9uZyBzbWFmX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxl LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNtYWZfZm9wcyA9IHsKKwkudW5sb2NrZWRfaW9jdGwgPSBz bWFmX2lvY3RsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWFmX2RldmljZSBzbWFmX2RldiA9IHsK KwkubWlzY19kZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm1pc2NfZGV2Lm5hbWUg ID0gInNtYWYiLAorCS5taXNjX2Rldi5mb3BzICA9ICZzbWFmX2ZvcHMsCit9OworCitzdGF0aWMg Ym9vbCBoYXZlX3NlY3VyZV9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gISFzbWFmX2Rldi5zZWN1 cmU7Cit9CisKKy8qKgorICogc21hZl9ncmFudF9hY2Nlc3MgLSByZXR1cm4gdHJ1ZSBpZiB0aGUg c3BlY2lmaWVkIGRldmljZSBjYW4gZ2V0IGFjY2VzcworICogdG8gdGhlIG1lbW9yeSBhcmVhCisg KgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNtYWZfZGV2LmxvY2sgc2V0 CisgKi8KK3N0YXRpYyBib29sIHNtYWZfZ3JhbnRfYWNjZXNzKHN0cnVjdCBzbWFmX2hhbmRsZSAq aGFuZGxlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBkbWFfYWRkcl90IGFkZHIsIHNp emVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWlm ICghYXRvbWljX3JlYWQoJmhhbmRsZS0+aXNfc2VjdXJlKSkKKwkJcmV0dXJuIHRydWU7CisKKwlp ZiAoIWhhdmVfc2VjdXJlX21vZHVsZSgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gc21h Zl9kZXYuc2VjdXJlLT5ncmFudF9hY2Nlc3MoaGFuZGxlLT5zZWN1cmVfY3R4LAorCQkJCQkgICAg IGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKK30KKworLyoqCisgKiBzbWFmX3Jldm9rZV9hY2Nlc3MK KyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBzbWFmX2Rldi5sb2NrIHNldAor ICovCitzdGF0aWMgdm9pZCBzbWFmX3Jldm9rZV9hY2Nlc3Moc3RydWN0IHNtYWZfaGFuZGxlICpo YW5kbGUsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsIHNp emVfdCBzaXplLAorCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlp ZiAoIWF0b21pY19yZWFkKCZoYW5kbGUtPmlzX3NlY3VyZSkpCisJCXJldHVybjsKKworCWlmICgh aGF2ZV9zZWN1cmVfbW9kdWxlKCkpCisJCXJldHVybjsKKworCXNtYWZfZGV2LnNlY3VyZS0+cmV2 b2tlX2FjY2VzcyhoYW5kbGUtPnNlY3VyZV9jdHgsCisJCQkJICAgICAgIGRldiwgYWRkciwgc2l6 ZSwgZGlyKTsKK30KKworc3RhdGljIGludCBzbWFmX3NlY3VyZV9oYW5kbGUoc3RydWN0IHNtYWZf aGFuZGxlICpoYW5kbGUpCit7CisJdm9pZCAqY3R4OworCisJaWYgKGF0b21pY19yZWFkKCZoYW5k bGUtPmlzX3NlY3VyZSkpCisJCXJldHVybiAwOworCisJaWYgKCFoYXZlX3NlY3VyZV9tb2R1bGUo KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHggPSBzbWFmX2Rldi5zZWN1cmUtPmNyZWF0ZV9j dHgoKTsKKworCWlmICghY3R4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhhbmRsZS0+c2VjdXJl X2N0eCA9IGN0eDsKKworCWF0b21pY19zZXQoJmhhbmRsZS0+aXNfc2VjdXJlLCAxKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzbWFmX3Vuc2VjdXJlX2hhbmRsZShzdHJ1Y3Qgc21hZl9o YW5kbGUgKmhhbmRsZSkKK3sKKwlpZiAoIWF0b21pY19yZWFkKCZoYW5kbGUtPmlzX3NlY3VyZSkp CisJCXJldHVybiAwOworCisJaWYgKCFoYXZlX3NlY3VyZV9tb2R1bGUoKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoc21hZl9kZXYuc2VjdXJlLT5kZXN0cm95X2N0eChoYW5kbGUtPnNlY3Vy ZV9jdHgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhhbmRsZS0+c2VjdXJlX2N0eCA9IE5VTEw7 CisJYXRvbWljX3NldCgmaGFuZGxlLT5pc19zZWN1cmUsIDApOworCXJldHVybiAwOworfQorCitp bnQgc21hZl9yZWdpc3Rlcl9zZWN1cmUoc3RydWN0IHNtYWZfc2VjdXJlICpzKQoreworCS8qIG1h a2Ugc3VyZSB0aGF0IHNlY3VyZSBtb2R1bGUgaGF2ZSBhbGwgcmVxdWlyZWQgZnVuY3Rpb25zCisJ ICogdG8gYXZvaWQgdGVzdCB0aGVtIGVhY2ggdGltZSBsYXRlcgorCSAqLworCWlmICghcyB8fCAh cy0+Y3JlYXRlX2N0eCB8fCAhcy0+ZGVzdHJveV9jdHggfHwKKwkgICAgIXMtPmdyYW50X2FjY2Vz cyB8fCAhcy0+cmV2b2tlX2FjY2VzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2Nr KCZzbWFmX2Rldi5sb2NrKTsKKwlzbWFmX2Rldi5zZWN1cmUgPSBzOworCW11dGV4X3VubG9jaygm c21hZl9kZXYubG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc21hZl9yZWdp c3Rlcl9zZWN1cmUpOworCit2b2lkIHNtYWZfdW5yZWdpc3Rlcl9zZWN1cmUoc3RydWN0IHNtYWZf c2VjdXJlICpzKQoreworCW11dGV4X2xvY2soJnNtYWZfZGV2LmxvY2spOworCWlmIChzbWFmX2Rl di5zZWN1cmUgPT0gcykKKwkJc21hZl9kZXYuc2VjdXJlID0gTlVMTDsKKwltdXRleF91bmxvY2so JnNtYWZfZGV2LmxvY2spOworfQorRVhQT1JUX1NZTUJPTChzbWFmX3VucmVnaXN0ZXJfc2VjdXJl KTsKKworc3RhdGljIHN0cnVjdCBzbWFmX2FsbG9jYXRvciAqc21hZl9maW5kX2FsbG9jYXRvcihz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXN0cnVjdCBzbWFmX2FsbG9jYXRvciAqYWxsb2M7 CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsbG9jLCAmc21hZl9kZXYuaGVhZCwgbGlzdF9ub2Rl KSB7CisJCWlmIChhbGxvYy0+bWF0Y2goZG1hYnVmKSkKKwkJCXJldHVybiBhbGxvYzsKKwl9CisK KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzbWFmX2FsbG9jYXRvciAqc21hZl9n ZXRfZmlyc3RfYWxsb2NhdG9yKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJLyogdGhlIGZp cnN0IGFsbG9jYXRvciBvZiB0aGUgbGlzdCBpcyB0aGUgcHJlZmVycmVkIGFsbG9jYXRvciAqLwor CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZzbWFmX2Rldi5oZWFkLCBzdHJ1Y3Qgc21hZl9hbGxv Y2F0b3IsCisJCQlsaXN0X25vZGUpOworfQorCitzdGF0aWMgaW50IHNtYWZfYWxsb2NhdGUoc3Ry dWN0IHNtYWZfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJLyog dHJ5IHRvIGZpbmQgYW4gYWxsb2NhdG9yICovCisJaWYgKCFoYW5kbGUtPmFsbG9jYXRvcikgewor CQlzdHJ1Y3Qgc21hZl9hbGxvY2F0b3IgKmFsbG9jOworCisJCW11dGV4X2xvY2soJnNtYWZfZGV2 LmxvY2spOworCQlpZiAobGlzdF9lbXB0eSgmZG1hYnVmLT5hdHRhY2htZW50cykpIHsKKwkJCS8q IG5vIGRldmljZXMgYXR0YWNoZWQgYnkgZGVmYXVsdCBzZWxlY3QgdGhlIGZpcnN0CisJCQkgKiBh bGxvY2F0b3IKKwkJCSAqLworCQkJYWxsb2MgPSBzbWFmX2dldF9maXJzdF9hbGxvY2F0b3IoZG1h YnVmKTsKKwkJfSBlbHNlIHsKKwkJCWFsbG9jID0gc21hZl9maW5kX2FsbG9jYXRvcihkbWFidWYp OworCQl9CisJCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7CisKKwkJLyogc3RpbGwgbm8g YWxsb2NhdG9yID8gKi8KKwkJaWYgKCFhbGxvYykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhh bmRsZS0+YWxsb2NhdG9yID0gYWxsb2M7CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5ICovCisJ aWYgKCFoYW5kbGUtPmRiX2FsbG9jKSB7CisJCXN0cnVjdCBkbWFfYnVmICpkYl9hbGxvYzsKKwor CQlkYl9hbGxvYyA9IGhhbmRsZS0+YWxsb2NhdG9yLT5hbGxvY2F0ZShkbWFidWYsIGhhbmRsZS0+ bGVuZ3RoKTsKKwkJaWYgKCFkYl9hbGxvYykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhhbmRs ZS0+ZGJfYWxsb2MgPSBkYl9hbGxvYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzbWFmX2FsbG9jYXRvcl9jb21wYXJlKHZvaWQgKnByaXYsCisJCQkJICBzdHJ1Y3QgbGlzdF9o ZWFkICpsaF9hLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGhfYikKK3sKKwlzdHJ1Y3Qgc21h Zl9hbGxvY2F0b3IgKmEgPSBsaXN0X2VudHJ5KGxoX2EsCisJCQkJCSAgICAgIHN0cnVjdCBzbWFm X2FsbG9jYXRvciwgbGlzdF9ub2RlKTsKKwlzdHJ1Y3Qgc21hZl9hbGxvY2F0b3IgKmIgPSBsaXN0 X2VudHJ5KGxoX2IsCisJCQkJCSAgICAgIHN0cnVjdCBzbWFmX2FsbG9jYXRvciwgbGlzdF9ub2Rl KTsKKwlpbnQgZGlmZjsKKworCWRpZmYgPSBiLT5yYW5raW5nIC0gYS0+cmFua2luZzsKKwlpZiAo ZGlmZikKKwkJcmV0dXJuIGRpZmY7CisKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUp OworfQorCitpbnQgc21hZl9yZWdpc3Rlcl9hbGxvY2F0b3Ioc3RydWN0IHNtYWZfYWxsb2NhdG9y ICphbGxvYykKK3sKKwlpZiAoIWFsbG9jIHx8ICFhbGxvYy0+bWF0Y2ggfHwgIWFsbG9jLT5hbGxv Y2F0ZSB8fCAhYWxsb2MtPm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygm c21hZl9kZXYubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmFsbG9jLT5saXN0X25vZGUpOworCWxp c3RfYWRkKCZhbGxvYy0+bGlzdF9ub2RlLCAmc21hZl9kZXYuaGVhZCk7CisJbGlzdF9zb3J0KE5V TEwsICZzbWFmX2Rldi5oZWFkLCBzbWFmX2FsbG9jYXRvcl9jb21wYXJlKTsKKwltdXRleF91bmxv Y2soJnNtYWZfZGV2LmxvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNtYWZf cmVnaXN0ZXJfYWxsb2NhdG9yKTsKKwordm9pZCBzbWFmX3VucmVnaXN0ZXJfYWxsb2NhdG9yKHN0 cnVjdCBzbWFmX2FsbG9jYXRvciAqYWxsb2MpCit7CisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9j ayk7CisJbGlzdF9kZWwoJmFsbG9jLT5saXN0X25vZGUpOworCW11dGV4X3VubG9jaygmc21hZl9k ZXYubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHNtYWZfdW5yZWdpc3Rlcl9hbGxvY2F0b3IpOwor CitzdGF0aWMgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqc21hZl9maW5kX2F0dGFjaG1lbnQo c3RydWN0IGRtYV9idWYgKmRiX2FsbG9jLAorCQkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2hfb2JqOworCisJbGlzdF9m b3JfZWFjaF9lbnRyeShhdHRhY2hfb2JqLCAmZGJfYWxsb2MtPmF0dGFjaG1lbnRzLCBub2RlKSB7 CisJCWlmIChhdHRhY2hfb2JqLT5kZXYgPT0gZGV2KQorCQkJcmV0dXJuIGF0dGFjaF9vYmo7CisJ fQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKnNtYWZfbWFw X2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKKwkJCQkJIGVu dW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICpkYl9hdHRhY2htZW50OworCXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2ht ZW50LT5kbWFidWY7CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5kbGUgPSBkbWFidWYtPnByaXY7 CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisJdW5zaWduZWQgaW50IGNvdW50X2RvbmUsIGNvdW50 OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwlpZiAoc21hZl9hbGxvY2F0ZShoYW5kbGUs IGRtYWJ1ZikpCisJCXJldHVybiBOVUxMOworCisJZGJfYXR0YWNobWVudCA9IHNtYWZfZmluZF9h dHRhY2htZW50KGhhbmRsZS0+ZGJfYWxsb2MsIGF0dGFjaG1lbnQtPmRldik7CisJc2d0ID0gZG1h X2J1Zl9tYXBfYXR0YWNobWVudChkYl9hdHRhY2htZW50LCBkaXJlY3Rpb24pOworCisJaWYgKCFz Z3QpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFhdG9taWNfcmVhZCgmaGFuZGxlLT5pc19zZWN1 cmUpKQorCQlyZXR1cm4gc2d0OworCisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisKKwkv KiBub3cgc2VjdXJlIHRoZSBkYXRhICovCisJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNnLCBzZ3Qt Pm5lbnRzLCBjb3VudF9kb25lKSB7CisJCWlmICghc21hZl9ncmFudF9hY2Nlc3MoaGFuZGxlLCBk Yl9hdHRhY2htZW50LT5kZXYsCisJCQkJICAgICAgIHNnX3BoeXMoc2cpLCBzZy0+bGVuZ3RoLCBk aXJlY3Rpb24pKQorCQkJZ290byBmYWlsZWQ7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rl di5sb2NrKTsKKwlyZXR1cm4gc2d0OworCitmYWlsZWQ6CisJZm9yX2VhY2hfc2coc2d0LT5zZ2ws IHNnLCBjb3VudF9kb25lLCBjb3VudCkgeworCQlzbWFmX3Jldm9rZV9hY2Nlc3MoaGFuZGxlLCBk Yl9hdHRhY2htZW50LT5kZXYsCisJCQkJICAgc2dfcGh5cyhzZyksIHNnLT5sZW5ndGgsIGRpcmVj dGlvbik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKworCXNnX2ZyZWVf dGFibGUoc2d0KTsKKwlrZnJlZShzZ3QpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9p ZCBzbWFmX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVu dCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJCSAgICAgICBlbnVtIGRtYV9k YXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq ZGJfYXR0YWNobWVudDsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gYXR0YWNobWVudC0+ZG1h YnVmOworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCXN0cnVj dCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJaWYgKCFoYW5kbGUt PmRiX2FsbG9jKQorCQlyZXR1cm47CisKKwlkYl9hdHRhY2htZW50ID0gc21hZl9maW5kX2F0dGFj aG1lbnQoaGFuZGxlLT5kYl9hbGxvYywgYXR0YWNobWVudC0+ZGV2KTsKKwlpZiAoIWRiX2F0dGFj aG1lbnQpCisJCXJldHVybjsKKworCWlmIChhdG9taWNfcmVhZCgmaGFuZGxlLT5pc19zZWN1cmUp KSB7CisJCW11dGV4X2xvY2soJnNtYWZfZGV2LmxvY2spOworCQlmb3JfZWFjaF9zZyhzZ3QtPnNn bCwgc2csIHNndC0+bmVudHMsIGNvdW50KSB7CisJCQlzbWFmX3Jldm9rZV9hY2Nlc3MoaGFuZGxl LCBkYl9hdHRhY2htZW50LT5kZXYsCisJCQkJCSAgIHNnX3BoeXMoc2cpLCBzZy0+bGVuZ3RoLCBk aXJlY3Rpb24pOworCQl9CisJCW11dGV4X3VubG9jaygmc21hZl9kZXYubG9jayk7CisJfQorCisJ ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGRiX2F0dGFjaG1lbnQsIHNndCwgZGlyZWN0aW9uKTsK K30KKworc3RhdGljIHZvaWQgc21hZl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSkKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRh OworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKKworCWlmICh2bWEtPnZtX2ZsYWdzID09 IFZNX1JFQUQpCisJCWRpciA9IERNQV9UT19ERVZJQ0U7CisKKwlpZiAodm1hLT52bV9mbGFncyA9 PSBWTV9XUklURSkKKwkJZGlyID0gRE1BX0ZST01fREVWSUNFOworCisJaWYgKHZtYS0+dm1fZmxh Z3MgPT0gKFZNX1JFQUQgfCBWTV9XUklURSkpCisJCWRpciA9IERNQV9CSURJUkVDVElPTkFMOwor CisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisJc21hZl9yZXZva2VfYWNjZXNzKGhhbmRs ZSwgZ2V0X2NwdV9kZXZpY2UoMCksIDAsIGhhbmRsZS0+bGVuZ3RoLCBkaXIpOworCW11dGV4X3Vu bG9jaygmc21hZl9kZXYubG9jayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0 aW9uc19zdHJ1Y3Qgc21hZl92bWFfb3BzID0geworCS5jbG9zZSA9IHNtYWZfdm1fY2xvc2UsCit9 OworCitzdGF0aWMgaW50IHNtYWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IGRt YWJ1Zi0+cHJpdjsKKwlib29sIHJldDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CisK KwlpZiAoc21hZl9hbGxvY2F0ZShoYW5kbGUsIGRtYWJ1ZikpCisJCXJldHVybiAtRUlOVkFMOwor CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBoYW5kbGU7CisJdm1hLT52bV9vcHMgPSAmc21hZl92 bWFfb3BzOworCisJaWYgKHZtYS0+dm1fZmxhZ3MgPT0gVk1fUkVBRCkKKwkJZGlyID0gRE1BX1RP X0RFVklDRTsKKworCWlmICh2bWEtPnZtX2ZsYWdzID09IFZNX1dSSVRFKQorCQlkaXIgPSBETUFf RlJPTV9ERVZJQ0U7CisKKwlpZiAodm1hLT52bV9mbGFncyA9PSAoVk1fUkVBRCB8IFZNX1dSSVRF KSkKKwkJZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7CisKKwltdXRleF9sb2NrKCZzbWFmX2Rldi5s b2NrKTsKKwlyZXQgPSBzbWFmX2dyYW50X2FjY2VzcyhoYW5kbGUsIGdldF9jcHVfZGV2aWNlKDAp LCAwLAorCQkJCWhhbmRsZS0+bGVuZ3RoLCBkaXIpOworCW11dGV4X3VubG9jaygmc21hZl9kZXYu bG9jayk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZG1hX2J1 Zl9tbWFwKGhhbmRsZS0+ZGJfYWxsb2MsIHZtYSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNtYWZf ZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCit7CisJc3RydWN0IHNtYWZf aGFuZGxlICpoYW5kbGUgPSBkbWFidWYtPnByaXY7CisKKwlpZiAoaGFuZGxlLT5kYl9hbGxvYykK KwkJZG1hX2J1Zl9wdXQoaGFuZGxlLT5kYl9hbGxvYyk7CisKKwltdXRleF9sb2NrKCZzbWFmX2Rl di5sb2NrKTsKKwlzbWFmX3Vuc2VjdXJlX2hhbmRsZShoYW5kbGUpOworCW11dGV4X3VubG9jaygm c21hZl9kZXYubG9jayk7CisKKwlrZnJlZShoYW5kbGUpOworfQorCitzdGF0aWMgaW50IHNtYWZf ZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkJCSBl bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5k bGUgPSBkbWFidWYtPnByaXY7CisJYm9vbCByZXQ7CisKKwlpZiAoIWhhbmRsZS0+ZGJfYWxsb2Mp CisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9jayk7CisJcmV0 ID0gc21hZl9ncmFudF9hY2Nlc3MoaGFuZGxlLAorCQkJCWdldF9jcHVfZGV2aWNlKDApLCAwLCBo YW5kbGUtPmxlbmd0aCwgZGlyKTsKKwltdXRleF91bmxvY2soJnNtYWZfZGV2LmxvY2spOworCisJ aWYgKCFyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRtYV9idWZfYmVnaW5fY3B1 X2FjY2VzcyhoYW5kbGUtPmRiX2FsbG9jLCBkaXIpOworfQorCitzdGF0aWMgaW50IHNtYWZfZG1h X2J1Zl9lbmRfY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSAgICAgICBl bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5k bGUgPSBkbWFidWYtPnByaXY7CisJaW50IHJldDsKKworCWlmICghaGFuZGxlLT5kYl9hbGxvYykK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGhhbmRs ZS0+ZGJfYWxsb2MsIGRpcik7CisKKwltdXRleF9sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKwlzbWFm X3Jldm9rZV9hY2Nlc3MoaGFuZGxlLCBnZXRfY3B1X2RldmljZSgwKSwgMCwgaGFuZGxlLT5sZW5n dGgsIGRpcik7CisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rldi5sb2NrKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkICpzbWFmX2RtYV9idWZfa21hcF9hdG9taWMoc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3Qg c21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlmICghaGFuZGxlLT5kYl9h bGxvYykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZG1hX2J1Zl9rbWFwX2F0b21pYyhoYW5k bGUtPmRiX2FsbG9jLCBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBzbWFmX2RtYV9idWZfa3Vu bWFwX2F0b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCSAgICAgICB1bnNpZ25lZCBs b25nIG9mZnNldCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0g ZG1hYnVmLT5wcml2OworCisJaWYgKCFoYW5kbGUtPmRiX2FsbG9jKQorCQlyZXR1cm47CisKKwlk bWFfYnVmX2t1bm1hcF9hdG9taWMoaGFuZGxlLT5kYl9hbGxvYywgb2Zmc2V0LCBwdHIpOworfQor CitzdGF0aWMgdm9pZCAqc21hZl9kbWFfYnVmX2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg dW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IHNtYWZfaGFuZGxlICpoYW5kbGUgPSBk bWFidWYtPnByaXY7CisKKwlpZiAoIWhhbmRsZS0+ZGJfYWxsb2MpCisJCXJldHVybiBOVUxMOwor CisJcmV0dXJuIGRtYV9idWZfa21hcChoYW5kbGUtPmRiX2FsbG9jLCBvZmZzZXQpOworfQorCitz dGF0aWMgdm9pZCBzbWFmX2RtYV9idWZfa3VubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVu c2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCXZvaWQgKnB0cikKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5k bGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKworCWlmICghaGFuZGxlLT5kYl9hbGxvYykKKwkJ cmV0dXJuOworCisJZG1hX2J1Zl9rdW5tYXAoaGFuZGxlLT5kYl9hbGxvYywgb2Zmc2V0LCBwdHIp OworfQorCitzdGF0aWMgdm9pZCAqc21hZl9kbWFfYnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRt YWJ1ZikKK3sKKwlzdHJ1Y3Qgc21hZl9oYW5kbGUgKmhhbmRsZSA9IGRtYWJ1Zi0+cHJpdjsKKwor CWlmICghaGFuZGxlLT5kYl9hbGxvYykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZG1hX2J1 Zl92bWFwKGhhbmRsZS0+ZGJfYWxsb2MpOworfQorCitzdGF0aWMgdm9pZCBzbWFmX2RtYV9idWZf dnVubWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHZvaWQgKnZhZGRyKQoreworCXN0cnVjdCBz bWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2OworCisJaWYgKCFoYW5kbGUtPmRiX2Fs bG9jKQorCQlyZXR1cm47CisKKwlkbWFfYnVmX3Z1bm1hcChoYW5kbGUtPmRiX2FsbG9jLCB2YWRk cik7Cit9CisKK3N0YXRpYyBpbnQgc21hZl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg c3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0gZG1hYnVmLT5wcml2Owor CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRiX2F0dGFjaDsKKworCWlmICghaGFuZGxlLT5k Yl9hbGxvYykKKwkJcmV0dXJuIDA7CisKKwlkYl9hdHRhY2ggPSBkbWFfYnVmX2F0dGFjaChoYW5k bGUtPmRiX2FsbG9jLCBkZXYpOworCisJcmV0dXJuIElTX0VSUihkYl9hdHRhY2gpOworfQorCitz dGF0aWMgdm9pZCBzbWFmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFu ZGxlID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRiX2F0dGFj aG1lbnQ7CisKKwlpZiAoIWhhbmRsZS0+ZGJfYWxsb2MpCisJCXJldHVybjsKKworCWRiX2F0dGFj aG1lbnQgPSBzbWFmX2ZpbmRfYXR0YWNobWVudChoYW5kbGUtPmRiX2FsbG9jLCBhdHRhY2gtPmRl dik7CisJZG1hX2J1Zl9kZXRhY2goaGFuZGxlLT5kYl9hbGxvYywgZGJfYXR0YWNobWVudCk7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgc21hZl9kbWFfYnVmX29wcyA9IHsK KwkuYXR0YWNoID0gc21hZl9hdHRhY2gsCisJLmRldGFjaCA9IHNtYWZfZGV0YWNoLAorCS5tYXBf ZG1hX2J1ZiA9IHNtYWZfbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9idWYgPSBzbWFmX3VubWFw X2RtYV9idWYsCisJLm1tYXAgPSBzbWFmX21tYXAsCisJLnJlbGVhc2UgPSBzbWFmX2RtYV9idWZf cmVsZWFzZSwKKwkuYmVnaW5fY3B1X2FjY2VzcyA9IHNtYWZfZG1hX2J1Zl9iZWdpbl9jcHVfYWNj ZXNzLAorCS5lbmRfY3B1X2FjY2VzcyA9IHNtYWZfZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcywKKwku a21hcF9hdG9taWMgPSBzbWFmX2RtYV9idWZfa21hcF9hdG9taWMsCisJLmt1bm1hcF9hdG9taWMg PSBzbWFmX2RtYV9idWZfa3VubWFwX2F0b21pYywKKwkua21hcCA9IHNtYWZfZG1hX2J1Zl9rbWFw LAorCS5rdW5tYXAgPSBzbWFmX2RtYV9idWZfa3VubWFwLAorCS52bWFwID0gc21hZl9kbWFfYnVm X3ZtYXAsCisJLnZ1bm1hcCA9IHNtYWZfZG1hX2J1Zl92dW5tYXAsCit9OworCitzdGF0aWMgYm9v bCBpc19zbWFmX2RtYWJ1ZihzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXJldHVybiBkbWFi dWYtPm9wcyA9PSAmc21hZl9kbWFfYnVmX29wczsKK30KKworYm9vbCBzbWFmX2lzX3NlY3VyZShz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAqaGFuZGxlID0g ZG1hYnVmLT5wcml2OworCisJaWYgKCFpc19zbWFmX2RtYWJ1ZihkbWFidWYpKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmhhbmRsZS0+aXNfc2VjdXJlKTsKK30KK0VY UE9SVF9TWU1CT0woc21hZl9pc19zZWN1cmUpOworCitpbnQgc21hZl9zZXRfc2VjdXJlKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsIGJvb2wgc2VjdXJlKQoreworCXN0cnVjdCBzbWFmX2hhbmRsZSAq aGFuZGxlID0gZG1hYnVmLT5wcml2OworCWludCByZXQ7CisKKwlpZiAoIWlzX3NtYWZfZG1hYnVm KGRtYWJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc21hZl9kZXYubG9j ayk7CisJaWYgKHNlY3VyZSkKKwkJcmV0ID0gc21hZl9zZWN1cmVfaGFuZGxlKGhhbmRsZSk7CisJ ZWxzZQorCQlyZXQgPSBzbWFmX3Vuc2VjdXJlX2hhbmRsZShoYW5kbGUpOworCW11dGV4X3VubG9j aygmc21hZl9kZXYubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzbWFm X3NldF9zZWN1cmUpOworCitzdGF0aWMgaW50IHNtYWZfc2VsZWN0X2FsbG9jYXRvcl9ieV9uYW1l KHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNtYWZfaGFu ZGxlICpoYW5kbGUgPSBkbWFidWYtPnByaXY7CisJc3RydWN0IHNtYWZfYWxsb2NhdG9yICphbGxv YzsKKworCWlmICghaXNfc21hZl9kbWFidWYoZG1hYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAoaGFuZGxlLT5hbGxvY2F0b3IpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9j aygmc21hZl9kZXYubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsbG9jLCAmc21hZl9k ZXYuaGVhZCwgbGlzdF9ub2RlKSB7CisJCWlmICghc3RybmNtcChhbGxvYy0+bmFtZSwgbmFtZSwg TUFYX05BTUVfTEVOR1RIKSkgeworCQkJaGFuZGxlLT5hbGxvY2F0b3IgPSBhbGxvYzsKKwkJCWhh bmRsZS0+ZGJfYWxsb2MgPSBOVUxMOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbWFmX2Rl di5sb2NrKTsKKworCWlmICghaGFuZGxlLT5hbGxvY2F0b3IpCisJCXJldHVybiAtRUlOVkFMOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc21hZl9oYW5kbGUgKnNtYWZfY3JlYXRl X2hhbmRsZShzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNt YWZfaGFuZGxlICpoYW5kbGU7CisKKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhpbmZvKTsK KworCWhhbmRsZSA9IGt6YWxsb2Moc2l6ZW9mKCpoYW5kbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWhhbmRsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbmZvLm9wcyA9ICZzbWFmX2RtYV9idWZfb3Bz OworCWluZm8uc2l6ZSA9IHJvdW5kX3VwKGxlbmd0aCwgUEFHRV9TSVpFKTsKKwlpbmZvLmZsYWdz ID0gZmxhZ3M7CisJaW5mby5wcml2ID0gaGFuZGxlOworCisJaGFuZGxlLT5kbWFidWYgPSBkbWFf YnVmX2V4cG9ydCgmaW5mbyk7CisJaWYgKElTX0VSUihoYW5kbGUtPmRtYWJ1ZikpIHsKKwkJa2Zy ZWUoaGFuZGxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaGFuZGxlLT5sZW5ndGggPSBpbmZv LnNpemU7CisJaGFuZGxlLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIGhhbmRsZTsKK30KKwor c3RhdGljIGxvbmcgc21hZl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNt ZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNNQUZfSU9D X0NSRUFURToKKwl7CisJCXN0cnVjdCBzbWFmX2NyZWF0ZV9kYXRhIGRhdGE7CisJCXN0cnVjdCBz bWFmX2hhbmRsZSAqaGFuZGxlOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQg X191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlp ZiAoZGF0YS52ZXJzaW9uICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZGF0YS5m bGFncyAmIH4oU01BRl9SRFdSIHwgU01BRl9DTE9FWEVDKSkKKwkJCXJldHVybiAtRUlOVkFMOwor CisJCWhhbmRsZSA9IHNtYWZfY3JlYXRlX2hhbmRsZShkYXRhLmxlbmd0aCwgZGF0YS5mbGFncyk7 CisJCWlmICghaGFuZGxlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGRhdGEubmFtZVsw XSkgeworCQkJZGF0YS5uYW1lW01BWF9OQU1FX0xFTkdUSCAtIDFdID0gMDsKKwkJCS8qIHVzZXIg Zm9yY2UgYWxsb2NhdG9yIHNlbGVjdGlvbiAqLworCQkJaWYgKHNtYWZfc2VsZWN0X2FsbG9jYXRv cl9ieV9uYW1lKGhhbmRsZS0+ZG1hYnVmLAorCQkJCQkJCSAgZGF0YS5uYW1lKSkgeworCQkJCWRt YV9idWZfcHV0KGhhbmRsZS0+ZG1hYnVmKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJ fQorCisJCWhhbmRsZS0+ZmQgPSBkbWFfYnVmX2ZkKGhhbmRsZS0+ZG1hYnVmLCBkYXRhLmZsYWdz KTsKKwkJaWYgKGhhbmRsZS0+ZmQgPCAwKSB7CisJCQlkbWFfYnVmX3B1dChoYW5kbGUtPmRtYWJ1 Zik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRhdGEuZmQgPSBoYW5kbGUtPmZkOwor CQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRhdGEsIF9JT0NfU0laRShj bWQpKSkgeworCQkJZG1hX2J1Zl9wdXQoaGFuZGxlLT5kbWFidWYpOworCQkJcmV0dXJuIC1FRkFV TFQ7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU01BRl9JT0NfR0VUX1NFQ1VSRV9GTEFHOgor CXsKKwkJc3RydWN0IHNtYWZfc2VjdXJlX2ZsYWcgZGF0YTsKKwkJc3RydWN0IGRtYV9idWYgKmRt YWJ1ZjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywg X0lPQ19TSVpFKGNtZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGRhdGEudmVyc2lv biAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGRhdGEuZmQgPT0gLTEpCisJCQly ZXR1cm4gLUVJTlZBTDsKKworCQlkbWFidWYgPSBkbWFfYnVmX2dldChkYXRhLmZkKTsKKwkJaWYg KCFkbWFidWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlkYXRhLnNlY3VyZSA9IHNtYWZfaXNf c2VjdXJlKGRtYWJ1Zik7CisJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisKKwkJaWYgKGNvcHlfdG9f dXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZkYXRhLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1 cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCWNhc2UgU01BRl9JT0NfU0VUX1NFQ1VSRV9GTEFH OgorCXsKKwkJc3RydWN0IHNtYWZfc2VjdXJlX2ZsYWcgZGF0YTsKKwkJc3RydWN0IGRtYV9idWYg KmRtYWJ1ZjsKKwkJaW50IHJldDsKKworCQlpZiAoIXNtYWZfZGV2LnNlY3VyZSkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgX191c2VyICop YXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZGF0YS52 ZXJzaW9uICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlkbWFidWYgPSBkbWFfYnVmX2dl dChkYXRhLmZkKTsKKwkJaWYgKCFkbWFidWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQg PSBzbWFmX3NldF9zZWN1cmUoZG1hYnVmLCBkYXRhLnNlY3VyZSk7CisKKwkJZG1hX2J1Zl9wdXQo ZG1hYnVmKTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisJ fQorCWNhc2UgU01BRl9JT0NfR0VUX0lORk86CisJeworCQlzdHJ1Y3Qgc21hZl9pbmZvIGluZm87 CisJCXN0cnVjdCBzbWFmX2FsbG9jYXRvciAqYWxsb2M7CisKKwkJaWYgKGNvcHlfZnJvbV91c2Vy KCZpbmZvLCAodm9pZCBfX3VzZXIgKilhcmcsIF9JT0NfU0laRShjbWQpKSkKKwkJCXJldHVybiAt RUZBVUxUOworCisJCWlmIChpbmZvLnZlcnNpb24gIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOwor CisJCWluZm8uY291bnQgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsbG9jLCAgJnNtYWZf ZGV2LmhlYWQsIGxpc3Rfbm9kZSkgeworCQkJaWYgKGluZm8uY291bnQrKyA9PSBpbmZvLmluZGV4 KSB7CisJCQkJc3RybmNweShpbmZvLm5hbWUsIGFsbG9jLT5uYW1lLAorCQkJCQlNQVhfTkFNRV9M RU5HVEgpOworCQkJCWluZm8ubmFtZVtNQVhfTkFNRV9MRU5HVEggLSAxXSA9IDA7CisJCQl9CisJ CX0KKworCQlpZiAoaW5mby5pbmRleCA+PSBpbmZvLmNvdW50KQorCQkJcmV0dXJuIC1FSU5WQUw7 CisKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBfSU9DX1NJ WkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5p dCBzbWFmX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWlzY19yZWdpc3Rlcigm c21hZl9kZXYubWlzY19kZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0 ZXhfaW5pdCgmc21hZl9kZXYubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnNtYWZfZGV2LmhlYWQp OworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHNtYWZfaW5pdCk7CisKK3N0YXRpYyB2 b2lkIF9fZXhpdCBzbWFmX2RlaW5pdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3Rlcigmc21hZl9k ZXYubWlzY19kZXYpOworfQorbW9kdWxlX2V4aXQoc21hZl9kZWluaXQpOworCitNT0RVTEVfREVT Q1JJUFRJT04oIlNlY3VyZSBNZW1vcnkgQWxsb2NhdGlvbiBGcmFtZXdvcmsiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkJlbmphbWluIEdhaWduYXJkIDxiZW5q YW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9z bWFmLWFsbG9jYXRvci5oIGIvaW5jbHVkZS9saW51eC9zbWFmLWFsbG9jYXRvci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOWEwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9p bmNsdWRlL2xpbnV4L3NtYWYtYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIHNt YWYtYWxsb2NhdG9yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbmFybyBTQSAyMDE1CisgKiBB dXRob3I6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPiBm b3IgTGluYXJvLgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IChHUEwpLCB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVmIF9TTUFGX0FMTE9DQVRPUl9IXworI2Rl ZmluZSBfU01BRl9BTExPQ0FUT1JfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNp bmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKy8qKgorICogc3RydWN0IHNtYWZfYWxsb2NhdG9yIC0g aW1wbGVtZW50IGRtYV9idWZfb3BzIGxpa2UgZnVuY3Rpb25zCisgKgorICogQG1hdGNoOiBtYXRj aCBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGxvY2F0b3IgY2FuIGFjY2VwdCB0aGUgZGV2aWNlcwor ICoJICAgYXR0YWNoZWQgdG8gZG1hYnVmCisgKiBAYWxsb2NhdGU6IGFsbG9jYXRlIG1lbW9yeSB3 aXRoIHRoZSBnaXZlbiBsZW5ndGggYW5kIGZsYWdzCisgKgkgICAgICByZXR1cm4gYSBkbWFfYnVm IGhhbmRsZQorICogQG5hbWU6IGFsbG9jYXRvciBuYW1lCisgKiBAcmFua2luZzogYWxsb2NhdG9y IHJhbmtpbmcgKGJpZ2dlciBpcyBiZXR0ZXIpCisgKi8KK3N0cnVjdCBzbWFmX2FsbG9jYXRvciB7 CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CisJYm9vbCAoKm1hdGNoKShzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmKTsKKwlzdHJ1Y3QgZG1hX2J1ZiAqKCphbGxvY2F0ZSkoc3RydWN0IGRtYV9i dWYgKmRtYWJ1Ziwgc2l6ZV90IGxlbmd0aCk7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmFu a2luZzsKK307CisKKy8qKgorICogc21hZl9yZWdpc3Rlcl9hbGxvY2F0b3IgLSByZWdpc3RlciBh biBhbGxvY2F0b3IgdG8gYmUgdXNlZCBieSBTTUFGCisgKiBAYWxsb2M6IHNtYWZfYWxsb2NhdG9y IHN0cnVjdHVyZQorICovCitpbnQgc21hZl9yZWdpc3Rlcl9hbGxvY2F0b3Ioc3RydWN0IHNtYWZf YWxsb2NhdG9yICphbGxvYyk7CisKKy8qKgorICogc21hZl91bnJlZ2lzdGVyX2FsbG9jYXRvciAt IHVucmVnaXN0ZXIgYWxsb2N0b3IKKyAqIEBhbGxvYzogc21hZl9hbGxvY2F0b3Igc3RydWN0dXJl CisgKi8KK3ZvaWQgc21hZl91bnJlZ2lzdGVyX2FsbG9jYXRvcihzdHJ1Y3Qgc21hZl9hbGxvY2F0 b3IgKmFsbG9jKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYWYtc2Vj dXJlLmggYi9pbmNsdWRlL2xpbnV4L3NtYWYtc2VjdXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uODQzNDdhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgv c21hZi1zZWN1cmUuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogc21hZi1zZWN1cmUuaAorICoK KyAqIENvcHlyaWdodCAoQykgTGluYXJvIFNBIDIwMTUKKyAqIEF1dGhvcjogQmVuamFtaW4gR2Fp Z25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+IGZvciBMaW5hcm8uCisgKiBMaWNl bnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgor ICovCisKKyNpZm5kZWYgX1NNQUZfU0VDVVJFX0hfCisjZGVmaW5lIF9TTUFGX1NFQ1VSRV9IXwor CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5n Lmg+CisKKy8qKgorICogc3RydWN0IHNtYWZfc2VjdXJlCisgKiBAY3JlYXRlX2N0eDoJCWNyZWF0 ZSBhIGNvbnRleHQgZm9yIG9uZSBkbWFidWYuCisgKgkJCUlmIHN1Y2Nlc3MgcmV0dXJuIGFuIG9w YXF1ZSBwb2ludGVyIG9uIHNlY3VyZSBjb250ZXh0CisgKgkJCWVpdGhlciByZXR1cm4gTlVMTC4K KyAqIEBkZXN0cm95X2N0eDoJZGVzdHJveSBjb250ZXh0LgorICogQGdyYW50X2FjY2VzczoJY2hl Y2sgYW5kIHByb3ZpZGUgYWNjZXNzIHRvIG1lbW9yeSBhcmVhIGZvciBhIHNwZWNpZmljCisgKgkJ CWRldmljZS4gUmV0dXJuIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMgdmFsaWQuCisgKiBAcmV2b2tl X2FjY2VzczoJcmVtb3ZlIGRldmljZSBhY2Nlc3MgcmlnaHRzLgorICovCitzdHJ1Y3Qgc21hZl9z ZWN1cmUgeworCXZvaWQgKigqY3JlYXRlX2N0eCkodm9pZCk7CisJaW50ICgqZGVzdHJveV9jdHgp KHZvaWQgKmN0eCk7CisJYm9vbCAoKmdyYW50X2FjY2Vzcykodm9pZCAqY3R4LAorCQkJICAgICBz dHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHNpemVfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJ CSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkICgqcmV2b2tl X2FjY2Vzcykodm9pZCAqY3R4LAorCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAg ICAgc2l6ZV90IGFkZHIsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJl Y3Rpb24gZGlyZWN0aW9uKTsKK307CisKKy8qKgorICogc21hZl9yZWdpc3Rlcl9zZWN1cmUgLSBy ZWdpc3RlciBzZWN1cmUgbW9kdWxlIGhlbHBlcgorICogU2VjdXJlIG1vZHVsZSBoZWxwZXIgc2hv dWxkIGJlIHBsYXRmb3JtIHNwZWNpZmljIHNvIG9ubHkgb25lIGNhbiBiZQorICogcmVnaXN0ZXJl ZC4KKyAqCisgKiBAc2VjOiBzZWN1cmUgbW9kdWxlIHRvIGJlIHJlZ2lzdGVyZWQKKyAqLworaW50 IHNtYWZfcmVnaXN0ZXJfc2VjdXJlKHN0cnVjdCBzbWFmX3NlY3VyZSAqc2VjKTsKKworLyoqCisg KiBzbWFmX3VucmVnaXN0ZXJfc2VjdXJlIC0gdW5yZWdpc3RlciBzZWN1cmUgbW9kdWxlIGhlbHBl cgorICovCit2b2lkIHNtYWZfdW5yZWdpc3Rlcl9zZWN1cmUoc3RydWN0IHNtYWZfc2VjdXJlICpz ZWMpOworCisvKioKKyAqIHNtYWZfaXNfc2VjdXJlIC0gdGVzdCBpcyBhIGRtYV9idWYgaGFuZGxl IGhhcyBiZWVuIHNlY3VyZWQgYnkgU01BRgorICogQGRtYWJ1ZjogZG1hX2J1ZiBoYW5kbGUgdG8g YmUgdGVzdGVkCisgKi8KK2Jvb2wgc21hZl9pc19zZWN1cmUoc3RydWN0IGRtYV9idWYgKmRtYWJ1 Zik7CisKKy8qKgorICogc21hZl9zZXRfc2VjdXJlIC0gY2hhbmdlIGRtYV9idWYgaGFuZGxlIHNl Y3VyZSBzdGF0dXMKKyAqIEBkbWFidWY6IGRtYV9idWYgaGFuZGxlIHRvIGJlIGNoYW5nZQorICog QHNlY3VyZTogaWYgdHJ1ZSBzZWN1cmUgZG1hX2J1ZiBoYW5kbGUKKyAqLworaW50IHNtYWZfc2V0 X3NlY3VyZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIHNlY3VyZSk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3NtYWYuaCBiL2luY2x1ZGUvdWFwaS9saW51 eC9zbWFmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MzMwNwotLS0g L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9zbWFmLmgKQEAgLTAsMCArMSw4NSBA QAorLyoKKyAqIHNtYWYuaAorICoKKyAqIENvcHlyaWdodCAoQykgTGluYXJvIFNBIDIwMTUKKyAq IEF1dGhvcjogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+ IGZvciBMaW5hcm8uCisgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgKEdQTCksIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgX1VBUElfU01BRl9IXworI2RlZmlu ZSBfVUFQSV9TTUFGX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUFYX05BTUVfTEVOR1RIIDY0CisKKyNkZWZpbmUgU01B Rl9SRFdSIE9fUkRXUgorI2RlZmluZSBTTUFGX0NMT0VYRUMgT19DTE9FWEVDCisKKy8qKgorICog c3RydWN0IHNtYWZfY3JlYXRlX2RhdGEgLSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMKKyAqIEB2ZXJz aW9uOglzdHJ1Y3R1cmUgdmVyc2lvbiAobXVzdCBiZSBzZXQgdG8gMCkKKyAqIEBsZW5ndGg6CXNp emUgb2YgdGhlIHJlcXVlc3RlZCBidWZmZXIKKyAqIEBmbGFnczoJbW9kZSBmbGFncyBmb3IgdGhl IGZpbGUgbGlrZSBTTUFGX1JEV1Igb3IgU01BRl9DTE9FWEVDCisgKiBAZmQ6CQlyZXR1cm5lZCBm aWxlIGRlc2NyaXB0b3IKKyAqIEBuYW1lOgluYW1lIG9mIHRoZSBhbGxvY2F0b3IgdG8gYmUgc2Vs ZWN0ZWQKKyAqCQl3aGVuIE5VTEwgc21hZiB3aWxsIGl0ZXJhdGUgb3ZlciBhbGxvY2F0b3IgdG8g ZmluZAorICoJCW9uZSBtYXRjaGluZyB3aXRoIGRldmljZXMgY29uc3RyYWludHMuCisgKi8KK3N0 cnVjdCBzbWFmX2NyZWF0ZV9kYXRhIHsKKwlfX3U2NCB2ZXJzaW9uOworCV9fdTY0IGxlbmd0aDsK KwlfX3UzMiBmbGFnczsKKwlfX3UzMiByZXNlcnZlZDE7CisJX19zMzIgZmQ7CisJX191MzIgcmVz ZXJ2ZWQyOworCV9fdTggbmFtZVtNQVhfTkFNRV9MRU5HVEhdOworCV9fdTggcmVzZXJ2ZWQzWzMy XTsKK307CisKKy8qKgorICogc3RydWN0IHNtYWZfc2VjdXJlX2ZsYWcgLSBzZXQvZ2V0IHNlY3Vy ZSBmbGFnCisgKiBAdmVyc2lvbjoJc3RydWN0dXJlIHZlcnNpb24gKG11c3QgYmUgc2V0IHRvIDAp CisgKiBAZmQ6CQlmaWxlIGRlc2NyaXB0b3IKKyAqIEBzZWN1cmU6CXNlY3VyZSBmbGFnIHZhbHVl IChzZXQgb3IgZ2V0KQorICovCitzdHJ1Y3Qgc21hZl9zZWN1cmVfZmxhZyB7CisJX191NjQgdmVy c2lvbjsKKwlfX3MzMiBmZDsKKwlfX3UzMiByZXNlcnZlZDE7CisJX191MzIgc2VjdXJlOworCV9f dTggcmVzZXJ2ZWQyWzQ0XTsKK307CisKKy8qKgorICogc3RydWN0IHNtYWZfaW5mbyAtIGdldCBy ZWdpc3RlcmVkIGFsbG9jYXRvciBuYW1lIHBlciBpbmRleAorICogQHZlcnNpb246CXN0cnVjdHVy ZSB2ZXJzaW9uIChtdXN0IGJlIHNldCB0byAwKQorICogQGluZGV4OglhbGxvY2F0b3IncyBpbmRl eAorICogQGNvdW50OglyZXR1cm4gbnVtYmVyIG9mIHJlZ2lzdGVyZWQgYWxsb2NhdG9ycworICog QG5hbWU6CXJldHVybiBhbGxvY2F0b3IgbmFtZQorICovCitzdHJ1Y3Qgc21hZl9pbmZvIHsKKwlf X3U2NCB2ZXJzaW9uOworCV9fdTMyIGluZGV4OworCV9fdTMyIHJlc2VydmVkMTsKKwlfX3UzMiBj b3VudDsKKwlfX3UzMiByZXNlcnZlZDI7CisJX191OCBuYW1lW01BWF9OQU1FX0xFTkdUSF07CisJ X191OCByZXNlcnZlZDNbNDBdOworfTsKKworI2RlZmluZSBTTUFGX0lPQ19NQUdJQwknUycKKwor I2RlZmluZSBTTUFGX0lPQ19DUkVBVEUJCSBfSU9XUihTTUFGX0lPQ19NQUdJQywgMCwgXAorCQkJ CSAgICAgICBzdHJ1Y3Qgc21hZl9jcmVhdGVfZGF0YSkKKworI2RlZmluZSBTTUFGX0lPQ19HRVRf U0VDVVJFX0ZMQUcgX0lPV1IoU01BRl9JT0NfTUFHSUMsIDEsIFwKKwkJCQkgICAgICAgc3RydWN0 IHNtYWZfc2VjdXJlX2ZsYWcpCisKKyNkZWZpbmUgU01BRl9JT0NfU0VUX1NFQ1VSRV9GTEFHIF9J T1dSKFNNQUZfSU9DX01BR0lDLCAyLCBcCisJCQkJICAgICAgIHN0cnVjdCBzbWFmX3NlY3VyZV9m bGFnKQorCisjZGVmaW5lIFNNQUZfSU9DX0dFVF9JTkZPCSBfSU9XUihTTUFGX0lPQ19NQUdJQywg Mywgc3RydWN0IHNtYWZfaW5mbykKKworI2VuZGlmCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==