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.4 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 62349C432C2 for ; Thu, 26 Sep 2019 11:22:05 +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 168BA217F4 for ; Thu, 26 Sep 2019 11:22:05 +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="nEcwUm8K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 168BA217F4 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 1iDRq9-0000B1-5r; Thu, 26 Sep 2019 11:21:41 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iDRq7-0000AJ-Ux for xen-devel@lists.xenproject.org; Thu, 26 Sep 2019 11:21:40 +0000 X-Inumbo-ID: b9991f2c-e04f-11e9-8628-bc764e2007e4 Received: from mail-lj1-x243.google.com (unknown [2a00:1450:4864:20::243]) by localhost (Halon) with ESMTPS id b9991f2c-e04f-11e9-8628-bc764e2007e4; Thu, 26 Sep 2019 11:21:03 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id d1so702510ljl.13 for ; Thu, 26 Sep 2019 04:21:03 -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=KlCIVSqWzc0JzDPSBUMasLfdm1mHMan3tkYep2DUgFY=; b=nEcwUm8KnTHIqwSzc2WzUtARGBvXn/jZetsBhPTS18F2QkF0SvOWEEHmxMVRH3WDHh Vdkg9cvXVC0lU5N0Pujul0+NfwsvJcmTDZzgvKa3apazApXs6vIsOP6SmJEmJ42ZdWDN zSd5a5K62YDq060DQmy36EoW1GsEACZIG6aW3FGIdgS4pthp64pqwDUPXhUpfjNh6E97 uFnDxk8V0ujidpWXgjPT/hYVFG4HUjwAdd+bmZ55T4UGHnysnX8PXtSfPa8B4tSDnCu0 +gwYkeDtH6terCICG//lUlbzPr4tXiz0P5P5U35B9p17cgCUfuKieMLyS10UC7PqDYoY gvXQ== 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=KlCIVSqWzc0JzDPSBUMasLfdm1mHMan3tkYep2DUgFY=; b=WRNlk0xZVrZ+6hYiVlrAhIb4xhfZkQQv7oWTbQU9eEvjIiZFZ+duBP8WEKJNd1Xq+P kqxdBbXA0S7H0Gzu3f+ooSVQO0LCW/4TAbC7xeQueAmC70PqL9Hw8eU2ZF/KtW1176Vg UCt9RFM41M4gN92nvVNrkcp4K7lZqNG02eOGnOV5YfFIyQxy3gY+MNlJOFOaBLBytgTn ZsF3WbQvh4mCbhdiXR9PxjImhySh4eqkhjij8HBrzbXIggdOt8le9dygrwgKx0wg6NEB NHFdwsrEP3yPO+DH+tRUC7KTcW05QxoK/PGO1LL9kjIqU+7BcOO6xTc7LygJ3jLgySfZ 3/hg== X-Gm-Message-State: APjAAAVjxChn0+MqlwKqewWXb+65AAMpInMAxNWukbIq54IJi8OYtN9H IRXwE+zhLKhIXEyjx091cW0VQ08NflA= X-Google-Smtp-Source: APXvYqwo2x7QuUg13mKigcXRhWeENrVzFl6upzGNj8uGA2wp/0OVyB0+z0+nfRsj0gQUODbHYjFaLg== X-Received: by 2002:a2e:2d5:: with SMTP id y82mr2296211lje.230.1569496862129; Thu, 26 Sep 2019 04:21:02 -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 n4sm526810lfi.63.2019.09.26.04.21.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 26 Sep 2019 04:21:01 -0700 (PDT) From: Oleksandr Tyshchenko To: xen-devel@lists.xenproject.org Date: Thu, 26 Sep 2019 14:20:34 +0300 Message-Id: <1569496834-7796-9-git-send-email-olekstysh@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1569496834-7796-1-git-send-email-olekstysh@gmail.com> References: <1569496834-7796-1-git-send-email-olekstysh@gmail.com> Subject: [Xen-devel] [PATCH V6 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 b3NlZCB0byB3b3JrIG9ubHkgd2l0aCBuZXdlc3QKUi1DYXIgR2VuMyBTb0NzIHJldmlzaW9ucyB3 aGljaCBJUE1NVSBoYXJkd2FyZSBzdXBwb3J0cyBzdGFnZSAyIHRyYW5zbGF0aW9uCnRhYmxlIGZv cm1hdCBhbmQgaXMgYWJsZSB0byB1c2UgQ1BVJ3MgUDJNIHRhYmxlIGFzIGlzIGlmIG9uZSBpcwoz LWxldmVsIHBhZ2UgdGFibGUgKHVwIHRvIDQwIGJpdCBJUEEpLgoKVGhlIG1ham9yIGRpZmZlcmVu Y2VzIGNvbXBhcmUgdG8gdGhlIExpbnV4IGRyaXZlciBhcmU6CgoxLiBTdGFnZSAxL1N0YWdlIDIg dHJhbnNsYXRpb24uIExpbnV4IGRyaXZlciBzdXBwb3J0cyBTdGFnZSAxCnRyYW5zbGF0aW9uIG9u bHkgKHdpdGggU3RhZ2UgMSB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQpLiBJdCBtYW5hZ2VzCnBh Z2UgdGFibGUgYnkgaXRzZWxmLiBCdXQgWGVuIGRyaXZlciBzdXBwb3J0cyBTdGFnZSAyIHRyYW5z bGF0aW9uCih3aXRoIFN0YWdlIDIgdHJhbnNsYXRpb24gdGFibGUgZm9ybWF0KSB0byBiZSBhYmxl IHRvIHNoYXJlIHRoZSBQMk0Kd2l0aCB0aGUgQ1BVLiBTdGFnZSAxIHRyYW5zbGF0aW9uIGlzIGFs d2F5cyBieXBhc3NlZCBpbiBYZW4gZHJpdmVyLgoKU28sIFhlbiBkcml2ZXIgaXMgc3VwcG9zZWQg dG8gYmUgdXNlZCB3aXRoIG5ld2VzdCBSLUNhciBHZW4zIFNvQyByZXZpc2lvbnMKb25seSAoSDMg RVMzLjAsIE0zLVcrLCBldGMuKSB3aGljaCBJUE1NVSBIL1cgc3VwcG9ydHMgc3RhZ2UgMiB0cmFu c2xhdGlvbgp0YWJsZSBmb3JtYXQuCgoyLiBBQXJjaDY0IHN1cHBvcnQuIExpbnV4IGRyaXZlciB1 c2VzIFZNU0F2OC0zMiBtb2RlLCB3aGlsZSBYZW4gZHJpdmVyCmVuYWJsZXMgQXJtdjggVk1TQXY4 LTY0IG1vZGUgdG8gY292ZXIgdXAgdG8gNDAgYml0IGlucHV0IGFkZHJlc3MuCgozLiBDb250ZXh0 IGJhbmsgKHNldHMgb2YgcGFnZSB0YWJsZSkgdXNhZ2UuIEluIFhlbiwgZWFjaCBjb250ZXh0IGJh bmsgaXMKbWFwcGVkIHRvIG9uZSBYZW4gZG9tYWluLiBTbywgYWxsIGRldmljZXMgYmVpbmcgcGFz cyB0aHJvdWdoZWQgdG8gdGhlCnNhbWUgWGVuIGRvbWFpbiBzaGFyZSB0aGUgc2FtZSBjb250ZXh0 IGJhbmsuCgo0LiBJUE1NVSBkZXZpY2UgdHJhY2tpbmcuIEluIFhlbiwgYWxsIElPTU1VIGRldmlj ZXMgYXJlIG1hbmFnZWQKYnkgc2luZ2xlIGRyaXZlciBpbnN0YW5jZS4gU28sIGRyaXZlciB1c2Vz IGdsb2JhbCBsaXN0IHRvIGtlZXAgdHJhY2sKb2YgcmVnaXN0ZXJlZCBJUE1NVSBkZXZpY2VzLgoK U2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtv QGVwYW0uY29tPgpbZm9yIHRoZSBJUE1NVSBIL1cgYml0c10KUmV2aWV3ZWQtYnk6IFlvc2hpaGly byBTaGltb2RhIDx5b3NoaWhpcm8uc2hpbW9kYS51aEByZW5lc2FzLmNvbT4KQWNrZWQtYnk6IEp1 bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+CgotLS0KQ2hhbmdlcyBWNCAtPiBWNToK ICAgIC0gYWRkZWQgUi1iL0EtYgogICAgLSBhZGRlZCAiY29uc3QiIHRvIHN0cnVjdCBkdF9waGFu ZGxlX2FyZ3MgKnNwZWMgaW4gaXBtbXVfZHRfeGxhdGUoKQogICAgLSBhZGRlZCAiY29uc3QiIHRv IHN0cnVjdCBkdF9waGFuZGxlX2FyZ3MgKmFyZ3MgaW4gaXBtbXVfaW5pdF9wbGF0Zm9ybV9kZXZp Y2UoKQoKQ2hhbmdlcyBWMyAtPiBWNDoKICAgIC0gY2hhbmdlZCAiR2VuMyIgdG8gIlItQ2FyIEdl bjMiIGluIGNvbW1pdCBkZXNjcmlwdGlvbgogICAgLSByZW5hbWVkICJvZl94bGF0ZSIgdG8gImR0 X3hsYXRlIgogICAgLSByZW1vdmVkIGNoZWNrIGZvciB0aGUgaW9tbXVfaGFwX3B0X3NoYXJlIGZs YWcgaW4gaXBtbXVfaW5pdCgpCiAgICAtIG1vZGlmaWVkIHRvIGJlIGFibGUgdG8gc2VsZWN0IElQ TU1VX1ZNU0Egb3B0aW9uIG9ubHkgaWYgRVhQRVJUIGlzIHNldAogICAgLSByZW1vdmVkIGFuIGVy cm9yIG1lc3NhZ2Ugd2hlbiBkZWZlcnJpbmcgdGhlIHByb2JlCiAgICAtIG1vdmVkIGNoZWNrIGZv ciB0aGUgUDJNIHNoYXJpbmcgcG9zc2liaWxpdHkgdG8gdGhlIFJvb3QgSVBNTVUgcGF0aAoKQ2hh bmdlcyBWMiAtPiBWMzoKICAgIC0gYWRkZWQgQ29weXJpZ2h0IGZyb20gTGludXgKICAgIC0gaW5j bHVkZWQgPHhlbi9pb21tdS5oPiBhbmQgPGFzbS9pb21tdV9md3NwZWMuaD4gZGlyZWN0bHkKICAg IC0gcmVtb3ZlZCBwb2ludGxlc3Mgc3Bpbl9sb2NrIGZyb20gaXBtbXVfaW9tbXVfZG9tYWluX3Rl YXJkb3duKCkKICAgIC0gY2hhbmdlZCAiR2VuMyIgdG8gIlItQ2FyIEdlbjMiLCAiTTMgRVMzLjAi IHRvICJNMy1XKyIKICAgIC0gY2hhbmdlZCBSQ0FSX1BST0RVQ1RfTTMgdG8gUkNBUl9QUk9EVUNU X00zVwogICAgLSBjbGFyaWZpZWQgSU1UVEJDUl9UU1oxX01BU0sKICAgIC0gcmVtb3ZlZCBUTEIg Zmx1c2ggZnJvbSBpcG1tdV9kb21haW5faXJxKCkgdW50aWwgY2xhcmlmaWVkIHRoZSBwdXJwb3Nl CiAgICAtIHJldHVybmVkIC1FTk9ERVYgaW4gaXBtbXVfaW5pdCgpIGlmIFAyTSBzaGFyaW5nIG9y IFAyTSBJUEEgc2l6ZQogICAgICBpcyBub3Qgc3VwcG9ydGVkIHRvIHNob3cgdGhhdCBJT01NVSBk ZXZpY2UgaXMgbm90IHVzYWJsZSBpbiBYZW4KICAgIC0gaW1wbGVtZW50ZWQgbmV3IGNhbGxiYWNr ICJvZl94bGF0ZSIgdG8gcGFyc2UgRFQgSU9NTVUgc3BlY2lmaWVyCiAgICAgIGFuZCBhZGQgZGV2 aWNlIElEcyB0byAiaW9tbXVfZndzcGVjIgogICAgLSByZXdvcmtlZCAiYWRkX2RldmljZSIgY2Fs bGJhY2sKICAgIC0gdXBkYXRlZCBwYXRjaCBkZXNjcmlwdGlvbgoKQ2hhbmdlcyBWMSAtPiBWMjoK ICAgIC0gcmV3cml0ZWQgZHJpdmVyIHRvIHVzZSBpb21tdV9md3NwZWMKICAgIC0gcmVtb3ZlZCBE VCBwYXJzaW5nIGNvZGUgZm9yIG1pY3JvLVRMQnMKICAgIC0gcmVtb3ZlZCBzdHJ1Y3QgaXBtbXVf dm1zYV9tYXN0ZXJfY2ZnLCBkZXZfYXJjaGRhdGEgbWFjcm8KICAgIC0gYWRkZWQgaXBtbXVfZmlu ZF9tbXVfYnlfZGV2KCksIHZhcmlvdXMgaGVscGVycyB0byBhY2Nlc3MKICAgICAgZndzcGVjLT5p b21tdV9wcml2CiAgICAtIGltcGxlbWVudGVkIG5ldyBjYWxsYmFjayAiYWRkX2RldmljZSIgdG8g YWRkIG1hc3RlciBkZXZpY2UgdG8gSVBNTVUKICAgIC0gcmVtb3ZlZCBpcG1tdV9wcm90ZWN0X21h c3RlcnMoKQogICAgLSByZW1vdmVkIGNvZGUgdG8gbG9jYXRlIFJvb3QgZGV2aWNlIGluIHRoZSBm aXJzdCBwbGFjZSwKICAgICAgdXNlZCBFQUdBSU4gdG8gcmVxdWVzdCBkZWZlcnJlZCBwcm9iaW5n CiAgICAtIHVzZWQgcHJpbnRrX29uY2UgZm9yIHRoZSBzeXN0ZW0gd2lkZSBlcnJvciBtZXNzYWdl cyBpbiBpcG1tdV9pbml0KCkKICAgICAgd2hpY2ggZG9uJ3QgbmVlZCB0byBiZSBzaG93biBmb3Ig ZXZlcnkgZGV2aWNlIGJlaW5nIHByb2JlZAogICAgLSByZW1vdmVkIG1hcF9wYWdlL3VubWFwX3Bh Z2UgaW1wbGVtZW50YXRpb24sIHJldXNlZCB0aGVtCiAgICAgIGZyb20gaW9tbXVfaGVscGVycy5j CiAgICAtIHVzZWQgJXBkIGZvciBwcmludGluZyBkb21haWQgaWQKICAgIC0gcGVyZm9ybWVkIHZh cmlvdXMgY29zbWV0aWMgZml4ZXMKICAgIC0gY2hhbmdlZCB1MzIgLT4gdWludDMyX3QsIHU2NCAt PiB1aW50NjRfdCwKICAgICAgdW5zaWduZWQgaW50IC0+IHVpbnQzMl90IHdoZXJlIG5lZWRlZAog ICAgLSBjbGFyaWZpZWQgVE9ET3MKICAgIC0gY2xhZmlyaWVkIHN1cHBvcnRlZCBTb0MgdmVyc2lv bnMgaW4gY29uZmlnIElQTU1VX1ZNU0EsCiAgICAgIHNldCBkZWZhdWx0IHRvICJuIgogICAgLSB1 cGRhdGVkIGNvbW1lbnRzIGluIGNvZGUsIHByb3ZpZGVkIG1vcmUgYWNjdXJhdGUgZGVzY3JpcHRp b24sCiAgICAgIGFkZGVkIG5ldyBjb21tZW50cyB3aGVyZSBuZWVkZWQKICAgIC0gdXBkYXRlZCBw YXRjaCBkZXNjcmlwdGlvbiBieSBwcm92aWRpbmcgZGlmZmVyZW5jZXMgYmV0d2VlbgogICAgICBM aW51eC9YZW4gaW1wbGVtZW50YXRpb25zCiAgICAtIHJlbW92ZWQgZmllbGRzIGZvciBjYWNoZSBz bm9vcCB0cmFuc2FjdGlvbiB3aGVuIGNvbmZpZ3VyaW5nIElNVFRCQ1IKICAgICAgKHVwZGF0ZSBm cm9tIFJlbmVzYXMgQlNQKQotLS0KIHhlbi9hcmNoL2FybS9wbGF0Zm9ybXMvS2NvbmZpZyAgICAg ICAgICAgfCAgICAxICsKIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL0tjb25maWcgICAgICAgICAg fCAgIDEzICsKIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZSAgICAgfCAgICAx ICsKIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9pcG1tdS12bXNhLmMgfCAxMzMzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzQ4IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vaXBt bXUtdm1zYS5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9LY29uZmlnIGIv eGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy9LY29uZmlnCmluZGV4IGJjMGU5Y2QuLjRiYjczMTkgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMvS2NvbmZpZworKysgYi94ZW4vYXJjaC9h cm0vcGxhdGZvcm1zL0tjb25maWcKQEAgLTI1LDYgKzI1LDcgQEAgY29uZmlnIFJDQVIzCiAJYm9v bCAiUmVuZXNhcyBSQ2FyMyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNXzY0CiAJc2VsZWN0IEhB U19TQ0lGCisJc2VsZWN0IElQTU1VX1ZNU0EgaWYgRVhQRVJUCiAJLS0taGVscC0tLQogCUVuYWJs ZSBhbGwgdGhlIHJlcXVpcmVkIGRyaXZlcnMgZm9yIFJlbmVzYXMgUkNhcjMKIApkaWZmIC0tZ2l0 IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvS2NvbmZpZyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL0tjb25maWcKaW5kZXggNjFmOTQ0Ni4uODllNDRiMyAxMDA2NDQKLS0tIGEveGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvS2NvbmZpZworKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9LY29u ZmlnCkBAIC0xMiw2ICsxMiwxOSBAQCBjb25maWcgQVJNX1NNTVUKIAogCSAgU2F5IFkgaGVyZSBp ZiB5b3VyIFNvQyBpbmNsdWRlcyBhbiBJT01NVSBkZXZpY2UgaW1wbGVtZW50aW5nIHRoZQogCSAg QVJNIFNNTVUgYXJjaGl0ZWN0dXJlLgorCitjb25maWcgSVBNTVVfVk1TQQorCWJvb2wgIlJlbmVz YXMgSVBNTVUtVk1TQSBmb3VuZCBpbiBSLUNhciBHZW4zIFNvQ3MiIGlmIEVYUEVSVCA9ICJ5Igor CWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQVJNXzY0CisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBm b3IgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBSZW5lc2FzIElQTU1VLVZNU0EgZm91bmQKKwkgIGlu IFItQ2FyIEdlbjMgU29Dcy4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIG5ld2Vz dCBSLUNhciBHZW4zIFNvQ3MgcmV2aXNpb25zCisJICAoSDMgRVMzLjAsIE0zLVcrLCBldGMpIHdo aWNoIElQTU1VIGhhcmR3YXJlIHN1cHBvcnRzIHN0YWdlIDIKKwkgIHRyYW5zbGF0aW9uIHRhYmxl IGZvcm1hdCBhbmQgaXMgYWJsZSB0byB1c2UgQ1BVJ3MgUDJNIHRhYmxlIGFzIGlzLgorCiBlbmRp ZgogCiBjb25maWcgSU9NTVVfRk9SQ0VfUFRfU0hBUkUKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZSBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9N YWtlZmlsZQppbmRleCA1ZmJhZDQ1Li5mY2Q5MThlIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJt L01ha2VmaWxlCkBAIC0xLDIgKzEsMyBAQAogb2JqLXkgKz0gaW9tbXUubyBpb21tdV9oZWxwZXJz Lm8gaW9tbXVfZndzcGVjLm8KIG9iai0kKENPTkZJR19BUk1fU01NVSkgKz0gc21tdS5vCitvYmot JChDT05GSUdfSVBNTVVfVk1TQSkgKz0gaXBtbXUtdm1zYS5vCmRpZmYgLS1naXQgYS94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC9hcm0vaXBtbXUtdm1zYS5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvYXJtL2lwbW11LXZtc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m MmZiNGEyCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL2lw bW11LXZtc2EuYwpAQCAtMCwwICsxLDEzMzMgQEAKKy8qCisgKiB4ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC9hcm0vaXBtbXUtdm1zYS5jCisgKgorICogRHJpdmVyIGZvciB0aGUgUmVuZXNhcyBJUE1N VS1WTVNBIGZvdW5kIGluIFItQ2FyIEdlbjMgU29Dcy4KKyAqCisgKiBUaGUgSVBNTVUtVk1TQSBp cyBWTVNBLWNvbXBhdGlibGUgSS9PIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKElPTU1VKQorICog d2hpY2ggcHJvdmlkZXMgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgYWNjZXNzIHByb3RlY3Rpb24g ZnVuY3Rpb25hbGl0aWVzCisgKiB0byBwcm9jZXNzaW5nIHVuaXRzIGFuZCBpbnRlcmNvbm5lY3Qg bmV0d29ya3MuCisgKgorICogUGxlYXNlIG5vdGUsIGN1cnJlbnQgZHJpdmVyIGlzIHN1cHBvc2Vk IHRvIHdvcmsgb25seSB3aXRoIG5ld2VzdAorICogUi1DYXIgR2VuMyBTb0NzIHJldmlzaW9ucyB3 aGljaCBJUE1NVSBoYXJkd2FyZSBzdXBwb3J0cyBzdGFnZSAyIHRyYW5zbGF0aW9uCisgKiB0YWJs ZSBmb3JtYXQgYW5kIGlzIGFibGUgdG8gdXNlIENQVSdzIFAyTSB0YWJsZSBhcyBpcy4KKyAqCisg KiBCYXNlZCBvbiBMaW51eCdzIElQTU1VLVZNU0EgZHJpdmVyIGZyb20gUmVuZXNhcyBCU1A6Cisg KiAgICBkcml2ZXJzL2lvbW11L2lwbW11LXZtc2EuYworICogeW91IGNhbiBmb3VuZCBhdDoKKyAq ICAgIHVybDogZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2hv cm1zL3JlbmVzYXMtYnNwLmdpdAorICogICAgYnJhbmNoOiB2NC4xNC43NS1sdHNpL3JjYXItMy45 LjYKKyAqICAgIGNvbW1pdDogZTIwNmViNWI4MWE2MGU2NGMzNWZiYzNhOTk5YjFhMGRiMmI5ODA0 NAorICogYW5kIFhlbidzIFNNTVUgZHJpdmVyOgorICogICAgeGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvYXJtL3NtbXUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IFJlbmVzYXMgRWxl Y3Ryb25pY3MgQ29ycG9yYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBFUEFN IFN5c3RlbXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor ICovCisKKyNpbmNsdWRlIDx4ZW4vZGVsYXkuaD4KKyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5j bHVkZSA8eGVuL2lvbW11Lmg+CisjaW5jbHVkZSA8eGVuL2lycS5oPgorI2luY2x1ZGUgPHhlbi9s aWIuaD4KKyNpbmNsdWRlIDx4ZW4vbGlzdC5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1 ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi92bWFwLmg+CisKKyNpbmNsdWRlIDxhc20v YXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgor I2luY2x1ZGUgPGFzbS9pb21tdV9md3NwZWMuaD4KKworI2RlZmluZSBkZXZfbmFtZShkZXYpIGR0 X25vZGVfZnVsbF9uYW1lKGRldl90b19kdChkZXYpKQorCisvKiBEZXZpY2UgbG9nZ2VyIGZ1bmN0 aW9ucyAqLworI2RlZmluZSBkZXZfcHJpbnQoZGV2LCBsdmwsIGZtdCwgLi4uKSAgICBcCisgICAg cHJpbnRrKGx2bCAiaXBtbXU6ICVzOiAiIGZtdCwgZGV2X25hbWUoZGV2KSwgIyMgX19WQV9BUkdT X18pCisKKyNkZWZpbmUgZGV2X2luZm8oZGV2LCBmbXQsIC4uLikgICAgXAorICAgIGRldl9wcmlu dChkZXYsIFhFTkxPR19JTkZPLCBmbXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZfd2Fy bihkZXYsIGZtdCwgLi4uKSAgICBcCisgICAgZGV2X3ByaW50KGRldiwgWEVOTE9HX1dBUk5JTkcs IGZtdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIGRldl9lcnIoZGV2LCBmbXQsIC4uLikgICAg IFwKKyAgICBkZXZfcHJpbnQoZGV2LCBYRU5MT0dfRVJSLCBmbXQsICMjIF9fVkFfQVJHU19fKQor I2RlZmluZSBkZXZfZXJyX3JhdGVsaW1pdGVkKGRldiwgZm10LCAuLi4pICAgIFwKKyAgICBkZXZf cHJpbnQoZGV2LCBYRU5MT0dfRVJSLCBmbXQsICMjIF9fVkFfQVJHU19fKQorCisvKgorICogUi1D YXIgR2VuMyBTb0NzIG1ha2UgdXNlIG9mIHVwIHRvIDggSVBNTVUgY29udGV4dHMgKHNldHMgb2Yg cGFnZSB0YWJsZSkgYW5kCisgKiB0aGVzZSBjYW4gYmUgbWFuYWdlZCBpbmRlcGVuZGVudGx5LiBF YWNoIGNvbnRleHQgaXMgbWFwcGVkIHRvIG9uZSBYZW4gZG9tYWluLgorICovCisjZGVmaW5lIElQ TU1VX0NUWF9NQVggICAgIDgKKy8qIFItQ2FyIEdlbjMgU29DcyBtYWtlIHVzZSBvZiB1cCB0byA0 OCBtaWNyby1UTEJzIHBlciBJUE1NVSBkZXZpY2UuICovCisjZGVmaW5lIElQTU1VX1VUTEJfTUFY ICAgIDQ4CisKKy8qIElQTU1VIGNvbnRleHQgc3VwcG9ydHMgSVBBIHNpemUgdXAgdG8gNDAgYml0 LiAqLworI2RlZmluZSBJUE1NVV9NQVhfUDJNX0lQQV9CSVRTICAgIDQwCisKKy8qCisgKiBYZW4n cyBkb21haW4gSVBNTVUgaW5mb3JtYXRpb24gc3RvcmVkIGluIGRvbV9pb21tdShkKS0+YXJjaC5w cml2CisgKgorICogQXMgZWFjaCBjb250ZXh0IChzZXQgb2YgcGFnZSB0YWJsZSkgaXMgbWFwcGVk IHRvIG9uZSBYZW4gZG9tYWluLAorICogYWxsIGFzc29jaWF0ZWQgSVBNTVUgZG9tYWlucyB1c2Ug dGhlIHNhbWUgY29udGV4dCBtYXBwZWQgdG8gdGhpcyBYZW4gZG9tYWluLgorICogVGhpcyBtYWtl cyBhbGwgbWFzdGVyIGRldmljZXMgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIHNhbWUgWGVuIGRvbWFp biBzaGFyZQorICogdGhlIHNhbWUgY29udGV4dCAoUDJNIHRhYmxlKS4KKyAqLworc3RydWN0IGlw bW11X3Ztc2FfeGVuX2RvbWFpbiB7CisgICAgLyoKKyAgICAgKiBVc2VkIHRvIHByb3RlY3QgZXZl cnl0aGluZyB3aGljaCBiZWxvbmdzIHRvIHRoaXMgWGVuIGRvbWFpbjoKKyAgICAgKiBkZXZpY2Ug YXNzaWdubWVudCwgZG9tYWluIGluaXQvZGVzdHJveSwgZmx1c2ggb3BzLCBldGMKKyAgICAgKi8K KyAgICBzcGlubG9ja190IGxvY2s7CisgICAgLyogT25lIG9yIG1vcmUgQ2FjaGUgSVBNTVUgZG9t YWlucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBYZW4gZG9tYWluICovCisgICAgc3RydWN0IGxpc3Rf aGVhZCBjYWNoZV9kb21haW5zOworICAgIC8qIFJvb3QgSVBNTVUgZG9tYWluIGFzc29jaWF0ZWQg d2l0aCB0aGlzIFhlbiBkb21haW4gKi8KKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKnJv b3RfZG9tYWluOworfTsKKworLyogWGVuIG1hc3RlciBkZXZpY2UncyBJUE1NVSBpbmZvcm1hdGlv biBzdG9yZWQgaW4gZndzcGVjLT5pb21tdV9wcml2ICovCitzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5f ZGV2aWNlIHsKKyAgICAvKiBDYWNoZSBJUE1NVSBkb21haW4gdGhpcyBtYXN0ZXIgZGV2aWNlIGlz IGxvZ2ljYWxseSBhdHRhY2hlZCB0byAqLworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAq ZG9tYWluOworICAgIC8qIENhY2hlIElQTU1VIHRoaXMgbWFzdGVyIGRldmljZSBpcyBwaHlzaWNh bGx5IGNvbm5lY3RlZCB0byAqLworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11Owor fTsKKworLyogUm9vdC9DYWNoZSBJUE1NVSBkZXZpY2UncyBpbmZvcm1hdGlvbiAqLworc3RydWN0 IGlwbW11X3Ztc2FfZGV2aWNlIHsKKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CisgICAgdm9pZCBf X2lvbWVtICpiYXNlOworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqcm9vdDsKKyAgICBz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgdW5zaWduZWQgaW50IG51bV91dGxiczsKKyAgICB1 bnNpZ25lZCBpbnQgbnVtX2N0eDsKKyAgICBzcGlubG9ja190IGxvY2s7ICAgIC8qIFByb3RlY3Rz IGN0eCBhbmQgZG9tYWluc1tdICovCisgICAgREVDTEFSRV9CSVRNQVAoY3R4LCBJUE1NVV9DVFhf TUFYKTsKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbnNbSVBNTVVfQ1RYX01B WF07Cit9OworCisvKgorICogUm9vdC9DYWNoZSBJUE1NVSBkb21haW4ncyBpbmZvcm1hdGlvbgor ICoKKyAqIFJvb3QgSVBNTVUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvIFJvb3QgSVBNTVUgZG9tYWlu IHdoaWxlIENhY2hlIElQTU1VIGRldmljZQorICogaXMgYXNzaWduZWQgdG8gQ2FjaGUgSVBNTVUg ZG9tYWluLiBNYXN0ZXIgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHRvIENhY2hlCisgKiBJUE1NVSBk ZXZpY2VzIHRocm91Z2ggc3BlY2lmaWMgcG9ydHMgY2FsbGVkIG1pY3JvLVRMQnMuCisgKiBBbGwg Q2FjaGUgSVBNTVUgZGV2aWNlcywgaW4gdHVybiwgYXJlIGNvbm5lY3RlZCB0byBSb290IElQTU1V IGRldmljZQorICogd2hpY2ggbWFuYWdlcyBJUE1NVSBjb250ZXh0LgorICovCitzdHJ1Y3QgaXBt bXVfdm1zYV9kb21haW4geworICAgIC8qCisgICAgICogSVBNTVUgZGV2aWNlIGFzc2lnbmVkIHRv IHRoaXMgSVBNTVUgZG9tYWluLgorICAgICAqIEVpdGhlciBSb290IGRldmljZSB3aGljaCBpcyBs b2NhdGVkIGF0IHRoZSBtYWluIG1lbW9yeSBidXMgZG9tYWluIG9yCisgICAgICogQ2FjaGUgZGV2 aWNlIHdoaWNoIGlzIGxvY2F0ZWQgYXQgZWFjaCBoaWVyYXJjaHkgYnVzIGRvbWFpbi4KKyAgICAg Ki8KKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdTsKKworICAgIC8qIENvbnRleHQg dXNlZCBmb3IgdGhpcyBJUE1NVSBkb21haW4gKi8KKyAgICB1bnNpZ25lZCBpbnQgY29udGV4dF9p ZDsKKworICAgIC8qIFhlbiBkb21haW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgSVBNTVUgZG9tYWlu ICovCisgICAgc3RydWN0IGRvbWFpbiAqZDsKKworICAgIC8qIFRoZSBmaWVsZHMgYmVsb3cgYXJl IHVzZWQgZm9yIENhY2hlIElQTU1VIGRvbWFpbiBvbmx5ICovCisKKyAgICAvKgorICAgICAqIFVz ZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbWFzdGVyIGRldmljZXMgd2hpY2ggYXJlIGF0dGFjaGVk IHRvIHRoaXMKKyAgICAgKiBJUE1NVSBkb21haW4gKGRvbWFpbiB1c2VycykuIE1hc3RlciBkZXZp Y2VzIGJlaGluZCB0aGUgc2FtZSBJUE1NVSBkZXZpY2UKKyAgICAgKiBhcmUgZ3JvdXBlZCB0b2dl dGhlciBieSBwdXR0aW5nIGludG8gdGhlIHNhbWUgSVBNTVUgZG9tYWluLgorICAgICAqIE9ubHkg d2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwIHRoaXMgSVBNTVUgZG9tYWluIGNhbiBiZSBkZXN0 cm95ZWQuCisgICAgICovCisgICAgdW5zaWduZWQgaW50IHJlZmNvdW50OworICAgIC8qIFVzZWQg dG8gbGluayB0aGlzIElQTU1VIGRvbWFpbiBmb3IgdGhlIHNhbWUgWGVuIGRvbWFpbiAqLworICAg IHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBy ZWdpc3RlcmVkIElQTU1VIGRldmljZXMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoaXBtbXVfZGV2aWNl cyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwbW11X2RldmljZXNfbG9jayk7CisKKyNkZWZp bmUgVExCX0xPT1BfVElNRU9VVCAgICAxMDAgLyogMTAwdXMgKi8KKworLyogUmVnaXN0ZXJzIERl ZmluaXRpb24gKi8KKyNkZWZpbmUgSU1fQ1RYX1NJWkUgICAgMHg0MAorCisjZGVmaW5lIElNQ1RS ICAgICAgICAgICAgICAgIDB4MDAwMAorLyoKKyAqIFRoZXNlIGZpZWxkcyBhcmUgaW1wbGVtZW50 ZWQgaW4gSVBNTVUtTU0gb25seS4gU28sIGNhbiBiZSBzZXQgZm9yCisgKiBSb290IElQTU1VIG9u bHkuCisgKi8KKyNkZWZpbmUgSU1DVFJfVkE2NCAgICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5l IElNQ1RSX1RSRSAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBJTUNUUl9BRkUgICAgICAg ICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU1DVFJfUlRTRUxfTUFTSyAgICAgKDMgPDwgNCkKKyNk ZWZpbmUgSU1DVFJfUlRTRUxfU0hJRlQgICAgNAorI2RlZmluZSBJTUNUUl9UUkVOICAgICAgICAg ICAoMSA8PCAzKQorLyoKKyAqIFRoZXNlIGZpZWxkcyBhcmUgY29tbW9uIGZvciBhbGwgSVBNTVUg ZGV2aWNlcy4gU28sIGNhbiBiZSBzZXQgZm9yCisgKiBDYWNoZSBJUE1NVXMgYXMgd2VsbC4KKyAq LworI2RlZmluZSBJTUNUUl9JTlRFTiAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTUNUUl9G TFVTSCAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTUNUUl9NTVVFTiAgICAgICAgICAoMSA8 PCAwKQorI2RlZmluZSBJTUNUUl9DT01NT05fTUFTSyAgICAoNyA8PCAwKQorCisjZGVmaW5lIElN Q0FBUiAgICAgICAgICAgICAgIDB4MDAwNAorCisjZGVmaW5lIElNVFRCQ1IgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgSU1UVEJDUl9FQUUgICAgICAgICAgICAgICAgICAg ICgxIDw8IDMxKQorI2RlZmluZSBJTVRUQkNSX1BNQiAgICAgICAgICAgICAgICAgICAgKDEgPDwg MzApCisjZGVmaW5lIElNVFRCQ1JfU0gxX05PTl9TSEFSRUFCTEUgICAgICAoMCA8PCAyOCkKKyNk ZWZpbmUgSU1UVEJDUl9TSDFfT1VURVJfU0hBUkVBQkxFICAgICgyIDw8IDI4KQorI2RlZmluZSBJ TVRUQkNSX1NIMV9JTk5FUl9TSEFSRUFCTEUgICAgKDMgPDwgMjgpCisjZGVmaW5lIElNVFRCQ1Jf U0gxX01BU0sgICAgICAgICAgICAgICAoMyA8PCAyOCkKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMV9O QyAgICAgICAgICAgICAgICgwIDw8IDI2KQorI2RlZmluZSBJTVRUQkNSX09SR04xX1dCX1dBICAg ICAgICAgICAgKDEgPDwgMjYpCisjZGVmaW5lIElNVFRCQ1JfT1JHTjFfV1QgICAgICAgICAgICAg ICAoMiA8PCAyNikKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMV9XQiAgICAgICAgICAgICAgICgzIDw8 IDI2KQorI2RlZmluZSBJTVRUQkNSX09SR04xX01BU0sgICAgICAgICAgICAgKDMgPDwgMjYpCisj ZGVmaW5lIElNVFRCQ1JfSVJHTjFfTkMgICAgICAgICAgICAgICAoMCA8PCAyNCkKKyNkZWZpbmUg SU1UVEJDUl9JUkdOMV9XQl9XQSAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBJTVRUQkNS X0lSR04xX1dUICAgICAgICAgICAgICAgKDIgPDwgMjQpCisjZGVmaW5lIElNVFRCQ1JfSVJHTjFf V0IgICAgICAgICAgICAgICAoMyA8PCAyNCkKKyNkZWZpbmUgSU1UVEJDUl9JUkdOMV9NQVNLICAg ICAgICAgICAgICgzIDw8IDI0KQorI2RlZmluZSBJTVRUQkNSX1RTWjFfTUFTSyAgICAgICAgICAg ICAgKDB4MWYgPDwgMTYpCisjZGVmaW5lIElNVFRCQ1JfVFNaMV9TSElGVCAgICAgICAgICAgICAx NgorI2RlZmluZSBJTVRUQkNSX1NIMF9OT05fU0hBUkVBQkxFICAgICAgKDAgPDwgMTIpCisjZGVm aW5lIElNVFRCQ1JfU0gwX09VVEVSX1NIQVJFQUJMRSAgICAoMiA8PCAxMikKKyNkZWZpbmUgSU1U VEJDUl9TSDBfSU5ORVJfU0hBUkVBQkxFICAgICgzIDw8IDEyKQorI2RlZmluZSBJTVRUQkNSX1NI MF9NQVNLICAgICAgICAgICAgICAgKDMgPDwgMTIpCisjZGVmaW5lIElNVFRCQ1JfT1JHTjBfTkMg ICAgICAgICAgICAgICAoMCA8PCAxMCkKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMF9XQl9XQSAgICAg ICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTVRUQkNSX09SR04wX1dUICAgICAgICAgICAgICAg KDIgPDwgMTApCisjZGVmaW5lIElNVFRCQ1JfT1JHTjBfV0IgICAgICAgICAgICAgICAoMyA8PCAx MCkKKyNkZWZpbmUgSU1UVEJDUl9PUkdOMF9NQVNLICAgICAgICAgICAgICgzIDw8IDEwKQorI2Rl ZmluZSBJTVRUQkNSX0lSR04wX05DICAgICAgICAgICAgICAgKDAgPDwgOCkKKyNkZWZpbmUgSU1U VEJDUl9JUkdOMF9XQl9XQSAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElNVFRCQ1JfSVJH TjBfV1QgICAgICAgICAgICAgICAoMiA8PCA4KQorI2RlZmluZSBJTVRUQkNSX0lSR04wX1dCICAg ICAgICAgICAgICAgKDMgPDwgOCkKKyNkZWZpbmUgSU1UVEJDUl9JUkdOMF9NQVNLICAgICAgICAg ICAgICgzIDw8IDgpCisjZGVmaW5lIElNVFRCQ1JfU0wwX0xWTF8yICAgICAgICAgICAgICAoMCA8 PCA2KQorI2RlZmluZSBJTVRUQkNSX1NMMF9MVkxfMSAgICAgICAgICAgICAgKDEgPDwgNikKKyNk ZWZpbmUgSU1UVEJDUl9UU1owX01BU0sgICAgICAgICAgICAgICgweDFmIDw8IDApCisjZGVmaW5l IElNVFRCQ1JfVFNaMF9TSElGVCAgICAgICAgICAgICAwCisKKyNkZWZpbmUgSU1UVExCUjAgICAg ICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBJTVRUTEJSMF9UVEJSX01BU0sgICAgKDB4ZmZmZmYg PDwgMTIpCisjZGVmaW5lIElNVFRVQlIwICAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgSU1U VFVCUjBfVFRCUl9NQVNLICAgICgweGZmIDw8IDApCisjZGVmaW5lIElNVFRMQlIxICAgICAgICAg ICAgICAweDAwMTgKKyNkZWZpbmUgSU1UVExCUjFfVFRCUl9NQVNLICAgICgweGZmZmZmIDw8IDEy KQorI2RlZmluZSBJTVRUVUJSMSAgICAgICAgICAgICAgMHgwMDFjCisjZGVmaW5lIElNVFRVQlIx X1RUQlJfTUFTSyAgICAoMHhmZiA8PCAwKQorCisjZGVmaW5lIElNU1RSICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgSU1TVFJfRVJSTFZMX01BU0sgICAgICAgICAgICAg ICgzIDw8IDEyKQorI2RlZmluZSBJTVNUUl9FUlJMVkxfU0hJRlQgICAgICAgICAgICAgMTIKKyNk ZWZpbmUgSU1TVFJfRVJSQ09ERV9UTEJfRk9STUFUICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElN U1RSX0VSUkNPREVfQUNDRVNTX1BFUk0gICAgICAoNCA8PCA4KQorI2RlZmluZSBJTVNUUl9FUlJD T0RFX1NFQ1VSRV9BQ0NFU1MgICAgKDUgPDwgOCkKKyNkZWZpbmUgSU1TVFJfRVJSQ09ERV9NQVNL ICAgICAgICAgICAgICg3IDw8IDgpCisjZGVmaW5lIElNU1RSX01ISVQgICAgICAgICAgICAgICAg ICAgICAoMSA8PCA0KQorI2RlZmluZSBJTVNUUl9BQk9SVCAgICAgICAgICAgICAgICAgICAgKDEg PDwgMikKKyNkZWZpbmUgSU1TVFJfUEYgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisj ZGVmaW5lIElNU1RSX1RGICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5l IElNRUxBUiAgICAweDAwMzAKKyNkZWZpbmUgSU1FVUFSICAgIDB4MDAzNAorCisjZGVmaW5lIElN VUNUUihuKSAgICAgICAgICAgICAgKChuKSA8IDMyID8gSU1VQ1RSMChuKSA6IElNVUNUUjMyKG4p KQorI2RlZmluZSBJTVVDVFIwKG4pICAgICAgICAgICAgICgweDAzMDAgKyAoKG4pICogMTYpKQor I2RlZmluZSBJTVVDVFIzMihuKSAgICAgICAgICAgICgweDA2MDAgKyAoKChuKSAtIDMyKSAqIDE2 KSkKKyNkZWZpbmUgSU1VQ1RSX0ZJWEFEREVOICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU1V Q1RSX0ZJWEFERF9NQVNLICAgICAoMHhmZiA8PCAxNikKKyNkZWZpbmUgSU1VQ1RSX0ZJWEFERF9T SElGVCAgICAxNgorI2RlZmluZSBJTVVDVFJfVFRTRUxfTU1VKG4pICAgICgobikgPDwgNCkKKyNk ZWZpbmUgSU1VQ1RSX1RUU0VMX1BNQiAgICAgICAoOCA8PCA0KQorI2RlZmluZSBJTVVDVFJfVFRT RUxfTUFTSyAgICAgICgxNSA8PCA0KQorI2RlZmluZSBJTVVDVFJfRkxVU0ggICAgICAgICAgICgx IDw8IDEpCisjZGVmaW5lIElNVUNUUl9NTVVFTiAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmlu ZSBJTVVBU0lEKG4pICAgICAgICAgICAgICgobikgPCAzMiA/IElNVUFTSUQwKG4pIDogSU1VQVNJ RDMyKG4pKQorI2RlZmluZSBJTVVBU0lEMChuKSAgICAgICAgICAgICgweDAzMDggKyAoKG4pICog MTYpKQorI2RlZmluZSBJTVVBU0lEMzIobikgICAgICAgICAgICgweDA2MDggKyAoKChuKSAtIDMy KSAqIDE2KSkKKyNkZWZpbmUgSU1VQVNJRF9BU0lEOF9NQVNLICAgICAoMHhmZiA8PCA4KQorI2Rl ZmluZSBJTVVBU0lEX0FTSUQ4X1NISUZUICAgIDgKKyNkZWZpbmUgSU1VQVNJRF9BU0lEMF9NQVNL ICAgICAoMHhmZiA8PCAwKQorI2RlZmluZSBJTVVBU0lEX0FTSUQwX1NISUZUICAgIDAKKworI2Rl ZmluZSBJTVNBVVhDVExSICAgICAgICAgIDB4MDUwNAorI2RlZmluZSBJTVNBVVhDVExSX1MyUFRF ICAgICgxIDw8IDMpCisKK3N0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKnRvX2lwbW11 KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMg PSBkZXZfaW9tbXVfZndzcGVjX2dldChkZXYpOworCisgICAgcmV0dXJuIGZ3c3BlYyAmJiBmd3Nw ZWMtPmlvbW11X3ByaXYgPworICAgICAgICAoKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kZXZpY2Ug Kilmd3NwZWMtPmlvbW11X3ByaXYpLT5tbXUgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZXRf aXBtbXUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSkK K3sKKyAgICBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXZfaW9tbXVfZndzcGVjX2dl dChkZXYpOworCisgICAgKChzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZGV2aWNlICopZndzcGVjLT5p b21tdV9wcml2KS0+bW11ID0gbW11OworfQorCitzdGF0aWMgc3RydWN0IGlwbW11X3Ztc2FfZG9t YWluICp0b19kb21haW4oc3RydWN0IGRldmljZSAqZGV2KQoreworICAgIHN0cnVjdCBpb21tdV9m d3NwZWMgKmZ3c3BlYyA9IGRldl9pb21tdV9md3NwZWNfZ2V0KGRldik7CisKKyAgICByZXR1cm4g ZndzcGVjICYmIGZ3c3BlYy0+aW9tbXVfcHJpdiA/CisgICAgICAgICgoc3RydWN0IGlwbW11X3Zt c2FfeGVuX2RldmljZSAqKWZ3c3BlYy0+aW9tbXVfcHJpdiktPmRvbWFpbiA6IE5VTEw7Cit9CisK K3N0YXRpYyB2b2lkIHNldF9kb21haW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXBtbXVf dm1zYV9kb21haW4gKmRvbWFpbikKK3sKKyAgICBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMg PSBkZXZfaW9tbXVfZndzcGVjX2dldChkZXYpOworCisgICAgKChzdHJ1Y3QgaXBtbXVfdm1zYV94 ZW5fZGV2aWNlICopZndzcGVjLT5pb21tdV9wcml2KS0+ZG9tYWluID0gZG9tYWluOworfQorCitz dGF0aWMgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICppcG1tdV9maW5kX21tdV9ieV9kZXYoc3Ry dWN0IGRldmljZSAqZGV2KQoreworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11ID0g TlVMTDsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgICBzcGluX2xvY2soJmlwbW11X2Rl dmljZXNfbG9jayk7CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggbW11LCAmaXBtbXVfZGV2 aWNlcywgbGlzdCApCisgICAgeworICAgICAgICBpZiAoIG1tdS0+ZGV2ID09IGRldiApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgfQorCisgICAgc3Bpbl91bmxvY2soJmlwbW11X2RldmljZXNfbG9jayk7CisK KyAgICByZXR1cm4gZm91bmQgPyBtbXUgOiBOVUxMOworfQorCisvKiBSb290IGRldmljZSBoYW5k bGluZyAqLworc3RhdGljIGJvb2wgaXBtbXVfaXNfcm9vdChzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZp Y2UgKm1tdSkKK3sKKyAgICByZXR1cm4gbW11LT5yb290ID09IG1tdTsKK30KKworc3RhdGljIHN0 cnVjdCBpcG1tdV92bXNhX2RldmljZSAqaXBtbXVfZmluZF9yb290KHZvaWQpCit7CisgICAgc3Ry dWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUgPSBOVUxMOworICAgIGJvb2wgZm91bmQgPSBmYWxz ZTsKKworICAgIHNwaW5fbG9jaygmaXBtbXVfZGV2aWNlc19sb2NrKTsKKworICAgIGxpc3RfZm9y X2VhY2hfZW50cnkoIG1tdSwgJmlwbW11X2RldmljZXMsIGxpc3QgKQorICAgIHsKKyAgICAgICAg aWYgKCBpcG1tdV9pc19yb290KG1tdSkgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3VuZCA9 IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwaW5f dW5sb2NrKCZpcG1tdV9kZXZpY2VzX2xvY2spOworCisgICAgcmV0dXJuIGZvdW5kID8gbW11IDog TlVMTDsKK30KKworLyogUmVhZC9Xcml0ZSBBY2Nlc3MgKi8KK3N0YXRpYyB1aW50MzJfdCBpcG1t dV9yZWFkKHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11LCB1aW50MzJfdCBvZmZzZXQpCit7 CisgICAgcmV0dXJuIHJlYWRsKG1tdS0+YmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lk IGlwbW11X3dyaXRlKHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11LCB1aW50MzJfdCBvZmZz ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhKQoreworICAgIHdyaXRl bChkYXRhLCBtbXUtPmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdWludDMyX3QgaXBtbXVf Y3R4X3JlYWRfcm9vdChzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlZykKK3sKKyAgICByZXR1cm4g aXBtbXVfcmVhZChkb21haW4tPm1tdS0+cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICBkb21h aW4tPmNvbnRleHRfaWQgKiBJTV9DVFhfU0laRSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGlw bW11X2N0eF93cml0ZV9yb290KHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnLCB1aW50MzJfdCBkYXRh KQoreworICAgIGlwbW11X3dyaXRlKGRvbWFpbi0+bW11LT5yb290LAorICAgICAgICAgICAgICAg IGRvbWFpbi0+Y29udGV4dF9pZCAqIElNX0NUWF9TSVpFICsgcmVnLCBkYXRhKTsKK30KKworc3Rh dGljIHZvaWQgaXBtbXVfY3R4X3dyaXRlX2NhY2hlKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAq ZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlZywg dWludDMyX3QgZGF0YSkKK3sKKyAgICAvKiBXZSBleHBlY3Qgb25seSBJTUNUUiB2YWx1ZSB0byBi ZSBwYXNzZWQgYXMgYSByZWcuICovCisgICAgQVNTRVJUKHJlZyA9PSBJTUNUUik7CisKKyAgICAv KiBNYXNrIGZpZWxkcyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gSVBNTVUtTU0gb25seS4gKi8K KyAgICBpZiAoICFpcG1tdV9pc19yb290KGRvbWFpbi0+bW11KSApCisgICAgICAgIGlwbW11X3dy aXRlKGRvbWFpbi0+bW11LCBkb21haW4tPmNvbnRleHRfaWQgKiBJTV9DVFhfU0laRSArIHJlZywK KyAgICAgICAgICAgICAgICAgICAgZGF0YSAmIElNQ1RSX0NPTU1PTl9NQVNLKTsKK30KKworLyoK KyAqIFdyaXRlIHRoZSBjb250ZXh0IHRvIGJvdGggUm9vdCBJUE1NVSBhbmQgYWxsIENhY2hlIElQ TU1VcyBhc3NpZ25lZAorICogdG8gdGhpcyBYZW4gZG9tYWluLgorICovCitzdGF0aWMgdm9pZCBp cG1tdV9jdHhfd3JpdGVfYWxsKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWcsIHVpbnQzMl90IGRhdGEp Cit7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9p b21tdShkb21haW4tPmQpLT5hcmNoLnByaXY7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWlu ICpjYWNoZV9kb21haW47CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBjYWNoZV9kb21haW4s ICZ4ZW5fZG9tYWluLT5jYWNoZV9kb21haW5zLCBsaXN0ICkKKyAgICAgICAgaXBtbXVfY3R4X3dy aXRlX2NhY2hlKGNhY2hlX2RvbWFpbiwgcmVnLCBkYXRhKTsKKworICAgIGlwbW11X2N0eF93cml0 ZV9yb290KGRvbWFpbiwgcmVnLCBkYXRhKTsKK30KKworLyogVExCIGFuZCBtaWNyby1UTEIgTWFu YWdlbWVudCAqLworCisvKiBXYWl0IGZvciBhbnkgcGVuZGluZyBUTEIgaW52YWxpZGF0aW9ucyB0 byBjb21wbGV0ZS4gKi8KK3N0YXRpYyB2b2lkIGlwbW11X3RsYl9zeW5jKHN0cnVjdCBpcG1tdV92 bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKyAg ICB3aGlsZSAoIGlwbW11X2N0eF9yZWFkX3Jvb3QoZG9tYWluLCBJTUNUUikgJiBJTUNUUl9GTFVT SCApCisgICAgeworICAgICAgICBjcHVfcmVsYXgoKTsKKyAgICAgICAgaWYgKCArK2NvdW50ID09 IFRMQl9MT09QX1RJTUVPVVQgKQorICAgICAgICB7CisgICAgICAgICAgICBkZXZfZXJyX3JhdGVs aW1pdGVkKGRvbWFpbi0+bW11LT5kZXYsICJUTEIgc3luYyB0aW1lZCBvdXQgLS0gTU1VIG1heSBi ZSBkZWFkbG9ja2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg ICB1ZGVsYXkoMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBpcG1tdV90bGJfaW52YWxpZGF0 ZShzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbikKK3sKKyAgICB1aW50MzJfdCBkYXRh OworCisgICAgZGF0YSA9IGlwbW11X2N0eF9yZWFkX3Jvb3QoZG9tYWluLCBJTUNUUik7CisgICAg ZGF0YSB8PSBJTUNUUl9GTFVTSDsKKyAgICBpcG1tdV9jdHhfd3JpdGVfYWxsKGRvbWFpbiwgSU1D VFIsIGRhdGEpOworCisgICAgaXBtbXVfdGxiX3N5bmMoZG9tYWluKTsKK30KKworLyogRW5hYmxl IE1NVSB0cmFuc2xhdGlvbiBmb3IgdGhlIG1pY3JvLVRMQi4gKi8KK3N0YXRpYyB2b2lkIGlwbW11 X3V0bGJfZW5hYmxlKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHV0bGIpCit7CisgICAgc3RydWN0IGlw bW11X3Ztc2FfZGV2aWNlICptbXUgPSBkb21haW4tPm1tdTsKKworICAgIC8qCisgICAgICogVE9E TzogUmVmZXJlbmNlLWNvdW50IHRoZSBtaWNyby1UTEIgYXMgc2V2ZXJhbCBidXMgbWFzdGVycyBj YW4gYmUKKyAgICAgKiBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbWljcm8tVExCLiBQcmV2ZW50IHRo ZSB1c2UgY2FzZXMgd2hlcmUKKyAgICAgKiB0aGUgc2FtZSBtaWNyby1UTEIgY291bGQgYmUgc2hh cmVkIGJldHdlZW4gbXVsdGlwbGUgWGVuIGRvbWFpbnMuCisgICAgICovCisgICAgaXBtbXVfd3Jp dGUobW11LCBJTVVBU0lEKHV0bGIpLCAwKTsKKyAgICBpcG1tdV93cml0ZShtbXUsIElNVUNUUih1 dGxiKSwgaXBtbXVfcmVhZChtbXUsIElNVUNUUih1dGxiKSkgfAorICAgICAgICAgICAgICAgIElN VUNUUl9UVFNFTF9NTVUoZG9tYWluLT5jb250ZXh0X2lkKSB8IElNVUNUUl9NTVVFTik7Cit9CisK Ky8qIERpc2FibGUgTU1VIHRyYW5zbGF0aW9uIGZvciB0aGUgbWljcm8tVExCLiAqLworc3RhdGlj IHZvaWQgaXBtbXVfdXRsYl9kaXNhYmxlKHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWlu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1dGxiKQorewor ICAgIHN0cnVjdCBpcG1tdV92bXNhX2RldmljZSAqbW11ID0gZG9tYWluLT5tbXU7CisKKyAgICBp cG1tdV93cml0ZShtbXUsIElNVUNUUih1dGxiKSwgMCk7Cit9CisKKy8qIERvbWFpbi9Db250ZXh0 IE1hbmFnZW1lbnQgKi8KK3N0YXRpYyBpbnQgaXBtbXVfZG9tYWluX2FsbG9jYXRlX2NvbnRleHQo c3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgaW50IHJldDsKKworICAgIHNwaW5fbG9ja19pcnFz YXZlKCZtbXUtPmxvY2ssIGZsYWdzKTsKKworICAgIHJldCA9IGZpbmRfZmlyc3RfemVyb19iaXQo bW11LT5jdHgsIG1tdS0+bnVtX2N0eCk7CisgICAgaWYgKCByZXQgIT0gbW11LT5udW1fY3R4ICkK KyAgICB7CisgICAgICAgIG1tdS0+ZG9tYWluc1tyZXRdID0gZG9tYWluOworICAgICAgICBzZXRf Yml0KHJldCwgbW11LT5jdHgpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldCA9IC1FQlVT WTsKKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1tdS0+bG9jaywgZmxhZ3MpOworCisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXBtbXVfZG9tYWluX2ZyZWVfY29udGV4 dChzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbnRleHRfaWQpCit7CisgICAgdW5zaWduZWQg bG9uZyBmbGFnczsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtbXUtPmxvY2ssIGZsYWdzKTsK KworICAgIGNsZWFyX2JpdChjb250ZXh0X2lkLCBtbXUtPmN0eCk7CisgICAgbW11LT5kb21haW5z W2NvbnRleHRfaWRdID0gTlVMTDsKKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1tdS0+ bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGlwbW11X2RvbWFpbl9pbml0X2NvbnRleHQo c3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4pCit7CisgICAgdWludDY0X3QgdHRicjsK KyAgICB1aW50MzJfdCB0c3owOworICAgIGludCByZXQ7CisKKyAgICAvKiBGaW5kIGFuIHVudXNl ZCBjb250ZXh0LiAqLworICAgIHJldCA9IGlwbW11X2RvbWFpbl9hbGxvY2F0ZV9jb250ZXh0KGRv bWFpbi0+bW11LT5yb290LCBkb21haW4pOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIHJl dHVybiByZXQ7CisKKyAgICBkb21haW4tPmNvbnRleHRfaWQgPSByZXQ7CisKKyAgICAvKgorICAg ICAqIFRUQlIwCisgICAgICogVXNlIFAyTSB0YWJsZSBmb3IgdGhpcyBYZW4gZG9tYWluLgorICAg ICAqLworICAgIEFTU0VSVChkb21haW4tPmQgIT0gTlVMTCk7CisgICAgdHRiciA9IHBhZ2VfdG9f bWFkZHIoZG9tYWluLT5kLT5hcmNoLnAybS5yb290KTsKKworICAgIGRldl9pbmZvKGRvbWFpbi0+ bW11LT5yb290LT5kZXYsICIlcGQ6IFNldCBJUE1NVSBjb250ZXh0ICV1IChwZ2QgMHglIlBSSXg2 NCIpXG4iLAorICAgICAgICAgICAgIGRvbWFpbi0+ZCwgZG9tYWluLT5jb250ZXh0X2lkLCB0dGJy KTsKKworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1UVExCUjAsIHR0YnIgJiBJ TVRUTEJSMF9UVEJSX01BU0spOworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1U VFVCUjAsICh0dGJyID4+IDMyKSAmIElNVFRVQlIwX1RUQlJfTUFTSyk7CisKKyAgICAvKgorICAg ICAqIFRUQkNSCisgICAgICogV2UgdXNlIGxvbmcgZGVzY3JpcHRvcnMgYW5kIGFsbG9jYXRlIHRo ZSB3aG9sZSAicDJtX2lwYV9iaXRzIiBJUEEgc3BhY2UKKyAgICAgKiB0byBUVEJSMC4gVXNlIDRL QiBwYWdlIGdyYW51bGUuIFN0YXJ0IHBhZ2UgdGFibGUgd2Fsa3MgYXQgZmlyc3QgbGV2ZWwuCisg ICAgICogQWx3YXlzIGJ5cGFzcyBzdGFnZSAxIHRyYW5zbGF0aW9uLgorICAgICAqLworICAgIHRz ejAgPSAoNjQgLSBwMm1faXBhX2JpdHMpIDw8IElNVFRCQ1JfVFNaMF9TSElGVDsKKyAgICBpcG1t dV9jdHhfd3JpdGVfcm9vdChkb21haW4sIElNVFRCQ1IsIElNVFRCQ1JfRUFFIHwgSU1UVEJDUl9Q TUIgfAorICAgICAgICAgICAgICAgICAgICAgICAgIElNVFRCQ1JfU0wwX0xWTF8xIHwgdHN6MCk7 CisKKyAgICAvKgorICAgICAqIElNU1RSCisgICAgICogQ2xlYXIgYWxsIGludGVycnVwdCBmbGFn cy4KKyAgICAgKi8KKyAgICBpcG1tdV9jdHhfd3JpdGVfcm9vdChkb21haW4sIElNU1RSLCBpcG1t dV9jdHhfcmVhZF9yb290KGRvbWFpbiwgSU1TVFIpKTsKKworICAgIC8qCisgICAgICogSU1DVFIK KyAgICAgKiBFbmFibGUgdGhlIE1NVSBhbmQgaW50ZXJydXB0IGdlbmVyYXRpb24uIFRoZSBsb25n LWRlc2NyaXB0b3IKKyAgICAgKiB0cmFuc2xhdGlvbiB0YWJsZSBmb3JtYXQgZG9lc24ndCB1c2Ug VEVYIHJlbWFwcGluZy4gRG9uJ3QgZW5hYmxlIEFGCisgICAgICogc29mdHdhcmUgbWFuYWdlbWVu dCBhcyB3ZSBoYXZlIG5vIHVzZSBmb3IgaXQuIFVzZSBWTVNBdjgtNjQgbW9kZS4KKyAgICAgKiBF bmFibGUgdGhlIGNvbnRleHQgZm9yIFJvb3QgSVBNTVUgb25seS4gRmx1c2ggdGhlIFRMQiBhcyBy ZXF1aXJlZAorICAgICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSBjb250ZXh0IHJlZ2lzdGVycy4KKyAg ICAgKi8KKyAgICBpcG1tdV9jdHhfd3JpdGVfcm9vdChkb21haW4sIElNQ1RSLAorICAgICAgICAg ICAgICAgICAgICAgICAgIElNQ1RSX1ZBNjQgfCBJTUNUUl9JTlRFTiB8IElNQ1RSX0ZMVVNIIHwg SU1DVFJfTU1VRU4pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2Rv bWFpbl9kZXN0cm95X2NvbnRleHQoc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW4pCit7 CisgICAgaWYgKCAhZG9tYWluLT5tbXUgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAg ICAqIERpc2FibGUgdGhlIGNvbnRleHQgZm9yIFJvb3QgSVBNTVUgb25seS4gRmx1c2ggdGhlIFRM QiBhcyByZXF1aXJlZAorICAgICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSBjb250ZXh0IHJlZ2lzdGVy cy4KKyAgICAgKi8KKyAgICBpcG1tdV9jdHhfd3JpdGVfcm9vdChkb21haW4sIElNQ1RSLCBJTUNU Ul9GTFVTSCk7CisgICAgaXBtbXVfdGxiX3N5bmMoZG9tYWluKTsKKworICAgIGlwbW11X2RvbWFp bl9mcmVlX2NvbnRleHQoZG9tYWluLT5tbXUtPnJvb3QsIGRvbWFpbi0+Y29udGV4dF9pZCk7Cit9 CisKKy8qIEZhdWx0IEhhbmRsaW5nICovCitzdGF0aWMgdm9pZCBpcG1tdV9kb21haW5faXJxKHN0 cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAgIGNvbnN0IHVpbnQzMl90IGVy cl9tYXNrID0gSU1TVFJfTUhJVCB8IElNU1RSX0FCT1JUIHwgSU1TVFJfUEYgfCBJTVNUUl9URjsK KyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSA9IGRvbWFpbi0+bW11OworICAgIHVp bnQzMl90IHN0YXR1czsKKyAgICB1aW50NjRfdCBpb3ZhOworCisgICAgc3RhdHVzID0gaXBtbXVf Y3R4X3JlYWRfcm9vdChkb21haW4sIElNU1RSKTsKKyAgICBpZiAoICEoc3RhdHVzICYgZXJyX21h c2spICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW92YSA9IGlwbW11X2N0eF9yZWFkX3Jvb3Qo ZG9tYWluLCBJTUVMQVIpIHwKKyAgICAgICAgKCh1aW50NjRfdClpcG1tdV9jdHhfcmVhZF9yb290 KGRvbWFpbiwgSU1FVUFSKSA8PCAzMik7CisKKyAgICAvKgorICAgICAqIENsZWFyIHRoZSBlcnJv ciBzdGF0dXMgZmxhZ3MuIFVubGlrZSB0cmFkaXRpb25hbCBpbnRlcnJ1cHQgZmxhZworICAgICAq IHJlZ2lzdGVycyB0aGF0IG11c3QgYmUgY2xlYXJlZCBieSB3cml0aW5nIDEsIHRoaXMgc3RhdHVz IHJlZ2lzdGVyCisgICAgICogc2VlbXMgdG8gcmVxdWlyZSAwLiBUaGUgZXJyb3IgYWRkcmVzcyBy ZWdpc3RlciBtdXN0IGJlIHJlYWQgYmVmb3JlLAorICAgICAqIG90aGVyd2lzZSBpdHMgdmFsdWUg d2lsbCBiZSAwLgorICAgICAqLworICAgIGlwbW11X2N0eF93cml0ZV9yb290KGRvbWFpbiwgSU1T VFIsIDApOworCisgICAgLyogTG9nIGZhdGFsIGVycm9ycy4gKi8KKyAgICBpZiAoIHN0YXR1cyAm IElNU1RSX01ISVQgKQorICAgICAgICBkZXZfZXJyX3JhdGVsaW1pdGVkKG1tdS0+ZGV2LCAiJXBk OiBNdWx0aXBsZSBUTEIgaGl0cyBAMHglIlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG9tYWluLT5kLCBpb3ZhKTsKKyAgICBpZiAoIHN0YXR1cyAmIElNU1RSX0FCT1JU ICkKKyAgICAgICAgZGV2X2Vycl9yYXRlbGltaXRlZChtbXUtPmRldiwgIiVwZDogUGFnZSBUYWJs ZSBXYWxrIEFib3J0IEAweCUiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkb21haW4tPmQsIGlvdmEpOworCisgICAgLyogUmV0dXJuIGlmIGl0IGlzIG5laXRoZXIgUGVy bWlzc2lvbiBGYXVsdCBub3IgVHJhbnNsYXRpb24gRmF1bHQuICovCisgICAgaWYgKCAhKHN0YXR1 cyAmIChJTVNUUl9QRiB8IElNU1RSX1RGKSkgKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXZf ZXJyX3JhdGVsaW1pdGVkKG1tdS0+ZGV2LCAiJXBkOiBVbmhhbmRsZWQgZmF1bHQ6IHN0YXR1cyAw eCUwOHggaW92YSAweCUiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFp bi0+ZCwgc3RhdHVzLCBpb3ZhKTsKK30KKworc3RhdGljIHZvaWQgaXBtbXVfaXJxKGludCBpcnEs IHZvaWQgKmRldiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgc3RydWN0IGlw bW11X3Ztc2FfZGV2aWNlICptbXUgPSBkZXY7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5z aWduZWQgbG9uZyBmbGFnczsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtbXUtPmxvY2ssIGZs YWdzKTsKKworICAgIC8qCisgICAgICogV2hlbiBpbnRlcnJ1cHQgYXJyaXZlcywgd2UgZG9uJ3Qg a25vdyB0aGUgY29udGV4dCBpdCBpcyByZWxhdGVkIHRvLgorICAgICAqIFNvLCBjaGVjayBpbnRl cnJ1cHRzIGZvciBhbGwgYWN0aXZlIGNvbnRleHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKKyAgICAg KiB3aXRoIHN0YXR1cyBiaXRzIHNldC4KKyAgICAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgbW11 LT5udW1fY3R4OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCAhbW11LT5kb21haW5zW2ldICkK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpcG1tdV9kb21haW5faXJxKG1tdS0+ZG9t YWluc1tpXSk7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW11LT5sb2Nr LCBmbGFncyk7Cit9CisKKy8qIE1hc3RlciBkZXZpY2VzIG1hbmFnZW1lbnQgKi8KK3N0YXRpYyBp bnQgaXBtbXVfYXR0YWNoX2RldmljZShzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cisg ICAgc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2X2lvbW11X2Z3c3BlY19nZXQoZGV2 KTsKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZpY2UgKm1tdSA9IHRvX2lwbW11KGRldik7Cisg ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoICFtbXUgKQorICAgIHsKKyAgICAgICAgZGV2 X2VycihkZXYsICJDYW5ub3QgYXR0YWNoIHRvIElQTU1VXG4iKTsKKyAgICAgICAgcmV0dXJuIC1F TlhJTzsKKyAgICB9CisKKyAgICBpZiAoICFkb21haW4tPm1tdSApCisgICAgeworICAgICAgICAv KiBUaGUgZG9tYWluIGhhc24ndCBiZWVuIHVzZWQgeWV0LCBpbml0aWFsaXplIGl0LiAqLworICAg ICAgICBkb21haW4tPm1tdSA9IG1tdTsKKworICAgICAgICAvKgorICAgICAgICAgKiBXZSBoYXZl IGFscmVhZHkgZW5hYmxlZCBjb250ZXh0IGZvciBSb290IElQTU1VIGFzc2lnbmVkIHRvIHRoaXMK KyAgICAgICAgICogWGVuIGRvbWFpbiBpbiBpcG1tdV9kb21haW5faW5pdF9jb250ZXh0KCkuCisg ICAgICAgICAqIEVuYWJsZSB0aGUgY29udGV4dCBmb3IgQ2FjaGUgSVBNTVUgb25seS4gRmx1c2gg dGhlIFRMQiBhcyByZXF1aXJlZAorICAgICAgICAgKiB3aGVuIG1vZGlmeWluZyB0aGUgY29udGV4 dCByZWdpc3RlcnMuCisgICAgICAgICAqLworICAgICAgICBpcG1tdV9jdHhfd3JpdGVfY2FjaGUo ZG9tYWluLCBJTUNUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwbW11X2N0eF9y ZWFkX3Jvb3QoZG9tYWluLCBJTUNUUikgfCBJTUNUUl9GTFVTSCk7CisKKyAgICAgICAgZGV2X2lu Zm8oZGV2LCAiVXNpbmcgSVBNTVUgY29udGV4dCAldVxuIiwgZG9tYWluLT5jb250ZXh0X2lkKTsK KyAgICB9CisgICAgZWxzZSBpZiAoIGRvbWFpbi0+bW11ICE9IG1tdSApCisgICAgeworICAgICAg ICAvKgorICAgICAgICAgKiBTb21ldGhpbmcgaXMgd3JvbmcsIHdlIGNhbid0IGF0dGFjaCB0d28g bWFzdGVyIGRldmljZXMgdXNpbmcKKyAgICAgICAgICogZGlmZmVyZW50IElPTU1VcyB0byB0aGUg c2FtZSBJUE1NVSBkb21haW4uCisgICAgICAgICAqLworICAgICAgICBkZXZfZXJyKGRldiwgIkNh bid0IGF0dGFjaCBJUE1NVSAlcyB0byBkb21haW4gb24gSVBNTVUgJXNcbiIsCisgICAgICAgICAg ICAgICAgZGV2X25hbWUobW11LT5kZXYpLCBkZXZfbmFtZShkb21haW4tPm1tdS0+ZGV2KSk7Cisg ICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRldl9pbmZv KGRldiwgIlJldXNpbmcgSVBNTVUgY29udGV4dCAldVxuIiwgZG9tYWluLT5jb250ZXh0X2lkKTsK KworICAgIGZvciAoIGkgPSAwOyBpIDwgZndzcGVjLT5udW1faWRzOyArK2kgKQorICAgICAgICBp cG1tdV91dGxiX2VuYWJsZShkb21haW4sIGZ3c3BlYy0+aWRzW2ldKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBpcG1tdV9kZXRhY2hfZGV2aWNlKHN0cnVjdCBpcG1tdV92bXNh X2RvbWFpbiAqZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisgICAgc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2X2lv bW11X2Z3c3BlY19nZXQoZGV2KTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoIGkg PSAwOyBpIDwgZndzcGVjLT5udW1faWRzOyArK2kgKQorICAgICAgICBpcG1tdV91dGxiX2Rpc2Fi bGUoZG9tYWluLCBmd3NwZWMtPmlkc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfaW5pdF9w bGF0Zm9ybV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHRfcGhhbmRsZV9hcmdzICphcmdzKQorewor ICAgIHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldl9pb21tdV9md3NwZWNfZ2V0KGRl dik7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXU7CisKKyAgICBtbXUgPSBpcG1t dV9maW5kX21tdV9ieV9kZXYoZHRfdG9fZGV2KGFyZ3MtPm5wKSk7CisgICAgaWYgKCAhbW11ICkK KyAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisKKyAgICBmd3NwZWMtPmlvbW11X3ByaXYgPSB4emFs bG9jKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kZXZpY2UpOworICAgIGlmICggIWZ3c3BlYy0+aW9t bXVfcHJpdiApCisgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgc2V0X2lwbW11KGRldiwg bW11KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcG1tdV9kZXZpY2VfcmVz ZXQoc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUpCit7CisgICAgdW5zaWduZWQgaW50IGk7 CisKKyAgICAvKiBEaXNhYmxlIGFsbCBjb250ZXh0cy4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8 IG1tdS0+bnVtX2N0eDsgKytpICkKKyAgICAgICAgaXBtbXVfd3JpdGUobW11LCBpICogSU1fQ1RY X1NJWkUgKyBJTUNUUiwgMCk7Cit9CisKKy8qIFItQ2FyIEdlbjMgU29DcyBwcm9kdWN0IGFuZCBj dXQgaW5mb3JtYXRpb24uICovCisjZGVmaW5lIFJDQVJfUFJPRFVDVF9NQVNLICAgIDB4MDAwMDdG MDAKKyNkZWZpbmUgUkNBUl9QUk9EVUNUX0gzICAgICAgMHgwMDAwNEYwMAorI2RlZmluZSBSQ0FS X1BST0RVQ1RfTTNXICAgICAweDAwMDA1MjAwCisjZGVmaW5lIFJDQVJfUFJPRFVDVF9NM04gICAg IDB4MDAwMDU1MDAKKyNkZWZpbmUgUkNBUl9DVVRfTUFTSyAgICAgICAgMHgwMDAwMDBGRgorI2Rl ZmluZSBSQ0FSX0NVVF9WRVIzMCAgICAgICAweDAwMDAwMDIwCisKK3N0YXRpYyBfX2luaXQgYm9v bCBpcG1tdV9zdGFnZTJfc3VwcG9ydGVkKHZvaWQpCit7CisgICAgc3RydWN0IGR0X2RldmljZV9u b2RlICpucDsKKyAgICB1aW50NjRfdCBhZGRyLCBzaXplOworICAgIHZvaWQgX19pb21lbSAqYmFz ZTsKKyAgICB1aW50MzJfdCBwcm9kdWN0LCBjdXQ7CisgICAgYm9vbCBzdGFnZTJfc3VwcG9ydGVk ID0gZmFsc2U7CisKKyAgICBucCA9IGR0X2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEws ICJyZW5lc2FzLHByciIpOworICAgIGlmICggIW5wICkKKyAgICB7CisgICAgICAgIHByaW50ayhY RU5MT0dfRVJSICJpcG1tdTogRmFpbGVkIHRvIGZpbmQgUFJSIG5vZGVcbiIpOworICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCBkdF9kZXZpY2VfZ2V0X2FkZHJlc3MobnAs IDAsICZhZGRyLCAmc2l6ZSkgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgImlw bW11OiBGYWlsZWQgdG8gZ2V0IFBSUiBNTUlPXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgIH0KKworICAgIGJhc2UgPSBpb3JlbWFwX25vY2FjaGUoYWRkciwgc2l6ZSk7CisgICAgaWYg KCAhYmFzZSApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiaXBtbXU6IEZhaWxl ZCB0byBpb3JlbWFwIFBSUiBNTUlPXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KworICAgIHByb2R1Y3QgPSByZWFkbChiYXNlKTsKKyAgICBjdXQgPSBwcm9kdWN0ICYgUkNBUl9D VVRfTUFTSzsKKyAgICBwcm9kdWN0ICY9IFJDQVJfUFJPRFVDVF9NQVNLOworCisgICAgc3dpdGNo ICggcHJvZHVjdCApCisgICAgeworICAgIGNhc2UgUkNBUl9QUk9EVUNUX0gzOgorICAgIGNhc2Ug UkNBUl9QUk9EVUNUX00zVzoKKyAgICAgICAgaWYgKCBjdXQgPj0gUkNBUl9DVVRfVkVSMzAgKQor ICAgICAgICAgICAgc3RhZ2UyX3N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSBSQ0FSX1BST0RVQ1RfTTNOOgorICAgICAgICBzdGFnZTJfc3VwcG9ydGVkID0gdHJ1 ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoWEVOTE9H X0VSUiAiaXBtbXU6IFVuc3VwcG9ydGVkIFNvQyB2ZXJzaW9uXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorCisgICAgaW91bm1hcChiYXNlKTsKKworICAgIHJldHVybiBzdGFnZTJfc3VwcG9y dGVkOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBS b290IElQTU1VIGRldmljZSBpcyBiZWluZyBwcm9iZWQKKyAqIHRoZSBmaXJzdC4gSWYgbm90IHRo ZSBjYXNlLCBpdCBkZW5pZXMgZnVydGhlciBDYWNoZSBJUE1NVSBkZXZpY2UgcHJvYmVzCisgKiAo cmV0dXJucyB0aGUgLUVBR0FJTikgdW50aWwgdGhlIFJvb3QgSVBNTVUgZGV2aWNlIGhhcyBiZWVu IHJlZ2lzdGVyZWQKKyAqIGZvciBzdXJlLgorICovCitzdGF0aWMgaW50IGlwbW11X3Byb2JlKHN0 cnVjdCBkdF9kZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kZXZp Y2UgKm1tdTsKKyAgICB1aW50NjRfdCBhZGRyLCBzaXplOworICAgIGludCBpcnEsIHJldDsKKwor ICAgIG1tdSA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlKTsKKyAgICBpZiAoICFt bXUgKQorICAgIHsKKyAgICAgICAgZGV2X2Vycigmbm9kZS0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRl IGRldmljZSBkYXRhXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAg bW11LT5kZXYgPSAmbm9kZS0+ZGV2OworICAgIG1tdS0+bnVtX3V0bGJzID0gSVBNTVVfVVRMQl9N QVg7CisgICAgbW11LT5udW1fY3R4ID0gSVBNTVVfQ1RYX01BWDsKKyAgICBzcGluX2xvY2tfaW5p dCgmbW11LT5sb2NrKTsKKyAgICBiaXRtYXBfemVybyhtbXUtPmN0eCwgSVBNTVVfQ1RYX01BWCk7 CisKKyAgICAvKiBNYXAgSS9PIG1lbW9yeSBhbmQgcmVxdWVzdCBJUlEuICovCisgICAgcmV0ID0g ZHRfZGV2aWNlX2dldF9hZGRyZXNzKG5vZGUsIDAsICZhZGRyLCAmc2l6ZSk7CisgICAgaWYgKCBy ZXQgKQorICAgIHsKKyAgICAgICAgZGV2X2Vycigmbm9kZS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBN TUlPXG4iKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbW11LT5iYXNlID0gaW9y ZW1hcF9ub2NhY2hlKGFkZHIsIHNpemUpOworICAgIGlmICggIW1tdS0+YmFzZSApCisgICAgewor ICAgICAgICBkZXZfZXJyKCZub2RlLT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBNTUlPIChhZGRy IDB4JSJQUkl4NjQiIHNpemUgMHglIlBSSXg2NCIpXG4iLAorICAgICAgICAgICAgICAgIGFkZHIs IHNpemUpOworICAgICAgICByZXQgPSAtRU5PTUVNOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICAvKgorICAgICAqIERldGVybWluZSBpZiB0aGlzIElQTU1VIG5vZGUgaXMgYSBSb290 IGRldmljZSBieSBjaGVja2luZyBmb3IKKyAgICAgKiB0aGUgbGFjayBvZiByZW5lc2FzLGlwbW11 LW1haW4gcHJvcGVydHkuCisgICAgICovCisgICAgaWYgKCAhZHRfZmluZF9wcm9wZXJ0eShub2Rl LCAicmVuZXNhcyxpcG1tdS1tYWluIiwgTlVMTCkgKQorICAgICAgICBtbXUtPnJvb3QgPSBtbXU7 CisgICAgZWxzZQorICAgICAgICBtbXUtPnJvb3QgPSBpcG1tdV9maW5kX3Jvb3QoKTsKKworICAg IC8qIFdhaXQgdW50aWwgdGhlIFJvb3QgZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgZm9yIHN1 cmUuICovCisgICAgaWYgKCAhbW11LT5yb290ICkKKyAgICB7CisgICAgICAgIHJldCA9IC1FQUdB SU47CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIFJvb3QgZGV2aWNlcyBoYXZl IG1hbmRhdG9yeSBJUlFzLiAqLworICAgIGlmICggaXBtbXVfaXNfcm9vdChtbXUpICkKKyAgICB7 CisgICAgICAgIGlmICggIWlwbW11X3N0YWdlMl9zdXBwb3J0ZWQoKSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJpcG1tdTogUDJNIHNoYXJpbmcgaXMgbm90IHN1 cHBvcnRlZCBpbiBjdXJyZW50IFNvQyByZXZpc2lvblxuIik7CisgICAgICAgICAgICByZXQgPSAt RU5PREVWOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgor ICAgICAgICAgKiBBcyA0LWxldmVsIHRyYW5zbGF0aW9uIHRhYmxlIGlzIG5vdCBzdXBwb3J0ZWQg aW4gSVBNTVUsIHdlIG5lZWQKKyAgICAgICAgICogdG8gY2hlY2sgSVBBIHNpemUgdXNlZCBmb3Ig UDJNIHRhYmxlIGJlZm9yZWhhbmQgdG8gYmUgc3VyZSBpdCBpcworICAgICAgICAgKiAzLWxldmVs IGFuZCB0aGUgSVBNTVUgd2lsbCBiZSBhYmxlIHRvIHVzZSBpdC4KKyAgICAgICAgICoKKyAgICAg ICAgICogVE9ETzogRmlyc3QgaW5pdGlhbGl6ZSB0aGUgSU9NTVUgYW5kIGdhdGhlciB0aGUgcmVx dWlyZW1lbnRzIGFuZAorICAgICAgICAgKiB0aGVuIGluaXRpYWxpemUgdGhlIFAyTS4gSW4gdGhl IFAyTSBjb2RlLCB0YWtlIGludG8gdGhlIGFjY291bnQKKyAgICAgICAgICogdGhlIElPTU1VIHJl cXVpcmVtZW50cyBhbmQgcmVzdHJpY3QgInBhX3JhbmdlIiBpZiBuZWNlc3NhcnkuCisgICAgICAg ICAqLworICAgICAgICBpZiAoIElQTU1VX01BWF9QMk1fSVBBX0JJVFMgPCBwMm1faXBhX2JpdHMg KQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiaXBtbXU6IFAyTSBJ UEEgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIChQMk09JXUgSVBNTVU9JXUpIVxuIiwKKyAgICAgICAg ICAgICAgICAgICBwMm1faXBhX2JpdHMsIElQTU1VX01BWF9QMk1fSVBBX0JJVFMpOworICAgICAg ICAgICAgcmV0ID0gLUVOT0RFVjsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisK KyAgICAgICAgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShub2RlLCAwKTsKKyAgICAgICAgaWYgKCBp cnEgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZGV2X2Vycigmbm9kZS0+ZGV2LCAiTm8g SVJRIGZvdW5kXG4iKTsKKyAgICAgICAgICAgIHJldCA9IGlycTsKKyAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCAwLCBpcG1t dV9pcnEsIGRldl9uYW1lKCZub2RlLT5kZXYpLCBtbXUpOworICAgICAgICBpZiAoIHJldCA8IDAg KQorICAgICAgICB7CisgICAgICAgICAgICBkZXZfZXJyKCZub2RlLT5kZXYsICJGYWlsZWQgdG8g cmVxdWVzdCBJUlEgJWRcbiIsIGlycSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg fQorCisgICAgICAgIGlwbW11X2RldmljZV9yZXNldChtbXUpOworCisgICAgICAgIC8qCisgICAg ICAgICAqIFVzZSBzdGFnZSAyIHRyYW5zbGF0aW9uIHRhYmxlIGZvcm1hdCB3aGVuIHN0YWdlIDIg dHJhbnNsYXRpb24KKyAgICAgICAgICogZW5hYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGlw bW11X3dyaXRlKG1tdSwgSU1TQVVYQ1RMUiwKKyAgICAgICAgICAgICAgICAgICAgaXBtbXVfcmVh ZChtbXUsIElNU0FVWENUTFIpIHwgSU1TQVVYQ1RMUl9TMlBURSk7CisKKyAgICAgICAgZGV2X2lu Zm8oJm5vZGUtPmRldiwgIklQTU1VIGNvbnRleHQgMCBpcyByZXNlcnZlZFxuIik7CisgICAgICAg IHNldF9iaXQoMCwgbW11LT5jdHgpOworICAgIH0KKworICAgIHNwaW5fbG9jaygmaXBtbXVfZGV2 aWNlc19sb2NrKTsKKyAgICBsaXN0X2FkZCgmbW11LT5saXN0LCAmaXBtbXVfZGV2aWNlcyk7Cisg ICAgc3Bpbl91bmxvY2soJmlwbW11X2RldmljZXNfbG9jayk7CisKKyAgICBkZXZfaW5mbygmbm9k ZS0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBJUE1NVVxuIiwKKyAgICAgICAgICAgICBpcG1tdV9pc19y b290KG1tdSkgPyAiUm9vdCIgOiAiQ2FjaGUiKTsKKworICAgIHJldHVybiAwOworCitvdXQ6Cisg ICAgaWYgKCBtbXUtPmJhc2UgKQorICAgICAgICBpb3VubWFwKG1tdS0+YmFzZSk7CisgICAgeGZy ZWUobW11KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFhlbiBJT01NVSBvcHMgKi8KK3N0 YXRpYyBpbnQgX19tdXN0X2NoZWNrIGlwbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWlu ICpkKQoreworICAgIHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBk b21faW9tbXUoZCktPmFyY2gucHJpdjsKKworICAgIGlmICggIXhlbl9kb21haW4gfHwgIXhlbl9k b21haW4tPnJvb3RfZG9tYWluICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzcGluX2xvY2so Jnhlbl9kb21haW4tPmxvY2spOworICAgIGlwbW11X3RsYl9pbnZhbGlkYXRlKHhlbl9kb21haW4t PnJvb3RfZG9tYWluKTsKKyAgICBzcGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX211c3RfY2hlY2sgaXBtbXVfaW90bGJfZmx1 c2goc3RydWN0IGRvbWFpbiAqZCwgZGZuX3QgZGZuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2VfY291bnQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmx1c2hfZmxhZ3MpCit7 CisgICAgQVNTRVJUKGZsdXNoX2ZsYWdzKTsKKworICAgIC8qIFRoZSBoYXJkd2FyZSBkb2Vzbid0 IHN1cHBvcnQgc2VsZWN0aXZlIFRMQiBmbHVzaC4gKi8KKyAgICByZXR1cm4gaXBtbXVfaW90bGJf Zmx1c2hfYWxsKGQpOworfQorCitzdGF0aWMgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICppcG1t dV9nZXRfY2FjaGVfZG9tYWluKHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikK K3sKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lv bW11KGQpLT5hcmNoLnByaXY7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICptbXUgPSB0 b19pcG1tdShkZXYpOworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluOworCisg ICAgaWYgKCAhbW11ICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIExv b3AgdGhyb3VnaCBhbGwgQ2FjaGUgSVBNTVUgZG9tYWlucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBY ZW4gZG9tYWluCisgICAgICogdG8gbG9jYXRlIGFuIElQTU1VIGRvbWFpbiB0aGlzIElQTU1VIGRl dmljZSBpcyBhc3NpZ25lZCB0by4KKyAgICAgKi8KKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBk b21haW4sICZ4ZW5fZG9tYWluLT5jYWNoZV9kb21haW5zLCBsaXN0ICkKKyAgICB7CisgICAgICAg IGlmICggZG9tYWluLT5tbXUgPT0gbW11ICkKKyAgICAgICAgICAgIHJldHVybiBkb21haW47Cisg ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBtbXVfdm1zYV9k b21haW4gKmlwbW11X2FsbG9jX2NhY2hlX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQoreworICAg IHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCkt PmFyY2gucHJpdjsKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmRvbWFpbjsKKworICAg IGRvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluKTsKKyAgICBpZiAoICFk b21haW4gKQorICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworICAgIC8qCisgICAg ICogV2UgZG9uJ3QgYXNzaWduIHRoZSBDYWNoZSBJUE1NVSBkZXZpY2UgaGVyZSwgaXQgd2lsbCBi ZSBhc3NpZ25lZCB3aGVuCisgICAgICogYXR0YWNoaW5nIG1hc3RlciBkZXZpY2UgdG8gdGhpcyBk b21haW4gaW4gaXBtbXVfYXR0YWNoX2RldmljZSgpLgorICAgICAqIGRvbWFpbi0+bW11ID0gTlVM TDsKKyAgICAgKi8KKworICAgIGRvbWFpbi0+ZCA9IGQ7CisgICAgLyogVXNlIHRoZSBzYW1lIGNv bnRleHQgbWFwcGVkIHRvIHRoaXMgWGVuIGRvbWFpbi4gKi8KKyAgICBkb21haW4tPmNvbnRleHRf aWQgPSB4ZW5fZG9tYWluLT5yb290X2RvbWFpbi0+Y29udGV4dF9pZDsKKworICAgIHJldHVybiBk b21haW47Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2ZyZWVfY2FjaGVfZG9tYWluKHN0cnVjdCBp cG1tdV92bXNhX2RvbWFpbiAqZG9tYWluKQoreworICAgIGxpc3RfZGVsKCZkb21haW4tPmxpc3Qp OworICAgIC8qCisgICAgICogRGlzYWJsZSB0aGUgY29udGV4dCBmb3IgQ2FjaGUgSVBNTVUgb25s eS4gRmx1c2ggdGhlIFRMQiBhcyByZXF1aXJlZAorICAgICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSBj b250ZXh0IHJlZ2lzdGVycy4KKyAgICAgKi8KKyAgICBpcG1tdV9jdHhfd3JpdGVfY2FjaGUoZG9t YWluLCBJTUNUUiwgSU1DVFJfRkxVU0gpOworICAgIHhmcmVlKGRvbWFpbik7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgaXBtbXVfdm1zYV9kb21haW4gKmlwbW11X2FsbG9jX3Jvb3RfZG9tYWluKHN0cnVj dCBkb21haW4gKmQpCit7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluICpkb21haW47Cisg ICAgc3RydWN0IGlwbW11X3Ztc2FfZGV2aWNlICpyb290OworICAgIGludCByZXQ7CisKKyAgICAv KiBJZiB3ZSBhcmUgaGVyZSB0aGVuIFJvb3QgZGV2aWNlIG11c3QgaGFzIGJlZW4gcmVnaXN0ZXJl ZC4gKi8KKyAgICByb290ID0gaXBtbXVfZmluZF9yb290KCk7CisgICAgaWYgKCAhcm9vdCApCisg ICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiaXBtbXU6IFVuYWJsZSB0byBsb2NhdGUg Um9vdCBJUE1NVVxuIik7CisgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworICAgIH0K KworICAgIGRvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGlwbW11X3Ztc2FfZG9tYWluKTsKKyAgICBp ZiAoICFkb21haW4gKQorICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworICAgIGRv bWFpbi0+bW11ID0gcm9vdDsKKyAgICBkb21haW4tPmQgPSBkOworCisgICAgLyogSW5pdGlhbGl6 ZSB0aGUgY29udGV4dCB0byBiZSBtYXBwZWQgdG8gdGhpcyBYZW4gZG9tYWluLiAqLworICAgIHJl dCA9IGlwbW11X2RvbWFpbl9pbml0X2NvbnRleHQoZG9tYWluKTsKKyAgICBpZiAoIHJldCA8IDAg KQorICAgIHsKKyAgICAgICAgZGV2X2Vycihyb290LT5kZXYsICIlcGQ6IFVuYWJsZSB0byBpbml0 aWFsaXplIElQTU1VIGNvbnRleHRcbiIsIGQpOworICAgICAgICB4ZnJlZShkb21haW4pOworICAg ICAgICByZXR1cm4gRVJSX1BUUihyZXQpOworICAgIH0KKworICAgIHJldHVybiBkb21haW47Cit9 CisKK3N0YXRpYyB2b2lkIGlwbW11X2ZyZWVfcm9vdF9kb21haW4oc3RydWN0IGlwbW11X3Ztc2Ff ZG9tYWluICpkb21haW4pCit7CisgICAgaXBtbXVfZG9tYWluX2Rlc3Ryb3lfY29udGV4dChkb21h aW4pOworICAgIHhmcmVlKGRvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfYXNzaWduX2Rl dmljZShzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwgc3RydWN0IGRldmljZSAqZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWcpCit7CisgICAgc3RydWN0 IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5w cml2OworICAgIHN0cnVjdCBpcG1tdV92bXNhX2RvbWFpbiAqZG9tYWluOworICAgIGludCByZXQ7 CisKKyAgICBpZiAoICF4ZW5fZG9tYWluICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAg ICBpZiAoICF0b19pcG1tdShkZXYpICkKKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisKKyAgICBz cGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworCisgICAgLyoKKyAgICAgKiBUaGUgSVBNTVUg Y29udGV4dCBmb3IgdGhlIFhlbiBkb21haW4gaXMgbm90IGFsbG9jYXRlZCBiZWZvcmVoYW5kCisg ICAgICogKGF0IHRoZSBYZW4gZG9tYWluIGNyZWF0aW9uIHRpbWUpLCBidXQgb24gZGVtYW5kIG9u bHksIHdoZW4gdGhlIGZpcnN0CisgICAgICogbWFzdGVyIGRldmljZSBiZWluZyBhdHRhY2hlZCB0 byBpdC4KKyAgICAgKiBDcmVhdGUgUm9vdCBJUE1NVSBkb21haW4gd2hpY2ggY29udGV4dCB3aWxs IGJlIG1hcHBlZCB0byB0aGlzIFhlbiBkb21haW4KKyAgICAgKiBpZiBub3QgZXhpdHMgeWV0Lgor ICAgICAqLworICAgIGlmICggIXhlbl9kb21haW4tPnJvb3RfZG9tYWluICkKKyAgICB7CisgICAg ICAgIGRvbWFpbiA9IGlwbW11X2FsbG9jX3Jvb3RfZG9tYWluKGQpOworICAgICAgICBpZiAoIElT X0VSUihkb21haW4pICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihkb21h aW4pOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICB4ZW5fZG9t YWluLT5yb290X2RvbWFpbiA9IGRvbWFpbjsKKyAgICB9CisKKyAgICBpZiAoIHRvX2RvbWFpbihk ZXYpICkKKyAgICB7CisgICAgICAgIGRldl9lcnIoZGV2LCAiQWxyZWFkeSBhdHRhY2hlZCB0byBJ UE1NVSBkb21haW5cbiIpOworICAgICAgICByZXQgPSAtRUVYSVNUOworICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1hc3RlciBkZXZpY2VzIGJlaGluZCB0aGUgc2Ft ZSBDYWNoZSBJUE1NVSBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHNhbWUKKyAgICAgKiBDYWNoZSBJ UE1NVSBkb21haW4uCisgICAgICogQmVmb3JlIGNyZWF0aW5nIG5ldyBJUE1NVSBkb21haW4gY2hl Y2sgdG8gc2VlIGlmIHRoZSByZXF1aXJlZCBvbmUKKyAgICAgKiBhbHJlYWR5IGV4aXN0cyBmb3Ig dGhpcyBYZW4gZG9tYWluLgorICAgICAqLworICAgIGRvbWFpbiA9IGlwbW11X2dldF9jYWNoZV9k b21haW4oZCwgZGV2KTsKKyAgICBpZiAoICFkb21haW4gKQorICAgIHsKKyAgICAgICAgLyogQ3Jl YXRlIG5ldyBJUE1NVSBkb21haW4gdGhpcyBtYXN0ZXIgZGV2aWNlIHdpbGwgYmUgYXR0YWNoZWQg dG8uICovCisgICAgICAgIGRvbWFpbiA9IGlwbW11X2FsbG9jX2NhY2hlX2RvbWFpbihkKTsKKyAg ICAgICAgaWYgKCBJU19FUlIoZG9tYWluKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9 IFBUUl9FUlIoZG9tYWluKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAg ICAgICAgLyogQ2hhaW4gbmV3IElQTU1VIGRvbWFpbiB0byB0aGUgWGVuIGRvbWFpbi4gKi8KKyAg ICAgICAgbGlzdF9hZGQoJmRvbWFpbi0+bGlzdCwgJnhlbl9kb21haW4tPmNhY2hlX2RvbWFpbnMp OworICAgIH0KKworICAgIHJldCA9IGlwbW11X2F0dGFjaF9kZXZpY2UoZG9tYWluLCBkZXYpOwor ICAgIGlmICggcmV0ICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIERlc3Ryb3kgQ2Fj aGUgSVBNTVUgZG9tYWluIG9ubHkgaWYgdGhlcmUgYXJlIG5vIG1hc3RlciBkZXZpY2VzCisgICAg ICAgICAqIGF0dGFjaGVkIHRvIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAhZG9tYWlu LT5yZWZjb3VudCApCisgICAgICAgICAgICBpcG1tdV9mcmVlX2NhY2hlX2RvbWFpbihkb21haW4p OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkb21haW4tPnJlZmNvdW50Kys7Cisg ICAgICAgIHNldF9kb21haW4oZGV2LCBkb21haW4pOworICAgIH0KKworb3V0OgorICAgIHNwaW5f dW5sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgaXBtbXVfZGVhc3NpZ25fZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgaXBtbXVfdm1zYV94ZW5fZG9tYWluICp4ZW5fZG9tYWlu ID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfZG9tYWlu ICpkb21haW4gPSB0b19kb21haW4oZGV2KTsKKworICAgIGlmICggIWRvbWFpbiB8fCBkb21haW4t PmQgIT0gZCApCisgICAgeworICAgICAgICBkZXZfZXJyKGRldiwgIk5vdCBhdHRhY2hlZCB0byAl cGRcbiIsIGQpOworICAgICAgICByZXR1cm4gLUVTUkNIOworICAgIH0KKworICAgIHNwaW5fbG9j aygmeGVuX2RvbWFpbi0+bG9jayk7CisKKyAgICBpcG1tdV9kZXRhY2hfZGV2aWNlKGRvbWFpbiwg ZGV2KTsKKyAgICBzZXRfZG9tYWluKGRldiwgTlVMTCk7CisgICAgZG9tYWluLT5yZWZjb3VudC0t OworCisgICAgLyoKKyAgICAgKiBEZXN0cm95IENhY2hlIElQTU1VIGRvbWFpbiBvbmx5IGlmIHRo ZXJlIGFyZSBubyBtYXN0ZXIgZGV2aWNlcworICAgICAqIGF0dGFjaGVkIHRvIGl0LgorICAgICAq LworICAgIGlmICggIWRvbWFpbi0+cmVmY291bnQgKQorICAgICAgICBpcG1tdV9mcmVlX2NhY2hl X2RvbWFpbihkb21haW4pOworCisgICAgc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBtbXVfcmVhc3NpZ25fZGV2aWNlKHN0 cnVjdCBkb21haW4gKnMsIHN0cnVjdCBkb21haW4gKnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1OCBkZXZmbiwgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICBpbnQgcmV0 ID0gMDsKKworICAgIC8qIERvbid0IGFsbG93IHJlbWFwcGluZyBvbiBvdGhlciBkb21haW4gdGhh biBod2RvbSAqLworICAgIGlmICggdCAmJiB0ICE9IGhhcmR3YXJlX2RvbWFpbiApCisgICAgICAg IHJldHVybiAtRVBFUk07CisKKyAgICBpZiAoIHQgPT0gcyApCisgICAgICAgIHJldHVybiAwOwor CisgICAgcmV0ID0gaXBtbXVfZGVhc3NpZ25fZGV2aWNlKHMsIGRldik7CisgICAgaWYgKCByZXQg KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKCB0ICkKKyAgICB7CisgICAgICAgIC8q IE5vIGZsYWdzIGFyZSBkZWZpbmVkIGZvciBBUk0uICovCisgICAgICAgIHJldCA9IGlwbW11X2Fz c2lnbl9kZXZpY2UodCwgZGV2Zm4sIGRldiwgMCk7CisgICAgICAgIGlmICggcmV0ICkKKyAgICAg ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgaXBtbXVfZHRfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgZHRfcGhhbmRsZV9hcmdzICpzcGVjKQoreworICAgIGludCBy ZXQ7CisKKyAgICAvKgorICAgICAqIFBlcmZvcm0gc2FuaXR5IGNoZWNrIG9mIHBhc3NlZCBEVCBJ T01NVSBzcGVjaWZpZXIuIEVhY2ggbWFzdGVyIGRldmljZQorICAgICAqIGdldHMgbWljcm8tVExC IChkZXZpY2UgSUQpIGFzc2lnbm1lbnQgdmlhIHRoZSAiaW9tbXVzIiBwcm9wZXJ0eQorICAgICAq IGluIERULiBXZSBleHBlY3QgI2lvbW11LWNlbGxzIHRvIGJlIDEgKE11bHRpcGxlLW1hc3RlciBJ T01NVSkgYW5kCisgICAgICogdGhpcyBjZWxsIGZvciB0aGUgbWljcm8tVExCIChkZXZpY2UgSUQp LgorICAgICAqLworICAgIGlmICggc3BlYy0+YXJnc19jb3VudCAhPSAxIHx8IHNwZWMtPmFyZ3Nb MF0gPj0gSVBNTVVfVVRMQl9NQVggKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHJl dCA9IGlvbW11X2Z3c3BlY19hZGRfaWRzKGRldiwgc3BlYy0+YXJncywgMSk7CisgICAgaWYgKCBy ZXQgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLyogSW5pdGlhbGl6ZSBvbmNlIC0geGxh dGUoKSB3aWxsIGNhbGwgbXVsdGlwbGUgdGltZXMuICovCisgICAgaWYgKCB0b19pcG1tdShkZXYp ICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaXBtbXVfaW5pdF9wbGF0Zm9ybV9k ZXZpY2UoZGV2LCBzcGVjKTsKK30KKworc3RhdGljIGludCBpcG1tdV9hZGRfZGV2aWNlKHU4IGRl dmZuLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisgICAgc3RydWN0IGlvbW11X2Z3c3BlYyAqZndz cGVjID0gZGV2X2lvbW11X2Z3c3BlY19nZXQoZGV2KTsKKworICAgIC8qIE9ubHkgbGV0IHRocm91 Z2ggZGV2aWNlcyB0aGF0IGhhdmUgYmVlbiB2ZXJpZmllZCBpbiB4bGF0ZSgpLiAqLworICAgIGlm ICggIXRvX2lwbW11KGRldikgKQorICAgICAgICByZXR1cm4gLUVOT0RFVjsKKworICAgIGlmICgg ZHRfZGV2aWNlX2lzX3Byb3RlY3RlZChkZXZfdG9fZHQoZGV2KSkgKQorICAgIHsKKyAgICAgICAg ZGV2X2VycihkZXYsICJBbHJlYWR5IGFkZGVkIHRvIElQTU1VXG4iKTsKKyAgICAgICAgcmV0dXJu IC1FRVhJU1Q7CisgICAgfQorCisgICAgLyogTGV0IFhlbiBrbm93IHRoYXQgdGhlIG1hc3RlciBk ZXZpY2UgaXMgcHJvdGVjdGVkIGJ5IGFuIElPTU1VLiAqLworICAgIGR0X2RldmljZV9zZXRfcHJv dGVjdGVkKGRldl90b19kdChkZXYpKTsKKworICAgIGRldl9pbmZvKGRldiwgIkFkZGVkIG1hc3Rl ciBkZXZpY2UgKElQTU1VICVzIG1pY3JvLVRMQnMgJXUpXG4iLAorICAgICAgICAgICAgIGRldl9u YW1lKGZ3c3BlYy0+aW9tbXVfZGV2KSwgZndzcGVjLT5udW1faWRzKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IGlwbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4g KmQpCit7CisgICAgc3RydWN0IGlwbW11X3Ztc2FfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKwor ICAgIHhlbl9kb21haW4gPSB4emFsbG9jKHN0cnVjdCBpcG1tdV92bXNhX3hlbl9kb21haW4pOwor ICAgIGlmICggIXhlbl9kb21haW4gKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIHNw aW5fbG9ja19pbml0KCZ4ZW5fZG9tYWluLT5sb2NrKTsKKyAgICBJTklUX0xJU1RfSEVBRCgmeGVu X2RvbWFpbi0+Y2FjaGVfZG9tYWlucyk7CisgICAgLyoKKyAgICAgKiBXZSBkb24ndCBjcmVhdGUg Um9vdCBJUE1NVSBkb21haW4gaGVyZSwgaXQgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZAorICAg ICAqIG9ubHksIHdoZW4gYXR0YWNoaW5nIHRoZSBmaXJzdCBtYXN0ZXIgZGV2aWNlIHRvIHRoaXMg WGVuIGRvbWFpbiBpbgorICAgICAqIGlwbW11X2Fzc2lnbl9kZXZpY2UoKS4KKyAgICAgKiB4ZW5f ZG9tYWluLT5yb290X2RvbWFpbiA9IE5VTEw7CisgICAgKi8KKworICAgIGRvbV9pb21tdShkKS0+ YXJjaC5wcml2ID0geGVuX2RvbWFpbjsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBfX2h3ZG9tX2luaXQgaXBtbXVfaW9tbXVfaHdkb21faW5pdChzdHJ1Y3QgZG9tYWluICpkKQor eworICAgIC8qIFNldCB0byBmYWxzZSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQgb24gQVJNLiAqLwor ICAgIGlmICggaW9tbXVfaHdkb21faW5jbHVzaXZlICkKKyAgICAgICAgcHJpbnRrKFhFTkxPR19X QVJOSU5HICJpcG1tdTogbWFwLWluY2x1c2l2ZSBkb20wLWlvbW11IG9wdGlvbiBpcyBub3Qgc3Vw cG9ydGVkIG9uIEFSTVxuIik7CisgICAgaW9tbXVfaHdkb21faW5jbHVzaXZlID0gZmFsc2U7Cisg ICAgaWYgKCBpb21tdV9od2RvbV9yZXNlcnZlZCA9PSAxICkKKyAgICAgICAgcHJpbnRrKFhFTkxP R19XQVJOSU5HICJpcG1tdTogbWFwLXJlc2VydmVkIGRvbTAtaW9tbXUgb3B0aW9uIGlzIG5vdCBz dXBwb3J0ZWQgb24gQVJNXG4iKTsKKyAgICBpb21tdV9od2RvbV9yZXNlcnZlZCA9IDA7CisKKyAg ICBhcmNoX2lvbW11X2h3ZG9tX2luaXQoZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlwbW11X2lvbW11 X2RvbWFpbl90ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHN0cnVjdCBpcG1tdV92 bXNhX3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKwor ICAgIGlmICggIXhlbl9kb21haW4gKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAq IERlc3Ryb3kgUm9vdCBJUE1NVSBkb21haW4gd2hpY2ggY29udGV4dCBpcyBtYXBwZWQgdG8gdGhp cyBYZW4gZG9tYWluCisgICAgICogaWYgZXhpdHMuCisgICAgICovCisgICAgaWYgKCB4ZW5fZG9t YWluLT5yb290X2RvbWFpbiApCisgICAgICAgIGlwbW11X2ZyZWVfcm9vdF9kb21haW4oeGVuX2Rv bWFpbi0+cm9vdF9kb21haW4pOworCisgICAgLyoKKyAgICAgKiBXZSBhc3N1bWUgdGhhdCBhbGwg bWFzdGVyIGRldmljZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0YWNoZWQgZnJvbQorICAgICAqIHRo aXMgWGVuIGRvbWFpbiBhbmQgdGhlcmUgbXVzdCBiZSBubyBhc3NvY2lhdGVkIENhY2hlIElQTU1V IGRvbWFpbnMKKyAgICAgKiBpbiB1c2UuCisgICAgICovCisgICAgQVNTRVJUKGxpc3RfZW1wdHko Jnhlbl9kb21haW4tPmNhY2hlX2RvbWFpbnMpKTsKKyAgICB4ZnJlZSh4ZW5fZG9tYWluKTsKKyAg ICBkb21faW9tbXUoZCktPmFyY2gucHJpdiA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW9tbXVfb3BzIGlwbW11X2lvbW11X29wcyA9Cit7CisgICAgLmluaXQgICAgICAgICAgICA9 IGlwbW11X2lvbW11X2RvbWFpbl9pbml0LAorICAgIC5od2RvbV9pbml0ICAgICAgPSBpcG1tdV9p b21tdV9od2RvbV9pbml0LAorICAgIC50ZWFyZG93biAgICAgICAgPSBpcG1tdV9pb21tdV9kb21h aW5fdGVhcmRvd24sCisgICAgLmlvdGxiX2ZsdXNoICAgICA9IGlwbW11X2lvdGxiX2ZsdXNoLAor ICAgIC5pb3RsYl9mbHVzaF9hbGwgPSBpcG1tdV9pb3RsYl9mbHVzaF9hbGwsCisgICAgLmFzc2ln bl9kZXZpY2UgICA9IGlwbW11X2Fzc2lnbl9kZXZpY2UsCisgICAgLnJlYXNzaWduX2RldmljZSA9 IGlwbW11X3JlYXNzaWduX2RldmljZSwKKyAgICAubWFwX3BhZ2UgICAgICAgID0gYXJtX2lvbW11 X21hcF9wYWdlLAorICAgIC51bm1hcF9wYWdlICAgICAgPSBhcm1faW9tbXVfdW5tYXBfcGFnZSwK KyAgICAuZHRfeGxhdGUgICAgICAgID0gaXBtbXVfZHRfeGxhdGUsCisgICAgLmFkZF9kZXZpY2Ug ICAgICA9IGlwbW11X2FkZF9kZXZpY2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR0X2Rl dmljZV9tYXRjaCBpcG1tdV9kdF9tYXRjaFtdIF9faW5pdGNvbnN0ID0KK3sKKyAgICBEVF9NQVRD SF9DT01QQVRJQkxFKCJyZW5lc2FzLGlwbW11LXI4YTc3OTUiKSwKKyAgICBEVF9NQVRDSF9DT01Q QVRJQkxFKCJyZW5lc2FzLGlwbW11LXI4YTc3OTY1IiksCisgICAgRFRfTUFUQ0hfQ09NUEFUSUJM RSgicmVuZXNhcyxpcG1tdS1yOGE3Nzk2IiksCisgICAgeyAvKiBzZW50aW5lbCAqLyB9LAorfTsK Kworc3RhdGljIF9faW5pdCBpbnQgaXBtbXVfaW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKm5v ZGUsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaW50IHJldDsKKworICAgIC8qCisgICAgICog RXZlbiBpZiB0aGUgZGV2aWNlIGNhbid0IGJlIGluaXRpYWxpemVkLCB3ZSBkb24ndCB3YW50IHRv IGdpdmUKKyAgICAgKiB0aGUgSVBNTVUgZGV2aWNlIHRvIGRvbTAuCisgICAgICovCisgICAgZHRf ZGV2aWNlX3NldF91c2VkX2J5KG5vZGUsIERPTUlEX1hFTik7CisKKyAgICByZXQgPSBpcG1tdV9w cm9iZShub2RlKTsKKyAgICBpZiAoIHJldCApCisgICAgeworICAgICAgICBkZXZfZXJyKCZub2Rl LT5kZXYsICJGYWlsZWQgdG8gaW5pdCBJUE1NVSAoJWQpXG4iLCByZXQpOworICAgICAgICByZXR1 cm4gcmV0OworICAgIH0KKworICAgIGlvbW11X3NldF9vcHMoJmlwbW11X2lvbW11X29wcyk7CisK KyAgICByZXR1cm4gMDsKK30KKworRFRfREVWSUNFX1NUQVJUKGlwbW11LCAiUmVuZXNhcyBJUE1N VS1WTVNBIiwgREVWSUNFX0lPTU1VKQorICAgIC5kdF9tYXRjaCA9IGlwbW11X2R0X21hdGNoLAor ICAgIC5pbml0ID0gaXBtbXVfaW5pdCwKK0RUX0RFVklDRV9FTkQKKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi43 LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs