From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v5 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 2 May 2018 10:01:59 +0530 Message-ID: <1525235522-8954-2-git-send-email-spanda@codeaurora.org> References: <1525235522-8954-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1525235522-8954-1-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sandeep Panda , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIFRJJ3Mgc242NWRzaTg2IGRzaTJlZHAgYnJpZGdlIGNoaXAuClRoZSBj aGlwIGNvbnZlcnRzIERTSSB0cmFuc21pdHRlZCBzaWduYWwgdG8gZURQIHNpZ25hbCwKd2hpY2gg aXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgoKVGhpcyBjaGlwIGNhbiBiZSBjb250 cm9sbGVkIHZpYSBlaXRoZXIgaTJjIGludGVyZmFjZSBvcgpkc2kgaW50ZXJmYWNlLiBDdXJyZW50 bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKYXJlIGJlaW5nIGFjY2Vzc2Vk IHRocm91Z2ggaTJjIGludGVyZmFjZSBvbmx5LgpBbHNvIGFzIG9mIG5vdyBIUEQgc3VwcG9ydCBo YXMgbm90IGJlZW4gYWRkZWQgdG8gYnJpZGdlCmNoaXAgZHJpdmVyLgoKQ2hhbmdlcyBpbiB2MToK IC0gU3BsaXQgdGhlIGR0LWJpbmRpbmdzIGFuZCB0aGUgZHJpdmVyIHN1cHBvcnQgaW50byBzZXBh cmF0ZSBwYXRjaGVzCiAgIChBbmRyemVqIEhhamRhKS4KIC0gVXNlIG9mIGdwaW9kIEFQSXMgdG8g cGFyc2UgYW5kIGNvbmZpZ3VyZSBncGlvcyBpbnN0ZWFkIG9mIG9ic29sZXRlIG9uZXMKICAgKEFu ZHJ6ZWogSGFqZGEpLgogLSBVc2UgbWFjcm9zIHRvIGRlZmluZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0 cyAoQW5kcnplaiBIYWpkYSkuCgpDaGFuZ2VzIGluIHYyOgogLSBTZXBhcmF0ZSBvdXQgZWRwIHBh bmVsIHNwZWNpZmljIEhXIHJlc291cmNlIGhhbmRsaW5nIGZyb20gYnJpZGdlCiAgIGRyaXZlciBh bmQgY3JlYXRlIGEgc2VwYXJhdGUgZWRwIHBhbmVsIGRyaXZlcnMgdG8gaGFuZGxlIHBhbmVsCiAg IHNwZWNpZmljIG1vZGUgaW5mb3JtYXRpb24gYW5kIEhXIHJlc291cmNlcyAoU2VhbiBQYXVsKS4K IC0gUmVwbGFjZSBwcl8qIEFQSXMgdG8gRFJNXyogQVBJcyB0byBsb2cgZXJyb3Igb3IgZGVidWcg aW5mb3JtYXRpb24KICAgKFNlYW4gUGF1bCkuCiAtIFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lY2Vz c2FyeSBzdHJ1Y3R1cmUvdmFyaWFibGUgZnJvbSBkcml2ZXIgKFNlYW4KICAgUGF1bCkuCiAtIFJl bmFtZSB0aGUgZnVuY3Rpb24gYW5kIHN0cnVjdHVyZSBwcmVmaXggInNuNjVkc2k4NiIgdG8gInRp X3NuX2JyaWRnZSIKICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJyaW5nKS4KIC0gUmVtb3ZlIG1vc3Qg b2YgdGhlIGhhcmQtY29kaW5nIGFuZCBtb2RpZmllZCB0aGUgYnJpZGdlIGluaXQgc2VxdWVuY2UK ICAgYmFzZWQgb24gY3VycmVudCBtb2RlIChTZWFuIFBhdWwpLgogLSBSZW1vdmUgdGhlIGV4aXN0 aW5nIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBFRElEIGRhdGEgYW5kCiAgIGltcGxlbWVudGVk IHRoaXMgYXMgYW4gaTJjX2FkYXB0ZXIgYW5kIHVzZSBkcm1fZ2V0X2VkaWQoKSAoU2VhbiBQYXVs KS4KIC0gUmVtb3ZlIHRoZSBkdW1teSBpcnEgaGFuZGxlciBpbXBsZW1lbnRhdGlvbiwgd2lsbCBh ZGQgYmFjayB0aGUKICAgcHJvcGVyIGlycSBoYW5kbGluZyBsYXRlciAoU2VhbiBQYXVsKS4KIC0g Q2FwdHVyZSB0aGUgcmVxdWlyZWQgZW5hYmxlIGdwaW9zIGluIGEgc2luZ2xlIGFycmF5IGJhc2Vk IG9uIGR0IGVudHJ5CiAgIGluc3RlYWQgb2YgaGF2aW5nIGluZGl2aWR1YWwgZGVzY3JpcHRvciBm b3IgZWFjaCBncGlvIChTZWFuIFBhdWwpLgoKQ2hhbmdlcyBpbiB2MzoKIC0gUmVtb3ZlIHVzYWdl IG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSAoUm9i CiAgIEhlcnJpbmcpLgogLSBSZW1vdmUgdGhlIHVubmVjZXNzYXJ5IGhlYWRlciBmaWxlIGluY2x1 c2lvbnMgKFNlYW4gUGF1bCkuCiAtIFJlYXJyYW5nZSB0aGUgaGVhZGVyIGZpbGVzIGluIGFscGhh YmV0aWNhbCBvcmRlciAoU2VhbiBQYXVsKS4KIC0gVXNlIHJlZ21hcCBpbnRlcmZhY2UgdG8gcGVy Zm9ybSBpMmMgdHJhbnNhY3Rpb25zLgogLSBVcGRhdGUgQ29weXJpZ2h0L0xpY2Vuc2UgZmllbGQg YW5kIGFkZHJlc3Mgb3RoZXIgcmV2aWV3IGNvbW1lbnRzCiAgIChKb3JkYW4gQ3JvdXNlKS4KCkNo YW5nZXMgaW4gdjQ6CiAtIFVwZGF0ZSBMaWNlbnNlL0NvcHlyaWdodCAoU2VhbiBQYXVsKS4KIC0g QWRkIEtjb25maWcgYW5kIE1ha2VmaWxlIGNoYW5nZXMgKFNlYW4gUGF1bCkuCiAtIERyb3AgaTJj IGdwaW8gaGFuZGxpbmcgZnJvbSB0aGlzIGJyaWRnZSBkcml2ZXIsIHNpbmNlIGkyYyBzZGEvc2Ns IGdwaW9zCiAgIHdpbGwgYmUgaGFuZGxlZCBieSBpMmMgbWFzdGVyLgogLSBSZW1vdmUgdW5uZWNl c3NhcnkgZ290byBzdGF0ZW1lbnRzIChTZWFuIFBhdWwpLgogLSBBZGQgbXV0ZXggbG9jayB0byBw b3dlcl9jdHJsIEFQSSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgKFNlYW4KICAgUGF1bCkuCiAt IEFkZCBzdXBwb3J0IHRvIHBhcnNlIHJlZmVyZW5jZSBjbGsgZnJlcXVlbmN5IGZyb20gZHQob3B0 aW9uYWwpLgogLSBVcGRhdGUgdGhlIGJyaWRnZSBjaGlwIGVuYWJsZS9kaXNhYmxlIHNlcXVlbmNl LgoKQ2hhbmdlcyBpbiB2NToKIC0gRml4ZWQgS2J1aWxkIHRlc3Qgc2VydmljZSByZXBvcnRlZCB3 YXJuaW5ncy4KClNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3Jh Lm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgIHwgICA5ICsK IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICAgICAgfCAgIDEgKwogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8IDcyNSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDczNSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvS2NvbmZpZwppbmRleCAzYjk5ZDVhLi44MTUzMTUwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCkBAIC0xMDgsNiArMTA4LDE1IEBAIGNvbmZpZyBEUk1fVElfVEZQNDEwCiAJLS0taGVscC0t LQogCSAgVGV4YXMgSW5zdHJ1bWVudHMgVEZQNDEwIERWSS9IRE1JIFRyYW5zbWl0dGVyIGRyaXZl cgogCitjb25maWcgRFJNX1RJX1NONjVEU0k4NgorCXRyaXN0YXRlICJUSSBTTjY1RFNJODYgRFNJ IHRvIGVEUCBicmlkZ2UiCisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgor CXNlbGVjdCBSRUdNQVBfSTJDCisJc2VsZWN0IERSTV9QQU5FTAorCS0tLWhlbHAtLS0KKwkgIFRl eGFzIEluc3RydW1lbnRzIFNONjVEU0k4NiBEU0kgdG8gZURQIEJyaWRnZSBkcml2ZXIKKwogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L0tjb25maWciCiAKIHNvdXJjZSAi ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZQppbmRleCAzNzNlYjI4Li4zNzExYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKQEAg LTEyLDQgKzEyLDUgQEAgb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSArPSB0YzM1 ODc2Ny5vCiBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KIG9iai0k KENPTkZJR19EUk1fSTJDX0FEVjc1MTEpICs9IGFkdjc1MTEvCiBvYmotJChDT05GSUdfRFJNX1RJ X1RGUDQxMCkgKz0gdGktdGZwNDEwLm8KK29iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2KSAr PSB0aS1zbjY1ZHNpODYubwogb2JqLXkgKz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90 aS1zbjY1ZHNpODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTljN2Nk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYu YwpAQCAtMCwwICsxLDcyNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2ku aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgor I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjZGVmaW5lIFNOX0JSSURHRV9SRVZJ U0lPTl9JRCAweDIKKworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNk ZWZpbmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4CisjZGVmaW5lIFNOX0hQRF9ESVNBQkxFX1JF RwkJCTB4NUMKKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHCQkJMHgwQQorI2RlZmluZSBTTl9E U0lfTEFORVNfUkVHCQkJMHgxMAorI2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJCTB4MTIK KyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEKKyNkZWZpbmUgU05fU1NDX0NPTkZJR19S RUcJCQkweDkzCisjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkweDk0CisjZGVmaW5l IFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgwRAorI2RlZmluZSBTTl9TQ1JBTUJMRV9DT05GSUdfUkVH CQkJMHg5NQorI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKKyNkZWZpbmUgU05fQVVY X0FERFJfMTlfMTZfUkVHCQkJMHg3NAorI2RlZmluZSBTTl9BVVhfQUREUl8xNV84X1JFRwkJCTB4 NzUKKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKKyNkZWZpbmUgU05fQVVYX0xF TkdUSF9SRUcJCQkweDc3CisjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4NzgKKyNkZWZpbmUg U05fTUxfVFhfTU9ERV9SRUcJCQkweDk2CisvKiB2aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0 ZXJzICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRwkweDIwCisj ZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQorI2RlZmluZSBT Tl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAorI2RlZmluZSBTTl9DSEFf VkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHCTB4MjUKKyNkZWZpbmUgU05fQ0hBX0hTWU5D X1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQworI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lE VEhfSElHSF9SRUcJMHgyRAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JF RwkweDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCisj ZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4MzQKKyNkZWZpbmUgU05f Q0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2CisjZGVmaW5lIFNOX0NIQV9IT1JJWk9O VEFMX0ZST05UX1BPUkNIX1JFRwkweDM4CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9Q T1JDSF9SRUcJCTB4M0EKKyNkZWZpbmUgU05fREFUQV9GT1JNQVRfUkVHCQkJMHg1QgorCisjZGVm aW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisjZGVmaW5lIFNOX0RFRkFVTFRfUkVGX0NMS19L SFoJMTkyMDAKKworLyogZnVkZ2UgZmFjdG9yIHJlcXVpcmVkIHRvIGFjY291bnQgZm9yIDhiLzEw YiBlbmNvZGluZyAqLworI2RlZmluZSBEUF9DTEtfRlVER0VfTlVNCTEwCisjZGVmaW5lIERQX0NM S19GVURHRV9ERU4JOAorCisjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xLCTAKKyNkZWZpbmUg RFBQTExfQ0xLX1NSQ19EU0lDTEsJMQorCisjZGVmaW5lIFNOX0RTSUFfUkVGQ0xLX09GRlNFVAkx CisjZGVmaW5lIFNOX0RTSUFfTEFORV9PRkZTRVQJMworI2RlZmluZSBTTl9EUF9MQU5FX09GRlNF VAk0CisjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9PRkZTRVQJNQorI2RlZmluZSBTTl9USU1JTkdf SElHSF9PRkZTRVQJOAorCisjZGVmaW5lIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVAlCSVQoMykK KyNkZWZpbmUgU05fRFNJQV9OVU1fTEFORVNfQklUUwkJKEJJVCg0KSB8IEJJVCgzKSkKKyNkZWZp bmUgU05fRFBfTlVNX0xBTkVTX0JJVFMJCShCSVQoNSkgfCBCSVQoNCkpCisjZGVmaW5lIFNOX0RQ X0RBVEFfUkFURV9CSVRTCQkoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKQorI2RlZmluZSBTTl9I UERfRElTQUJMRV9CSVQJCUJJVCgwKQorCitzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBkcm1fYnJpZGdl IGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRldmlj ZV9ub2RlICpob3N0X25vZGU7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXVuc2ln bmVkIGludCByZWZjbGtfa2h6OworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBn cGlvX2Rlc2MgKmVuYWJsZV9ncGlvOworCXVuc2lnbmVkIGludCBudW1fc3VwcGxpZXM7CisJc3Ry dWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1cHBsaWVzOworCXN0cnVjdCBpMmNfYWRhcHRlciAq ZGRjOworCXVuc2lnbmVkIGludCBudW1fbW9kZXM7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Y3Vycl9tb2RlOworCXN0cnVjdCBtdXRleCBsb2NrOworCXVuc2lnbmVkIGludCBjdHJsX3JlZl9j b3VudDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRn ZV92b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0g MHhmZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRp X3NuX2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsKKwkueWVzX3JhbmdlcyA9IHRpX3NuX2JyaWRn ZV92b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlfc25fYnJp ZGdlX3ZvbGF0aWxlX3JhbmdlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9j b25maWcgdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwku dmFsX2JpdHMgPSA4LAorCS52b2xhdGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVf dGFibGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAorfTsKKworc3RhdGljIGludCB0 aV9zbl9icmlkZ2VfcG93ZXJfY3RybChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgYm9vbCBl bmFibGUpCit7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZwZGF0YS0+bG9jayk7CisJ aWYgKGVuYWJsZSkKKwkJcGRhdGEtPmN0cmxfcmVmX2NvdW50Kys7CisJZWxzZQorCQlwZGF0YS0+ Y3RybF9yZWZfY291bnQtLTsKKworCWlmIChlbmFibGUgJiYgKHBkYXRhLT5jdHJsX3JlZl9jb3Vu dCA9PSAxKSkgeworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBw bGllcywKKwkJCQkJCSBwZGF0YS0+c3VwcGxpZXMpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJS T1IoImJyaWRnZSByZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7CisJCQlnb3RvIGV4aXQ7CisJ CX0KKworCQlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvLCAxKTsKKwl9IGVsc2Ug aWYgKCFlbmFibGUgJiYgIXBkYXRhLT5jdHJsX3JlZl9jb3VudCkgeworCQlncGlvZF9zZXRfdmFs dWUocGRhdGEtPmVuYWJsZV9ncGlvLCAwKTsKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBk YXRhLT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7CisJfSBlbHNlIHsKKwkJRFJNX0RF QlVHKCJ0aV9zbl9icmlkZ2UgcG93ZXIgY3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAorCQkJCQkJ ZW5hYmxlLCBwZGF0YS0+Y3RybF9yZWZfY291bnQpOworCX0KKworZXhpdDoKKwltdXRleF91bmxv Y2soJnBkYXRhLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDb25uZWN0b3IgZnVuY3Mg Ki8KK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICoKK2Nvbm5lY3Rvcl90b190aV9zbl9icmlk Z2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGNvbm5lY3Rvciwgc3RydWN0IHRpX3NuX2JyaWRnZSwgY29ubmVjdG9yKTsKK30KKworc3Rh dGljIGludCB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVj dG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs ID0gcGRhdGEtPnBhbmVsOworCXN0cnVjdCBlZGlkICplZGlkOworCisJaWYgKHBhbmVsKSB7CisJ CURSTV9ERUJVRygiZ2V0IG1vZGUgZnJvbSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKKwkJcGRh dGEtPm51bV9tb2RlcyA9IGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWwpOworCQlyZXR1cm4gcGRh dGEtPm51bV9tb2RlczsKKwl9CisKKwkvKiBnZXQgZnJvbSBFRElEICovCisJaWYgKCFwZGF0YS0+ ZGRjKQorCQlyZXR1cm4gMDsKKworCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVl KTsKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7CisJdGlfc25f YnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAw OworCisJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rvciwg ZWRpZCk7CisJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3Is IGVkaWQpOworCWtmcmVlKGVkaWQpOworCisJcmV0dXJuIHBkYXRhLT5udW1fbW9kZXM7Cit9CisK K3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwordGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2Rl X3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCS8qIG1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRp b24gaXMgNEsgYXQgNjAgZnBzICovCisJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQorCQlyZXR1 cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21v ZGVzLAorCS5tb2RlX3ZhbGlkID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAor fTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3RpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2Up Cit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJp ZGdlKGNvbm5lY3Rvcik7CisKKwkvKioKKwkgKiBUT0RPOiBDdXJyZW50bHkgaWYgZHJtX3BhbmVs IGlzIHByZXNlbnQsIHRoZW4gYWx3YXlzCisJICogcmV0dXJuIHRoZSBzdGF0dXMgYXMgY29ubmVj dGVkLiBOZWVkIHRvIGFkZCBzdXBwb3J0IHRvIGRldGVjdAorCSAqIGRldmljZSBzdGF0ZSBmb3Ig bm8gcGFuZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgorCSAqLworCWlmIChwZGF0YS0+cGFu ZWwpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlCisJCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzID0geworCS5maWxs X21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRl Y3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwKKwkuZGVzdHJveSA9IGRybV9jb25u ZWN0b3JfY2xlYW51cCwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVz ZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCB0aV9z bl9icmlkZ2UgKmJyaWRnZV90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IHRpX3NuX2JyaWRnZSwg YnJpZGdlKTsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCByZXYgPSAwOworCWlu dCByZXQgPSAwOworCisJcmV0ID0gcmVnbWFwX3JlYWQocGRhdGEtPnJlZ21hcCwgU05fREVWSUNF X1JFVl9SRUcsICZyZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV2ICE9 IFNOX0JSSURHRV9SRVZJU0lPTl9JRCkgeworCQlEUk1fRVJST1IoInRpX3NuX2JyaWRnZSByZXZp c2lvbiBpZDogMHgleCBtaXNtYXRjaFxuIiwgcmV2KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpX3NuX2JyaWRn ZV9zdXBwbHlfbmFtZXNbXSA9IHsKKwkidmNjYSIsCisJInZjYyIsCisJInZjY2lvIiwKKwkidnBs bCIsCit9OworCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCBpOworCisJcGRhdGEtPm51 bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7CisKKwlw ZGF0YS0+c3VwcGxpZXMgPSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwgcGRhdGEtPm51bV9zdXBw bGllcywKKwkJCQkgICAgIHNpemVvZigqcGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwZGF0YS0+c3VwcGxpZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsg aSA8IHBkYXRhLT5udW1fc3VwcGxpZXM7IGkrKykKKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBs eSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXR1cm4gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQocGRhdGEtPmRldiwKKwkJCQlwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+ c3VwcGxpZXMpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9u b2RlLCAqcG9ydCwgKmVuZHBvaW50OworCisJcGRhdGEtPnBhbmVsID0gTlVMTDsKKwlwb3J0ID0g b2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQocGRhdGEtPmRldi0+b2Zfbm9kZSwgMSk7CisJaWYgKHBv cnQpIHsKKwkJZW5kcG9pbnQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQi KTsKKwkJb2Zfbm9kZV9wdXQocG9ydCk7CisJCWlmICghZW5kcG9pbnQpIHsKKwkJCURSTV9FUlJP Uigibm8gb3V0cHV0IGVuZHBvaW50IGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9 CisKKwkJcGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9p bnQpOworCQlvZl9ub2RlX3B1dChlbmRwb2ludCk7CisJCWlmICghcGFuZWxfbm9kZSkgeworCQkJ RFJNX0VSUk9SKCJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCisJCXBkYXRhLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVsX25vZGUpOwor CQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKKwkJaWYgKCFwZGF0YS0+cGFuZWwpIHsKKwkJCURS TV9FUlJPUigibm8gcGFuZWwgbm9kZSBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ fQorCQlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRhLT5jb25uZWN0b3IpOwor CQlEUk1fREVCVUcoInBhbmVsIGF0dGFjaGVkXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up Cit7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqZHNpOworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2Jy aWRnZShicmlkZ2UpOworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9p bmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCisJCQkJCQkgICAuY2hhbm5lbCA9 IDAsCisJCQkJCQkgICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCWlmICghYnJpZGdlLT5l bmNvZGVyKSB7CisJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxu Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEhQRCBub3Qgc3VwcG9ydGVkICovCisJ cGRhdGEtPmNvbm5lY3Rvci5wb2xsZWQgPSAwOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0 KGJyaWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcGRhdGEt PmNvbm5lY3RvciwKKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsK Kwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBkYXRhLT5jb25uZWN0b3IsIGJy aWRnZS0+ZW5jb2Rlcik7CisKKwlob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUo cGRhdGEtPmhvc3Rfbm9kZSk7CisJaWYgKCFob3N0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRv IGZpbmQgZHNpIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkc2kgPSBtaXBp X2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7CisJaWYgKElTX0VSUihkc2kp KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKKwkJcmV0 ID0gUFRSX0VSUihkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRPRE86IHNldHRpbmcg dG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9y bWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9N T0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJCSAgTUlQSV9E U0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisKKwlyZXQgPSBt aXBpX2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOworCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rl cihkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBkYXRhLT5kc2kgPSBkc2k7CisKKwlEUk1f REVCVUcoImJyaWRnZSBhdHRhY2hlZFxuIik7CisJLyogYXR0YWNoIHBhbmVsIHRvIGJyaWRnZSAq LworCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCisJRFJNX0RFQlVHKCJt b2RlX3NldDogaGRpc3BsYXk9JWQsIHZkaXNwbGF5PSVkLCB2cmVmcmVzaD0lZCwgY2xvY2s9JWRc biIsCisJCWFkal9tb2RlLT5oZGlzcGxheSwgYWRqX21vZGUtPnZkaXNwbGF5LAorCQlhZGpfbW9k ZS0+dnJlZnJlc2gsIGFkal9tb2RlLT5jbG9jayk7CisKKwlkcm1fbW9kZV9jb3B5KCZwZGF0YS0+ Y3Vycl9tb2RlLCBhZGpfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9kaXNh YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJc3RydWN0IGRybV9wYW5l bCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7CisKKwlpZiAocGFuZWwpIHsKKwkJZHJtX3BhbmVsX2Rp c2FibGUocGFuZWwpOworCQlkcm1fcGFuZWxfdW5wcmVwYXJlKHBhbmVsKTsKKwl9CisKKwkvKiBk aXNhYmxlIHZpZGVvIHN0cmVhbSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFw LCBTTl9FTkhfRlJBTUVfUkVHLAorCQkJU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCAwKTsKKwkv KiBzZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlIE9GRiAqLworCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMCk7CisJLyogZGlzYWJsZSBEUCBQTEwgKi8K KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDApOworfQor CisvKiByZWZlcmVuY2UgY2xrIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSB0aGUgYnJpZGdlIGlu IEtIeiAqLworc3RhdGljIHUzMiB0aV9zbl9icmlkZ2VfcmVmX2Nsa190YWJsZVtdID0geworCTEy MDAwLAorCTE5MjAwLAorCTI2MDAwLAorCTI3MDAwLAorCTM4NDAwLAorfTsKKworc3RhdGljIHZv aWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7 CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGlfc25fYnJpZGdl X3JlZl9jbGtfdGFibGUpOyBpKyspCisJCWlmICh0aV9zbl9icmlkZ2VfcmVmX2Nsa190YWJsZVtp XSA9PSBwZGF0YS0+cmVmY2xrX2toeikKKwkJCWJyZWFrOworCXJlZ21hcF93cml0ZShwZGF0YS0+ cmVnbWFwLCBTTl9SRUZDTEtfRlJFUV9SRUcsCisJCShEUFBMTF9DTEtfU1JDX1JFRkNMSyB8IChp IDw8IFNOX0RTSUFfUkVGQ0xLX09GRlNFVCkpKTsKK30KKworc3RydWN0IGRwX2RhdGFfcmF0ZSB7 CisJdW5zaWduZWQgaW50IGJpdF92YWw7CisJdW5zaWduZWQgaW50IGRwX3JhdGU7Cit9OworCisv KiBkcCBkYXRhIHJhdGUgc3VwcG9ydGVkIGJ5IHRoZSBicmlkZ2UgTWJwcyAqLworc3RhdGljIHN0 cnVjdCBkcF9kYXRhX3JhdGUgdGlfc25fYnJpZGdlX2RwX3JhdGVfdGFibGVbXSA9IHsKKwl7MSwg MTYyMH0sCisJezIsIDIxNjB9LAorCXszLCAyNDMwfSwKKwl7NCwgMjcwMH0sCisJezUsIDMyNDB9 LAorCXs2LCA0MzIwfSwKKwl7NywgNTQwMH0sCit9OworCitzdGF0aWMgdm9pZCB0aV9zbl9icmlk Z2Vfc2V0X2RzaV9kcF9yYXRlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2ln bmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oeiwgZHBfcmF0ZV9taHo7CisJdW5zaWdu ZWQgaW50IHZhbCA9IDAsIGkgPSAwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0g JnBkYXRhLT5jdXJyX21vZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJYml0 X3JhdGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxfZm9y bWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9yYXRl X21oeiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVtZW50 IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9EU0lf Q0xLX0ZSRVFfTUhaIC8gNSkgKworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19GUkVR X01IWikgLyA1KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lB X0NMS19GUkVRX1JFRywgdmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9yYXRl X21oeiA9ICgoYml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdF X05VTSkgLworCQkJCQkJCURQX0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfdGFibGUpOyBpKyspCisJCWlmICh0aV9zbl9icmlk Z2VfZHBfcmF0ZV90YWJsZVtpXS5kcF9yYXRlID4gZHBfcmF0ZV9taHopCisJCQlicmVhazsKKwlp ZiAoaSA9PSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kcF9yYXRlX3RhYmxlKSkKKwkJaS0tOyAv KiBzZXQgdG8gbWF4aW11bSBwb3NzaWJsZSAqLworCisJdmFsID0gdGlfc25fYnJpZGdlX2RwX3Jh dGVfdGFibGVbaV0uYml0X3ZhbCA8PCBTTl9EUF9EQVRBX1JBVEVfT0ZGU0VUOworCXJlZ21hcF91 cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EQVRBUkFURV9DT05GSUdfUkVHLAorCQkJCQkJ U05fRFBfREFUQV9SQVRFX0JJVFMsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRn ZV9zZXRfdmlkZW9fdGltaW5ncyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOworCisJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRywK KwkJCW1vZGUtPmhkaXNwbGF5ICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcsCisJCQkobW9kZS0+aGRpc3BsYXkg Pj4gU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+ cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCisJCQltb2RlLT52 ZGlzcGxheSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVS VElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHLAorCQkJKG1vZGUtPnZkaXNwbGF5ID4+IFNOX1RJ TUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJCQkobW9kZS0+aHN5bmNfZW5kIC0g bW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKKwkJCSgobW9kZS0+aHN5bmNfZW5k IC0gbW9kZS0+aHN5bmNfc3RhcnQpID4+CisJCQkgU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAmIDB4 RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lE VEhfTE9XX1JFRywKKwkJCShtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgJiAw eEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJ RFRIX0hJR0hfUkVHLAorCQkJKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkg Pj4KKwkJCSBTTl9USU1JTkdfSElHSF9PRkZTRVQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBk YXRhLT5yZWdtYXAsIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAorCQkJKG1vZGUt Pmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAorCQkJKG1vZGUtPnZ0b3Rh bCAtIG1vZGUtPnZzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkJKG1vZGUtPmhzeW5jX3N0 YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCisJCQkobW9kZS0+dnN5bmNfc3Rh cnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDUw KTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCit9CisKK3N0YXRpYyB2b2lk IHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1 Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsK KwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKKwl1bnNpZ25lZCBpbnQg dmFsID0gMDsKKworCWlmIChwYW5lbCkgeworCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5lbCk7CisJ CS8qIGluIGNhc2UgZHJtX3BhbmVsIGlzIGNvbm5lY3RlZCB0aGVuIEhQRCBpcyBub3Qgc3VwcG9y dGVkICovCisJCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9IUERfRElTQUJM RV9SRUcsCisJCQkJICAgU05fSFBEX0RJU0FCTEVfQklULCBTTl9IUERfRElTQUJMRV9CSVQpOwor CX0KKworCS8qIERTSV9BIGxhbmUgY29uZmlnICovCisJdmFsID0gKDQgLSBwZGF0YS0+ZHNpLT5s YW5lcykgPDwgU05fRFNJQV9MQU5FX09GRlNFVDsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEt PnJlZ21hcCwgU05fRFNJX0xBTkVTX1JFRywKKwkJCQkJU05fRFNJQV9OVU1fTEFORVNfQklUUywg dmFsKTsKKworCS8qIERQIGxhbmUgY29uZmlnICovCisJdmFsID0gKHBkYXRhLT5kc2ktPmxhbmVz IC0gMSkgPDwgU05fRFBfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5y ZWdtYXAsIFNOX1NTQ19DT05GSUdfUkVHLAorCQkJCQlTTl9EUF9OVU1fTEFORVNfQklUUywgdmFs KTsKKworCS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLworCXRpX3NuX2JyaWRn ZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyogZW5hYmxlIERQIFBMTCAqLworCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7CisJdXNsZWVwX3Jh bmdlKDEwMDAwLCAxMDA1MCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwor CisJLyoqCisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRo ZW50aWNhdGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBtZXRob2QgaXMgZW5hYmxlZCBieSBkZWZh dWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBhdXRoZW50aWNhdGlvbiBt ZXRob2QuIFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRoZSBlRFAgcGFuZWwKKwkg KiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4K KwkgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dEQVRBMF9SRUcsIDB4 MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcs IDB4MDApOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xNV84X1JF RywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9S RUcsIDB4MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JF RywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAw eDgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDUwKTsgLyogMTBtcyBkZWxheSByZWNvbW1l bmRlZCBieSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlICovCisJ cmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAweDBBKTsKKwlt c2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KKworCS8qIGNv bmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdz KHBkYXRhKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwlyZWdtYXBfdXBkYXRlX2Jp dHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKKwkJCSAgIFNOX0VOQUJMRV9WSURf U1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKKworCWlmIChwYW5lbCkKKwkJ ZHJtX3BhbmVsX2VuYWJsZShwYW5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9w cmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisKKwl0aV9zbl9i cmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisKKwkvKiBjb25maWd1cmUgYnJpZGdlIENM S19TUkMgYW5kIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsayhwZGF0YSk7Cit9 CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190 aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBm YWxzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB0aV9zbl9i cmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gsCisJLnByZV9l bmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxlID0gdGlfc25fYnJpZGdl X2VuYWJsZSwKKwkuZGlzYWJsZSA9IHRpX3NuX2JyaWRnZV9kaXNhYmxlLAorCS5wb3N0X2Rpc2Fi bGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAorCS5tb2RlX3NldCA9IHRpX3NuX2JyaWRn ZV9tb2RlX3NldCwKK307CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0 KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGF0YS0+ZGV2LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7CisK KwllbmRfbm9kZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKKwlp ZiAoIWVuZF9ub2RlKSB7CisJCURSTV9FUlJPUigicmVtb3RlIGVuZHBvaW50IG5vdCBmb3VuZFxu Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFw aF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZF9ub2RlKTsKKwlvZl9ub2RlX3B1dChlbmRfbm9k ZSk7CisJaWYgKCFwZGF0YS0+aG9zdF9ub2RlKSB7CisJCURSTV9FUlJPUigicmVtb3RlIG5vZGUg bm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW9mX25vZGVfcHV0KHBkYXRh LT5ob3N0X25vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdl X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJIGNvbnN0IHN0cnVjdCBpMmNfZGV2 aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YTsKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmRkY19ub2RlOworCWludCByZXQgPSAwOworCisJaWYgKCFpMmNfY2hlY2tfZnVu Y3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJRFJNX0VSUk9S KCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCXBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwKKwkJc2l6ZW9mKHN0cnVjdCB0 aV9zbl9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT01F TTsKKworCXBkYXRhLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJRFJNX0RFQlVHKCJJMkMgYWRkcmVz cyBpcyAleFxuIiwgY2xpZW50LT5hZGRyKTsKKworCXBkYXRhLT5yZWdtYXAgPSBkZXZtX3JlZ21h cF9pbml0X2kyYyhjbGllbnQsCisJCQkJJnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKKwlp ZiAoSVNfRVJSKHBkYXRhLT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFw KTsKKworCXBkYXRhLT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsCisJ CQkJCSAgICAiZW5hYmxlIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihwZGF0YS0+ZW5h YmxlX2dwaW8pKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9t IERUXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pOworCQlyZXR1cm4g cmV0OworCX0KKworCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRvcnNcbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkYXRh LT5kZXYtPm9mX25vZGUsCisJCQkicmVmY2xrLWZyZXEta2h6IiwgJnBkYXRhLT5yZWZjbGtfa2h6 KTsKKwlpZiAocmV0KQorCQlwZGF0YS0+cmVmY2xrX2toeiA9IFNOX0RFRkFVTFRfUkVGX0NMS19L SFo7CisKKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlkZGNfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRhdGEt PmRldi0+b2Zfbm9kZSwgImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKGRkY19ub2RlKSB7CisJCXBk YXRhLT5kZGMgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoZGRjX25vZGUpOworCQlvZl9u b2RlX3B1dChkZGNfbm9kZSk7CisJCWlmICghcGRhdGEtPmRkYykgeworCQkJZGV2X2RiZyhwZGF0 YS0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgZGRjIG5vZGVcbiIpOworCQkJcmV0dXJuIC1FUFJPQkVf REVGRVI7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKHBkYXRhLT5kZXYsICJubyBkZGMgcHJv cGVydHkgZm91bmRcbiIpOworCX0KKworCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0 cnVlKTsKKwlyZXQgPSB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHBkYXRhKTsKKwl0aV9z bl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7CisJbXV0ZXhfaW5pdCgm cGRhdGEtPmxvY2spOworCisJcGRhdGEtPmJyaWRnZS5mdW5jcyA9ICZ0aV9zbl9icmlkZ2VfZnVu Y3M7CisJcGRhdGEtPmJyaWRnZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKworCWRy bV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJpZGdlKTsKKworCURSTV9ERUJVRygiYnJpZGdlIGRldmlj ZSByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB0aV9zbl9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJ c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsK KworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJbWlwaV9kc2lfZGV0YWNoKHBk YXRhLT5kc2kpOworCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOworCisJ ZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOworCWkyY19wdXRfYWRhcHRlcihwZGF0 YS0+ZGRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQg dGlfc25fYnJpZGdlX2lkW10gPSB7CisJeyAidGksc242NWRzaTg2IiwgMH0sCisJe30sCit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0geworCXsu Y29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGkyY19k cml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0 aV9zbjY1ZHNpODYiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFi bGUsCisJfSwKKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJlbW92ZSA9IHRpX3Nu X2JyaWRnZV9yZW1vdmUsCisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAorfTsKKworbW9k dWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7CitNT0RVTEVfREVTQ1JJUFRJT04o InNuNjVkc2k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1l bWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJv cmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVk cmVubwo=