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 5BF89C7115B for ; Tue, 24 Jun 2025 00:30:51 +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:CC:To:In-Reply-To:References:Message-ID :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qbkxPqHWTewbbXp+tbqE6PIsPyT5i03sChUh6zDFmZ4=; b=NT2gNn4xZq1MSa 1U/wjq1Ojc/9fOazw8Xv37VM5l9+uMd6q/+rTzqZgUFFRzXzv3Qb7aAFgVqn6FGNv0iongugJ8krh OpD3SjBBpHlT5Z7k19leoLva2bKco01kxkAee9Oa1Fx0mlzAY6baSRdNQRIzJCqW+w5ErDgUJ8lea UK8p/l7TbOexlw8NB/i8WoACfQQCosJBZTDIn6Gum6bsaIOdu6gBHb0KtQbV3rOEm3BGrmcCVV1CR 7ppgAyi7QnKViyGYhMo+G5wJSppAEMpL32ussBNqnaJuwTVsclwIk6QOyb5fTZ3vf4TIq3vaygsPn U9SowIal5vaRWRKLNXjA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uTrYo-00000004EgD-3dVQ; Tue, 24 Jun 2025 00:30:50 +0000 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uNX1I-00000000KUd-0bjK for linux-i3c@lists.infradead.org; Fri, 06 Jun 2025 13:22:05 +0000 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5569AaEE007711; Fri, 6 Jun 2025 09:21:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=DKIM; bh=oXrkT L1hEX4nUcAlo0Fn6vSldW+Qnfsx+gK2cjl9UgM=; b=b6/VG67cDP4WU+8dHGPrN 1sdwkCMXaZb3lPyrYrUQiJ/6qEjNTmgbCiH2shd9NNzOHnbwg3KWg8jsorTFpbOe wAsZJ3U9757qpdH540Y3MxKaTB4eluyG2PulxGJAloWFGP3p0G9kmtIh8Ky0l0Dn HG9vEEYpXot89Z6XadUxRthijK7jhsMZh+n9anOr49tssvMlPSetQ2cOjrjPf1qN smF/g8M3TQiC1jZKU7ARkUBXsU3+MixeT2Am2I9BR2mKQNCUonB+f8+2oNwcaf7B ttZvtXh84OknCOyXwJxPFdyNcXxotczrVUlaYRcKovw7nWtQizF5BnMFEP3B4PCK g== Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com (PPS) with ESMTPS id 471g9jdjhh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 06 Jun 2025 09:21:51 -0400 (EDT) Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 556DLoJT062001 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 6 Jun 2025 09:21:50 -0400 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Fri, 6 Jun 2025 09:21:50 -0400 Received: from zeus.spd.analog.com (10.66.68.11) by ashbmbx8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server id 15.2.1748.10 via Frontend Transport; Fri, 6 Jun 2025 09:21:50 -0400 Received: from [127.0.1.1] ([10.44.3.40]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 556DLYfi019626; Fri, 6 Jun 2025 09:21:42 -0400 From: Jorge Marques Date: Fri, 6 Jun 2025 15:21:03 +0200 Subject: [PATCH v2 2/2] i3c: master: Add driver for Analog Devices I3C Controller IP MIME-Version: 1.0 Message-ID: <20250606-adi-i3c-master-v2-2-e68b9aad2630@analog.com> References: <20250606-adi-i3c-master-v2-0-e68b9aad2630@analog.com> In-Reply-To: <20250606-adi-i3c-master-v2-0-e68b9aad2630@analog.com> To: Alexandre Belloni , Frank Li , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , Jorge Marques X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1749216066; l=31230; i=jorge.marques@analog.com; s=20250303; h=from:subject:message-id; bh=U1Q6vwh7qSx89JhABWGqn+wkM/8JDeLk1oRCFJ9sr1Q=; b=YD2T/EeEuiOy4ffa4y8i3bLL70YGm4Qr9QA0y95W2gOnQh3hLF8z7V/AxF9ZwUmD/PKX4Tpqp WHFwE2s+UzcCXi6yqzaag+gR0OS2cdNT7PYO7cMw9VahOGyFZASg2NH X-Developer-Key: i=jorge.marques@analog.com; a=ed25519; pk=NUR1IZZMH0Da3QbJ2tBSznSPVfRpuoWdhBzKGSpAdbg= X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-GUID: P5iV4wA0yDhp_gNxDVYsEqXB1r_QIQ8D X-Authority-Analysis: v=2.4 cv=DfIXqutW c=1 sm=1 tr=0 ts=6842eb6f cx=c_pps a=PpDZqlmH/M8setHirZLBMw==:117 a=PpDZqlmH/M8setHirZLBMw==:17 a=IkcTkHD0fZMA:10 a=6IFa9wvqVegA:10 a=gAnH3GRIAAAA:8 a=Br2UW1UjAAAA:8 a=uYelplDOSPtZD9UNFWIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=WmXOPjafLNExVIMTj843:22 X-Proofpoint-ORIG-GUID: P5iV4wA0yDhp_gNxDVYsEqXB1r_QIQ8D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjA2MDEyMSBTYWx0ZWRfX1NaJftdA5rSO 277lS6dn0sjRP/EyKke7acoxRAhe0nxBX/7gpxbUai2r8+vOIxyVEYxW1vtEWKe+/lG5A9OmF++ CzH9iORyQnOcxkvx2J/nu0/KtpoUnpd0kdRH7QgQXuFlgZshc0gqB/oqtd1g+Ne8scTvJAEYxV0 eHxpItlDdGKgQ7TjFHX9L52dPFrL5K3GR+UoOu+hragCEJlJxYM52tEOX0UNStnoukz+TYoBC2u nZPmD7IgpN8OH0XUoiITer2PyNheg7jWZHLm65GwQOwKqDo7wp67P6qjE0h6hZoI/I9Yq93sFFW TOz3BpqLTHd2Sn7w5+K/xNJrM9LJVonZZU2UE/NYYe8uFkdTYLoKx81IRpefMtDhNQqfPm33oCs Yd2i9Fbji6T6ePgfYhmUpQn7qJRClo+XFZSzQNqnbBiX7NZbDTcUrxx3lIFBGuNOrqWrYaQ6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-06_04,2025-06-05_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 suspectscore=0 adultscore=0 mlxlogscore=999 spamscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506060121 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250606_062204_204117_007003F3 X-CRM114-Status: GOOD ( 22.70 ) X-Mailman-Approved-At: Mon, 23 Jun 2025 15:46:42 -0700 X-BeenThere: linux-i3c@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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org QWRkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEkzQyBDb250cm9sbGVyIElQLCBhbiBBWEkt aW50ZXJmYWNlZCBJUApjb3JlIHRoYXQgc3VwcG9ydHMgSTNDIGFuZCBJMkMgZGV2aWNlcywgbXVs dGlwbGUgc3BlZWQtZ3JhZGVzIGFuZApJM0MgSUJJcy4KClNpZ25lZC1vZmYtYnk6IEpvcmdlIE1h cnF1ZXMgPGpvcmdlLm1hcnF1ZXNAYW5hbG9nLmNvbT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9pM2MvbWFzdGVyL0tjb25maWcgICAg ICAgICAgfCAgIDExICsKIGRyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmlsZSAgICAgICAgIHwgICAg MSArCiBkcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYyB8IDEwMzcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTA1MCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA2ZjU2 ZTE3ZGNlY2Y5MDJjNjgxMjgyN2MxZWMzZTA2N2M2NWU5ODk0Li45ZWI1YjZjMzI3NTkwNzI1ZDE2 NDFmZDRiNzNlNDhmYzFkMWEzOTU0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlO VEFJTkVSUwpAQCAtMTEyNDcsNiArMTEyNDcsNyBAQCBJM0MgRFJJVkVSIEZPUiBBTkFMT0cgREVW SUNFUyBJM0MgQ09OVFJPTExFUiBJUAogTToJSm9yZ2UgTWFycXVlcyA8am9yZ2UubWFycXVlc0Bh bmFsb2cuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2kzYy9hZGksaTNjLW1hc3Rlci55YW1sCitGOglkcml2ZXJzL2kzYy9tYXN0ZXIvYWRp LWkzYy1tYXN0ZXIuYwogCiBJM0MgRFJJVkVSIEZPUiBDQURFTkNFIEkzQyBNQVNURVIgSVAKIE06 CVByemVteXPFgmF3IEdhaiA8cGdhakBjYWRlbmNlLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv aTNjL21hc3Rlci9LY29uZmlnIGIvZHJpdmVycy9pM2MvbWFzdGVyL0tjb25maWcKaW5kZXggN2Iz MGRiMzI1M2FmOWQ1YzZhZWU2NTQ0YzA2MGU0OTFiZmJlYjY0My4uMzI4YjcxNDVjZGVmYTIwZTcw OGViZmEzMzgzZTg0OWNlNTFjNWE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pM2MvbWFzdGVyL0tj b25maWcKKysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL0tjb25maWcKQEAgLTEsNCArMSwxNSBAQAog IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Citjb25maWcgQURJX0kzQ19N QVNURVIKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgSTNDIG1hc3RlciBkcml2ZXIiCisJZGVw ZW5kcyBvbiBIQVNfSU9NRU0KKwloZWxwCisJICBTdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBJ M0MgQ29udHJvbGxlciBJUCwgYW4gQVhJLWludGVyZmFjZWQgSVAKKwkgIGNvcmUgdGhhdCBzdXBw b3J0cyBJM0MgYW5kIEkyQyBkZXZpY2VzLCBtdWx0aXBsZSBzcGVlZC1ncmFkZXMgYW5kCisJICBJ M0MgSUJJcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUu ICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWRpLWkzYy1tYXN0ZXIuCisK IGNvbmZpZyBDRE5TX0kzQ19NQVNURVIKIAl0cmlzdGF0ZSAiQ2FkZW5jZSBJM0MgbWFzdGVyIGRy aXZlciIKIAlkZXBlbmRzIG9uIEhBU19JT01FTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFz dGVyL01ha2VmaWxlIGIvZHJpdmVycy9pM2MvbWFzdGVyL01ha2VmaWxlCmluZGV4IDNlOTc5NjAx NjBiYzg1ZTVlYWYyOTY2ZWMwYzNmYWU0NThjMjcxMWUuLjZjYzRmNGI3M2U3YmRjMjA2YjY4Yzc1 MDM5MGY5YzNjYzJjY2IxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiAjIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKK29iai0kKENPTkZJR19BRElfSTND X01BU1RFUikJCSs9IGFkaS1pM2MtbWFzdGVyLm8KIG9iai0kKENPTkZJR19DRE5TX0kzQ19NQVNU RVIpCQkrPSBpM2MtbWFzdGVyLWNkbnMubwogb2JqLSQoQ09ORklHX0RXX0kzQ19NQVNURVIpCQkr PSBkdy1pM2MtbWFzdGVyLm8KIG9iai0kKENPTkZJR19BU1QyNjAwX0kzQ19NQVNURVIpCSs9IGFz dDI2MDAtaTNjLW1hc3Rlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkz Yy1tYXN0ZXIuYyBiL2RyaXZlcnMvaTNjL21hc3Rlci9hZGktaTNjLW1hc3Rlci5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmIzNzk5MDcxNTczZjQwNjZlYjE0MTIzYzk0ZWU1OTljYzYzMzFiM2QKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIvYWRpLWkzYy1tYXN0ZXIuYwpAQCAtMCwwICsxLDEw MzcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJ M0MgQ29udHJvbGxlciBkcml2ZXIKKyAqIENvcHlyaWdodCAyMDI1IEFuYWxvZyBEZXZpY2VzIElu Yy4KKyAqIEF1dGhvcjogSm9yZ2UgTWFycXVlcyA8am9yZ2UubWFycXVlc0BhbmFsb2cuY29tPgor ICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVs ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaTNjL21hc3Rlci5oPgorI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2RlZmluZSBWRVJTSU9OX01BSk9SKHgpCQkoKHUzMilG SUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCAoeCkpKQorI2RlZmluZSBWRVJTSU9OX01JTk9SKHgp CQkoKHUzMilGSUVMRF9HRVQoR0VOTUFTSygxNSwgOCksICh4KSkpCisjZGVmaW5lIFZFUlNJT05f UEFUQ0goeCkJCSgodTMyKUZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCAoeCkpKQorCisjZGVmaW5l IE1BWF9ERVZTCQkJMTYKKworI2RlZmluZSBSRUdfVkVSU0lPTgkJCTB4MDAwCisjZGVmaW5lIFJF R19FTkFCTEUJCQkweDA0MAorI2RlZmluZSBSRUdfSVJRX01BU0sJCQkweDA4MAorI2RlZmluZSBS RUdfSVJRX1BFTkRJTkcJCQkweDA4NAorI2RlZmluZSAgIFJFR19JUlFfUEVESU5HX0NNRFIJCUJJ VCg1KQorI2RlZmluZSAgIFJFR19JUlFfUEVESU5HX0lCSQkJKCh1MzIpQklUKDYpKQorI2RlZmlu ZSAgIFJFR19JUlFfUEVESU5HX0RBQQkJQklUKDcpCisjZGVmaW5lIFJFR19DTURfRklGTwkJCTB4 MGQ0CisjZGVmaW5lCSAgUkVHX0NNRF9GSUZPXzBfSVNfQ0NDCQlCSVQoMjIpCisjZGVmaW5lICAg UkVHX0NNRF9GSUZPXzBfQkNBU1QJCUJJVCgyMSkKKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9fMF9T UgkJQklUKDIwKQorI2RlZmluZSAgIFJFR19DTURfRklGT18wX0xFTihsKQkJRklFTERfUFJFUChH RU5NQVNLKDE5LCA4KSwgKGwpKQorI2RlZmluZSAgIFJFR19DTURfRklGT18wX0xFTl9NQVgJNDA5 NQorI2RlZmluZSAgIFJFR19DTURfRklGT18wX0RFVl9BRERSKGEpCUZJRUxEX1BSRVAoR0VOTUFT Syg3LCAxKSwgYSkKKyNkZWZpbmUgICBSRUdfQ01EX0ZJRk9fMF9STlcJCUJJVCgwKQorI2RlZmlu ZSAgIFJFR19DTURfRklGT18xX0NDQyhpZCkJRklFTERfUFJFUChHRU5NQVNLKDcsIDApLCAoaWQp KQorI2RlZmluZSBSRUdfQ01EX0ZJRk9fUk9PTQkJMHgwYzAKKyNkZWZpbmUgUkVHX0NNRFJfRklG TwkJCTB4MGQ4CisjZGVmaW5lICAgUkVHX0NNRFJfRklGT19OT19FUlJPUgkwCisjZGVmaW5lICAg UkVHX0NNRFJfRklGT19DRTBfRVJST1IJMQorI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fQ0UyX0VS Uk9SCTQKKyNkZWZpbmUgICBSRUdfQ01EUl9GSUZPX05BQ0tfUkVTUAk2CisjZGVmaW5lICAgUkVH X0NNRFJfRklGT19VREFfRVJST1IJOAorI2RlZmluZSAgIFJFR19DTURSX0ZJRk9fRVJST1IoeCkJ RklFTERfR0VUKEdFTk1BU0soMjMsIDIwKSwgKHgpKQorI2RlZmluZSAgIFJFR19DTURSX0ZJRk9f WEZFUl9CWVRFUyh4KQlGSUVMRF9HRVQoR0VOTUFTSygxOSwgOCksICh4KSkKKyNkZWZpbmUgUkVH X1NET19GSUZPCQkJMHgwZGMKKyNkZWZpbmUgUkVHX1NET19GSUZPX1JPT00JCTB4MGM4CisjZGVm aW5lIFJFR19TRElfRklGTwkJCTB4MGUwCisjZGVmaW5lIFJFR19JQklfRklGTwkJCTB4MGU0Cisj ZGVmaW5lIFJFR19GSUZPX1NUQVRVUwkJCTB4MGU4CisjZGVmaW5lICAgUkVHX0ZJRk9fU1RBVFVT X0NNRFJfRU1QVFkJQklUKDApCisjZGVmaW5lICAgUkVHX0ZJRk9fU1RBVFVTX0lCSV9FTVBUWQlC SVQoMSkKKyNkZWZpbmUgUkVHX09QUwkJCQkweDEwMAorI2RlZmluZSAgIFJFR19PUFNfU0VUX1NH KHgpCQlGSUVMRF9QUkVQKEdFTk1BU0soNiwgNSksICh4KSkKKyNkZWZpbmUgICBSRUdfT1BTX1BQ X1NHX01BU0sJCUdFTk1BU0soNiwgNSkKKyNkZWZpbmUgUkVHX0lCSV9DT05GSUcJCQkweDE0MAor I2RlZmluZSAgIFJFR19JQklfQ09ORklHX0xJU1RFTgkJQklUKDEpCisjZGVmaW5lICAgUkVHX0lC SV9DT05GSUdfRU5BQkxFCQlCSVQoMCkKKyNkZWZpbmUgUkVHX0RFVl9DSEFSCQkJMHgxODAKKyNk ZWZpbmUgICBSRUdfREVWX0NIQVJfSVNfSTJDCQlCSVQoMCkKKyNkZWZpbmUgICBSRUdfREVWX0NI QVJfSVNfQVRUQUNIRUQJQklUKDEpCisjZGVmaW5lICAgUkVHX0RFVl9DSEFSX0JDUl9JQkkoeCkJ KCgoeCkgJiBHRU5NQVNLKDIsIDEpKSA8PCAxKQorI2RlZmluZSAgIFJFR19ERVZfQ0hBUl9XRU4J CUJJVCg4KQorI2RlZmluZSAgIFJFR19ERVZfQ0hBUl9BRERSKHgpCQlGSUVMRF9QUkVQKEdFTk1B U0soMTUsIDkpLCAoeCkpCisKK2VudW0gc3BlZWRfZ3JhZGUge1BQX1NHX1VOU0VULCBQUF9TR18x TUhaLCBQUF9TR18zTUhaLCBQUF9TR182TUhaLCBQUF9TR18xMk1IWn07CitzdHJ1Y3QgYWRpX2kz Y19jbWQgeworCXUzMiBjbWQwOworCXUzMiBjbWQxOworCXUzMiB0eF9sZW47CisJY29uc3Qgdm9p ZCAqdHhfYnVmOworCXUzMiByeF9sZW47CisJdm9pZCAqcnhfYnVmOworCXUzMiBlcnJvcjsKK307 CisKK3N0cnVjdCBhZGlfaTNjX3hmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1 Y3QgY29tcGxldGlvbiBjb21wOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IG5jbWRzOworCXVu c2lnbmVkIGludCBuY21kc19jb21wOworCXN0cnVjdCBhZGlfaTNjX2NtZCBjbWRzW107Cit9Owor CitzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgeworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIg YmFzZTsKKwl1MzIgZnJlZV9ycl9zbG90czsKKwl1bnNpZ25lZCBpbnQgbWF4ZGV2czsKKwlzdHJ1 Y3QgeworCQl1bnNpZ25lZCBpbnQgbnVtX3Nsb3RzOworCQlzdHJ1Y3QgaTNjX2Rldl9kZXNjICoq c2xvdHM7CisJCXNwaW5sb2NrX3QgbG9jazsgLyogUHJvdGVjdCBJQkkgc2xvdCBhY2Nlc3MgKi8K Kwl9IGliaTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCXN0cnVjdCBh ZGlfaTNjX3hmZXIgKmN1cjsKKwkJc3BpbmxvY2tfdCBsb2NrOyAvKiBQcm90ZWN0IHRyYW5zZmVy ICovCisJfSB4ZmVycXVldWU7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNs azsKKwl1bnNpZ25lZCBsb25nIGkzY19zY2xfbGltOworCXN0cnVjdCB7CisJCXU4IGFkZHJzW01B WF9ERVZTXTsKKwkJdTggaW5kZXg7CisJfSBkYWE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj dCBhZGlfaTNjX21hc3RlciAqdG9fYWRpX2kzY19tYXN0ZXIoc3RydWN0IGkzY19tYXN0ZXJfY29u dHJvbGxlciAqbWFzdGVyKQoreworCXJldHVybiBjb250YWluZXJfb2YobWFzdGVyLCBzdHJ1Y3Qg YWRpX2kzY19tYXN0ZXIsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl93 cl90b190eF9maWZvKHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAorCQkJCQkgY29uc3Qg dTggKmJ5dGVzLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXVuc2lnbmVkIGludCBuLCBtOwor CXUzMiB0bXA7CisKKwluID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX1NET19GSUZPX1JPT00p OworCW0gPSBtaW4obiwgbmJ5dGVzKTsKKwl3cml0ZXNsKG1hc3Rlci0+cmVncyArIFJFR19TRE9f RklGTywgYnl0ZXMsIG0gLyA0KTsKKworCWlmIChtICYgMykgeworCQltZW1jcHkoJnRtcCwgYnl0 ZXMgKyAobSAmIH4zKSwgbSAmIDMpOworCQl3cml0ZWwodG1wLCBtYXN0ZXItPnJlZ3MgKyBSRUdf U0RPX0ZJRk8pOworCX0KK30KKworc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfcmRfZnJvbV9y eF9maWZvKHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAorCQkJCQkgICB1OCAqYnl0ZXMs IHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJcmVhZHNsKG1hc3Rlci0+cmVncyArIFJFR19TRElf RklGTywgYnl0ZXMsIG5ieXRlcyAvIDQpOworCWlmIChuYnl0ZXMgJiAzKSB7CisJCXUzMiB0bXA7 CisKKwkJdG1wID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX1NESV9GSUZPKTsKKwkJbWVtY3B5 KGJ5dGVzICsgKG5ieXRlcyAmIH4zKSwgJnRtcCwgbmJ5dGVzICYgMyk7CisJfQorfQorCitzdGF0 aWMgYm9vbCBhZGlfaTNjX21hc3Rlcl9zdXBwb3J0c19jY2NfY21kKHN0cnVjdCBpM2NfbWFzdGVy X2NvbnRyb2xsZXIgKm0sCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaTNjX2NjY19jbWQgKmNtZCkK K3sKKwlpZiAoY21kLT5uZGVzdHMgPiAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKGNt ZC0+aWQpIHsKKwljYXNlIEkzQ19DQ0NfRU5FQyh0cnVlKToKKwljYXNlIEkzQ19DQ0NfRU5FQyhm YWxzZSk6CisJY2FzZSBJM0NfQ0NDX0RJU0VDKHRydWUpOgorCWNhc2UgSTNDX0NDQ19ESVNFQyhm YWxzZSk6CisJY2FzZSBJM0NfQ0NDX1JTVERBQSh0cnVlKToKKwljYXNlIEkzQ19DQ0NfUlNUREFB KGZhbHNlKToKKwljYXNlIEkzQ19DQ0NfRU5UREFBOgorCWNhc2UgSTNDX0NDQ19TRVREQVNBOgor CWNhc2UgSTNDX0NDQ19TRVRORVdEQToKKwljYXNlIEkzQ19DQ0NfR0VUTVdMOgorCWNhc2UgSTND X0NDQ19HRVRNUkw6CisJY2FzZSBJM0NfQ0NDX0dFVFBJRDoKKwljYXNlIEkzQ19DQ0NfR0VUQkNS OgorCWNhc2UgSTNDX0NDQ19HRVREQ1I6CisJY2FzZSBJM0NfQ0NDX0dFVFNUQVRVUzoKKwljYXNl IEkzQ19DQ0NfR0VUSERSQ0FQOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlicmVhazsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfZGlz YWJsZShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlcikKK3sKKwl3cml0ZWwoMCwgbWFzdGVy LT5yZWdzICsgUkVHX0lCSV9DT05GSUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgYWRpX2kzY194ZmVyICphZGlfaTNjX21hc3Rlcl9hbGxvY194ZmVyKHN0cnVjdCBhZGlfaTNj X21hc3RlciAqbWFzdGVyLAorCQkJCQkJICAgICAgdW5zaWduZWQgaW50IG5jbWRzKQoreworCXN0 cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXI7CisKKwl4ZmVyID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZSh4 ZmVyLCBjbWRzLCBuY21kcyksIEdGUF9LRVJORUwpOworCWlmICgheGZlcikKKwkJcmV0dXJuIE5V TEw7CisKKwlJTklUX0xJU1RfSEVBRCgmeGZlci0+bm9kZSk7CisJeGZlci0+bmNtZHMgPSBuY21k czsKKwl4ZmVyLT5yZXQgPSAtRVRJTUVET1VUOworCisJcmV0dXJuIHhmZXI7Cit9CisKK3N0YXRp YyB2b2lkIGFkaV9pM2NfbWFzdGVyX3N0YXJ0X3hmZXJfbG9ja2VkKHN0cnVjdCBhZGlfaTNjX21h c3RlciAqbWFzdGVyKQoreworCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXIgPSBtYXN0ZXItPnhm ZXJxdWV1ZS5jdXI7CisJdW5zaWduZWQgaW50IGksIG4sIG07CisKKwlpZiAoIXhmZXIpCisJCXJl dHVybjsKKworCWZvciAoaSA9IDA7IGkgPCB4ZmVyLT5uY21kczsgaSsrKSB7CisJCXN0cnVjdCBh ZGlfaTNjX2NtZCAqY21kID0gJnhmZXItPmNtZHNbaV07CisKKwkJaWYgKCEoY21kLT5jbWQwICYg UkVHX0NNRF9GSUZPXzBfUk5XKSkKKwkJCWFkaV9pM2NfbWFzdGVyX3dyX3RvX3R4X2ZpZm8obWFz dGVyLCBjbWQtPnR4X2J1ZiwgY21kLT50eF9sZW4pOworCX0KKworCW4gPSByZWFkbChtYXN0ZXIt PnJlZ3MgKyBSRUdfQ01EX0ZJRk9fUk9PTSk7CisJZm9yIChpID0gMDsgaSA8IHhmZXItPm5jbWRz OyBpKyspIHsKKwkJc3RydWN0IGFkaV9pM2NfY21kICpjbWQgPSAmeGZlci0+Y21kc1tpXTsKKwor CQltID0gY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBfSVNfQ0NDID8gMiA6IDE7CisJCWlmICht ID4gbikKKwkJCWJyZWFrOworCQl3cml0ZWwoY21kLT5jbWQwLCBtYXN0ZXItPnJlZ3MgKyBSRUdf Q01EX0ZJRk8pOworCQlpZiAoY21kLT5jbWQwICYgUkVHX0NNRF9GSUZPXzBfSVNfQ0NDKQorCQkJ d3JpdGVsKGNtZC0+Y21kMSwgbWFzdGVyLT5yZWdzICsgUkVHX0NNRF9GSUZPKTsKKwkJbiAtPSBt OworCX0KK30KKworc3RhdGljIHZvaWQgYWRpX2kzY19tYXN0ZXJfZW5kX3hmZXJfbG9ja2VkKHN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAorCQkJCQkgICB1MzIgcGVuZGluZykKK3sKKwlz dHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyID0gbWFzdGVyLT54ZmVycXVldWUuY3VyOworCWludCBp LCByZXQgPSAwOworCXUzMiBzdGF0dXMwOworCisJaWYgKCF4ZmVyKQorCQlyZXR1cm47CisKKwlm b3IgKHN0YXR1czAgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdfRklGT19TVEFUVVMpOworCSAg ICAgIShzdGF0dXMwICYgUkVHX0ZJRk9fU1RBVFVTX0NNRFJfRU1QVFkpOworCSAgICAgc3RhdHVz MCA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19GSUZPX1NUQVRVUykpIHsKKwkJc3RydWN0IGFk aV9pM2NfY21kICpjbWQ7CisJCXUzMiBjbWRyLCByeF9sZW47CisKKwkJY21kciA9IHJlYWRsKG1h c3Rlci0+cmVncyArIFJFR19DTURSX0ZJRk8pOworCisJCWNtZCA9ICZ4ZmVyLT5jbWRzW3hmZXIt Pm5jbWRzX2NvbXArK107CisJCWlmIChjbWQtPmNtZDAgJiBSRUdfQ01EX0ZJRk9fMF9STlcpIHsK KwkJCXJ4X2xlbiA9IG1pbl90KHUzMiwgUkVHX0NNRFJfRklGT19YRkVSX0JZVEVTKGNtZHIpLCBj bWQtPnJ4X2xlbik7CisJCQlhZGlfaTNjX21hc3Rlcl9yZF9mcm9tX3J4X2ZpZm8obWFzdGVyLCBj bWQtPnJ4X2J1ZiwgcnhfbGVuKTsKKwkJfQorCQljbWQtPmVycm9yID0gUkVHX0NNRFJfRklGT19F UlJPUihjbWRyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgeGZlci0+bmNtZHM7IGkrKykgewor CQlzd2l0Y2ggKHhmZXItPmNtZHNbaV0uZXJyb3IpIHsKKwkJY2FzZSBSRUdfQ01EUl9GSUZPX05P X0VSUk9SOgorCQkJYnJlYWs7CisKKwkJY2FzZSBSRUdfQ01EUl9GSUZPX0NFMF9FUlJPUjoKKwkJ Y2FzZSBSRUdfQ01EUl9GSUZPX0NFMl9FUlJPUjoKKwkJY2FzZSBSRUdfQ01EUl9GSUZPX05BQ0tf UkVTUDoKKwkJY2FzZSBSRUdfQ01EUl9GSUZPX1VEQV9FUlJPUjoKKwkJCXJldCA9IC1FSU87CisJ CQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9 CisJfQorCisJeGZlci0+cmV0ID0gcmV0OworCisJaWYgKHhmZXItPm5jbWRzX2NvbXAgIT0geGZl ci0+bmNtZHMpCisJCXJldHVybjsKKworCWNvbXBsZXRlKCZ4ZmVyLT5jb21wKTsKKworCXhmZXIg PSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJm1hc3Rlci0+eGZlcnF1ZXVlLmxpc3QsCisJCQkJ CXN0cnVjdCBhZGlfaTNjX3hmZXIsIG5vZGUpOworCWlmICh4ZmVyKQorCQlsaXN0X2RlbF9pbml0 KCZ4ZmVyLT5ub2RlKTsKKworCW1hc3Rlci0+eGZlcnF1ZXVlLmN1ciA9IHhmZXI7CisJYWRpX2kz Y19tYXN0ZXJfc3RhcnRfeGZlcl9sb2NrZWQobWFzdGVyKTsKK30KKworc3RhdGljIHZvaWQgYWRp X2kzY19tYXN0ZXJfcXVldWVfeGZlcihzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKKwkJ CQkgICAgICBzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyKQoreworCWluaXRfY29tcGxldGlvbigm eGZlci0+Y29tcCk7CisJZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoJm1hc3Rlci0+eGZlcnF1ZXVl LmxvY2spOworCWlmIChtYXN0ZXItPnhmZXJxdWV1ZS5jdXIpIHsKKwkJbGlzdF9hZGRfdGFpbCgm eGZlci0+bm9kZSwgJm1hc3Rlci0+eGZlcnF1ZXVlLmxpc3QpOworCX0gZWxzZSB7CisJCW1hc3Rl ci0+eGZlcnF1ZXVlLmN1ciA9IHhmZXI7CisJCWFkaV9pM2NfbWFzdGVyX3N0YXJ0X3hmZXJfbG9j a2VkKG1hc3Rlcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl91bnF1ZXVl X3hmZXIoc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIsCisJCQkJCXN0cnVjdCBhZGlfaTNj X3hmZXIgKnhmZXIpCit7CisJZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSkoJm1hc3Rlci0+eGZlcnF1 ZXVlLmxvY2spOworCWlmIChtYXN0ZXItPnhmZXJxdWV1ZS5jdXIgPT0geGZlcikKKwkJbWFzdGVy LT54ZmVycXVldWUuY3VyID0gTlVMTDsKKwllbHNlCisJCWxpc3RfZGVsX2luaXQoJnhmZXItPm5v ZGUpOworCisJd3JpdGVsKDB4MDEsIG1hc3Rlci0+cmVncyArIFJFR19FTkFCTEUpOworCXdyaXRl bCgweDAwLCBtYXN0ZXItPnJlZ3MgKyBSRUdfRU5BQkxFKTsKKwl3cml0ZWwoUkVHX0lSUV9QRURJ TkdfQ01EUiwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKK30KKworc3RhdGljIGVudW0g aTNjX2Vycm9yX2NvZGUgYWRpX2kzY19jbWRfZ2V0X2VycihzdHJ1Y3QgYWRpX2kzY19jbWQgKmNt ZCkKK3sKKwlzd2l0Y2ggKGNtZC0+ZXJyb3IpIHsKKwljYXNlIFJFR19DTURSX0ZJRk9fQ0UwX0VS Uk9SOgorCQlyZXR1cm4gSTNDX0VSUk9SX00wOworCisJY2FzZSBSRUdfQ01EUl9GSUZPX0NFMl9F UlJPUjoKKwljYXNlIFJFR19DTURSX0ZJRk9fTkFDS19SRVNQOgorCQlyZXR1cm4gSTNDX0VSUk9S X00yOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIEkzQ19FUlJPUl9VTktO T1dOOworfQorCitzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVyX3NlbmRfY2NjX2NtZChzdHJ1Y3Qg aTNjX21hc3Rlcl9jb250cm9sbGVyICptLAorCQkJCSAgICAgICBzdHJ1Y3QgaTNjX2NjY19jbWQg KmNtZCkKK3sKKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFz dGVyKG0pOworCXN0cnVjdCBhZGlfaTNjX3hmZXIgKnhmZXI7CisJc3RydWN0IGFkaV9pM2NfY21k ICpjY21kOworCisJeGZlciA9IGFkaV9pM2NfbWFzdGVyX2FsbG9jX3hmZXIobWFzdGVyLCAxKTsK KwlpZiAoIXhmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJY2NtZCA9IHhmZXItPmNtZHM7CisJ Y2NtZC0+Y21kMSA9IFJFR19DTURfRklGT18xX0NDQyhjbWQtPmlkKTsKKwljY21kLT5jbWQwID0g UkVHX0NNRF9GSUZPXzBfSVNfQ0NDIHwKKwkJICAgICBSRUdfQ01EX0ZJRk9fMF9MRU4oY21kLT5k ZXN0c1swXS5wYXlsb2FkLmxlbik7CisKKwlpZiAoY21kLT5pZCAmIEkzQ19DQ0NfRElSRUNUKQor CQljY21kLT5jbWQwIHw9IFJFR19DTURfRklGT18wX0RFVl9BRERSKGNtZC0+ZGVzdHNbMF0uYWRk cik7CisKKwlpZiAoY21kLT5ybncpIHsKKwkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9S Tlc7CisJCWNjbWQtPnJ4X2J1ZiA9IGNtZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOworCQljY21k LT5yeF9sZW4gPSBjbWQtPmRlc3RzWzBdLnBheWxvYWQubGVuOworCX0gZWxzZSB7CisJCWNjbWQt PnR4X2J1ZiA9IGNtZC0+ZGVzdHNbMF0ucGF5bG9hZC5kYXRhOworCQljY21kLT50eF9sZW4gPSBj bWQtPmRlc3RzWzBdLnBheWxvYWQubGVuOworCX0KKworCWFkaV9pM2NfbWFzdGVyX3F1ZXVlX3hm ZXIobWFzdGVyLCB4ZmVyKTsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmeGZl ci0+Y29tcCwgbXNlY3NfdG9famlmZmllcygxMDAwKSkpCisJCWFkaV9pM2NfbWFzdGVyX3VucXVl dWVfeGZlcihtYXN0ZXIsIHhmZXIpOworCisJY21kLT5lcnIgPSBhZGlfaTNjX2NtZF9nZXRfZXJy KCZ4ZmVyLT5jbWRzWzBdKTsKKwlrZnJlZSh4ZmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGFkaV9pM2NfbWFzdGVyX3ByaXZfeGZlcnMoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2 LAorCQkJCSAgICAgc3RydWN0IGkzY19wcml2X3hmZXIgKnhmZXJzLAorCQkJCSAgICAgaW50IG54 ZmVycykKK3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRf bWFzdGVyKGRldik7CisJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNj X21hc3RlcihtKTsKKwlzdHJ1Y3QgYWRpX2kzY194ZmVyICp4ZmVyOworCWludCBpLCByZXQ7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspIHsKKwkJaWYgKHhmZXJzW2ldLmxlbiA+IFJF R19DTURfRklGT18wX0xFTl9NQVgpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYg KCFueGZlcnMpCisJCXJldHVybiAwOworCisJeGZlciA9IGFkaV9pM2NfbWFzdGVyX2FsbG9jX3hm ZXIobWFzdGVyLCBueGZlcnMpOworCWlmICgheGZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlm b3IgKGkgPSAwOyBpIDwgbnhmZXJzOyBpKyspIHsKKwkJc3RydWN0IGFkaV9pM2NfY21kICpjY21k ID0gJnhmZXItPmNtZHNbaV07CisKKwkJY2NtZC0+Y21kMCA9IFJFR19DTURfRklGT18wX0RFVl9B RERSKGRldi0+aW5mby5keW5fYWRkcik7CisKKwkJaWYgKHhmZXJzW2ldLnJudykgeworCQkJY2Nt ZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9STlc7CisJCQljY21kLT5yeF9idWYgPSB4ZmVyc1tp XS5kYXRhLmluOworCQkJY2NtZC0+cnhfbGVuID0geGZlcnNbaV0ubGVuOworCQl9IGVsc2Ugewor CQkJY2NtZC0+dHhfYnVmID0geGZlcnNbaV0uZGF0YS5vdXQ7CisJCQljY21kLT50eF9sZW4gPSB4 ZmVyc1tpXS5sZW47CisJCX0KKworCQljY21kLT5jbWQwIHw9IFJFR19DTURfRklGT18wX0xFTih4 ZmVyc1tpXS5sZW4pOworCisJCWlmIChpIDwgbnhmZXJzIC0gMSkKKwkJCWNjbWQtPmNtZDAgfD0g UkVHX0NNRF9GSUZPXzBfU1I7CisKKwkJaWYgKCFpKQorCQkJY2NtZC0+Y21kMCB8PSBSRUdfQ01E X0ZJRk9fMF9CQ0FTVDsKKwl9CisKKwlhZGlfaTNjX21hc3Rlcl9xdWV1ZV94ZmVyKG1hc3Rlciwg eGZlcik7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXItPmNvbXAsCisJ CQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkKKwkJYWRpX2kzY19tYXN0ZXJfdW5xdWV1ZV94 ZmVyKG1hc3RlciwgeGZlcik7CisKKwlyZXQgPSB4ZmVyLT5yZXQ7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnhmZXJzOyBpKyspCisJCXhmZXJzW2ldLmVyciA9IGFkaV9pM2NfY21kX2dldF9lcnIoJnhm ZXItPmNtZHNbaV0pOworCisJa2ZyZWUoeGZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1 Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgeworCXUxNiBpZDsKKwlzMTYgaWJpOworCXN0cnVjdCBp M2NfZ2VuZXJpY19pYmlfcG9vbCAqaWJpX3Bvb2w7Cit9OworCitzdGF0aWMgaW50IGFkaV9pM2Nf bWFzdGVyX2dldF9ycl9zbG90KHN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyLAorCQkJCSAg ICAgIHU4IGR5bl9hZGRyKQoreworCWlmICghbWFzdGVyLT5mcmVlX3JyX3Nsb3RzKQorCQlyZXR1 cm4gLUVOT1NQQzsKKworCXJldHVybiBmZnMobWFzdGVyLT5mcmVlX3JyX3Nsb3RzKSAtIDE7Cit9 CisKK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfcmVhdHRhY2hfaTNjX2RldihzdHJ1Y3QgaTNj X2Rldl9kZXNjICpkZXYsIHU4IGR5bl9hZGRyKQoreworCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRy b2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgYWRpX2kzY19tYXN0 ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOworCXU4IGFkZHI7CisKKwlhZGRyID0g ZGV2LT5pbmZvLmR5bl9hZGRyID8gZGV2LT5pbmZvLmR5bl9hZGRyIDogZGV2LT5pbmZvLnN0YXRp Y19hZGRyOworCisJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERSKGR5bl9hZGRyKSwgbWFzdGVyLT5y ZWdzICsgUkVHX0RFVl9DSEFSKTsKKwl3cml0ZWwoKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19E RVZfQ0hBUikgJgorCQl+UkVHX0RFVl9DSEFSX0lTX0FUVEFDSEVEKSB8IFJFR19ERVZfQ0hBUl9X RU4sCisJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7CisKKwl3cml0ZWwoUkVH X0RFVl9DSEFSX0FERFIoYWRkciksIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7CisJd3Jp dGVsKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUikgfAorCSAgICAgICBSRUdfREVW X0NIQVJfSVNfQVRUQUNIRUQgfCBSRUdfREVWX0NIQVJfV0VOLAorCSAgICAgICBtYXN0ZXItPnJl Z3MgKyBSRUdfREVWX0NIQVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRpX2kz Y19tYXN0ZXJfYXR0YWNoX2kzY19kZXYoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2KQoreworCXN0 cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXIgKm0gPSBpM2NfZGV2X2dldF9tYXN0ZXIoZGV2KTsK KwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOwor CXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsKKwlpbnQgc2xvdDsKKwl1OCBhZGRy OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk YXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNsb3QgPSBhZGlfaTNjX21hc3Rlcl9nZXRfcnJf c2xvdChtYXN0ZXIsIGRldi0+aW5mby5keW5fYWRkcik7CisJaWYgKHNsb3QgPCAwKSB7CisJCWtm cmVlKGRhdGEpOworCQlyZXR1cm4gc2xvdDsKKwl9CisKKwlkYXRhLT5pYmkgPSAtMTsKKwlkYXRh LT5pZCA9IHNsb3Q7CisJaTNjX2Rldl9zZXRfbWFzdGVyX2RhdGEoZGV2LCBkYXRhKTsKKwltYXN0 ZXItPmZyZWVfcnJfc2xvdHMgJj0gfkJJVChzbG90KTsKKworCWFkZHIgPSBkZXYtPmluZm8uZHlu X2FkZHIgPyBkZXYtPmluZm8uZHluX2FkZHIgOiBkZXYtPmluZm8uc3RhdGljX2FkZHI7CisKKwl3 cml0ZWwoUkVHX0RFVl9DSEFSX0FERFIoYWRkciksIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hB Uik7CisJd3JpdGVsKHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUikgfAorCSAgICAg ICBSRUdfREVWX0NIQVJfSVNfQVRUQUNIRUQgfCBSRUdfREVWX0NIQVJfV0VOLAorCSAgICAgICBt YXN0ZXItPnJlZ3MgKyBSRUdfREVWX0NIQVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGFkaV9pM2NfbWFzdGVyX3N5bmNfZGV2X2NoYXIoc3RydWN0IGkzY19tYXN0ZXJfY29udHJv bGxlciAqbSkKK3sKKwlzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2Nf bWFzdGVyKG0pOworCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKmkzY2RldjsKKwl1OCBhZGRyOworCisJ aTNjX2J1c19mb3JfZWFjaF9pM2NkZXYoJm0tPmJ1cywgaTNjZGV2KSB7CisJCWFkZHIgPSBpM2Nk ZXYtPmluZm8uZHluX2FkZHIgPworCQkgICAgICAgaTNjZGV2LT5pbmZvLmR5bl9hZGRyIDogaTNj ZGV2LT5pbmZvLnN0YXRpY19hZGRyOworCQl3cml0ZWwoUkVHX0RFVl9DSEFSX0FERFIoYWRkciks IG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7CisJCXdyaXRlbChyZWFkbChtYXN0ZXItPnJl Z3MgKyBSRUdfREVWX0NIQVIpIHwKKwkJICAgICAgIFJFR19ERVZfQ0hBUl9CQ1JfSUJJKGkzY2Rl di0+aW5mby5iY3IpIHwgUkVHX0RFVl9DSEFSX1dFTiwKKwkJICAgICAgIG1hc3Rlci0+cmVncyAr IFJFR19ERVZfQ0hBUik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9kZXRh Y2hfaTNjX2RldihzdHJ1Y3QgaTNjX2Rldl9kZXNjICpkZXYpCit7CisJc3RydWN0IGkzY19tYXN0 ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOworCXN0cnVjdCBhZGlf aTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7CisJc3RydWN0IGFkaV9p M2NfaTJjX2Rldl9kYXRhICpkYXRhID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKKwl1 OCBhZGRyOworCisJYWRkciA9IGRldi0+aW5mby5keW5fYWRkciA/IGRldi0+aW5mby5keW5fYWRk ciA6IGRldi0+aW5mby5zdGF0aWNfYWRkcjsKKworCXdyaXRlbChSRUdfREVWX0NIQVJfQUREUihh ZGRyKSwgbWFzdGVyLT5yZWdzICsgUkVHX0RFVl9DSEFSKTsKKwl3cml0ZWwoKHJlYWRsKG1hc3Rl ci0+cmVncyArIFJFR19ERVZfQ0hBUikgJgorCQl+UkVHX0RFVl9DSEFSX0lTX0FUVEFDSEVEKSB8 IFJFR19ERVZfQ0hBUl9XRU4sCisJICAgICAgIG1hc3Rlci0+cmVncyArIFJFR19ERVZfQ0hBUik7 CisKKwlpM2NfZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5VTEwpOworCW1hc3Rlci0+ZnJlZV9y cl9zbG90cyB8PSBCSVQoZGF0YS0+aWQpOworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgaW50 IGFkaV9pM2NfbWFzdGVyX2F0dGFjaF9pMmNfZGV2KHN0cnVjdCBpMmNfZGV2X2Rlc2MgKmRldikK K3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTJjX2Rldl9nZXRfbWFzdGVy KGRldik7CisJc3RydWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3Rl cihtKTsKKwlzdHJ1Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGE7CisJaW50IHNsb3Q7CisK KwlzbG90ID0gYWRpX2kzY19tYXN0ZXJfZ2V0X3JyX3Nsb3QobWFzdGVyLCAwKTsKKwlpZiAoc2xv dCA8IDApCisJCXJldHVybiBzbG90OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmlk ID0gc2xvdDsKKwltYXN0ZXItPmZyZWVfcnJfc2xvdHMgJj0gfkJJVChzbG90KTsKKwlpMmNfZGV2 X3NldF9tYXN0ZXJfZGF0YShkZXYsIGRhdGEpOworCisJd3JpdGVsKFJFR19ERVZfQ0hBUl9BRERS KGRldi0+YWRkcikgfAorCSAgICAgICBSRUdfREVWX0NIQVJfSVNfSTJDIHwgUkVHX0RFVl9DSEFS X0lTX0FUVEFDSEVEIHwgUkVHX0RFVl9DSEFSX1dFTiwKKwkgICAgICAgbWFzdGVyLT5yZWdzICsg UkVHX0RFVl9DSEFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21h c3Rlcl9kZXRhY2hfaTJjX2RldihzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYpCit7CisJc3RydWN0 IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkyY19kZXZfZ2V0X21hc3RlcihkZXYpOworCXN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7CisJc3Ry dWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhID0gaTJjX2Rldl9nZXRfbWFzdGVyX2RhdGEo ZGV2KTsKKworCXdyaXRlbChSRUdfREVWX0NIQVJfQUREUihkZXYtPmFkZHIpIHwKKwkgICAgICAg UkVHX0RFVl9DSEFSX0lTX0kyQyB8IFJFR19ERVZfQ0hBUl9XRU4sCisJICAgICAgIG1hc3Rlci0+ cmVncyArIFJFR19ERVZfQ0hBUik7CisKKwlpMmNfZGV2X3NldF9tYXN0ZXJfZGF0YShkZXYsIE5V TEwpOworCW1hc3Rlci0+ZnJlZV9ycl9zbG90cyB8PSBCSVQoZGF0YS0+aWQpOworCWtmcmVlKGRh dGEpOworfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9idXNfY2xlYW51cChzdHJ1Y3Qg aTNjX21hc3Rlcl9jb250cm9sbGVyICptKQoreworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFz dGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7CisKKwlhZGlfaTNjX21hc3Rlcl9kaXNhYmxlKG1h c3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX3VwZF9pM2Nfc2NsX2xpbShz dHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlcikKK3sKKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250 cm9sbGVyICptID0gJm1hc3Rlci0+YmFzZTsKKwlzdHJ1Y3QgaTNjX2J1cyAqYnVzID0gaTNjX21h c3Rlcl9nZXRfYnVzKG0pOworCXU4IGkzY19zY2xfbGltID0gMDsKKwlzdHJ1Y3QgaTNjX2Rldl9k ZXNjICpkZXY7CisJdTggcHBfc2c7CisKKwlpM2NfYnVzX2Zvcl9lYWNoX2kzY2RldihidXMsIGRl dikgeworCQl1OCBtYXhfZnNjbDsKKworCQltYXhfZnNjbCA9IG1heChJM0NfQ0NDX01BWF9TRFJf RlNDTChkZXYtPmluZm8ubWF4X3JlYWRfZHMpLAorCQkJICAgICAgIEkzQ19DQ0NfTUFYX1NEUl9G U0NMKGRldi0+aW5mby5tYXhfd3JpdGVfZHMpKTsKKworCQlzd2l0Y2ggKG1heF9mc2NsKSB7CisJ CWNhc2UgSTNDX1NEUjFfRlNDTF84TUhaOgorCQkJbWF4X2ZzY2wgPSBQUF9TR182TUhaOworCQkJ YnJlYWs7CisJCWNhc2UgSTNDX1NEUjJfRlNDTF82TUhaOgorCQkJbWF4X2ZzY2wgPSBQUF9TR18z TUhaOworCQkJYnJlYWs7CisJCWNhc2UgSTNDX1NEUjNfRlNDTF80TUhaOgorCQkJbWF4X2ZzY2wg PSBQUF9TR18zTUhaOworCQkJYnJlYWs7CisJCWNhc2UgSTNDX1NEUjRfRlNDTF8yTUhaOgorCQkJ bWF4X2ZzY2wgPSBQUF9TR18xTUhaOworCQkJYnJlYWs7CisJCWNhc2UgSTNDX1NEUjBfRlNDTF9N QVg6CisJCWRlZmF1bHQ6CisJCQltYXhfZnNjbCA9IFBQX1NHXzEyTUhaOworCQkJYnJlYWs7CisJ CX0KKworCQlpZiAobWF4X2ZzY2wgJiYKKwkJICAgIChpM2Nfc2NsX2xpbSA+IG1heF9mc2NsIHx8 ICFpM2Nfc2NsX2xpbSkpCisJCQlpM2Nfc2NsX2xpbSA9IG1heF9mc2NsOworCX0KKworCWlmICgh aTNjX3NjbF9saW0pCisJCXJldHVybjsKKworCW1hc3Rlci0+aTNjX3NjbF9saW0gPSBpM2Nfc2Ns X2xpbSAtIDE7CisKKwlwcF9zZyA9IHJlYWRsKG1hc3Rlci0+cmVncyArIFJFR19PUFMpICYgflJF R19PUFNfUFBfU0dfTUFTSzsKKwlwcF9zZyB8PSBSRUdfT1BTX1NFVF9TRyhtYXN0ZXItPmkzY19z Y2xfbGltKTsKKworCXdyaXRlbChwcF9zZywgbWFzdGVyLT5yZWdzICsgUkVHX09QUyk7Cit9CisK K3N0YXRpYyB2b2lkIGFkaV9pM2NfbWFzdGVyX2dldF9mZWF0dXJlcyhzdHJ1Y3QgYWRpX2kzY19t YXN0ZXIgKm1hc3RlciwKKwkJCQkJdW5zaWduZWQgaW50IHNsb3QsCisJCQkJCXN0cnVjdCBpM2Nf ZGV2aWNlX2luZm8gKmluZm8pCit7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwor CisJaW5mby0+ZHluX2FkZHIgPSAweDMxOworCWluZm8tPmRjciA9IDB4MDA7CisJaW5mby0+YmNy ID0gMHg0MDsKKwlpbmZvLT5waWQgPSAwOworfQorCitzdGF0aWMgaW50IGFkaV9pM2NfbWFzdGVy X2RvX2RhYShzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptKQoreworCXN0cnVjdCBhZGlf aTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7CisJdTMyIGlycV9tYXNr OworCWludCByZXQsIGFkZHI7CisKKwlhZGRyID0gMHg4OworCWZvciAodTggaSA9IDA7IGkgPCBN QVhfREVWUzsgaSsrKSB7CisJCWFkZHIgPSBpM2NfbWFzdGVyX2dldF9mcmVlX2FkZHIobSwgYWRk cik7CisJCWlmIChhZGRyIDwgMCkKKwkJCXJldHVybiBhZGRyOworCQltYXN0ZXItPmRhYS5hZGRy c1tpXSA9IGFkZHI7CisJfQorCisJaXJxX21hc2sgPSByZWFkbChtYXN0ZXItPnJlZ3MgKyBSRUdf SVJRX01BU0spOworCXdyaXRlbChpcnFfbWFzayB8IFJFR19JUlFfUEVESU5HX0RBQSwKKwkgICAg ICAgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKKworCW1hc3Rlci0+ZGFhLmluZGV4ID0g MDsKKwlyZXQgPSBpM2NfbWFzdGVyX2VudGRhYV9sb2NrZWQoJm1hc3Rlci0+YmFzZSk7CisKKwl3 cml0ZWwoaXJxX21hc2ssIG1hc3Rlci0+cmVncyArIFJFR19JUlFfTUFTSyk7CisKKwkvKiBEQUEg YWx3YXlzIGZpbmlzaGVzIHdpdGggQ0UyX0VSUk9SIG9yIE5BQ0tfUkVTUCAqLworCWlmIChyZXQg JiYgcmV0ICE9IEkzQ19FUlJPUl9NMikKKwkJcmV0dXJuIHJldDsKKworCS8qIEFkZCBJM0MgZGV2 aWNlcyBkaXNjb3ZlcmVkICovCisJZm9yICh1OCBpID0gMDsgaSA8IG1hc3Rlci0+ZGFhLmluZGV4 OyBpKyspCisJCWkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKG0sIG1hc3Rlci0+ZGFhLmFk ZHJzW2ldKTsKKwkvKiBTeW5jIHJldHJpZXZlZCBkZXZzIGluZm8gd2l0aCB0aGUgSVAgKi8KKwlh ZGlfaTNjX21hc3Rlcl9zeW5jX2Rldl9jaGFyKG0pOworCisJaTNjX21hc3Rlcl9kZWZzbHZzX2xv Y2tlZCgmbWFzdGVyLT5iYXNlKTsKKworCWFkaV9pM2NfbWFzdGVyX3VwZF9pM2Nfc2NsX2xpbSht YXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfYnVz X2luaXQoc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSkKK3sKKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlciA9IHRvX2FkaV9pM2NfbWFzdGVyKG0pOworCXN0cnVjdCBpM2NfZGV2 aWNlX2luZm8gaW5mbyA9IHsgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTNjX21hc3Rlcl9nZXRf ZnJlZV9hZGRyKG0sIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWRpX2kz Y19tYXN0ZXJfZ2V0X2ZlYXR1cmVzKG1hc3RlciwgMCwgJmluZm8pOworCXJldCA9IGkzY19tYXN0 ZXJfc2V0X2luZm8oJm1hc3Rlci0+YmFzZSwgJmluZm8pOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwl3cml0ZWwoUkVHX0lCSV9DT05GSUdfTElTVEVOLAorCSAgICAgICBtYXN0ZXItPnJl Z3MgKyBSRUdfSUJJX0NPTkZJRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRp X2kzY19tYXN0ZXJfaGFuZGxlX2liaShzdHJ1Y3QgYWRpX2kzY19tYXN0ZXIgKm1hc3RlciwKKwkJ CQkgICAgICB1MzIgaWJpKQoreworCXN0cnVjdCBhZGlfaTNjX2kyY19kZXZfZGF0YSAqZGF0YTsK KwlzdHJ1Y3QgaTNjX2liaV9zbG90ICpzbG90OworCXN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldjsK Kwl1OCBkYSwgaWQ7CisJdTggKm1kYjsKKworCWRhID0gKGliaSA+PiAxNykgJiBHRU5NQVNLKDYs IDApOworCWZvciAoaWQgPSAwOyBpZCA8IG1hc3Rlci0+aWJpLm51bV9zbG90czsgaWQrKykgewor CQlpZiAobWFzdGVyLT5pYmkuc2xvdHNbaWRdICYmCisJCSAgICBtYXN0ZXItPmliaS5zbG90c1tp ZF0tPmluZm8uZHluX2FkZHIgPT0gZGEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaWQgPT0gbWFz dGVyLT5pYmkubnVtX3Nsb3RzKQorCQlyZXR1cm47CisKKwlkZXYgPSBtYXN0ZXItPmliaS5zbG90 c1tpZF07CisJZ3VhcmQoc3BpbmxvY2spKCZtYXN0ZXItPmliaS5sb2NrKTsKKworCWRhdGEgPSBp M2NfZGV2X2dldF9tYXN0ZXJfZGF0YShkZXYpOworCXNsb3QgPSBpM2NfZ2VuZXJpY19pYmlfZ2V0 X2ZyZWVfc2xvdChkYXRhLT5pYmlfcG9vbCk7CisJaWYgKCFzbG90KQorCQlyZXR1cm47CisKKwlt ZGIgPSBzbG90LT5kYXRhOworCW1kYlswXSA9IChpYmkgPj4gOCkgJiBHRU5NQVNLKDcsIDApOwor CisJc2xvdC0+bGVuID0gMTsKKwlpM2NfbWFzdGVyX3F1ZXVlX2liaShkZXYsIHNsb3QpOworfQor CitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9kZW11eF9pYmlzKHN0cnVjdCBhZGlfaTNjX21h c3RlciAqbWFzdGVyKQoreworCXUzMiBzdGF0dXMwOworCisJZm9yIChzdGF0dXMwID0gcmVhZGwo bWFzdGVyLT5yZWdzICsgUkVHX0ZJRk9fU1RBVFVTKTsKKwkgICAgICEoc3RhdHVzMCAmIFJFR19G SUZPX1NUQVRVU19JQklfRU1QVFkpOworCSAgICAgc3RhdHVzMCA9IHJlYWRsKG1hc3Rlci0+cmVn cyArIFJFR19GSUZPX1NUQVRVUykpIHsKKwkJdTMyIGliaSA9IHJlYWRsKG1hc3Rlci0+cmVncyAr IFJFR19JQklfRklGTyk7CisKKwkJYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2liaShtYXN0ZXIsIGli aSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9oYW5kbGVfZGFfcmVxKHN0 cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyKQoreworCXU4IHBheWxvYWQwWzhdOworCXUzMiBh ZGRyOworCisJLyogQ2xlYXIgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyAqLworCWFkaV9pM2NfbWFz dGVyX3JkX2Zyb21fcnhfZmlmbyhtYXN0ZXIsIHBheWxvYWQwLCA2KTsKKwlhZGRyID0gbWFzdGVy LT5kYWEuYWRkcnNbbWFzdGVyLT5kYWEuaW5kZXgrK107CisJYWRkciA9IChhZGRyIDw8IDEpIHwg KHBhcml0eTgoYWRkcikgPyAwIDogMSk7CisKKwl3cml0ZWwoYWRkciwgbWFzdGVyLT5yZWdzICsg UkVHX1NET19GSUZPKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFkaV9pM2NfbWFzdGVyX2ly cShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVy ID0gZGF0YTsKKwl1MzIgcGVuZGluZzsKKworCXBlbmRpbmcgPSByZWFkbF9yZWxheGVkKG1hc3Rl ci0+cmVncyArIFJFR19JUlFfUEVORElORyk7CisJd3JpdGVsX3JlbGF4ZWQocGVuZGluZywgbWFz dGVyLT5yZWdzICsgUkVHX0lSUV9QRU5ESU5HKTsKKwlpZiAocGVuZGluZyAmIFJFR19JUlFfUEVE SU5HX0NNRFIpIHsKKwkJc3Bpbl9sb2NrKCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKTsKKwkJYWRp X2kzY19tYXN0ZXJfZW5kX3hmZXJfbG9ja2VkKG1hc3RlciwgcGVuZGluZyk7CisJCXNwaW5fdW5s b2NrKCZtYXN0ZXItPnhmZXJxdWV1ZS5sb2NrKTsKKwl9CisJaWYgKHBlbmRpbmcgJiBSRUdfSVJR X1BFRElOR19JQkkpCisJCWFkaV9pM2NfbWFzdGVyX2RlbXV4X2liaXMobWFzdGVyKTsKKwlpZiAo cGVuZGluZyAmIFJFR19JUlFfUEVESU5HX0RBQSkKKwkJYWRpX2kzY19tYXN0ZXJfaGFuZGxlX2Rh X3JlcShtYXN0ZXIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGFk aV9pM2NfbWFzdGVyX2kyY194ZmVycyhzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYsCisJCQkJICAg IHN0cnVjdCBpMmNfbXNnICp4ZmVycywKKwkJCQkgICAgaW50IG54ZmVycykKK3sKKwlzdHJ1Y3Qg aTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTJjX2Rldl9nZXRfbWFzdGVyKGRldik7CisJc3Ry dWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKKwlzdHJ1 Y3QgYWRpX2kzY194ZmVyICp4ZmVyOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwg bnhmZXJzOyBpKyspIHsKKwkJaWYgKHhmZXJzW2ldLmxlbiA+IFJFR19DTURfRklGT18wX0xFTl9N QVgpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWlmICh4ZmVyc1tpXS5mbGFncyAmIEkyQ19N X1RFTikKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAoIW54ZmVycykKKwkJcmV0 dXJuIDA7CisKKwl4ZmVyID0gYWRpX2kzY19tYXN0ZXJfYWxsb2NfeGZlcihtYXN0ZXIsIG54ZmVy cyk7CisJaWYgKCF4ZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBu eGZlcnM7IGkrKykgeworCQlzdHJ1Y3QgYWRpX2kzY19jbWQgKmNjbWQgPSAmeGZlci0+Y21kc1tp XTsKKworCQljY21kLT5jbWQwID0gUkVHX0NNRF9GSUZPXzBfREVWX0FERFIoeGZlcnNbaV0uYWRk cik7CisKKwkJaWYgKHhmZXJzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCWNjbWQtPmNtZDAg fD0gUkVHX0NNRF9GSUZPXzBfUk5XOworCQkJY2NtZC0+cnhfYnVmID0geGZlcnNbaV0uYnVmOwor CQkJY2NtZC0+cnhfbGVuID0geGZlcnNbaV0ubGVuOworCQl9IGVsc2UgeworCQkJY2NtZC0+dHhf YnVmID0geGZlcnNbaV0uYnVmOworCQkJY2NtZC0+dHhfbGVuID0geGZlcnNbaV0ubGVuOworCQl9 CisKKwkJY2NtZC0+Y21kMCB8PSBSRUdfQ01EX0ZJRk9fMF9MRU4oeGZlcnNbaV0ubGVuKTsKKwl9 CisKKwlhZGlfaTNjX21hc3Rlcl9xdWV1ZV94ZmVyKG1hc3RlciwgeGZlcik7CisJaWYgKCF3YWl0 X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnhmZXItPmNvbXAsCisJCQkJCSBtc2Vjc190b19qaWZm aWVzKDEwMDApKSkKKwkJYWRpX2kzY19tYXN0ZXJfdW5xdWV1ZV94ZmVyKG1hc3RlciwgeGZlcik7 CisKKwlyZXQgPSB4ZmVyLT5yZXQ7CisJa2ZyZWUoeGZlcik7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBhZGlfaTNjX21hc3Rlcl9kaXNhYmxlX2liaShzdHJ1Y3QgaTNjX2Rldl9kZXNj ICpkZXYpCit7CisJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0 X21hc3RlcihkZXYpOworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kz Y19tYXN0ZXIobSk7CisJc3RydWN0IGkzY19kZXZfZGVzYyAqaTNjZGV2OworCXUzMiBlbmFibGVk ID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gaTNjX21hc3Rlcl9kaXNlY19sb2NrZWQobSwgZGV2 LT5pbmZvLmR5bl9hZGRyLAorCQkJCSAgICAgIEkzQ19DQ0NfRVZFTlRfU0lSKTsKKworCWkzY19i dXNfZm9yX2VhY2hfaTNjZGV2KCZtLT5idXMsIGkzY2RldikgeworCQlpZiAoZGV2ICE9IGkzY2Rl diAmJiBpM2NkZXYtPmliaSkKKwkJCWVuYWJsZWQgfD0gaTNjZGV2LT5pYmktPmVuYWJsZWQ7CisJ fQorCWlmICghZW5hYmxlZCkgeworCQl3cml0ZWwoUkVHX0lCSV9DT05GSUdfTElTVEVOLAorCQkg ICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lCSV9DT05GSUcpOworCQl3cml0ZWwocmVhZGwobWFz dGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKSAmIH5SRUdfSVJRX1BFRElOR19JQkksCisJCSAgICAg ICBtYXN0ZXItPnJlZ3MgKyBSRUdfSVJRX01BU0spOworCX0KKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfZW5hYmxlX2liaShzdHJ1Y3QgaTNjX2Rldl9kZXNj ICpkZXYpCit7CisJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAqbSA9IGkzY19kZXZfZ2V0 X21hc3RlcihkZXYpOworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gdG9fYWRpX2kz Y19tYXN0ZXIobSk7CisKKwl3cml0ZWwoUkVHX0lCSV9DT05GSUdfTElTVEVOIHwgUkVHX0lCSV9D T05GSUdfRU5BQkxFLAorCSAgICAgICBtYXN0ZXItPnJlZ3MgKyBSRUdfSUJJX0NPTkZJRyk7CisK Kwl3cml0ZWwocmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKSB8IFJFR19JUlFfUEVE SU5HX0lCSSwKKwkgICAgICAgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKKworCXJldHVy biBpM2NfbWFzdGVyX2VuZWNfbG9ja2VkKG0sIGRldi0+aW5mby5keW5fYWRkciwKKwkJCQkgICAg ICBJM0NfQ0NDX0VWRU5UX1NJUik7Cit9CisKK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0ZXJfcmVx dWVzdF9pYmkoc3RydWN0IGkzY19kZXZfZGVzYyAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVj dCBpM2NfaWJpX3NldHVwICpyZXEpCit7CisJc3RydWN0IGkzY19tYXN0ZXJfY29udHJvbGxlciAq bSA9IGkzY19kZXZfZ2V0X21hc3RlcihkZXYpOworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFz dGVyID0gdG9fYWRpX2kzY19tYXN0ZXIobSk7CisJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRh ICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGk7CisKKwlkYXRh ID0gaTNjX2Rldl9nZXRfbWFzdGVyX2RhdGEoZGV2KTsKKwlkYXRhLT5pYmlfcG9vbCA9IGkzY19n ZW5lcmljX2liaV9hbGxvY19wb29sKGRldiwgcmVxKTsKKwlpZiAoSVNfRVJSKGRhdGEtPmliaV9w b29sKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YS0+aWJpX3Bvb2wpOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJm1hc3Rlci0+aWJpLmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVy LT5pYmkubnVtX3Nsb3RzOyBpKyspIHsKKwkJaWYgKCFtYXN0ZXItPmliaS5zbG90c1tpXSkgewor CQkJZGF0YS0+aWJpID0gaTsKKwkJCW1hc3Rlci0+aWJpLnNsb3RzW2ldID0gZGV2OworCQkJYnJl YWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5pYmkubG9jaywg ZmxhZ3MpOworCisJaWYgKGkgPCBtYXN0ZXItPmliaS5udW1fc2xvdHMpCisJCXJldHVybiAwOwor CisJaTNjX2dlbmVyaWNfaWJpX2ZyZWVfcG9vbChkYXRhLT5pYmlfcG9vbCk7CisJZGF0YS0+aWJp X3Bvb2wgPSBOVUxMOworCisJcmV0dXJuIC1FTk9TUEM7Cit9CisKK3N0YXRpYyB2b2lkIGFkaV9p M2NfbWFzdGVyX2ZyZWVfaWJpKHN0cnVjdCBpM2NfZGV2X2Rlc2MgKmRldikKK3sKKwlzdHJ1Y3Qg aTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7CisJc3Ry dWN0IGFkaV9pM2NfbWFzdGVyICptYXN0ZXIgPSB0b19hZGlfaTNjX21hc3RlcihtKTsKKwlzdHJ1 Y3QgYWRpX2kzY19pMmNfZGV2X2RhdGEgKmRhdGEgPSBpM2NfZGV2X2dldF9tYXN0ZXJfZGF0YShk ZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVy LT5pYmkubG9jaywgZmxhZ3MpOworCW1hc3Rlci0+aWJpLnNsb3RzW2RhdGEtPmliaV0gPSBOVUxM OworCWRhdGEtPmliaSA9IC0xOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+aWJp LmxvY2ssIGZsYWdzKTsKKworCWkzY19nZW5lcmljX2liaV9mcmVlX3Bvb2woZGF0YS0+aWJpX3Bv b2wpOworfQorCitzdGF0aWMgdm9pZCBhZGlfaTNjX21hc3Rlcl9yZWN5Y2xlX2liaV9zbG90KHN0 cnVjdCBpM2NfZGV2X2Rlc2MgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBpM2NfaWJpX3Nsb3QgKnNs b3QpCit7CisJc3RydWN0IGFkaV9pM2NfaTJjX2Rldl9kYXRhICpkYXRhID0gaTNjX2Rldl9nZXRf bWFzdGVyX2RhdGEoZGV2KTsKKworCWkzY19nZW5lcmljX2liaV9yZWN5Y2xlX3Nsb3QoZGF0YS0+ aWJpX3Bvb2wsIHNsb3QpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkzY19tYXN0ZXJfY29u dHJvbGxlcl9vcHMgYWRpX2kzY19tYXN0ZXJfb3BzID0geworCS5idXNfaW5pdCA9IGFkaV9pM2Nf bWFzdGVyX2J1c19pbml0LAorCS5idXNfY2xlYW51cCA9IGFkaV9pM2NfbWFzdGVyX2J1c19jbGVh bnVwLAorCS5hdHRhY2hfaTNjX2RldiA9IGFkaV9pM2NfbWFzdGVyX2F0dGFjaF9pM2NfZGV2LAor CS5yZWF0dGFjaF9pM2NfZGV2ID0gYWRpX2kzY19tYXN0ZXJfcmVhdHRhY2hfaTNjX2RldiwKKwku ZGV0YWNoX2kzY19kZXYgPSBhZGlfaTNjX21hc3Rlcl9kZXRhY2hfaTNjX2RldiwKKwkuYXR0YWNo X2kyY19kZXYgPSBhZGlfaTNjX21hc3Rlcl9hdHRhY2hfaTJjX2RldiwKKwkuZGV0YWNoX2kyY19k ZXYgPSBhZGlfaTNjX21hc3Rlcl9kZXRhY2hfaTJjX2RldiwKKwkuZG9fZGFhID0gYWRpX2kzY19t YXN0ZXJfZG9fZGFhLAorCS5zdXBwb3J0c19jY2NfY21kID0gYWRpX2kzY19tYXN0ZXJfc3VwcG9y dHNfY2NjX2NtZCwKKwkuc2VuZF9jY2NfY21kID0gYWRpX2kzY19tYXN0ZXJfc2VuZF9jY2NfY21k LAorCS5wcml2X3hmZXJzID0gYWRpX2kzY19tYXN0ZXJfcHJpdl94ZmVycywKKwkuaTJjX3hmZXJz ID0gYWRpX2kzY19tYXN0ZXJfaTJjX3hmZXJzLAorCS5yZXF1ZXN0X2liaSA9IGFkaV9pM2NfbWFz dGVyX3JlcXVlc3RfaWJpLAorCS5lbmFibGVfaWJpID0gYWRpX2kzY19tYXN0ZXJfZW5hYmxlX2li aSwKKwkuZGlzYWJsZV9pYmkgPSBhZGlfaTNjX21hc3Rlcl9kaXNhYmxlX2liaSwKKwkuZnJlZV9p YmkgPSBhZGlfaTNjX21hc3Rlcl9mcmVlX2liaSwKKwkucmVjeWNsZV9pYmlfc2xvdCA9IGFkaV9p M2NfbWFzdGVyX3JlY3ljbGVfaWJpX3Nsb3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBhZGlfaTNjX21hc3Rlcl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUg PSAiYWRpLGkzYy1tYXN0ZXIiIH0sCisJe30KK307CisKK3N0YXRpYyBpbnQgYWRpX2kzY19tYXN0 ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRpX2kz Y19tYXN0ZXIgKm1hc3RlcjsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwlpbnQgcmV0LCBpcnE7 CisKKwltYXN0ZXIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptYXN0ZXIpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYXN0ZXIt PnJlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElT X0VSUihtYXN0ZXItPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihtYXN0ZXItPnJlZ3MpOworCisJ bWFzdGVyLT5jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZCgmcGRldi0+ZGV2LCAiYXhpIik7CisJ aWYgKElTX0VSUihtYXN0ZXItPmNsaykpCisJCXJldHVybiBQVFJfRVJSKG1hc3Rlci0+Y2xrKTsK KworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJl dHVybiBpcnE7CisKKwl2ZXJzaW9uID0gcmVhZGwobWFzdGVyLT5yZWdzICsgUkVHX1ZFUlNJT04p OworCWlmIChWRVJTSU9OX01BSk9SKHZlcnNpb24pICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAiVW5zdXBwb3J0ZWQgSVAgdmVyc2lvbiAldS4ldS4lY1xuIiwKKwkJCVZFUlNJT05fTUFK T1IodmVyc2lvbiksCisJCQlWRVJTSU9OX01JTk9SKHZlcnNpb24pLAorCQkJVkVSU0lPTl9QQVRD SCh2ZXJzaW9uKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbCgweDAwLCBtYXN0 ZXItPnJlZ3MgKyBSRUdfRU5BQkxFKTsKKwl3cml0ZWwoMHgwMCwgbWFzdGVyLT5yZWdzICsgUkVH X0lSUV9NQVNLKTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBh ZGlfaTNjX21hc3Rlcl9pcnEsIDAsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIG1h c3Rlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIG1hc3Rlcik7CisKKwltYXN0ZXItPm1heGRldnMgPSBNQVhfREVWUzsKKwltYXN0ZXIt PmZyZWVfcnJfc2xvdHMgPSBHRU5NQVNLKG1hc3Rlci0+bWF4ZGV2cywgMSk7CisKKwl3cml0ZWwo UkVHX0lSUV9QRURJTkdfQ01EUiwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKKworCXNw aW5fbG9ja19pbml0KCZtYXN0ZXItPmliaS5sb2NrKTsKKwltYXN0ZXItPmliaS5udW1fc2xvdHMg PSAxNTsKKwltYXN0ZXItPmliaS5zbG90cyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBtYXN0 ZXItPmliaS5udW1fc2xvdHMsCisJCQkJCSBzaXplb2YoKm1hc3Rlci0+aWJpLnNsb3RzKSwKKwkJ CQkJIEdGUF9LRVJORUwpOworCWlmICghbWFzdGVyLT5pYmkuc2xvdHMpCisJCXJldHVybiAtRU5P TUVNOworCisJcmV0dXJuIGkzY19tYXN0ZXJfcmVnaXN0ZXIoJm1hc3Rlci0+YmFzZSwgJnBkZXYt PmRldiwKKwkJCQkgICAmYWRpX2kzY19tYXN0ZXJfb3BzLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2 b2lkIGFkaV9pM2NfbWFzdGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBhZGlfaTNjX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7CisKKwl3cml0ZWwoMHhmZiwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9QRU5ESU5HKTsK Kwl3cml0ZWwoMHgwMCwgbWFzdGVyLT5yZWdzICsgUkVHX0lSUV9NQVNLKTsKKwl3cml0ZWwoMHgw MSwgbWFzdGVyLT5yZWdzICsgUkVHX0VOQUJMRSk7CisKKwlpM2NfbWFzdGVyX3VucmVnaXN0ZXIo Jm1hc3Rlci0+YmFzZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkaV9p M2NfbWFzdGVyID0geworCS5wcm9iZSA9IGFkaV9pM2NfbWFzdGVyX3Byb2JlLAorCS5yZW1vdmUg PSBhZGlfaTNjX21hc3Rlcl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWRpLWkz Yy1tYXN0ZXIiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBhZGlfaTNjX21hc3Rlcl9vZl9tYXRjaCwK Kwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWRpX2kzY19tYXN0ZXIpOworCitNT0RV TEVfQVVUSE9SKCJKb3JnZSBNYXJxdWVzIDxqb3JnZS5tYXJxdWVzQGFuYWxvZy5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEkzQyBtYXN0ZXIgZHJpdmVyIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CgotLSAKMi40My4wCgoKLS0gCmxpbnV4LWkzYyBtYWlsaW5n IGxpc3QKbGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK