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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,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 EFC6BC433ED for ; Tue, 13 Apr 2021 21:22:21 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 A8D6D61206 for ; Tue, 13 Apr 2021 21:22:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A8D6D61206 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4D7FF6E202; Tue, 13 Apr 2021 21:22:21 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 27DAF6E202 for ; Tue, 13 Apr 2021 21:22:20 +0000 (UTC) IronPort-SDR: M4TbCIm+NaqXPPALyb2VgsTr9DqzQtfy6a30wBNim5YjfUO1fxzgqNNeUSCE6WQqvpl8BaWSPF CNAH7me1D7Hg== X-IronPort-AV: E=McAfee;i="6200,9189,9953"; a="174608814" X-IronPort-AV: E=Sophos;i="5.82,220,1613462400"; d="scan'208";a="174608814" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2021 14:22:16 -0700 IronPort-SDR: JjkKK832SAaHTXrUyKzsemOQTHe3yLrHJpEts0tn+NFHuAP8E683qWBGhIfqDCbRULjPWPyvmO FS/S7jnFDEKw== X-IronPort-AV: E=Sophos;i="5.82,220,1613462400"; d="scan'208";a="382102357" Received: from dbstims-dev.fm.intel.com ([10.1.27.177]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2021 14:22:14 -0700 From: Dale B Stimson To: intel-gfx@lists.freedesktop.org Date: Tue, 13 Apr 2021 14:22:03 -0700 Message-Id: <20210413212203.793-2-dale.b.stimson@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210413212203.793-1-dale.b.stimson@intel.com> References: <20210413212203.793-1-dale.b.stimson@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 1/1] drm/i915/dg1: Add HWMON power sensor support X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QXMgcGFydCBvZiB0aGUgU3lzdGVtIE1hbmFnZW1lbmVudCBJbnRlcmZhY2UgKFNNSSksIHVzZSB0 aGUgSFdNT04Kc3Vic3lzdGVtIHRvIGRpc3BsYXkgcG93ZXIgdXRpbGl6YXRpb24uCgpUaGUgZm9s bG93aW5nIHN0YW5kYXJkIEhXTU9OIHBvd2VyIHNlbnNvcnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0 ZWQKKGFuZCBhcHByb3ByaWF0ZWx5IHNjYWxlZCk6CiAgL3N5cy9jbGFzcy9kcm0vY2FyZDAvZGV2 aWNlL2h3bW9uL2h3bW9uPGk+CgktIGVuZXJneTFfaW5wdXQKCS0gcG93ZXIxX2NhcAoJLSBwb3dl cjFfbWF4CgpTb21lIG5vbi1zdGFuZGFyZCBIV01PTiBwb3dlciBpbmZvcm1hdGlvbiBpcyBhbHNv IHByb3ZpZGVkLCBzdWNoIGFzCmVuYWJsZSBiaXRzIGFuZCBpbnRlcnZhbHMuCgpTaWduZWQtb2Zm LWJ5OiBEYWxlIEIgU3RpbXNvbiA8ZGFsZS5iLnN0aW1zb25AaW50ZWwuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAg IHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICB8ICAgMyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmMgfCA3ODggKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmggfCAgNDEgKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICB8ICA1MyArKwogNyBmaWxlcyBjaGFuZ2Vk LCA4OTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaHdtb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaHdtb24uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCmluZGV4IDFlMWNiMjQ1ZmNhNzcuLmVjOGQ1 YTBkN2VhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwpAQCAtMTQsNiArMTQsNyBAQCBjb25maWcgRFJN X0k5MTUKIAlzZWxlY3QgRFJNX01JUElfRFNJCiAJc2VsZWN0IFJFTEFZCiAJc2VsZWN0IElSUV9X T1JLCisJc2VsZWN0IEhXTU9OCiAJIyBpOTE1IGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFD UEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3Qg QUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19E RVZJQ0UgaWYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBkMGQ5MzZkOTEzN2JjLi5lMjEz ZTJiMTI5ZTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQCBpOTE1LXkg Kz0gaTkxNV9kcnYubyBcCiAJICBpOTE1X2NvbmZpZy5vIFwKIAkgIGk5MTVfaXJxLm8gXAogCSAg aTkxNV9nZXRwYXJhbS5vIFwKKwkgIGk5MTVfaHdtb24ubyBcCiAJICBpOTE1X21pdGlnYXRpb25z Lm8gXAogCSAgaTkxNV9wYXJhbXMubyBcCiAJICBpOTE1X3BjaS5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCmluZGV4IDMwNTU1N2UxOTQyYWEuLjg0YzdkZTNiMzRjN2QgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYwpAQCAtNjksNiArNjksNyBAQAogCiAjaW5jbHVkZSAiaTkxNV9kZWJ1Z2ZzLmgi CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X2h3bW9uLmgiCiAjaW5jbHVk ZSAiaTkxNV9pb2MzMi5oIgogI2luY2x1ZGUgImk5MTVfaXJxLmgiCiAjaW5jbHVkZSAiaTkxNV9t ZW1jcHkuaCIKQEAgLTY3NSw2ICs2NzYsMTAgQEAgc3RhdGljIHZvaWQgaTkxNV9kcml2ZXJfcmVn aXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWk5MTVfZGVidWdmc19y ZWdpc3RlcihkZXZfcHJpdik7CiAJaTkxNV9zZXR1cF9zeXNmcyhkZXZfcHJpdik7CiAKKwkvKiBS ZWdpc3RlciB3aXRoIGh3bW9uICovCisJaWYgKGk5MTVfaHdtb25faW5pdCgmZGV2X3ByaXYtPmRy bSkpCisJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGYWlsZWQgdG8gcmVnaXN0ZXIgZHJpdmVy IGh3bW9uIVxuIik7CisKIAkvKiBEZXBlbmRzIG9uIHN5c2ZzIGhhdmluZyBiZWVuIGluaXRpYWxp emVkICovCiAJaTkxNV9wZXJmX3JlZ2lzdGVyKGRldl9wcml2KTsKIApAQCAtNzA5LDkgKzcxNCwx MyBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAlpbnRlbF9ndF9kcml2ZXJfdW5yZWdpc3RlcigmZGV2X3ByaXYt Pmd0KTsKIAogCWk5MTVfcGVyZl91bnJlZ2lzdGVyKGRldl9wcml2KTsKKworCWk5MTVfaHdtb25f ZmluaSgmZGV2X3ByaXYtPmRybSk7CisKIAlpOTE1X3BtdV91bnJlZ2lzdGVyKGRldl9wcml2KTsK IAogCWk5MTVfdGVhcmRvd25fc3lzZnMoZGV2X3ByaXYpOworCiAJZHJtX2Rldl91bnBsdWcoJmRl dl9wcml2LT5kcm0pOwogCiAJaTkxNV9nZW1fZHJpdmVyX3VucmVnaXN0ZXIoZGV2X3ByaXYpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNjllNDNiZjkxYTE1My4uN2U5YjQ1MmM3N2UyYiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8ZHJt L2RybV9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9tZWlfaGRjcF9pbnRlcmZhY2Uu aD4KIAorI2luY2x1ZGUgImk5MTVfaHdtb24uaCIKICNpbmNsdWRlICJpOTE1X3BhcmFtcy5oIgog I2luY2x1ZGUgImk5MTVfcmVnLmgiCiAjaW5jbHVkZSAiaTkxNV91dGlscy5oIgpAQCAtMTEwOSw2 ICsxMTEwLDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcGVy ZiBwZXJmOwogCisJc3RydWN0IGk5MTVfaHdtb24gaHdtb247CisKIAkvKiBBYnN0cmFjdCB0aGUg c3VibWlzc2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdh eSAqLwogCXN0cnVjdCBpbnRlbF9ndCBndDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9od21vbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9od21vbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFiOGYzMmY3ZWQxZGUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmMKQEAgLTAs MCArMSw3ODggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKworLyoKKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworLyoKKyAqIFBvd2VyLXJl bGF0ZWQgaHdtb24gZW50cmllcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNp bmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisK KyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImd0L2ludGVsX2d0LmgiCisjaW5jbHVk ZSAiaTkxNV9od21vbi5oIgorCisvKgorICogU0ZfKiAtIHNjYWxlIGZhY3RvcnMgZm9yIHBhcnRp Y3VsYXIgcXVhbnRpdGllcy4KKyAqIFRoZSBod21vbiBzdGFuZGFyZCBzYXlzIHRoYXQgcXVhbnRp dGllcyBvZiB0aGUgZ2l2ZW4gdHlwZXMgYXJlIHNwZWNpZmllZAorICogaW4gdGhlIGdpdmVuIHVu aXRzOgorICogLSB0aW1lICAgLSBtaWxsaXNlY29uZHMKKyAqIC0gcG93ZXIgIC0gbWljcm93YXR0 cworICogLSBlbmVyZ3kgLSBtaWNyb2pvdWxlcworICovCisKKyNkZWZpbmUgU0ZfVElNRQkJICAg MTAwMAorI2RlZmluZSBTRl9QT1dFUgkxMDAwMDAwCisjZGVmaW5lIFNGX0VORVJHWQkxMDAwMDAw CisKK3N0YXRpYyB2b2lkCitfbG9ja2VkX3dpdGhfcG1faW50ZWxfdW5jb3JlX3JtdyhzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUsCisJCQkJIGk5MTVfcmVnX3QgcmVnLCB1MzIgY2xlYXIsIHUz MiBzZXQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB1bmNvcmUtPmk5MTU7 CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOworCisJbXV0ZXhfbG9jaygmaHdtb24tPmh3bW9uX2xvY2spOworCisJd2l0 aF9pbnRlbF9ydW50aW1lX3BtKHVuY29yZS0+cnBtLCB3YWtlcmVmKQorCQlpbnRlbF91bmNvcmVf cm13KHVuY29yZSwgcmVnLCBjbGVhciwgc2V0KTsKKworCW11dGV4X3VubG9jaygmaHdtb24tPmh3 bW9uX2xvY2spOworfQorCisvKgorICogX2ZpZWxkX3JlYWRfYW5kX3NjYWxlKCkKKyAqIFJldHVy biB0eXBlIG9mIHU2NCBhbGxvd3MgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBzY2FsaW5nIG1pZ2h0 IGNhdXNlIGEKKyAqIHJlc3VsdCBleGNlZWRpbmcgMzIgYml0cy4KKyAqLworc3RhdGljIF9fYWx3 YXlzX2lubGluZSB1NjQKK19maWVsZF9yZWFkX2FuZF9zY2FsZShzdHJ1Y3QgaW50ZWxfdW5jb3Jl ICp1bmNvcmUsIGk5MTVfcmVnX3QgcmdhZHIsCisJCSAgICAgIHUzMiBmaWVsZF9tc2ssIGludCBu c2hpZnQsIHVuc2lnbmVkIGludCBzY2FsZV9mYWN0b3IpCit7CisJaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7CisJdTMyIHJlZ192YWx1ZTsKKwl1NjQgc2NhbGVkX3ZhbDsKKworCXdpdGhfaW50ZWxf cnVudGltZV9wbSh1bmNvcmUtPnJwbSwgd2FrZXJlZikKKwkJcmVnX3ZhbHVlID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCByZ2Fkcik7CisKKwlyZWdfdmFsdWUgPSBsZTMyX2dldF9iaXRzKGNw dV90b19sZTMyKHJlZ192YWx1ZSksIGZpZWxkX21zayk7CisJc2NhbGVkX3ZhbCA9IG11bF91MzJf dTMyKHNjYWxlX2ZhY3RvciwgcmVnX3ZhbHVlKTsKKworCS8qIFNoaWZ0LCByb3VuZGluZyB0byBu ZWFyZXN0ICovCisJaWYgKG5zaGlmdCA+IDApCisJCXNjYWxlZF92YWwgPSAoc2NhbGVkX3ZhbCAr ICgxIDw8IChuc2hpZnQgLSAxKSkpID4+IG5zaGlmdDsKKworCXJldHVybiBzY2FsZWRfdmFsOwor fQorCisvKgorICogX2ZpZWxkX3JlYWQ2NF9hbmRfc2NhbGUoKSAtIHJlYWQgYSA2NC1iaXQgcmVn aXN0ZXIgYW5kIHNjYWxlLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NAorX2ZpZWxk X3JlYWQ2NF9hbmRfc2NhbGUoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLCBpOTE1X3JlZ190 IHJnYWRyLAorCQkJdTY0IGZpZWxkX21zaywgaW50IG5zaGlmdCwgdW5zaWduZWQgaW50IHNjYWxl X2ZhY3RvcikKK3sKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwl1NjQgcmVnX3ZhbHVlOwor CXU2NCBzY2FsZWRfdmFsOworCisJd2l0aF9pbnRlbF9ydW50aW1lX3BtKHVuY29yZS0+cnBtLCB3 YWtlcmVmKQorCQlyZWdfdmFsdWUgPSBpbnRlbF91bmNvcmVfcmVhZDY0KHVuY29yZSwgcmdhZHIp OworCisJcmVnX3ZhbHVlID0gbGU2NF9nZXRfYml0cyhjcHVfdG9fbGU2NChyZWdfdmFsdWUpLCBm aWVsZF9tc2spOworCXNjYWxlZF92YWwgPSBzY2FsZV9mYWN0b3IgKiByZWdfdmFsdWU7CisKKwkv KiBTaGlmdCwgcm91bmRpbmcgdG8gbmVhcmVzdCAqLworCWlmIChuc2hpZnQgPiAwKQorCQlzY2Fs ZWRfdmFsID0gKHNjYWxlZF92YWwgKyAoMSA8PCAobnNoaWZ0IC0gMSkpKSA+PiBuc2hpZnQ7CisK KwlyZXR1cm4gc2NhbGVkX3ZhbDsKK30KKworLyoKKyAqIF9maWVsZF9zY2FsZV9hbmRfd3JpdGUo KQorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK19maWVsZF9zY2FsZV9hbmRfd3Jp dGUoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlLAorCQkgICAgICAgaTkxNV9yZWdfdCByZ2Fk ciwKKwkJICAgICAgIHUzMiBmaWVsZF9tc2ssIGludCBuc2hpZnQsCisJCSAgICAgICB1bnNpZ25l ZCBpbnQgc2NhbGVfZmFjdG9yLCBsb25nIGx2YWwpCit7CisJdTMyIG52YWw7CisJdTMyIGJpdHNf dG9fY2xlYXI7CisJdTMyIGJpdHNfdG9fc2V0OworCisJLyogQ29tcHV0YXRpb24gaW4gNjQtYml0 cyB0byBhdm9pZCBvdmVyZmxvdy4gUm91bmQgdG8gbmVhcmVzdC4gKi8KKwludmFsID0gRElWX1JP VU5EX0NMT1NFU1RfVUxMKCh1NjQpbHZhbCA8PCBuc2hpZnQsIHNjYWxlX2ZhY3Rvcik7CisKKwli aXRzX3RvX2NsZWFyID0gZmllbGRfbXNrOworCWJpdHNfdG9fc2V0ID0gbGUzMl90b19jcHUobGUz Ml9lbmNvZGVfYml0cyhudmFsLCBmaWVsZF9tc2spKTsKKworCV9sb2NrZWRfd2l0aF9wbV9pbnRl bF91bmNvcmVfcm13KHVuY29yZSwgcmdhZHIsCisJCQkJCSBiaXRzX3RvX2NsZWFyLCBiaXRzX3Rv X3NldCk7Cit9CisKKy8qCisgKiBpOTE1X2VuZXJneTFfaW5wdXRfc2hvdyAtIEEgY3VzdG9tIGZ1 bmN0aW9uIHRvIG9idGFpbiBlbmVyZ3kxX2lucHV0LgorICogVXNlIGEgY3VzdG9tIGZ1bmN0aW9u IGluc3RlYWQgb2YgdGhlIHVzdWFsIGh3bW9uIGhlbHBlcnMgaW4gb3JkZXIgdG8KKyAqIGd1YXJh bnRlZSA2NC1iaXRzIG9mIHJlc3VsdCB0byB1c2VyLXNwYWNlLgorICogVW5pdHMgYXJlIG1pY3Jv am91bGVzLgorICoKKyAqIFRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlZ2lzdGVyIGlzIDMyLWJp dHMgYW5kIGlzIHN1YmplY3QgdG8gb3ZlcmZsb3cuCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXBlbnNh dGVzIGZvciBvdmVyZmxvdyBvZiB0aGUgMzItYml0IHJlZ2lzdGVyIGJ5IGRldGVjdGluZworICog d3JhcC1hcm91bmQgYW5kIGluY3JlbWVudGluZyBhbiBvdmVyZmxvdyBjb3VudGVyLgorICogVGhp cyBvbmx5IHdvcmtzIGlmIHRoZSByZWdpc3RlciBpcyBzYW1wbGVkIG9mdGVuIGVub3VnaCB0byBh dm9pZAorICogbWlzc2luZyBhbiBpbnN0YW5jZSBvZiBvdmVyZmxvdyAtIGFjaGlldmVkIGVpdGhl ciBieSByZXBlYXRlZAorICogcXVlcmllcyB0aHJvdWdoIHRoZSBBUEksIG9yIHZpYSBhIHBvc3Np YmxlIHRpbWVyIChmdXR1cmUgLSBUQkQpIHRoYXQKKyAqIGVuc3VyZXMgdmFsdWVzIGFyZSByZWFk IG9mdGVuIGVub3VnaCB0byBjYXRjaCBhbGwgb3ZlcmZsb3dzLgorICoKKyAqIEhvdyBsb25nIGJl Zm9yZSBvdmVyZmxvdz8gIEZvciBleGFtcGxlLCB3aXRoIGFuIGV4YW1wbGUgc2NhbGluZyBiaXQK KyAqIHNoaWZ0IG9mIDE0IGJpdHMgKHNlZSByZWdpc3RlciAqUEFDS0FHRV9QT1dFUl9TS1VfVU5J VCkgYW5kIGEgcG93ZXIgZHJhdyBvZgorICogMTAwMCB3YXR0cywgdGhlIDMyLWJpdCBjb3VudGVy IHdpbGwgb3ZlcmZsb3cgaW4gYXBwcm94aW1hdGVseSA0LjM2IG1pbnV0ZXMuCisgKgorICogRXhh bXBsZXM6CisgKiAgICAxIHdhdHQ6ICAoMl4zMiA+PiAxNCkgLyAgICAxIFcgLyAoNjAgKiA2MCAq IDI0KSBzZWNzL2RheSAtPiAzIGRheXMKKyAqIDEwMDAgd2F0dHM6ICgyXjMyID4+IDE0KSAvIDEw MDAgVyAvIDYwICAgICAgICAgICAgIHNlY3MvbWluIC0+IDQuMzYgbWludXRlcworICovCitzdGF0 aWMgc3NpemVfdAoraTkxNV9lbmVyZ3kxX2lucHV0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24g Kmh3bW9uID0gJmk5MTUtPmh3bW9uOworCWludCBuc2hpZnQgPSBod21vbi0+c2NsX3NoaWZ0X2Vu ZXJneTsKKwlzc2l6ZV90IHJldDsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwl1MzIgcmVn X3ZhbHVlOworCXU2NCB2bG87CisJdTY0IHZoaTsKKworCW11dGV4X2xvY2soJmh3bW9uLT5od21v bl9sb2NrKTsKKworCXdpdGhfaW50ZWxfcnVudGltZV9wbSh1bmNvcmUtPnJwbSwgd2FrZXJlZikK KwkJcmVnX3ZhbHVlID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLAorCQkJCQkgICAgICBod21v bi0+cmcucmVnX2VuZXJneV9zdGF0dXMpOworCisJLyoKKwkgKiBUaGUgdTMyIHJlZ2lzdGVyIGNv bmNhdGVuYXRlZCB3aXRoIHRoZSB1MzIgb3ZlcmZsb3cgY291bnRlcgorCSAqIGdpdmVzIGFuIGVm ZmVjdGl2ZSBlbmVyZ3kgY291bnRlciBzaXplIG9mIDY0LWJpdHMuICBIb3dldmVyLCB0aGUKKwkg KiBjb21wdXRhdGlvbnMgYmVsb3cgYXJlIGRvbmUgbW9kdWxvIDJeOTYgdG8gYXZvaWQgb3ZlcmZs b3cgZHVyaW5nCisJICogc2NhbGluZyBpbiB0aGUgY29udmVyc2lvbiB0byBtaWNyb2pvdWxlcy4K KwkgKgorCSAqIFRoZSBsb3ctb3JkZXIgNjQtYml0cyBvZiB0aGUgcmVzdWx0aW5nIHF1YW50aXR5 IGFyZSByZXR1cm5lZCB0bworCSAqIHRoZSBjYWxsZXIgaW4gdW5pdHMgb2YgbWljcm9qb3VsZXMs IGVuY29kZWQgaW50byBhIGRlY2ltYWwgc3RyaW5nLgorCSAqCisJICogRm9yIGEgcG93ZXIgb2Yg MTAwMCB3YXR0cywgNjQgYml0cyBpbiB1bml0cyBvZiBtaWNyb2pvdWxlcyB3aWxsCisJICogb3Zl cmZsb3cgYWZ0ZXIgNTg0IHllYXJzLgorCSAqLworCisJaWYgKGh3bW9uLT5lbmVyZ3lfY291bnRl cl9wcmV2ID4gcmVnX3ZhbHVlKQorCQlod21vbi0+ZW5lcmd5X2NvdW50ZXJfb3ZlcmZsb3crKzsK KworCWh3bW9uLT5lbmVyZ3lfY291bnRlcl9wcmV2ID0gcmVnX3ZhbHVlOworCisJLyoKKwkgKiA2 NC1iaXQgdmFyaWFibGVzIHZsbyBhbmQgdmhpIGFyZSB1c2VkIGZvciB0aGUgc2NhbGluZyBwcm9j ZXNzLgorCSAqIFRoZSA5Ni1iaXQgY291bnRlciB2YWx1ZSBpcyBjb21wb3NlZCBmcm9tIHRoZSB0 d28gNjQtYml0IHZhcmlhYmxlcworCSAqIHZoaSBhbmQgdmxvIHRodXNseTogIGNvdW50ZXIgPT0g dmhpIDw8IDMyICsgdmxvIC4KKwkgKiBUaGUgMzItYml0cyBvZiBvdmVybGFwIGJldHdlZW4gdGhl IHR3byB2YXJpYWJsZXMgaXMgY29udmVuaWVudCBmb3IKKwkgKiBoYW5kbGluZyBvdmVyZmxvd3Mg b3V0IG9mIHZsby4KKwkgKi8KKworCXZsbyA9IHJlZ192YWx1ZTsKKwl2aGkgPSBod21vbi0+ZW5l cmd5X2NvdW50ZXJfb3ZlcmZsb3c7CisKKwltdXRleF91bmxvY2soJmh3bW9uLT5od21vbl9sb2Nr KTsKKworCXZsbyA9IFNGX0VORVJHWSAqIHZsbzsKKworCS8qIFByZXBhcmUgdG8gcm91bmQgdG8g bmVhcmVzdCAqLworCWlmIChuc2hpZnQgPiAwKQorCQl2bG8gKz0gMSA8PCAobnNoaWZ0IC0gMSk7 CisKKwkvKgorCSAqIEFueXRoaW5nIGluIHRoZSB1cHBlci0zMiBiaXRzIG9mIHZsbyBnZXRzIGFk ZGVkIGludG8gdmhpIGhlcmUsCisJICogYW5kIHRoZW4gY2xlYXJlZCBmcm9tIHZsby4KKwkgKi8K Kwl2aGkgPSAoU0ZfRU5FUkdZICogdmhpKSArICh2bG8gPj4gMzIpOworCXZsbyAmPSAweGZmZmZm ZmZmVUxMOworCisJLyoKKwkgKiBBcHBseSB0aGUgcmlnaHQgc2hpZnQuCisJICogLSB2bG8gc2hp ZnRlZCBieSBpdHNlbGYuCisJICogLSB2bG8gcmVjZWl2aW5nIHdoYXQncyBzaGlmdGVkIG91dCBv ZiB2aGkuCisJICogLSB2aGkgc2hpZnRlZCBieSBpdHNlbGYKKwkgKi8KKwl2bG8gPSB2bG8gPj4g bnNoaWZ0OworCXZsbyB8PSAodmhpIDw8ICgzMiAtIG5zaGlmdCkpICYgMHhmZmZmZmZmZlVMTDsK Kwl2aGkgPSB2aGkgPj4gbnNoaWZ0OworCisJLyogQ29tYmluZWQgdG8gZ2V0IGEgNjQtYml0IHJl c3VsdCBpbiB2bG8uICovCisJdmxvIHw9ICh2aGkgPDwgMzIpOworCisJcmV0ID0gc2NucHJpbnRm KGJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwgdmxvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBzc2l6ZV90CitpOTE1X3Bvd2VyMV9tYXhfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5jb3JlOworCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOworCXNzaXplX3QgcmV0OworCXUzMiByZWdfdmFsdWU7CisJYm9vbCBp c19lbmFibGVkOworCisJd2l0aF9pbnRlbF9ydW50aW1lX3BtKHVuY29yZS0+cnBtLCB3YWtlcmVm KQorCQlyZWdfdmFsdWUgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsCisJCQkJCSAgICAgIGk5 MTUtPmh3bW9uLnJnLnBrZ19yYXBsX2xpbWl0KTsKKworCWlzX2VuYWJsZWQgPSAhIShyZWdfdmFs dWUgJiBQS0dfUFdSX0xJTV8xX0VOKTsKKworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0la RSwgIiV1XG4iLCBpc19lbmFibGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6 ZV90CitpOTE1X3Bvd2VyMV9tYXhfZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6 ZV90IGNvdW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmk5MTUtPnVuY29y ZTsKKwlzdHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisJc3NpemVfdCBy ZXQ7CisJdTMyIHZhbDsKKwl1MzIgYml0c190b19jbGVhcjsKKwl1MzIgYml0c190b19zZXQ7CisK KwlyZXQgPSBrc3RydG91MzIoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJYml0c190b19jbGVhciA9IFBLR19QV1JfTElNXzFfRU47CisJaWYgKCF2YWwpCisJCWJp dHNfdG9fc2V0ID0gMDsKKwllbHNlCisJCWJpdHNfdG9fc2V0ID0gUEtHX1BXUl9MSU1fMV9FTjsK KworCV9sb2NrZWRfd2l0aF9wbV9pbnRlbF91bmNvcmVfcm13KHVuY29yZSwgaHdtb24tPnJnLnBr Z19yYXBsX2xpbWl0LAorCQkJCQkgYml0c190b19jbGVhciwgYml0c190b19zZXQpOworCisJcmV0 dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcjFfbWF4X2ludGVydmFs X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK KwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZp OTE1LT51bmNvcmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOwor CXNzaXplX3QgcmV0OworCXU2NCB1bGx2YWw7CisKKwl1bGx2YWwgPSBfZmllbGRfcmVhZF9hbmRf c2NhbGUodW5jb3JlLCBod21vbi0+cmcucGtnX3JhcGxfbGltaXQsCisJCQkJICAgICAgIFBLR19Q V1JfTElNXzFfVElNRSwKKwkJCQkgICAgICAgaHdtb24tPnNjbF9zaGlmdF90aW1lLCBTRl9USU1F KTsKKworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsIHVsbHZhbCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcjFfbWF4X2lu dGVydmFsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNl X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CisJc3Ry dWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCXNzaXplX3QgcmV0OworCWxv bmcgdmFsOworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJX2ZpZWxkX3NjYWxlX2FuZF93cml0ZSh1bmNvcmUsIGh3bW9uLT5yZy5w a2dfcmFwbF9saW1pdCwKKwkJCSAgICAgICBQS0dfUFdSX0xJTV8yX1RJTUUsCisJCQkgICAgICAg aHdtb24tPnNjbF9zaGlmdF90aW1lLCBTRl9USU1FLCB2YWwpOworCisJcmV0dXJuIGNvdW50Owor fQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcjFfY2FwX2VuYWJsZV9zaG93KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAq YnVmKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsKKwlz dHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7CisJc3NpemVfdCByZXQ7CisJdTMyIHJlZ192YWx1ZTsKKwlib29sIGlzX2VuYWJs ZWQ7CisKKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0odW5jb3JlLT5ycG0sIHdha2VyZWYpCisJCXJl Z192YWx1ZSA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwKKwkJCQkJICAgICAgaHdtb24tPnJn LnBrZ19yYXBsX2xpbWl0X3Vkdyk7CisKKwlpc19lbmFibGVkID0gISEocmVnX3ZhbHVlICYgUEtH X1BXUl9MSU1fMl9FTik7CisKKwlyZXQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxu IiwgaXNfZW5hYmxlZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAoraTkx NV9wb3dlcjFfY2FwX2VuYWJsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNvcmU7CisJc3Ry dWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCXNzaXplX3QgcmV0OworCXUz MiB2YWw7CisJdTMyIGJpdHNfdG9fY2xlYXI7CisJdTMyIGJpdHNfdG9fc2V0OworCisJcmV0ID0g a3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWJp dHNfdG9fY2xlYXIgPSBQS0dfUFdSX0xJTV8yX0VOOworCWlmICghdmFsKQorCQliaXRzX3RvX3Nl dCA9IDA7CisJZWxzZQorCQliaXRzX3RvX3NldCA9IFBLR19QV1JfTElNXzJfRU47CisKKwlfbG9j a2VkX3dpdGhfcG1faW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIGh3bW9uLT5yZy5wa2dfcmFwbF9s aW1pdF91ZHcsCisJCQkJCSBiaXRzX3RvX2NsZWFyLCBiaXRzX3RvX3NldCk7CisKKwlyZXR1cm4g Y291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bvd2VyX2RlZmF1bHRfbGltaXRfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJ ICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3 bW9uOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAi JXVcbiIsIGh3bW9uLT5wb3dlcl9tYXhfaW5pdGlhbF92YWx1ZSk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9wb3dlcl9taW5fbGltaXRfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5jb3JlOworCXN0cnVj dCBpOTE1X2h3bW9uICpod21vbiA9ICZpOTE1LT5od21vbjsKKwlzc2l6ZV90IHJldDsKKwl1MzIg dXZhbDsKKworCS8qCisJICogVGhpcyBpcyBhIDY0LWJpdCByZWdpc3RlciBidXQgdGhlIGluZGl2 aWR1YWwgZmllbGRzIGFyZSB1bmRlciAzMiBiaXRzCisJICogaW4gc2l6ZSBldmVuIGFmdGVyIHNj YWxpbmcuCisJICogVGhlIFVBUEkgc3BlY2lmaWVzIGEgc2l6ZSBvZiAzMiBiaXRzLgorCSAqIFRo ZSBVQVBJIHNwZWNpZmllcyB0aGF0IDAgc2hvdWxkIGJlIHJldHVybmVkIGlmIHVuc3VwcG9ydGVk LgorCSAqIFNvLCB1c2luZyB1MzIgYW5kICV1IGlzIHN1ZmZpY2llbnQuCisJICovCisJaWYgKGk5 MTVfbW1pb19yZWdfdmFsaWQoaHdtb24tPnJnLnBrZ19wb3dlcl9za3UpKQorCQl1dmFsID0gKHUz MilfZmllbGRfcmVhZDY0X2FuZF9zY2FsZSh1bmNvcmUsCisJCQkJCQkgICAgaHdtb24tPnJnLnBr Z19wb3dlcl9za3UsCisJCQkJCQkgICAgUEtHX01JTl9QV1IsCisJCQkJCQkgICAgaHdtb24tPnNj bF9zaGlmdF9wb3dlciwKKwkJCQkJCSAgICBTRl9QT1dFUik7CisJZWxzZQorCQl1dmFsID0gMDsK KworCXJldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB1dmFsKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitpOTE1X3Bvd2VyX21heF9saW1pdF9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkg IGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZpOTE1LT51bmNv cmU7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCXNzaXplX3Qg cmV0OworCXUzMiB1dmFsOworCisJLyoKKwkgKiBUaGlzIGlzIGEgNjQtYml0IHJlZ2lzdGVyIGJ1 dCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgYXJlIHVuZGVyIDMyIGJpdHMKKwkgKiBpbiBzaXplIGV2 ZW4gYWZ0ZXIgc2NhbGluZy4KKwkgKiBUaGUgVUFQSSBzcGVjaWZpZXMgYSBzaXplIG9mIDMyIGJp dHMuCisJICogVGhlIFVBUEkgc3BlY2lmaWVzIHRoYXQgVUlOVF9NQVggc2hvdWxkIGJlIHJldHVy bmVkIGlmIHVuc3VwcG9ydGVkLgorCSAqIFNvLCB1c2luZyB1MzIgYW5kICV1IGlzIHN1ZmZpY2ll bnQuCisJICovCisJaWYgKGk5MTVfbW1pb19yZWdfdmFsaWQoaHdtb24tPnJnLnBrZ19wb3dlcl9z a3UpKQorCQl1dmFsID0gKHUzMilfZmllbGRfcmVhZDY0X2FuZF9zY2FsZSh1bmNvcmUsCisJCQkJ CQkgICAgaHdtb24tPnJnLnBrZ19wb3dlcl9za3UsCisJCQkJCQkgICAgUEtHX01BWF9QV1IsCisJ CQkJCQkgICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkJCSAgICBTRl9QT1dFUik7CisJ ZWxzZQorCQl1dmFsID0gVUlOVF9NQVg7CisKKwlyZXQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJ WkUsICIldVxuIiwgdXZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgU0VOU09SX0RF VklDRV9BVFRSKHBvd2VyMV9tYXhfZW5hYmxlLCAwNjY0LAorCQkJICBpOTE1X3Bvd2VyMV9tYXhf ZW5hYmxlX3Nob3csCisJCQkgIGk5MTVfcG93ZXIxX21heF9lbmFibGVfc3RvcmUsIDApOworc3Rh dGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwb3dlcjFfbWF4X2ludGVydmFsLCAwNjY0LAorCQkJICBp OTE1X3Bvd2VyMV9tYXhfaW50ZXJ2YWxfc2hvdywKKwkJCSAgaTkxNV9wb3dlcjFfbWF4X2ludGVy dmFsX3N0b3JlLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocG93ZXIxX2NhcF9lbmFi bGUsIDA2NjQsCisJCQkgIGk5MTVfcG93ZXIxX2NhcF9lbmFibGVfc2hvdywKKwkJCSAgaTkxNV9w b3dlcjFfY2FwX2VuYWJsZV9zdG9yZSwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHBv d2VyX2RlZmF1bHRfbGltaXQsIDA0NDQsCisJCQkgIGk5MTVfcG93ZXJfZGVmYXVsdF9saW1pdF9z aG93LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocG93ZXJfbWluX2xpbWl0 LCAwNDQ0LAorCQkJICBpOTE1X3Bvd2VyX21pbl9saW1pdF9zaG93LCBOVUxMLCAwKTsKK3N0YXRp YyBTRU5TT1JfREVWSUNFX0FUVFIocG93ZXJfbWF4X2xpbWl0LCAwNDQ0LAorCQkJICBpOTE1X3Bv d2VyX21heF9saW1pdF9zaG93LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIo ZW5lcmd5MV9pbnB1dCwgMDQ0NCwKKwkJCSAgaTkxNV9lbmVyZ3kxX2lucHV0X3Nob3csIE5VTEws IDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHdtb25fYXR0cmlidXRlc1tdID0gewor CSZzZW5zb3JfZGV2X2F0dHJfcG93ZXIxX21heF9lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vu c29yX2Rldl9hdHRyX3Bvd2VyMV9tYXhfaW50ZXJ2YWwuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29y X2Rldl9hdHRyX3Bvd2VyMV9jYXBfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZf YXR0cl9wb3dlcl9kZWZhdWx0X2xpbWl0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0 cl9wb3dlcl9taW5fbGltaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2Vy X21heF9saW1pdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZW5lcmd5MV9pbnB1 dC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90IGh3bW9uX2F0dHJp YnV0ZXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJc3RydWN0IGF0dHJpYnV0 ZSAqYXR0ciwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2 KGtvYmopOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGk5MTVfaHdtb24gKmh3bW9uID0gJmk5MTUtPmh3bW9uOworCWk5MTVf cmVnX3QgcmdhZHI7CisKKwlpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2VuZXJneTFfaW5w dXQuZGV2X2F0dHIuYXR0cikKKwkJcmdhZHIgPSBod21vbi0+cmcucmVnX2VuZXJneV9zdGF0dXM7 CisJZWxzZSBpZiAoYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9tYXhfZW5hYmxlLmRl dl9hdHRyLmF0dHIpCisJCXJnYWRyID0gaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0OworCWVsc2Ug aWYgKGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfbWF4X2ludGVydmFsLmRldl9hdHRy LmF0dHIpCisJCXJnYWRyID0gaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0OworCWVsc2UgaWYgKGF0 dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfY2FwX2VuYWJsZS5kZXZfYXR0ci5hdHRyKQor CQlyZ2FkciA9IGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdF91ZHc7CisJZWxzZSBpZiAoYXR0ciA9 PSAmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyX2RlZmF1bHRfbGltaXQuZGV2X2F0dHIuYXR0cikKKwkJ cmdhZHIgPSBod21vbi0+cmcucGtnX3JhcGxfbGltaXQ7CisJZWxzZSBpZiAoYXR0ciA9PSAmc2Vu c29yX2Rldl9hdHRyX3Bvd2VyX21pbl9saW1pdC5kZXZfYXR0ci5hdHRyKQorCQlyZXR1cm4gYXR0 ci0+bW9kZTsKKwllbHNlIGlmIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfcG93ZXJfbWF4X2xp bWl0LmRldl9hdHRyLmF0dHIpCisJCXJldHVybiBhdHRyLT5tb2RlOworCWVsc2UKKwkJcmV0dXJu IDA7CisKKwlpZiAoIWk5MTVfbW1pb19yZWdfdmFsaWQocmdhZHIpKQorCQlyZXR1cm4gMDsKKwor CXJldHVybiBhdHRyLT5tb2RlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9n cm91cCBod21vbl9hdHRyZ3JvdXAgPSB7CisJLmF0dHJzID0gaHdtb25fYXR0cmlidXRlcywKKwku aXNfdmlzaWJsZSA9IGh3bW9uX2F0dHJpYnV0ZXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpod21vbl9ncm91cHNbXSA9IHsKKwkmaHdtb25fYXR0 cmdyb3VwLAorCU5VTEwKK307CisKKy8qCisgKiBIV01PTiBTRU5TT1IgVFlQRSA9IGh3bW9uX3Bv d2VyCisgKiAgLSBTdXN0YWluZWQgUG93ZXIgKHBvd2VyMV9tYXgpCisgKiAgLSBCdXJzdCBwb3dl ciAgICAgKHBvd2VyMV9jYXApCisgKiAgLSBQZWFrIHBvd2VyICAgICAgKHBvd2VyMV9jcml0KQor ICovCitzdGF0aWMgY29uc3QgdTMyIGk5MTVfY29uZmlnX3Bvd2VyW10gPSB7CisJSFdNT05fUF9D QVAgfCBIV01PTl9QX01BWCwKKwkwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2No YW5uZWxfaW5mbyBpOTE1X3Bvd2VyID0geworCS50eXBlID0gaHdtb25fcG93ZXIsCisJLmNvbmZp ZyA9IGk5MTVfY29uZmlnX3Bvd2VyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9j aGFubmVsX2luZm8gKmk5MTVfaW5mb1tdID0geworCSZpOTE1X3Bvd2VyLAorCU5VTEwKK307CisK K3N0YXRpYyB1bW9kZV90CitpOTE1X3Bvd2VyX2lzX3Zpc2libGUoY29uc3Qgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBhdHRyLCBpbnQgY2hhbikKK3sKKwlpOTE1X3JlZ190IHJn YWRyOworCisJc3dpdGNoIChhdHRyKSB7CisJY2FzZSBod21vbl9wb3dlcl9tYXg6CisJCXJnYWRy ID0gaTkxNS0+aHdtb24ucmcucGtnX3JhcGxfbGltaXQ7CisJCWJyZWFrOworCWNhc2UgaHdtb25f cG93ZXJfY2FwOgorCQlyZ2FkciA9IGk5MTUtPmh3bW9uLnJnLnBrZ19yYXBsX2xpbWl0X3VkdzsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpOTE1X21taW9f cmVnX3ZhbGlkKHJnYWRyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMDY2NDsKK30KKworc3Rh dGljIGludAoraTkxNV9wb3dlcl9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1 MzIgYXR0ciwgaW50IGNoYW4sIGxvbmcgKnZhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUgPSAmaTkxNS0+dW5jb3JlOworCXN0cnVjdCBpOTE1X2h3bW9uICpod21vbiA9ICZpOTE1 LT5od21vbjsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoYXR0cikgeworCWNhc2UgaHdtb25f cG93ZXJfbWF4OgorCQkqdmFsID0gKGxvbmcpX2ZpZWxkX3JlYWRfYW5kX3NjYWxlKHVuY29yZSwK KwkJCQkJCSAgIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwKKwkJCQkJCSAgIFBLR19QV1JfTElN XzEsCisJCQkJCQkgICBod21vbi0+c2NsX3NoaWZ0X3Bvd2VyLAorCQkJCQkJICAgU0ZfUE9XRVIp OworCQlicmVhazsKKwljYXNlIGh3bW9uX3Bvd2VyX2NhcDoKKwkJKnZhbCA9IChsb25nKV9maWVs ZF9yZWFkX2FuZF9zY2FsZSh1bmNvcmUsCisJCQkJCQkgICBod21vbi0+cmcucGtnX3JhcGxfbGlt aXRfdWR3LAorCQkJCQkJICAgUEtHX1BXUl9MSU1fMiwKKwkJCQkJCSAgIGh3bW9uLT5zY2xfc2hp ZnRfcG93ZXIsCisJCQkJCQkgICBTRl9QT1dFUik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJl dCA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5 MTVfcG93ZXJfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBhdHRyLCBp bnQgY2hhbiwgbG9uZyB2YWwpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmk5 MTUtPnVuY29yZTsKKwlzdHJ1Y3QgaTkxNV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisJ aW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGF0dHIpIHsKKwljYXNlIGh3bW9uX3Bvd2VyX21heDoK KwkJX2ZpZWxkX3NjYWxlX2FuZF93cml0ZSh1bmNvcmUsCisJCQkJICAgICAgIGh3bW9uLT5yZy5w a2dfcmFwbF9saW1pdCwKKwkJCQkgICAgICAgUEtHX1BXUl9MSU1fMSwKKwkJCQkgICAgICAgaHdt b24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkgICAgICAgU0ZfUE9XRVIsIHZhbCk7CisJCWJyZWFr OworCWNhc2UgaHdtb25fcG93ZXJfY2FwOgorCQlfZmllbGRfc2NhbGVfYW5kX3dyaXRlKHVuY29y ZSwKKwkJCQkgICAgICAgaHdtb24tPnJnLnBrZ19yYXBsX2xpbWl0X3VkdywKKwkJCQkgICAgICAg UEtHX1BXUl9MSU1fMiwKKwkJCQkgICAgICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkg ICAgICAgU0ZfUE9XRVIsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BO T1RTVVBQOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bW9kZV90CitpOTE1X2lz X3Zpc2libGUoY29uc3Qgdm9pZCAqZGF0YSwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwK KwkJdTMyIGF0dHIsIGludCBjaGFubmVsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopZGF0YTsKKworCXN3aXRjaCAodHlwZSkg eworCWNhc2UgaHdtb25fcG93ZXI6CisJCXJldHVybiBpOTE1X3Bvd2VyX2lzX3Zpc2libGUoaTkx NSwgYXR0ciwgY2hhbm5lbCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0 aWMgaW50CitpOTE1X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90 eXBlcyB0eXBlLCB1MzIgYXR0ciwKKwkgIGludCBjaGFubmVsLCBsb25nICp2YWwpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBrZGV2X3RvX2k5MTUoZGV2KTsKKworCXN3aXRj aCAodHlwZSkgeworCWNhc2UgaHdtb25fcG93ZXI6CisJCXJldHVybiBpOTE1X3Bvd2VyX3JlYWQo aTkxNSwgYXR0ciwgY2hhbm5lbCwgdmFsKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNV UFA7CisJfQorfQorCitzdGF0aWMgaW50CitpOTE1X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwg ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwgdTMyIGF0dHIsCisJICAgaW50IGNoYW5uZWws IGxvbmcgdmFsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0ga2Rldl90b19p OTE1KGRldik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIGh3bW9uX3Bvd2VyOgorCQlyZXR1 cm4gaTkxNV9wb3dlcl93cml0ZShpOTE1LCBhdHRyLCBjaGFubmVsLCB2YWwpOworCWRlZmF1bHQ6 CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdt b25fb3BzIGk5MTVfaHdtb25fb3BzID0geworCS5pc192aXNpYmxlID0gaTkxNV9pc192aXNpYmxl LAorCS5yZWFkID0gaTkxNV9yZWFkLAorCS53cml0ZSA9IGk5MTVfd3JpdGUsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBpOTE1X2NoaXBfaW5mbyA9IHsKKwkub3Bz ID0gJmk5MTVfaHdtb25fb3BzLAorCS5pbmZvID0gaTkxNV9pbmZvLAorfTsKKworc3RhdGljIHZv aWQKK2k5MTVfaHdtb25fZ2V0X3ByZXJlZ2lzdHJhdGlvbl9pbmZvKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCXN0cnVjdCBpOTE1X2h3bW9uICpod21vbiA9ICZpOTE1LT5od21v bjsKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5jb3JlOworCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOworCXUzMiB2YWxfc2t1X3VuaXQ7CisJX19sZTMyIGxlX3NrdV91 bml0OworCisJaWYgKElTX0RHMShpOTE1KSkgeworCQlod21vbi0+cmcucGtnX3Bvd2VyX3NrdV91 bml0ID0gUENVX1BBQ0tBR0VfUE9XRVJfU0tVX1VOSVQ7CisJCWh3bW9uLT5yZy5wa2dfcG93ZXJf c2t1ID0gUENVX1BBQ0tBR0VfUE9XRVJfU0tVOworCQlod21vbi0+cmcucGtnX2VuZXJneV9zdGF0 dXMgPSBQQ1VfUEFDS0FHRV9FTkVSR1lfU1RBVFVTOworCQlod21vbi0+cmcucGtnX3JhcGxfbGlt aXQgPSBQQ1VfUEFDS0FHRV9SQVBMX0xJTUlUOworCQlod21vbi0+cmcucGtnX3JhcGxfbGltaXRf dWR3ID0gUENVX1BBQ0tBR0VfUkFQTF9MSU1JVF9VRFc7CisJCWh3bW9uLT5yZy5wbHRfZW5lcmd5 X3N0YXR1cyA9IFBDVV9QTEFURk9STV9FTkVSR1lfU1RBVFVTOworCX0gZWxzZSB7CisJCWh3bW9u LT5yZy5wa2dfcG93ZXJfc2t1X3VuaXQgPSBJTlZBTElEX01NSU9fUkVHOworCQlod21vbi0+cmcu cGtnX3Bvd2VyX3NrdSA9IElOVkFMSURfTU1JT19SRUc7CisJCWh3bW9uLT5yZy5wa2dfZW5lcmd5 X3N0YXR1cyA9IElOVkFMSURfTU1JT19SRUc7CisJCWh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCA9 IElOVkFMSURfTU1JT19SRUc7CisJCWh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdF91ZHcgPSBJTlZB TElEX01NSU9fUkVHOworCQlod21vbi0+cmcucGx0X2VuZXJneV9zdGF0dXMgPSBJTlZBTElEX01N SU9fUkVHOworCX0KKworCS8qCisJICogSWYgYSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0ICpf UExBVEZPUk1fRU5FUkdZX1NUQVRVUywKKwkgKiB0cnkgKlBBQ0tBR0VfRU5FUkdZX1NUQVRVUy4K KwkgKi8KKwlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChod21vbi0+cmcucGx0X2VuZXJneV9zdGF0 dXMpKQorCQlod21vbi0+cmcucmVnX2VuZXJneV9zdGF0dXMgPSBod21vbi0+cmcucGx0X2VuZXJn eV9zdGF0dXM7CisJZWxzZQorCQlod21vbi0+cmcucmVnX2VuZXJneV9zdGF0dXMgPSBod21vbi0+ cmcucGtnX2VuZXJneV9zdGF0dXM7CisKKwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQo dW5jb3JlLT5ycG0pOworCisJLyoKKwkgKiBUaGUgY29udGVudHMgb2YgcmVnaXN0ZXIgaHdtb24t PnJnLnBrZ19wb3dlcl9za3VfdW5pdCBkbyBub3QgY2hhbmdlLAorCSAqIHNvIHJlYWQgaXQgb25j ZSBhbmQgc3RvcmUgdGhlIHNoaWZ0IHZhbHVlcy4KKwkgKi8KKwlpZiAoaTkxNV9tbWlvX3JlZ192 YWxpZChod21vbi0+cmcucGtnX3Bvd2VyX3NrdV91bml0KSkKKwkJdmFsX3NrdV91bml0ID0gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLAorCQkJCQkJIGh3bW9uLT5yZy5wa2dfcG93ZXJfc2t1X3Vu aXQpOworCWVsc2UKKwkJdmFsX3NrdV91bml0ID0gMDsKKworCWh3bW9uLT5lbmVyZ3lfY291bnRl cl9vdmVyZmxvdyA9IDA7CisKKwlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChod21vbi0+cmcucmVn X2VuZXJneV9zdGF0dXMpKQorCQlod21vbi0+ZW5lcmd5X2NvdW50ZXJfcHJldiA9CisJCQlpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIGh3bW9uLT5yZy5yZWdfZW5lcmd5X3N0YXR1cyk7CisJZWxz ZQorCQlod21vbi0+ZW5lcmd5X2NvdW50ZXJfcHJldiA9IDA7CisKKwlpbnRlbF9ydW50aW1lX3Bt X3B1dCh1bmNvcmUtPnJwbSwgd2FrZXJlZik7CisKKwlsZV9za3VfdW5pdCA9IGNwdV90b19sZTMy KHZhbF9za3VfdW5pdCk7CisJaHdtb24tPnNjbF9zaGlmdF9wb3dlciA9IGxlMzJfZ2V0X2JpdHMo bGVfc2t1X3VuaXQsIFBLR19QV1JfVU5JVCk7CisJaHdtb24tPnNjbF9zaGlmdF9lbmVyZ3kgPSBs ZTMyX2dldF9iaXRzKGxlX3NrdV91bml0LCBQS0dfRU5FUkdZX1VOSVQpOworCWh3bW9uLT5zY2xf c2hpZnRfdGltZSA9IGxlMzJfZ2V0X2JpdHMobGVfc2t1X3VuaXQsIFBLR19USU1FX1VOSVQpOwor CisJLyoKKwkgKiBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIG9idGFpbiB0aGUgcG93ZXIgZGVm YXVsdF9saW1pdC4KKwkgKiBUaGUgYmVzdCBrbm93biB3b3JrYXJvdW5kIGlzIHRvIHVzZSB0aGUg aW5pdGlhbCB2YWx1ZSBvZiBwb3dlcjFfbWF4LgorCSAqCisJICogVGhlIHZhbHVlIG9mIHBvd2Vy MV9tYXggaXMgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb24gcmVib290LCBidXQgaXMKKwkgKiBub3Qg cmVzZXQgYnkgYSBtb2R1bGUgdW5sb2FkL2xvYWQgc2VxdWVuY2UuICBUbyBhbGxvdyBwcm9wZXIK KwkgKiBmdW5jdGlvbmluZyBhZnRlciBhIG1vZHVsZSByZWxvYWQsIHRoZSB2YWx1ZSBmb3IgcG93 ZXIxX21heCBpcworCSAqIHJlc3RvcmVkIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSBhdCBtb2R1bGUg dW5sb2FkIHRpbWUgaW4KKwkgKiBpOTE1X2h3bW9uX2ZpbmkoKS4KKwkgKi8KKwlod21vbi0+cG93 ZXJfbWF4X2luaXRpYWxfdmFsdWUgPQorCQkodTMyKV9maWVsZF9yZWFkX2FuZF9zY2FsZSh1bmNv cmUsCisJCQkJCSAgIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwKKwkJCQkJICAgUEtHX1BXUl9M SU1fMSwKKwkJCQkJICAgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwgU0ZfUE9XRVIpOworfQorCitp bnQgaTkxNV9od21vbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2KQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkcm1fZGV2KTsKKwlzdHJ1Y3QgaTkx NV9od21vbiAqaHdtb24gPSAmaTkxNS0+aHdtb247CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2 OworCisJbXV0ZXhfaW5pdCgmaHdtb24tPmh3bW9uX2xvY2spOworCisJaTkxNV9od21vbl9nZXRf cHJlcmVnaXN0cmF0aW9uX2luZm8oaTkxNSk7CisKKwlod21vbl9kZXYgPSBod21vbl9kZXZpY2Vf cmVnaXN0ZXJfd2l0aF9pbmZvKGRybV9kZXYtPmRldiwgImk5MTUiLAorCQkJCQkJICAgIGRybV9k ZXYsCisJCQkJCQkgICAgJmk5MTVfY2hpcF9pbmZvLAorCQkJCQkJICAgIGh3bW9uX2dyb3Vwcyk7 CisKKwlpZiAoSVNfRVJSKGh3bW9uX2RldikpIHsKKwkJbXV0ZXhfZGVzdHJveSgmaHdtb24tPmh3 bW9uX2xvY2spOworCQlyZXR1cm4gUFRSX0VSUihod21vbl9kZXYpOworCX0KKworCWh3bW9uLT5k ZXYgPSBod21vbl9kZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2h3bW9uX2Zpbmko c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KGRybV9kZXYpOworCXN0cnVjdCBpOTE1X2h3bW9uICpod21vbiA9ICZp OTE1LT5od21vbjsKKworCWlmIChod21vbi0+cG93ZXJfbWF4X2luaXRpYWxfdmFsdWUpIHsKKwkJ LyogUmVzdG9yZSBwb3dlcjFfbWF4LiAqLworCQlfZmllbGRfc2NhbGVfYW5kX3dyaXRlKCZpOTE1 LT51bmNvcmUsIGh3bW9uLT5yZy5wa2dfcmFwbF9saW1pdCwKKwkJCQkgICAgICAgUEtHX1BXUl9M SU1fMSwgaHdtb24tPnNjbF9zaGlmdF9wb3dlciwKKwkJCQkgICAgICAgU0ZfUE9XRVIsCisJCQkJ ICAgICAgIGh3bW9uLT5wb3dlcl9tYXhfaW5pdGlhbF92YWx1ZSk7CisJfQorCisJaWYgKGh3bW9u LT5kZXYpCisJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uLT5kZXYpOworCisJbXV0ZXhf ZGVzdHJveSgmaHdtb24tPmh3bW9uX2xvY2spOworCisJbWVtc2V0KGh3bW9uLCAwLCBzaXplb2Yo Kmh3bW9uKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9u LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2h3bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMGJlOTE5ZjBhNDYzZAotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaHdtb24uaApAQCAtMCwwICsxLDQxIEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JTlRFTF9IV01PTl9IX18KKyNk ZWZpbmUgX19JTlRFTF9IV01PTl9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+Cisj aW5jbHVkZSAiaTkxNV9yZWcuaCIKKworc3RydWN0IGk5MTVfaHdtb25fcmVnIHsKKwlpOTE1X3Jl Z190IHBrZ19wb3dlcl9za3VfdW5pdDsKKwlpOTE1X3JlZ190IHBrZ19wb3dlcl9za3U7CisJaTkx NV9yZWdfdCBwa2dfZW5lcmd5X3N0YXR1czsKKwlpOTE1X3JlZ190IHBrZ19yYXBsX2xpbWl0Owor CWk5MTVfcmVnX3QgcGtnX3JhcGxfbGltaXRfdWR3OworCWk5MTVfcmVnX3QgcGx0X2VuZXJneV9z dGF0dXM7CisJaTkxNV9yZWdfdCByZWdfZW5lcmd5X3N0YXR1czsKK307CisKK3N0cnVjdCBpOTE1 X2h3bW9uIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGh3bW9uX2xvY2s7 CS8qIGNvdW50ZXIgb3ZlcmZsb3cgbG9naWMgYW5kIHJtdyAqLworCisJc3RydWN0IGk5MTVfaHdt b25fcmVnIHJnOworCisJdTMyIGVuZXJneV9jb3VudGVyX292ZXJmbG93OworCXUzMiBlbmVyZ3lf Y291bnRlcl9wcmV2OworCXUzMiBwb3dlcl9tYXhfaW5pdGlhbF92YWx1ZTsKKworCWludCBzY2xf c2hpZnRfcG93ZXI7CisJaW50IHNjbF9zaGlmdF9lbmVyZ3k7CisJaW50IHNjbF9zaGlmdF90aW1l OworfTsKKworaW50IGk5MTVfaHdtb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rldik7 Cit2b2lkIGk5MTVfaHdtb25fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rldik7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggZjgwZDY1NjMzMWY0Mi4uNjJmY2NmNzFk ZGFkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC00MDcxLDYgKzQwNzEsNTkgQEAgc3Rh dGljIGlubGluZSBib29sIGk5MTVfbW1pb19yZWdfdmFsaWQoaTkxNV9yZWdfdCByZWcpCiAjZGVm aW5lIEJYVF9SUF9TVEFURV9DQVAgICAgICAgIF9NTUlPKDB4MTM4MTcwKQogI2RlZmluZSBHRU45 X1JQX1NUQVRFX0xJTUlUUwlfTU1JTygweDEzODE0OCkKIAorLyogREcxICovCisKKy8qIGJhc2Vk IG9uIE1DSEJBUl9NSVJST1JfQkFTRV9TTkIgPT0gMHgxNDAwMDAgKi8KKyNkZWZpbmUgUENVX1BB Q0tBR0VfUE9XRVJfU0tVX1VOSVQJX01NSU8oTUNIQkFSX01JUlJPUl9CQVNFX1NOQiArIDB4NTkz OCkKKyNkZWZpbmUgUENVX1BBQ0tBR0VfRU5FUkdZX1NUQVRVUwlfTU1JTyhNQ0hCQVJfTUlSUk9S X0JBU0VfU05CICsgMHg1OTNjKQorI2RlZmluZSBQQ1VfUEFDS0FHRV9SQVBMX0xJTUlUCQlfTU1J TyhNQ0hCQVJfTUlSUk9SX0JBU0VfU05CICsgMHg1OWEwKQorI2RlZmluZSBQQ1VfUEFDS0FHRV9S QVBMX0xJTUlUX1VEVwlfTU1JTyhNQ0hCQVJfTUlSUk9SX0JBU0VfU05CICsgMHg1OWE0KQorI2Rl ZmluZSBQQ1VfUEFDS0FHRV9QT1dFUl9TS1UJCUlOVkFMSURfTU1JT19SRUcKKyNkZWZpbmUgUENV X1BMQVRGT1JNX0VORVJHWV9TVEFUVVMJSU5WQUxJRF9NTUlPX1JFRworCisvKiBGaWVsZHMgZm9y ICpfUEFDS0FHRV9SQVBMX0xJTUlUOiAqLworI2RlZmluZSAgIFBLR19QV1JfTElNXzEJCQlSRUdf R0VOTUFTSygxNCwgMCkKKyNkZWZpbmUgICBQS0dfUFdSX0xJTV8xX0VOCQlSRUdfQklUKDE1KQor I2RlZmluZSAgIFBLR19QV1JfTElNXzFfVElNRQkJUkVHX0dFTk1BU0soMjMsIDE3KQorCisvKgor ICogRmllbGRzIGZvciAqX1BBQ0tBR0VfUkFQTF9MSU1JVF9VRFc6CisgKiBJbiBkb2NzLCB0aGVz ZSBmaWVsZHMgbWF5IGJlIGRlZmluZWQgcmVsYXRpdmUgdG8gdGhlIGVudGlyZSA2NC1iaXQKKyAq IHJlZ2lzdGVyLCBidXQgaGVyZSB0aGV5IGFyZSBkZWZpbmVkIHJlbGF0aXZlIHRvIHRoZSAzMi1i aXQgYm91bmRhcnkuCisgKi8KKyNkZWZpbmUgICBQS0dfUFdSX0xJTV8yCQkJUkVHX0dFTk1BU0so MTQsIDApCS8vIDQ2OjMyCisjZGVmaW5lICAgUEtHX1BXUl9MSU1fMl9FTgkJUkVHX0JJVCgxNSkJ CS8vIDQ3OjQ3CisjZGVmaW5lICAgUEtHX1BXUl9MSU1fMl9USU1FCQlSRUdfR0VOTUFTSygyMywg MTcpCS8vIDU1OjQ5CisKKy8qCisgKiAqX1BBQ0tBR0VfUE9XRVJfU0tVX1VOSVQgLSBmaWVsZHMg c3BlY2lmeWluZyBzY2FsaW5nIGZvciBQQ1UgcXVhbnRpdGllcy4KKyAqIC0gUEtHX1BXUl9VTklU IC0gUG93ZXIgVW5pdHMgdXNlZCBmb3IgcG93ZXIgY29udHJvbCByZWdpc3RlcnMuIFRoZQorICog ICBhY3R1YWwgdW5pdCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGJ5IDEgVyAvIFBvd2VyKDIsUEtHX1BX Ul9VTklUKS4KKyAqIC0gUEtHX0VORVJHWV9VTklUIC0gRW5lcmd5IFVuaXRzIHVzZWQgZm9yIHBv d2VyIGNvbnRyb2wgcmVnaXN0ZXJzLiBUaGUKKyAqICAgYWN0dWFsIHVuaXQgdmFsdWUgaXMgY2Fs Y3VsYXRlZCBieSAxIEogLyBQb3dlcigyLFBLR19FTkVSR1lfVU5JVCkuCisgKiAtIFBLR19USU1F X1VOSVQgLSBUaW1lIFVuaXRzIHVzZWQgZm9yIHBvd2VyIGNvbnRyb2wgcmVnaXN0ZXJzLiBUaGUK KyAqICAgYWN0dWFsIHVuaXQgdmFsdWUgaXMgY2FsY3VsYXRlZCBieSAxIHMgLyBQb3dlcigyLFBL R19USU1FX1VOSVQpLgorICovCisjZGVmaW5lICAgUEtHX1BXUl9VTklUCQkJUkVHX0dFTk1BU0so MywgMCkKKyNkZWZpbmUgICBQS0dfRU5FUkdZX1VOSVQJCVJFR19HRU5NQVNLKDEyLCA4KQorI2Rl ZmluZSAgIFBLR19USU1FX1VOSVQJCQlSRUdfR0VOTUFTSygxOSwgMTYpCisKKy8qCisgKiAqX1BB Q0tBR0VfUE9XRVJfU0tVIC0gU0tVIHBvd2VyIGFuZCB0aW1pbmcgcGFyYW1ldGVycy4KKyAqIFVz ZWQgaGVyZWluIGFzIGEgNjQtYml0IGJpdCByZWdpc3Rlci4KKyAqIFRoZXNlIG1hc2tzIGFyZSBk ZWZpbmVkIHVzaW5nIEdFTk1BU0tfVUxMIGFzIFJFR19HRU5NQVNLIGlzIGxpbWl0ZWQgdG8gdTMy CisgKiBhbmQgYXMgR0VOTUFTSyBpcyAibG9uZyIgYW5kIHRoZXJlZm9yZSAzMi1iaXRzIG9uIGEg MzItYml0IHN5c3RlbS4KKyAqIFBLR19QS0dfVERQLCBQS0dfTUlOX1BXUiwgYW5kIFBLR19NQVhf UFdSIGFyZSBzY2FsZWQgaW4gdGhlIHNhbWUgd2F5IGFzCisgKiBQS0dfUFdSX0xJTV8qLCBhYm92 ZS4KKyAqIFBLR19NQVhfV0lOIGhhcyBzdWItZmllbGRzIGZvciB4IGFuZCB5LCBhbmQgaGFzIHRo ZSB2YWx1ZTogaXMgMS54ICogMl55LgorICovCisjZGVmaW5lICAgUEtHX1BLR19URFAJCQlHRU5N QVNLX1VMTCgxNCwgMCkKKyNkZWZpbmUgICBQS0dfTUlOX1BXUgkJCUdFTk1BU0tfVUxMKDMwLCAx NikKKyNkZWZpbmUgICBQS0dfTUFYX1BXUgkJCUdFTk1BU0tfVUxMKDQ2LCAzMikKKyNkZWZpbmUg ICBQS0dfTUFYX1dJTgkJCUdFTk1BU0tfVUxMKDU0LCA0OCkKKyNkZWZpbmUgICAgIFBLR19NQVhf V0lOX1kJCUdFTk1BU0tfVUxMKDU0LCA1MykKKyNkZWZpbmUgICAgIFBLR19NQVhfV0lOX1gJCUdF Tk1BU0tfVUxMKDUyLCA0OCkKKwogLyoKICAqIExvZ2ljYWwgQ29udGV4dCByZWdzCiAgKi8KLS0g CjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==