From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v10 1/5] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 15 Jun 2018 08:19:50 +0530 Message-ID: <1529030994-10090-2-git-send-email-spanda@codeaurora.org> References: <1529030994-10090-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: <1529030994-10090-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 IEJveWQpLgoKQ2hhbmdlcyBpbiB2NzoKIC0gVXNlIHN0YXRpYyBzdXBwbHkgZW50cmllcyBpbnN0 ZWFkIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiAoQW5kcnplagogICBIYWpkYSkuCiAtIERlZmVyIGJy aWRnZSBkcml2ZXIgcHJvYmUgaWYgcGFuZWwgaXMgbm90IHByb2JlZCAoQW5kcnplaiBIYWpkYSku CiAtIFVwZGF0ZSBvZl9ncmFwaCBBUElzIGZvciBjb3JyZWN0IG5vZGUgcmVmZXJlbmNlIG1hbmFn ZW1lbnQuIChBbmRyemVqCiAgIEhhamRhKS4KIC0gUmVtb3ZlIGxvY2FsIGRpc3BsYXlfbW9kZSBv YmplY3QgKEFuZHJ6ZWogSGFqZGEpLgogLSBSZW1vdmUgdmVyc2lvbiBpZCBjaGVjayBmdW5jdGlv biBmcm9tIGRyaXZlci4KCkNoYW5nZXMgaW4gdjg6CiAtIE1vdmUgZHNpIHJlZ2lzdGVyL2F0dGFj aCBmdW5jdGlvbiB0byBicmlkZ2UgZHJpdmVyIHByb2JlIChBbmRyemVqCiAgIEhhamRhKS4KIC0g SW50cm9kdWNlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSAxNmJpdCB3b3JkcyBpbnRv IGNvbnNlY3V0aXZlCiAgIHJlZ2lzdGVycyAoQW5kcnplaiBIYWpkYSkuCiAtIFJlbW92ZSB1bm5l Y2Vzc2FyeSBtYWNyb3MgKEFuZHJ6ZWogSGFqZGEpLgoKQ2hhbmdlcyBpbiB2OToKIC0gUmVtb3Zl IGRzaSByZWdpc3Rlci9hdHRhY2ggZnJvbSBicmlkZ2UgcHJvYmUsIHNpbmNlIGRzaSBkZXYgcmVn aXN0ZXIKICAgY29tcGxldGlvbiBhbHNvIHdhaXRzIGZvciBhbnkgcGFuZWwgb3IgYnJpZGdlIHRv IGdldCBhZGRlZC4gVGhpcyBjcmVhdGVzCiAgIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGJyaWRn ZSBkcml2ZXIgY2FsbHMgZHNpIGRldiByZWdpc3RlciBhbmQKICAgYXR0YWNoIGJlZm9yZSBicmlk Z2UgYWRkLCBpbiBpdHMgcHJvYmUgZnVuY3Rpb24uCiAtIEZpeCBpc3N1ZXMgZmFjZWQgZHVyaW5n IHRlc3Rpbmcgb2YgYnJpZGdlIGRyaXZlciBvbiBhY3R1YWwgSFcuCiAtIFJlbW92ZSB1bm5lY2Vz c2FyeSBpbml0aWFsaXphdGlvbnMgKFN0ZXBoZW4gQm95ZCkuCiAtIFVzZSBsb2NhbCByZWZjbGsg bHV0IHNpemUgaW5zdGVhZCBvZiBnbG9iYWwgbWFjcm8gKFNlYW4gUGF1bCkuCgpDaGFuZ2VzIGlu IHYxMDoKIC0gVXNlIHJlZmNsayB0byBkZXRlcm1pbmUgaWYgY29udGludW91cyBkc2kgY2xvY2sg aXMgbmVlZGVkIG9yIG5vdC4KCkNoYW5nZS1JZDogSTczNWJiNjBkZjhjNjI3MmRhNzk5NDVkOTNj ZDUzMTM4MzVmMmExYTAKU2lnbmVkLW9mZi1ieTogU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVh dXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgfCAg IDkgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNjkzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzAzIGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcKQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9URlA0MTAKIAktLS1o ZWxwLS0tCiAJICBUZXhhcyBJbnN0cnVtZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIg ZHJpdmVyCiAKK2NvbmZpZyBEUk1fVElfU042NURTSTg2CisJdHJpc3RhdGUgIlRJIFNONjVEU0k4 NiBEU0kgdG8gZURQIGJyaWRnZSIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IFJFR01BUF9JMkMKKwlzZWxlY3QgRFJNX1BBTkVMCisJLS0taGVscC0tLQor CSAgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgor CiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L01ha2VmaWxlCmluZGV4IDM3M2ViMjguLmE3Y2EwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZQpAQCAtMTEsNSArMTEsNiBAQCBvYmotJChDT05GSUdfRFJNX1NJSTkyMzQpICs9IHNpaTkyMzQu bwogb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSArPSB0YzM1ODc2Ny5vCiBvYmot JChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KIG9iai0kKENPTkZJR19EUk1f STJDX0FEVjc1MTEpICs9IGFkdjc1MTEvCitvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4Nikg Kz0gdGktc242NWRzaTg2Lm8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0 MTAubwogb2JqLXkgKz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODc3YzU4Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwpAQCAtMCwwICsx LDY5MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdp c3RlcnMgKi8KKyNkZWZpbmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4CisjZGVmaW5lIFNOX0hQ RF9ESVNBQkxFX1JFRwkJCTB4NUMKKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHCQkJMHgwQQor I2RlZmluZSBTTl9EU0lfTEFORVNfUkVHCQkJMHgxMAorI2RlZmluZSBTTl9EU0lBX0NMS19GUkVR X1JFRwkJCTB4MTIKKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEKKyNkZWZpbmUgU05f U1NDX0NPTkZJR19SRUcJCQkweDkzCisjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkw eDk0CisjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgwRAorI2RlZmluZSBTTl9TQ1JBTUJM RV9DT05GSUdfUkVHCQkJMHg5NQorI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKKyNk ZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHCQkJMHg3NAorI2RlZmluZSBTTl9BVVhfQUREUl8x NV84X1JFRwkJCTB4NzUKKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKKyNkZWZp bmUgU05fQVVYX0xFTkdUSF9SRUcJCQkweDc3CisjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4 NzgKKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkweDk2CisvKiB2aWRlbyBjb25maWcgc3Bl Y2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9X X1JFRwkweDIwCisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRwkw eDI0CisjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MkMKKyNkZWZp bmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MkQKKyNkZWZpbmUgU05fQ0hB X1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVM U0VfV0lEVEhfSElHSF9SRUcJMHgzMQorI2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BP UkNIX1JFRwkweDM0CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRwkJMHgz NgorI2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcJMHgzOAorI2RlZmlu ZSBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHCQkweDNBCisjZGVmaW5lIFNOX0RBVEFf Rk9STUFUX1JFRwkJCTB4NUIKKworI2RlZmluZSBNSU5fRFNJX0NMS19GUkVRX01IWgk0MAorCisv KiBmdWRnZSBmYWN0b3IgcmVxdWlyZWQgdG8gYWNjb3VudCBmb3IgOGIvMTBiIGVuY29kaW5nICov CisjZGVmaW5lIERQX0NMS19GVURHRV9OVU0JMTAKKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX0RFTgk4 CisKKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19SRUZDTEsJMAorI2RlZmluZSBEUFBMTF9DTEtfU1JD X0RTSUNMSwkxCisKKyNkZWZpbmUgU05fRFNJQV9SRUZDTEtfT0ZGU0VUCTEKKyNkZWZpbmUgU05f RFNJQV9MQU5FX09GRlNFVAkzCisjZGVmaW5lIFNOX0RQX0xBTkVfT0ZGU0VUCTQKKyNkZWZpbmUg U05fRFBfREFUQV9SQVRFX09GRlNFVAk1CisjZGVmaW5lIFNOX1NZTkNfUE9MQVJJVFlfT0ZGU0VU CTcKKworI2RlZmluZSBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQJQklUKDMpCisjZGVmaW5lIFNO X0RTSUFfTlVNX0xBTkVTX0JJVFMJCShCSVQoNCkgfCBCSVQoMykpCisjZGVmaW5lIFNOX0RQX05V TV9MQU5FU19CSVRTCQkoQklUKDUpIHwgQklUKDQpKQorI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVf QklUUwkJKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkKKyNkZWZpbmUgU05fSFBEX0RJU0FCTEVf QklUCQlCSVQoMCkKKworI2RlZmluZSBTTl9SRUdVTEFUT1JfU1VQUExZX05VTQkJNAorCitzdHJ1 Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgcmVnbWFw CQkJKnJlZ21hcDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJpZGdlOworCXN0cnVjdCBkcm1fY29u bmVjdG9yCQljb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9ub2RlCQkqaG9zdF9ub2RlOworCXN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7CisJc3RydWN0IGNsawkJCSpyZWZjbGs7CisJc3Ry dWN0IGRybV9wYW5lbAkJKnBhbmVsOworCXN0cnVjdCBncGlvX2Rlc2MJCSplbmFibGVfZ3BpbzsK KwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YQlzdXBwbGllc1tTTl9SRUdVTEFUT1JfU1VQUExZ X05VTV07CisJc3RydWN0IGkyY19hZGFwdGVyCQkqZGRjOworfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0geworCXsg LnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweEZGIH0sCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0g eworCS55ZXNfcmFuZ2VzID0gdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcywKKwkubl95ZXNf cmFuZ2VzID0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0aV9zbl9icmlkZ2VfcmVnbWFwX2Nv bmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJLnZvbGF0aWxlX3Rh YmxlID0gJnRpX3NuX2JyaWRnZV92b2xhdGlsZV90YWJsZSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NB Q0hFX05PTkUsCit9OworCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfd3JpdGVfdTE2KHN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhLAorCQkJCSAgIHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWwp Cit7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJlZywgdmFsICYgMHhGRik7CisJcmVn bWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJlZyArIDEsIHZhbCA+PiA4KTsKK30KKworc3RhdGlj IGludCBfX21heWJlX3VudXNlZCB0aV9zbl9icmlkZ2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCWludCByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoU05fUkVHVUxBVE9S X1NVUFBMWV9OVU0sIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1Io ImZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXMgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpX3NuX2JyaWRnZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlncGlvZF9zZXRfdmFsdWUocGRhdGEt PmVuYWJsZV9ncGlvLCAwKTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoU05fUkVH VUxBVE9SX1NVUFBMWV9OVU0sIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCkKKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aV9zbl9icmlkZ2VfcG1f b3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyh0aV9zbl9icmlkZ2Vfc3VzcGVuZCwgdGlfc25f YnJpZGdlX3Jlc3VtZSwgTlVMTCkKK307CisKKy8qIENvbm5lY3RvciBmdW5jcyAqLworc3RhdGlj IHN0cnVjdCB0aV9zbl9icmlkZ2UgKgorY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29ubmVj dG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW50IHRp X3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlf c25fYnJpZGdlKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJdTMyIG51bV9tb2Rl czsKKworCWlmIChwZGF0YS0+cGFuZWwpIHsKKwkJRFJNX0RFQlVHX0tNUygiZ2V0IG1vZGUgZnJv bSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKKwkJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMo cGRhdGEtPnBhbmVsKTsKKwl9CisKKwlpZiAoIXBkYXRhLT5kZGMpCisJCXJldHVybiAwOworCisJ cG1fcnVudGltZV9nZXRfc3luYyhwZGF0YS0+ZGV2KTsKKwllZGlkID0gZHJtX2dldF9lZGlkKGNv bm5lY3RvciwgcGRhdGEtPmRkYyk7CisJcG1fcnVudGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsK KwlpZiAoIWVkaWQpCisJCXJldHVybiAwOworCisJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9l ZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJbnVtX21vZGVzID0gZHJtX2FkZF9lZGlk X21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisKKwlyZXR1cm4gbnVtX21v ZGVzOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK3RpX3NuX2JyaWRnZV9jb25u ZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwkvKiBtYXhpbXVtIHN1cHBvcnRl ZCByZXNvbHV0aW9uIGlzIDRLIGF0IDYwIGZwcyAqLworCWlmIChtb2RlLT5jbG9jayA+IDU5NDAw MCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBNT0RFX09LOworfQorCitz dGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB0aV9zbl9icmlkZ2VfY29ubmVj dG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9k ZV92YWxpZCwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCit0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIGZvcmNlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3Rv X3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCisJLyoqCisJICogVE9ETzogQ3VycmVudGx5IGlm IGRybV9wYW5lbCBpcyBwcmVzZW50LCB0aGVuIGFsd2F5cworCSAqIHJldHVybiB0aGUgc3RhdHVz IGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QKKwkgKiBkZXZpY2Ug c3RhdGUgZm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUpIHNjZW5hcmlvcy4KKwkgKi8KKwlpZiAo cGRhdGEtPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxz ZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyA9 IHsKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2Rl cywKKwkuZGV0ZWN0ID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kg PSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBz dHJ1Y3QgdGlfc25fYnJpZGdlICpicmlkZ2VfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0aV9z bl9icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX3Jl Z3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGk7 CisJY29uc3QgY2hhciAqIGNvbnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKKwkJ InZjY2EiLCAidmNjIiwgInZjY2lvIiwgInZwbGwiLAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwg U05fUkVHVUxBVE9SX1NVUFBMWV9OVU07IGkrKykKKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBs eSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXR1cm4gZGV2bV9yZWd1bGF0 b3JfYnVsa19nZXQocGRhdGEtPmRldiwgU05fUkVHVUxBVE9SX1NVUFBMWV9OVU0sCisJCQkJICAg ICAgIHBkYXRhLT5zdXBwbGllcyk7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2F0dGFj aChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCWludCByZXQ7CisJc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCWNv bnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0geyAudHlwZSA9ICJ0aV9zbl9i cmlkZ2UiLAorCQkJCQkJICAgLmNoYW5uZWwgPSAwLAorCQkJCQkJICAgLm5vZGUgPSBOVUxMLAor CQkJCQkJIH07CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0 YS0+Y29ubmVjdG9yLAorCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkg RFJNX01PREVfQ09OTkVDVE9SX2VEUCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJ fQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAm dGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWRybV9tb2RlX2Nvbm5lY3Rv cl9hdHRhY2hfZW5jb2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKKwor CWhvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsK KwlpZiAoIWhvc3QpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7 CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCWRzaSA9IG1p cGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKKwlpZiAoSVNfRVJSKGRz aSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOworCQly ZXQgPSBQVFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCS8qIFRPRE86 IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0Owor CWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBN SVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJ CSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisJ aWYgKHBkYXRhLT5yZWZjbGspCisJCWRzaS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9DTE9DS19O T05fQ09OVElOVU9VUzsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQg PCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBkc2kgdG8gaG9zdFxuIik7CisJ CWdvdG8gZXJyX2RzaV9hdHRhY2g7CisJfQorCXBkYXRhLT5kc2kgPSBkc2k7CisKKwkvKiBhdHRh Y2ggcGFuZWwgdG8gYnJpZGdlICovCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJZHJtX3BhbmVsX2F0 dGFjaChwZGF0YS0+cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworCitl cnJfZHNpX2F0dGFjaDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kpOworZXJyX2Rz aV9ob3N0OgorCWRybV9jb25uZWN0b3JfY2xlYW51cCgmcGRhdGEtPmNvbm5lY3Rvcik7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRn ZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cGFuZWwpIHsKKwkJZHJt X3BhbmVsX2Rpc2FibGUocGRhdGEtPnBhbmVsKTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShwZGF0 YS0+cGFuZWwpOworCX0KKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3Vw ZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFC TEVfVklEX1NUUkVBTV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUg T0ZGICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAw KTsKKwkvKiBkaXNhYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9QTExfRU5BQkxFX1JFRywgMCk7Cit9CisKK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9k c2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6 LCBjbGtfZnJlcV9raHo7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRh dGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKworCWJpdF9y YXRlX2toeiA9IG1vZGUtPmNsb2NrICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAo cGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJlcV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRh dGEtPmRzaS0+bGFuZXMgKiAyKTsKKworCXJldHVybiBjbGtfZnJlcV9raHo7Cit9CisKKy8qIGNs ayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBm cm9tIFJFRkNMSyBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19s dXRbXSA9IHsKKwkxMjAwMDAwMCwKKwkxOTIwMDAwMCwKKwkyNjAwMDAwMCwKKwkyNzAwMDAwMCwK KwkzODQwMDAwMCwKK307CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdl IGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIERBQ1AvTiBwaW4gKi8KK3N0YXRpYyBjb25zdCB1 MzIgdGlfc25fYnJpZGdlX2RzaWNsa19sdXRbXSA9IHsKKwk0NjgwMDAwMDAsCisJMzg0MDAwMDAw LAorCTQxNjAwMDAwMCwKKwk0ODYwMDAwMDAsCisJNDYwODAwMDAwLAorfTsKKworc3RhdGljIHZv aWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7 CisJaW50IGk7CisJdTggcmVmY2xrX3NyYzsKKwl1MzIgcmVmY2xrX3JhdGU7CisJY29uc3QgdTMy ICpyZWZjbGtfbHV0OworCXNpemVfdCByZWZjbGtfbHV0X3NpemU7CisKKwlpZiAocGRhdGEtPnJl ZmNsaykgeworCQlyZWZjbGtfc3JjID0gRFBQTExfQ0xLX1NSQ19SRUZDTEs7CisJCXJlZmNsa19y YXRlID0gY2xrX2dldF9yYXRlKHBkYXRhLT5yZWZjbGspOworCQlyZWZjbGtfbHV0ID0gdGlfc25f YnJpZGdlX3JlZmNsa19sdXQ7CisJCXJlZmNsa19sdXRfc2l6ZSA9IEFSUkFZX1NJWkUodGlfc25f YnJpZGdlX3JlZmNsa19sdXQpOworCQljbGtfcHJlcGFyZV9lbmFibGUocGRhdGEtPnJlZmNsayk7 CisJfSBlbHNlIHsKKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19TUkNfRFNJQ0xLOworCQlyZWZj bGtfcmF0ZSA9IHRpX3NuX2JyaWRnZV9nZXRfZHNpX2ZyZXEocGRhdGEpICogMTAwMDsKKwkJcmVm Y2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0OworCQlyZWZjbGtfbHV0X3NpemUgPSBB UlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0KTsKKwl9CisKKwkvKiBmb3IgaSBlcXVh bHMgdG8gcmVmY2xrX2x1dF9zaXplIG1lYW5zIGRlZmF1bHQgZnJlcXVlbmN5ICovCisJZm9yIChp ID0gMDsgaSA8IHJlZmNsa19sdXRfc2l6ZTsgaSsrKQorCQlpZiAocmVmY2xrX2x1dFtpXSA9PSBy ZWZjbGtfcmF0ZSkKKwkJCWJyZWFrOworCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X1JFRkNMS19GUkVRX1JFRywKKwkJICAgICAocmVmY2xrX3NyYyB8IChpIDw8IFNOX0RTSUFfUkVG Q0xLX09GRlNFVCkpKTsKK30KKworLyoqCisgKiBMVVQgaW5kZXggY29ycmVzcG9uZHMgdG8gcmVn aXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIGRwIGRhdGEgcmF0 ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBicmlkZ2UgaW4gTWJwcyB1bml0LgorICovCitzdGF0aWMg Y29uc3QgdW5zaWduZWQgaW50IHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtdID0geworCTAsIDE2 MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKK307CisKK3N0YXRpYyB2b2lk IHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEp Cit7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2ZyZXFfbWh6LCBkcF9yYXRlX21o ejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7 CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJYml0X3JhdGVfbWh6ID0gKG1vZGUt PmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChwZGF0YS0+ ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9yYXRlX21oeiAvIChwZGF0YS0+ZHNp LT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5 IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8gNSkg KworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19GUkVRX01IWikgLyA1KSAmIDB4RkYp OworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFs KTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9yYXRlX21oeiA9ICgoYml0X3JhdGVf bWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05VTSkgLworCQkJCQkJCURQ X0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGlfc25fYnJpZGdl X2RwX3JhdGVfbHV0KSAtIDE7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtp XSA+IGRwX3JhdGVfbWh6KQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEt PnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJCSAgIFNOX0RQX0RBVEFfUkFURV9C SVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCB0aV9z bl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7 CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5lbmNv ZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwl1OCBoc3luY19wb2xhcml0eSA9IDAs IHZzeW5jX3BvbGFyaXR5ID0gMDsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf UEhTWU5DKQorCQloc3luY19wb2xhcml0eSA9IDB4MTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX1BWU1lOQykKKwkJdnN5bmNfcG9sYXJpdHkgPSAweDE7CisKKwl0aV9zbl9icmlk Z2Vfd3JpdGVfdTE2KHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsCisJ CQkgICAgICAgbW9kZS0+aGRpc3BsYXkpOworCXRpX3NuX2JyaWRnZV93cml0ZV91MTYocGRhdGEs IFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKKwkJCSAgICAgICBtb2RlLT52 ZGlzcGxheSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxT RV9XSURUSF9MT1dfUkVHLAorCQkgICAgIChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19z dGFydCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hTWU5D X1BVTFNFX1dJRFRIX0hJR0hfUkVHLAorCQkgICAgICgoKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUt PmhzeW5jX3N0YXJ0KSA+PiA4KSAmIDB4N0YpCisJCSAgICAgfCAoaHN5bmNfcG9sYXJpdHkgPDwg U05fU1lOQ19QT0xBUklUWV9PRkZTRVQpKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJCSAgICAgKG1vZGUtPnZzeW5jX2Vu ZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVn bWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCSAgICAoKChtb2RlLT52 c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4gOCkgJiAweDdGKQorCQkgICAgfCAodnN5 bmNfcG9sYXJpdHkgPDwgU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpKTsKKworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BPUkNIX1JFRywKKwkJICAg ICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSAmIDB4RkYpOworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcsCisJCSAgICAg KG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCkgJiAweEZGKTsKKworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcsCisJCSAg ICAgKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICYgMHhGRik7CisJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCisJ CSAgICAgKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXkpICYgMHhGRik7CisKKwl1 c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBz cGVjICovCit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90 b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKHBkYXRh LT5wYW5lbCkgeworCQlkcm1fcGFuZWxfcHJlcGFyZShwZGF0YS0+cGFuZWwpOworCQkvKiBpbiBj YXNlIGRybV9wYW5lbCBpcyBjb25uZWN0ZWQgdGhlbiBIUEQgaXMgbm90IHN1cHBvcnRlZCAqLwor CQlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fSFBEX0RJU0FCTEVfUkVHLAor CQkJCSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJU0FCTEVfQklUKTsKKwl9CisKKwkv KiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZhbCA9ICg0IC0gcGRhdGEtPmRzaS0+bGFuZXMpIDw8 IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAs IFNOX0RTSV9MQU5FU19SRUcsCisJCQkgICBTTl9EU0lBX05VTV9MQU5FU19CSVRTLCB2YWwpOwor CisJLyogRFAgbGFuZSBjb25maWcgKi8KKwl2YWwgPSAocGRhdGEtPmRzaS0+bGFuZXMgLSAxKSA8 PCBTTl9EUF9MQU5FX09GRlNFVDsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fU1NDX0NPTkZJR19SRUcsCisJCQkgICBTTl9EUF9OVU1fTEFORVNfQklUUywgdmFsKTsKKwor CS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLworCXRpX3NuX2JyaWRnZV9zZXRf ZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyogZW5hYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7CisJdXNsZWVwX3JhbmdlKDEw MDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLworCisJLyoq CisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50aWNh dGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBtZXRob2QgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBB biBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBhdXRoZW50aWNhdGlvbiBtZXRob2Qu IFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRoZSBlRFAgcGFuZWwKKwkgKiBhdCBE aXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KKwkgKi8K KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOwor CXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDAp OworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgw MSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4 MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgw MSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsK Kwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBi eSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlICovCisJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAweDBBKTsKKwltc2xlZXAo MjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KKworCS8qIGNvbmZpZyB2 aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdzKHBkYXRh KTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRh dGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKKwkJCSAgIFNOX0VOQUJMRV9WSURfU1RSRUFN X0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKKworCWlmIChwZGF0YS0+cGFuZWwpCisJ CWRybV9wYW5lbF9lbmFibGUocGRhdGEtPnBhbmVsKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25f YnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3Qg dGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwor CXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkvKiBjb25maWd1cmUgYnJpZGdl IENMS19TUkMgYW5kIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsayhwZGF0YSk7 Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90 b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cmVmY2xrKQorCQljbGtfZGlz YWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBk YXRhLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgdGlf c25fYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAorCS5w cmVfZW5hYmxlID0gdGlfc25fYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IHRpX3NuX2Jy aWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKKwkucG9zdF9k aXNhYmxlID0gdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZSwKK307CisKK3N0YXRpYyBpbnQgdGlf c25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQorewor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOworCisJcGRhdGEt Pmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShucCwgMCwgMCk7CisKKwlpZiAo IXBkYXRhLT5ob3N0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUgZHNpIGhvc3Qgbm9kZSBu b3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwK KwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRjX25vZGU7CisJaW50IHJldDsKKwor CWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19J MkMpKSB7CisJCURSTV9FUlJPUigiZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBJMkNcbiIpOworCQly ZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYs IHNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYg KCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdt YXBfaW5pdF9pMmMoY2xpZW50LAorCQkJCQkgICAgICZ0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZp Zyk7CisJaWYgKElTX0VSUihwZGF0YS0+cmVnbWFwKSkgeworCQlEUk1fRVJST1IoInJlZ21hcCBp MmMgaW5pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKKwl9 CisKKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50 LT5kZXYsIHBkYXRhKTsKKworCXBkYXRhLT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBk YXRhLT5kZXYsICJlbmFibGUiLAorCQkJCQkgICAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VS UihwZGF0YS0+ZW5hYmxlX2dwaW8pKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFi bGUgZ3BpbyBmcm9tIERUXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8p OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0 b3JzKHBkYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJl Z3VsYXRvcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9vZl9maW5kX3Bh bmVsX29yX2JyaWRnZShwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxLCAwLAorCQkJCQkgICZwZGF0YS0+ cGFuZWwsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBh bnkgZHJtIHBhbmVsIG5vZGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBkYXRhLT5yZWZj bGsgPSBkZXZtX2Nsa19nZXQocGRhdGEtPmRldiwgInJlZmNsayIpOworCWlmIChJU19FUlIocGRh dGEtPnJlZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+cmVmY2xrKTsKKwkJaWYgKHJl dCA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIHJldDsKKwkJRFJNX0RFQlVHX0tNUygicmVm Y2xrIG5vdCBmb3VuZFxuIik7CisJCXBkYXRhLT5yZWZjbGsgPSBOVUxMOworCX0KKworCWRkY19u b2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGF0YS0+ZGV2LT5vZl9ub2RlLCAiZGRjLWkyYy1idXMi LCAwKTsKKwlpZiAoZGRjX25vZGUpIHsKKwkJcGRhdGEtPmRkYyA9IG9mX2ZpbmRfaTJjX2FkYXB0 ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJCW9mX25vZGVfcHV0KGRkY19ub2RlKTsKKwkJaWYgKCFw ZGF0YS0+ZGRjKSB7CisJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gcmVhZCBkZGMgbm9kZVxu Iik7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0gZWxzZSB7CisJCURSTV9ERUJV R19LTVMoIm5vIGRkYyBwcm9wZXJ0eSBmb3VuZFxuIik7CisJfQorCisJcmV0ID0gdGlfc25fYnJp ZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cG1fcnVudGltZV9lbmFibGUocGRhdGEtPmRldik7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xp ZW50LCBwZGF0YSk7CisKKwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5j czsKKwlwZGF0YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOworCisJZHJt X2JyaWRnZV9hZGQoJnBkYXRhLT5icmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisK KwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwZGF0YS0+aG9zdF9ub2Rl KQorCQlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKKworCXBtX3J1bnRpbWVfZGlzYWJs ZShwZGF0YS0+ZGV2KTsKKworCWlmIChwZGF0YS0+ZHNpKSB7CisJCW1pcGlfZHNpX2RldGFjaChw ZGF0YS0+ZHNpKTsKKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7CisJ fQorCisJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOworCWkyY19wdXRfYWRhcHRl cihwZGF0YS0+ZGRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZp Y2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7CisJeyAidGksc242NWRzaTg2IiwgMH0sCisJe30s Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0g eworCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7fSwKK307CitNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0 IGkyY19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFt ZSA9ICJ0aV9zbjY1ZHNpODYiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0 Y2hfdGFibGUsCisJCS5wbSA9ICZ0aV9zbl9icmlkZ2VfcG1fb3BzLAorCX0sCisJLnByb2JlID0g dGlfc25fYnJpZGdlX3Byb2JlLAorCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAorCS5p ZF90YWJsZSA9IHRpX3NuX2JyaWRnZV9pZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHRpX3Nu X2JyaWRnZV9kcml2ZXIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzbjY1ZHNpODYgRFNJIHRvIGVE UCBicmlkZ2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApUaGUgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVy b3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFp bGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K