From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28ABAC3A589 for ; Tue, 20 Aug 2019 18:11:07 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DBB5B20644 for ; Tue, 20 Aug 2019 18:11:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A4tExJEO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DBB5B20644 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i08ao-0006Ld-5a; Tue, 20 Aug 2019 18:10:50 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1i08an-0006Kw-2M for xen-devel@lists.xenproject.org; Tue, 20 Aug 2019 18:10:49 +0000 X-Inumbo-ID: c373147c-c375-11e9-9ab1-bc764e2007e4 Received: from mail-lj1-x241.google.com (unknown [2a00:1450:4864:20::241]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id c373147c-c375-11e9-9ab1-bc764e2007e4; Tue, 20 Aug 2019 18:10:17 +0000 (UTC) Received: by mail-lj1-x241.google.com with SMTP id u15so6005227ljl.3 for ; Tue, 20 Aug 2019 11:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XymbUEGuy+VuZbaVrDzUVlaXRtnpIm6po19nl+smCCQ=; b=A4tExJEOjdk8jo2uI6wyHok3c0AlwmwLAJDuZvJDAaQ9NTrssVAlgwZI2W9zRU4vig 6pJg6oL136dq4NvkHxHF0zsPo8SpXcKk4Arq+8lwSD2Y5tmz88UxvrhXye2ONr7nvNvO ljPp6hTQ5gnhsxH8JCOcGSjUcCTx/JJThYxJjTmbmCf+ZIAxrEoKwNZw7CjRyXcylOjp iAuw9aUlPSI/1Nm/eFTmit4DrBTgij2hPItJvShdaAF6SGjTNmcco4pAcNKJsVM/3jx3 L3R0FDdH252fRLtI5gx/d4YK0cFpQG6RfprND6ZjtOROHTf4y2tLN5He0xdVvqelBIvQ Kk2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=XymbUEGuy+VuZbaVrDzUVlaXRtnpIm6po19nl+smCCQ=; b=lC8mn1/nDB+mU3PK+E8hwBQ/RBPtkRPR61SmlMvymPISYdV5kbZkBMyHznIFBwslVB t3s61lKLB+3bDCJB4t1kcZVvc27IqqiSDLVBO/zqFW1RNpnJk2ePqB2WXJYm5MdGPX/s wPoYbgHCe3gj2qwRkBq1kFkpzh0wWTsE9Xr1EPTJ7Dq3rYi8VcM1hhdR1Swom+IJC9lx 0oxadoRKZ1ZA0JtVPx0zChbJkBGB8k8Q17dcnr75GjB2BCJ9YsQfM27wIzJAUAk1AkZp /P3rff28ufxwcBf4VV2inpTnBDrPGNioKWo8i0ggZOymqXbTIS4buBdfhdjSSHfGS1fB FnTA== X-Gm-Message-State: APjAAAXX7F2yIYvAKp3ZJKV3wMj/6EsvFLYR2l9kNYpRSJgf5Xd76Or5 jICj/a4w7mGCkh6CyHJEolyqNlUk X-Google-Smtp-Source: APXvYqxMyrJuTpT3tke61QsDCyK/Uw5rVh9XYFwQ9JBZ6F2ofXIPqf+dWkDT8cT3jhfLLPF4WSawhw== X-Received: by 2002:a05:651c:1a7:: with SMTP id c7mr16282212ljn.89.1566324615621; Tue, 20 Aug 2019 11:10:15 -0700 (PDT) Received: from otyshchenko.kyiv.epam.com (ll-22.209.223.85.sovam.net.ua. [85.223.209.22]) by smtp.gmail.com with ESMTPSA id f6sm2900642lja.16.2019.08.20.11.10.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 20 Aug 2019 11:10:15 -0700 (PDT) From: Oleksandr Tyshchenko To: xen-devel@lists.xenproject.org Date: Tue, 20 Aug 2019 21:09:47 +0300 Message-Id: <1566324587-3442-9-git-send-email-olekstysh@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1566324587-3442-1-git-send-email-olekstysh@gmail.com> References: <1566324587-3442-1-git-send-email-olekstysh@gmail.com> Subject: [Xen-devel] [PATCH V3 8/8] iommu/arm: Add Renesas IPMMU-VMSA support X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Oleksandr Tyshchenko , julien.grall@arm.com, sstabellini@kernel.org, Volodymyr_Babchuk@epam.com, Yoshihiro Shimoda MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKVGhlIElQTU1VLVZNU0EgaXMgVk1TQS1jb21wYXRpYmxlIEkvTyBNZW1vcnkgTWFuYWdlbWVu dCBVbml0IChJT01NVSkKd2hpY2ggcHJvdmlkZXMgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgYWNj ZXNzIHByb3RlY3Rpb24gZnVuY3Rpb25hbGl0aWVzCnRvIHByb2Nlc3NpbmcgdW5pdHMgYW5kIGlu dGVyY29ubmVjdCBuZXR3b3Jrcy4KClBsZWFzZSBub3RlLCBjdXJyZW50IGRyaXZlciBpcyBzdXBw b3NlZCB0byB3b3JrIG9ubHkgd2l0aCBuZXdlc3QKR2VuMyBTb0NzIHJldmlzaW9ucyB3aGljaCBJ UE1NVSBoYXJkd2FyZSBzdXBwb3J0cyBzdGFnZSAyIHRyYW5zbGF0aW9uCnRhYmxlIGZvcm1hdCBh bmQgaXMgYWJsZSB0byB1c2UgQ1BVJ3MgUDJNIHRhYmxlIGFzIGlzIGlmIG9uZSBpcwozLWxldmVs IHBhZ2UgdGFibGUgKHVwIHRvIDQwIGJpdCBJUEEpLgoKVGhlIG1ham9yIGRpZmZlcmVuY2VzIGNv bXBhcmUgdG8gdGhlIExpbnV4IGRyaXZlciBhcmU6CgoxLiBTdGFnZSAxL1N0YWdlIDIgdHJhbnNs YXRpb24uIExpbnV4IGRyaXZlciBzdXBwb3J0cyBTdGFnZSAxCnRyYW5zbGF0aW9uIG9ubHkgKHdp dGggU3RhZ2UgMSB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQpLiBJdCBtYW5hZ2VzCnBhZ2UgdGFi bGUgYnkgaXRzZWxmLiBCdXQgWGVuIGRyaXZlciBzdXBwb3J0cyBTdGFnZSAyIHRyYW5zbGF0aW9u Cih3aXRoIFN0YWdlIDIgdHJhbnNsYXRpb24gdGFibGUgZm9ybWF0KSB0byBiZSBhYmxlIHRvIHNo YXJlIHRoZSBQMk0Kd2l0aCB0aGUgQ1BVLiBTdGFnZSAxIHRyYW5zbGF0aW9uIGlzIGFsd2F5cyBi eXBhc3NlZCBpbiBYZW4gZHJpdmVyLgoKU28sIFhlbiBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmUg dXNlZCB3aXRoIG5ld2VzdCBSLUNhciBHZW4zIFNvQyByZXZpc2lvbnMKb25seSAoSDMgRVMzLjAs IE0zLVcrLCBldGMuKSB3aGljaCBJUE1NVSBIL1cgc3VwcG9ydHMgc3RhZ2UgMiB0cmFuc2xhdGlv bgp0YWJsZSBmb3JtYXQuCgoyLiBBQXJjaDY0IHN1cHBvcnQuIExpbnV4IGRyaXZlciB1c2VzIFZN U0F2OC0zMiBtb2RlLCB3aGlsZSBYZW4gZHJpdmVyCmVuYWJsZXMgQXJtdjggVk1TQXY4LTY0IG1v ZGUgdG8gY292ZXIgdXAgdG8gNDAgYml0IGlucHV0IGFkZHJlc3MuCgozLiBDb250ZXh0IGJhbmsg KHNldHMgb2YgcGFnZSB0YWJsZSkgdXNhZ2UuIEluIFhlbiwgZWFjaCBjb250ZXh0IGJhbmsgaXMK bWFwcGVkIHRvIG9uZSBYZW4gZG9tYWluLiBTbywgYWxsIGRldmljZXMgYmVpbmcgcGFzcyB0aHJv dWdoZWQgdG8gdGhlCnNhbWUgWGVuIGRvbWFpbiBzaGFyZSB0aGUgc2FtZSBjb250ZXh0IGJhbmsu Cgo0LiBJUE1NVSBkZXZpY2UgdHJhY2tpbmcuIEluIFhlbiwgYWxsIElPTU1VIGRldmljZXMgYXJl IG1hbmFnZWQKYnkgc2luZ2xlIGRyaXZlciBpbnN0YW5jZS4gU28sIGRyaXZlciB1c2VzIGdsb2Jh bCBsaXN0IHRvIGtlZXAgdHJhY2sKb2YgcmVnaXN0ZXJlZCBJUE1NVSBkZXZpY2VzLgoKU2lnbmVk LW9mZi1ieTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0u Y29tPgpDQzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KQ0M6IFlvc2hpaGly byBTaGltb2RhIDx5b3NoaWhpcm8uc2hpbW9kYS51aEByZW5lc2FzLmNvbT4KCi0tLQpDaGFuZ2Vz IFYyIC0+IFYzOgogICAgLSBhZGRlZCBDb3B5cmlnaHQgZnJvbSBMaW51eAogICAgLSBpbmNsdWRl ZCA8eGVuL2lvbW11Lmg+IGFuZCA8YXNtL2lvbW11X2Z3c3BlYy5oPiBkaXJlY3RseQogICAgLSBy ZW1vdmVkIHBvaW50bGVzcyBzcGluX2xvY2sgZnJvbSBpcG1tdV9pb21tdV9kb21haW5fdGVhcmRv d24oKQogICAgLSBjaGFuZ2VkICJHZW4zIiB0byAiUi1DYXIgR2VuMyIsICJNMyBFUzMuMCIgdG8g Ik0zLVcrIgogICAgLSBjaGFuZ2VkIFJDQVJfUFJPRFVDVF9NMyB0byBSQ0FSX1BST0RVQ1RfTTNX CiAgICAtIGNsYXJpZmllZCBJTVRUQkNSX1RTWjFfTUFTSwogICAgLSByZW1vdmVkIFRMQiBmbHVz aCBmcm9tIGlwbW11X2RvbWFpbl9pcnEoKSB1bnRpbCBjbGFyaWZpZWQgdGhlIHB1cnBvc2UKICAg IC0gcmV0dXJuZWQgLUVOT0RFViBpbiBpcG1tdV9pbml0KCkgaWYgUDJNIHNoYXJpbmcgb3IgUDJN IElQQSBzaXplCiAgICAgIGlzIG5vdCBzdXBwb3J0ZWQgdG8gc2hvdyB0aGF0IElPTU1VIGRldmlj ZSBpcyBub3QgdXNhYmxlIGluIFhlbgogICAgLSBpbXBsZW1lbnRlZCBuZXcgY2FsbGJhY2sgIm9m X3hsYXRlIiB0byBwYXJzZSBEVCBJT01NVSBzcGVjaWZpZXIKICAgICAgYW5kIGFkZCBkZXZpY2Ug SURzIHRvICJpb21tdV9md3NwZWMiCiAgICAtIHJld29ya2VkICJhZGRfZGV2aWNlIiBjYWxsYmFj awogICAgLSB1cGRhdGVkIHBhdGNoIGRlc2NyaXB0aW9uCgpDaGFuZ2VzIFYxIC0+IFYyOgogICAg LSByZXdyaXRlZCBkcml2ZXIgdG8gdXNlIGlvbW11X2Z3c3BlYwogICAgLSByZW1vdmVkIERUIHBh cnNpbmcgY29kZSBmb3IgbWljcm8tVExCcwogICAgLSByZW1vdmVkIHN0cnVjdCBpcG1tdV92bXNh X21hc3Rlcl9jZmcsIGRldl9hcmNoZGF0YSBtYWNybwogICAgLSBhZGRlZCBpcG1tdV9maW5kX21t dV9ieV9kZXYoKSwgdmFyaW91cyBoZWxwZXJzIHRvIGFjY2VzcwogICAgICBmd3NwZWMtPmlvbW11 X3ByaXYKICAgIC0gaW1wbGVtZW50ZWQgbmV3IGNhbGxiYWNrICJhZGRfZGV2aWNlIiB0byBhZGQg bWFzdGVyIGRldmljZSB0byBJUE1NVQogICAgLSByZW1vdmVkIGlwbW11X3Byb3RlY3RfbWFzdGVy cygpCiAgICAtIHJlbW92ZWQgY29kZSB0byBsb2NhdGUgUm9vdCBkZXZpY2UgaW4gdGhlIGZpcnN0 IHBsYWNlLAogICAgICB1c2VkIEVBR0FJTiB0byByZXF1ZXN0IGRlZmVycmVkIHByb2JpbmcKICAg IC0gdXNlZCBwcmludGtfb25jZSBmb3IgdGhlIHN5c3RlbSB3aWRlIGVycm9yIG1lc3NhZ2VzIGlu IGlwbW11X2luaXQoKQogICAgICB3aGljaCBkb24ndCBuZWVkIHRvIGJlIHNob3duIGZvciBldmVy eSBkZXZpY2UgYmVpbmcgcHJvYmVkCiAgICAtIHJlbW92ZWQgbWFwX3BhZ2UvdW5tYXBfcGFnZSBp bXBsZW1lbnRhdGlvbiwgcmV1c2VkIHRoZW0KICAgICAgZnJvbSBpb21tdV9oZWxwZXJzLmMKICAg IC0gdXNlZCAlcGQgZm9yIHByaW50aW5nIGRvbWFpZCBpZAogICAgLSBwZXJmb3JtZWQgdmFyaW91 cyBjb3NtZXRpYyBmaXhlcwogICAgLSBjaGFuZ2VkIHUzMiAtPiB1aW50MzJfdCwgdTY0IC0+IHVp bnQ2NF90LAogICAgICB1bnNpZ25lZCBpbnQgLT4gdWludDMyX3Qgd2hlcmUgbmVlZGVkCiAgICAt IGNsYXJpZmllZCBUT0RPcwogICAgLSBjbGFmaXJpZWQgc3VwcG9ydGVkIFNvQyB2ZXJzaW9ucyBp biBjb25maWcgSVBNTVVfVk1TQSwKICAgICAgc2V0IGRlZmF1bHQgdG8gIm4iCiAgICAtIHVwZGF0 ZWQgY29tbWVudHMgaW4gY29kZSwgcHJvdmlkZWQgbW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbiwK ICAgICAgYWRkZWQgbmV3IGNvbW1lbnRzIHdoZXJlIG5lZWRlZAogICAgLSB1cGRhdGVkIHBhdGNo IGRlc2NyaXB0aW9uIGJ5IHByb3ZpZGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuCiAgICAgIExpbnV4 L1hlbiBpbXBsZW1lbnRhdGlvbnMKICAgIC0gcmVtb3ZlZCBmaWVsZHMgZm9yIGNhY2hlIHNub29w IHRyYW5zYWN0aW9uIHdoZW4gY29uZmlndXJpbmcgSU1UVEJDUgogICAgICAodXBkYXRlIGZyb20g UmVuZXNhcyBCU1ApCi0tLQogeGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9LY29uZmlnICAgICAgICAg ICB8ICAgIDEgKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvS2NvbmZpZyAgICAgICAgICB8ICAg MTMgKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlICAgICB8ICAgIDEgKwog eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL2lwbW11LXZtc2EuYyB8IDEzNTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEzNzQgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9pcG1tdS12 bXNhLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vcGxhdGZvcm1zL0tjb25maWcgYi94ZW4v YXJjaC9hcm0vcGxhdGZvcm1zL0tjb25maWcKaW5kZXggYmMwZTljZC4uYzkzYTZiMiAxMDA2NDQK LS0tIGEveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL3hlbi9hcmNoL2FybS9w bGF0Zm9ybXMvS2NvbmZpZwpAQCAtMjUsNiArMjUsNyBAQCBjb25maWcgUkNBUjMKIAlib29sICJS ZW5lc2FzIFJDYXIzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk1fNjQKIAlzZWxlY3QgSEFTX1ND SUYKKwlzZWxlY3QgSVBNTVVfVk1TQQogCS0tLWhlbHAtLS0KIAlFbmFibGUgYWxsIHRoZSByZXF1 aXJlZCBkcml2ZXJzIGZvciBSZW5lc2FzIFJDYXIzCiAKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL0tjb25maWcgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9LY29uZmlnCmlu ZGV4IGEzYzA2NDkuLjQ3ZWFkYjQgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdo L0tjb25maWcKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvS2NvbmZpZwpAQCAtMTIsNCAr MTIsMTcgQEAgY29uZmlnIEFSTV9TTU1VCiAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBTb0MgaW5j bHVkZXMgYW4gSU9NTVUgZGV2aWNlIGltcGxlbWVudGluZyB0aGUKIAkgIEFSTSBTTU1VIGFyY2hp dGVjdHVyZS4KKworY29uZmlnIElQTU1VX1ZNU0EKKwlib29sICJSZW5lc2FzIElQTU1VLVZNU0Eg Zm91bmQgaW4gUi1DYXIgR2VuMyBTb0NzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQVJNXzY0 CisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBSZW5l c2FzIElQTU1VLVZNU0EgZm91bmQKKwkgIGluIFItQ2FyIEdlbjMgU29Dcy4KKworCSAgU2F5IFkg aGVyZSBpZiB5b3UgYXJlIHVzaW5nIG5ld2VzdCBSLUNhciBHZW4zIFNvQ3MgcmV2aXNpb25zCisJ ICAoSDMgRVMzLjAsIE0zLVcrLCBldGMpIHdoaWNoIElQTU1VIGhhcmR3YXJlIHN1cHBvcnRzIHN0 YWdlIDIKKwkgIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1hdCBhbmQgaXMgYWJsZSB0byB1c2UgQ1BV J3MgUDJNIHRhYmxlIGFzIGlzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFz c3Rocm91Z2gvYXJtL01ha2VmaWxlIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2Vm aWxlCmluZGV4IDVmYmFkNDUuLmZjZDkxOGUgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL2FybS9NYWtlZmlsZQorKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFr ZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmoteSArPSBpb21tdS5vIGlvbW11X2hlbHBlcnMubyBp b21tdV9md3NwZWMubwogb2JqLSQoQ09ORklHX0FSTV9TTU1VKSArPSBzbW11Lm8KK29iai0kKENP TkZJR19JUE1NVV9WTVNBKSArPSBpcG1tdS12bXNhLm8KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL2FybS9pcG1tdS12bXNhLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9h cm0vaXBtbXUtdm1zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTQz YzMKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vaXBtbXUt dm1zYS5jCkBAIC0wLDAgKzEsMTM1OSBAQAorLyoKKyAqIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdo L2FybS9pcG1tdS12bXNhLmMKKyAqCisgKiBEcml2ZXIgZm9yIHRoZSBSZW5lc2FzIElQTU1VLVZN U0EgZm91bmQgaW4gUi1DYXIgR2VuMyBTb0NzLgorICoKKyAqIFRoZSBJUE1NVS1WTVNBIGlzIFZN U0EtY29tcGF0aWJsZSBJL08gTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoSU9NTVUpCisgKiB3aGlj aCBwcm92aWRlcyBhZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCBhY2Nlc3MgcHJvdGVjdGlvbiBmdW5j dGlvbmFsaXRpZXMKKyAqIHRvIHByb2Nlc3NpbmcgdW5pdHMgYW5kIGludGVyY29ubmVjdCBuZXR3 b3Jrcy4KKyAqCisgKiBQbGVhc2Ugbm90ZSwgY3VycmVudCBkcml2ZXIgaXMgc3VwcG9zZWQgdG8g d29yayBvbmx5IHdpdGggbmV3ZXN0CisgKiBSLUNhciBHZW4zIFNvQ3MgcmV2aXNpb25zIHdoaWNo IElQTU1VIGhhcmR3YXJlIHN1cHBvcnRzIHN0YWdlIDIgdHJhbnNsYXRpb24KKyAqIHRhYmxlIGZv cm1hdCBhbmQgaXMgYWJsZSB0byB1c2UgQ1BVJ3MgUDJNIHRhYmxlIGFzIGlzLgorICoKKyAqIEJh c2VkIG9uIExpbnV4J3MgSVBNTVUtVk1TQSBkcml2ZXIgZnJvbSBSZW5lc2FzIEJTUDoKKyAqICAg IGRyaXZlcnMvaW9tbXUvaXBtbXUtdm1zYS5jCisgKiB5b3UgY2FuIGZvdW5kIGF0OgorICogICAg dXJsOiBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaG9ybXMv cmVuZXNhcy1ic3AuZ2l0CisgKiAgICBicmFuY2g6IHY0LjE0Ljc1LWx0c2kvcmNhci0zLjkuNgor ICogICAgY29tbWl0OiBlMjA2ZWI1YjgxYTYwZTY0YzM1ZmJjM2E5OTliMWEwZGIyYjk4MDQ0Cisg KiBhbmQgWGVuJ3MgU01NVSBkcml2ZXI6CisgKiAgICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9h cm0vc21tdS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgUmVuZXNhcyBFbGVjdHJv bmljcyBDb3Jwb3JhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEVQQU0gU3lz dGVtcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2luY2x1ZGUgPHhlbi9kZWxheS5oPgorI2luY2x1ZGUgPHhlbi9lcnIuaD4KKyNpbmNsdWRl IDx4ZW4vaW9tbXUuaD4KKyNpbmNsdWRlIDx4ZW4vaXJxLmg+CisjaW5jbHVkZSA8eGVuL2xpYi5o PgorI2luY2x1ZGUgPHhlbi9saXN0Lmg+CisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8 eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9t aWMuaD4KKyNpbmNsdWRlIDxhc20vZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5j bHVkZSA8YXNtL2lvbW11X2Z3c3BlYy5oPgorCisjZGVmaW5lIGRldl9uYW1lKGRldikgZHRfbm9k ZV9mdWxsX25hbWUoZGV2X3RvX2R0KGRldikpCisKKy8qIERldmljZSBsb2dnZXIgZnVuY3Rpb25z ICovCisjZGVmaW5lIGRldl9wcmludChkZXYsIGx2bCwgZm10LCAuLi4pICAgIFwKKyAgICBwcmlu dGsobHZsICJpcG1tdTogJXM6ICIgZm10LCBkZXZfbmFtZShkZXYpLCAjIyBfX1ZBX0FSR1NfXykK KworI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZtdCwgLi4uKSAgICBcCisgICAgZGV2X3ByaW50KGRl diwgWEVOTE9HX0lORk8sIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl93YXJuKGRl diwgZm10LCAuLi4pICAgIFwKKyAgICBkZXZfcHJpbnQoZGV2LCBYRU5MT0dfV0FSTklORywgZm10 LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZGV2X2VycihkZXYsIGZtdCwgLi4uKSAgICAgXAor ICAgIGRldl9wcmludChkZXYsIFhFTkxPR19FUlIsIGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVm aW5lIGRldl9lcnJfcmF0ZWxpbWl0ZWQoZGV2LCBmbXQsIC4uLikgICAgXAorICAgIGRldl9wcmlu dChkZXYsIFhFTkxPR19FUlIsIGZtdCwgIyMgX19WQV9BUkdTX18pCisKKy8qCisgKiBSLUNhciBH ZW4zIFNvQ3MgbWFrZSB1c2Ugb2YgdXAgdG8gOCBJUE1NVSBjb250ZXh0cyAoc2V0cyBvZiBwYWdl IHRhYmxlKSBhbmQKKyAqIHRoZXNlIGNhbiBiZSBtYW5hZ2VkIGluZGVwZW5kZW50bHkuIEVhY2gg Y29udGV4dCBpcyBtYXBwZWQgdG8gb25lIFhlbiBkb21haW4uCisgKi8KKyNkZWZpbmUgSVBNTVVf Q1RYX01BWCAgICAgOAorLyogUi1DYXIgR2VuMyBTb0NzIG1ha2UgdXNlIG9mIHVwIHRvIDQ4IG1p Y3JvLVRMQnMgcGVyIElQTU1VIGRldmljZS4gKi8KKyNkZWZpbmUgSVBNTVVfVVRMQl9NQVggICAg NDgKKworLyogSVBNTVUgY29udGV4dCBzdXBwb3J0cyBJUEEgc2l6ZSB1cCB0byA0MCBiaXQuICov CisjZGVmaW5lIElQTU1VX01BWF9QMk1fSVBBX0JJVFMgICAgNDAKKworLyoKKyAqIFhlbidzIGRv bWFpbiBJUE1NVSBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gZG9tX2lvbW11KGQpLT5hcmNoLnByaXYK KyAqCisgKiBBcyBlYWNoIGNvbnRleHQgKHNldCBvZiBwYWdlIHRhYmxlKSBpcyBtYXBwZWQgdG8g b25lIFhlbiBkb21haW4sCisgKiBhbGwgYXNzb2NpYXRlZCBJUE1NVSBkb21haW5zIHVzZSB0aGUg c2FtZSBjb250ZXh0IG1hcHBlZCB0byB0aGlzIFhlbiBkb21haW4uCisgKiBUaGlzIG1ha2VzIGFs bCBtYXN0ZXIgZGV2aWNlcyBiZWluZyBhdHRhY2hlZCB0byB0aGUgc2FtZSBYZW4gZG9tYWluIHNo YXJlCisgKiB0aGUgc2FtZSBjb250ZXh0IChQMk0gdGFibGUpLgorICovCitzdHJ1Y3QgaXBtbXVf dm1zYV94ZW5fZG9tYWluIHsKKyAgICAvKgorICAgICAqIFVzZWQgdG8gcHJvdGVjdCBldmVyeXRo aW5nIHdoaWNoIGJlbG9uZ3MgdG8gdGhpcyBYZW4gZG9tYWluOgorICAgICAqIGRldmljZSBhc3Np Z25tZW50LCBkb21haW4gaW5pdC9kZXN0cm95LCBmbHVzaCBvcHMsIGV0YworICAgICAqLworICAg IHNwaW5sb2NrX3QgbG9jazsKKyAgICAvKiBPbmUgb3IgbW9yZSBDYWNoZSBJUE1NVSBkb21haW5z IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFhlbiBkb21haW4gKi8KKyAgICBzdHJ1Y3QgbGlzdF9oZWFk IGNhY2hlX2RvbWFpbnM7CisgICAgLyogUm9vdCBJUE1NVSBkb21haW4gYXNzb2NpYXRlZCB3aXRo IHRoaXMgWGVuIGRvbWFpbiAqLworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqcm9vdF9k b21haW47Cit9OworCisvKiBYZW4gbWFzdGVyIGRldmljZSdzIElQTU1VIGluZm9ybWF0aW9uIHN0 b3JlZCBpbiBmd3NwZWMtPmlvbW11X3ByaXYgKi8KK3N0cnVjdCBpcG1tdV92bXNhX3hlbl9kZXZp Y2UgeworICAgIC8qIENhY2hlIElQTU1VIGRvbWFpbiB0aGlzIG1hc3RlciBkZXZpY2UgaXMgbG9n aWNhbGx5IGF0dGFjaGVkIHRvICovCisgICAgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21h aW47CisgICAgLyogQ2FjaGUgSVBNTVUgdGhpcyBtYXN0ZXIgZGV2aWNlIGlzIHBoeXNpY2FsbHkg Y29ubmVjdGVkIHRvICovCisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXU7Cit9Owor CisvKiBSb290L0NhY2hlIElQTU1VIGRldmljZSdzIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgaXBt bXVfdm1zYV9kZXZpY2UgeworICAgIHN0cnVjdCBkZXZpY2UgKmRldjsKKyAgICB2b2lkIF9faW9t ZW0gKmJhc2U7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICpyb290OworICAgIHN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX3V0bGJzOworICAgIHVuc2ln bmVkIGludCBudW1fY3R4OworICAgIHNwaW5sb2NrX3QgbG9jazsgICAgLyogUHJvdGVjdHMgY3R4 IGFuZCBkb21haW5zW10gKi8KKyAgICBERUNMQVJFX0JJVE1BUChjdHgsIElQTU1VX0NUWF9NQVgp OworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluc1tJUE1NVV9DVFhfTUFYXTsK K307CisKKy8qCisgKiBSb290L0NhY2hlIElQTU1VIGRvbWFpbidzIGluZm9ybWF0aW9uCisgKgor ICogUm9vdCBJUE1NVSBkZXZpY2UgaXMgYXNzaWduZWQgdG8gUm9vdCBJUE1NVSBkb21haW4gd2hp bGUgQ2FjaGUgSVBNTVUgZGV2aWNlCisgKiBpcyBhc3NpZ25lZCB0byBDYWNoZSBJUE1NVSBkb21h aW4uIE1hc3RlciBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gQ2FjaGUKKyAqIElQTU1VIGRldmlj ZXMgdGhyb3VnaCBzcGVjaWZpYyBwb3J0cyBjYWxsZWQgbWljcm8tVExCcy4KKyAqIEFsbCBDYWNo ZSBJUE1NVSBkZXZpY2VzLCBpbiB0dXJuLCBhcmUgY29ubmVjdGVkIHRvIFJvb3QgSVBNTVUgZGV2 aWNlCisgKiB3aGljaCBtYW5hZ2VzIElQTU1VIGNvbnRleHQuCisgKi8KK3N0cnVjdCBpcG1tdV92 bXNhX2RvbWFpbiB7CisgICAgLyoKKyAgICAgKiBJUE1NVSBkZXZpY2UgYXNzaWduZWQgdG8gdGhp cyBJUE1NVSBkb21haW4uCisgICAgICogRWl0aGVyIFJvb3QgZGV2aWNlIHdoaWNoIGlzIGxvY2F0 ZWQgYXQgdGhlIG1haW4gbWVtb3J5IGJ1cyBkb21haW4gb3IKKyAgICAgKiBDYWNoZSBkZXZpY2Ug d2hpY2ggaXMgbG9jYXRlZCBhdCBlYWNoIGhpZXJhcmNoeSBidXMgZG9tYWluLgorICAgICAqLwor ICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11OworCisgICAgLyogQ29udGV4dCB1c2Vk IGZvciB0aGlzIElQTU1VIGRvbWFpbiAqLworICAgIHVuc2lnbmVkIGludCBjb250ZXh0X2lkOwor CisgICAgLyogWGVuIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBJUE1NVSBkb21haW4gKi8K KyAgICBzdHJ1Y3QgZG9tYWluICpkOworCisgICAgLyogVGhlIGZpZWxkcyBiZWxvdyBhcmUgdXNl ZCBmb3IgQ2FjaGUgSVBNTVUgZG9tYWluIG9ubHkgKi8KKworICAgIC8qCisgICAgICogVXNlZCB0 byBrZWVwIHRyYWNrIG9mIHRoZSBtYXN0ZXIgZGV2aWNlcyB3aGljaCBhcmUgYXR0YWNoZWQgdG8g dGhpcworICAgICAqIElQTU1VIGRvbWFpbiAoZG9tYWluIHVzZXJzKS4gTWFzdGVyIGRldmljZXMg YmVoaW5kIHRoZSBzYW1lIElQTU1VIGRldmljZQorICAgICAqIGFyZSBncm91cGVkIHRvZ2V0aGVy IGJ5IHB1dHRpbmcgaW50byB0aGUgc2FtZSBJUE1NVSBkb21haW4uCisgICAgICogT25seSB3aGVu IHRoZSByZWZjb3VudCByZWFjaGVzIDAgdGhpcyBJUE1NVSBkb21haW4gY2FuIGJlIGRlc3Ryb3ll ZC4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgcmVmY291bnQ7CisgICAgLyogVXNlZCB0byBs aW5rIHRoaXMgSVBNTVUgZG9tYWluIGZvciB0aGUgc2FtZSBYZW4gZG9tYWluICovCisgICAgc3Ry dWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHJlZ2lz dGVyZWQgSVBNTVUgZGV2aWNlcyAqLworc3RhdGljIExJU1RfSEVBRChpcG1tdV9kZXZpY2VzKTsK K3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBtbXVfZGV2aWNlc19sb2NrKTsKKworI2RlZmluZSBU TEJfTE9PUF9USU1FT1VUICAgIDEwMCAvKiAxMDB1cyAqLworCisvKiBSZWdpc3RlcnMgRGVmaW5p dGlvbiAqLworI2RlZmluZSBJTV9DVFhfU0laRSAgICAweDQwCisKKyNkZWZpbmUgSU1DVFIgICAg ICAgICAgICAgICAgMHgwMDAwCisvKgorICogVGhlc2UgZmllbGRzIGFyZSBpbXBsZW1lbnRlZCBp biBJUE1NVS1NTSBvbmx5LiBTbywgY2FuIGJlIHNldCBmb3IKKyAqIFJvb3QgSVBNTVUgb25seS4K KyAqLworI2RlZmluZSBJTUNUUl9WQTY0ICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgSU1D VFJfVFJFICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIElNQ1RSX0FGRSAgICAgICAgICAg ICgxIDw8IDE2KQorI2RlZmluZSBJTUNUUl9SVFNFTF9NQVNLICAgICAoMyA8PCA0KQorI2RlZmlu ZSBJTUNUUl9SVFNFTF9TSElGVCAgICA0CisjZGVmaW5lIElNQ1RSX1RSRU4gICAgICAgICAgICgx IDw8IDMpCisvKgorICogVGhlc2UgZmllbGRzIGFyZSBjb21tb24gZm9yIGFsbCBJUE1NVSBkZXZp Y2VzLiBTbywgY2FuIGJlIHNldCBmb3IKKyAqIENhY2hlIElQTU1VcyBhcyB3ZWxsLgorICovCisj ZGVmaW5lIElNQ1RSX0lOVEVOICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElNQ1RSX0ZMVVNI ICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElNQ1RSX01NVUVOICAgICAgICAgICgxIDw8IDAp CisjZGVmaW5lIElNQ1RSX0NPTU1PTl9NQVNLICAgICg3IDw8IDApCisKKyNkZWZpbmUgSU1DQUFS ICAgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgSU1UVEJDUiAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwOAorI2RlZmluZSBJTVRUQkNSX0VBRSAgICAgICAgICAgICAgICAgICAgKDEg PDwgMzEpCisjZGVmaW5lIElNVFRCQ1JfUE1CICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkK KyNkZWZpbmUgSU1UVEJDUl9TSDFfTk9OX1NIQVJFQUJMRSAgICAgICgwIDw8IDI4KQorI2RlZmlu ZSBJTVRUQkNSX1NIMV9PVVRFUl9TSEFSRUFCTEUgICAgKDIgPDwgMjgpCisjZGVmaW5lIElNVFRC Q1JfU0gxX0lOTkVSX1NIQVJFQUJMRSAgICAoMyA8PCAyOCkKKyNkZWZpbmUgSU1UVEJDUl9TSDFf TUFTSyAgICAgICAgICAgICAgICgzIDw8IDI4KQorI2RlZmluZSBJTVRUQkNSX09SR04xX05DICAg ICAgICAgICAgICAgKDAgPDwgMjYpCisjZGVmaW5lIElNVFRCQ1JfT1JHTjFfV0JfV0EgICAgICAg ICAgICAoMSA8PCAyNikKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMV9XVCAgICAgICAgICAgICAgICgy IDw8IDI2KQorI2RlZmluZSBJTVRUQkNSX09SR04xX1dCICAgICAgICAgICAgICAgKDMgPDwgMjYp CisjZGVmaW5lIElNVFRCQ1JfT1JHTjFfTUFTSyAgICAgICAgICAgICAoMyA8PCAyNikKKyNkZWZp bmUgSU1UVEJDUl9JUkdOMV9OQyAgICAgICAgICAgICAgICgwIDw8IDI0KQorI2RlZmluZSBJTVRU QkNSX0lSR04xX1dCX1dBICAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIElNVFRCQ1JfSVJH TjFfV1QgICAgICAgICAgICAgICAoMiA8PCAyNCkKKyNkZWZpbmUgSU1UVEJDUl9JUkdOMV9XQiAg ICAgICAgICAgICAgICgzIDw8IDI0KQorI2RlZmluZSBJTVRUQkNSX0lSR04xX01BU0sgICAgICAg ICAgICAgKDMgPDwgMjQpCisjZGVmaW5lIElNVFRCQ1JfVFNaMV9NQVNLICAgICAgICAgICAgICAo MHgxZiA8PCAxNikKKyNkZWZpbmUgSU1UVEJDUl9UU1oxX1NISUZUICAgICAgICAgICAgIDE2Cisj ZGVmaW5lIElNVFRCQ1JfU0gwX05PTl9TSEFSRUFCTEUgICAgICAoMCA8PCAxMikKKyNkZWZpbmUg SU1UVEJDUl9TSDBfT1VURVJfU0hBUkVBQkxFICAgICgyIDw8IDEyKQorI2RlZmluZSBJTVRUQkNS X1NIMF9JTk5FUl9TSEFSRUFCTEUgICAgKDMgPDwgMTIpCisjZGVmaW5lIElNVFRCQ1JfU0gwX01B U0sgICAgICAgICAgICAgICAoMyA8PCAxMikKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMF9OQyAgICAg ICAgICAgICAgICgwIDw8IDEwKQorI2RlZmluZSBJTVRUQkNSX09SR04wX1dCX1dBICAgICAgICAg ICAgKDEgPDwgMTApCisjZGVmaW5lIElNVFRCQ1JfT1JHTjBfV1QgICAgICAgICAgICAgICAoMiA8 PCAxMCkKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMF9XQiAgICAgICAgICAgICAgICgzIDw8IDEwKQor I2RlZmluZSBJTVRUQkNSX09SR04wX01BU0sgICAgICAgICAgICAgKDMgPDwgMTApCisjZGVmaW5l IElNVFRCQ1JfSVJHTjBfTkMgICAgICAgICAgICAgICAoMCA8PCA4KQorI2RlZmluZSBJTVRUQkNS X0lSR04wX1dCX1dBICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU1UVEJDUl9JUkdOMF9X VCAgICAgICAgICAgICAgICgyIDw8IDgpCisjZGVmaW5lIElNVFRCQ1JfSVJHTjBfV0IgICAgICAg ICAgICAgICAoMyA8PCA4KQorI2RlZmluZSBJTVRUQkNSX0lSR04wX01BU0sgICAgICAgICAgICAg KDMgPDwgOCkKKyNkZWZpbmUgSU1UVEJDUl9TTDBfTFZMXzIgICAgICAgICAgICAgICgwIDw8IDYp CisjZGVmaW5lIElNVFRCQ1JfU0wwX0xWTF8xICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmlu ZSBJTVRUQkNSX1RTWjBfTUFTSyAgICAgICAgICAgICAgKDB4MWYgPDwgMCkKKyNkZWZpbmUgSU1U VEJDUl9UU1owX1NISUZUICAgICAgICAgICAgIDAKKworI2RlZmluZSBJTVRUTEJSMCAgICAgICAg ICAgICAgMHgwMDEwCisjZGVmaW5lIElNVFRMQlIwX1RUQlJfTUFTSyAgICAoMHhmZmZmZiA8PCAx MikKKyNkZWZpbmUgSU1UVFVCUjAgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBJTVRUVUJS MF9UVEJSX01BU0sgICAgKDB4ZmYgPDwgMCkKKyNkZWZpbmUgSU1UVExCUjEgICAgICAgICAgICAg IDB4MDAxOAorI2RlZmluZSBJTVRUTEJSMV9UVEJSX01BU0sgICAgKDB4ZmZmZmYgPDwgMTIpCisj ZGVmaW5lIElNVFRVQlIxICAgICAgICAgICAgICAweDAwMWMKKyNkZWZpbmUgSU1UVFVCUjFfVFRC Ul9NQVNLICAgICgweGZmIDw8IDApCisKKyNkZWZpbmUgSU1TVFIgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAyMAorI2RlZmluZSBJTVNUUl9FUlJMVkxfTUFTSyAgICAgICAgICAgICAgKDMg PDwgMTIpCisjZGVmaW5lIElNU1RSX0VSUkxWTF9TSElGVCAgICAgICAgICAgICAxMgorI2RlZmlu ZSBJTVNUUl9FUlJDT0RFX1RMQl9GT1JNQVQgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU1TVFJf RVJSQ09ERV9BQ0NFU1NfUEVSTSAgICAgICg0IDw8IDgpCisjZGVmaW5lIElNU1RSX0VSUkNPREVf U0VDVVJFX0FDQ0VTUyAgICAoNSA8PCA4KQorI2RlZmluZSBJTVNUUl9FUlJDT0RFX01BU0sgICAg ICAgICAgICAgKDcgPDwgOCkKKyNkZWZpbmUgSU1TVFJfTUhJVCAgICAgICAgICAgICAgICAgICAg ICgxIDw8IDQpCisjZGVmaW5lIElNU1RSX0FCT1JUICAgICAgICAgICAgICAgICAgICAoMSA8PCAy KQorI2RlZmluZSBJTVNUUl9QRiAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZp bmUgSU1TVFJfVEYgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKyNkZWZpbmUgSU1F TEFSICAgIDB4MDAzMAorI2RlZmluZSBJTUVVQVIgICAgMHgwMDM0CisKKyNkZWZpbmUgSU1VQ1RS KG4pICAgICAgICAgICAgICAoKG4pIDwgMzIgPyBJTVVDVFIwKG4pIDogSU1VQ1RSMzIobikpCisj ZGVmaW5lIElNVUNUUjAobikgICAgICAgICAgICAgKDB4MDMwMCArICgobikgKiAxNikpCisjZGVm aW5lIElNVUNUUjMyKG4pICAgICAgICAgICAgKDB4MDYwMCArICgoKG4pIC0gMzIpICogMTYpKQor I2RlZmluZSBJTVVDVFJfRklYQURERU4gICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTVVDVFJf RklYQUREX01BU0sgICAgICgweGZmIDw8IDE2KQorI2RlZmluZSBJTVVDVFJfRklYQUREX1NISUZU ICAgIDE2CisjZGVmaW5lIElNVUNUUl9UVFNFTF9NTVUobikgICAgKChuKSA8PCA0KQorI2RlZmlu ZSBJTVVDVFJfVFRTRUxfUE1CICAgICAgICg4IDw8IDQpCisjZGVmaW5lIElNVUNUUl9UVFNFTF9N QVNLICAgICAgKDE1IDw8IDQpCisjZGVmaW5lIElNVUNUUl9GTFVTSCAgICAgICAgICAgKDEgPDwg MSkKKyNkZWZpbmUgSU1VQ1RSX01NVUVOICAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIElN VUFTSUQobikgICAgICAgICAgICAgKChuKSA8IDMyID8gSU1VQVNJRDAobikgOiBJTVVBU0lEMzIo bikpCisjZGVmaW5lIElNVUFTSUQwKG4pICAgICAgICAgICAgKDB4MDMwOCArICgobikgKiAxNikp CisjZGVmaW5lIElNVUFTSUQzMihuKSAgICAgICAgICAgKDB4MDYwOCArICgoKG4pIC0gMzIpICog MTYpKQorI2RlZmluZSBJTVVBU0lEX0FTSUQ4X01BU0sgICAgICgweGZmIDw8IDgpCisjZGVmaW5l IElNVUFTSURfQVNJRDhfU0hJRlQgICAgOAorI2RlZmluZSBJTVVBU0lEX0FTSUQwX01BU0sgICAg ICgweGZmIDw8IDApCisjZGVmaW5lIElNVUFTSURfQVNJRDBfU0hJRlQgICAgMAorCisjZGVmaW5l IElNU0FVWENUTFIgICAgICAgICAgMHgwNTA0CisjZGVmaW5lIElNU0FVWENUTFJfUzJQVEUgICAg KDEgPDwgMykKKworc3RhdGljIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqdG9faXBtbXUoc3Ry dWN0IGRldmljZSAqZGV2KQoreworICAgIHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRl dl9pb21tdV9md3NwZWNfZ2V0KGRldik7CisKKyAgICByZXR1cm4gZndzcGVjICYmIGZ3c3BlYy0+ aW9tbXVfcHJpdiA/CisgICAgICAgICgoc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RldmljZSAqKWZ3 c3BlYy0+aW9tbXVfcHJpdiktPm1tdSA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9pcG1t dShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11KQorewor ICAgIHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldl9pb21tdV9md3NwZWNfZ2V0KGRl dik7CisKKyAgICAoKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kZXZpY2UgKilmd3NwZWMtPmlvbW11 X3ByaXYpLT5tbXUgPSBtbXU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4g KnRvX2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisgICAgc3RydWN0IGlvbW11X2Z3c3Bl YyAqZndzcGVjID0gZGV2X2lvbW11X2Z3c3BlY19nZXQoZGV2KTsKKworICAgIHJldHVybiBmd3Nw ZWMgJiYgZndzcGVjLT5pb21tdV9wcml2ID8KKyAgICAgICAgKChzdHJ1Y3QgaXBtbXVfdm1zYV94 ZW5fZGV2aWNlICopZndzcGVjLT5pb21tdV9wcml2KS0+ZG9tYWluIDogTlVMTDsKK30KKworc3Rh dGljIHZvaWQgc2V0X2RvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpcG1tdV92bXNh X2RvbWFpbiAqZG9tYWluKQoreworICAgIHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRl dl9pb21tdV9md3NwZWNfZ2V0KGRldik7CisKKyAgICAoKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9k ZXZpY2UgKilmd3NwZWMtPmlvbW11X3ByaXYpLT5kb21haW4gPSBkb21haW47Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKmlwbW11X2ZpbmRfbW11X2J5X2RldihzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUgPSBOVUxM OworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgIHNwaW5fbG9jaygmaXBtbXVfZGV2aWNl c19sb2NrKTsKKworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBtbXUsICZpcG1tdV9kZXZpY2Vz LCBsaXN0ICkKKyAgICB7CisgICAgICAgIGlmICggbW11LT5kZXYgPT0gZGV2ICkKKyAgICAgICAg eworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBzcGluX3VubG9jaygmaXBtbXVfZGV2aWNlc19sb2NrKTsKKworICAg IHJldHVybiBmb3VuZCA/IG1tdSA6IE5VTEw7Cit9CisKKy8qIFJvb3QgZGV2aWNlIGhhbmRsaW5n ICovCitzdGF0aWMgYm9vbCBpcG1tdV9pc19yb290KHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAq bW11KQoreworICAgIHJldHVybiBtbXUtPnJvb3QgPT0gbW11OworfQorCitzdGF0aWMgc3RydWN0 IGlwbW11X3Ztc2FfZGV2aWNlICppcG1tdV9maW5kX3Jvb3Qodm9pZCkKK3sKKyAgICBzdHJ1Y3Qg aXBtbXVfdm1zYV9kZXZpY2UgKm1tdSA9IE5VTEw7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor CisgICAgc3Bpbl9sb2NrKCZpcG1tdV9kZXZpY2VzX2xvY2spOworCisgICAgbGlzdF9mb3JfZWFj aF9lbnRyeSggbW11LCAmaXBtbXVfZGV2aWNlcywgbGlzdCApCisgICAgeworICAgICAgICBpZiAo IGlwbW11X2lzX3Jvb3QobW11KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1 ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgc3Bpbl91bmxv Y2soJmlwbW11X2RldmljZXNfbG9jayk7CisKKyAgICByZXR1cm4gZm91bmQgPyBtbXUgOiBOVUxM OworfQorCisvKiBSZWFkL1dyaXRlIEFjY2VzcyAqLworc3RhdGljIHVpbnQzMl90IGlwbW11X3Jl YWQoc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAg ICByZXR1cm4gcmVhZGwobW11LT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgaXBt bXVfd3JpdGUoc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUsIHVpbnQzMl90IG9mZnNldCwK KyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEpCit7CisgICAgd3JpdGVsKGRh dGEsIG1tdS0+YmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpcG1tdV9jdHhf cmVhZF9yb290KHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnKQoreworICAgIHJldHVybiBpcG1t dV9yZWFkKGRvbWFpbi0+bW11LT5yb290LAorICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbi0+ Y29udGV4dF9pZCAqIElNX0NUWF9TSVpFICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgaXBtbXVf Y3R4X3dyaXRlX3Jvb3Qoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IGRhdGEpCit7 CisgICAgaXBtbXVfd3JpdGUoZG9tYWluLT5tbXUtPnJvb3QsCisgICAgICAgICAgICAgICAgZG9t YWluLT5jb250ZXh0X2lkICogSU1fQ1RYX1NJWkUgKyByZWcsIGRhdGEpOworfQorCitzdGF0aWMg dm9pZCBpcG1tdV9jdHhfd3JpdGVfY2FjaGUoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21h aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnLCB1aW50 MzJfdCBkYXRhKQoreworICAgIC8qIFdlIGV4cGVjdCBvbmx5IElNQ1RSIHZhbHVlIHRvIGJlIHBh c3NlZCBhcyBhIHJlZy4gKi8KKyAgICBBU1NFUlQocmVnID09IElNQ1RSKTsKKworICAgIC8qIE1h c2sgZmllbGRzIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBpbiBJUE1NVS1NTSBvbmx5LiAqLworICAg IGlmICggIWlwbW11X2lzX3Jvb3QoZG9tYWluLT5tbXUpICkKKyAgICAgICAgaXBtbXVfd3JpdGUo ZG9tYWluLT5tbXUsIGRvbWFpbi0+Y29udGV4dF9pZCAqIElNX0NUWF9TSVpFICsgcmVnLAorICAg ICAgICAgICAgICAgICAgICBkYXRhICYgSU1DVFJfQ09NTU9OX01BU0spOworfQorCisvKgorICog V3JpdGUgdGhlIGNvbnRleHQgdG8gYm90aCBSb290IElQTU1VIGFuZCBhbGwgQ2FjaGUgSVBNTVVz IGFzc2lnbmVkCisgKiB0byB0aGlzIFhlbiBkb21haW4uCisgKi8KK3N0YXRpYyB2b2lkIGlwbW11 X2N0eF93cml0ZV9hbGwoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlZywgdWludDMyX3QgZGF0YSkKK3sK KyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11 KGRvbWFpbi0+ZCktPmFyY2gucHJpdjsKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmNh Y2hlX2RvbWFpbjsKKworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIGNhY2hlX2RvbWFpbiwgJnhl bl9kb21haW4tPmNhY2hlX2RvbWFpbnMsIGxpc3QgKQorICAgICAgICBpcG1tdV9jdHhfd3JpdGVf Y2FjaGUoY2FjaGVfZG9tYWluLCByZWcsIGRhdGEpOworCisgICAgaXBtbXVfY3R4X3dyaXRlX3Jv b3QoZG9tYWluLCByZWcsIGRhdGEpOworfQorCisvKiBUTEIgYW5kIG1pY3JvLVRMQiBNYW5hZ2Vt ZW50ICovCisKKy8qIFdhaXQgZm9yIGFueSBwZW5kaW5nIFRMQiBpbnZhbGlkYXRpb25zIHRvIGNv bXBsZXRlLiAqLworc3RhdGljIHZvaWQgaXBtbXVfdGxiX3N5bmMoc3RydWN0IGlwbW11X3Ztc2Ff ZG9tYWluICpkb21haW4pCit7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKworICAgIHdo aWxlICggaXBtbXVfY3R4X3JlYWRfcm9vdChkb21haW4sIElNQ1RSKSAmIElNQ1RSX0ZMVVNIICkK KyAgICB7CisgICAgICAgIGNwdV9yZWxheCgpOworICAgICAgICBpZiAoICsrY291bnQgPT0gVExC X0xPT1BfVElNRU9VVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldl9lcnJfcmF0ZWxpbWl0 ZWQoZG9tYWluLT5tbXUtPmRldiwgIlRMQiBzeW5jIHRpbWVkIG91dCAtLSBNTVUgbWF5IGJlIGRl YWRsb2NrZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVk ZWxheSgxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X3RsYl9pbnZhbGlkYXRlKHN0 cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAgIHVpbnQzMl90IGRhdGE7CisK KyAgICBkYXRhID0gaXBtbXVfY3R4X3JlYWRfcm9vdChkb21haW4sIElNQ1RSKTsKKyAgICBkYXRh IHw9IElNQ1RSX0ZMVVNIOworICAgIGlwbW11X2N0eF93cml0ZV9hbGwoZG9tYWluLCBJTUNUUiwg ZGF0YSk7CisKKyAgICBpcG1tdV90bGJfc3luYyhkb21haW4pOworfQorCisvKiBFbmFibGUgTU1V IHRyYW5zbGF0aW9uIGZvciB0aGUgbWljcm8tVExCLiAqLworc3RhdGljIHZvaWQgaXBtbXVfdXRs Yl9lbmFibGUoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXRsYikKK3sKKyAgICBzdHJ1Y3QgaXBtbXVf dm1zYV9kZXZpY2UgKm1tdSA9IGRvbWFpbi0+bW11OworCisgICAgLyoKKyAgICAgKiBUT0RPOiBS ZWZlcmVuY2UtY291bnQgdGhlIG1pY3JvLVRMQiBhcyBzZXZlcmFsIGJ1cyBtYXN0ZXJzIGNhbiBi ZQorICAgICAqIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBtaWNyby1UTEIuIFByZXZlbnQgdGhlIHVz ZSBjYXNlcyB3aGVyZQorICAgICAqIHRoZSBzYW1lIG1pY3JvLVRMQiBjb3VsZCBiZSBzaGFyZWQg YmV0d2VlbiBtdWx0aXBsZSBYZW4gZG9tYWlucy4KKyAgICAgKi8KKyAgICBpcG1tdV93cml0ZSht bXUsIElNVUFTSUQodXRsYiksIDApOworICAgIGlwbW11X3dyaXRlKG1tdSwgSU1VQ1RSKHV0bGIp LCBpcG1tdV9yZWFkKG1tdSwgSU1VQ1RSKHV0bGIpKSB8CisgICAgICAgICAgICAgICAgSU1VQ1RS X1RUU0VMX01NVShkb21haW4tPmNvbnRleHRfaWQpIHwgSU1VQ1RSX01NVUVOKTsKK30KKworLyog RGlzYWJsZSBNTVUgdHJhbnNsYXRpb24gZm9yIHRoZSBtaWNyby1UTEIuICovCitzdGF0aWMgdm9p ZCBpcG1tdV91dGxiX2Rpc2FibGUoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHV0bGIpCit7CisgICAg c3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUgPSBkb21haW4tPm1tdTsKKworICAgIGlwbW11 X3dyaXRlKG1tdSwgSU1VQ1RSKHV0bGIpLCAwKTsKK30KKworLyogRG9tYWluL0NvbnRleHQgTWFu YWdlbWVudCAqLworc3RhdGljIGludCBpcG1tdV9kb21haW5fYWxsb2NhdGVfY29udGV4dChzdHJ1 Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4pCit7CisgICAgdW5z aWduZWQgbG9uZyBmbGFnczsKKyAgICBpbnQgcmV0OworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUo Jm1tdS0+bG9jaywgZmxhZ3MpOworCisgICAgcmV0ID0gZmluZF9maXJzdF96ZXJvX2JpdChtbXUt PmN0eCwgbW11LT5udW1fY3R4KTsKKyAgICBpZiAoIHJldCAhPSBtbXUtPm51bV9jdHggKQorICAg IHsKKyAgICAgICAgbW11LT5kb21haW5zW3JldF0gPSBkb21haW47CisgICAgICAgIHNldF9iaXQo cmV0LCBtbXUtPmN0eCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0ID0gLUVCVVNZOwor CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW11LT5sb2NrLCBmbGFncyk7CisKKyAgICBy ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpcG1tdV9kb21haW5fZnJlZV9jb250ZXh0KHN0 cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dF9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25n IGZsYWdzOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1tdS0+bG9jaywgZmxhZ3MpOworCisg ICAgY2xlYXJfYml0KGNvbnRleHRfaWQsIG1tdS0+Y3R4KTsKKyAgICBtbXUtPmRvbWFpbnNbY29u dGV4dF9pZF0gPSBOVUxMOworCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW11LT5sb2Nr LCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfZG9tYWluX2luaXRfY29udGV4dChzdHJ1 Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbikKK3sKKyAgICB1aW50NjRfdCB0dGJyOworICAg IHVpbnQzMl90IHRzejA7CisgICAgaW50IHJldDsKKworICAgIC8qIEZpbmQgYW4gdW51c2VkIGNv bnRleHQuICovCisgICAgcmV0ID0gaXBtbXVfZG9tYWluX2FsbG9jYXRlX2NvbnRleHQoZG9tYWlu LT5tbXUtPnJvb3QsIGRvbWFpbik7CisgICAgaWYgKCByZXQgPCAwICkKKyAgICAgICAgcmV0dXJu IHJldDsKKworICAgIGRvbWFpbi0+Y29udGV4dF9pZCA9IHJldDsKKworICAgIC8qCisgICAgICog VFRCUjAKKyAgICAgKiBVc2UgUDJNIHRhYmxlIGZvciB0aGlzIFhlbiBkb21haW4uCisgICAgICov CisgICAgQVNTRVJUKGRvbWFpbi0+ZCAhPSBOVUxMKTsKKyAgICB0dGJyID0gcGFnZV90b19tYWRk cihkb21haW4tPmQtPmFyY2gucDJtLnJvb3QpOworCisgICAgZGV2X2luZm8oZG9tYWluLT5tbXUt PnJvb3QtPmRldiwgIiVwZDogU2V0IElQTU1VIGNvbnRleHQgJXUgKHBnZCAweCUiUFJJeDY0Iilc biIsCisgICAgICAgICAgICAgZG9tYWluLT5kLCBkb21haW4tPmNvbnRleHRfaWQsIHR0YnIpOwor CisgICAgaXBtbXVfY3R4X3dyaXRlX3Jvb3QoZG9tYWluLCBJTVRUTEJSMCwgdHRiciAmIElNVFRM QlIwX1RUQlJfTUFTSyk7CisgICAgaXBtbXVfY3R4X3dyaXRlX3Jvb3QoZG9tYWluLCBJTVRUVUJS MCwgKHR0YnIgPj4gMzIpICYgSU1UVFVCUjBfVFRCUl9NQVNLKTsKKworICAgIC8qCisgICAgICog VFRCQ1IKKyAgICAgKiBXZSB1c2UgbG9uZyBkZXNjcmlwdG9ycyBhbmQgYWxsb2NhdGUgdGhlIHdo b2xlICJwMm1faXBhX2JpdHMiIElQQSBzcGFjZQorICAgICAqIHRvIFRUQlIwLiBVc2UgNEtCIHBh Z2UgZ3JhbnVsZS4gU3RhcnQgcGFnZSB0YWJsZSB3YWxrcyBhdCBmaXJzdCBsZXZlbC4KKyAgICAg KiBBbHdheXMgYnlwYXNzIHN0YWdlIDEgdHJhbnNsYXRpb24uCisgICAgICovCisgICAgdHN6MCA9 ICg2NCAtIHAybV9pcGFfYml0cykgPDwgSU1UVEJDUl9UU1owX1NISUZUOworICAgIGlwbW11X2N0 eF93cml0ZV9yb290KGRvbWFpbiwgSU1UVEJDUiwgSU1UVEJDUl9FQUUgfCBJTVRUQkNSX1BNQiB8 CisgICAgICAgICAgICAgICAgICAgICAgICAgSU1UVEJDUl9TTDBfTFZMXzEgfCB0c3owKTsKKwor ICAgIC8qCisgICAgICogSU1TVFIKKyAgICAgKiBDbGVhciBhbGwgaW50ZXJydXB0IGZsYWdzLgor ICAgICAqLworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1TVFIsIGlwbW11X2N0 eF9yZWFkX3Jvb3QoZG9tYWluLCBJTVNUUikpOworCisgICAgLyoKKyAgICAgKiBJTUNUUgorICAg ICAqIEVuYWJsZSB0aGUgTU1VIGFuZCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4gVGhlIGxvbmctZGVz Y3JpcHRvcgorICAgICAqIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1hdCBkb2Vzbid0IHVzZSBURVgg cmVtYXBwaW5nLiBEb24ndCBlbmFibGUgQUYKKyAgICAgKiBzb2Z0d2FyZSBtYW5hZ2VtZW50IGFz IHdlIGhhdmUgbm8gdXNlIGZvciBpdC4gVXNlIFZNU0F2OC02NCBtb2RlLgorICAgICAqIEVuYWJs ZSB0aGUgY29udGV4dCBmb3IgUm9vdCBJUE1NVSBvbmx5LiBGbHVzaCB0aGUgVExCIGFzIHJlcXVp cmVkCisgICAgICogd2hlbiBtb2RpZnlpbmcgdGhlIGNvbnRleHQgcmVnaXN0ZXJzLgorICAgICAq LworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1DVFIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgSU1DVFJfVkE2NCB8IElNQ1RSX0lOVEVOIHwgSU1DVFJfRkxVU0ggfCBJTUNU Ul9NTVVFTik7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXBtbXVfZG9tYWlu X2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbikKK3sKKyAg ICBpZiAoICFkb21haW4tPm1tdSApCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICog RGlzYWJsZSB0aGUgY29udGV4dCBmb3IgUm9vdCBJUE1NVSBvbmx5LiBGbHVzaCB0aGUgVExCIGFz IHJlcXVpcmVkCisgICAgICogd2hlbiBtb2RpZnlpbmcgdGhlIGNvbnRleHQgcmVnaXN0ZXJzLgor ICAgICAqLworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1DVFIsIElNQ1RSX0ZM VVNIKTsKKyAgICBpcG1tdV90bGJfc3luYyhkb21haW4pOworCisgICAgaXBtbXVfZG9tYWluX2Zy ZWVfY29udGV4dChkb21haW4tPm1tdS0+cm9vdCwgZG9tYWluLT5jb250ZXh0X2lkKTsKK30KKwor LyogRmF1bHQgSGFuZGxpbmcgKi8KK3N0YXRpYyB2b2lkIGlwbW11X2RvbWFpbl9pcnEoc3RydWN0 IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4pCit7CisgICAgY29uc3QgdWludDMyX3QgZXJyX21h c2sgPSBJTVNUUl9NSElUIHwgSU1TVFJfQUJPUlQgfCBJTVNUUl9QRiB8IElNU1RSX1RGOworICAg IHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11ID0gZG9tYWluLT5tbXU7CisgICAgdWludDMy X3Qgc3RhdHVzOworICAgIHVpbnQ2NF90IGlvdmE7CisKKyAgICBzdGF0dXMgPSBpcG1tdV9jdHhf cmVhZF9yb290KGRvbWFpbiwgSU1TVFIpOworICAgIGlmICggIShzdGF0dXMgJiBlcnJfbWFzaykg KQorICAgICAgICByZXR1cm47CisKKyAgICBpb3ZhID0gaXBtbXVfY3R4X3JlYWRfcm9vdChkb21h aW4sIElNRUxBUikgfAorICAgICAgICAoKHVpbnQ2NF90KWlwbW11X2N0eF9yZWFkX3Jvb3QoZG9t YWluLCBJTUVVQVIpIDw8IDMyKTsKKworICAgIC8qCisgICAgICogQ2xlYXIgdGhlIGVycm9yIHN0 YXR1cyBmbGFncy4gVW5saWtlIHRyYWRpdGlvbmFsIGludGVycnVwdCBmbGFnCisgICAgICogcmVn aXN0ZXJzIHRoYXQgbXVzdCBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSwgdGhpcyBzdGF0dXMgcmVn aXN0ZXIKKyAgICAgKiBzZWVtcyB0byByZXF1aXJlIDAuIFRoZSBlcnJvciBhZGRyZXNzIHJlZ2lz dGVyIG11c3QgYmUgcmVhZCBiZWZvcmUsCisgICAgICogb3RoZXJ3aXNlIGl0cyB2YWx1ZSB3aWxs IGJlIDAuCisgICAgICovCisgICAgaXBtbXVfY3R4X3dyaXRlX3Jvb3QoZG9tYWluLCBJTVNUUiwg MCk7CisKKyAgICAvKiBMb2cgZmF0YWwgZXJyb3JzLiAqLworICAgIGlmICggc3RhdHVzICYgSU1T VFJfTUhJVCApCisgICAgICAgIGRldl9lcnJfcmF0ZWxpbWl0ZWQobW11LT5kZXYsICIlcGQ6IE11 bHRpcGxlIFRMQiBoaXRzIEAweCUiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb21haW4tPmQsIGlvdmEpOworICAgIGlmICggc3RhdHVzICYgSU1TVFJfQUJPUlQgKQor ICAgICAgICBkZXZfZXJyX3JhdGVsaW1pdGVkKG1tdS0+ZGV2LCAiJXBkOiBQYWdlIFRhYmxlIFdh bGsgQWJvcnQgQDB4JSJQUkl4NjQiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv bWFpbi0+ZCwgaW92YSk7CisKKyAgICAvKiBSZXR1cm4gaWYgaXQgaXMgbmVpdGhlciBQZXJtaXNz aW9uIEZhdWx0IG5vciBUcmFuc2xhdGlvbiBGYXVsdC4gKi8KKyAgICBpZiAoICEoc3RhdHVzICYg KElNU1RSX1BGIHwgSU1TVFJfVEYpKSApCisgICAgICAgIHJldHVybjsKKworICAgIGRldl9lcnJf cmF0ZWxpbWl0ZWQobW11LT5kZXYsICIlcGQ6IFVuaGFuZGxlZCBmYXVsdDogc3RhdHVzIDB4JTA4 eCBpb3ZhIDB4JSJQUkl4NjQiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluLT5k LCBzdGF0dXMsIGlvdmEpOworfQorCitzdGF0aWMgdm9pZCBpcG1tdV9pcnEoaW50IGlycSwgdm9p ZCAqZGV2LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBzdHJ1Y3QgaXBtbXVf dm1zYV9kZXZpY2UgKm1tdSA9IGRldjsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1tdS0+bG9jaywgZmxhZ3Mp OworCisgICAgLyoKKyAgICAgKiBXaGVuIGludGVycnVwdCBhcnJpdmVzLCB3ZSBkb24ndCBrbm93 IHRoZSBjb250ZXh0IGl0IGlzIHJlbGF0ZWQgdG8uCisgICAgICogU28sIGNoZWNrIGludGVycnVw dHMgZm9yIGFsbCBhY3RpdmUgY29udGV4dHMgdG8gbG9jYXRlIGEgY29udGV4dAorICAgICAqIHdp dGggc3RhdHVzIGJpdHMgc2V0LgorICAgICovCisgICAgZm9yICggaSA9IDA7IGkgPCBtbXUtPm51 bV9jdHg7IGkrKyApCisgICAgeworICAgICAgICBpZiAoICFtbXUtPmRvbWFpbnNbaV0gKQorICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlwbW11X2RvbWFpbl9pcnEobW11LT5kb21haW5z W2ldKTsKKyAgICB9CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbXUtPmxvY2ssIGZs YWdzKTsKK30KKworLyogTWFzdGVyIGRldmljZXMgbWFuYWdlbWVudCAqLworc3RhdGljIGludCBp cG1tdV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICBz dHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXZfaW9tbXVfZndzcGVjX2dldChkZXYpOwor ICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11ID0gdG9faXBtbXUoZGV2KTsKKyAgICB1 bnNpZ25lZCBpbnQgaTsKKworICAgIGlmICggIW1tdSApCisgICAgeworICAgICAgICBkZXZfZXJy KGRldiwgIkNhbm5vdCBhdHRhY2ggdG8gSVBNTVVcbiIpOworICAgICAgICByZXR1cm4gLUVOWElP OworICAgIH0KKworICAgIGlmICggIWRvbWFpbi0+bW11ICkKKyAgICB7CisgICAgICAgIC8qIFRo ZSBkb21haW4gaGFzbid0IGJlZW4gdXNlZCB5ZXQsIGluaXRpYWxpemUgaXQuICovCisgICAgICAg IGRvbWFpbi0+bW11ID0gbW11OworCisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGhhdmUgYWxy ZWFkeSBlbmFibGVkIGNvbnRleHQgZm9yIFJvb3QgSVBNTVUgYXNzaWduZWQgdG8gdGhpcworICAg ICAgICAgKiBYZW4gZG9tYWluIGluIGlwbW11X2RvbWFpbl9pbml0X2NvbnRleHQoKS4KKyAgICAg ICAgICogRW5hYmxlIHRoZSBjb250ZXh0IGZvciBDYWNoZSBJUE1NVSBvbmx5LiBGbHVzaCB0aGUg VExCIGFzIHJlcXVpcmVkCisgICAgICAgICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSBjb250ZXh0IHJl Z2lzdGVycy4KKyAgICAgICAgICovCisgICAgICAgIGlwbW11X2N0eF93cml0ZV9jYWNoZShkb21h aW4sIElNQ1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBtbXVfY3R4X3JlYWRf cm9vdChkb21haW4sIElNQ1RSKSB8IElNQ1RSX0ZMVVNIKTsKKworICAgICAgICBkZXZfaW5mbyhk ZXYsICJVc2luZyBJUE1NVSBjb250ZXh0ICV1XG4iLCBkb21haW4tPmNvbnRleHRfaWQpOworICAg IH0KKyAgICBlbHNlIGlmICggZG9tYWluLT5tbXUgIT0gbW11ICkKKyAgICB7CisgICAgICAgIC8q CisgICAgICAgICAqIFNvbWV0aGluZyBpcyB3cm9uZywgd2UgY2FuJ3QgYXR0YWNoIHR3byBtYXN0 ZXIgZGV2aWNlcyB1c2luZworICAgICAgICAgKiBkaWZmZXJlbnQgSU9NTVVzIHRvIHRoZSBzYW1l IElQTU1VIGRvbWFpbi4KKyAgICAgICAgICovCisgICAgICAgIGRldl9lcnIoZGV2LCAiQ2FuJ3Qg YXR0YWNoIElQTU1VICVzIHRvIGRvbWFpbiBvbiBJUE1NVSAlc1xuIiwKKyAgICAgICAgICAgICAg ICBkZXZfbmFtZShtbXUtPmRldiksIGRldl9uYW1lKGRvbWFpbi0+bW11LT5kZXYpKTsKKyAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZGV2X2luZm8oZGV2 LCAiUmV1c2luZyBJUE1NVSBjb250ZXh0ICV1XG4iLCBkb21haW4tPmNvbnRleHRfaWQpOworCisg ICAgZm9yICggaSA9IDA7IGkgPCBmd3NwZWMtPm51bV9pZHM7ICsraSApCisgICAgICAgIGlwbW11 X3V0bGJfZW5hYmxlKGRvbWFpbiwgZndzcGVjLT5pZHNbaV0pOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGlwbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGlwbW11X3Ztc2FfZG9t YWluICpkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXZfaW9tbXVf ZndzcGVjX2dldChkZXYpOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDA7 IGkgPCBmd3NwZWMtPm51bV9pZHM7ICsraSApCisgICAgICAgIGlwbW11X3V0bGJfZGlzYWJsZShk b21haW4sIGZ3c3BlYy0+aWRzW2ldKTsKK30KKworc3RhdGljIGludCBpcG1tdV9pbml0X3BsYXRm b3JtX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkdF9waGFuZGxlX2FyZ3MgKmFyZ3MpCit7CisgICAgc3RydWN0 IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2X2lvbW11X2Z3c3BlY19nZXQoZGV2KTsKKyAgICBz dHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdTsKKworICAgIG1tdSA9IGlwbW11X2ZpbmRfbW11 X2J5X2RldihkdF90b19kZXYoYXJncy0+bnApKTsKKyAgICBpZiAoICFtbXUgKQorICAgICAgICBy ZXR1cm4gLUVOT0RFVjsKKworICAgIGZ3c3BlYy0+aW9tbXVfcHJpdiA9IHh6YWxsb2Moc3RydWN0 IGlwbW11X3Ztc2FfeGVuX2RldmljZSk7CisgICAgaWYgKCAhZndzcGVjLT5pb21tdV9wcml2ICkK KyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICBzZXRfaXBtbXUoZGV2LCBtbXUpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2RldmljZV9yZXNldChzdHJ1Y3Qg aXBtbXVfdm1zYV9kZXZpY2UgKm1tdSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIC8q IERpc2FibGUgYWxsIGNvbnRleHRzLiAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbW11LT5udW1f Y3R4OyArK2kgKQorICAgICAgICBpcG1tdV93cml0ZShtbXUsIGkgKiBJTV9DVFhfU0laRSArIElN Q1RSLCAwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBmYWN0IHRo YXQgUm9vdCBJUE1NVSBkZXZpY2UgaXMgYmVpbmcgcHJvYmVkCisgKiB0aGUgZmlyc3QuIElmIG5v dCB0aGUgY2FzZSwgaXQgZGVuaWVzIGZ1cnRoZXIgQ2FjaGUgSVBNTVUgZGV2aWNlIHByb2Jlcwor ICogKHJldHVybnMgdGhlIC1FQUdBSU4pIHVudGlsIHRoZSBSb290IElQTU1VIGRldmljZSBoYXMg YmVlbiByZWdpc3RlcmVkCisgKiBmb3Igc3VyZS4KKyAqLworc3RhdGljIGludCBpcG1tdV9wcm9i ZShzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKm5vZGUpCit7CisgICAgc3RydWN0IGlwbW11X3Ztc2Ff ZGV2aWNlICptbXU7CisgICAgdWludDY0X3QgYWRkciwgc2l6ZTsKKyAgICBpbnQgaXJxLCByZXQ7 CisKKyAgICBtbXUgPSB4emFsbG9jKHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSk7CisgICAgaWYg KCAhbW11ICkKKyAgICB7CisgICAgICAgIGRldl9lcnIoJm5vZGUtPmRldiwgIkNhbm5vdCBhbGxv Y2F0ZSBkZXZpY2UgZGF0YVxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKwor ICAgIG1tdS0+ZGV2ID0gJm5vZGUtPmRldjsKKyAgICBtbXUtPm51bV91dGxicyA9IElQTU1VX1VU TEJfTUFYOworICAgIG1tdS0+bnVtX2N0eCA9IElQTU1VX0NUWF9NQVg7CisgICAgc3Bpbl9sb2Nr X2luaXQoJm1tdS0+bG9jayk7CisgICAgYml0bWFwX3plcm8obW11LT5jdHgsIElQTU1VX0NUWF9N QVgpOworCisgICAgLyogTWFwIEkvTyBtZW1vcnkgYW5kIHJlcXVlc3QgSVJRLiAqLworICAgIHJl dCA9IGR0X2RldmljZV9nZXRfYWRkcmVzcyhub2RlLCAwLCAmYWRkciwgJnNpemUpOworICAgIGlm ICggcmV0ICkKKyAgICB7CisgICAgICAgIGRldl9lcnIoJm5vZGUtPmRldiwgIkZhaWxlZCB0byBn ZXQgTU1JT1xuIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIG1tdS0+YmFzZSA9 IGlvcmVtYXBfbm9jYWNoZShhZGRyLCBzaXplKTsKKyAgICBpZiAoICFtbXUtPmJhc2UgKQorICAg IHsKKyAgICAgICAgZGV2X2Vycigmbm9kZS0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgTU1JTyAo YWRkciAweCUiUFJJeDY0IiBzaXplIDB4JSJQUkl4NjQiKVxuIiwKKyAgICAgICAgICAgICAgICBh ZGRyLCBzaXplKTsKKyAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgZ290byBvdXQ7Cisg ICAgfQorCisgICAgLyoKKyAgICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBJUE1NVSBub2RlIGlzIGEg Um9vdCBkZXZpY2UgYnkgY2hlY2tpbmcgZm9yCisgICAgICogdGhlIGxhY2sgb2YgcmVuZXNhcyxp cG1tdS1tYWluIHByb3BlcnR5LgorICAgICAqLworICAgIGlmICggIWR0X2ZpbmRfcHJvcGVydHko bm9kZSwgInJlbmVzYXMsaXBtbXUtbWFpbiIsIE5VTEwpICkKKyAgICAgICAgbW11LT5yb290ID0g bW11OworICAgIGVsc2UKKyAgICAgICAgbW11LT5yb290ID0gaXBtbXVfZmluZF9yb290KCk7CisK KyAgICAvKiBXYWl0IHVudGlsIHRoZSBSb290IGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGZv ciBzdXJlLiAqLworICAgIGlmICggIW1tdS0+cm9vdCApCisgICAgeworICAgICAgICBkZXZfZXJy KCZub2RlLT5kZXYsICJSb290IElQTU1VIGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0XG4iKTsK KyAgICAgICAgcmV0ID0gLUVBR0FJTjsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg LyogUm9vdCBkZXZpY2VzIGhhdmUgbWFuZGF0b3J5IElSUXMuICovCisgICAgaWYgKCBpcG1tdV9p c19yb290KG1tdSkgKQorICAgIHsKKyAgICAgICAgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShub2Rl LCAwKTsKKyAgICAgICAgaWYgKCBpcnEgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2 X2Vycigmbm9kZS0+ZGV2LCAiTm8gSVJRIGZvdW5kXG4iKTsKKyAgICAgICAgICAgIHJldCA9IGly cTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gcmVx dWVzdF9pcnEoaXJxLCAwLCBpcG1tdV9pcnEsIGRldl9uYW1lKCZub2RlLT5kZXYpLCBtbXUpOwor ICAgICAgICBpZiAoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZfZXJyKCZu b2RlLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlEgJWRcbiIsIGlycSk7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGlwbW11X2RldmljZV9yZXNldChtbXUp OworCisgICAgICAgIC8qCisgICAgICAgICAqIFVzZSBzdGFnZSAyIHRyYW5zbGF0aW9uIHRhYmxl IGZvcm1hdCB3aGVuIHN0YWdlIDIgdHJhbnNsYXRpb24KKyAgICAgICAgICogZW5hYmxlZC4KKyAg ICAgICAgICovCisgICAgICAgIGlwbW11X3dyaXRlKG1tdSwgSU1TQVVYQ1RMUiwKKyAgICAgICAg ICAgICAgICAgICAgaXBtbXVfcmVhZChtbXUsIElNU0FVWENUTFIpIHwgSU1TQVVYQ1RMUl9TMlBU RSk7CisKKyAgICAgICAgZGV2X2luZm8oJm5vZGUtPmRldiwgIklQTU1VIGNvbnRleHQgMCBpcyBy ZXNlcnZlZFxuIik7CisgICAgICAgIHNldF9iaXQoMCwgbW11LT5jdHgpOworICAgIH0KKworICAg IHNwaW5fbG9jaygmaXBtbXVfZGV2aWNlc19sb2NrKTsKKyAgICBsaXN0X2FkZCgmbW11LT5saXN0 LCAmaXBtbXVfZGV2aWNlcyk7CisgICAgc3Bpbl91bmxvY2soJmlwbW11X2RldmljZXNfbG9jayk7 CisKKyAgICBkZXZfaW5mbygmbm9kZS0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBJUE1NVVxuIiwKKyAg ICAgICAgICAgICBpcG1tdV9pc19yb290KG1tdSkgPyAiUm9vdCIgOiAiQ2FjaGUiKTsKKworICAg IHJldHVybiAwOworCitvdXQ6CisgICAgaWYgKCBtbXUtPmJhc2UgKQorICAgICAgICBpb3VubWFw KG1tdS0+YmFzZSk7CisgICAgeGZyZWUobW11KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8q IFhlbiBJT01NVSBvcHMgKi8KK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGlwbW11X2lvdGxiX2Zs dXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHN0cnVjdCBpcG1tdV92bXNhX3hlbl9k b21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKworICAgIGlmICgg IXhlbl9kb21haW4gfHwgIXhlbl9kb21haW4tPnJvb3RfZG9tYWluICkKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICBzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworICAgIGlwbW11X3RsYl9p bnZhbGlkYXRlKHhlbl9kb21haW4tPnJvb3RfZG9tYWluKTsKKyAgICBzcGluX3VubG9jaygmeGVu X2RvbWFpbi0+bG9jayk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX211c3Rf Y2hlY2sgaXBtbXVfaW90bGJfZmx1c2goc3RydWN0IGRvbWFpbiAqZCwgZGZuX3QgZGZuLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2Vf Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgZmx1c2hfZmxhZ3MpCit7CisgICAgQVNTRVJUKGZsdXNoX2ZsYWdzKTsKKworICAgIC8q IFRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aXZlIFRMQiBmbHVzaC4gKi8KKyAg ICByZXR1cm4gaXBtbXVfaW90bGJfZmx1c2hfYWxsKGQpOworfQorCitzdGF0aWMgc3RydWN0IGlw bW11X3Ztc2FfZG9tYWluICppcG1tdV9nZXRfY2FjaGVfZG9tYWluKHN0cnVjdCBkb21haW4gKmQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZG9tYWlu ICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisgICAgc3RydWN0IGlwbW11 X3Ztc2FfZGV2aWNlICptbXUgPSB0b19pcG1tdShkZXYpOworICAgIHN0cnVjdCBpcG1tdV92bXNh X2RvbWFpbiAqZG9tYWluOworCisgICAgaWYgKCAhbW11ICkKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICAvKgorICAgICAqIExvb3AgdGhyb3VnaCBhbGwgQ2FjaGUgSVBNTVUgZG9tYWlucyBh c3NvY2lhdGVkIHdpdGggdGhpcyBYZW4gZG9tYWluCisgICAgICogdG8gbG9jYXRlIGFuIElQTU1V IGRvbWFpbiB0aGlzIElQTU1VIGRldmljZSBpcyBhc3NpZ25lZCB0by4KKyAgICAgKi8KKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KCBkb21haW4sICZ4ZW5fZG9tYWluLT5jYWNoZV9kb21haW5zLCBs aXN0ICkKKyAgICB7CisgICAgICAgIGlmICggZG9tYWluLT5tbXUgPT0gbW11ICkKKyAgICAgICAg ICAgIHJldHVybiBkb21haW47CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmlwbW11X2FsbG9jX2NhY2hlX2RvbWFpbihzdHJ1 Y3QgZG9tYWluICpkKQoreworICAgIHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4gKnhlbl9k b21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9k b21haW4gKmRvbWFpbjsKKworICAgIGRvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2Ff ZG9tYWluKTsKKyAgICBpZiAoICFkb21haW4gKQorICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKworICAgIC8qCisgICAgICogV2UgZG9uJ3QgYXNzaWduIHRoZSBDYWNoZSBJUE1NVSBk ZXZpY2UgaGVyZSwgaXQgd2lsbCBiZSBhc3NpZ25lZCB3aGVuCisgICAgICogYXR0YWNoaW5nIG1h c3RlciBkZXZpY2UgdG8gdGhpcyBkb21haW4gaW4gaXBtbXVfYXR0YWNoX2RldmljZSgpLgorICAg ICAqIGRvbWFpbi0+bW11ID0gTlVMTDsKKyAgICAgKi8KKworICAgIGRvbWFpbi0+ZCA9IGQ7Cisg ICAgLyogVXNlIHRoZSBzYW1lIGNvbnRleHQgbWFwcGVkIHRvIHRoaXMgWGVuIGRvbWFpbi4gKi8K KyAgICBkb21haW4tPmNvbnRleHRfaWQgPSB4ZW5fZG9tYWluLT5yb290X2RvbWFpbi0+Y29udGV4 dF9pZDsKKworICAgIHJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2ZyZWVf Y2FjaGVfZG9tYWluKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAgIGxp c3RfZGVsKCZkb21haW4tPmxpc3QpOworICAgIC8qCisgICAgICogRGlzYWJsZSB0aGUgY29udGV4 dCBmb3IgQ2FjaGUgSVBNTVUgb25seS4gRmx1c2ggdGhlIFRMQiBhcyByZXF1aXJlZAorICAgICAq IHdoZW4gbW9kaWZ5aW5nIHRoZSBjb250ZXh0IHJlZ2lzdGVycy4KKyAgICAgKi8KKyAgICBpcG1t dV9jdHhfd3JpdGVfY2FjaGUoZG9tYWluLCBJTUNUUiwgSU1DVFJfRkxVU0gpOworICAgIHhmcmVl KGRvbWFpbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmlwbW11X2Fs bG9jX3Jvb3RfZG9tYWluKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgc3RydWN0IGlwbW11X3Zt c2FfZG9tYWluICpkb21haW47CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICpyb290Owor ICAgIGludCByZXQ7CisKKyAgICAvKiBJZiB3ZSBhcmUgaGVyZSB0aGVuIFJvb3QgZGV2aWNlIG11 c3QgaGFzIGJlZW4gcmVnaXN0ZXJlZC4gKi8KKyAgICByb290ID0gaXBtbXVfZmluZF9yb290KCk7 CisgICAgaWYgKCAhcm9vdCApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiaXBt bXU6IFVuYWJsZSB0byBsb2NhdGUgUm9vdCBJUE1NVVxuIik7CisgICAgICAgIHJldHVybiBFUlJf UFRSKC1FTk9ERVYpOworICAgIH0KKworICAgIGRvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGlwbW11 X3Ztc2FfZG9tYWluKTsKKyAgICBpZiAoICFkb21haW4gKQorICAgICAgICByZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKKworICAgIGRvbWFpbi0+bW11ID0gcm9vdDsKKyAgICBkb21haW4tPmQgPSBk OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCB0byBiZSBtYXBwZWQgdG8gdGhpcyBY ZW4gZG9tYWluLiAqLworICAgIHJldCA9IGlwbW11X2RvbWFpbl9pbml0X2NvbnRleHQoZG9tYWlu KTsKKyAgICBpZiAoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgZGV2X2Vycihyb290LT5kZXYs ICIlcGQ6IFVuYWJsZSB0byBpbml0aWFsaXplIElQTU1VIGNvbnRleHRcbiIsIGQpOworICAgICAg ICB4ZnJlZShkb21haW4pOworICAgICAgICByZXR1cm4gRVJSX1BUUihyZXQpOworICAgIH0KKwor ICAgIHJldHVybiBkb21haW47Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2ZyZWVfcm9vdF9kb21h aW4oc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4pCit7CisgICAgaXBtbXVfZG9tYWlu X2Rlc3Ryb3lfY29udGV4dChkb21haW4pOworICAgIHhmcmVlKGRvbWFpbik7Cit9CisKK3N0YXRp YyBpbnQgaXBtbXVfYXNzaWduX2RldmljZShzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwgc3Ry dWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IGZsYWcpCit7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9 IGRvbV9pb21tdShkKS0+YXJjaC5wcml2OworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAq ZG9tYWluOworICAgIGludCByZXQ7CisKKyAgICBpZiAoICF4ZW5fZG9tYWluICkKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoICF0b19pcG1tdShkZXYpICkKKyAgICAgICAgcmV0 dXJuIC1FTk9ERVY7CisKKyAgICBzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworCisgICAg LyoKKyAgICAgKiBUaGUgSVBNTVUgY29udGV4dCBmb3IgdGhlIFhlbiBkb21haW4gaXMgbm90IGFs bG9jYXRlZCBiZWZvcmVoYW5kCisgICAgICogKGF0IHRoZSBYZW4gZG9tYWluIGNyZWF0aW9uIHRp bWUpLCBidXQgb24gZGVtYW5kIG9ubHksIHdoZW4gdGhlIGZpcnN0CisgICAgICogbWFzdGVyIGRl dmljZSBiZWluZyBhdHRhY2hlZCB0byBpdC4KKyAgICAgKiBDcmVhdGUgUm9vdCBJUE1NVSBkb21h aW4gd2hpY2ggY29udGV4dCB3aWxsIGJlIG1hcHBlZCB0byB0aGlzIFhlbiBkb21haW4KKyAgICAg KiBpZiBub3QgZXhpdHMgeWV0LgorICAgICAqLworICAgIGlmICggIXhlbl9kb21haW4tPnJvb3Rf ZG9tYWluICkKKyAgICB7CisgICAgICAgIGRvbWFpbiA9IGlwbW11X2FsbG9jX3Jvb3RfZG9tYWlu KGQpOworICAgICAgICBpZiAoIElTX0VSUihkb21haW4pICkKKyAgICAgICAgeworICAgICAgICAg ICAgcmV0ID0gUFRSX0VSUihkb21haW4pOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IH0KKworICAgICAgICB4ZW5fZG9tYWluLT5yb290X2RvbWFpbiA9IGRvbWFpbjsKKyAgICB9CisK KyAgICBpZiAoIHRvX2RvbWFpbihkZXYpICkKKyAgICB7CisgICAgICAgIGRldl9lcnIoZGV2LCAi QWxyZWFkeSBhdHRhY2hlZCB0byBJUE1NVSBkb21haW5cbiIpOworICAgICAgICByZXQgPSAtRUVY SVNUOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1hc3RlciBk ZXZpY2VzIGJlaGluZCB0aGUgc2FtZSBDYWNoZSBJUE1NVSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhl IHNhbWUKKyAgICAgKiBDYWNoZSBJUE1NVSBkb21haW4uCisgICAgICogQmVmb3JlIGNyZWF0aW5n IG5ldyBJUE1NVSBkb21haW4gY2hlY2sgdG8gc2VlIGlmIHRoZSByZXF1aXJlZCBvbmUKKyAgICAg KiBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBYZW4gZG9tYWluLgorICAgICAqLworICAgIGRvbWFp biA9IGlwbW11X2dldF9jYWNoZV9kb21haW4oZCwgZGV2KTsKKyAgICBpZiAoICFkb21haW4gKQor ICAgIHsKKyAgICAgICAgLyogQ3JlYXRlIG5ldyBJUE1NVSBkb21haW4gdGhpcyBtYXN0ZXIgZGV2 aWNlIHdpbGwgYmUgYXR0YWNoZWQgdG8uICovCisgICAgICAgIGRvbWFpbiA9IGlwbW11X2FsbG9j X2NhY2hlX2RvbWFpbihkKTsKKyAgICAgICAgaWYgKCBJU19FUlIoZG9tYWluKSApCisgICAgICAg IHsKKyAgICAgICAgICAgIHJldCA9IFBUUl9FUlIoZG9tYWluKTsKKyAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hhaW4gbmV3IElQTU1VIGRvbWFpbiB0byB0 aGUgWGVuIGRvbWFpbi4gKi8KKyAgICAgICAgbGlzdF9hZGQoJmRvbWFpbi0+bGlzdCwgJnhlbl9k b21haW4tPmNhY2hlX2RvbWFpbnMpOworICAgIH0KKworICAgIHJldCA9IGlwbW11X2F0dGFjaF9k ZXZpY2UoZG9tYWluLCBkZXYpOworICAgIGlmICggcmV0ICkKKyAgICB7CisgICAgICAgIC8qCisg ICAgICAgICAqIERlc3Ryb3kgQ2FjaGUgSVBNTVUgZG9tYWluIG9ubHkgaWYgdGhlcmUgYXJlIG5v IG1hc3RlciBkZXZpY2VzCisgICAgICAgICAqIGF0dGFjaGVkIHRvIGl0LgorICAgICAgICAgKi8K KyAgICAgICAgaWYgKCAhZG9tYWluLT5yZWZjb3VudCApCisgICAgICAgICAgICBpcG1tdV9mcmVl X2NhY2hlX2RvbWFpbihkb21haW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBk b21haW4tPnJlZmNvdW50Kys7CisgICAgICAgIHNldF9kb21haW4oZGV2LCBkb21haW4pOworICAg IH0KKworb3V0OgorICAgIHNwaW5fdW5sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworICAgIHJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfZGVhc3NpZ25fZGV2aWNlKHN0cnVjdCBk b21haW4gKmQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV94 ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisgICAgc3Ry dWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4gPSB0b19kb21haW4oZGV2KTsKKworICAgIGlm ICggIWRvbWFpbiB8fCBkb21haW4tPmQgIT0gZCApCisgICAgeworICAgICAgICBkZXZfZXJyKGRl diwgIk5vdCBhdHRhY2hlZCB0byAlcGRcbiIsIGQpOworICAgICAgICByZXR1cm4gLUVTUkNIOwor ICAgIH0KKworICAgIHNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKyAgICBpcG1tdV9k ZXRhY2hfZGV2aWNlKGRvbWFpbiwgZGV2KTsKKyAgICBzZXRfZG9tYWluKGRldiwgTlVMTCk7Cisg ICAgZG9tYWluLT5yZWZjb3VudC0tOworCisgICAgLyoKKyAgICAgKiBEZXN0cm95IENhY2hlIElQ TU1VIGRvbWFpbiBvbmx5IGlmIHRoZXJlIGFyZSBubyBtYXN0ZXIgZGV2aWNlcworICAgICAqIGF0 dGFjaGVkIHRvIGl0LgorICAgICAqLworICAgIGlmICggIWRvbWFpbi0+cmVmY291bnQgKQorICAg ICAgICBpcG1tdV9mcmVlX2NhY2hlX2RvbWFpbihkb21haW4pOworCisgICAgc3Bpbl91bmxvY2so Jnhlbl9kb21haW4tPmxvY2spOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBt bXVfcmVhc3NpZ25fZGV2aWNlKHN0cnVjdCBkb21haW4gKnMsIHN0cnVjdCBkb21haW4gKnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZmbiwgIHN0cnVjdCBkZXZpY2Ug KmRldikKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIC8qIERvbid0IGFsbG93IHJlbWFwcGlu ZyBvbiBvdGhlciBkb21haW4gdGhhbiBod2RvbSAqLworICAgIGlmICggdCAmJiB0ICE9IGhhcmR3 YXJlX2RvbWFpbiApCisgICAgICAgIHJldHVybiAtRVBFUk07CisKKyAgICBpZiAoIHQgPT0gcyAp CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0ID0gaXBtbXVfZGVhc3NpZ25fZGV2aWNlKHMs IGRldik7CisgICAgaWYgKCByZXQgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKCB0 ICkKKyAgICB7CisgICAgICAgIC8qIE5vIGZsYWdzIGFyZSBkZWZpbmVkIGZvciBBUk0uICovCisg ICAgICAgIHJldCA9IGlwbW11X2Fzc2lnbl9kZXZpY2UodCwgZGV2Zm4sIGRldiwgMCk7CisgICAg ICAgIGlmICggcmV0ICkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfb2ZfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHRfcGhhbmRsZV9hcmdzICpzcGVjKQoreworICAgIGludCByZXQ7CisKKyAgICAv KgorICAgICAqIFBlcmZvcm0gc2FuaXR5IGNoZWNrIG9mIHBhc3NlZCBEVCBJT01NVSBzcGVjaWZp ZXIuIEVhY2ggbWFzdGVyIGRldmljZQorICAgICAqIGdldHMgbWljcm8tVExCIChkZXZpY2UgSUQp IGFzc2lnbm1lbnQgdmlhIHRoZSAiaW9tbXVzIiBwcm9wZXJ0eQorICAgICAqIGluIERULiBXZSBl eHBlY3QgI2lvbW11LWNlbGxzIHRvIGJlIDEgKE11bHRpcGxlLW1hc3RlciBJT01NVSkgYW5kCisg ICAgICogdGhpcyBjZWxsIGZvciB0aGUgbWljcm8tVExCIChkZXZpY2UgSUQpLgorICAgICAqLwor ICAgIGlmICggc3BlYy0+YXJnc19jb3VudCAhPSAxIHx8IHNwZWMtPmFyZ3NbMF0gPj0gSVBNTVVf VVRMQl9NQVggKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHJldCA9IGlvbW11X2Z3 c3BlY19hZGRfaWRzKGRldiwgc3BlYy0+YXJncywgMSk7CisgICAgaWYgKCByZXQgKQorICAgICAg ICByZXR1cm4gcmV0OworCisgICAgLyogSW5pdGlhbGl6ZSBvbmNlIC0geGxhdGUoKSB3aWxsIGNh bGwgbXVsdGlwbGUgdGltZXMuICovCisgICAgaWYgKCB0b19pcG1tdShkZXYpICkKKyAgICAgICAg cmV0dXJuIDA7CisKKyAgICByZXR1cm4gaXBtbXVfaW5pdF9wbGF0Zm9ybV9kZXZpY2UoZGV2LCBz cGVjKTsKK30KKworc3RhdGljIGludCBpcG1tdV9hZGRfZGV2aWNlKHU4IGRldmZuLCBzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisgICAgc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2X2lv bW11X2Z3c3BlY19nZXQoZGV2KTsKKworICAgIC8qIE9ubHkgbGV0IHRocm91Z2ggZGV2aWNlcyB0 aGF0IGhhdmUgYmVlbiB2ZXJpZmllZCBpbiB4bGF0ZSgpLiAqLworICAgIGlmICggIXRvX2lwbW11 KGRldikgKQorICAgICAgICByZXR1cm4gLUVOT0RFVjsKKworICAgIGlmICggZHRfZGV2aWNlX2lz X3Byb3RlY3RlZChkZXZfdG9fZHQoZGV2KSkgKQorICAgIHsKKyAgICAgICAgZGV2X2VycihkZXYs ICJBbHJlYWR5IGFkZGVkIHRvIElQTU1VXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FRVhJU1Q7Cisg ICAgfQorCisgICAgLyogTGV0IFhlbiBrbm93IHRoYXQgdGhlIG1hc3RlciBkZXZpY2UgaXMgcHJv dGVjdGVkIGJ5IGFuIElPTU1VLiAqLworICAgIGR0X2RldmljZV9zZXRfcHJvdGVjdGVkKGRldl90 b19kdChkZXYpKTsKKworICAgIGRldl9pbmZvKGRldiwgIkFkZGVkIG1hc3RlciBkZXZpY2UgKElQ TU1VICVzIG1pY3JvLVRMQnMgJXUpXG4iLAorICAgICAgICAgICAgIGRldl9uYW1lKGZ3c3BlYy0+ aW9tbXVfZGV2KSwgZndzcGVjLT5udW1faWRzKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGlwbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCit7CisgICAg c3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKworICAgIHhlbl9kb21h aW4gPSB4emFsbG9jKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4pOworICAgIGlmICggIXhl bl9kb21haW4gKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIHNwaW5fbG9ja19pbml0 KCZ4ZW5fZG9tYWluLT5sb2NrKTsKKyAgICBJTklUX0xJU1RfSEVBRCgmeGVuX2RvbWFpbi0+Y2Fj aGVfZG9tYWlucyk7CisgICAgLyoKKyAgICAgKiBXZSBkb24ndCBjcmVhdGUgUm9vdCBJUE1NVSBk b21haW4gaGVyZSwgaXQgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZAorICAgICAqIG9ubHksIHdo ZW4gYXR0YWNoaW5nIHRoZSBmaXJzdCBtYXN0ZXIgZGV2aWNlIHRvIHRoaXMgWGVuIGRvbWFpbiBp bgorICAgICAqIGlwbW11X2Fzc2lnbl9kZXZpY2UoKS4KKyAgICAgKiB4ZW5fZG9tYWluLT5yb290 X2RvbWFpbiA9IE5VTEw7CisgICAgKi8KKworICAgIGRvbV9pb21tdShkKS0+YXJjaC5wcml2ID0g eGVuX2RvbWFpbjsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2h3ZG9tX2lu aXQgaXBtbXVfaW9tbXVfaHdkb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIC8qIFNl dCB0byBmYWxzZSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQgb24gQVJNLiAqLworICAgIGlmICggaW9t bXVfaHdkb21faW5jbHVzaXZlICkKKyAgICAgICAgcHJpbnRrKFhFTkxPR19XQVJOSU5HICJpcG1t dTogbWFwLWluY2x1c2l2ZSBkb20wLWlvbW11IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIEFS TVxuIik7CisgICAgaW9tbXVfaHdkb21faW5jbHVzaXZlID0gZmFsc2U7CisgICAgaWYgKCBpb21t dV9od2RvbV9yZXNlcnZlZCA9PSAxICkKKyAgICAgICAgcHJpbnRrKFhFTkxPR19XQVJOSU5HICJp cG1tdTogbWFwLXJlc2VydmVkIGRvbTAtaW9tbXUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24g QVJNXG4iKTsKKyAgICBpb21tdV9od2RvbV9yZXNlcnZlZCA9IDA7CisKKyAgICBhcmNoX2lvbW11 X2h3ZG9tX2luaXQoZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2lvbW11X2RvbWFpbl90ZWFy ZG93bihzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21h aW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKworICAgIGlmICggIXhl bl9kb21haW4gKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIERlc3Ryb3kgUm9v dCBJUE1NVSBkb21haW4gd2hpY2ggY29udGV4dCBpcyBtYXBwZWQgdG8gdGhpcyBYZW4gZG9tYWlu CisgICAgICogaWYgZXhpdHMuCisgICAgICovCisgICAgaWYgKCB4ZW5fZG9tYWluLT5yb290X2Rv bWFpbiApCisgICAgICAgIGlwbW11X2ZyZWVfcm9vdF9kb21haW4oeGVuX2RvbWFpbi0+cm9vdF9k b21haW4pOworCisgICAgLyoKKyAgICAgKiBXZSBhc3N1bWUgdGhhdCBhbGwgbWFzdGVyIGRldmlj ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0YWNoZWQgZnJvbQorICAgICAqIHRoaXMgWGVuIGRvbWFp biBhbmQgdGhlcmUgbXVzdCBiZSBubyBhc3NvY2lhdGVkIENhY2hlIElQTU1VIGRvbWFpbnMKKyAg ICAgKiBpbiB1c2UuCisgICAgICovCisgICAgQVNTRVJUKGxpc3RfZW1wdHkoJnhlbl9kb21haW4t PmNhY2hlX2RvbWFpbnMpKTsKKyAgICB4ZnJlZSh4ZW5fZG9tYWluKTsKKyAgICBkb21faW9tbXUo ZCktPmFyY2gucHJpdiA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3Bz IGlwbW11X2lvbW11X29wcyA9Cit7CisgICAgLmluaXQgICAgICAgICAgICA9IGlwbW11X2lvbW11 X2RvbWFpbl9pbml0LAorICAgIC5od2RvbV9pbml0ICAgICAgPSBpcG1tdV9pb21tdV9od2RvbV9p bml0LAorICAgIC50ZWFyZG93biAgICAgICAgPSBpcG1tdV9pb21tdV9kb21haW5fdGVhcmRvd24s CisgICAgLmlvdGxiX2ZsdXNoICAgICA9IGlwbW11X2lvdGxiX2ZsdXNoLAorICAgIC5pb3RsYl9m bHVzaF9hbGwgPSBpcG1tdV9pb3RsYl9mbHVzaF9hbGwsCisgICAgLmFzc2lnbl9kZXZpY2UgICA9 IGlwbW11X2Fzc2lnbl9kZXZpY2UsCisgICAgLnJlYXNzaWduX2RldmljZSA9IGlwbW11X3JlYXNz aWduX2RldmljZSwKKyAgICAubWFwX3BhZ2UgICAgICAgID0gYXJtX2lvbW11X21hcF9wYWdlLAor ICAgIC51bm1hcF9wYWdlICAgICAgPSBhcm1faW9tbXVfdW5tYXBfcGFnZSwKKyAgICAub2ZfeGxh dGUgICAgICAgID0gaXBtbXVfb2ZfeGxhdGUsCisgICAgLmFkZF9kZXZpY2UgICAgICA9IGlwbW11 X2FkZF9kZXZpY2UsCit9OworCisvKiBSLUNhciBHZW4zIFNvQ3MgcHJvZHVjdCBhbmQgY3V0IGlu Zm9ybWF0aW9uLiAqLworI2RlZmluZSBSQ0FSX1BST0RVQ1RfTUFTSyAgICAweDAwMDA3RjAwCisj ZGVmaW5lIFJDQVJfUFJPRFVDVF9IMyAgICAgIDB4MDAwMDRGMDAKKyNkZWZpbmUgUkNBUl9QUk9E VUNUX00zVyAgICAgMHgwMDAwNTIwMAorI2RlZmluZSBSQ0FSX1BST0RVQ1RfTTNOICAgICAweDAw MDA1NTAwCisjZGVmaW5lIFJDQVJfQ1VUX01BU0sgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUg UkNBUl9DVVRfVkVSMzAgICAgICAgMHgwMDAwMDAyMAorCitzdGF0aWMgX19pbml0IGJvb2wgaXBt bXVfc3RhZ2UyX3N1cHBvcnRlZCh2b2lkKQoreworICAgIHN0cnVjdCBkdF9kZXZpY2Vfbm9kZSAq bnA7CisgICAgdWludDY0X3QgYWRkciwgc2l6ZTsKKyAgICB2b2lkIF9faW9tZW0gKmJhc2U7Cisg ICAgdWludDMyX3QgcHJvZHVjdCwgY3V0OworICAgIHN0YXRpYyBlbnVtCisgICAgeworICAgICAg ICBVTktOT1dOLAorICAgICAgICBTVVBQT1JURUQsCisgICAgICAgIE5PVFNVUFBPUlRFRAorICAg IH0gc3RhZ2UyX3N1cHBvcnRlZCA9IFVOS05PV047CisKKyAgICAvKiBVc2UgdGhlIGZsYWcgdG8g YXZvaWQgY2hlY2tpbmcgZm9yIHRoZSBjb21wYXRpYmlsaXR5IG1vcmUgdGhlbiBvbmNlLiAqLwor ICAgIHN3aXRjaCAoIHN0YWdlMl9zdXBwb3J0ZWQgKQorICAgIHsKKyAgICBjYXNlIFNVUFBPUlRF RDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5PVFNVUFBPUlRFRDoKKyAgICAg ICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBVTktOT1dOOgorICAgIGRlZmF1bHQ6CisgICAg ICAgIHN0YWdlMl9zdXBwb3J0ZWQgPSBOT1RTVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAg IH0KKworICAgIG5wID0gZHRfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInJlbmVz YXMscHJyIik7CisgICAgaWYgKCAhbnAgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKFhFTkxPR19F UlIgImlwbW11OiBGYWlsZWQgdG8gZmluZCBQUlIgbm9kZVxuIik7CisgICAgICAgIHJldHVybiBm YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIGR0X2RldmljZV9nZXRfYWRkcmVzcyhucCwgMCwgJmFk ZHIsICZzaXplKSApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiaXBtbXU6IEZh aWxlZCB0byBnZXQgUFJSIE1NSU9cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor CisgICAgYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShhZGRyLCBzaXplKTsKKyAgICBpZiAoICFiYXNl ICkKKyAgICB7CisgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJpcG1tdTogRmFpbGVkIHRvIGlv cmVtYXAgUFJSIE1NSU9cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg cHJvZHVjdCA9IHJlYWRsKGJhc2UpOworICAgIGN1dCA9IHByb2R1Y3QgJiBSQ0FSX0NVVF9NQVNL OworICAgIHByb2R1Y3QgJj0gUkNBUl9QUk9EVUNUX01BU0s7CisKKyAgICBzd2l0Y2ggKCBwcm9k dWN0ICkKKyAgICB7CisgICAgY2FzZSBSQ0FSX1BST0RVQ1RfSDM6CisgICAgY2FzZSBSQ0FSX1BS T0RVQ1RfTTNXOgorICAgICAgICBpZiAoIGN1dCA+PSBSQ0FSX0NVVF9WRVIzMCApCisgICAgICAg ICAgICBzdGFnZTJfc3VwcG9ydGVkID0gU1VQUE9SVEVEOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgUkNBUl9QUk9EVUNUX00zTjoKKyAgICAgICAgc3RhZ2UyX3N1cHBvcnRlZCA9IFNVUFBP UlRFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoWEVO TE9HX0VSUiAiaXBtbXU6IFVuc3VwcG9ydGVkIFNvQyB2ZXJzaW9uXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgfQorCisgICAgaW91bm1hcChiYXNlKTsKKworICAgIHJldHVybiBzdGFnZTJfc3Vw cG9ydGVkID09IFNVUFBPUlRFRDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdF9kZXZpY2Vf bWF0Y2ggaXBtbXVfZHRfbWF0Y2hbXSBfX2luaXRjb25zdCA9Cit7CisgICAgRFRfTUFUQ0hfQ09N UEFUSUJMRSgicmVuZXNhcyxpcG1tdS1yOGE3Nzk1IiksCisgICAgRFRfTUFUQ0hfQ09NUEFUSUJM RSgicmVuZXNhcyxpcG1tdS1yOGE3Nzk2NSIpLAorICAgIERUX01BVENIX0NPTVBBVElCTEUoInJl bmVzYXMsaXBtbXUtcjhhNzc5NiIpLAorICAgIHsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0 YXRpYyBfX2luaXQgaW50IGlwbW11X2luaXQoc3RydWN0IGR0X2RldmljZV9ub2RlICpub2RlLCBj b25zdCB2b2lkICpkYXRhKQoreworICAgIGludCByZXQ7CisKKyAgICAvKgorICAgICAqIEV2ZW4g aWYgdGhlIGRldmljZSBjYW4ndCBiZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0byBnaXZl CisgICAgICogdGhlIElQTU1VIGRldmljZSB0byBkb20wLgorICAgICAqLworICAgIGR0X2Rldmlj ZV9zZXRfdXNlZF9ieShub2RlLCBET01JRF9YRU4pOworCisgICAgaWYgKCAhaW9tbXVfaGFwX3B0 X3NoYXJlICkKKyAgICB7CisgICAgICAgIHByaW50a19vbmNlKFhFTkxPR19FUlIgImlwbW11OiBQ Mk0gdGFibGUgbXVzdCBhbHdheXMgYmUgc2hhcmVkIGJldHdlZW4gdGhlIENQVSBhbmQgdGhlIElQ TU1VXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAhaXBt bXVfc3RhZ2UyX3N1cHBvcnRlZCgpICkKKyAgICB7CisgICAgICAgIHByaW50a19vbmNlKFhFTkxP R19FUlIgImlwbW11OiBQMk0gc2hhcmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgU29D IHJldmlzaW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgfQorICAgIGVsc2UK KyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEFzIDQtbGV2ZWwgdHJhbnNsYXRpb24gdGFi bGUgaXMgbm90IHN1cHBvcnRlZCBpbiBJUE1NVSwgd2UgbmVlZAorICAgICAgICAgKiB0byBjaGVj ayBJUEEgc2l6ZSB1c2VkIGZvciBQMk0gdGFibGUgYmVmb3JlaGFuZCB0byBiZSBzdXJlIGl0IGlz CisgICAgICAgICAqIDMtbGV2ZWwgYW5kIHRoZSBJUE1NVSB3aWxsIGJlIGFibGUgdG8gdXNlIGl0 LgorICAgICAgICAgKgorICAgICAgICAgKiBUT0RPOiBGaXJzdCBpbml0aWFsaXplIHRoZSBJT01N VSBhbmQgZ2F0aGVyIHRoZSByZXF1aXJlbWVudHMgYW5kCisgICAgICAgICAqIHRoZW4gaW5pdGlh bGl6ZSB0aGUgUDJNLiBJbiB0aGUgUDJNIGNvZGUsIHRha2UgaW50byB0aGUgYWNjb3VudAorICAg ICAgICAgKiB0aGUgSU9NTVUgcmVxdWlyZW1lbnRzIGFuZCByZXN0cmljdCAicGFfcmFuZ2UiIGlm IG5lY2Vzc2FyeS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggSVBNTVVfTUFYX1AyTV9JUEFf QklUUyA8IHAybV9pcGFfYml0cyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50a19vbmNl KFhFTkxPR19FUlIgImlwbW11OiBQMk0gSVBBIHNpemUgaXMgbm90IHN1cHBvcnRlZCAoUDJNPSV1 IElQTU1VPSV1KSFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwMm1faXBhX2JpdHMsIElQ TU1VX01BWF9QMk1fSVBBX0JJVFMpOworICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByZXQgPSBpcG1tdV9wcm9iZShub2RlKTsKKyAgICBpZiAoIHJl dCApCisgICAgeworICAgICAgICBkZXZfZXJyKCZub2RlLT5kZXYsICJGYWlsZWQgdG8gaW5pdCBJ UE1NVSAoJWQpXG4iLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlv bW11X3NldF9vcHMoJmlwbW11X2lvbW11X29wcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworRFRf REVWSUNFX1NUQVJUKGlwbW11LCAiUmVuZXNhcyBJUE1NVS1WTVNBIiwgREVWSUNFX0lPTU1VKQor ICAgIC5kdF9tYXRjaCA9IGlwbW11X2R0X21hdGNoLAorICAgIC5pbml0ID0gaXBtbXVfaW5pdCwK K0RUX0RFVklDRV9FTkQKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAq IGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFi cy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h aWxtYW4vbGlzdGluZm8veGVuLWRldmVs