From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v13 2/3] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 27 Jun 2018 15:27:34 +0530 Message-ID: <20180627095735.24517-3-spanda@codeaurora.org> References: <20180627095735.24517-1-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180627095735.24517-1-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: 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 bHV0IHNpemUgaW5zdGVhZCBvZiBnbG9iYWwgbWFjcm8gKFNlYW4gUGF1bCkuCgpDaGFuZ2VzIGlu IHYxMDoKIC0gVXNlIHJlZmNsayB0byBkZXRlcm1pbmUgaWYgY29udGludW91cyBkc2kgY2xvY2sg aXMgbmVlZGVkIG9yIG5vdC4KCkNoYW5nZXMgaW4gdjExOgogLSBSZWFkIERQUExMX1NSQyByZWdp c3RlciB0byBkZXRlcm1pbmUgY29udGludW91cyBjbG9jayBpbnN0ZWFkIG9mCiAgIHVzaW5nIHJl ZmNsayBoYW5kbGUgKFN0ZXBoZW4gQm95ZCkuCgpDaGFuZ2VzIGluIHYxMjoKIC0gRXhwbGFpbiBp biBjb21tZW50IGFzIGluIHdoeSBkc2kgZGV2IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluCiAgIGJy aWRnZV9hdHRhY2ggKEFuZHJ6ZWogSGFqZGEpLgogLSBNb3ZlIEhQRCBkaXNhYmxlIHRvIGJyaWRn ZV9wcmVfZW5hYmxlIChBbmRyemVqIEhhamRhKS4KIC0gTWFrZSBwYW5lbC9EREMgZXhjbHVzaXZl IHVudGlsIEhQRCBzdXBwb3J0IGlzIGFkZGVkIChBbmRyemVqIEhhamRhKS4KClNpZ25lZC1vZmYt Ynk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1 ZHNpODYuYyB8IDcwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVz IGNoYW5nZWQsIDcxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCAz Yjk5ZDVhMDZjMTYuLjgxNTMxNTBhY2QzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMTA4 LDYgKzEwOCwxNSBAQCBjb25maWcgRFJNX1RJX1RGUDQxMAogCS0tLWhlbHAtLS0KIAkgIFRleGFz IEluc3RydW1lbnRzIFRGUDQxMCBEVkkvSERNSSBUcmFuc21pdHRlciBkcml2ZXIKIAorY29uZmln IERSTV9USV9TTjY1RFNJODYKKwl0cmlzdGF0ZSAiVEkgU042NURTSTg2IERTSSB0byBlRFAgYnJp ZGdlIgorCWRlcGVuZHMgb24gT0YKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgUkVH TUFQX0kyQworCXNlbGVjdCBEUk1fUEFORUwKKwktLS1oZWxwLS0tCisJICBUZXhhcyBJbnN0cnVt ZW50cyBTTjY1RFNJODYgRFNJIHRvIGVEUCBCcmlkZ2UgZHJpdmVyCisKIHNvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYWR2NzUxMS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKaW5kZXgg MzczZWIyOGYzMWVkLi5hN2NhMDAwZjYwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAt MTEsNSArMTEsNiBAQCBvYmotJChDT05GSUdfRFJNX1NJSTkyMzQpICs9IHNpaTkyMzQubwogb2Jq LSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSArPSB0YzM1ODc2Ny5vCiBvYmotJChDT05G SUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KIG9iai0kKENPTkZJR19EUk1fSTJDX0FE Vjc1MTEpICs9IGFkdjc1MTEvCitvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGkt c242NWRzaTg2Lm8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0MTAubwog b2JqLXkgKz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEyZDVmOGMyYmM1MwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKQEAgLTAs MCArMSw3MDkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICog Q29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisjaW5jbHVk ZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8 bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMg cmVnaXN0ZXJzICovCisjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAorI2RlZmluZSBT Tl9IUERfRElTQUJMRV9SRUcJCQkweDVDCisjZGVmaW5lIFNOX0RQUExMX1NSQ19SRUcJCQkweDBB CisjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCisjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZS RVFfUkVHCQkJMHgxMgorI2RlZmluZSBTTl9FTkhfRlJBTUVfUkVHCQkJMHg1QQorI2RlZmluZSBT Tl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKKyNkZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJ CTB4OTQKKyNkZWZpbmUgU05fUExMX0VOQUJMRV9SRUcJCQkweDBECisjZGVmaW5lIFNOX1NDUkFN QkxFX0NPTkZJR19SRUcJCQkweDk1CisjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2NAor I2RlZmluZSBTTl9BVVhfQUREUl8xOV8xNl9SRUcJCQkweDc0CisjZGVmaW5lIFNOX0FVWF9BRERS XzE1XzhfUkVHCQkJMHg3NQorI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVHCQkJMHg3NgorI2Rl ZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJ MHg3OAorI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJCTB4OTYKKy8qIHZpZGVvIGNvbmZpZyBz cGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9M T1dfUkVHCTB4MjAKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVH CTB4MjQKKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQworI2Rl ZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcJMHgyRAorI2RlZmluZSBTTl9D SEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19Q VUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCisjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tf UE9SQ0hfUkVHCTB4MzQKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkw eDM2CisjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRwkweDM4CisjZGVm aW5lIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcJCTB4M0EKKyNkZWZpbmUgU05fREFU QV9GT1JNQVRfUkVHCQkJMHg1QgorCisjZGVmaW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisK Ky8qIGZ1ZGdlIGZhY3RvciByZXF1aXJlZCB0byBhY2NvdW50IGZvciA4Yi8xMGIgZW5jb2Rpbmcg Ki8KKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX05VTQkxMAorI2RlZmluZSBEUF9DTEtfRlVER0VfREVO CTgKKworI2RlZmluZSBEUFBMTF9DTEtfU1JDX1JFRkNMSwkwCisjZGVmaW5lIERQUExMX0NMS19T UkNfRFNJQ0xLCTEKKworI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9PRkZTRVQJMQorI2RlZmluZSBT Tl9EU0lBX0xBTkVfT0ZGU0VUCTMKKyNkZWZpbmUgU05fRFBfTEFORV9PRkZTRVQJNAorI2RlZmlu ZSBTTl9EUF9EQVRBX1JBVEVfT0ZGU0VUCTUKKyNkZWZpbmUgU05fU1lOQ19QT0xBUklUWV9PRkZT RVQJNworCisjZGVmaW5lIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVAlCSVQoMykKKyNkZWZpbmUg U05fUkVGQ0xLX0ZSRVFfQklUUwkJR0VOTUFTSygzLCAxKQorI2RlZmluZSBTTl9EU0lBX05VTV9M QU5FU19CSVRTCQlHRU5NQVNLKDQsIDMpCisjZGVmaW5lIFNOX0RQX05VTV9MQU5FU19CSVRTCQlH RU5NQVNLKDUsIDQpCisjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9CSVRTCQlHRU5NQVNLKDcsIDUp CisjZGVmaW5lIFNOX0hQRF9ESVNBQkxFX0JJVAkJQklUKDApCisKKyNkZWZpbmUgU05fUkVHVUxB VE9SX1NVUFBMWV9OVU0JCTQKKworc3RydWN0IHRpX3NuX2JyaWRnZSB7CisJc3RydWN0IGRldmlj ZQkJCSpkZXY7CisJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7CisJc3RydWN0IGRybV9icmlkZ2UJ CWJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvcgkJY29ubmVjdG9yOworCXN0cnVjdCBkZXZp Y2Vfbm9kZQkJKmhvc3Rfbm9kZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlCQkqZHNpOworCXN0 cnVjdCBjbGsJCQkqcmVmY2xrOworCXN0cnVjdCBkcm1fcGFuZWwJCSpwYW5lbDsKKwlzdHJ1Y3Qg Z3Bpb19kZXNjCQkqZW5hYmxlX2dwaW87CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEJc3Vw cGxpZXNbU05fUkVHVUxBVE9SX1NVUFBMWV9OVU1dOworCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmRk YzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRnZV92 b2xhdGlsZV9yYW5nZXNbXSA9IHsKKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0gMHhG RiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRpX3Nu X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsKKwkueWVzX3JhbmdlcyA9IHRpX3NuX2JyaWRnZV92 b2xhdGlsZV9yYW5nZXMsCisJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdl X3ZvbGF0aWxlX3JhbmdlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25m aWcgdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFs X2JpdHMgPSA4LAorCS52b2xhdGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFi bGUsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAorfTsKKworc3RhdGljIHZvaWQgdGlf c25fYnJpZGdlX3dyaXRlX3UxNihzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwKKwkJCQkgICB1 bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCByZWcsIHZhbCAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCByZWcgKyAx LCB2YWwgPj4gOCk7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlfc25fYnJpZGdl X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVndWxhdG9y X2J1bGtfZW5hYmxlKFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNLCBwZGF0YS0+c3VwcGxpZXMpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5h YmxlX2dwaW8sIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCB0aV9zbl9icmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0Owor CisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMCk7CisKKwlyZXQgPSByZWd1 bGF0b3JfYnVsa19kaXNhYmxlKFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNLCBwZGF0YS0+c3VwcGxp ZXMpOworCWlmIChyZXQpCisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXMg JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRl dl9wbV9vcHMgdGlfc25fYnJpZGdlX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFModGlf c25fYnJpZGdlX3N1c3BlbmQsIHRpX3NuX2JyaWRnZV9yZXN1bWUsIE5VTEwpCit9OworCisvKiBD b25uZWN0b3IgZnVuY3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICoKK2Nvbm5lY3Rv cl90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHRpX3NuX2JyaWRnZSwgY29ubmVj dG9yKTsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2Rlcyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCXN0cnVjdCBl ZGlkICplZGlkOworCXUzMiBudW1fbW9kZXM7CisKKwlpZiAocGRhdGEtPnBhbmVsKSB7CisJCURS TV9ERUJVR19LTVMoImdldCBtb2RlIGZyb20gY29ubmVjdGVkIGRybV9wYW5lbFxuIik7CisJCXJl dHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKHBkYXRhLT5wYW5lbCk7CisJfQorCisJcG1fcnVudGlt ZV9nZXRfc3luYyhwZGF0YS0+ZGV2KTsKKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rvciwg cGRhdGEtPmRkYyk7CisJcG1fcnVudGltZV9wdXQocGRhdGEtPmRldik7CisJaWYgKCFlZGlkKQor CQlyZXR1cm4gMDsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShj b25uZWN0b3IsIGVkaWQpOworCW51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0 b3IsIGVkaWQpOworCWtmcmVlKGVkaWQpOworCisJcmV0dXJuIG51bV9tb2RlczsKK30KKworc3Rh dGljIGVudW0gZHJtX21vZGVfc3RhdHVzCit0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFs aWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyogbWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBp cyA0SyBhdCA2MCBmcHMgKi8KKwlpZiAobW9kZS0+Y2xvY2sgPiA1OTQwMDApCisJCXJldHVybiBN T0RFX0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBk cm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMs CisJLm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQsCit9Owor CitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwordGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sK KwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uo Y29ubmVjdG9yKTsKKworCS8qKgorCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMg cHJlc2VudCwgdGhlbiBhbHdheXMKKwkgKiByZXR1cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQu IE5lZWQgdG8gYWRkIHN1cHBvcnQgdG8gZGV0ZWN0CisJICogZGV2aWNlIHN0YXRlIGZvciBubyBw YW5lbChob3QgcGx1Z2dhYmxlKSBzY2VuYXJpb3MuCisJICovCisJaWYgKHBkYXRhLT5wYW5lbCkK KwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNv bm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9k ZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9 IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0LAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rv cl9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwK KwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHRpX3NuX2Jy aWRnZSAqYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlk Z2UpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IGNoYXIg KiBjb25zdCB0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzW10gPSB7CisJCSJ2Y2NhIiwgInZjYyIs ICJ2Y2NpbyIsICJ2cGxsIiwKKwl9OworCisJZm9yIChpID0gMDsgaSA8IFNOX1JFR1VMQVRPUl9T VVBQTFlfTlVNOyBpKyspCisJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0aV9zbl9icmlk Z2Vfc3VwcGx5X25hbWVzW2ldOworCisJcmV0dXJuIGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KHBk YXRhLT5kZXYsIFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNLAorCQkJCSAgICAgICBwZGF0YS0+c3Vw cGxpZXMpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKK3sKKwlpbnQgcmV0LCB2YWw7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCWNvbnN0IHN0cnVj dCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0geyAudHlwZSA9ICJ0aV9zbl9icmlkZ2UiLAor CQkJCQkJICAgLmNoYW5uZWwgPSAwLAorCQkJCQkJICAgLm5vZGUgPSBOVUxMLAorCQkJCQkJIH07 CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVj dG9yLAorCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVf Q09OTkVDVE9SX2VEUCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAmdGlfc25fYnJp ZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hf ZW5jb2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKKworCS8qCisJICog VE9ETzogaWRlYWxseSBmaW5kaW5nIGhvc3QgcmVzb3VyY2UgYW5kIGRzaSBkZXYgcmVnaXN0cmF0 aW9uIG5lZWRzCisJICogdG8gYmUgZG9uZSBpbiBicmlkZ2UgcHJvYmUuIEJ1dCBzb21lIGV4aXN0 aW5nIERTSSBob3N0IGRyaXZlcnMgd2lsbAorCSAqIHdhaXQgZm9yIGFueSBvZiB0aGUgZHJtX2Jy aWRnZS9kcm1fcGFuZWwgdG8gZ2V0IGFkZGVkIHRvIHRoZSBnbG9iYWwKKwkgKiBicmlkZ2UvcGFu ZWwgbGlzdCwgYmVmb3JlIGNvbXBsZXRpbmcgdGhlaXIgcHJvYmUuIFNvIGlmIHdlIGRvIHRoZQor CSAqIGRzaSBkZXYgcmVnaXN0cmF0aW9uIHBhcnQgaW4gYnJpZGdlIHByb2JlLCBiZWZvcmUgcG9w dWxhdGluZyBpbgorCSAqIHRoZSBnbG9iYWwgYnJpZGdlIGxpc3QsIHRoZW4gaXQgd2lsbCBjYXVz ZSBkZWFkbG9jayBhcyBkc2kgaG9zdCBwcm9iZQorCSAqIHdpbGwgbmV2ZXIgY29tcGxldGUsIG5l aXRoZXIgb3VyIGJyaWRnZSBwcm9iZS4gU28ga2VlcGluZyBpdCBoZXJlCisJICogd2lsbCBzYXRp c2Z5IG1vc3Qgb2YgdGhlIGV4aXN0aW5nIGhvc3QgZHJpdmVycy4gT25jZSB0aGUgaG9zdCBkcml2 ZXIKKwkgKiBpcyBmaXhlZCB3ZSBjYW4gbW92ZSB0aGUgYmVsb3cgY29kZSB0byBicmlkZ2UgcHJv YmUgc2FmZWx5LgorCSAqLworCWhvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShw ZGF0YS0+aG9zdF9ub2RlKTsKKwlpZiAoIWhvc3QpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g ZmluZCBkc2kgaG9zdFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RzaV9ob3N0 OworCX0KKworCWRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZv KTsKKwlpZiAoSVNfRVJSKGRzaSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRz aSBkZXZpY2VcbiIpOworCQlyZXQgPSBQVFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2RzaV9ob3N0 OworCX0KKworCS8qIFRPRE86IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLwor CWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlk c2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURF T19TWU5DX1BVTFNFIHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lf TU9ERV9WSURFT19IU0U7CisKKwkvKiBjaGVjayBpZiBjb250aW51b3VzIGRzaSBjbG9jayBpcyBy ZXF1aXJlZCBvciBub3QgKi8KKwlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOworCXJl Z21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNOX0RQUExMX1NSQ19SRUcsICZ2YWwpOworCXBtX3J1 bnRpbWVfcHV0KHBkYXRhLT5kZXYpOworCWlmICghKHZhbCAmIERQUExMX0NMS19TUkNfRFNJQ0xL KSkKKwkJZHNpLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTOwor CisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBob3N0XG4iKTsKKwkJZ290byBlcnJfZHNpX2F0 dGFjaDsKKwl9CisJcGRhdGEtPmRzaSA9IGRzaTsKKworCS8qIGF0dGFjaCBwYW5lbCB0byBicmlk Z2UgKi8KKwlpZiAocGRhdGEtPnBhbmVsKQorCQlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5l bCwgJnBkYXRhLT5jb25uZWN0b3IpOworCisJcmV0dXJuIDA7CisKK2Vycl9kc2lfYXR0YWNoOgor CW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRzaSk7CitlcnJfZHNpX2hvc3Q6CisJZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwKCZwZGF0YS0+Y29ubmVjdG9yKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRn ZShicmlkZ2UpOworCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJZHJtX3BhbmVsX2Rpc2FibGUocGRh dGEtPnBhbmVsKTsKKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0 ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVf VklEX1NUUkVBTV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZG ICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsK KwkvKiBkaXNhYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9Q TExfRU5BQkxFX1JFRywgMCk7CisKKwlpZiAocGRhdGEtPnBhbmVsKQorCQlkcm1fcGFuZWxfdW5w cmVwYXJlKHBkYXRhLT5wYW5lbCk7Cit9CisKK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9k c2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6 LCBjbGtfZnJlcV9raHo7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRh dGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKworCWJpdF9y YXRlX2toeiA9IG1vZGUtPmNsb2NrICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAo cGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJlcV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRh dGEtPmRzaS0+bGFuZXMgKiAyKTsKKworCXJldHVybiBjbGtfZnJlcV9raHo7Cit9CisKKy8qIGNs ayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBm cm9tIFJFRkNMSyBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19s dXRbXSA9IHsKKwkxMjAwMDAwMCwKKwkxOTIwMDAwMCwKKwkyNjAwMDAwMCwKKwkyNzAwMDAwMCwK KwkzODQwMDAwMCwKK307CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdl IGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIERBQ1AvTiBwaW4gKi8KK3N0YXRpYyBjb25zdCB1 MzIgdGlfc25fYnJpZGdlX2RzaWNsa19sdXRbXSA9IHsKKwk0NjgwMDAwMDAsCisJMzg0MDAwMDAw LAorCTQxNjAwMDAwMCwKKwk0ODYwMDAwMDAsCisJNDYwODAwMDAwLAorfTsKKworc3RhdGljIHZv aWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGtfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0 YSkKK3sKKwlpbnQgaTsKKwl1MzIgcmVmY2xrX3JhdGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0 OworCXNpemVfdCByZWZjbGtfbHV0X3NpemU7CisKKwlpZiAocGRhdGEtPnJlZmNsaykgeworCQly ZWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0YS0+cmVmY2xrKTsKKwkJcmVmY2xrX2x1dCA9 IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0OworCQlyZWZjbGtfbHV0X3NpemUgPSBBUlJBWV9TSVpF KHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0KTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5y ZWZjbGspOworCX0gZWxzZSB7CisJCXJlZmNsa19yYXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lf ZnJlcShwZGF0YSkgKiAxMDAwOworCQlyZWZjbGtfbHV0ID0gdGlfc25fYnJpZGdlX2RzaWNsa19s dXQ7CisJCXJlZmNsa19sdXRfc2l6ZSA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RzaWNsa19s dXQpOworCX0KKworCS8qIGZvciBpIGVxdWFscyB0byByZWZjbGtfbHV0X3NpemUgbWVhbnMgZGVm YXVsdCBmcmVxdWVuY3kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmVmY2xrX2x1dF9zaXplOyBpKysp CisJCWlmIChyZWZjbGtfbHV0W2ldID09IHJlZmNsa19yYXRlKQorCQkJYnJlYWs7CisKKwlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRFBQTExfU1JDX1JFRywKKwkJCSAgIFNO X1JFRkNMS19GUkVRX0JJVFMsIGkgPDwgU05fUkVGQ0xLX0ZSRVFfT0ZGU0VUKTsKK30KKworLyoq CisgKiBMVVQgaW5kZXggY29ycmVzcG9uZHMgdG8gcmVnaXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQg dmFsdWVzIGNvcnJlc3BvbmRzIHRvIGRwIGRhdGEgcmF0ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBi cmlkZ2UgaW4gTWJwcyB1bml0LgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHRpX3Nu X2JyaWRnZV9kcF9yYXRlX2x1dFtdID0geworCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMy NDAsIDQzMjAsIDU0MDAKK307CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2Rw X3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdF9y YXRlX21oeiwgY2xrX2ZyZXFfbWh6LCBkcF9yYXRlX21oejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBp OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5j b2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJl cXVlbmN5ICovCisJYml0X3JhdGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlw aV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVx X21oeiA9IGJpdF9yYXRlX21oeiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9y IGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJ dmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8gNSkgKworCQkoKChjbGtfZnJlcV9taHogLSBN SU5fRFNJX0NMS19GUkVRX01IWikgLyA1KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+ cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJh dGUgKi8KKwlkcF9yYXRlX21oeiA9ICgoYml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMp ICogRFBfQ0xLX0ZVREdFX05VTSkgLworCQkJCQkJCURQX0NMS19GVURHRV9ERU47CisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0KSAtIDE7IGkrKykK KwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6KQorCQkJYnJl YWs7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09O RklHX1JFRywKKwkJCSAgIFNOX0RQX0RBVEFfUkFURV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFU RV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWlu Z3Moc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0 ZWRfbW9kZTsKKwl1OCBoc3luY19wb2xhcml0eSA9IDAsIHZzeW5jX3BvbGFyaXR5ID0gMDsKKwor CWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQloc3luY19wb2xhcml0 eSA9IEJJVChTTl9TWU5DX1BPTEFSSVRZX09GRlNFVCk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJN X01PREVfRkxBR19QVlNZTkMpCisJCXZzeW5jX3BvbGFyaXR5ID0gQklUKFNOX1NZTkNfUE9MQVJJ VFlfT0ZGU0VUKTsKKworCXRpX3NuX2JyaWRnZV93cml0ZV91MTYocGRhdGEsIFNOX0NIQV9BQ1RJ VkVfTElORV9MRU5HVEhfTE9XX1JFRywKKwkJCSAgICAgICBtb2RlLT5oZGlzcGxheSk7CisJdGlf c25fYnJpZGdlX3dyaXRlX3UxNihwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9M T1dfUkVHLAorCQkJICAgICAgIG1vZGUtPnZkaXNwbGF5KTsKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJCSAgICAgKG1vZGUt PmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCSAgICAg KCgobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpID4+IDgpICYgMHg3RikgfAor CQkgICAgIGhzeW5jX3BvbGFyaXR5KTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05f Q0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJCSAgICAgKG1vZGUtPnZzeW5jX2VuZCAt IG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCSAgICAoKChtb2RlLT52c3lu Y19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4gOCkgJiAweDdGKSB8CisJCSAgICB2c3luY19w b2xhcml0eSk7CisKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05U QUxfQkFDS19QT1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2Vu ZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FM X0JBQ0tfUE9SQ0hfUkVHLAorCQkgICAgIChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQp ICYgMHhGRik7CisKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05U QUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkgICAgIChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhk aXNwbGF5KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVS VElDQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkgICAgIChtb2RlLT52c3luY19zdGFydCAtIG1vZGUt PnZkaXNwbGF5KSAmIDB4RkYpOworCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEw bXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9i cmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJdW5zaWdu ZWQgaW50IHZhbDsKKworCWlmIChwZGF0YS0+cGFuZWwpCisJCWRybV9wYW5lbF9wcmVwYXJlKHBk YXRhLT5wYW5lbCk7CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZhbCA9ICg0IC0gcGRh dGEtPmRzaS0+bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9i aXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCisJCQkgICBTTl9EU0lBX05VTV9M QU5FU19CSVRTLCB2YWwpOworCisJLyogRFAgbGFuZSBjb25maWcgKi8KKwl2YWwgPSAocGRhdGEt PmRzaS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKKwlyZWdtYXBfdXBkYXRlX2Jp dHMocGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJR19SRUcsCisJCQkgICBTTl9EUF9OVU1fTEFO RVNfQklUUywgdmFsKTsKKworCS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLwor CXRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyogZW5hYmxlIERQIFBM TCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7 CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQg Ynkgc3BlYyAqLworCisJLyoqCisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1Ig RGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBtZXRob2QgaXMgZW5h YmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBhdXRo ZW50aWNhdGlvbiBtZXRob2QuIFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRoZSBl RFAgcGFuZWwKKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGlu ayB0cmFpbmluZy4KKwkgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dE QVRBMF9SRUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQURE Ul8xOV8xNl9SRUcsIDB4MDApOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhf QUREUl8xNV84X1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FV WF9BRERSXzdfMF9SRUcsIDB4MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9B VVhfTEVOR1RIX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FV WF9DTURfUkVHLCAweDgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBk ZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmlu ZyBtb2RlICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVH LCAweDBBKTsKKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMg Ki8KKworCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25fYnJpZGdlX3NldF92 aWRlb190aW1pbmdzKHBkYXRhKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKKwkJCSAgIFNO X0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKKworCWlm IChwZGF0YS0+cGFuZWwpCisJCWRybV9wYW5lbF9lbmFibGUocGRhdGEtPnBhbmVsKTsKK30KKwor c3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkv KiBjb25maWd1cmUgYnJpZGdlIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsa19m cmVxKHBkYXRhKTsKKworCS8qIGluIGNhc2UgZHJtX3BhbmVsIGlzIGNvbm5lY3RlZCB0aGVuIEhQ RCBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJcmVnbWFwX3VwZGF0 ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0hQRF9ESVNBQkxFX1JFRywKKwkJCQkgICBTTl9IUERf RElTQUJMRV9CSVQsIFNOX0hQRF9ESVNBQkxFX0JJVCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3Nu X2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1 Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsK KworCWlmIChwZGF0YS0+cmVmY2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJl ZmNsayk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgdGlfc25fYnJpZGdlX2Z1bmNzID0geworCS5h dHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAorCS5wcmVfZW5hYmxlID0gdGlfc25fYnJpZGdl X3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUg PSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKKwkucG9zdF9kaXNhYmxlID0gdGlfc25fYnJpZGdlX3Bv c3RfZGlzYWJsZSwKK307CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0 KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGF0YS0+ZGV2LT5vZl9ub2RlOworCisJcGRhdGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dl dF9yZW1vdGVfbm9kZShucCwgMCwgMCk7CisKKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKKwkJ RFJNX0VSUk9SKCJyZW1vdGUgZHNpIGhvc3Qgbm9kZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4g LUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2Vf cHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgY29uc3Qgc3RydWN0IGkyY19kZXZp Y2VfaWQgKmlkKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOworCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqZGRjX25vZGU7CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9u YWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCURSTV9FUlJPUigiZGV2 aWNlIGRvZXNuJ3Qgc3VwcG9ydCBJMkNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlw ZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgdGlfc25fYnJp ZGdlKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAorCQkJ CQkgICAgICZ0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihwZGF0YS0+ cmVnbWFwKSkgeworCQlEUk1fRVJST1IoInJlZ21hcCBpMmMgaW5pdCBmYWlsZWRcbiIpOworCQly ZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKKwl9CisKKwlwZGF0YS0+ZGV2ID0gJmNsaWVu dC0+ZGV2OworCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKKworCXBkYXRh LT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsICJlbmFibGUiLAorCQkJ CQkgICAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pKSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsKKwkJ cmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBkYXRhKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRvcnNcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBkYXRhLT5yZWZjbGsgPSBkZXZtX2Nsa19nZXQocGRhdGEtPmRldiwgInJl ZmNsayIpOworCWlmIChJU19FUlIocGRhdGEtPnJlZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihw ZGF0YS0+cmVmY2xrKTsKKwkJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIHJl dDsKKwkJRFJNX0RFQlVHX0tNUygicmVmY2xrIG5vdCBmb3VuZFxuIik7CisJCXBkYXRhLT5yZWZj bGsgPSBOVUxMOworCX0KKworCXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShwZGF0 YS0+ZGV2LT5vZl9ub2RlLCAxLCAwLAorCQkJCQkgICZwZGF0YS0+cGFuZWwsIE5VTEwpOworCWlm IChyZXQpIHsKKwkJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIHJldDsKKwkJ RFJNX0RFQlVHX0tNUygiZHJtIHBhbmVsIG5vdCBmb3VuZFxuIik7CisKKwkJLyogbm8gcGFuZWwg Y29ubmVjdGVkLCBsb29rIGZvciBkZGMgbm9kZSAqLworCQlkZGNfbm9kZSA9IG9mX3BhcnNlX3Bo YW5kbGUocGRhdGEtPmRldi0+b2Zfbm9kZSwKKwkJCQkJICAgICJkZGMtaTJjLWJ1cyIsIDApOwor CQlpZiAoZGRjX25vZGUpIHsKKwkJCXBkYXRhLT5kZGMgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5 X25vZGUoZGRjX25vZGUpOworCQkJb2Zfbm9kZV9wdXQoZGRjX25vZGUpOworCQkJaWYgKCFwZGF0 YS0+ZGRjKQorCQkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9IGVsc2UgeworCQkJRFJNX0VS Uk9SKCJjb3VsZCBub3QgZmluZCBhbnkgcGFuZWwgb3IgZGRjIG5vZGVcbiIpOworCQkJcmV0dXJu IHJldDsKKwkJfQorCX0KKworCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9kc2lfaG9zdChwZGF0 YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBtX3J1bnRpbWVfZW5hYmxlKHBkYXRh LT5kZXYpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGRhdGEpOworCisJcGRhdGEt PmJyaWRnZS5mdW5jcyA9ICZ0aV9zbl9icmlkZ2VfZnVuY3M7CisJcGRhdGEtPmJyaWRnZS5vZl9u b2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKworCWRybV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJp ZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZW1vdmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0 YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlpZiAocGRhdGEtPmhvc3Rfbm9kZSkKKwkJb2Zfbm9kZV9wdXQocGRhdGEt Pmhvc3Rfbm9kZSk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUocGRhdGEtPmRldik7CisKKwlpZiAo cGRhdGEtPmRzaSkgeworCQltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7CisJCW1pcGlfZHNp X2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOworCX0KKworCWRybV9icmlkZ2VfcmVtb3Zl KCZwZGF0YS0+YnJpZGdlKTsKKwlpMmNfcHV0X2FkYXB0ZXIocGRhdGEtPmRkYyk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9pZFtd ID0geworCXsgInRpLHNuNjVkc2k4NiIsIDB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFC TEUoaTJjLCB0aV9zbl9icmlkZ2VfaWQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGVbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAidGks c242NWRzaTg2In0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlfc25fYnJp ZGdlX21hdGNoX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRpX3NuX2JyaWRn ZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwKKwkJ Lm9mX21hdGNoX3RhYmxlID0gdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlLAorCQkucG0gPSAmdGlf c25fYnJpZGdlX3BtX29wcywKKwl9LAorCS5wcm9iZSA9IHRpX3NuX2JyaWRnZV9wcm9iZSwKKwku cmVtb3ZlID0gdGlfc25fYnJpZGdlX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB0aV9zbl9icmlkZ2Vf aWQsCit9OworbW9kdWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7CisKK01PRFVM RV9BVVRIT1IoIlNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9yZz4iKTsKK01PRFVM RV9ERVNDUklQVElPTigic242NWRzaTg2IERTSSB0byBlRFAgYnJpZGdlIGRyaXZlciIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVy LCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3Vu ZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5vCg==