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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 735B8C54EE9 for ; Sat, 17 Sep 2022 12:12:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=B3HEmeN5uoBJ1xUPrqHeoQf4w1E7m5Dud6azu7QTP5k=; b=N1BpQ3zaFMwJil bZAuYOQIj5o4Vfk2TK6PtI3UiqaJ/0XmAsinx6dkPKZ78PufEc6WbEU57Qmm4ifGpbVE03dTJNIYW EVwlLgPmuI1AghaXW56QCmo1rTRo//G3dyrm5aFLR4HOYmzfkbrAdWKxDqeE3aIcIdQ5yPVzFmqp3 tsobxQPSdDZZ1bAgNW0Cj23gn3ZFDBTMT/C1e1r5bujbj3pvN98L73GtG0ppCRWmrYjKzRNQarnis eDoPH5JqHdwpu4lfchpMrE09wZAQTDe5CFqwXEiFLSkH+vemN3/3V565Xrd3H06K4EbSDp2SqMzB6 EleAb+zPxy0SrKVO4wMg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oZWfF-005haO-VF; Sat, 17 Sep 2022 12:11:18 +0000 Received: from out30-57.freemail.mail.aliyun.com ([115.124.30.57]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oZWem-005hLw-9m for linux-arm-kernel@lists.infradead.org; Sat, 17 Sep 2022 12:10:54 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R971e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046049;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=10;SR=0;TI=SMTPD_---0VQ-l721_1663416641; Received: from localhost.localdomain(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0VQ-l721_1663416641) by smtp.aliyun-inc.com; Sat, 17 Sep 2022 20:10:42 +0800 From: Shuai Xue To: will@kernel.org, Jonathan.Cameron@Huawei.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: rdunlap@infradead.org, robin.murphy@arm.com, mark.rutland@arm.com, baolin.wang@linux.alibaba.com, zhuo.song@linux.alibaba.com, xueshuai@linux.alibaba.com Subject: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver Date: Sat, 17 Sep 2022 20:10:35 +0800 Message-Id: <20220917121036.14864-3-xueshuai@linux.alibaba.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220917121036.14864-1-xueshuai@linux.alibaba.com> References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220917_051048_729529_E4DC66EB X-CRM114-Status: GOOD ( 22.85 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBjb21taXQgYWRkcyB0aGUgUENJZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBN VSkgZHJpdmVyIHN1cHBvcnQKZm9yIFQtSGVhZCBZaXRpYW4gU29DIGNoaXAuIFlpdGlhbiBpcyBi YXNlZCBvbiB0aGUgU3lub3BzeXMgUENJIEV4cHJlc3MKQ29yZSBjb250cm9sbGVyIElQIHdoaWNo IHByb3ZpZGVzIHN0YXRpc3RpY3MgZmVhdHVyZS4gVGhlIFBNVSBpcyBub3QgYSBQQ0llClJvb3Qg Q29tcGxleCBpbnRlZ3JhdGVkIEVuZCBQb2ludChSQ2lFUCkgZGV2aWNlIGJ1dCBvbmx5IHJlZ2lz dGVyIGNvdW50ZXJzCnByb3ZpZGVkIGJ5IGVhY2ggUENJZSBSb290IFBvcnQuCgpUbyBmYWNpbGl0 YXRlIGNvbGxlY3Rpb24gb2Ygc3RhdGlzdGljcyB0aGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUK Zm9sbG93aW5nIHR3byBmZWF0dXJlcyBmb3IgZWFjaCBSb290IFBvcnQ6CgotIFRpbWUgQmFzZWQg QW5hbHlzaXMgKFJYL1RYIGRhdGEgdGhyb3VnaHB1dCBhbmQgdGltZSBzcGVudCBpbiBlYWNoCiAg bG93LXBvd2VyIExUU1NNIHN0YXRlKQotIEV2ZW50IGNvdW50ZXJzIChFcnJvciBhbmQgTm9uLUVy cm9yIGZvciBsYW5lcykKCk5vdGUsIG9ubHkgb25lIGNvdW50ZXIgZm9yIGVhY2ggdHlwZS4KClRo aXMgZHJpdmVyIGFkZCBQTVUgZGV2aWNlcyBmb3IgZWFjaCBQQ0llIFJvb3QgUG9ydC4gQW5kIHRo ZSBQTVUgZGV2aWNlIGlzCm5hbWVkIGJhc2VkIHRoZSBCREYgb2YgUm9vdCBQb3J0LiBGb3IgZXhh bXBsZSwKCiAgICAxMDowMC4wIFBDSSBicmlkZ2U6IERldmljZSAxZGVkOjgwMDAgKHJldiAwMSkK CnRoZSBQTVUgZGV2aWNlIG5hbWUgZm9yIHRoaXMgUm9vdCBQb3J0IGlzIHBjaWVfYmRmXzEwMDAw MC4KCkV4YW1wbGUgdXNhZ2Ugb2YgY291bnRpbmcgUENJZSBSWCBUTFAgZGF0YSBwYXlsb2FkIChV bml0cyBvZiAxNiBieXRlcyk6OgoKICAgICQjIHBlcmYgc3RhdCAtYSAtZSBwY2llX2JkZl8yMDAv UnhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLwoKYXZlcmFnZSBSWCBiYW5kd2lkdGggY2FuIGJlIGNh bGN1bGF0ZWQgbGlrZSB0aGlzOgoKICAgIFBDSWUgVFggQmFuZHdpZHRoID0gUENJRV9UWF9EQVRB ICogMTZCIC8gTWVhc3VyZV9UaW1lX1dpbmRvdwoKU2lnbmVkLW9mZi1ieTogU2h1YWkgWHVlIDx4 dWVzaHVhaUBsaW51eC5hbGliYWJhLmNvbT4KLS0tCiBkcml2ZXJzL3BlcmYvS2NvbmZpZyAgICAg ICAgfCAgIDcgKwogZHJpdmVycy9wZXJmL01ha2VmaWxlICAgICAgIHwgICAxICsKIGRyaXZlcnMv cGVyZi9kd2NfcGNpZV9wbXUuYyB8IDk3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOTg0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3BlcmYvZHdjX3BjaWVfcG11LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bl cmYvS2NvbmZpZyBiL2RyaXZlcnMvcGVyZi9LY29uZmlnCmluZGV4IDFlMmQ2OTQ1Mzc3MS4uMTFh ZTk5ZGU1YmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BlcmYvS2NvbmZpZworKysgYi9kcml2ZXJz L3BlcmYvS2NvbmZpZwpAQCAtMTkyLDQgKzE5MiwxMSBAQCBjb25maWcgTUFSVkVMTF9DTjEwS19E RFJfUE1VCiAJICBFbmFibGUgcGVyZiBzdXBwb3J0IGZvciBNYXJ2ZWxsIEREUiBQZXJmb3JtYW5j ZSBtb25pdG9yaW5nCiAJICBldmVudCBvbiBDTjEwSyBwbGF0Zm9ybS4KIAorY29uZmlnIENPTkZJ R19EV0NfUENJRV9QTVUKKwl0cmlzdGF0ZSAiRW5hYmxlIFN5bm9wc3lzIERlc2lnbldhcmUgUENJ ZSBQTVUgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSTTY0IHx8IChDT01QSUxFX1RFU1QgJiYgNjRC SVQpCisJaGVscAorCSAgRW5hYmxlIHBlcmYgc3VwcG9ydCBmb3IgU3lub3BzeXMgRGVzaWduV2Fy ZSBQQ0llIFBNVSBQZXJmb3JtYW5jZQorCSAgbW9uaXRvcmluZyBldmVudCBvbiBZaXRhbiA3MTAg cGxhdGZvcm0uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9NYWtlZmlsZSBi L2RyaXZlcnMvcGVyZi9NYWtlZmlsZQppbmRleCA1N2EyNzljNjFkZjUuLjM2Zjc1Y2IwZjMyMCAx MDA2NDQKLS0tIGEvZHJpdmVycy9wZXJmL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGVyZi9NYWtl ZmlsZQpAQCAtMjAsMyArMjAsNCBAQCBvYmotJChDT05GSUdfQVJNX0RNQzYyMF9QTVUpICs9IGFy bV9kbWM2MjBfcG11Lm8KIG9iai0kKENPTkZJR19NQVJWRUxMX0NOMTBLX1RBRF9QTVUpICs9IG1h cnZlbGxfY24xMGtfdGFkX3BtdS5vCiBvYmotJChDT05GSUdfTUFSVkVMTF9DTjEwS19ERFJfUE1V KSArPSBtYXJ2ZWxsX2NuMTBrX2Rkcl9wbXUubwogb2JqLSQoQ09ORklHX0FQUExFX00xX0NQVV9Q TVUpICs9IGFwcGxlX20xX2NwdV9wbXUubworb2JqLSQoQ09ORklHX0RXQ19QQ0lFX1BNVSkgKz0g ZHdjX3BjaWVfcG11Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyBi L2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjgxZTUzNGJlMTNmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGVy Zi9kd2NfcGNpZV9wbXUuYwpAQCAtMCwwICsxLDk3NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIGRyaXZl cgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBBbGliYWJhIEluYy4KKyAqLworwqAK KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWhvdHBsdWcuaD4KKyNp bmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1 ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBE UlZfTkFNRQkJCQkiZHdjX3BjaWVfcG11IgorI2RlZmluZSBERVZfTkFNRQkJCQkiZHdjX3BjaWVf cG11IgorI2RlZmluZSBSUF9OVU1fTUFYCQkJCTMyIC8qIDJkaWUgKiA0UkMgKiA0Q3Ryb2wgKi8K KyNkZWZpbmUgQVRUUklfTkFNRV9NQVhfU0laRQkJCTMyCisKKyNkZWZpbmUgRFdDX1BDSUVfVlNF Q19JRAkJCTB4MDIKKyNkZWZpbmUgRFdDX1BDSUVfVlNFQ19SRVYJCQkweDA0CisKKyNkZWZpbmUg RFdDX1BDSUVfTElOS19DQVBBQklMSVRJRVNfUkVHCQkweEMKKyNkZWZpbmUgRFdDX1BDSUVfTEFO RV9TSElGVAkJCTQKKyNkZWZpbmUgRFdDX1BDSUVfTEFORV9NQVNLCQkJR0VOTUFTSyg5LCA0KQor CisjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMCQkJMHg4CisjZGVmaW5lIERXQ19QQ0lF X19DTlRfRVZFTlRfU0VMRUNUX1NISUZUCTE2CisjZGVmaW5lIERXQ19QQ0lFX19DTlRfRVZFTlRf U0VMRUNUX01BU0sJCUdFTk1BU0soMjcsIDE2KQorI2RlZmluZSBEV0NfUENJRV9fQ05UX0xBTkVf U0VMRUNUX1NISUZUCQk4CisjZGVmaW5lIERXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfTUFTSwkJ R0VOTUFTSygxMSwgOCkKKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNfU0hJRlQJCTcKKyNk ZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNfTUFTSwkJQklUKDcpCisjZGVmaW5lIERXQ19QQ0lF X19DTlRfRU5BQkxFX1NISUZUCQkyCisjZGVmaW5lIERXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0sJ CUdFTk1BU0soNCwgMikKKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5UX09GRgkJCSgweDEgPDwg RFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQpCisjZGVmaW5lIERXQ19QQ0lFX1BFUl9FVkVOVF9P TgkJCSgweDMgPDwgRFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQpCisjZGVmaW5lIERXQ19QQ0lF X0VWRU5UX0NMRUFSX01BU0sJCUdFTk1BU0soMSwgMCkKKworI2RlZmluZSBEV0NfUENJRV9FVkVO VF9DTlRfREFUQQkJCTB4QworCisjZGVmaW5lIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNf Q1RSTAkweDEwCisjZGVmaW5lIERXQ19QQ0lFX19USU1FX0JBU0VEX1JFUE9SVF9TRUxFQ1RfU0hJ RlQJMjQKKyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVfQkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLCUdF Tk1BU0soMzEsIDI0KQorI2RlZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TSElG VAk4CisjZGVmaW5lIERXQ19QQ0lFX19USU1FX0JBU0VEX0RVUkFUSU9OX1NFTEVDVAlHRU5NQVNL KDE1LCA4KQorI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTAkJMHgwCisjZGVm aW5lIERXQ19QQ0lFX0RVUkFUSU9OXzFNUwkJCTB4MQorI2RlZmluZSBEV0NfUENJRV9EVVJBVElP Tl8xME1TCQkJMHgyCisjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwME1TCQkJMHgzCisjZGVm aW5lIERXQ19QQ0lFX0RVUkFUSU9OXzFTCQkJMHg0CisjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9O XzJTCQkJMHg1CisjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRTCQkJMHg2CisjZGVmaW5lIERX Q19QQ0lFX0RVUkFUSU9OXzRVUwkJCTB4ZmYKKyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVfQkFTRURf Q09VTlRFUl9FTkFCTEUJMQorCisjZGVmaW5lIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNf REFUQV9SRUdfTE9XCTB4MTQKKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19E QVRBX1JFR19ISUdICTB4MTgKKworLyogRXZlbnQgYXR0cmlidXRlcyAqLworI2RlZmluZSBEV0Nf UENJRV9DT05GSUdfRVZFTlRJRAkJCUdFTk1BU0soMTUsIDApCisjZGVmaW5lIERXQ19QQ0lFX0NP TkZJR19UWVBFCQkJR0VOTUFTSygxOSwgMTYpCisjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19MQU5F CQkJR0VOTUFTSygyNywgMjApCisKKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfSUQoZXZlbnQpCUZJ RUxEX0dFVChEV0NfUENJRV9DT05GSUdfRVZFTlRJRCwgKGV2ZW50KS0+YXR0ci5jb25maWcpCisj ZGVmaW5lIERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpCUZJRUxEX0dFVChEV0NfUENJRV9DT05G SUdfVFlQRSwgKGV2ZW50KS0+YXR0ci5jb25maWcpCisjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0xB TkUoZXZlbnQpCUZJRUxEX0dFVChEV0NfUENJRV9DT05GSUdfTEFORSwgKGV2ZW50KS0+YXR0ci5j b25maWcpCisKKyNkZWZpbmUgRFdDX1BDSUVfUE1VX0hBU19SRUdJU1RFUgkJMQorCitlbnVtIGR3 Y19wY2llX2V2ZW50X3R5cGUgeworCURXQ19QQ0lFX1RZUEVfSU5WQUxJRCwKKwlEV0NfUENJRV9U SU1FX0JBU0VfRVZFTlQsCisJRFdDX1BDSUVfTEFORV9FVkVOVCwKK307CisKK3N0cnVjdCBkd2Nf ZXZlbnRfY291bnRlcnMgeworCWNvbnN0IGNoYXIgbmFtZVszMl07CisJdTMyIGV2ZW50X2lkOwor fTsKKworc3RydWN0IGR3Y19wY2llX3BtdSB7CisJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKKwl1 bnNpZ25lZCBpbnQgb25fY3B1OworCXN0cnVjdCBwbXUgcG11OworCXN0cnVjdCBkZXZpY2UgKmRl djsKK307CisKK3N0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlIHsKKwl1MzIgYmRmOworCXUzMiBj YXBfcG9zOworCXUzMiBudW1fbGFuZXM7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0 IGR3Y19wY2llX3BtdSBwY2llX3BtdTsKKwl1OCBwbXVfaXNfcmVnaXN0ZXI7CisJc3RydWN0IHBl cmZfZXZlbnQgKmV2ZW50OworCisJc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIgKmxhbmVfZXZl bnRfYXR0cnM7CisJc3RydWN0IGF0dHJpYnV0ZSAqKnBjaWVfcG11X2V2ZW50X2F0dHJzOworCXN0 cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXA7CisJY29uc3Qg c3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGNpZV9wbXVfYXR0cl9ncm91cHNbNF07Cit9OworCitz dHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1MzIgcGNp ZV9jdHJsX251bTsKKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV90YWJsZTsKK307 CisKKyNkZWZpbmUgRFdDX1BDSUVfQ1JFQVRFX0JERihzZWcsIGJ1cywgZGV2LCBmdW5jKQlcCisJ KCgoc2VnKSA8PCAyNCkgfCAoKChidXMpICYgMHhGRikgPDwgMTYpIHwgKCgoZGV2KSAmIDB4RkYp IDw8IDgpIHwgKGZ1bmMpKQorI2RlZmluZSB0b19wY2llX3BtdShwKSAoY29udGFpbmVyX29mKHAs IHN0cnVjdCBkd2NfcGNpZV9wbXUsIHBtdSkpCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpkd2NfcGNpZV9wbXVfZGV2Oworc3RhdGljIGNoYXIgKmV2ZW50X2F0dHJfbmFtZSA9ICJl dmVudHMiOworCitzdGF0aWMgc3NpemVfdCBkd2NfcGNpZV9wbXVfY3B1bWFza19zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJ CQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11ID0gdG9fcGNp ZV9wbXUoZGV2X2dldF9kcnZkYXRhKGRldikpOworCisJcmV0dXJuIGNwdW1hcF9wcmludF90b19w YWdlYnVmKHRydWUsIGJ1ZiwgY3B1bWFza19vZihwY2llX3BtdS0+b25fY3B1KSk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkd2NfcGNpZV9wbXVfY3B1bWFza19hdHRyID0K K19fQVRUUihjcHVtYXNrLCAwNDQ0LCBkd2NfcGNpZV9wbXVfY3B1bWFza19zaG93LCBOVUxMKTsK Kworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHJzW10g PSB7CisJJmR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0 aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9jcHVtYXNrX2F0dHJzX2dyb3VwID0g eworCS5hdHRycyA9IGR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHJzLAorfTsKKworc3RydWN0IGR3 Y19wY2llX2Zvcm1hdF9hdHRyIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOworCXU2 NCBmaWVsZDsKKwlpbnQgY29uZmlnOworfTsKKworc3RhdGljIHNzaXplX3QgZHdjX3BjaWVfcG11 X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0 X2F0dHIgKmZtdCA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmZtdCksIGF0dHIpOworCWlu dCBsbyA9IF9fZmZzKGZtdC0+ZmllbGQpLCBoaSA9IF9fZmxzKGZtdC0+ZmllbGQpOworCisJaWYg KGxvID09IGhpKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJjb25maWc6JWRc biIsIGxvKTsKKworCWlmICghZm10LT5jb25maWcpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBB R0VfU0laRSwgImNvbmZpZzolZC0lZFxuIiwgbG8sIGhpKTsKKworCXJldHVybiBzbnByaW50Zihi dWYsIFBBR0VfU0laRSwgImNvbmZpZyVkOiVkLSVkXG4iLCBmbXQtPmNvbmZpZywgbG8sCisJCQlo aSk7Cit9CisKKyNkZWZpbmUgX2R3Y19wY2llX2Zvcm1hdF9hdHRyKF9uYW1lLCBfY2ZnLCBfZmxk KQkJCQlcCisJKCYoKHN0cnVjdCBkd2NfcGNpZV9mb3JtYXRfYXR0cltdKSB7ewkJCQlcCisJCS5h dHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBkd2NfcGNpZV9wbXVfZm9ybWF0X3Nob3csIE5VTEwp LAlcCisJCS5jb25maWcgPSBfY2ZnLAkJCQkJCVwKKwkJLmZpZWxkID0gX2ZsZCwJCQkJCQlcCisJ fX0pWzBdLmF0dHIuYXR0cikKKworI2RlZmluZSBkd2NfcGNpZV9mb3JtYXRfYXR0cihfbmFtZSwg X2ZsZCkJX2R3Y19wY2llX2Zvcm1hdF9hdHRyKF9uYW1lLCAwLCBfZmxkKQorCitzdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZSAqZHdjX3BjaWVfZm9ybWF0X2F0dHJzW10gPSB7CisJZHdjX3BjaWVfZm9y bWF0X2F0dHIodHlwZSwgRFdDX1BDSUVfQ09ORklHX1RZUEUpLAorCWR3Y19wY2llX2Zvcm1hdF9h dHRyKGV2ZW50aWQsIERXQ19QQ0lFX0NPTkZJR19FVkVOVElEKSwKKwlkd2NfcGNpZV9mb3JtYXRf YXR0cihsYW5lLCBEV0NfUENJRV9DT05GSUdfTEFORSksCisJTlVMTCwKK307CisKK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjaWVfcG11X2Zvcm1hdF9hdHRyc19ncm91cCA9IHsKKwku bmFtZSA9ICJmb3JtYXQiLAorCS5hdHRycyA9IGR3Y19wY2llX2Zvcm1hdF9hdHRycywKK307CisK K3N0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBh dHRyOworCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlOworCXUxNiBldmVudGlkOworCXU4 IGxhbmU7Cit9OworCitzc2l6ZV90IGR3Y19wY2llX2V2ZW50X3Nob3coc3RydWN0IGRldmljZSAq ZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQorewor CXN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyICplYXR0cjsKKworCWVhdHRyID0gY29udGFpbmVy X29mKGF0dHIsIHR5cGVvZigqZWF0dHIpLCBhdHRyKTsKKworCWlmIChlYXR0ci0+dHlwZSA9PSBE V0NfUENJRV9MQU5FX0VWRU5UKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiZXZlbnRpZD0weCVs eCwgdHlwZT0weCVseCwgbGFuZT0weCVseFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyll YXR0ci0+ZXZlbnRpZCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+dHlwZSwKKwkJ CSAgICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+bGFuZSk7CisJZWxzZQorCQlyZXR1cm4gc3By aW50ZihwYWdlLCAiZXZlbnRpZD0weCVseCwgdHlwZT0weCVseCIsCisJCQkgICAgICAgKHVuc2ln bmVkIGxvbmcpZWF0dHItPmV2ZW50aWQsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZWF0dHIt PnR5cGUpOworfQorCisjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0FUVFIoX25hbWUsIF90eXBlLCBf ZXZlbnRpZCwgX2xhbmUpCQlcCisJKCYoKHN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyW10pIHt7 CQkJCVwKKwkJLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGR3Y19wY2llX2V2ZW50X3Nob3cs IE5VTEwpLAlcCisJCS50eXBlID0gX3R5cGUsCQkJCQkJXAorCQkuZXZlbnRpZCA9IF9ldmVudGlk LAkJCQkJXAorCQkubGFuZSA9IF9sYW5lLAkJCQkJXAorCX19KVswXS5hdHRyLmF0dHIpCisKKyNk ZWZpbmUgRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKF9uYW1lLCBfZXZlbnRpZCkJCQlcCisJ RFdDX1BDSUVfRVZFTlRfQVRUUihfbmFtZSwgRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5ULCBfZXZl bnRpZCwgMCkKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV90aW1lX2V2 ZW50X2F0dHJzW10gPSB7CisJLyogR3JvdXAgIzAgKi8KKwlEV0NfUENJRV9QTVVfQkFTRV9USU1F X0FUVFIob25lX2N5Y2xlLCAweDAwKSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhf TDBTLCAweDAxKSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUlhfTDBTLCAweDAyKSwK KwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDAsIDB4MDMpLAorCURXQ19QQ0lFX1BNVV9C QVNFX1RJTUVfQVRUUihMMSwgMHgwNCksCisJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwx XzEsIDB4MDUpLAorCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMV8yLCAweDA2KSwKKwlE V0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZLCAweDA3KSwKKwlEV0NfUENJRV9Q TVVfQkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTLCAweDA4KSwKKwlEV0NfUENJRV9QTVVfQkFTRV9U SU1FX0FUVFIoTDFfQVVYLCAweDA5KSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoT05F X2N5Y2xlLCAweDEwKSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfTDBTXywgMHgx MSksCisJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJYX0wwU18sIDB4MTIpLAorCURXQ19Q Q0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMF8sIDB4MTMpLAorCURXQ19QQ0lFX1BNVV9CQVNFX1RJ TUVfQVRUUihMMV8sIDB4MTcpLAorCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihDRkdfUkNW UllfLCAweDE3KSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTXywgMHgx OCksCisJLyogR3JvdXAgIzEgKi8KKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVHhfUENJ ZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIwKSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIo UnhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIxKSwKKwlEV0NfUENJRV9QTVVfQkFTRV9USU1F X0FUVFIoVHhfQ0NJWF9UTFBfRGF0YV9QYXlsb2FkLCAweDIyKSwKKwlEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoUnhfQ0NJWF9UTFBfRGF0YV9QYXlsb2FkLCAweDIzKSwKKwlOVUxMCit9Owor CitzdGF0aWMgaW5saW5lIHVtb2RlX3QgcGNpZV9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxlKHN0 cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkJICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAor CQkJCQkJICAgICBpbnQgdW51c2UpCit7CisJcmV0dXJuIGF0dHItPm1vZGU7Cit9CisKK3N0YXRp YyBpbmxpbmUgYm9vbCBwY2lfZGV2X2lzX3Jvb3Rwb3J0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQor eworCXJldHVybiAocGNpX2lzX3BjaWUocGRldikgJiYKKwkJcGNpX3BjaWVfdHlwZShwZGV2KSA9 PSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQgZHdjX3BjaWVfZ2V0X2JkZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAoRFdD X1BDSUVfQ1JFQVRFX0JERihwY2lfZG9tYWluX25yKGRldi0+YnVzKSwgZGV2LT5idXMtPm51bWJl ciwKKwkJCQkgICAgUENJX1NMT1QoZGV2LT5kZXZmbiksCisJCQkJICAgIFBDSV9GVU5DKGRldi0+ ZGV2Zm4pKSk7Cit9CisKK3N0YXRpYyBpbnQgZHdjX3BjaWVfZmluZF9yYXNfZGVzX2NhcF9wb3Np dGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50ICpwb3MpCit7CisJdTMyIGhlYWRlcjsKKwlp bnQgdnNlYyA9IDA7CisKKwl3aGlsZSAoKHZzZWMgPSBwY2lfZmluZF9uZXh0X2V4dF9jYXBhYmls aXR5KHBkZXYsIHZzZWMsCisJCQkJCQkgICAgUENJX0VYVF9DQVBfSURfVk5EUikpKSB7CisJCXBj aV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCB2c2VjICsgUENJX1ZORFJfSEVBREVSLCAmaGVhZGVy KTsKKwkJLyogSXMgdGhlIGRldmljZSBwYXJ0IG9mIGEgRGVzaWduV2FyZSBDb3JlcyBQQ0llIENv bnRyb2xsZXIgPyAqLworCQlpZiAoUENJX1ZORFJfSEVBREVSX0lEKGhlYWRlcikgPT0gRFdDX1BD SUVfVlNFQ19JRCAmJgorCQkgICAgUENJX1ZORFJfSEVBREVSX1JFVihoZWFkZXIpID09IERXQ19Q Q0lFX1ZTRUNfUkVWKSB7CisJCQkqcG9zID0gdnNlYzsKKwkJCXJldHVybiAwOworCQl9CisJfQor CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2Rpc2NvdmVy KHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdikKK3sKKwlpbnQgdmFsLCB3aGVyZSwgaW5k ZXggPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZHdjX3BjaWVf aW5mb190YWJsZSAqcGNpZV9pbmZvOworCisJcHJpdi0+cGNpZV90YWJsZSA9CisJICAgIGRldm1f a2NhbGxvYyhwcml2LT5kZXYsIFJQX05VTV9NQVgsIHNpemVvZigqcGNpZV9pbmZvKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFwcml2LT5wY2llX3RhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBj aWVfaW5mbyA9IHByaXYtPnBjaWVfdGFibGU7CisJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZp Y2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGRldikpICE9IE5VTEwgJiYKKwkgICAgICAgaW5k ZXggPCBSUF9OVU1fTUFYKSB7CisJCWlmICghcGNpX2Rldl9pc19yb290cG9ydChwZGV2KSkKKwkJ CWNvbnRpbnVlOworCisJCXBjaWVfaW5mb1tpbmRleF0uYmRmID0gZHdjX3BjaWVfZ2V0X2JkZihw ZGV2KTsKKwkJcGNpZV9pbmZvW2luZGV4XS5wZGV2ID0gcGRldjsKKworCQlpZiAoZHdjX3BjaWVf ZmluZF9yYXNfZGVzX2NhcF9wb3NpdGlvbihwZGV2LCAmd2hlcmUpKQorCQkJY29udGludWU7CisK KwkJcGNpZV9pbmZvW2luZGV4XS5jYXBfcG9zID0gd2hlcmU7CisKKwkJcGNpX3JlYWRfY29uZmln X2R3b3JkKHBkZXYsCisJCQkJcGRldi0+cGNpZV9jYXAgKyBEV0NfUENJRV9MSU5LX0NBUEFCSUxJ VElFU19SRUcsCisJCQkJJnZhbCk7CisJCXBjaWVfaW5mb1tpbmRleF0ubnVtX2xhbmVzID0KKwkJ CSh2YWwgJiBEV0NfUENJRV9MQU5FX01BU0spID4+IERXQ19QQ0lFX0xBTkVfU0hJRlQ7CisJCWlu ZGV4Kys7CisJfQorCisJaWYgKCFpbmRleCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcml2LT5w Y2llX2N0cmxfbnVtID0gaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBp bnQgZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBj aWVfaW5mbywKKwkJCQkJICB1MzIgcmVnLCB1MzIgKnZhbCkKK3sKKwlyZXR1cm4gcGNpX3JlYWRf Y29uZmlnX2R3b3JkKHBjaWVfaW5mby0+cGRldiwgcGNpZV9pbmZvLT5jYXBfcG9zICsgcmVnLAor CQkJCSAgICAgdmFsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHdjX3BjaWVfcG11X3dyaXRl X2R3b3JkKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCisJCQkJCSAgICpwY2llX2luZm8sIHUz MiByZWcsIHUzMiB2YWwpCit7CisJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpZV9p bmZvLT5wZGV2LCBwY2llX2luZm8tPmNhcF9wb3MgKyByZWcsCisJCQkJICAgICAgdmFsKTsKK30K Kworc3RhdGljIGludCBkd2NfcGNpZV9wbXVfc2V0X2V2ZW50X2lkKHN0cnVjdCBkd2NfcGNpZV9p bmZvX3RhYmxlICpwY2llX2luZm8sCisJCQkJICAgICBpbnQgZXZlbnRfaWQpCit7CisJaW50IHJl dDsKKwl1MzIgdmFsOworCisJcmV0ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZv LCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgJnZhbCk7CisJaWYgKHJldCkgeworCQlwY2lfZXJy KHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwl2YWwgJj0gfkRXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0s7CisJdmFsICY9IH5EV0NfUENJ RV9fQ05UX0VWRU5UX1NFTEVDVF9NQVNLOworCXZhbCB8PSBldmVudF9pZCA8PCBEV0NfUENJRV9f Q05UX0VWRU5UX1NFTEVDVF9TSElGVDsKKworCXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29y ZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCB2YWwpOworCWlmIChyZXQpCisJ CXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0ZSBmYWlsXG4iKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3dyaXRlX2V2ZW50X2xhbmUoc3Ry dWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKKwkJCQkJIGludCBsYW5lLCBpbnQg ZXZlbnRfaWQpCit7CisJdTMyIHJldDsKKwl1MzIgdmFsOworCisJcmV0ID0gZHdjX3BjaWVfcG11 X3JlYWRfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgJnZhbCk7CisJ aWYgKHJldCkgeworCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4i KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2YWwgJj0gfkRXQ19QQ0lFX19DTlRfTEFORV9TRUxF Q1RfTUFTSzsKKwl2YWwgfD0gbGFuZSA8PCBEV0NfUENJRV9fQ05UX0xBTkVfU0VMRUNUX1NISUZU OworCisJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVf RVZFTlRfQ05UX0NUUkwsIHZhbCk7CisJaWYgKHJldCkKKwkJcGNpX2VycihwY2llX2luZm8tPnBk ZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpw Y2llX2luZm8sCisJCQkJICAgICB1MzIgZW5hYmxlKQoreworCXUzMiByZXQ7CisJdTMyIHZhbDsK KworCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZF TlRfQ05UX0NUUkwsICZ2YWwpOworCWlmIChyZXQpIHsKKwkJcGNpX2VycihwY2llX2luZm8tPnBk ZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdmFsICY9IH4o RFdDX1BDSUVfX0NOVF9FTkFCTEVfTUFTSyk7CisKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gRFdD X1BDSUVfUEVSX0VWRU5UX09OOworCWVsc2UKKwkJdmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9P RkY7CisKKwlyZXQgPSBkd2NfcGNpZV9wbXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJ RV9FVkVOVF9DTlRfQ1RSTCwgdmFsKTsKKwlpZiAocmV0KQorCQlwY2lfZXJyKHBjaWVfaW5mby0+ cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5hYmxlKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3Rh YmxlICpwY2llX2luZm8sCisJCQkJCSB1MzIgZW5hYmxlKQoreworCXUzMiByZXQ7CisJdTMyIHZh bDsKKworCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKKwkJCQkgICAg ICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwsICZ2YWwpOworCWlmIChyZXQpIHsK KwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IERXQ19QQ0lFX19USU1FX0JBU0VE X0NPVU5URVJfRU5BQkxFOworCWVsc2UKKwkJdmFsICY9IH5EV0NfUENJRV9fVElNRV9CQVNFRF9D T1VOVEVSX0VOQUJMRTsKKworCXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2lu Zm8sCisJCQkJICAgICAgIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgdmFsKTsK KwlpZiAocmV0KQorCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxu Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9yZWFkX2V2 ZW50X2NvdW50ZXIoc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUKKwkJCQkJICAgKnBjaWVfaW5m bywgdTY0ICpjb3VudGVyKQoreworCXUzMiByZXQsIHZhbDsKKworCXJldCA9IGR3Y19wY2llX3Bt dV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0RBVEEsICZ2YWwpOwor CWlmIChyZXQpIHsKKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxu Iik7CisJCXJldHVybiByZXQ7CisJfQorCSpjb3VudGVyID0gdmFsOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVhZF9iYXNlX3RpbWVfY291bnRlcihzdHJ1 Y3QgZHdjX3BjaWVfaW5mb190YWJsZQorCQkJCQkgICAgICAgKnBjaWVfaW5mbywgdTY0ICpjb3Vu dGVyKQoreworCXUzMiByZXQsIHZhbDsKKworCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3Jk KHBjaWVfaW5mbywKKwkJCQkgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFf UkVHX0hJR0gsCisJCQkJICAgICAgJnZhbCk7CisJaWYgKHJldCkgeworCQlwY2lfZXJyKHBjaWVf aW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkq Y291bnRlciA9IHZhbDsKKwkqY291bnRlciA8PD0gMzI7CisKKwlyZXQgPSBkd2NfcGNpZV9wbXVf cmVhZF9kd29yZChwY2llX2luZm8sCisJCQkJICAgICAgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFM WVNJU19EQVRBX1JFR19MT1csCisJCQkJICAgICAgJnZhbCk7CisJaWYgKHJldCkgeworCQlwY2lf ZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwkqY291bnRlciArPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGR3Y19wY2llX3BtdV9jbGVhcl9ldmVudF9jb3VudGVyKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3Rh YmxlCisJCQkJCSAgICAqcGNpZV9pbmZvKQoreworCXUzMiByZXQ7CisJdTMyIHZhbDsKKworCXJl dCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05U X0NUUkwsICZ2YWwpOworCWlmIChyZXQpIHsKKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQ Q0llIHJlYWQgZmFpbFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdmFsICY9IH5EV0NfUENJ RV9FVkVOVF9DTEVBUl9NQVNLOworCXZhbCB8PSAxOworCisJcmV0ID0gZHdjX3BjaWVfcG11X3dy aXRlX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7CisJaWYg KHJldCkKKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2Fk ZF9wcmVwYXJlKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlCisJCQkJCSAgICAgICpwY2llX2lu Zm8sIHUzMiBldmVudF9pZCkKK3sKKwl1MzIgcmV0OworCXUzMiB2YWw7CisKKwlyZXQgPSBkd2Nf cGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCisJCQkJICAgICAgRFdDX1BDSUVfVElNRV9C QVNFRF9BTkFMWVNJU19DVFJMLCAmdmFsKTsKKwlpZiAocmV0KSB7CisJCXBjaV9lcnIocGNpZV9p bmZvLT5wZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXZh bCAmPSB+RFdDX1BDSUVfX1RJTUVfQkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLOworCXZhbCB8PSBl dmVudF9pZCA8PCBEV0NfUENJRV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX1NISUZUOworCXZh bCAmPSB+RFdDX1BDSUVfX1RJTUVfQkFTRURfRFVSQVRJT05fU0VMRUNUOworCisJLyoKKwkgKiBU SU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHIGlzIGEgNjQgYml0IHJlZ2lzdGVyLCB3ZSBjYW4g c2FmZWx5CisJICogdXNlIGl0IHdpdGggYW55IG1hbnVhbGx5IGNvbnRyb2xsZXJlZCBkdXJhdGlv bi4KKwkgKi8KKwl2YWwgJj0gfihEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxFQ1Qp OworCXZhbCB8PSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTDsKKworCXJldCA9IGR3Y19w Y2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sCisJCQkJICAgICAgIERXQ19QQ0lFX1RJTUVf QkFTRURfQU5BTFlTSVNfQ1RSTCwgdmFsKTsKKwlpZiAocmV0KQorCQlwY2lfZXJyKHBjaWVfaW5m by0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBtdV90b19wY2llX2luZm8oc3RydWN0IHBt dSAqcG11KQoreworCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm87CisJc3Ry dWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXUgPSB0b19wY2llX3BtdShwbXUpOworCisJcGNpZV9p bmZvID0gY29udGFpbmVyX29mKHBjaWVfcG11LCBzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSwg cGNpZV9wbXUpOworCWlmIChwY2llX2luZm8gPT0gTlVMTCkKKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJDYW4ndCBnZXQgcGNpZSBpbmZvXG4iKTsKKworCXJldHVybiBwY2llX2luZm87Cit9 CisKK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQoreworCXU2NCBjb3VudGVyOworCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxl ICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOworCXN0cnVjdCBod19w ZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWVudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB0 eXBlID0gRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCk7CisJdTY0IGRlbHRhLCBwcmV2LCBub3c7 CisKKwlkbyB7CisJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisKKwkJ aWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKKwkJCWR3Y19wY2llX3BtdV9yZWFkX2V2 ZW50X2NvdW50ZXIocGNpZV9pbmZvLCAmY291bnRlcik7CisJCWVsc2UgaWYgKHR5cGUgPT0gRFdD X1BDSUVfVElNRV9CQVNFX0VWRU5UKQorCQkJZHdjX3BjaWVfcG11X3JlYWRfYmFzZV90aW1lX2Nv dW50ZXIocGNpZV9pbmZvLAorCQkJCQkJCSAgICAmY291bnRlcik7CisJCWVsc2UKKwkJCXBjaV9l cnIocGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7CisKKwkJbm93 ID0gY291bnRlcjsKKwl9IHdoaWxlIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwg cHJldiwgbm93KSAhPSBwcmV2KTsKKworCWRlbHRhID0gbm93IC0gcHJldjsKKworCWxvY2FsNjRf YWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKK30KKworc3RhdGljIGludCBkd2NfcGNpZV9wbXVf ZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZf ZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXUg PSB0b19wY2llX3BtdShldmVudC0+cG11KTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZzsK KworCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCisJCXJldHVybiAt RU5PRU5UOworCisJaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlkZXZfZGJnKHBjaWVfcG11 LT5kZXYsICJTYW1wbGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQ OworCX0KKworCWlmIChldmVudC0+Y3B1IDwgMCkgeworCQlkZXZfZGJnKHBjaWVfcG11LT5kZXYs ICJQZXItdGFzayBtb2RlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJfQorCisJZXZlbnQtPmNwdSA9IHBjaWVfcG11LT5vbl9jcHU7CisKKwlpZiAoZXZlbnQtPmdy b3VwX2xlYWRlciAhPSBldmVudCAmJgorCSAgICAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQtPmdy b3VwX2xlYWRlcikpIHsKKwkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2LCAiRHJpdmUgd2F5IG9ubHkg YWxsb3cgb25lIGV2ZW50IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvcl9lYWNo X3NpYmxpbmdfZXZlbnQoc2libGluZywgZXZlbnQtPmdyb3VwX2xlYWRlcikgeworCQlpZiAoc2li bGluZyAhPSBldmVudCAmJiAhaXNfc29mdHdhcmVfZXZlbnQoc2libGluZykpIHsKKwkJCWRldl9k YmcocGNpZV9wbXUtPmRldiwgIkRyaXZlIHdheSBldmVudCBub3QgYWxsb3dlZCFcbiIpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlod2MtPmlkeCA9IC0xOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9zZXRfcGVyaW9kKHN0cnVjdCBod19wZXJm X2V2ZW50ICpod2MpCit7CisJdTY0IG5ldyA9IDA7CisKKwlsb2NhbDY0X3NldCgmaHdjLT5wcmV2 X2NvdW50LCBuZXcpOworfQorCitzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQo c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGh3X3BlcmZf ZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBj aWVfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7CisJZW51bSBkd2NfcGNpZV9l dmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KTsKKworCWh3Yy0+c3Rh dGUgPSAwOworCWR3Y19wY2llX3BtdV9zZXRfcGVyaW9kKGh3Yyk7CisKKwlpZiAodHlwZSA9PSBE V0NfUENJRV9MQU5FX0VWRU5UKQorCQlkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBjaWVfaW5m bywgMSk7CisJZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpCisJCWR3 Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5hYmxlKHBjaWVfaW5mbywgMSk7CisJZWxzZQorCQlwY2lf ZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOworfQorCitz dGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZv ID0gcG11X3RvX3BjaWVfaW5mbyhldmVudC0+cG11KTsKKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5 cGUgdHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOworCisJaWYgKGV2ZW50LT5ody5z dGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpCisJCXJldHVybjsKKworCWlmICh0eXBlID09IERXQ19Q Q0lFX0xBTkVfRVZFTlQpCisJCWR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUocGNpZV9pbmZvLCAw KTsKKwllbHNlIGlmICh0eXBlID09IERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCkKKwkJZHdjX3Bj aWVfcG11X2Jhc2VfdGltZV9lbmFibGUocGNpZV9pbmZvLCAwKTsKKwllbHNlCisJCXBjaV9lcnIo cGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQgcGFyYW0gaXMgaW52YWxpZFxuIik7CisKKwlkd2NfcGNp ZV9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKK30KKworc3RhdGljIGludCBkd2NfcGNpZV9wbXVf ZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQoreworCXN0cnVj dCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50 LT5wbXUpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWVudW0g ZHdjX3BjaWVfZXZlbnRfdHlwZSB0eXBlID0gRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCk7CisJ aW50IGV2ZW50X2lkID0gRFdDX1BDSUVfRVZFTlRfSUQoZXZlbnQpOworCWludCBsYW5lID0gRFdD X1BDSUVfRVZFTlRfTEFORShldmVudCk7CisKKwlpZiAocGNpZV9pbmZvLT5ldmVudCkKKwkJcmV0 dXJuIC1FTk9TUEM7CisKKwlwY2llX2luZm8tPmV2ZW50ID0gZXZlbnQ7CisKKwlod2MtPnN0YXRl ID0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQVE9EQVRFOworCisJaWYgKHR5cGUgPT0g RFdDX1BDSUVfTEFORV9FVkVOVCkgeworCQlkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBjaWVf aW5mbywgMCk7CisJCWR3Y19wY2llX3BtdV93cml0ZV9ldmVudF9sYW5lKHBjaWVfaW5mbywgbGFu ZSwgZXZlbnRfaWQpOworCQlkd2NfcGNpZV9wbXVfc2V0X2V2ZW50X2lkKHBjaWVfaW5mbywgZXZl bnRfaWQpOworCQlkd2NfcGNpZV9wbXVfY2xlYXJfZXZlbnRfY291bnRlcihwY2llX2luZm8pOwor CX0gZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQpIHsKKwkJZHdjX3Bj aWVfcG11X2Jhc2VfdGltZV9lbmFibGUocGNpZV9pbmZvLCAwKTsKKwkJZHdjX3BjaWVfcG11X2Jh c2VfdGltZV9hZGRfcHJlcGFyZShwY2llX2luZm8sIGV2ZW50X2lkKTsKKwl9IGVsc2UgeworCQlw Y2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQorCQlkd2Nf cGNpZV9wbXVfZXZlbnRfc3RhcnQoZXZlbnQsIFBFUkZfRUZfUkVMT0FEKTsKKworCXBlcmZfZXZl bnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZs YWdzKQoreworCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9f cGNpZV9pbmZvKGV2ZW50LT5wbXUpOworCisJZHdjX3BjaWVfcG11X2V2ZW50X3N0b3AoZXZlbnQs IGZsYWdzIHwgUEVSRl9FRl9VUERBVEUpOworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2 ZW50KTsKKwlwY2llX2luZm8tPmV2ZW50ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZHdjX3Bj aWVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWR3Y19wY2ll X3BtdV9ldmVudF91cGRhdGUoZXZlbnQpOworfQorCitzdGF0aWMgc3RydWN0IGR3Y19ldmVudF9j b3VudGVycyBldmVudF9hcnJheVtdID0geworCXsidHhfYWNrX2RsbHAiLCAweDYwMH0sCisJeyJ0 eF91cGRhdGVfZmNfZGxscCIsIDB4NjAxfSwKKwl7InJ4X2Fja19kbGxwIiwgMHg2MDJ9LAorCXsi cnhfdXBkYXRlX2ZjX2RsbHAiLCAweDYwM30sCisJeyJyeF9udWxpZmllZF90bHAiLCAweDYwNH0s CisJeyJ0eF9udWxpZmllZF90bHAiLCAweDYwNX0sCisJeyJyeF9kdXBsaWNhdGVfdGxwIiwgMHg2 MDZ9LAorCXsidHhfbWVtb3J5X3dyaXRlIiwgMHg3MDB9LAorCXsidHhfbWVtb3J5X3JlYWQiLCAw eDcwMX0sCisJeyJ0eF9jb25maWd1cmF0aW9uX3dyaXRlIiwgMHg3MDJ9LAorCXsidHhfY29uZmln dXJhdGlvbl9yZWFkIiwgMHg3MDN9LAorCXsidHhfaW9fd3JpdGUiLCAweDcwNH0sCisJeyJ0eF9p b19yZWFkIiwgMHg3MDV9LAorCXsidHhfY29tcGxldGlvbl93aXRob3V0X2RhdGEiLCAweDcwNn0s CisJeyJ0eF9jb21wbGV0aW9uX3dpdGhfZGF0YSIsIDB4NzA3fSwKKwl7InR4X21lc3NhZ2VfdGxw IiwgMHg3MDh9LAorCXsidHhfYXRvbWljIiwgMHg3MDl9LAorCXsidHhfdGxwX3dpdGhfcHJlZml4 IiwgMHg3MEF9LAorCXsicnhfbWVtb3J5X3dyaXRlIiwgMHg3MEJ9LAorCXsicnhfbWVtb3J5X3Jl YWQiLCAweDcwQ30sCisJeyJyeF9pb193cml0ZSIsIDB4NzBGfSwKKwl7InJ4X2lvX3JlYWQiLCAw eDcxMH0sCisJeyJyeF9jb21wbGV0aW9uX3dpdGhvdXRfZGF0YSIsIDB4NzExfSwKKwl7InJ4X2Nv bXBsZXRpb25fd2l0aF9kYXRhIiwgMHg3MTJ9LAorCXsicnhfbWVzc2FnZV90bHAiLCAweDcxM30s CisJeyJyeF9hdG9taWMiLCAweDcxNH0sCisJeyJyeF90bHBfd2l0aF9wcmVmaXgiLCAweDcxNX0s CisJeyJ0eF9jY2l4X3RscCIsIDB4NzE2fSwKKwl7InJ4X2NjaXhfdGxwIiwgMHg3MTd9LAorfTsK Kworc3RhdGljIGludCBkd2NfcGNpZV9wbXVfYXR0cl9pbml0KHN0cnVjdCBkd2NfcGNpZV9wbXVf cHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8p Cit7CisJaW50IGksIGo7CisJY2hhciBsYW5lWzhdOworCWNvbnN0IGNoYXIgdG1wWzY0XTsKKwlp bnQgZXZlbnRzX3Blcl9sYW5lOworCWludCBudW1fbGFuZV9ldmVudHM7CisJaW50IHRpbWVfYmFz ZV9jb3VudDsKKwlpbnQgbnVtX2F0dHJzLCBhdHRyX2lkeDsKKwlzdHJ1Y3QgZHdjX3BjaWVfZXZl bnRfYXR0ciAqbGFuZV9hdHRyczsKKwlzdHJ1Y3QgYXR0cmlidXRlICoqcG11X2F0dHJzOworCisJ bWVtc2V0KCh2b2lkICopdG1wLCAwLCBzaXplb2YodG1wKSk7CisJbWVtc2V0KCh2b2lkICopbGFu ZSwgMCwgc2l6ZW9mKGxhbmUpKTsKKwl0aW1lX2Jhc2VfY291bnQgPSBBUlJBWV9TSVpFKGR3Y19w Y2llX3BtdV90aW1lX2V2ZW50X2F0dHJzKTsKKwlldmVudHNfcGVyX2xhbmUgPSBBUlJBWV9TSVpF KGV2ZW50X2FycmF5KTsKKwludW1fbGFuZV9ldmVudHMgPSBwY2llX2luZm8tPm51bV9sYW5lcyAq IGV2ZW50c19wZXJfbGFuZTsKKwludW1fYXR0cnMgPSB0aW1lX2Jhc2VfY291bnQgKyBudW1fbGFu ZV9ldmVudHM7CisKKwlwY2llX2luZm8tPmxhbmVfZXZlbnRfYXR0cnMgPQorCQlkZXZtX2tjYWxs b2MocHJpdi0+ZGV2LCBudW1fbGFuZV9ldmVudHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBkd2NfcGNp ZV9ldmVudF9hdHRyKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXBjaWVfaW5mby0+bGFuZV9l dmVudF9hdHRycykKKwkJcmV0dXJuIC1FTk9NRU07CisJbGFuZV9hdHRycyA9IHBjaWVfaW5mby0+ bGFuZV9ldmVudF9hdHRyczsKKwlwY2llX2luZm8tPnBjaWVfcG11X2V2ZW50X2F0dHJzID0KKwkJ ZGV2bV9rY2FsbG9jKHByaXYtPmRldiwgbnVtX2F0dHJzLCBzaXplb2Yoc3RydWN0IGF0dHJpYnV0 ZSAqKSwKKwkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRf YXR0cnMpCisJCXJldHVybiAtRU5PTUVNOworCXBtdV9hdHRycyA9IHBjaWVfaW5mby0+cGNpZV9w bXVfZXZlbnRfYXR0cnM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2xhbmVfZXZlbnRzOyBpKysp IHsKKwkJbGFuZV9hdHRyc1tpXS5hdHRyLmF0dHIubmFtZSA9CisJCSAgICBkZXZtX2t6YWxsb2Mo cHJpdi0+ZGV2LCBzaXplb2YoY2hhcikKKwkJCQkgKiBBVFRSSV9OQU1FX01BWF9TSVpFLCBHRlBf S0VSTkVMKTsKKwkJaWYgKCFsYW5lX2F0dHJzW2ldLmF0dHIuYXR0ci5uYW1lKQorCQkJcmV0dXJu IC1FTk9NRU07CisJfQorCisJYXR0cl9pZHggPSAwOworCWZvciAoaSA9IDA7IGkgPCBwY2llX2lu Zm8tPm51bV9sYW5lczsgaSsrKSB7CisJCXNwcmludGYobGFuZSwgIl9sYW5lJWQiLCBpKTsKKwor CQlmb3IgKGogPSAwOyBqIDwgZXZlbnRzX3Blcl9sYW5lOyBqKyspIHsKKwkJCWludCBwb3MgPSBp ICogZXZlbnRzX3Blcl9sYW5lICsgajsKKworCQkJc3RyY2F0KChjaGFyICopdG1wLCBldmVudF9h cnJheVtqXS5uYW1lKTsKKwkJCXN0cmNhdCgoY2hhciAqKXRtcCwgbGFuZSk7CisJCQltZW1jcHko KHZvaWQgKilsYW5lX2F0dHJzW3Bvc10uYXR0ci5hdHRyLm5hbWUsCisJCQkgICAgICAgKHZvaWQg Kil0bXAsCisJCQkgICAgICAgc2l6ZW9mKHRtcCkpOworCisJCQlsYW5lX2F0dHJzW3Bvc10uYXR0 ci5hdHRyLm1vZGUgPQorCQkJICAgIFZFUklGWV9PQ1RBTF9QRVJNSVNTSU9OUygwNDQ0KTsKKwkJ CWxhbmVfYXR0cnNbcG9zXS5hdHRyLnNob3cgPSBkd2NfcGNpZV9ldmVudF9zaG93OworCQkJbGFu ZV9hdHRyc1twb3NdLmF0dHIuc3RvcmUgPSBOVUxMOworCQkJbGFuZV9hdHRyc1twb3NdLnR5cGUg PSBEV0NfUENJRV9MQU5FX0VWRU5UOworCQkJbGFuZV9hdHRyc1twb3NdLmV2ZW50aWQgPSBldmVu dF9hcnJheVtqXS5ldmVudF9pZDsKKwkJCWxhbmVfYXR0cnNbcG9zXS5sYW5lID0gaTsKKwkJCXBt dV9hdHRyc1thdHRyX2lkeCsrXSA9ICZsYW5lX2F0dHJzW3Bvc10uYXR0ci5hdHRyOworCisJCQlt ZW1zZXQoKHZvaWQgKil0bXAsIDAsIHNpemVvZih0bXApKTsKKwkJfQorCX0KKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzKTsgaSsrKQor CQlwbXVfYXR0cnNbYXR0cl9pZHgrK10gPSBkd2NfcGNpZV9wbXVfdGltZV9ldmVudF9hdHRyc1tp XTsKKworCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNbYXR0cl9pZHgrK10gPSBOVUxM OworCisJcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cC5uYW1lID0gZXZlbnRf YXR0cl9uYW1lOworCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuaXNfdmlz aWJsZSA9CisJICAgIHBjaWVfcG11X2V2ZW50X2F0dHJfaXNfdmlzaWJsZTsKKwlwY2llX2luZm8t PnBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwLmF0dHJzID0KKwkgICAgcGNpZV9pbmZvLT5wY2ll X3BtdV9ldmVudF9hdHRyczsKKworCXBjaWVfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMF0g PQorCSAgICAmcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsKKwlwY2llX2lu Zm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzWzFdID0gJnBjaWVfcG11X2Zvcm1hdF9hdHRyc19ncm91 cDsKKwlwY2llX2luZm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzWzJdID0gJnBjaWVfcG11X2NwdW1h c2tfYXR0cnNfZ3JvdXA7CisJcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1szXSA9IE5V TEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2R3Y19wY2llX3BtdV9wcm9iZShz dHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGR3Y19wY2llX2luZm9f dGFibGUgKnBjaWVfaW5mbykKK3sKKwlpbnQgcmV0OworCWNoYXIgKm5hbWU7CisJc3RydWN0IGR3 Y19wY2llX3BtdSAqcGNpZV9wbXU7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKCFwY2ll X2luZm8gfHwgIXBjaWVfaW5mby0+cGRldikgeworCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwg IklucHV0IHBhcmFtZXRlciBpcyBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcGNpZV9wbXUgPSAmcGNpZV9pbmZvLT5wY2llX3BtdTsKKwlkZXYgPSAmcGNpZV9pbmZvLT5w ZGV2LT5kZXY7CisKKwlyZXQgPSBkd2NfcGNpZV9wbXVfYXR0cl9pbml0KHByaXYsIHBjaWVfaW5m byk7CisJaWYgKHJldCkgeworCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBNVSBhdHRyIGlu aXQgZmFpbCByZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpZV9wbXUt PmRldiA9IGRldjsKKwlwY2llX3BtdS0+cG11ID0gKHN0cnVjdCBwbXUpIHsKKwkJLm1vZHVsZQkJ PSBUSElTX01PRFVMRSwKKwkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQsCisJ CS5wbXVfZW5hYmxlCT0gTlVMTCwKKwkJLnBtdV9kaXNhYmxlCT0gTlVMTCwKKwkJLmV2ZW50X2lu aXQJPSBkd2NfcGNpZV9wbXVfZXZlbnRfaW5pdCwKKwkJLmFkZAkJPSBkd2NfcGNpZV9wbXVfZXZl bnRfYWRkLAorCQkuZGVsCQk9IGR3Y19wY2llX3BtdV9ldmVudF9kZWwsCisJCS5zdGFydAkJPSBk d2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQsCisJCS5zdG9wCQk9IGR3Y19wY2llX3BtdV9ldmVudF9z dG9wLAorCQkucmVhZAkJPSBkd2NfcGNpZV9wbXVfZXZlbnRfcmVhZCwKKwkJLmF0dHJfZ3JvdXBz CT0gcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3VwcywKKwkJLmNhcGFiaWxpdGllcwk9IFBF UkZfUE1VX0NBUF9OT19FWENMVURFLAorCX07CisKKwluYW1lID0gZGV2bV9rYXNwcmludGYocHJp di0+ZGV2LCBHRlBfS0VSTkVMLCAicGNpZV9iZGZfJXgiLAorCQkJICAgICAgcGNpZV9pbmZvLT5i ZGYpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBQaWNrIG9uZSBDUFUg dG8gYmUgdGhlIHByZWZlcnJlZCBvbmUgdG8gdXNlICovCisJcGNpZV9wbXUtPm9uX2NwdSA9IHJh d19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlyZXQgPSBwZXJmX3BtdV9yZWdpc3RlcigmcGNpZV9w bXUtPnBtdSwgbmFtZSwgLTEpOworCWlmIChyZXQpIHsKKwkJcGNpX2VycihwY2llX2luZm8tPnBk ZXYsICJFcnJvciAlZCByZWdpc3RlcmluZyBQTVUgQCV4XG4iLCByZXQsCisJCQkJIHBjaWVfaW5m by0+YmRmKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwY2llX2luZm8tPnBtdV9pc19yZWdpc3Rl ciA9IERXQ19QQ0lFX1BNVV9IQVNfUkVHSVNURVI7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IGR3Y19wY2llX3BtdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwlzdHJ1Y3QgZHdjX3BjaWVfcG11X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXU7CisK Kwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwcml2LT5wY2llX2N0cmxfbnVtOyBpbmRleCsrKQor CQlpZiAocHJpdi0+cGNpZV90YWJsZVtpbmRleF0ucG11X2lzX3JlZ2lzdGVyKSB7CisJCQlwY2ll X3BtdSA9ICZwcml2LT5wY2llX3RhYmxlW2luZGV4XS5wY2llX3BtdTsKKwkJCXBlcmZfcG11X3Vu cmVnaXN0ZXIoJnBjaWVfcG11LT5wbXUpOworCQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgZHdjX3BjaWVfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ aW50IHJldCA9IDA7CisJaW50IHBjaWVfaW5kZXg7CisJc3RydWN0IGR3Y19wY2llX3BtdV9wcml2 ICpwcml2OworCisJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCXByaXYtPmRl diA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwkv KiBJZiBQTVUgaXMgbm90IHN1cHBvcnQgb24gY3VycmVudCBwbGF0Zm9ybSwga2VlcCBzbGllbnQg Ki8KKwlpZiAoZHdjX3BjaWVfcG11X2Rpc2NvdmVyKHByaXYpKQorCQlyZXR1cm4gMDsKKworCWZv ciAocGNpZV9pbmRleCA9IDA7IHBjaWVfaW5kZXggPCBwcml2LT5wY2llX2N0cmxfbnVtOyBwY2ll X2luZGV4KyspIHsKKwkJc3RydWN0IHBjaV9kZXYgKnJwID0gcHJpdi0+cGNpZV90YWJsZVtwY2ll X2luZGV4XS5wZGV2OworCisJCXJldCA9IF9fZHdjX3BjaWVfcG11X3Byb2JlKHByaXYsICZwcml2 LT5wY2llX3RhYmxlW3BjaWVfaW5kZXhdKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcnAt PmRldiwgIlBDSWUgUE1VIHByb2JlIGZhaWxcbiIpOworCQkJZ290byBwbXVfdW5yZWdpc3RlcjsK KwkJfQorCX0KKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUENJZSBQTVVzIHJlZ2lzdGVyZWRcbiIp OworCisJcmV0dXJuIDA7CisKK3BtdV91bnJlZ2lzdGVyOgorCWR3Y19wY2llX3BtdV9yZW1vdmUo cGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBkd2NfcGNpZV9wbXVfZHJpdmVyID0geworCS5wcm9iZSA9IGR3Y19wY2llX3BtdV9wcm9iZSwK KwkucmVtb3ZlID0gZHdjX3BjaWVfcG11X3JlbW92ZSwKKwkuZHJpdmVyID0gey5uYW1lID0gRFJW X05BTUUsfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGR3Y19wY2llX3BtdV9pbml0KHZvaWQp Cit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHdjX3Bj aWVfcG11X2RyaXZlcik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHdjX3BjaWVf cG11X2RldiA9CisJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoREVWX05BTUUs IC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKGR3Y19wY2llX3BtdV9kZXYpKSB7CisJCXBsYXRm b3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZHdjX3BjaWVfcG11X2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIF9fZXhpdCBkd2NfcGNpZV9wbXVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91 bnJlZ2lzdGVyKGR3Y19wY2llX3BtdV9kZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHdjX3BjaWVfcG11X2lu aXQpOworbW9kdWxlX2V4aXQoZHdjX3BjaWVfcG11X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJ T04oIlBNVSBkcml2ZXIgZm9yIERlc2lnbldhcmUgQ29yZXMgUENJIEV4cHJlc3MgQ29udHJvbGxl ciIpOworTU9EVUxFX0FVVEhPUigieHVlc2h1YWlAbGludXguYWxpYmFiYS5jb20iKTsKK01PRFVM RV9BVVRIT1IoInlpbnh1YW5fY3dAbGludXguYWxpYmFiYS5jb20iKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsKLS0gCjIuMjAuMS4xMi5nNzI3ODhmZGIKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==