From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v6 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Tue, 15 May 2018 11:22:41 +0530 Message-ID: <1526363564-13823-2-git-send-email-spanda@codeaurora.org> References: <1526363564-13823-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: <1526363564-13823-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: linux-arm-msm@vger.kernel.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 IGdwaW9zCiAgIHdpbGwgYmUgaGFuZGxlZCBieSBpMmMgbWFzdGVyLgogLSBVcGRhdGUgcmVxdWly ZWQgc3VwcGxpZXMgbmFtZXMuCiAtIFJlbW92ZSB1bm5lY2Vzc2FyeSBnb3RvIHN0YXRlbWVudHMg KFNlYW4gUGF1bCkuCiAtIEFkZCBtdXRleCBsb2NrIHRvIHBvd2VyX2N0cmwgQVBJIHRvIGF2b2lk IHJhY2UgY29uZGl0aW9ucyAoU2VhbgogICBQYXVsKS4KIC0gQWRkIHN1cHBvcnQgdG8gcGFyc2Ug cmVmZXJlbmNlIGNsayBmcmVxdWVuY3kgZnJvbSBkdChvcHRpb25hbCkuCiAtIFVwZGF0ZSB0aGUg YnJpZGdlIGNoaXAgZW5hYmxlL2Rpc2FibGUgc2VxdWVuY2UuCgpDaGFuZ2VzIGluIHY1OgogLSBG aXhlZCBLYnVpbGQgdGVzdCBzZXJ2aWNlIHJlcG9ydGVkIHdhcm5pbmdzLgoKQ2hhbmdlcyBpbiB2 NjoKIC0gVXNlIFBNIHJ1bnRpbWUgYmFzZWQgcmVmLWNvdW50aW5nIGluc3RlYWQgb2YgbG9jYWwg cmVmX2NvdW50IG1lY2hhbmlzbQogICAoU3RlcGhlbiBCb3lkKS4KIC0gQ2xlYW4gdXAgc29tZSBk ZWJ1ZyBsb2dzIGFuZCBpbmRlbnRhdGlvbnMgKFNlYW4gUGF1bCkuCiAtIFNpbXBsaWZ5IGRwIHJh dGUgY2FsY3VsYXRpb24gKFNlYW4gUGF1bCkuCiAtIEFkZCBzdXBwb3J0IHRvIGNvbmZpZ3VyZSBy ZWZjbGsgYmFzZWQgb24gaW5wdXQgUkVGQ0xLIHBpbiBvciBEQUNQL04KICAgcGluIChTdGVwaGVu IEJveWQpLgoKU2lnbmVkLW9mZi1ieTogU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEu b3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgfCAgIDkgKwog ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzY2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzc2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9LY29uZmlnCmluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcKQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9URlA0MTAKIAktLS1oZWxwLS0t CiAJICBUZXhhcyBJbnN0cnVtZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIgZHJpdmVy CiAKK2NvbmZpZyBEUk1fVElfU042NURTSTg2CisJdHJpc3RhdGUgIlRJIFNONjVEU0k4NiBEU0kg dG8gZURQIGJyaWRnZSIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJ c2VsZWN0IFJFR01BUF9JMkMKKwlzZWxlY3QgRFJNX1BBTkVMCisJLS0taGVscC0tLQorCSAgVGV4 YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgorCiBzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKIAogc291cmNlICJk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlCmluZGV4IDM3M2ViMjguLjM3MTFiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAt MTIsNCArMTIsNSBAQCBvYmotJChDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NjcpICs9IHRjMzU4 NzY3Lm8KIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwogb2JqLSQo Q09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KIG9iai0kKENPTkZJR19EUk1fVElf VEZQNDEwKSArPSB0aS10ZnA0MTAubworb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9 IHRpLXNuNjVkc2k4Ni5vCiBvYmoteSArPSBzeW5vcHN5cy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2U1NDkK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5j CkBAIC0wLDAgKzEsNzY2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5o PgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNp bmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUg PGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjZGVmaW5lIFNOX0JSSURHRV9SRVZJU0lP Tl9JRCAweDIKKworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZp bmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4CisjZGVmaW5lIFNOX0hQRF9ESVNBQkxFX1JFRwkJ CTB4NUMKKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHCQkJMHgwQQorI2RlZmluZSBTTl9EU0lf TEFORVNfUkVHCQkJMHgxMAorI2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJCTB4MTIKKyNk ZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEKKyNkZWZpbmUgU05fU1NDX0NPTkZJR19SRUcJ CQkweDkzCisjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkweDk0CisjZGVmaW5lIFNO X1BMTF9FTkFCTEVfUkVHCQkJMHgwRAorI2RlZmluZSBTTl9TQ1JBTUJMRV9DT05GSUdfUkVHCQkJ MHg5NQorI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKKyNkZWZpbmUgU05fQVVYX0FE RFJfMTlfMTZfUkVHCQkJMHg3NAorI2RlZmluZSBTTl9BVVhfQUREUl8xNV84X1JFRwkJCTB4NzUK KyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKKyNkZWZpbmUgU05fQVVYX0xFTkdU SF9SRUcJCQkweDc3CisjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4NzgKKyNkZWZpbmUgU05f TUxfVFhfTU9ERV9SRUcJCQkweDk2CisvKiB2aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJz ICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRwkweDIwCisjZGVm aW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQorI2RlZmluZSBTTl9D SEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAorI2RlZmluZSBTTl9DSEFfVkVS VElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHCTB4MjUKKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BV TFNFX1dJRFRIX0xPV19SRUcJMHgyQworI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhf SElHSF9SRUcJMHgyRAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkw eDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCisjZGVm aW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4MzQKKyNkZWZpbmUgU05fQ0hB X1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2CisjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFM X0ZST05UX1BPUkNIX1JFRwkweDM4CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JD SF9SRUcJCTB4M0EKKyNkZWZpbmUgU05fREFUQV9GT1JNQVRfUkVHCQkJMHg1QgorCisjZGVmaW5l IE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisKKy8qIGZ1ZGdlIGZhY3RvciByZXF1aXJlZCB0byBh Y2NvdW50IGZvciA4Yi8xMGIgZW5jb2RpbmcgKi8KKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX05VTQkx MAorI2RlZmluZSBEUF9DTEtfRlVER0VfREVOCTgKKworI2RlZmluZSBEUFBMTF9DTEtfU1JDX1JF RkNMSwkwCisjZGVmaW5lIERQUExMX0NMS19TUkNfRFNJQ0xLCTEKKworI2RlZmluZSBTTl9EU0lB X1JFRkNMS19PRkZTRVQJMQorI2RlZmluZSBTTl9EU0lBX0xBTkVfT0ZGU0VUCTMKKyNkZWZpbmUg U05fRFBfTEFORV9PRkZTRVQJNAorI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfT0ZGU0VUCTUKKyNk ZWZpbmUgU05fVElNSU5HX0hJR0hfT0ZGU0VUCTgKKworI2RlZmluZSBTTl9FTkFCTEVfVklEX1NU UkVBTV9CSVQJQklUKDMpCisjZGVmaW5lIFNOX0RTSUFfTlVNX0xBTkVTX0JJVFMJCShCSVQoNCkg fCBCSVQoMykpCisjZGVmaW5lIFNOX0RQX05VTV9MQU5FU19CSVRTCQkoQklUKDUpIHwgQklUKDQp KQorI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfQklUUwkJKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1 KSkKKyNkZWZpbmUgU05fSFBEX0RJU0FCTEVfQklUCQlCSVQoMCkKKworc3RydWN0IHRpX3NuX2Jy aWRnZSB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7 CisJc3RydWN0IGRybV9icmlkZ2UJCWJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvcgkJY29u bmVjdG9yOworCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKmhvc3Rfbm9kZTsKKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlCQkqZHNpOworCXN0cnVjdCBjbGsJCQkqcmVmY2xrOworCXN0cnVjdCBkcm1fcGFu ZWwJCSpwYW5lbDsKKwlzdHJ1Y3QgZ3Bpb19kZXNjCQkqZW5hYmxlX2dwaW87CisJdW5zaWduZWQg aW50CQkJbnVtX3N1cHBsaWVzOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhCSpzdXBwbGll czsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSpkZGM7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUJ CWN1cnJfbW9kZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3Nu X2JyaWRnZV92b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2Vf bWF4ID0gMHhmZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3Rh YmxlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsKKwkueWVzX3JhbmdlcyA9IHRpX3Nu X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlf c25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9jb25maWcgdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0g OCwKKwkudmFsX2JpdHMgPSA4LAorCS52b2xhdGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9s YXRpbGVfdGFibGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAorfTsKKworI2lmZGVm IENPTkZJR19QTQorc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVzdW1lKHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCWludCByZXQgPSAwOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKHBkYXRh LT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXMgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMSk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCWludCByZXQgPSAwOworCisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVf Z3BpbywgMCk7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBkYXRhLT5udW1fc3Vw cGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCkKKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gZGlzYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisjZW5k aWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRpX3NuX2JyaWRnZV9wbV9vcHMg PSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKHRpX3NuX2JyaWRnZV9zdXNwZW5kLCB0aV9zbl9icmlk Z2VfcmVzdW1lLCBOVUxMKQorfTsKKworLyogQ29ubmVjdG9yIGZ1bmNzICovCitzdGF0aWMgc3Ry dWN0IHRpX3NuX2JyaWRnZSAqCitjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3Is IHN0cnVjdCB0aV9zbl9icmlkZ2UsIGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9i cmlkZ2UoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5l bDsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwl1MzIgbnVtX21vZGVzOworCisJaWYgKHBhbmVsKSB7 CisJCURSTV9ERUJVR19LTVMoImdldCBtb2RlIGZyb20gY29ubmVjdGVkIGRybV9wYW5lbFxuIik7 CisJCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKHBhbmVsKTsKKwl9CisKKwlpZiAoIXBkYXRh LT5kZGMpCisJCXJldHVybiAwOworCisJcG1fcnVudGltZV9nZXRfc3luYyhwZGF0YS0+ZGV2KTsK KwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7CisJcG1fcnVudGlt ZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAwOworCisJZHJt X21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJ bnVtX21vZGVzID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJa2ZyZWUo ZWRpZCk7CisKKwlyZXR1cm4gbnVtX21vZGVzOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9z dGF0dXMKK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAorCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkK K3sKKwkvKiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRLIGF0IDYwIGZwcyAqLwor CWlmIChtb2RlLT5jbG9jayA+IDU5NDAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwor CXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVy X2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9k ZXMgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHRp X3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzCit0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCisJLyoq CisJICogVE9ETzogQ3VycmVudGx5IGlmIGRybV9wYW5lbCBpcyBwcmVzZW50LCB0aGVuIGFsd2F5 cworCSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9y dCB0byBkZXRlY3QKKwkgKiBkZXZpY2Ugc3RhdGUgZm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUp IHNjZW5hcmlvcy4KKwkgKi8KKwlpZiAocGRhdGEtPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtu b3duOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJv YmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gdGlfc25fYnJpZGdlX2Nvbm5l Y3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICpicmlkZ2VfdG9fdGlf c25fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihicmlkZ2UsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBp bnQgdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0 YSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHJl Z21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNOX0RFVklDRV9SRVZfUkVHLCAmcmV2KTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiUmV2aXNpb24gcmVhZCBmYWlsZWQgJWRcbiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJaWYgKHJldiAhPSBTTl9CUklER0VfUkVWSVNJT05fSUQpIHsK KwkJRFJNX0VSUk9SKCJ0aV9zbl9icmlkZ2UgcmV2aXNpb24gaWQ6IDB4JXggbWlzbWF0Y2hcbiIs IHJldik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCB0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzW10gPSB7CisJInZj Y2EiLAorCSJ2Y2MiLAorCSJ2Y2NpbyIsCisJInZwbGwiLAorfTsKKworc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sK Kwl1bnNpZ25lZCBpbnQgaTsKKworCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHRp X3NuX2JyaWRnZV9zdXBwbHlfbmFtZXMpOworCisJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2Fs bG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCisJCQkJICAgICAgIHNpemVvZigq cGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YS0+c3VwcGxpZXMpCisJ CXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3VwcGxpZXM7 IGkrKykKKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlf bmFtZXNbaV07CisKKwlyZXR1cm4gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwK KwkJCQkgICAgICAgcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKK30KKwor c3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxfbm9kZSwgKnBvcnQsICplbmRw b2ludDsKKworCXBkYXRhLT5wYW5lbCA9IE5VTEw7CisJcG9ydCA9IG9mX2dyYXBoX2dldF9wb3J0 X2J5X2lkKHBkYXRhLT5kZXYtPm9mX25vZGUsIDEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7 CisKKwllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwor CW9mX25vZGVfcHV0KHBvcnQpOworCWlmICghZW5kcG9pbnQpIHsKKwkJRFJNX0VSUk9SKCJubyBv dXRwdXQgZW5kcG9pbnQgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwYW5l bF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7CisJb2Zf bm9kZV9wdXQoZW5kcG9pbnQpOworCWlmICghcGFuZWxfbm9kZSkgeworCQlEUk1fRVJST1IoIm5v IG91dHB1dCBub2RlIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRhdGEt PnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocGFuZWxfbm9kZSk7CisJb2Zfbm9kZV9wdXQocGFu ZWxfbm9kZSk7CisJaWYgKCFwZGF0YS0+cGFuZWwpIHsKKwkJRFJNX0VSUk9SKCJubyBwYW5lbCBu b2RlIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRybV9wYW5lbF9hdHRhY2go cGRhdGEtPnBhbmVsLCAmcGRhdGEtPmNvbm5lY3Rvcik7CisJRFJNX0RFQlVHX0tNUygiZHJtIHBh bmVsIGF0dGFjaGVkIHRvIHRpX3NuX2JyaWRnZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7 CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpOworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRn ZShicmlkZ2UpOworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZv IGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCisJCQkJCQkgICAuY2hhbm5lbCA9IDAs CisJCQkJCQkgICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCWlmICghYnJpZGdlLT5lbmNv ZGVyKSB7CisJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxuIik7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEhQRCBub3Qgc3VwcG9ydGVkICovCisJcGRh dGEtPmNvbm5lY3Rvci5wb2xsZWQgPSAwOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJy aWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0 b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcGRhdGEtPmNv bm5lY3RvciwKKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlk cm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBkYXRhLT5jb25uZWN0b3IsIGJyaWRn ZS0+ZW5jb2Rlcik7CisKKwlob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUocGRh dGEtPmhvc3Rfbm9kZSk7CisJaWYgKCFob3N0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGZp bmQgZHNpIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkc2kgPSBtaXBpX2Rz aV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7CisJaWYgKElTX0VSUihkc2kpKSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKKwkJcmV0ID0g UFRSX0VSUihkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRPRE86IHNldHRpbmcgdG8g NCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0 ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RF X1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJCSAgTUlQSV9EU0lf TU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisKKwlyZXQgPSBtaXBp X2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0 byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOworCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihk c2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBkYXRhLT5kc2kgPSBkc2k7CisKKwlEUk1fREVC VUdfS01TKCJ0aV9zbl9icmlkZ2UgYXR0YWNoZWQgdG8gZHNpXG4iKTsKKwkvKiBhdHRhY2ggcGFu ZWwgdG8gYnJpZGdlICovCisJdGlfc25fYnJpZGdlX2F0dGFjaF9wYW5lbChwZGF0YSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCit7CisJc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisK KwlEUk1fREVCVUcoIm1vZGVfc2V0OiBoZGlzcGxheT0lZCwgdmRpc3BsYXk9JWQsIHZyZWZyZXNo PSVkLCBjbG9jaz0lZFxuIiwKKwkJYWRqX21vZGUtPmhkaXNwbGF5LCBhZGpfbW9kZS0+dmRpc3Bs YXksCisJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUtPmNsb2NrKTsKKworCWRybV9tb2Rl X2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgdGlf c25fYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3Qg dGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwlz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKKworCWlmIChwYW5lbCkgewor CQlkcm1fcGFuZWxfZGlzYWJsZShwYW5lbCk7CisJCWRybV9wYW5lbF91bnByZXBhcmUocGFuZWwp OworCX0KKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0ZV9iaXRz KHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVfVklEX1NU UkVBTV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICovCisJ cmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKKwkvKiBk aXNhYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5B QkxFX1JFRywgMCk7Cit9CisKK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJl cV9raHo7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmcGRhdGEtPmN1cnJfbW9k ZTsKKworCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNsb2NrICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zv cm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJlcV9raHogPSBiaXRfcmF0 ZV9raHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKKworCXJldHVybiBjbGtfZnJlcV9raHo7 Cit9CisKKyNkZWZpbmUgUkVGQ0xLX0xVVF9TSVpFCTUKKworLyogY2xrIGZyZXF1ZW5jaWVzIHN1 cHBvcnRlZCBieSBicmlkZ2UgaW4gSHogaW4gY2FzZSBkZXJpdmVkIGZyb20gUkVGQ0xLIHBpbiAq Lworc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlkZ2VfcmVmY2xrX2x1dFtdID0geworCTEyMDAw MDAwLAorCTE5MjAwMDAwLAorCTI2MDAwMDAwLAorCTI3MDAwMDAwLAorCTM4NDAwMDAwLAorfTsK KworLyogY2xrIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSBicmlkZ2UgaW4gSHogaW4gY2FzZSBk ZXJpdmVkIGZyb20gREFDUC9OIHBpbiAqLworc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlkZ2Vf ZHNpY2xrX2x1dFtdID0geworCTQ2ODAwMDAwMCwKKwkzODQwMDAwMDAsCisJNDE2MDAwMDAwLAor CTQ4NjAwMDAwMCwKKwk0NjA4MDAwMDAsCit9OworCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vf c2V0X3JlZmNsayhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJ dTggcmVmY2xrX3NyYzsKKwl1MzIgcmVmY2xrX3JhdGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0 OworCisJaWYgKHBkYXRhLT5yZWZjbGspIHsKKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19TUkNf UkVGQ0xLOworCQlyZWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0YS0+cmVmY2xrKTsKKwkJ cmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0OworCQljbGtfcHJlcGFyZV9lbmFi bGUocGRhdGEtPnJlZmNsayk7CisJfSBlbHNlIHsKKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19T UkNfRFNJQ0xLOworCQlyZWZjbGtfcmF0ZSA9IHRpX3NuX2JyaWRnZV9nZXRfZHNpX2ZyZXEocGRh dGEpICogMTAwMDsKKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0OworCX0K KworCS8qIGZvciBpIGVxdWFscyB0byBSRUZDTEtfTFVUX1NJWkUgbWVhbnMgZGVmYXVsdCBmcmVx dWVuY3kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUkVGQ0xLX0xVVF9TSVpFOyBpKyspCisJCWlmIChy ZWZjbGtfbHV0W2ldID09IHJlZmNsa19yYXRlKQorCQkJYnJlYWs7CisKKwlyZWdtYXBfd3JpdGUo cGRhdGEtPnJlZ21hcCwgU05fUkVGQ0xLX0ZSRVFfUkVHLAorCQkgICAgIChyZWZjbGtfc3JjIHwg KGkgPDwgU05fRFNJQV9SRUZDTEtfT0ZGU0VUKSkpOworfQorCisvKioKKyAqIExVVCBpbmRleCBj b3JyZXNwb25kcyB0byByZWdpc3RlciB2YWx1ZSBhbmQKKyAqIExVVCB2YWx1ZXMgY29ycmVzcG9u ZHMgdG8gZHAgZGF0YSByYXRlIHN1cHBvcnRlZAorICogYnkgdGhlIGJyaWRnZSBpbiBNYnBzIHVu aXQuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdGlfc25fYnJpZGdlX2RwX3JhdGVf bHV0W10gPSB7CisJMCwgMTYyMCwgMjE2MCwgMjQzMCwgMjcwMCwgMzI0MCwgNDMyMCwgNTQwMAor fTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9kc2lfZHBfcmF0ZShzdHJ1Y3QgdGlf c25fYnJpZGdlICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0X3JhdGVfbWh6LCBjbGtfZnJl cV9taHosIGRwX3JhdGVfbWh6OworCXVuc2lnbmVkIGludCB2YWwgPSAwLCBpID0gMDsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOworCisJLyogc2V0 IERTSUEgY2xrIGZyZXF1ZW5jeSAqLworCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEw MDApICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0 KTsKKwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAy KTsKKworCS8qIGZvciBlYWNoIGluY3JlbWVudCBpbiB2YWwsIGZyZXF1ZW5jeSBpbmNyZWFzZXMg YnkgNU1IeiAqLworCXZhbCA9IChNSU5fRFNJX0NMS19GUkVRX01IWiAvIDUpICsKKwkJKCgoY2xr X2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gNSkgJiAweEZGKTsKKwlyZWdtYXBf d3JpdGUocGRhdGEtPnJlZ21hcCwgU05fRFNJQV9DTEtfRlJFUV9SRUcsIHZhbCk7CisKKwkvKiBz ZXQgRFAgZGF0YSByYXRlICovCisJZHBfcmF0ZV9taHogPSAoKGJpdF9yYXRlX21oeiAvIHBkYXRh LT5kc2ktPmxhbmVzKSAqIERQX0NMS19GVURHRV9OVU0pIC8KKwkJCQkJCQlEUF9DTEtfRlVER0Vf REVOOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1 dCk7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6 KQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2VfZHBfcmF0ZV9s dXQpKQorCQlpLS07IC8qIHNldCB0byBtYXhpbXVtIHBvc3NpYmxlICovCisKKwlyZWdtYXBfdXBk YXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJCSAgIFNO X0RQX0RBVEFfUkFURV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOworfQorCitz dGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmcGRhdGEt PmN1cnJfbW9kZTsKKworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZF X0xJTkVfTEVOR1RIX0xPV19SRUcsCisJCSAgICAgbW9kZS0+aGRpc3BsYXkgJiAweEZGKTsKKwly ZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdI X1JFRywKKwkJICAgICAobW9kZS0+aGRpc3BsYXkgPj4gU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAm IDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRElT UExBWV9TSVpFX0xPV19SRUcsCisJCSAgICAgbW9kZS0+dmRpc3BsYXkgJiAweEZGKTsKKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdI X1JFRywKKwkJICAgICAobW9kZS0+dmRpc3BsYXkgPj4gU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAm IDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVMU0Vf V0lEVEhfTE9XX1JFRywKKwkJICAgICAobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3Rh cnQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19Q VUxTRV9XSURUSF9ISUdIX1JFRywKKwkJICAgICAoKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhz eW5jX3N0YXJ0KSA+PgorCQkgICAgICBTTl9USU1JTkdfSElHSF9PRkZTRVQpICYgMHhGRik7CisJ cmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1df UkVHLAorCQkgICAgIChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgJiAweEZG KTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRI X0hJR0hfUkVHLAorCQkgICAgICgobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQp ID4+CisJCSAgICAgIFNOX1RJTUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcsCisJCSAg ICAgKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAorCQkgICAg IChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywKKwkJICAg ICAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKKwlyZWdtYXBf d3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKKwkJ ICAgICAobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKKwl1c2xl ZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVj ICovCit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190 aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5w YW5lbDsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChwYW5lbCkgeworCQlkcm1fcGFu ZWxfcHJlcGFyZShwYW5lbCk7CisJCS8qIGluIGNhc2UgZHJtX3BhbmVsIGlzIGNvbm5lY3RlZCB0 aGVuIEhQRCBpcyBub3Qgc3VwcG9ydGVkICovCisJCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+ cmVnbWFwLCBTTl9IUERfRElTQUJMRV9SRUcsCisJCQkJICAgU05fSFBEX0RJU0FCTEVfQklULCBT Tl9IUERfRElTQUJMRV9CSVQpOworCX0KKworCS8qIERTSV9BIGxhbmUgY29uZmlnICovCisJdmFs ID0gKDQgLSBwZGF0YS0+ZHNpLT5sYW5lcykgPDwgU05fRFNJQV9MQU5FX09GRlNFVDsKKwlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRFNJX0xBTkVTX1JFRywKKwkJCSAgIFNO X0RTSUFfTlVNX0xBTkVTX0JJVFMsIHZhbCk7CisKKwkvKiBEUCBsYW5lIGNvbmZpZyAqLworCXZh bCA9IChwZGF0YS0+ZHNpLT5sYW5lcyAtIDEpIDw8IFNOX0RQX0xBTkVfT0ZGU0VUOworCXJlZ21h cF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywKKwkJCSAgIFNO X0RQX05VTV9MQU5FU19CSVRTLCB2YWwpOworCisJLyogc2V0IGRzaS9kcCBjbGsgZnJlcXVlbmN5 IHZhbHVlICovCisJdGlfc25fYnJpZGdlX3NldF9kc2lfZHBfcmF0ZShwZGF0YSk7CisKKwkvKiBl bmFibGUgRFAgUExMICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX1BMTF9FTkFC TEVfUkVHLCAxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSBy ZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKioKKwkgKiBUaGUgU042NURTSTg2IG9ubHkgc3Vw cG9ydHMgQVNTUiBEaXNwbGF5IEF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbmQKKwkgKiB0aGlzIG1l dGhvZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFuIGVEUCBwYW5lbCBtdXN0IHN1cHBvcnQgdGhp cworCSAqIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gV2UgbmVlZCB0byBlbmFibGUgdGhpcyBtZXRo b2QgaW4gdGhlIGVEUCBwYW5lbAorCSAqIGF0IERpc3BsYXlQb3J0IGFkZHJlc3MgMHgwMDEwQSBw cmlvciB0byBsaW5rIHRyYWluaW5nLgorCSAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9BVVhfV0RBVEEwX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0FVWF9BRERSXzE5XzE2X1JFRywgMHgwMCk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAweDAxKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJl Z21hcCwgU05fQVVYX0FERFJfN18wX1JFRywgMHgwQSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0FVWF9MRU5HVEhfUkVHLCAweDAxKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJl Z21hcCwgU05fQVVYX0NNRF9SRUcsIDB4ODEpOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTA1MDAp OyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KKworCS8qIFNlbWkgYXV0byBs aW5rIHRyYWluaW5nIG1vZGUgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fTUxf VFhfTU9ERV9SRUcsIDB4MEEpOworCW1zbGVlcCgyMCk7IC8qIDIwbXMgZGVsYXkgcmVjb21tZW5k ZWQgYnkgc3BlYyAqLworCisJLyogY29uZmlnIHZpZGVvIHBhcmFtZXRlcnMgKi8KKwl0aV9zbl9i cmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3MocGRhdGEpOworCisJLyogZW5hYmxlIHZpZGVvIHN0cmVh bSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9FTkhfRlJBTUVfUkVH LAorCQkJICAgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCBTTl9FTkFCTEVfVklEX1NUUkVBTV9C SVQpOworCisJaWYgKHBhbmVsKQorCQlkcm1fcGFuZWxfZW5hYmxlKHBhbmVsKTsKK30KKworc3Rh dGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlk Z2UoYnJpZGdlKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkvKiBj b25maWd1cmUgYnJpZGdlIENMS19TUkMgYW5kIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0 X3JlZmNsayhwZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2Fi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cmVm Y2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7CisKKwlwbV9ydW50 aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9i cmlkZ2VfZnVuY3MgdGlfc25fYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSB0aV9zbl9icmlk Z2VfYXR0YWNoLAorCS5wcmVfZW5hYmxlID0gdGlfc25fYnJpZGdlX3ByZV9lbmFibGUsCisJLmVu YWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlz YWJsZSwKKwkucG9zdF9kaXNhYmxlID0gdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9k ZV9zZXQgPSB0aV9zbl9icmlkZ2VfbW9kZV9zZXQsCit9OworCitzdGF0aWMgaW50IHRpX3NuX2Jy aWRnZV9wYXJzZV9kc2lfaG9zdChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRhdGEtPmRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKmVuZF9ub2RlOworCisJZW5kX25vZGUgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlf cmVncyhucCwgMCwgMCk7CisJaWYgKCFlbmRfbm9kZSkgeworCQlEUk1fRVJST1IoInJlbW90ZSBl bmRwb2ludCBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YS0+ aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7CisJ b2Zfbm9kZV9wdXQoZW5kX25vZGUpOworCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgeworCQlEUk1f RVJST1IoInJlbW90ZSBub2RlIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KwlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCSBj b25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpkZGNfbm9kZTsKKwlpbnQgcmV0ID0gMDsKKwor CWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19J MkMpKSB7CisJCURSTV9FUlJPUigiZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBJMkNcbiIpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYs IHNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYg KCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2 OworCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKKworCXBkYXRhLT5yZWdt YXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsCisJCQkJCSAgICAgJnRpX3NuX2JyaWRn ZV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWdtYXApKSB7CisJCURSTV9F UlJPUigicmVnbWFwIGkyYyBpbml0IGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHBkYXRh LT5yZWdtYXApOworCX0KKworCXBkYXRhLT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBk YXRhLT5kZXYsCisJCQkJCSAgICAiZW5hYmxlIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VS UihwZGF0YS0+ZW5hYmxlX2dwaW8pKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFi bGUgZ3BpbyBmcm9tIERUXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8p OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0 b3JzKHBkYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJl Z3VsYXRvcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHRpX3NuX2JyaWRnZV9w YXJzZV9kc2lfaG9zdChwZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBtX3J1 bnRpbWVfZW5hYmxlKHBkYXRhLT5kZXYpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRl dik7CisJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihwZGF0YSk7CisJcG1fcnVu dGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXZfcmVh ZDsKKworCXBkYXRhLT5yZWZjbGsgPSBkZXZtX2Nsa19nZXQocGRhdGEtPmRldiwgInJlZmNsayIp OworCisJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUsICJk ZGMtaTJjLWJ1cyIsIDApOworCWlmIChkZGNfbm9kZSkgeworCQlwZGF0YS0+ZGRjID0gb2ZfZmlu ZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKKwkJb2Zfbm9kZV9wdXQoZGRjX25vZGUp OworCQlpZiAoIXBkYXRhLT5kZGMpIHsKKwkJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byByZWFk IGRkYyBub2RlXG4iKTsKKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIGVycl9yZXZf cmVhZDsKKwkJfQorCX0gZWxzZSB7CisJCURSTV9ERUJVR19LTVMoIm5vIGRkYyBwcm9wZXJ0eSBm b3VuZFxuIik7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGRhdGEpOworCisJ cGRhdGEtPmJyaWRnZS5mdW5jcyA9ICZ0aV9zbl9icmlkZ2VfZnVuY3M7CisJcGRhdGEtPmJyaWRn ZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKworCWRybV9icmlkZ2VfYWRkKCZwZGF0 YS0+YnJpZGdlKTsKKworCXJldHVybiAwOworCitlcnJfcmV2X3JlYWQ6CisJcG1fcnVudGltZV9k aXNhYmxlKHBkYXRhLT5kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0aV9z bl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoIXBk YXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ZHNpKTsK KwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKKworCWRybV9icmlkZ2Vf cmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUocGRhdGEtPmRldik7 CisJaTJjX3B1dF9hZGFwdGVyKHBkYXRhLT5kZGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfaWRbXSA9IHsKKwl7ICJ0aSxzbjY1 ZHNpODYiLCAwfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGlfc25fYnJp ZGdlX2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25fYnJpZGdl X21hdGNoX3RhYmxlW10gPSB7CisJey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAorCXt9 LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7 CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2VfZHJpdmVyID0geworCS5k cml2ZXIgPSB7CisJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSwKKwkJLnBtID0gJnRpX3NuX2JyaWRnZV9wbV9vcHMs CisJfSwKKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJlbW92ZSA9IHRpX3NuX2Jy aWRnZV9yZW1vdmUsCisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAorfTsKKworbW9kdWxl X2kyY19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNu NjVkc2k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJl ciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0 aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVu bwo=