From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v9 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 13 Jun 2018 16:39:50 +0530 Message-ID: <1528888190-32056-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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: devicetree@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 IEJveWQpLgoKQ2hhbmdlcyBpbiB2NzoKIC0gVXNlIHN0YXRpYyBzdXBwbHkgZW50cmllcyBpbnN0 ZWFkIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiAoQW5kcnplagogICBIYWpkYSkuCiAtIERlZmVyIGJy aWRnZSBkcml2ZXIgcHJvYmUgaWYgcGFuZWwgaXMgbm90IHByb2JlZCAoQW5kcnplaiBIYWpkYSku CiAtIFVwZGF0ZSBvZl9ncmFwaCBBUElzIGZvciBjb3JyZWN0IG5vZGUgcmVmZXJlbmNlIG1hbmFn ZW1lbnQuIChBbmRyemVqCiAgIEhhamRhKS4KIC0gUmVtb3ZlIGxvY2FsIGRpc3BsYXlfbW9kZSBv YmplY3QgKEFuZHJ6ZWogSGFqZGEpLgogLSBSZW1vdmUgdmVyc2lvbiBpZCBjaGVjayBmdW5jdGlv biBmcm9tIGRyaXZlci4KCkNoYW5nZXMgaW4gdjg6CiAtIE1vdmUgZHNpIHJlZ2lzdGVyL2F0dGFj aCBmdW5jdGlvbiB0byBicmlkZ2UgZHJpdmVyIHByb2JlIChBbmRyemVqCiAgIEhhamRhKS4KIC0g SW50cm9kdWNlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSAxNmJpdCB3b3JkcyBpbnRv IGNvbnNlY3V0aXZlCiAgIHJlZ2lzdGVycyAoQW5kcnplaiBIYWpkYSkuCiAtIFJlbW92ZSB1bm5l Y2Vzc2FyeSBtYWNyb3MgKEFuZHJ6ZWogSGFqZGEpLgoKQ2hhbmdlcyBpbiB2OToKIC0gUmVtb3Zl IGRzaSByZWdpc3Rlci9hdHRhY2ggZnJvbSBicmlkZ2UgcHJvYmUsIHNpbmNlIGRzaSBkZXYgcmVn aXN0ZXIKICAgY29tcGxldGlvbiBhbHNvIHdhaXRzIGZvciBhbnkgcGFuZWwgb3IgYnJpZGdlIHRv IGdldCBhZGRlZC4gVGhpcyBjcmVhdGVzCiAgIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGJyaWRn ZSBkcml2ZXIgY2FsbHMgZHNpIGRldiByZWdpc3RlciBhbmQKICAgYXR0YWNoIGJlZm9yZSBicmlk Z2UgYWRkLCBpbiBpdHMgcHJvYmUgZnVuY3Rpb24uCiAtIEZpeCBpc3N1ZXMgZmFjZWQgZHVyaW5n IHRlc3Rpbmcgb2YgYnJpZGdlIGRyaXZlciBvbiBhY3R1YWwgSFcuCiAtIFJlbW92ZSB1bm5lY2Vz c2FyeSBpbml0aWFsaXphdGlvbnMgKFN0ZXBoZW4gQm95ZCkuCiAtIFVzZSBsb2NhbCByZWZjbGsg bHV0IHNpemUgaW5zdGVhZCBvZiBnbG9iYWwgbWFjcm8gKFNlYW4gUGF1bCkuCgpTaWduZWQtb2Zm LWJ5OiBTYW5kZWVwIFBhbmRhIDxzcGFuZGFAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242 NWRzaTg2LmMgfCA2OTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCA3MDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5kZXgg M2I5OWQ1YS4uODE1MzE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMTA4LDYgKzEwOCwx NSBAQCBjb25maWcgRFJNX1RJX1RGUDQxMAogCS0tLWhlbHAtLS0KIAkgIFRleGFzIEluc3RydW1l bnRzIFRGUDQxMCBEVkkvSERNSSBUcmFuc21pdHRlciBkcml2ZXIKIAorY29uZmlnIERSTV9USV9T TjY1RFNJODYKKwl0cmlzdGF0ZSAiVEkgU042NURTSTg2IERTSSB0byBlRFAgYnJpZGdlIgorCWRl cGVuZHMgb24gT0YKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgUkVHTUFQX0kyQwor CXNlbGVjdCBEUk1fUEFORUwKKwktLS1oZWxwLS0tCisJICBUZXhhcyBJbnN0cnVtZW50cyBTTjY1 RFNJODYgRFNJIHRvIGVEUCBCcmlkZ2UgZHJpdmVyCisKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9hbmFsb2dpeC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvYWR2NzUxMS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKaW5kZXggMzczZWIyOC4u YTdjYTAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCkBAIC0xMSw1ICsxMSw2IEBAIG9iai0k KENPTkZJR19EUk1fU0lJOTIzNCkgKz0gc2lpOTIzNC5vCiBvYmotJChDT05GSUdfRFJNX1RPU0hJ QkFfVEMzNTg3NjcpICs9IHRjMzU4NzY3Lm8KIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFAp ICs9IGFuYWxvZ2l4Lwogb2JqLSQoQ09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8K K29iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2KSArPSB0aS1zbjY1ZHNpODYubwogb2JqLSQo Q09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vCiBvYmoteSArPSBzeW5vcHN5cy8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmExOWM0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jCkBAIC0wLDAgKzEsNjkxIEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgor CisvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBTTl9ERVZJ Q0VfUkVWX1JFRwkJCTB4MDgKKyNkZWZpbmUgU05fSFBEX0RJU0FCTEVfUkVHCQkJMHg1QworI2Rl ZmluZSBTTl9SRUZDTEtfRlJFUV9SRUcJCQkweDBBCisjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJ CQkweDEwCisjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHCQkJMHgxMgorI2RlZmluZSBTTl9F TkhfRlJBTUVfUkVHCQkJMHg1QQorI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKKyNk ZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJCTB4OTQKKyNkZWZpbmUgU05fUExMX0VOQUJM RV9SRUcJCQkweDBECisjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcJCQkweDk1CisjZGVm aW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2NAorI2RlZmluZSBTTl9BVVhfQUREUl8xOV8xNl9S RUcJCQkweDc0CisjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJMHg3NQorI2RlZmluZSBT Tl9BVVhfQUREUl83XzBfUkVHCQkJMHg3NgorI2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4 NzcKKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3OAorI2RlZmluZSBTTl9NTF9UWF9NT0RF X1JFRwkJCTB4OTYKKy8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZp bmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHCTB4MjAKKyNkZWZpbmUgU05fQ0hB X1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVHCTB4MjQKKyNkZWZpbmUgU05fQ0hBX0hTWU5D X1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQworI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lE VEhfSElHSF9SRUcJMHgyRAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JF RwkweDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCisj ZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4MzQKKyNkZWZpbmUgU05f Q0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2CisjZGVmaW5lIFNOX0NIQV9IT1JJWk9O VEFMX0ZST05UX1BPUkNIX1JFRwkweDM4CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9Q T1JDSF9SRUcJCTB4M0EKKyNkZWZpbmUgU05fREFUQV9GT1JNQVRfUkVHCQkJMHg1QgorCisjZGVm aW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisKKy8qIGZ1ZGdlIGZhY3RvciByZXF1aXJlZCB0 byBhY2NvdW50IGZvciA4Yi8xMGIgZW5jb2RpbmcgKi8KKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX05V TQkxMAorI2RlZmluZSBEUF9DTEtfRlVER0VfREVOCTgKKworI2RlZmluZSBEUFBMTF9DTEtfU1JD X1JFRkNMSwkwCisjZGVmaW5lIERQUExMX0NMS19TUkNfRFNJQ0xLCTEKKworI2RlZmluZSBTTl9E U0lBX1JFRkNMS19PRkZTRVQJMQorI2RlZmluZSBTTl9EU0lBX0xBTkVfT0ZGU0VUCTMKKyNkZWZp bmUgU05fRFBfTEFORV9PRkZTRVQJNAorI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfT0ZGU0VUCTUK KyNkZWZpbmUgU05fU1lOQ19QT0xBUklUWV9PRkZTRVQJNworCisjZGVmaW5lIFNOX0VOQUJMRV9W SURfU1RSRUFNX0JJVAlCSVQoMykKKyNkZWZpbmUgU05fRFNJQV9OVU1fTEFORVNfQklUUwkJKEJJ VCg0KSB8IEJJVCgzKSkKKyNkZWZpbmUgU05fRFBfTlVNX0xBTkVTX0JJVFMJCShCSVQoNSkgfCBC SVQoNCkpCisjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9CSVRTCQkoQklUKDcpIHwgQklUKDYpIHwg QklUKDUpKQorI2RlZmluZSBTTl9IUERfRElTQUJMRV9CSVQJCUJJVCgwKQorCisjZGVmaW5lIFNO X1JFR1VMQVRPUl9TVVBQTFlfTlVNCQk0CisKK3N0cnVjdCB0aV9zbl9icmlkZ2UgeworCXN0cnVj dCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOworCXN0cnVjdCBkcm1f YnJpZGdlCQlicmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0b3IJCWNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUJCSpob3N0X25vZGU7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZQkJKmRz aTsKKwlzdHJ1Y3QgY2xrCQkJKnJlZmNsazsKKwlzdHJ1Y3QgZHJtX3BhbmVsCQkqcGFuZWw7CisJ c3RydWN0IGdwaW9fZGVzYwkJKmVuYWJsZV9ncGlvOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19k YXRhCXN1cHBsaWVzW1NOX1JFR1VMQVRPUl9TVVBQTFlfTlVNXTsKKwlzdHJ1Y3QgaTJjX2FkYXB0 ZXIJCSpkZGM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSB0aV9zbl9i cmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7CisJeyAucmFuZ2VfbWluID0gMCwgLnJhbmdlX21h eCA9IDB4RkYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJs ZSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7CisJLnllc19yYW5nZXMgPSB0aV9zbl9i cmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHRpX3Nu X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdt YXBfY29uZmlnIHRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgs CisJLnZhbF9iaXRzID0gOCwKKwkudm9sYXRpbGVfdGFibGUgPSAmdGlfc25fYnJpZGdlX3ZvbGF0 aWxlX3RhYmxlLAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwKK307CisKK3N0YXRpYyB2 b2lkIHRpX3NuX2JyaWRnZV93cml0ZV91MTYoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEsCisJ CQkJICAgdW5zaWduZWQgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgcmVnLCB2YWwgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg cmVnICsgMSwgdmFsID4+IDgpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpX3Nu X2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHJl Z3VsYXRvcl9idWxrX2VuYWJsZShTTl9SRUdVTEFUT1JfU1VQUExZX05VTSwgcGRhdGEtPnN1cHBs aWVzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGll cyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlncGlvZF9zZXRfdmFsdWUocGRh dGEtPmVuYWJsZV9ncGlvLCAxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19t YXliZV91bnVzZWQgdGlfc25fYnJpZGdlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorewor CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50 IHJldDsKKworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dwaW8sIDApOworCisJcmV0 ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShTTl9SRUdVTEFUT1JfU1VQUExZX05VTSwgcGRhdGEt PnN1cHBsaWVzKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHN1 cHBsaWVzICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkZXZfcG1fb3BzIHRpX3NuX2JyaWRnZV9wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1f T1BTKHRpX3NuX2JyaWRnZV9zdXNwZW5kLCB0aV9zbl9icmlkZ2VfcmVzdW1lLCBOVUxMKQorfTsK KworLyogQ29ubmVjdG9yIGZ1bmNzICovCitzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqCitj b25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0aV9zbl9icmlkZ2Us IGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKKwlz dHJ1Y3QgZWRpZCAqZWRpZDsKKwl1MzIgbnVtX21vZGVzOworCisJaWYgKHBkYXRhLT5wYW5lbCkg eworCQlEUk1fREVCVUdfS01TKCJnZXQgbW9kZSBmcm9tIGNvbm5lY3RlZCBkcm1fcGFuZWxcbiIp OworCQlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2RlcyhwZGF0YS0+cGFuZWwpOworCX0KKworCWlm ICghcGRhdGEtPmRkYykKKwkJcmV0dXJuIDA7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRh LT5kZXYpOworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBwZGF0YS0+ZGRjKTsKKwlw bV9ydW50aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIDA7 CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBl ZGlkKTsKKwludW1fbW9kZXMgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsK KwlrZnJlZShlZGlkKTsKKworCXJldHVybiBudW1fbW9kZXM7Cit9CisKK3N0YXRpYyBlbnVtIGRy bV9tb2RlX3N0YXR1cwordGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCS8qIG1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAg ZnBzICovCisJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQorCQlyZXR1cm4gTU9ERV9DTE9DS19I SUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJ LmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3Zh bGlkID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAorfTsKKworc3RhdGljIGVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IHRp X3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7 CisKKwkvKioKKwkgKiBUT0RPOiBDdXJyZW50bHkgaWYgZHJtX3BhbmVsIGlzIHByZXNlbnQsIHRo ZW4gYWx3YXlzCisJICogcmV0dXJuIHRoZSBzdGF0dXMgYXMgY29ubmVjdGVkLiBOZWVkIHRvIGFk ZCBzdXBwb3J0IHRvIGRldGVjdAorCSAqIGRldmljZSBzdGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBs dWdnYWJsZSkgc2NlbmFyaW9zLgorCSAqLworCWlmIChwZGF0YS0+cGFuZWwpCisJCXJldHVybiBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlCisJCXJldHVybiBjb25uZWN0b3Jfc3Rh dHVzX3Vua25vd247Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5j cyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzID0geworCS5maWxsX21vZGVzID0gZHJtX2hl bHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSB0aV9zbl9icmlk Z2VfY29ubmVjdG9yX2RldGVjdCwKKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwK KwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19k dXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0 YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRn ZV90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4g Y29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKK30KKwor c3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCBjaGFyICogY29uc3QgdGlf c25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0geworCQkidmNjYSIsICJ2Y2MiLCAidmNjaW8iLCAi dnBsbCIsCisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBTTl9SRUdVTEFUT1JfU1VQUExZX05VTTsg aSsrKQorCQlwZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdGlfc25fYnJpZGdlX3N1cHBseV9u YW1lc1tpXTsKKworCXJldHVybiBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LCBT Tl9SRUdVTEFUT1JfU1VQUExZX05VTSwKKwkJCQkgICAgICAgcGRhdGEtPnN1cHBsaWVzKTsKK30K Kworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90 b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2Rldmlj ZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCisJCQkJCQkgICAuY2hhbm5l bCA9IDAsCisJCQkJCQkgICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCXJldCA9IGRybV9j b25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZ0aV9z bl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9y IHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBl cl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hl bHBlcl9mdW5jcyk7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+ Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOworCisJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lf aG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0X25vZGUpOworCWlmICghaG9zdCkgeworCQlEUk1fRVJS T1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290 byBlcnJfZHNpX2hvc3Q7CisJfQorCisJZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1 bGwoaG9zdCwgJmluZm8pOworCWlmIChJU19FUlIoZHNpKSkgeworCQlEUk1fRVJST1IoImZhaWxl ZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7CisJCXJldCA9IFBUUl9FUlIoZHNpKTsKKwkJZ290 byBlcnJfZHNpX2hvc3Q7CisJfQorCisJLyogVE9ETzogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5 cyBmb3Igbm93ICovCisJZHNpLT5sYW5lcyA9IDQ7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9G TVRfUkdCODg4OworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJ X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UgfAorCQkJICBNSVBJX0RTSV9NT0RFX0VPVF9QQUNL RVQgfCBNSVBJX0RTSV9NT0RFX1ZJREVPX0hTRTsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChk c2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBkc2kg dG8gaG9zdFxuIik7CisJCWdvdG8gZXJyX2RzaV9hdHRhY2g7CisJfQorCXBkYXRhLT5kc2kgPSBk c2k7CisKKwkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdlICovCisJaWYgKHBkYXRhLT5wYW5lbCkK KwkJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKKwor CXJldHVybiAwOworCitlcnJfZHNpX2F0dGFjaDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rl cihkc2kpOworZXJyX2RzaV9ob3N0OgorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmcGRhdGEtPmNv bm5lY3Rvcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rp c2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdl ICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+ cGFuZWwpIHsKKwkJZHJtX3BhbmVsX2Rpc2FibGUocGRhdGEtPnBhbmVsKTsKKwkJZHJtX3BhbmVs X3VucHJlcGFyZShwZGF0YS0+cGFuZWwpOworCX0KKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFt ICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcs CisJCQkgICBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5r IHRyYWluaW5nIG1vZGUgT0ZGICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01M X1RYX01PREVfUkVHLCAwKTsKKwkvKiBkaXNhYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMCk7Cit9CisKK3N0YXRpYyB1MzIgdGlf c25fYnJpZGdlX2dldF9kc2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1 MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9raHo7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRf bW9kZTsKKworCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNsb2NrICoKKwkJCW1pcGlfZHNpX3BpeGVs X2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJlcV9raHogPSBiaXRf cmF0ZV9raHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKKworCXJldHVybiBjbGtfZnJlcV9r aHo7Cit9CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGlu IGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25f YnJpZGdlX3JlZmNsa19sdXRbXSA9IHsKKwkxMjAwMDAwMCwKKwkxOTIwMDAwMCwKKwkyNjAwMDAw MCwKKwkyNzAwMDAwMCwKKwkzODQwMDAwMCwKK307CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBw b3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIERBQ1AvTiBwaW4gKi8K K3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX2RzaWNsa19sdXRbXSA9IHsKKwk0NjgwMDAw MDAsCisJMzg0MDAwMDAwLAorCTQxNjAwMDAwMCwKKwk0ODYwMDAwMDAsCisJNDYwODAwMDAwLAor fTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEpCit7CisJaW50IGk7CisJdTggcmVmY2xrX3NyYzsKKwl1MzIgcmVmY2xrX3Jh dGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0OworCXNpemVfdCByZWZjbGtfbHV0X3NpemU7CisK KwlpZiAocGRhdGEtPnJlZmNsaykgeworCQlyZWZjbGtfc3JjID0gRFBQTExfQ0xLX1NSQ19SRUZD TEs7CisJCXJlZmNsa19yYXRlID0gY2xrX2dldF9yYXRlKHBkYXRhLT5yZWZjbGspOworCQlyZWZj bGtfbHV0ID0gdGlfc25fYnJpZGdlX3JlZmNsa19sdXQ7CisJCXJlZmNsa19sdXRfc2l6ZSA9IEFS UkFZX1NJWkUodGlfc25fYnJpZGdlX3JlZmNsa19sdXQpOworCQljbGtfcHJlcGFyZV9lbmFibGUo cGRhdGEtPnJlZmNsayk7CisJfSBlbHNlIHsKKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19TUkNf RFNJQ0xLOworCQlyZWZjbGtfcmF0ZSA9IHRpX3NuX2JyaWRnZV9nZXRfZHNpX2ZyZXEocGRhdGEp ICogMTAwMDsKKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0OworCQlyZWZj bGtfbHV0X3NpemUgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0KTsKKwl9CisK KwkvKiBmb3IgaSBlcXVhbHMgdG8gcmVmY2xrX2x1dF9zaXplIG1lYW5zIGRlZmF1bHQgZnJlcXVl bmN5ICovCisJZm9yIChpID0gMDsgaSA8IHJlZmNsa19sdXRfc2l6ZTsgaSsrKQorCQlpZiAocmVm Y2xrX2x1dFtpXSA9PSByZWZjbGtfcmF0ZSkKKwkJCWJyZWFrOworCisJcmVnbWFwX3dyaXRlKHBk YXRhLT5yZWdtYXAsIFNOX1JFRkNMS19GUkVRX1JFRywKKwkJICAgICAocmVmY2xrX3NyYyB8IChp IDw8IFNOX0RTSUFfUkVGQ0xLX09GRlNFVCkpKTsKK30KKworLyoqCisgKiBMVVQgaW5kZXggY29y cmVzcG9uZHMgdG8gcmVnaXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQgdmFsdWVzIGNvcnJlc3BvbmRz IHRvIGRwIGRhdGEgcmF0ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBicmlkZ2UgaW4gTWJwcyB1bml0 LgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1 dFtdID0geworCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKK307 CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2ZyZXFf bWh6LCBkcF9yYXRlX21oejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+c3RhdGUt PmFkanVzdGVkX21vZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJYml0X3Jh dGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9yYXRlX21o eiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVtZW50IGlu IHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9EU0lfQ0xL X0ZSRVFfTUhaIC8gNSkgKworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19GUkVRX01I WikgLyA1KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NM S19GUkVRX1JFRywgdmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9yYXRlX21o eiA9ICgoYml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05V TSkgLworCQkJCQkJCURQX0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0KSAtIDE7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRn ZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6KQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBk YXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJCSAgIFNO X0RQX0RBVEFfUkFURV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOworfQorCitz dGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRh dGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwl1OCBoc3lu Y19wb2xhcml0eSA9IDAsIHZzeW5jX3BvbGFyaXR5ID0gMDsKKworCWlmIChtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQloc3luY19wb2xhcml0eSA9IDB4MTsKKwlpZiAobW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJdnN5bmNfcG9sYXJpdHkgPSAweDE7 CisKKwl0aV9zbl9icmlkZ2Vfd3JpdGVfdTE2KHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVO R1RIX0xPV19SRUcsCisJCQkgICAgICAgbW9kZS0+aGRpc3BsYXkpOworCXRpX3NuX2JyaWRnZV93 cml0ZV91MTYocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKKwkJ CSAgICAgICBtb2RlLT52ZGlzcGxheSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAorCQkgICAgIChtb2RlLT5oc3luY19lbmQg LSBtb2RlLT5oc3luY19zdGFydCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAorCQkgICAgICgoKG1vZGUtPmhz eW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSA+PiA4KSAmIDB4N0YpCisJCSAgICAgfCAoaHN5 bmNfcG9sYXJpdHkgPDwgU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpKTsKKwlyZWdtYXBfd3JpdGUo cGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJCSAgICAg KG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCisJ CSAgICAoKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4gOCkgJiAweDdG KQorCQkgICAgfCAodnN5bmNfcG9sYXJpdHkgPDwgU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpKTsK KworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BP UkNIX1JFRywKKwkJICAgICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSAmIDB4RkYp OworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JD SF9SRUcsCisJCSAgICAgKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCkgJiAweEZGKTsK KworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9Q T1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICYg MHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9GUk9O VF9QT1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXkp ICYgMHhGRik7CisKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSBy ZWNvbW1lbmRlZCBieSBzcGVjICovCit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwl1bnNpZ25lZCBpbnQgdmFs OworCisJaWYgKHBkYXRhLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfcHJlcGFyZShwZGF0YS0+cGFu ZWwpOworCQkvKiBpbiBjYXNlIGRybV9wYW5lbCBpcyBjb25uZWN0ZWQgdGhlbiBIUEQgaXMgbm90 IHN1cHBvcnRlZCAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fSFBE X0RJU0FCTEVfUkVHLAorCQkJCSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJU0FCTEVf QklUKTsKKwl9CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZhbCA9ICg0IC0gcGRhdGEt PmRzaS0+bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9iaXRz KHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCisJCQkgICBTTl9EU0lBX05VTV9MQU5F U19CSVRTLCB2YWwpOworCisJLyogRFAgbGFuZSBjb25maWcgKi8KKwl2YWwgPSAocGRhdGEtPmRz aS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKKwlyZWdtYXBfdXBkYXRlX2JpdHMo cGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJR19SRUcsCisJCQkgICBTTl9EUF9OVU1fTEFORVNf QklUUywgdmFsKTsKKworCS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLworCXRp X3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyogZW5hYmxlIERQIFBMTCAq LworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7CisJ dXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkg c3BlYyAqLworCisJLyoqCisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlz cGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBtZXRob2QgaXMgZW5hYmxl ZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBhdXRoZW50 aWNhdGlvbiBtZXRob2QuIFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRoZSBlRFAg cGFuZWwKKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0 cmFpbmluZy4KKwkgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dEQVRB MF9SRUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8x OV8xNl9SRUcsIDB4MDApOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQURE Ul8xNV84X1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9B RERSXzdfMF9SRUcsIDB4MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhf TEVOR1RIX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9D TURfUkVHLCAweDgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxh eSByZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBt b2RlICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAw eDBBKTsKKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8K KworCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25fYnJpZGdlX3NldF92aWRl b190aW1pbmdzKHBkYXRhKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwlyZWdtYXBf dXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKKwkJCSAgIFNOX0VO QUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKKworCWlmIChw ZGF0YS0+cGFuZWwpCisJCWRybV9wYW5lbF9lbmFibGUocGRhdGEtPnBhbmVsKTsKK30KKworc3Rh dGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlk Z2UoYnJpZGdlKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkvKiBj b25maWd1cmUgYnJpZGdlIENMS19TUkMgYW5kIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0 X3JlZmNsayhwZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2Fi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cmVm Y2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7CisKKwlwbV9ydW50 aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9i cmlkZ2VfZnVuY3MgdGlfc25fYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSB0aV9zbl9icmlk Z2VfYXR0YWNoLAorCS5wcmVfZW5hYmxlID0gdGlfc25fYnJpZGdlX3ByZV9lbmFibGUsCisJLmVu YWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlz YWJsZSwKKwkucG9zdF9kaXNhYmxlID0gdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZSwKK307CisK K3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9u b2RlOworCisJcGRhdGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShucCwg MCwgMCk7CisKKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUg ZHNpIGhvc3Qgbm9kZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCwKKwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRjX25vZGU7 CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFw dGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCURSTV9FUlJPUigiZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y dCBJMkNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YSA9IGRldm1fa3phbGxv YygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwKKwkJCSAgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZGF0YS0+cmVn bWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAorCQkJCQkgICAgICZ0aV9zbl9icmlk Z2VfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihwZGF0YS0+cmVnbWFwKSkgeworCQlEUk1f RVJST1IoInJlZ21hcCBpMmMgaW5pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGF0 YS0+cmVnbWFwKTsKKwl9CisKKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRldl9zZXRf ZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKKworCXBkYXRhLT5lbmFibGVfZ3BpbyA9IGRl dm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsICJlbmFibGUiLAorCQkJCQkgICAgR1BJT0RfT1VUX0xP Vyk7CisJaWYgKElTX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pKSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0 YS0+ZW5hYmxlX2dwaW8pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHRpX3NuX2JyaWRn ZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIHBhcnNlIHJlZ3VsYXRvcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9 IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxLCAwLAor CQkJCQkgICZwZGF0YS0+cGFuZWwsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJj b3VsZCBub3QgZmluZCBhbnkgZHJtIHBhbmVsIG5vZGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCXBkYXRhLT5yZWZjbGsgPSBkZXZtX2Nsa19nZXQocGRhdGEtPmRldiwgInJlZmNsayIpOwor CWlmIChJU19FUlIocGRhdGEtPnJlZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+cmVm Y2xrKTsKKwkJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIHJldDsKKwkJRFJN X0RFQlVHX0tNUygicmVmY2xrIG5vdCBmb3VuZFxuIik7CisJCXBkYXRhLT5yZWZjbGsgPSBOVUxM OworCX0KKworCWRkY19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGF0YS0+ZGV2LT5vZl9ub2Rl LCAiZGRjLWkyYy1idXMiLCAwKTsKKwlpZiAoZGRjX25vZGUpIHsKKwkJcGRhdGEtPmRkYyA9IG9m X2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJCW9mX25vZGVfcHV0KGRkY19u b2RlKTsKKwkJaWYgKCFwZGF0YS0+ZGRjKSB7CisJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8g cmVhZCBkZGMgbm9kZVxuIik7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0gZWxz ZSB7CisJCURSTV9ERUJVR19LTVMoIm5vIGRkYyBwcm9wZXJ0eSBmb3VuZFxuIik7CisJfQorCisJ cmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJcG1fcnVudGltZV9lbmFibGUocGRhdGEtPmRldik7CisKKwlpMmNfc2V0 X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7CisKKwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRp X3NuX2JyaWRnZV9mdW5jczsKKwlwZGF0YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5v Zl9ub2RlOworCisJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5icmlkZ2UpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50KQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRk YXRhKGNsaWVudCk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChw ZGF0YS0+aG9zdF9ub2RlKQorCQlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKKworCXBt X3J1bnRpbWVfZGlzYWJsZShwZGF0YS0+ZGV2KTsKKworCWlmIChwZGF0YS0+ZHNpKSB7CisJCW1p cGlfZHNpX2RldGFjaChwZGF0YS0+ZHNpKTsKKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIo cGRhdGEtPmRzaSk7CisJfQorCisJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOwor CWkyY19wdXRfYWRhcHRlcihwZGF0YS0+ZGRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg c3RydWN0IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7CisJeyAidGksc242NWRz aTg2IiwgMH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRn ZV9pZCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9t YXRjaF90YWJsZVtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7fSwK K307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUpOwor CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKKwkuZHJp dmVyID0geworCQkubmFtZSA9ICJ0aV9zbjY1ZHNpODYiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0 aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUsCisJCS5wbSA9ICZ0aV9zbl9icmlkZ2VfcG1fb3BzLAor CX0sCisJLnByb2JlID0gdGlfc25fYnJpZGdlX3Byb2JlLAorCS5yZW1vdmUgPSB0aV9zbl9icmlk Z2VfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHRpX3NuX2JyaWRnZV9pZCwKK307CisKK21vZHVsZV9p MmNfZHJpdmVyKHRpX3NuX2JyaWRnZV9kcml2ZXIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzbjY1 ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIg b2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2 ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K