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 1C150C6379F for ; Fri, 17 Feb 2023 15:07:15 +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=9FniUiAYV3y/tdOW5vKbbx5+XzeaPWMJ1g546xFp+Z4=; b=x0avjAU+i3gv40 VSMWGJ2fE6a+gZGS6f49guqr5Lxp9I/Mk22u97E8eGh5YT8Ydk+ybcyBGFnzn0oTIBjtCcZjNmnSC 2bmcWhSsi9On9Sqd6NLi+3g2YoZu+JVyvNy0UoKgjapduZOvF2A7+cgUSah5XK+G10RQtqhcC1qru 7EblI43jhM/l6o5Ve5CBAXFCtKG+qXz4yg7bltk2YC/ZTIgdyLVCz0N1aj0kQwIj4WYyddTM4gzp4 4rzXC8tYaDVjpDBZx4O4MAnkMkkFnjUIKhHZnkKaJONx1BcUU07pjr92dMpBLSHW84GVLVP834FHK 6IwZBSWhFNCrQIU/8yVA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pT2J2-00EjyG-LI; Fri, 17 Feb 2023 15:05:49 +0000 Received: from relay8-d.mail.gandi.net ([2001:4b98:dc4:8::228]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pT2Ah-00EfI2-P2 for linux-arm-kernel@lists.infradead.org; Fri, 17 Feb 2023 14:57:18 +0000 Received: (Authenticated sender: herve.codina@bootlin.com) by mail.gandi.net (Postfix) with ESMTPA id 4C06D1BF20D; Fri, 17 Feb 2023 14:57:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1676645830; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iGbw5VWb9pOUdXidnuoej79Y2m/jWTBSJO90kAAnSTI=; b=hD9Sc03oWgczCGMoWaQMEUVyKTiu8IMNkB1bH6ovxV2VgmhpNbDrZ0AP20Fb6evj7Pf8L+ Kv/uaMcYxb1pORYwkUA0+fas9AN+NyRBJ+gpaXP9ORwb5SGQ8Gwad2ZAdxYnqsYp+pejtD CB7ab2C+Kr2tDIFir3Yayi0KWunUifDabK6yIBCVqoVqHtxJcUHYahfWwarv9FaIXF/BAo aRTmdcY+C6nMQbsRHBpau3PL3o0owrNAkWpYGTEHP/Mg9xzbNljR5Inp9lzeG598nsNnkM bQxljEMbSnFxWfs0WTyyMP0826meBh/dqJXzBKkZ3rhZ2whLoD+87H8JwUPxxg== From: Herve Codina To: Herve Codina , Li Yang , Rob Herring , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Christophe Leroy , Michael Ellerman , Nicholas Piggin , Qiang Zhao , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen Cc: linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, Thomas Petazzoni Subject: [PATCH v6 06/10] soc: fsl: cpm1: Add support for QMC Date: Fri, 17 Feb 2023 15:56:41 +0100 Message-Id: <20230217145645.1768659-7-herve.codina@bootlin.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230217145645.1768659-1-herve.codina@bootlin.com> References: <20230217145645.1768659-1-herve.codina@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230217_065712_359656_D60B9627 X-CRM114-Status: GOOD ( 26.36 ) 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 VGhlIFFNQyAoUVVJQ0MgTXVsdGljaGFubmVsIENvbnRyb2xsZXIpIGVtdWxhdGVzIHVwIHRvIDY0 CmNoYW5uZWxzIHdpdGhpbiBvbmUgc2VyaWFsIGNvbnRyb2xsZXIgdXNpbmcgdGhlIHNhbWUgVERN CnBoeXNpY2FsIGludGVyZmFjZSByb3V0ZWQgZnJvbSB0aGUgVFNBLgoKSXQgaXMgYXZhaWxhYmxl IGluIHNvbWUJUG93ZXJRVUlDQyBTb0Mgc3VjaCBhcyB0aGUKTVBDODg1IG9yIE1QQzg2Ni4KCkl0 IGlzIGFsc28gYXZhaWxhYmxlIG9uIHNvbWUgUXVpY2MgRW5naW5lIFNvQ3MuClRoaXMgY3VycmVu dCB2ZXJzaW9uIHN1cHBvcnQgQ1BNMSBTb0NzIG9ubHkgYW5kIHNvbWUKZW5oYW5jZW1lbnQgYXJl IG5lZWRlZCB0byBzdXBwb3J0IFF1aWNjIEVuZ2luZSBTb0NzLgoKU2lnbmVkLW9mZi1ieTogSGVy dmUgQ29kaW5hIDxoZXJ2ZS5jb2RpbmFAYm9vdGxpbi5jb20+CkFja2VkLWJ5OiBMaSBZYW5nIDxs ZW95YW5nLmxpQG54cC5jb20+Ci0tLQogZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcgIHwgICAx MiArCiBkcml2ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMvc29jL2Zz bC9xZS9xbWMuYyAgICB8IDE1MzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGluY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaCAgICB8ICAgNzEgKysKIDQgZmlsZXMgY2hhbmdlZCwg MTYxNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvZnNsL3Fl L3FtYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zb2MvZnNsL3FlL3FtYy5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcgYi9kcml2ZXJzL3NvYy9mc2wvcWUv S2NvbmZpZwppbmRleCBiMDA4ODQ5NWMzMjMuLmY5MGNmZGYwYzc2MyAxMDA2NDQKLS0tIGEvZHJp dmVycy9zb2MvZnNsL3FlL0tjb25maWcKKysrIGIvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcK QEAgLTQ0LDYgKzQ0LDE4IEBAIGNvbmZpZyBDUE1fVFNBCiAJICBUaGlzIG9wdGlvbiBlbmFibGVz IHN1cHBvcnQgZm9yIHRoaXMKIAkgIGNvbnRyb2xsZXIKIAorY29uZmlnIENQTV9RTUMKKwl0cmlz dGF0ZSAiQ1BNIFFNQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNCisJZGVw ZW5kcyBvbiBDUE0xIHx8IChTT0NfRlNMICYmIENPTVBJTEVfVEVTVCkKKwlkZXBlbmRzIG9uIENQ TV9UU0EKKwloZWxwCisJICBGcmVlc2NhbGUgQ1BNIFFVSUNDIE11bHRpY2hhbm5lbCBDb250cm9s bGVyCisJICAoUU1DKQorCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoaXMK KwkgIGNvbnRyb2xsZXIKKwogY29uZmlnIFFFX1RETQogCWJvb2wKIAlkZWZhdWx0IHkgaWYgRlNM X1VDQ19IRExDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUgYi9kcml2 ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUKaW5kZXggNDVjOTYxYWNjODFiLi5lYzg1MDZlMTMxMTMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL2ZzbC9xZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Nv Yy9mc2wvcWUvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfUVVJQ0NfRU5H SU5FKSs9IHFlLm8gcWVfY29tbW9uLm8gcWVfaWMubyBxZV9pby5vCiBvYmotJChDT05GSUdfQ1BN KQkrPSBxZV9jb21tb24ubwogb2JqLSQoQ09ORklHX0NQTV9UU0EpCSs9IHRzYS5vCitvYmotJChD T05GSUdfQ1BNX1FNQykJKz0gcW1jLm8KIG9iai0kKENPTkZJR19VQ0MpCSs9IHVjYy5vCiBvYmot JChDT05GSUdfVUNDX1NMT1cpCSs9IHVjY19zbG93Lm8KIG9iai0kKENPTkZJR19VQ0NfRkFTVCkJ Kz0gdWNjX2Zhc3QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL3FlL3FtYy5jIGIvZHJp dmVycy9zb2MvZnNsL3FlL3FtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uY2ZhNzIwNzM1M2UwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2MvZnNsL3Fl L3FtYy5jCkBAIC0wLDAgKzEsMTUzMyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKy8qCisgKiBRTUMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMjIgQ1MgR1JPVVAg RnJhbmNlCisgKgorICogQXV0aG9yOiBIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGlu LmNvbT4KKyAqLworCisjaW5jbHVkZSA8c29jL2ZzbC9xZS9xbWMuaD4KKyNpbmNsdWRlIDxsaW51 eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbGMuaD4KKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv cm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8c29jL2ZzbC9jcG0uaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNs X3NvYy5oPgorI2luY2x1ZGUgInRzYS5oIgorCisvKiBTQ0MgZ2VuZXJhbCBtb2RlIHJlZ2lzdGVy IGhpZ2ggKDMyIGJpdHMpICovCisjZGVmaW5lIFNDQ19HU01STAkweDAwCisjZGVmaW5lIFNDQ19H U01STF9FTlIJCSgxIDw8IDUpCisjZGVmaW5lIFNDQ19HU01STF9FTlQJCSgxIDw8IDQpCisjZGVm aW5lIFNDQ19HU01STF9NT0RFX1FNQwkoMHgwQSA8PCAwKQorCisvKiBTQ0MgZ2VuZXJhbCBtb2Rl IHJlZ2lzdGVyIGxvdyAoMzIgYml0cykgKi8KKyNkZWZpbmUgU0NDX0dTTVJICTB4MDQKKyNkZWZp bmUgICBTQ0NfR1NNUkhfQ1RTUwkoMSA8PCA3KQorI2RlZmluZSAgIFNDQ19HU01SSF9DRFMJCSgx IDw8IDgpCisjZGVmaW5lICAgU0NDX0dTTVJIX0NUU1AJKDEgPDwgOSkKKyNkZWZpbmUgICBTQ0Nf R1NNUkhfQ0RQCQkoMSA8PCAxMCkKKworLyogU0NDIGV2ZW50IHJlZ2lzdGVyICgxNiBiaXRzKSAq LworI2RlZmluZSBTQ0NfU0NDRQkweDEwCisjZGVmaW5lICAgU0NDX1NDQ0VfSVFPVgkJKDEgPDwg MykKKyNkZWZpbmUgICBTQ0NfU0NDRV9HSU5UCQkoMSA8PCAyKQorI2RlZmluZSAgIFNDQ19TQ0NF X0dVTgkJKDEgPDwgMSkKKyNkZWZpbmUgICBTQ0NfU0NDRV9HT1YJCSgxIDw8IDApCisKKy8qIFND QyBtYXNrIHJlZ2lzdGVyICgxNiBiaXRzKSAqLworI2RlZmluZSBTQ0NfU0NDTQkweDE0CisvKiBN dWx0aWNoYW5uZWwgYmFzZSBwb2ludGVyICgzMiBiaXRzKSAqLworI2RlZmluZSBRTUNfR0JMX01D QkFTRQkJMHgwMAorLyogTXVsdGljaGFubmVsIGNvbnRyb2xsZXIgc3RhdGUgKDE2IGJpdHMpICov CisjZGVmaW5lIFFNQ19HQkxfUU1DU1RBVEUJMHgwNAorLyogTWF4aW11bSByZWNlaXZlIGJ1ZmZl ciBsZW5ndGggKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfTVJCTFIJCTB4MDYKKy8qIFR4 IHRpbWUtc2xvdCBhc3NpZ25tZW50IHRhYmxlIHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVmaW5l IFFNQ19HQkxfVFhfU19QVFIJMHgwOAorLyogUnggcG9pbnRlciAoMTYgYml0cykgKi8KKyNkZWZp bmUgUU1DX0dCTF9SWFBUUgkJMHgwQQorLyogR2xvYmFsIHJlY2VpdmUgZnJhbWUgdGhyZXNob2xk ICgxNiBiaXRzKSAqLworI2RlZmluZSBRTUNfR0JMX0dSRlRIUgkJMHgwQworLyogR2xvYmFsIHJl Y2VpdmUgZnJhbWUgY291bnQgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfR1JGQ05UCQkw eDBFCisvKiBNdWx0aWNoYW5uZWwgaW50ZXJydXB0IGJhc2UgYWRkcmVzcyAoMzIgYml0cykgKi8K KyNkZWZpbmUgUU1DX0dCTF9JTlRCQVNFCQkweDEwCisvKiBNdWx0aWNoYW5uZWwgaW50ZXJydXB0 IHBvaW50ZXIgKDMyIGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfSU5UUFRSCQkweDE0CisvKiBS eCB0aW1lLXNsb3QgYXNzaWdubWVudCB0YWJsZSBwb2ludGVyICgxNiBiaXRzKSAqLworI2RlZmlu ZSBRTUNfR0JMX1JYX1NfUFRSCTB4MTgKKy8qIFR4IHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVm aW5lIFFNQ19HQkxfVFhQVFIJCTB4MUEKKy8qIENSQyBjb25zdGFudCAoMzIgYml0cykgKi8KKyNk ZWZpbmUgUU1DX0dCTF9DX01BU0szMgkweDFDCisvKiBUaW1lIHNsb3QgYXNzaWdubWVudCB0YWJs ZSBSeCAoMzIgeCAxNiBiaXRzKSAqLworI2RlZmluZSBRTUNfR0JMX1RTQVRSWAkJMHgyMAorLyog VGltZSBzbG90IGFzc2lnbm1lbnQgdGFibGUgVHggKDMyIHggMTYgYml0cykgKi8KKyNkZWZpbmUg UU1DX0dCTF9UU0FUVFgJCTB4NjAKKy8qIENSQyBjb25zdGFudCAoMTYgYml0cykgKi8KKyNkZWZp bmUgUU1DX0dCTF9DX01BU0sxNgkweEEwCisKKy8qIFRTQSBlbnRyeSAoMTZiaXQgZW50cnkgaW4g VFNBVFJYIGFuZCBUU0FUVFgpICovCisjZGVmaW5lIFFNQ19UU0FfVkFMSUQJCSgxIDw8IDE1KQor I2RlZmluZSBRTUNfVFNBX1dSQVAJCSgxIDw8IDE0KQorI2RlZmluZSBRTUNfVFNBX01BU0sJCSgw eDMwM0YpCisjZGVmaW5lIFFNQ19UU0FfQ0hBTk5FTCh4KQkoKHgpIDw8IDYpCisKKy8qIFR4IGJ1 ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAoMTYgYml0cywgb2Zmc2V0IGZyb20gTUNCQVNF KSAqLworI2RlZmluZSBRTUNfU1BFX1RCQVNFCTB4MDAKKworLyogQ2hhbm5lbCBtb2RlIHJlZ2lz dGVyICgxNiBiaXRzKSAqLworI2RlZmluZSBRTUNfU1BFX0NIQU1SCTB4MDIKKyNkZWZpbmUgICBR TUNfU1BFX0NIQU1SX01PREVfSERMQwkoMSA8PCAxNSkKKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1S X01PREVfVFJBTlNQCSgoMCA8PCAxNSkgfCAoMSA8PCAxMykpCisjZGVmaW5lICAgUU1DX1NQRV9D SEFNUl9FTlQJCSgxIDw8IDEyKQorI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfUE9MCQkoMSA8PCA4 KQorI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfSERMQ19JRExNCSgxIDw8IDEzKQorI2RlZmluZSAg IFFNQ19TUEVfQ0hBTVJfSERMQ19DUkMJKDEgPDwgNykKKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1S X0hETENfTk9GCSgweDBmIDw8IDApCisjZGVmaW5lICAgUU1DX1NQRV9DSEFNUl9UUkFOU1BfUkQJ KDEgPDwgMTQpCisjZGVmaW5lICAgUU1DX1NQRV9DSEFNUl9UUkFOU1BfU1lOQwkoMSA8PCAxMCkK KworLyogVHggaW50ZXJuYWwgc3RhdGUgKDMyIGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfVFNU QVRFCTB4MDQKKy8qIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50ZXIgKDE2IGJpdHMpICovCisj ZGVmaW5lIFFNQ19TUEVfVEJQVFIJMHgwQworLyogWmVyby1pbnNlcnRpb24gc3RhdGUgKDMyIGJp dHMpICovCisjZGVmaW5lIFFNQ19TUEVfWklTVEFURQkweDE0CisvKiBDaGFubmVs4oCZcyBpbnRl cnJ1cHQgbWFzayBmbGFncyAoMTYgYml0cykgKi8KKyNkZWZpbmUgUU1DX1NQRV9JTlRNU0sJMHgx QworLyogUnggYnVmZmVyIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzICgxNiBiaXRzLCBvZmZzZXQg ZnJvbSBNQ0JBU0UpICovCisjZGVmaW5lIFFNQ19TUEVfUkJBU0UJMHgyMAorLyogSERMQzogTWF4 aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVf TUZMUgkweDIyCisvKiBUUkFOU1BBUkVOVDogVHJhbnNwYXJlbnQgbWF4aW11bSByZWNlaXZlIGxl bmd0aCAoMTYgYml0cykgKi8KKyNkZWZpbmUgUU1DX1NQRV9UTVJCTFIJMHgyMgorLyogUnggaW50 ZXJuYWwgc3RhdGUgKDMyIGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfUlNUQVRFCTB4MjQKKy8q IFJ4IGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19T UEVfUkJQVFIJMHgyQworLyogUGFja3MgNCBieXRlcyB0byAxIGxvbmcgd29yZCBiZWZvcmUgd3Jp dGluZyB0byBidWZmZXIgKDMyIGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfUlBBQ0sJMHgzMAor LyogWmVybyBkZWxldGlvbiBzdGF0ZSAoMzIgYml0cykgKi8KKyNkZWZpbmUgUU1DX1NQRV9aRFNU QVRFCTB4MzQKKworLyogVHJhbnNwYXJlbnQgc3luY2hyb25pemF0aW9uICgxNiBiaXRzKSAqLwor I2RlZmluZSBRTUNfU1BFX1RSTlNZTkMgMHgzQworI2RlZmluZSAgIFFNQ19TUEVfVFJOU1lOQ19S WCh4KQkoKHgpIDw8IDgpCisjZGVmaW5lICAgUU1DX1NQRV9UUk5TWU5DX1RYKHgpCSgoeCkgPDwg MCkKKworLyogSW50ZXJydXB0IHJlbGF0ZWQgcmVnaXN0ZXJzIGJpdHMgKi8KKyNkZWZpbmUgUU1D X0lOVF9WCQkoMSA8PCAxNSkKKyNkZWZpbmUgUU1DX0lOVF9XCQkoMSA8PCAxNCkKKyNkZWZpbmUg UU1DX0lOVF9OSUQJCSgxIDw8IDEzKQorI2RlZmluZSBRTUNfSU5UX0lETAkJKDEgPDwgMTIpCisj ZGVmaW5lIFFNQ19JTlRfR0VUX0NIQU5ORUwoeCkJKCgoeCkgJiAweDBGQzApID4+IDYpCisjZGVm aW5lIFFNQ19JTlRfTVJGCQkoMSA8PCA1KQorI2RlZmluZSBRTUNfSU5UX1VOCQkoMSA8PCA0KQor I2RlZmluZSBRTUNfSU5UX1JYRgkJKDEgPDwgMykKKyNkZWZpbmUgUU1DX0lOVF9CU1kJCSgxIDw8 IDIpCisjZGVmaW5lIFFNQ19JTlRfVFhCCQkoMSA8PCAxKQorI2RlZmluZSBRTUNfSU5UX1JYQgkJ KDEgPDwgMCkKKworLyogQkQgcmVsYXRlZCByZWdpc3RlcnMgYml0cyAqLworI2RlZmluZSBRTUNf QkRfUlhfRQkoMSA8PCAxNSkKKyNkZWZpbmUgUU1DX0JEX1JYX1cJKDEgPDwgMTMpCisjZGVmaW5l IFFNQ19CRF9SWF9JCSgxIDw8IDEyKQorI2RlZmluZSBRTUNfQkRfUlhfTAkoMSA8PCAxMSkKKyNk ZWZpbmUgUU1DX0JEX1JYX0YJKDEgPDwgMTApCisjZGVmaW5lIFFNQ19CRF9SWF9DTQkoMSA8PCA5 KQorI2RlZmluZSBRTUNfQkRfUlhfVUIJKDEgPDwgNykKKyNkZWZpbmUgUU1DX0JEX1JYX0xHCSgx IDw8IDUpCisjZGVmaW5lIFFNQ19CRF9SWF9OTwkoMSA8PCA0KQorI2RlZmluZSBRTUNfQkRfUlhf QUIJKDEgPDwgMykKKyNkZWZpbmUgUU1DX0JEX1JYX0NSCSgxIDw8IDIpCisKKyNkZWZpbmUgUU1D X0JEX1RYX1IJKDEgPDwgMTUpCisjZGVmaW5lIFFNQ19CRF9UWF9XCSgxIDw8IDEzKQorI2RlZmlu ZSBRTUNfQkRfVFhfSQkoMSA8PCAxMikKKyNkZWZpbmUgUU1DX0JEX1RYX0wJKDEgPDwgMTEpCisj ZGVmaW5lIFFNQ19CRF9UWF9UQwkoMSA8PCAxMCkKKyNkZWZpbmUgUU1DX0JEX1RYX0NNCSgxIDw8 IDkpCisjZGVmaW5lIFFNQ19CRF9UWF9VQgkoMSA8PCA3KQorI2RlZmluZSBRTUNfQkRfVFhfUEFE CSgweDBmIDw8IDApCisKKy8qIE51bWJlcnMgb2YgQkRzIGFuZCBpbnRlcnJ1cHQgaXRlbXMgKi8K KyNkZWZpbmUgUU1DX05CX1RYQkRTCTgKKyNkZWZpbmUgUU1DX05CX1JYQkRTCTgKKyNkZWZpbmUg UU1DX05CX0lOVFMJMTI4CisKK3N0cnVjdCBxbWNfeGZlcl9kZXNjIHsKKwl1bmlvbiB7CisJCXZv aWQgKCp0eF9jb21wbGV0ZSkodm9pZCAqY29udGV4dCk7CisJCXZvaWQgKCpyeF9jb21wbGV0ZSko dm9pZCAqY29udGV4dCwgc2l6ZV90IGxlbmd0aCk7CisJfTsKKwl2b2lkICpjb250ZXh0OworfTsK Kworc3RydWN0IHFtY19jaGFuIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQg aW50IGlkOworCXN0cnVjdCBxbWMgKnFtYzsKKwl2b2lkICpfX2lvbWVtIHNfcGFyYW07CisJZW51 bSBxbWNfbW9kZSBtb2RlOworCXU2NAl0eF90c19tYXNrOworCXU2NAlyeF90c19tYXNrOworCWJv b2wgaXNfcmV2ZXJzZV9kYXRhOworCisJc3BpbmxvY2tfdAl0eF9sb2NrOworCWNiZF90IF9faW9t ZW0gKnR4YmRzOworCWNiZF90IF9faW9tZW0gKnR4YmRfZnJlZTsKKwljYmRfdCBfX2lvbWVtICp0 eGJkX2RvbmU7CisJc3RydWN0IHFtY194ZmVyX2Rlc2MgdHhfZGVzY1tRTUNfTkJfVFhCRFNdOwor CXU2NAluYl90eF91bmRlcnJ1bjsKKwlib29sCWlzX3R4X3N0b3BwZWQ7CisKKwlzcGlubG9ja190 CXJ4X2xvY2s7CisJY2JkX3QgX19pb21lbSAqcnhiZHM7CisJY2JkX3QgX19pb21lbSAqcnhiZF9m cmVlOworCWNiZF90IF9faW9tZW0gKnJ4YmRfZG9uZTsKKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyBy eF9kZXNjW1FNQ19OQl9SWEJEU107CisJdTY0CW5iX3J4X2J1c3k7CisJaW50CXJ4X3BlbmRpbmc7 CisJYm9vbAlpc19yeF9oYWx0ZWQ7CisJYm9vbAlpc19yeF9zdG9wcGVkOworfTsKKworc3RydWN0 IHFtYyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB0c2Ffc2VyaWFsICp0c2Ffc2Vy aWFsOworCXZvaWQgKl9faW9tZW0gc2NjX3JlZ3M7CisJdm9pZCAqX19pb21lbSBzY2NfcHJhbTsK Kwl2b2lkICpfX2lvbWVtIGRwcmFtOworCXUxNiBzY2NfcHJhbV9vZmZzZXQ7CisJY2JkX3QgX19p b21lbSAqYmRfdGFibGU7CisJZG1hX2FkZHJfdCBiZF9kbWFfYWRkcjsKKwlzaXplX3QgYmRfc2l6 ZTsKKwl1MTYgX19pb21lbSAqaW50X3RhYmxlOworCXUxNiBfX2lvbWVtICppbnRfY3VycjsKKwlk bWFfYWRkcl90IGludF9kbWFfYWRkcjsKKwlzaXplX3QgaW50X3NpemU7CisJc3RydWN0IGxpc3Rf aGVhZCBjaGFuX2hlYWQ7CisJc3RydWN0IHFtY19jaGFuICpjaGFuc1s2NF07Cit9OworCitzdGF0 aWMgaW5saW5lIHZvaWQgcW1jX3dyaXRlMTYodm9pZCAqX19pb21lbSBhZGRyLCB1MTYgdmFsKQor eworCWlvd3JpdGUxNmJlKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHFtY19y ZWFkMTYodm9pZCAqX19pb21lbSBhZGRyKQoreworCXJldHVybiBpb3JlYWQxNmJlKGFkZHIpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcW1jX3NldGJpdHMxNih2b2lkICpfX2lvbWVtIGFkZHIs IHUxNiBzZXQpCit7CisJcW1jX3dyaXRlMTYoYWRkciwgcW1jX3JlYWQxNihhZGRyKSB8IHNldCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxbWNfY2xyYml0czE2KHZvaWQgKl9faW9tZW0gYWRk ciwgdTE2IGNscikKK3sKKwlxbWNfd3JpdGUxNihhZGRyLCBxbWNfcmVhZDE2KGFkZHIpICYgfmNs cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxbWNfd3JpdGUzMih2b2lkICpfX2lvbWVtIGFk ZHIsIHUzMiB2YWwpCit7CisJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKK30KKworc3RhdGljIGlu bGluZSB1MzIgcW1jX3JlYWQzMih2b2lkICpfX2lvbWVtIGFkZHIpCit7CisJcmV0dXJuIGlvcmVh ZDMyYmUoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxbWNfc2V0Yml0czMyKHZvaWQg Kl9faW9tZW0gYWRkciwgdTMyIHNldCkKK3sKKwlxbWNfd3JpdGUzMihhZGRyLCBxbWNfcmVhZDMy KGFkZHIpIHwgc2V0KTsKK30KKworCitpbnQgcW1jX2NoYW5fZ2V0X2luZm8oc3RydWN0IHFtY19j aGFuICpjaGFuLCBzdHJ1Y3QgcW1jX2NoYW5faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdHNhX3Nl cmlhbF9pbmZvIHRzYV9pbmZvOworCWludCByZXQ7CisKKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20g dGhlIFRTQSByZWxhdGVkIHNlcmlhbCAqLworCXJldCA9IHRzYV9zZXJpYWxfZ2V0X2luZm8oY2hh bi0+cW1jLT50c2Ffc2VyaWFsLCAmdHNhX2luZm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlpbmZvLT5tb2RlID0gY2hhbi0+bW9kZTsKKwlpbmZvLT5yeF9mc19yYXRlID0gdHNhX2lu Zm8ucnhfZnNfcmF0ZTsKKwlpbmZvLT5yeF9iaXRfcmF0ZSA9IHRzYV9pbmZvLnJ4X2JpdF9yYXRl OworCWluZm8tPm5iX3R4X3RzID0gaHdlaWdodDY0KGNoYW4tPnR4X3RzX21hc2spOworCWluZm8t PnR4X2ZzX3JhdGUgPSB0c2FfaW5mby50eF9mc19yYXRlOworCWluZm8tPnR4X2JpdF9yYXRlID0g dHNhX2luZm8udHhfYml0X3JhdGU7CisJaW5mby0+bmJfcnhfdHMgPSBod2VpZ2h0NjQoY2hhbi0+ cnhfdHNfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fZ2V0 X2luZm8pOworCitpbnQgcW1jX2NoYW5fc2V0X3BhcmFtKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwg Y29uc3Qgc3RydWN0IHFtY19jaGFuX3BhcmFtICpwYXJhbSkKK3sKKwlpZiAocGFyYW0tPm1vZGUg IT0gY2hhbi0+bW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHBhcmFtLT5tb2Rl KSB7CisJY2FzZSBRTUNfSERMQzoKKwkJaWYgKChwYXJhbS0+aGRsYy5tYXhfcnhfYnVmX3NpemUg JSA0KSB8fAorCQkgICAgKHBhcmFtLT5oZGxjLm1heF9yeF9idWZfc2l6ZSA8IDgpKQorCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJcW1jX3dyaXRlMTYoY2hhbi0+cW1jLT5zY2NfcHJhbSArIFFNQ19H QkxfTVJCTFIsCisJCQkgICAgcGFyYW0tPmhkbGMubWF4X3J4X2J1Zl9zaXplIC0gOCk7CisJCXFt Y193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX01GTFIsCisJCQkgICAgcGFyYW0tPmhk bGMubWF4X3J4X2ZyYW1lX3NpemUpOworCQlpZiAocGFyYW0tPmhkbGMuaXNfY3JjMzIpIHsKKwkJ CXFtY19zZXRiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsCisJCQkJICAgICAg UU1DX1NQRV9DSEFNUl9IRExDX0NSQyk7CisJCX0gZWxzZSB7CisJCQlxbWNfY2xyYml0czE2KGNo YW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1SLAorCQkJCSAgICAgIFFNQ19TUEVfQ0hBTVJfSERM Q19DUkMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBRTUNfVFJBTlNQQVJFTlQ6CisJCXFtY193 cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RNUkJMUiwKKwkJCSAgICBwYXJhbS0+dHJh bnNwLm1heF9yeF9idWZfc2l6ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHFtY19jaGFuX3NldF9w YXJhbSk7CisKK2ludCBxbWNfY2hhbl93cml0ZV9zdWJtaXQoc3RydWN0IHFtY19jaGFuICpjaGFu LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW5ndGgsCisJCQkgIHZvaWQgKCpjb21wbGV0ZSko dm9pZCAqY29udGV4dCksIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHFtY194ZmVyX2Rlc2Mg KnhmZXJfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNiZF90ICpfX2lvbWVtIGJkOwor CXUxNiBjdHJsOworCWludCByZXQ7CisKKwkvKgorCSAqIFIgYml0ICBVQiBiaXQKKwkgKiAgIDAg ICAgICAgMCAgOiBUaGUgQkQgaXMgZnJlZQorCSAqICAgMSAgICAgICAxICA6IFRoZSBCRCBpcyBp biB1c2VkLCB3YWl0aW5nIGZvciB0cmFuc2ZlcgorCSAqICAgMCAgICAgICAxICA6IFRoZSBCRCBp cyBpbiB1c2VkLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uCisJICogICAxICAgICAgIDAgIDogU2hv dWxkIG5vdCBhcHBlbmQKKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT50eF9sb2Nr LCBmbGFncyk7CisJYmQgPSBjaGFuLT50eGJkX2ZyZWU7CisKKwljdHJsID0gcW1jX3JlYWQxNigm YmQtPmNiZF9zYyk7CisJaWYgKGN0cmwgJiAoUU1DX0JEX1RYX1IgfCBRTUNfQkRfVFhfVUIpKSB7 CisJCS8qIFdlIGFyZSBmdWxsIC4uLiAqLworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZW5kOwor CX0KKworCXFtY193cml0ZTE2KCZiZC0+Y2JkX2RhdGxlbiwgbGVuZ3RoKTsKKwlxbWNfd3JpdGUz MigmYmQtPmNiZF9idWZhZGRyLCBhZGRyKTsKKworCXhmZXJfZGVzYyA9ICZjaGFuLT50eF9kZXNj W2JkIC0gY2hhbi0+dHhiZHNdOworCXhmZXJfZGVzYy0+dHhfY29tcGxldGUgPSBjb21wbGV0ZTsK Kwl4ZmVyX2Rlc2MtPmNvbnRleHQgPSBjb250ZXh0OworCisJLyogQWN0aXZhdGUgdGhlIGRlc2Ny aXB0b3IgKi8KKwljdHJsIHw9IChRTUNfQkRfVFhfUiB8IFFNQ19CRF9UWF9VQik7CisJd21iKCk7 IC8qIEJlIHN1cmUgdG8gZmx1c2ggdGhlIGRlc2NyaXB0b3IgYmVmb3JlIGNvbnRyb2wgdXBkYXRl ICovCisJcW1jX3dyaXRlMTYoJmJkLT5jYmRfc2MsIGN0cmwpOworCisJaWYgKCFjaGFuLT5pc190 eF9zdG9wcGVkKQorCQlxbWNfc2V0Yml0czE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1S LCBRTUNfU1BFX0NIQU1SX1BPTCk7CisKKwlpZiAoY3RybCAmIFFNQ19CRF9UWF9XKQorCQljaGFu LT50eGJkX2ZyZWUgPSBjaGFuLT50eGJkczsKKwllbHNlCisJCWNoYW4tPnR4YmRfZnJlZSsrOwor CisJcmV0ID0gMDsKKworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnR4X2xv Y2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChxbWNfY2hhbl93cml0 ZV9zdWJtaXQpOworCitzdGF0aWMgdm9pZCBxbWNfY2hhbl93cml0ZV9kb25lKHN0cnVjdCBxbWNf Y2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyAqeGZlcl9kZXNjOworCXZvaWQg KCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lk ICpjb250ZXh0OworCWNiZF90ICpfX2lvbWVtIGJkOworCXUxNiBjdHJsOworCisJLyoKKwkgKiBS IGJpdCAgVUIgYml0CisJICogICAwICAgICAgIDAgIDogVGhlIEJEIGlzIGZyZWUKKwkgKiAgIDEg ICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgdHJhbnNmZXIKKwkgKiAg IDAgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbgor CSAqICAgMSAgICAgICAwICA6IFNob3VsZCBub3QgYXBwZW5kCisJICovCisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworCWJkID0gY2hhbi0+dHhiZF9kb25lOwor CisJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOworCXdoaWxlICghKGN0cmwgJiBRTUNf QkRfVFhfUikpIHsKKwkJaWYgKCEoY3RybCAmIFFNQ19CRF9UWF9VQikpCisJCQlnb3RvIGVuZDsK KworCQl4ZmVyX2Rlc2MgPSAmY2hhbi0+dHhfZGVzY1tiZCAtIGNoYW4tPnR4YmRzXTsKKwkJY29t cGxldGUgPSB4ZmVyX2Rlc2MtPnR4X2NvbXBsZXRlOworCQljb250ZXh0ID0geGZlcl9kZXNjLT5j b250ZXh0OworCQl4ZmVyX2Rlc2MtPnR4X2NvbXBsZXRlID0gTlVMTDsKKwkJeGZlcl9kZXNjLT5j b250ZXh0ID0gTlVMTDsKKworCQlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCAmIH5RTUNf QkRfVFhfVUIpOworCisJCWlmIChjdHJsICYgUU1DX0JEX1RYX1cpCisJCQljaGFuLT50eGJkX2Rv bmUgPSBjaGFuLT50eGJkczsKKwkJZWxzZQorCQkJY2hhbi0+dHhiZF9kb25lKys7CisKKwkJaWYg KGNvbXBsZXRlKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBm bGFncyk7CisJCQljb21wbGV0ZShjb250ZXh0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFu LT50eF9sb2NrLCBmbGFncyk7CisJCX0KKworCQliZCA9IGNoYW4tPnR4YmRfZG9uZTsKKwkJY3Ry bCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOworCX0KKworZW5kOgorCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKK30KKworaW50IHFtY19jaGFuX3JlYWRf c3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVu Z3RoLAorCQkJIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCwgc2l6ZV90IGxlbmd0aCks IHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCWNiZF90ICpfX2lvbWVtIGJkOworCXUxNiBjdHJsOworCWlu dCByZXQ7CisKKwkvKgorCSAqIEUgYml0ICBVQiBiaXQKKwkgKiAgIDAgICAgICAgMCAgOiBUaGUg QkQgaXMgZnJlZQorCSAqICAgMSAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5n IGZvciB0cmFuc2ZlcgorCSAqICAgMCAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0 aW5nIGZvciBjb21wbGV0aW9uCisJICogICAxICAgICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQK KwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJYmQg PSBjaGFuLT5yeGJkX2ZyZWU7CisKKwljdHJsID0gcW1jX3JlYWQxNigmYmQtPmNiZF9zYyk7CisJ aWYgKGN0cmwgJiAoUU1DX0JEX1JYX0UgfCBRTUNfQkRfUlhfVUIpKSB7CisJCS8qIFdlIGFyZSBm dWxsIC4uLiAqLworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZW5kOworCX0KKworCXFtY193cml0 ZTE2KCZiZC0+Y2JkX2RhdGxlbiwgMCk7IC8qIGRhdGEgbGVuZ3RoIGlzIHVwZGF0ZWQgYnkgdGhl IFFNQyAqLworCXFtY193cml0ZTMyKCZiZC0+Y2JkX2J1ZmFkZHIsIGFkZHIpOworCisJeGZlcl9k ZXNjID0gJmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5yeGJkc107CisJeGZlcl9kZXNjLT5yeF9j b21wbGV0ZSA9IGNvbXBsZXRlOworCXhmZXJfZGVzYy0+Y29udGV4dCA9IGNvbnRleHQ7CisKKwkv KiBBY3RpdmF0ZSB0aGUgZGVzY3JpcHRvciAqLworCWN0cmwgfD0gKFFNQ19CRF9SWF9FIHwgUU1D X0JEX1JYX1VCKTsKKwl3bWIoKTsgLyogQmUgc3VyZSB0byBmbHVzaCBkYXRhIGJlZm9yZSBkZXNj cmlwdG9yIGFjdGl2YXRpb24gKi8KKwlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCk7CisK KwkvKiBSZXN0YXJ0IHJlY2VpdmVyIGlmIG5lZWRlZCAqLworCWlmIChjaGFuLT5pc19yeF9oYWx0 ZWQgJiYgIWNoYW4tPmlzX3J4X3N0b3BwZWQpIHsKKwkJLyogUmVzdGFydCByZWNlaXZlciAqLwor CQlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpCisJCQlxbWNfd3JpdGUzMihjaGFu LT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDE4MDAwMDgwKTsKKwkJZWxzZQorCQkJcW1j X3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwgMHgwMDAwMDA4MCk7CisJ CXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JTVEFURSwgMHgzMTAwMDAwMCk7 CisJCWNoYW4tPmlzX3J4X2hhbHRlZCA9IGZhbHNlOworCX0KKwljaGFuLT5yeF9wZW5kaW5nKys7 CisKKwlpZiAoY3RybCAmIFFNQ19CRF9SWF9XKQorCQljaGFuLT5yeGJkX2ZyZWUgPSBjaGFuLT5y eGJkczsKKwllbHNlCisJCWNoYW4tPnJ4YmRfZnJlZSsrOworCisJcmV0ID0gMDsKK2VuZDoKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fcmVhZF9zdWJtaXQpOworCitzdGF0aWMgdm9p ZCBxbWNfY2hhbl9yZWFkX2RvbmUoc3RydWN0IHFtY19jaGFuICpjaGFuKQoreworCXZvaWQgKCpj b21wbGV0ZSkodm9pZCAqY29udGV4dCwgc2l6ZV90IHNpemUpOworCXN0cnVjdCBxbWNfeGZlcl9k ZXNjICp4ZmVyX2Rlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljYmRfdCAqX19pb21lbSBi ZDsKKwl2b2lkICpjb250ZXh0OworCXUxNiBkYXRhbGVuOworCXUxNiBjdHJsOworCisJLyoKKwkg KiBFIGJpdCAgVUIgYml0CisJICogICAwICAgICAgIDAgIDogVGhlIEJEIGlzIGZyZWUKKwkgKiAg IDEgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgdHJhbnNmZXIKKwkg KiAgIDAgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxldGlv bgorCSAqICAgMSAgICAgICAwICA6IFNob3VsZCBub3QgYXBwZW5kCisJICovCisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOworCWJkID0gY2hhbi0+cnhiZF9kb25l OworCisJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOworCXdoaWxlICghKGN0cmwgJiBR TUNfQkRfUlhfRSkpIHsKKwkJaWYgKCEoY3RybCAmIFFNQ19CRF9SWF9VQikpCisJCQlnb3RvIGVu ZDsKKworCQl4ZmVyX2Rlc2MgPSAmY2hhbi0+cnhfZGVzY1tiZCAtIGNoYW4tPnJ4YmRzXTsKKwkJ Y29tcGxldGUgPSB4ZmVyX2Rlc2MtPnJ4X2NvbXBsZXRlOworCQljb250ZXh0ID0geGZlcl9kZXNj LT5jb250ZXh0OworCQl4ZmVyX2Rlc2MtPnJ4X2NvbXBsZXRlID0gTlVMTDsKKwkJeGZlcl9kZXNj LT5jb250ZXh0ID0gTlVMTDsKKworCQlkYXRhbGVuID0gcW1jX3JlYWQxNigmYmQtPmNiZF9kYXRs ZW4pOworCQlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgY3RybCAmIH5RTUNfQkRfUlhfVUIpOwor CisJCWlmIChjdHJsICYgUU1DX0JEX1JYX1cpCisJCQljaGFuLT5yeGJkX2RvbmUgPSBjaGFuLT5y eGJkczsKKwkJZWxzZQorCQkJY2hhbi0+cnhiZF9kb25lKys7CisKKwkJY2hhbi0+cnhfcGVuZGlu Zy0tOworCisJCWlmIChjb21wbGV0ZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hh bi0+cnhfbG9jaywgZmxhZ3MpOworCQkJY29tcGxldGUoY29udGV4dCwgZGF0YWxlbik7CisJCQlz cGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOworCQl9CisKKwkJYmQgPSBj aGFuLT5yeGJkX2RvbmU7CisJCWN0cmwgPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX3NjKTsKKwl9CisK K2VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7Cit9 CisKK3N0YXRpYyBpbnQgcW1jX2NoYW5fY29tbWFuZChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIHU4 IHFtY19vcGNvZGUpCit7CisJcmV0dXJuIGNwbV9jb21tYW5kKGNoYW4tPmlkIDw8IDIsIChxbWNf b3Bjb2RlIDw8IDQpIHwgMHgwRSk7Cit9CisKK3N0YXRpYyBpbnQgcW1jX2NoYW5fc3RvcF9yeChz dHJ1Y3QgcW1jX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0 OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKworCS8qIFNl bmQgU1RPUCBSRUNFSVZFIGNvbW1hbmQgKi8KKwlyZXQgPSBxbWNfY2hhbl9jb21tYW5kKGNoYW4s IDB4MCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNoYW4tPnFtYy0+ZGV2LCAiY2hhbiAldTog U2VuZCBTVE9QIFJFQ0VJVkUgZmFpbGVkICglZClcbiIsCisJCQljaGFuLT5pZCwgcmV0KTsKKwkJ Z290byBlbmQ7CisJfQorCisJY2hhbi0+aXNfcnhfc3RvcHBlZCA9IHRydWU7CisKK2VuZDoKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBxbWNfY2hhbl9zdG9wX3R4KHN0cnVjdCBxbWNfY2hhbiAqY2hh bikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworCisJLyogU2VuZCBTVE9QIFRSQU5TTUlUIGNv bW1hbmQgKi8KKwlyZXQgPSBxbWNfY2hhbl9jb21tYW5kKGNoYW4sIDB4MSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGNoYW4tPnFtYy0+ZGV2LCAiY2hhbiAldTogU2VuZCBTVE9QIFRSQU5TTUlU IGZhaWxlZCAoJWQpXG4iLAorCQkJY2hhbi0+aWQsIHJldCk7CisJCWdvdG8gZW5kOworCX0KKwor CWNoYW4tPmlzX3R4X3N0b3BwZWQgPSB0cnVlOworCitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBxbWNf Y2hhbl9zdG9wKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVjdGlvbikKK3sKKwlpbnQg cmV0OworCisJaWYgKGRpcmVjdGlvbiAmIFFNQ19DSEFOX1JFQUQpIHsKKwkJcmV0ID0gcW1jX2No YW5fc3RvcF9yeChjaGFuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYg KGRpcmVjdGlvbiAmIFFNQ19DSEFOX1dSSVRFKSB7CisJCXJldCA9IHFtY19jaGFuX3N0b3BfdHgo Y2hhbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQor RVhQT1JUX1NZTUJPTChxbWNfY2hhbl9zdG9wKTsKKworc3RhdGljIHZvaWQgcW1jX2NoYW5fc3Rh cnRfcngoc3RydWN0IHFtY19jaGFuICpjaGFuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOworCisJLyogUmVzdGFy dCB0aGUgcmVjZWl2ZXIgKi8KKwlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpCisJ CXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pEU1RBVEUsIDB4MTgwMDAwODAp OworCWVsc2UKKwkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwg MHgwMDAwMDA4MCk7CisJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUlNUQVRF LCAweDMxMDAwMDAwKTsKKwljaGFuLT5pc19yeF9oYWx0ZWQgPSBmYWxzZTsKKworCWNoYW4tPmlz X3J4X3N0b3BwZWQgPSBmYWxzZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnJ4 X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcW1jX2NoYW5fc3RhcnRfdHgoc3RydWN0 IHFtY19jaGFuICpjaGFuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBFbmFibGUgY2hhbm5l bCB0cmFuc21pdHRlciBhcyBpdCBjb3VsZCBiZSBkaXNhYmxlZCBpZgorCSAqIHFtY19jaGFuX3Jl c2V0KCkgd2FzIGNhbGxlZC4KKwkgKi8KKwlxbWNfc2V0Yml0czE2KGNoYW4tPnNfcGFyYW0gKyBR TUNfU1BFX0NIQU1SLCBRTUNfU1BFX0NIQU1SX0VOVCk7CisKKwkvKiBTZXQgdGhlIFBPTCBiaXQg aW4gdGhlIGNoYW5uZWwgbW9kZSByZWdpc3RlciAqLworCXFtY19zZXRiaXRzMTYoY2hhbi0+c19w YXJhbSArIFFNQ19TUEVfQ0hBTVIsIFFNQ19TUEVfQ0hBTVJfUE9MKTsKKworCWNoYW4tPmlzX3R4 X3N0b3BwZWQgPSBmYWxzZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPnR4X2xv Y2ssIGZsYWdzKTsKK30KKworaW50IHFtY19jaGFuX3N0YXJ0KHN0cnVjdCBxbWNfY2hhbiAqY2hh biwgaW50IGRpcmVjdGlvbikKK3sKKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fUkVBRCkKKwkJ cW1jX2NoYW5fc3RhcnRfcngoY2hhbik7CisKKwlpZiAoZGlyZWN0aW9uICYgUU1DX0NIQU5fV1JJ VEUpCisJCXFtY19jaGFuX3N0YXJ0X3R4KGNoYW4pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRf U1lNQk9MKHFtY19jaGFuX3N0YXJ0KTsKKworc3RhdGljIHZvaWQgcW1jX2NoYW5fcmVzZXRfcngo c3RydWN0IHFtY19jaGFuICpjaGFuKQoreworCXN0cnVjdCBxbWNfeGZlcl9kZXNjICp4ZmVyX2Rl c2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljYmRfdCAqX19pb21lbSBiZDsKKwl1MTYgY3Ry bDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJYmQgPSBj aGFuLT5yeGJkczsKKwlkbyB7CisJCWN0cmwgPSBxbWNfcmVhZDE2KCZiZC0+Y2JkX3NjKTsKKwkJ cW1jX3dyaXRlMTYoJmJkLT5jYmRfc2MsIGN0cmwgJiB+KFFNQ19CRF9SWF9VQiB8IFFNQ19CRF9S WF9FKSk7CisKKwkJeGZlcl9kZXNjID0gJmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5yeGJkc107 CisJCXhmZXJfZGVzYy0+cnhfY29tcGxldGUgPSBOVUxMOworCQl4ZmVyX2Rlc2MtPmNvbnRleHQg PSBOVUxMOworCisJCWJkKys7CisJfSB3aGlsZSAoIShjdHJsICYgUU1DX0JEX1JYX1cpKTsKKwor CWNoYW4tPnJ4YmRfZnJlZSA9IGNoYW4tPnJ4YmRzOworCWNoYW4tPnJ4YmRfZG9uZSA9IGNoYW4t PnJ4YmRzOworCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JCUFRSLAorCQkg ICAgcW1jX3JlYWQxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9SQkFTRSkpOworCisJY2hhbi0+ cnhfcGVuZGluZyA9IDA7CisJY2hhbi0+aXNfcnhfc3RvcHBlZCA9IGZhbHNlOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9p ZCBxbWNfY2hhbl9yZXNldF90eChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHFt Y194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNiZF90ICpf X2lvbWVtIGJkOworCXUxNiBjdHJsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnR4X2xv Y2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgdHJhbnNtaXR0ZXIuIEl0IHdpbGwgYmUgcmUtZW5h YmxlIG9uIHFtY19jaGFuX3N0YXJ0KCkgKi8KKwlxbWNfY2xyYml0czE2KGNoYW4tPnNfcGFyYW0g KyBRTUNfU1BFX0NIQU1SLCBRTUNfU1BFX0NIQU1SX0VOVCk7CisKKwliZCA9IGNoYW4tPnR4YmRz OworCWRvIHsKKwkJY3RybCA9IHFtY19yZWFkMTYoJmJkLT5jYmRfc2MpOworCQlxbWNfd3JpdGUx NigmYmQtPmNiZF9zYywgY3RybCAmIH4oUU1DX0JEX1RYX1VCIHwgUU1DX0JEX1RYX1IpKTsKKwor CQl4ZmVyX2Rlc2MgPSAmY2hhbi0+dHhfZGVzY1tiZCAtIGNoYW4tPnR4YmRzXTsKKwkJeGZlcl9k ZXNjLT50eF9jb21wbGV0ZSA9IE5VTEw7CisJCXhmZXJfZGVzYy0+Y29udGV4dCA9IE5VTEw7CisK KwkJYmQrKzsKKwl9IHdoaWxlICghKGN0cmwgJiBRTUNfQkRfVFhfVykpOworCisJY2hhbi0+dHhi ZF9mcmVlID0gY2hhbi0+dHhiZHM7CisJY2hhbi0+dHhiZF9kb25lID0gY2hhbi0+dHhiZHM7CisJ cW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfVEJQVFIsCisJCSAgICBxbWNfcmVh ZDE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCQVNFKSk7CisKKwkvKiBSZXNldCBUU1RBVEUg YW5kIFpJU1RBVEUgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZSAqLworCXFtY193cml0ZTMyKGNoYW4t PnNfcGFyYW0gKyBRTUNfU1BFX1RTVEFURSwgMHgzMDAwMDAwMCk7CisJcW1jX3dyaXRlMzIoY2hh bi0+c19wYXJhbSArIFFNQ19TUEVfWklTVEFURSwgMHgwMDAwMDEwMCk7CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7Cit9CisKK2ludCBxbWNfY2hhbl9y ZXNldChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGludCBkaXJlY3Rpb24pCit7CisJaWYgKGRpcmVj dGlvbiAmIFFNQ19DSEFOX1JFQUQpCisJCXFtY19jaGFuX3Jlc2V0X3J4KGNoYW4pOworCisJaWYg KGRpcmVjdGlvbiAmIFFNQ19DSEFOX1dSSVRFKQorCQlxbWNfY2hhbl9yZXNldF90eChjaGFuKTsK KworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChxbWNfY2hhbl9yZXNldCk7CisKK3N0YXRp YyBpbnQgcW1jX2NoZWNrX2NoYW5zKHN0cnVjdCBxbWMgKnFtYykKK3sKKwlzdHJ1Y3QgdHNhX3Nl cmlhbF9pbmZvIGluZm87CisJYm9vbCBpc19vbmVfdGFibGUgPSBmYWxzZTsKKwlzdHJ1Y3QgcW1j X2NoYW4gKmNoYW47CisJdTY0IHR4X3RzX21hc2sgPSAwOworCXU2NCByeF90c19tYXNrID0gMDsK Kwl1NjQgdHhfdHNfYXNzaWduZWRfbWFzazsKKwl1NjQgcnhfdHNfYXNzaWduZWRfbWFzazsKKwlp bnQgcmV0OworCisJLyogUmV0cmlldmUgaW5mbyBmcm9tIHRoZSBUU0EgcmVsYXRlZCBzZXJpYWwg Ki8KKwlyZXQgPSB0c2Ffc2VyaWFsX2dldF9pbmZvKHFtYy0+dHNhX3NlcmlhbCwgJmluZm8pOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiAzMiBUUyBh cmUgYXNzaWduZWQgdG8gdGhpcyBzZXJpYWwsIG9uZSBjb21tb24gdGFibGUgaXMKKwkgKiB1c2Vk IGZvciBUeCBhbmQgUnggYW5kIHNvIG1hc2tzIG11c3QgYmUgZXF1YWwgZm9yIGFsbCBjaGFubmVs cy4KKwkgKi8KKwlpZiAoKGluZm8ubmJfdHhfdHMgPiAzMikgfHwgKGluZm8ubmJfcnhfdHMgPiAz MikpIHsKKwkJaWYgKGluZm8ubmJfdHhfdHMgIT0gaW5mby5uYl9yeF90cykgeworCQkJZGV2X2Vy cihxbWMtPmRldiwgIk51bWJlciBvZiBUU0EgVHgvUnggVFMgYXNzaWduZWQgYXJlIG5vdCBlcXVh bFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpc19vbmVfdGFibGUgPSB0cnVlOwor CX0KKworCisJdHhfdHNfYXNzaWduZWRfbWFzayA9ICgoKHU2NCkxKSA8PCBpbmZvLm5iX3R4X3Rz KSAtIDE7CisJcnhfdHNfYXNzaWduZWRfbWFzayA9ICgoKHU2NCkxKSA8PCBpbmZvLm5iX3J4X3Rz KSAtIDE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNoYW5faGVhZCwgbGlz dCkgeworCQlpZiAoY2hhbi0+dHhfdHNfbWFzayA+IHR4X3RzX2Fzc2lnbmVkX21hc2spIHsKKwkJ CWRldl9lcnIocW1jLT5kZXYsICJjaGFuICV1IHVzZXMgVFNBIHVuYXNzaWduZWQgVHggVFNcbiIs IGNoYW4tPmlkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICh0eF90c19tYXNrICYg Y2hhbi0+dHhfdHNfbWFzaykgeworCQkJZGV2X2VycihxbWMtPmRldiwgImNoYW4gJXUgdXNlcyBh biBhbHJlYWR5IHVzZWQgVHggVFNcbiIsIGNoYW4tPmlkKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisKKwkJaWYgKGNoYW4tPnJ4X3RzX21hc2sgPiByeF90c19hc3NpZ25lZF9tYXNrKSB7CisJ CQlkZXZfZXJyKHFtYy0+ZGV2LCAiY2hhbiAldSB1c2VzIFRTQSB1bmFzc2lnbmVkIFJ4IFRTXG4i LCBjaGFuLT5pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocnhfdHNfbWFzayAm IGNoYW4tPnJ4X3RzX21hc2spIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICJjaGFuICV1IHVzZXMg YW4gYWxyZWFkeSB1c2VkIFJ4IFRTXG4iLCBjaGFuLT5pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCisJCWlmIChpc19vbmVfdGFibGUgJiYgKGNoYW4tPnR4X3RzX21hc2sgIT0gY2hhbi0+ cnhfdHNfbWFzaykpIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICJjaGFuICV1IHVzZXMgZGlmZmVy ZW50IFJ4IGFuZCBUeCBUU1xuIiwgY2hhbi0+aWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0K KworCQl0eF90c19tYXNrIHw9IGNoYW4tPnR4X3RzX21hc2s7CisJCXJ4X3RzX21hc2sgfD0gY2hh bi0+cnhfdHNfbWFzazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGlu dCBxbWNfbmJfY2hhbnMoc3RydWN0IHFtYyAqcW1jKQoreworCXVuc2lnbmVkIGludCBjb3VudCA9 IDA7CisJc3RydWN0IHFtY19jaGFuICpjaGFuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFu LCAmcW1jLT5jaGFuX2hlYWQsIGxpc3QpCisJCWNvdW50Kys7CisKKwlyZXR1cm4gY291bnQ7Cit9 CisKK3N0YXRpYyBpbnQgcW1jX29mX3BhcnNlX2NoYW5zKHN0cnVjdCBxbWMgKnFtYywgc3RydWN0 IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoYW5fbnA7CisJc3Ry dWN0IHFtY19jaGFuICpjaGFuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJdTMyIGNoYW5faWQ7CisJ dTY0IHRzX21hc2s7CisJaW50IHJldDsKKworCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9u b2RlKG5wLCBjaGFuX25wKSB7CisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoYW5fbnAs ICJyZWciLCAmY2hhbl9pZCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICIl cE9GOiBmYWlsZWQgdG8gcmVhZCByZWdcbiIsIGNoYW5fbnApOworCQkJb2Zfbm9kZV9wdXQoY2hh bl9ucCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChjaGFuX2lkID4gNjMpIHsKKwkJCWRl dl9lcnIocW1jLT5kZXYsICIlcE9GOiBJbnZhbGlkIGNoYW5faWRcbiIsIGNoYW5fbnApOworCQkJ b2Zfbm9kZV9wdXQoY2hhbl9ucCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWNoYW4g PSBkZXZtX2t6YWxsb2MocW1jLT5kZXYsIHNpemVvZigqY2hhbiksIEdGUF9LRVJORUwpOworCQlp ZiAoIWNoYW4pIHsKKwkJCW9mX25vZGVfcHV0KGNoYW5fbnApOworCQkJcmV0dXJuIC1FTk9NRU07 CisJCX0KKworCQljaGFuLT5pZCA9IGNoYW5faWQ7CisJCXNwaW5fbG9ja19pbml0KCZjaGFuLT5y eF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoYW4tPnR4X2xvY2spOworCisJCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTY0KGNoYW5fbnAsICJmc2wsdHgtdHMtbWFzayIsICZ0c19tYXNrKTsK KwkJaWYgKHJldCkgeworCQkJZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byByZWFk IGZzbCx0eC10cy1tYXNrXG4iLAorCQkJCWNoYW5fbnApOworCQkJb2Zfbm9kZV9wdXQoY2hhbl9u cCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNoYW4tPnR4X3RzX21hc2sgPSB0c19tYXNrOwor CisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTY0KGNoYW5fbnAsICJmc2wscngtdHMtbWFzayIs ICZ0c19tYXNrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IGZh aWxlZCB0byByZWFkIGZzbCxyeC10cy1tYXNrXG4iLAorCQkJCWNoYW5fbnApOworCQkJb2Zfbm9k ZV9wdXQoY2hhbl9ucCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNoYW4tPnJ4X3RzX21hc2sg PSB0c19tYXNrOworCisJCW1vZGUgPSAidHJhbnNwYXJlbnQiOworCQlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3N0cmluZyhjaGFuX25wLCAiZnNsLG9wZXJhdGlvbmFsLW1vZGUiLCAmbW9kZSk7CisJ CWlmIChyZXQgJiYgcmV0ICE9IC1FSU5WQUwpIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICIlcE9G OiBmYWlsZWQgdG8gcmVhZCBmc2wsb3BlcmF0aW9uYWwtbW9kZVxuIiwKKwkJCQljaGFuX25wKTsK KwkJCW9mX25vZGVfcHV0KGNoYW5fbnApOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoIXN0 cmNtcChtb2RlLCAidHJhbnNwYXJlbnQiKSkgeworCQkJY2hhbi0+bW9kZSA9IFFNQ19UUkFOU1BB UkVOVDsKKwkJfSBlbHNlIGlmICghc3RyY21wKG1vZGUsICJoZGxjIikpIHsKKwkJCWNoYW4tPm1v ZGUgPSBRTUNfSERMQzsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICIlcE9GOiBJ bnZhbGlkIGZzbCxvcGVyYXRpb25hbC1tb2RlICglcylcbiIsCisJCQkJY2hhbl9ucCwgbW9kZSk7 CisJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJ Y2hhbi0+aXNfcmV2ZXJzZV9kYXRhID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKGNoYW5fbnAsCisJ CQkJCQkJICAgICAgImZzbCxyZXZlcnNlLWRhdGEiKTsKKworCQlsaXN0X2FkZF90YWlsKCZjaGFu LT5saXN0LCAmcW1jLT5jaGFuX2hlYWQpOworCQlxbWMtPmNoYW5zW2NoYW4tPmlkXSA9IGNoYW47 CisJfQorCisJcmV0dXJuIHFtY19jaGVja19jaGFucyhxbWMpOworfQorCitzdGF0aWMgaW50IHFt Y19zZXR1cF90c2FfNjRyeHR4KHN0cnVjdCBxbWMgKnFtYywgY29uc3Qgc3RydWN0IHRzYV9zZXJp YWxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW47CisJdW5zaWduZWQgaW50 IGk7CisJdTE2IHZhbDsKKworCS8qCisJICogVXNlIGEgY29tbW9uIFR4L1J4IDY0IGVudHJpZXMg dGFibGUuCisJICogRXZlcnl0aGluZyB3YXMgcHJldmlvdXNseSBjaGVja2VkLCBUeCBhbmQgUngg cmVsYXRlZCBzdHVmZnMgYXJlCisJICogaWRlbnRpY2FsIC0+IFVzZWQgUnggcmVsYXRlZCBzdHVm ZiB0byBidWlsZCB0aGUgdGFibGUKKwkgKi8KKworCS8qIEludmFsaWRhdGUgYWxsIGVudHJpZXMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJh bSArIFFNQ19HQkxfVFNBVFJYICsgKGkgKiAyKSwgMHgwMDAwKTsKKworCS8qIFNldCBlbnRyaWVz IGJhc2VkIG9uIFJ4IHN0dWZmKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNo YW5faGVhZCwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bmJfcnhfdHM7IGkrKykg eworCQkJaWYgKCEoY2hhbi0+cnhfdHNfbWFzayAmICgoKHU2NCkxKSA8PCBpKSkpCisJCQkJY29u dGludWU7CisKKwkJCXZhbCA9IFFNQ19UU0FfVkFMSUQgfCBRTUNfVFNBX01BU0sgfAorCQkJICAg ICAgUU1DX1RTQV9DSEFOTkVMKGNoYW4tPmlkKTsKKwkJCXFtY193cml0ZTE2KHFtYy0+c2NjX3By YW0gKyBRTUNfR0JMX1RTQVRSWCArIChpICogMiksIHZhbCk7CisJCX0KKwl9CisKKwkvKiBTZXQg V3JhcCBiaXQgb24gbGFzdCBlbnRyeSAqLworCXFtY19zZXRiaXRzMTYocW1jLT5zY2NfcHJhbSAr IFFNQ19HQkxfVFNBVFJYICsgKChpbmZvLT5uYl9yeF90cyAtIDEpICogMiksCisJCSAgICAgIFFN Q19UU0FfV1JBUCk7CisKKwkvKiBJbml0IHBvaW50ZXJzIHRvIHRoZSB0YWJsZSAqLworCXZhbCA9 IHFtYy0+c2NjX3ByYW1fb2Zmc2V0ICsgUU1DX0dCTF9UU0FUUlg7CisJcW1jX3dyaXRlMTYocW1j LT5zY2NfcHJhbSArIFFNQ19HQkxfUlhfU19QVFIsIHZhbCk7CisJcW1jX3dyaXRlMTYocW1jLT5z Y2NfcHJhbSArIFFNQ19HQkxfUlhQVFIsIHZhbCk7CisJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJh bSArIFFNQ19HQkxfVFhfU19QVFIsIHZhbCk7CisJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSAr IFFNQ19HQkxfVFhQVFIsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbWNf c2V0dXBfdHNhXzMycnhfMzJ0eChzdHJ1Y3QgcW1jICpxbWMsIGNvbnN0IHN0cnVjdCB0c2Ffc2Vy aWFsX2luZm8gKmluZm8pCit7CisJc3RydWN0IHFtY19jaGFuICpjaGFuOworCXVuc2lnbmVkIGlu dCBpOworCXUxNiB2YWw7CisKKwkvKgorCSAqIFVzZSBhIFR4IDMyIGVudHJpZXMgdGFibGUgYW5k IGEgUnggMzIgZW50cmllcyB0YWJsZS4KKwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91c2x5IGNo ZWNrZWQuCisJICovCisKKwkvKiBJbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0g MDsgaSA8IDMyOyBpKyspIHsKKwkJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxf VFNBVFJYICsgKGkgKiAyKSwgMHgwMDAwKTsKKwkJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSAr IFFNQ19HQkxfVFNBVFRYICsgKGkgKiAyKSwgMHgwMDAwKTsKKwl9CisKKwkvKiBTZXQgZW50cmll cyBiYXNlZCBvbiBSeCBhbmQgVHggc3R1ZmYqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwg JnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7CisJCS8qIFJ4IHBhcnQgKi8KKwkJZm9yIChpID0gMDsg aSA8IGluZm8tPm5iX3J4X3RzOyBpKyspIHsKKwkJCWlmICghKGNoYW4tPnJ4X3RzX21hc2sgJiAo KCh1NjQpMSkgPDwgaSkpKQorCQkJCWNvbnRpbnVlOworCisJCQl2YWwgPSBRTUNfVFNBX1ZBTElE IHwgUU1DX1RTQV9NQVNLIHwKKwkJCSAgICAgIFFNQ19UU0FfQ0hBTk5FTChjaGFuLT5pZCk7CisJ CQlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIpLCB2 YWwpOworCQl9CisJCS8qIFR4IHBhcnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5iX3R4 X3RzOyBpKyspIHsKKwkJCWlmICghKGNoYW4tPnR4X3RzX21hc2sgJiAoKCh1NjQpMSkgPDwgaSkp KQorCQkJCWNvbnRpbnVlOworCisJCQl2YWwgPSBRTUNfVFNBX1ZBTElEIHwgUU1DX1RTQV9NQVNL IHwKKwkJCSAgICAgIFFNQ19UU0FfQ0hBTk5FTChjaGFuLT5pZCk7CisJCQlxbWNfd3JpdGUxNihx bWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUVFggKyAoaSAqIDIpLCB2YWwpOworCQl9CisJfQor CisJLyogU2V0IFdyYXAgYml0IG9uIGxhc3QgZW50cmllcyAqLworCXFtY19zZXRiaXRzMTYocW1j LT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFJYICsgKChpbmZvLT5uYl9yeF90cyAtIDEpICogMiks CisJCSAgICAgIFFNQ19UU0FfV1JBUCk7CisJcW1jX3NldGJpdHMxNihxbWMtPnNjY19wcmFtICsg UU1DX0dCTF9UU0FUVFggKyAoKGluZm8tPm5iX3R4X3RzIC0gMSkgKiAyKSwKKwkJICAgICAgUU1D X1RTQV9XUkFQKTsKKworCS8qIEluaXQgUnggcG9pbnRlcnMgLi4uKi8KKwl2YWwgPSBxbWMtPnNj Y19wcmFtX29mZnNldCArIFFNQ19HQkxfVFNBVFJYOworCXFtY193cml0ZTE2KHFtYy0+c2NjX3By YW0gKyBRTUNfR0JMX1JYX1NfUFRSLCB2YWwpOworCXFtY193cml0ZTE2KHFtYy0+c2NjX3ByYW0g KyBRTUNfR0JMX1JYUFRSLCB2YWwpOworCisJLyogLi4uIGFuZCBUeCBwb2ludGVycyAqLworCXZh bCA9IHFtYy0+c2NjX3ByYW1fb2Zmc2V0ICsgUU1DX0dCTF9UU0FUVFg7CisJcW1jX3dyaXRlMTYo cW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFhfU19QVFIsIHZhbCk7CisJcW1jX3dyaXRlMTYocW1j LT5zY2NfcHJhbSArIFFNQ19HQkxfVFhQVFIsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBxbWNfc2V0dXBfdHNhKHN0cnVjdCBxbWMgKnFtYykKK3sKKwlzdHJ1Y3QgdHNhX3Nl cmlhbF9pbmZvIGluZm87CisJaW50IHJldDsKKworCS8qIFJldHJpZXZlIGluZm8gZnJvbSB0aGUg VFNBIHJlbGF0ZWQgc2VyaWFsICovCisJcmV0ID0gdHNhX3NlcmlhbF9nZXRfaW5mbyhxbWMtPnRz YV9zZXJpYWwsICZpbmZvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBT ZXR1cCBvbmUgY29tbW9uIDY0IGVudHJpZXMgdGFibGUgb3IgdHdvIDMyIGVudHJpZXMgKG9uZSBm b3IgVHggYW5kCisJICogb25lIGZvciBUeCkgYWNjb3JkaW5nIHRvIGFzc2lnbmVkIFRTIG51bWJl cnMuCisJICovCisJcmV0dXJuICgoaW5mby5uYl90eF90cyA+IDMyKSB8fCAoaW5mby5uYl9yeF90 cyA+IDMyKSkgPworCQlxbWNfc2V0dXBfdHNhXzY0cnh0eChxbWMsICZpbmZvKSA6CisJCXFtY19z ZXR1cF90c2FfMzJyeF8zMnR4KHFtYywgJmluZm8pOworfQorCitzdGF0aWMgaW50IHFtY19zZXR1 cF9jaGFuX3RybnN5bmMoc3RydWN0IHFtYyAqcW1jLCBzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pCit7 CisJc3RydWN0IHRzYV9zZXJpYWxfaW5mbyBpbmZvOworCXUxNiBmaXJzdF9yeCwgbGFzdF90eDsK Kwl1MTYgdHJuc3luYzsKKwlpbnQgcmV0OworCisJLyogUmV0cmlldmUgaW5mbyBmcm9tIHRoZSBU U0EgcmVsYXRlZCBzZXJpYWwgKi8KKwlyZXQgPSB0c2Ffc2VyaWFsX2dldF9pbmZvKGNoYW4tPnFt Yy0+dHNhX3NlcmlhbCwgJmluZm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBG aW5kIHRoZSBmaXJzdCBSeCBUUyBhbGxvY2F0ZWQgdG8gdGhlIGNoYW5uZWwgKi8KKwlmaXJzdF9y eCA9IGNoYW4tPnJ4X3RzX21hc2sgPyBfX2ZmczY0KGNoYW4tPnJ4X3RzX21hc2spICsgMSA6IDA7 CisKKwkvKiBGaW5kIHRoZSBsYXN0IFR4IFRTIGFsbG9jYXRlZCB0byB0aGUgY2hhbm5lbCAqLwor CWxhc3RfdHggPSBmbHM2NChjaGFuLT50eF90c19tYXNrKTsKKworCXRybnN5bmMgPSAwOworCWlm IChpbmZvLm5iX3J4X3RzKQorCQl0cm5zeW5jIHw9IFFNQ19TUEVfVFJOU1lOQ19SWCgoZmlyc3Rf cnggJSBpbmZvLm5iX3J4X3RzKSAqIDIpOworCWlmIChpbmZvLm5iX3R4X3RzKQorCQl0cm5zeW5j IHw9IFFNQ19TUEVfVFJOU1lOQ19UWCgobGFzdF90eCAlIGluZm8ubmJfdHhfdHMpICogMik7CisK KwlxbWNfd3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9UUk5TWU5DLCB0cm5zeW5jKTsK KworCWRldl9kYmcocW1jLT5kZXYsICJjaGFuICV1OiB0cm5zeW5jPTB4JTA0eCwgcnggJXUvJXUg MHglbGx4LCB0eCAldS8ldSAweCVsbHhcbiIsCisJCWNoYW4tPmlkLCB0cm5zeW5jLAorCQlmaXJz dF9yeCwgaW5mby5uYl9yeF90cywgY2hhbi0+cnhfdHNfbWFzaywKKwkJbGFzdF90eCwgaW5mby5u Yl90eF90cywgY2hhbi0+dHhfdHNfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBxbWNfc2V0dXBfY2hhbihzdHJ1Y3QgcW1jICpxbWMsIHN0cnVjdCBxbWNfY2hhbiAqY2hhbikK K3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljYmRfdCBfX2lvbWVtICpiZDsKKwlpbnQgcmV0OworCXUx NiB2YWw7CisKKwljaGFuLT5xbWMgPSBxbWM7CisKKwkvKiBTZXQgY2hhbm5lbCBzcGVjaWZpYyBw YXJhbWV0ZXIgYmFzZSBhZGRyZXNzICovCisJY2hhbi0+c19wYXJhbSA9IHFtYy0+ZHByYW0gKyAo Y2hhbi0+aWQgKiA2NCk7CisJLyogMTYgYmQgcGVyIGNoYW5uZWwgKDggcnggYW5kIDggdHgpICov CisJY2hhbi0+dHhiZHMgPSBxbWMtPmJkX3RhYmxlICsgKGNoYW4tPmlkICogKFFNQ19OQl9UWEJE UyArIFFNQ19OQl9SWEJEUykpOworCWNoYW4tPnJ4YmRzID0gcW1jLT5iZF90YWJsZSArIChjaGFu LT5pZCAqIChRTUNfTkJfVFhCRFMgKyBRTUNfTkJfUlhCRFMpKSArIFFNQ19OQl9UWEJEUzsKKwor CWNoYW4tPnR4YmRfZnJlZSA9IGNoYW4tPnR4YmRzOworCWNoYW4tPnR4YmRfZG9uZSA9IGNoYW4t PnR4YmRzOworCWNoYW4tPnJ4YmRfZnJlZSA9IGNoYW4tPnJ4YmRzOworCWNoYW4tPnJ4YmRfZG9u ZSA9IGNoYW4tPnJ4YmRzOworCisJLyogVEJBU0UgYW5kIFRCUFRSKi8KKwl2YWwgPSBjaGFuLT5p ZCAqIChRTUNfTkJfVFhCRFMgKyBRTUNfTkJfUlhCRFMpICogc2l6ZW9mKGNiZF90KTsKKwlxbWNf d3JpdGUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9UQkFTRSwgdmFsKTsKKwlxbWNfd3JpdGUx NihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9UQlBUUiwgdmFsKTsKKworCS8qIFJCQVNFIGFuZCBS QlBUUiovCisJdmFsID0gKChjaGFuLT5pZCAqIChRTUNfTkJfVFhCRFMgKyBRTUNfTkJfUlhCRFMp KSArIFFNQ19OQl9UWEJEUykgKiBzaXplb2YoY2JkX3QpOworCXFtY193cml0ZTE2KGNoYW4tPnNf cGFyYW0gKyBRTUNfU1BFX1JCQVNFLCB2YWwpOworCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0g KyBRTUNfU1BFX1JCUFRSLCB2YWwpOworCXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNf U1BFX1RTVEFURSwgMHgzMDAwMDAwMCk7CisJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFN Q19TUEVfUlNUQVRFLCAweDMxMDAwMDAwKTsKKwlxbWNfd3JpdGUzMihjaGFuLT5zX3BhcmFtICsg UU1DX1NQRV9aSVNUQVRFLCAweDAwMDAwMTAwKTsKKwlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJB TlNQQVJFTlQpIHsKKwkJcW1jX3dyaXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFU RSwgMHgxODAwMDA4MCk7CisJCXFtY193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RN UkJMUiwgNjApOworCQl2YWwgPSBRTUNfU1BFX0NIQU1SX01PREVfVFJBTlNQIHwgUU1DX1NQRV9D SEFNUl9UUkFOU1BfU1lOQzsKKwkJaWYgKGNoYW4tPmlzX3JldmVyc2VfZGF0YSkKKwkJCXZhbCB8 PSBRTUNfU1BFX0NIQU1SX1RSQU5TUF9SRDsKKwkJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSAr IFFNQ19TUEVfQ0hBTVIsIHZhbCk7CisJCXJldCA9IHFtY19zZXR1cF9jaGFuX3RybnN5bmMocW1j LCBjaGFuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJcW1jX3dy aXRlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwgMHgwMDAwMDA4MCk7CisJCXFt Y193cml0ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX01GTFIsIDYwKTsKKwkJcW1jX3dyaXRl MTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsCisJCQlRTUNfU1BFX0NIQU1SX01PREVf SERMQyB8IFFNQ19TUEVfQ0hBTVJfSERMQ19JRExNKTsKKwl9CisKKwkvKiBEbyBub3QgZW5hYmxl IGludGVycnVwdHMgbm93LiBUaGV5IHdpbGwgYmUgZW5hYmxlZCBsYXRlciAqLworCXFtY193cml0 ZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0lOVE1TSywgMHgwMDAwKTsKKworCS8qIEluaXQg UnggQkRzIGFuZCBzZXQgV3JhcCBiaXQgb24gbGFzdCBkZXNjcmlwdG9yICovCisJQlVJTERfQlVH X09OKFFNQ19OQl9SWEJEUyA9PSAwKTsKKwl2YWwgPSBRTUNfQkRfUlhfSTsKKwlmb3IgKGkgPSAw OyBpIDwgUU1DX05CX1JYQkRTOyBpKyspIHsKKwkJYmQgPSBjaGFuLT5yeGJkcyArIGk7CisJCXFt Y193cml0ZTE2KCZiZC0+Y2JkX3NjLCB2YWwpOworCX0KKwliZCA9IGNoYW4tPnJ4YmRzICsgUU1D X05CX1JYQkRTIC0gMTsKKwlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgdmFsIHwgUU1DX0JEX1JY X1cpOworCisJLyogSW5pdCBUeCBCRHMgYW5kIHNldCBXcmFwIGJpdCBvbiBsYXN0IGRlc2NyaXB0 b3IgKi8KKwlCVUlMRF9CVUdfT04oUU1DX05CX1RYQkRTID09IDApOworCXZhbCA9IFFNQ19CRF9U WF9JOworCWlmIChjaGFuLT5tb2RlID09IFFNQ19IRExDKQorCQl2YWwgfD0gUU1DX0JEX1RYX0wg fCBRTUNfQkRfVFhfVEM7CisJZm9yIChpID0gMDsgaSA8IFFNQ19OQl9UWEJEUzsgaSsrKSB7CisJ CWJkID0gY2hhbi0+dHhiZHMgKyBpOworCQlxbWNfd3JpdGUxNigmYmQtPmNiZF9zYywgdmFsKTsK Kwl9CisJYmQgPSBjaGFuLT50eGJkcyArIFFNQ19OQl9UWEJEUyAtIDE7CisJcW1jX3dyaXRlMTYo JmJkLT5jYmRfc2MsIHZhbCB8IFFNQ19CRF9UWF9XKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHFtY19zZXR1cF9jaGFucyhzdHJ1Y3QgcW1jICpxbWMpCit7CisJc3RydWN0IHFtY19j aGFuICpjaGFuOworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMt PmNoYW5faGVhZCwgbGlzdCkgeworCQlyZXQgPSBxbWNfc2V0dXBfY2hhbihxbWMsIGNoYW4pOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBxbWNfZmluYWxpemVfY2hhbnMoc3RydWN0IHFtYyAqcW1jKQoreworCXN0cnVjdCBxbWNf Y2hhbiAqY2hhbjsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmcW1j LT5jaGFuX2hlYWQsIGxpc3QpIHsKKwkJLyogVW5tYXNrIGNoYW5uZWwgaW50ZXJydXB0cyAqLwor CQlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfSERMQykgeworCQkJcW1jX3dyaXRlMTYoY2hhbi0+c19w YXJhbSArIFFNQ19TUEVfSU5UTVNLLAorCQkJCSAgICBRTUNfSU5UX05JRCB8IFFNQ19JTlRfSURM IHwgUU1DX0lOVF9NUkYgfAorCQkJCSAgICBRTUNfSU5UX1VOIHwgUU1DX0lOVF9SWEYgfCBRTUNf SU5UX0JTWSB8CisJCQkJICAgIFFNQ19JTlRfVFhCIHwgUU1DX0lOVF9SWEIpOworCQl9IGVsc2Ug eworCQkJcW1jX3dyaXRlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfSU5UTVNLLAorCQkJCSAg ICBRTUNfSU5UX1VOIHwgUU1DX0lOVF9CU1kgfAorCQkJCSAgICBRTUNfSU5UX1RYQiB8IFFNQ19J TlRfUlhCKTsKKwkJfQorCisJCS8qIEZvcmNlZCBzdG9wIHRoZSBjaGFubmVsICovCisJCXJldCA9 IHFtY19jaGFuX3N0b3AoY2hhbiwgUU1DX0NIQU5fQUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVy biByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcW1jX3NldHVwX2ludHMo c3RydWN0IHFtYyAqcW1jKQoreworCXVuc2lnbmVkIGludCBpOworCXUxNiBfX2lvbWVtICpsYXN0 OworCisJLyogUmF6IGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IChxbWMtPmludF9z aXplIC8gc2l6ZW9mKHUxNikpOyBpKyspCisJCXFtY193cml0ZTE2KHFtYy0+aW50X3RhYmxlICsg aSwgMHgwMDAwKTsKKworCS8qIFNldCBXcmFwIGJpdCBvbiBsYXN0IGVudHJ5ICovCisJaWYgKHFt Yy0+aW50X3NpemUgPj0gc2l6ZW9mKHUxNikpIHsKKwkJbGFzdCA9IHFtYy0+aW50X3RhYmxlICsg KHFtYy0+aW50X3NpemUgLyBzaXplb2YodTE2KSkgLSAxOworCQlxbWNfd3JpdGUxNihsYXN0LCBR TUNfSU5UX1cpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxbWNfaXJxX2dp bnQoc3RydWN0IHFtYyAqcW1jKQoreworCXN0cnVjdCBxbWNfY2hhbiAqY2hhbjsKKwl1bnNpZ25l ZCBpbnQgY2hhbl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBpbnRfZW50cnk7CisK KwlpbnRfZW50cnkgPSBxbWNfcmVhZDE2KHFtYy0+aW50X2N1cnIpOworCXdoaWxlIChpbnRfZW50 cnkgJiBRTUNfSU5UX1YpIHsKKwkJLyogQ2xlYXIgYWxsIGJ1dCB0aGUgV3JhcCBiaXQgKi8KKwkJ cW1jX3dyaXRlMTYocW1jLT5pbnRfY3VyciwgaW50X2VudHJ5ICYgUU1DX0lOVF9XKTsKKworCQlj aGFuX2lkID0gUU1DX0lOVF9HRVRfQ0hBTk5FTChpbnRfZW50cnkpOworCQljaGFuID0gcW1jLT5j aGFuc1tjaGFuX2lkXTsKKwkJaWYgKCFjaGFuKSB7CisJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiaW50 ZXJydXB0IG9uIGludmFsaWQgY2hhbiAldVxuIiwgY2hhbl9pZCk7CisJCQlnb3RvIGludF9uZXh0 OworCQl9CisKKwkJaWYgKGludF9lbnRyeSAmIFFNQ19JTlRfVFhCKQorCQkJcW1jX2NoYW5fd3Jp dGVfZG9uZShjaGFuKTsKKworCQlpZiAoaW50X2VudHJ5ICYgUU1DX0lOVF9VTikgeworCQkJZGV2 X2luZm8ocW1jLT5kZXYsICJpbnRyIGNoYW4gJXUsIDB4JTA0eCAoVU4pXG4iLCBjaGFuX2lkLAor CQkJCSBpbnRfZW50cnkpOworCQkJY2hhbi0+bmJfdHhfdW5kZXJydW4rKzsKKwkJfQorCisJCWlm IChpbnRfZW50cnkgJiBRTUNfSU5UX0JTWSkgeworCQkJZGV2X2luZm8ocW1jLT5kZXYsICJpbnRy IGNoYW4gJXUsIDB4JTA0eCAoQlNZKVxuIiwgY2hhbl9pZCwKKwkJCQkgaW50X2VudHJ5KTsKKwkJ CWNoYW4tPm5iX3J4X2J1c3krKzsKKwkJCS8qIFJlc3RhcnQgdGhlIHJlY2VpdmVyIGlmIG5lZWRl ZCAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKwkJCWlm IChjaGFuLT5yeF9wZW5kaW5nICYmICFjaGFuLT5pc19yeF9zdG9wcGVkKSB7CisJCQkJaWYgKGNo YW4tPm1vZGUgPT0gUU1DX1RSQU5TUEFSRU5UKQorCQkJCQlxbWNfd3JpdGUzMihjaGFuLT5zX3Bh cmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDE4MDAwMDgwKTsKKwkJCQllbHNlCisJCQkJCXFtY193 cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pEU1RBVEUsIDB4MDAwMDAwODApOworCQkJ CXFtY193cml0ZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JTVEFURSwgMHgzMTAwMDAwMCk7 CisJCQkJY2hhbi0+aXNfcnhfaGFsdGVkID0gZmFsc2U7CisJCQl9IGVsc2UgeworCQkJCWNoYW4t PmlzX3J4X2hhbHRlZCA9IHRydWU7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZj aGFuLT5yeF9sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAoaW50X2VudHJ5ICYgUU1DX0lOVF9S WEIpCisJCQlxbWNfY2hhbl9yZWFkX2RvbmUoY2hhbik7CisKK2ludF9uZXh0OgorCQlpZiAoaW50 X2VudHJ5ICYgUU1DX0lOVF9XKQorCQkJcW1jLT5pbnRfY3VyciA9IHFtYy0+aW50X3RhYmxlOwor CQllbHNlCisJCQlxbWMtPmludF9jdXJyKys7CisJCWludF9lbnRyeSA9IHFtY19yZWFkMTYocW1j LT5pbnRfY3Vycik7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcW1jX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHFtYyAqcW1jID0gKHN0cnVjdCBxbWMg Kilwcml2OworCXUxNiBzY2NlOworCisJc2NjZSA9IHFtY19yZWFkMTYocW1jLT5zY2NfcmVncyAr IFNDQ19TQ0NFKTsKKwlxbWNfd3JpdGUxNihxbWMtPnNjY19yZWdzICsgU0NDX1NDQ0UsIHNjY2Up OworCisJaWYgKHVubGlrZWx5KHNjY2UgJiBTQ0NfU0NDRV9JUU9WKSkKKwkJZGV2X2luZm8ocW1j LT5kZXYsICJJUlEgcXVldWUgb3ZlcmZsb3dcbiIpOworCisJaWYgKHVubGlrZWx5KHNjY2UgJiBT Q0NfU0NDRV9HVU4pKQorCQlkZXZfZXJyKHFtYy0+ZGV2LCAiR2xvYmFsIHRyYW5zbWl0dGVyIHVu ZGVycnVuXG4iKTsKKworCWlmICh1bmxpa2VseShzY2NlICYgU0NDX1NDQ0VfR09WKSkKKwkJZGV2 X2VycihxbWMtPmRldiwgIkdsb2JhbCByZWNlaXZlciBvdmVycnVuXG4iKTsKKworCS8qIG5vcm1h bCBpbnRlcnJ1cHQgKi8KKwlpZiAobGlrZWx5KHNjY2UgJiBTQ0NfU0NDRV9HSU5UKSkKKwkJcW1j X2lycV9naW50KHFtYyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQg cW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXVuc2lnbmVkIGludCBuYl9jaGFuczsK KwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcW1jICpxbWM7CisJaW50IGlycTsKKwlp bnQgcmV0OworCisJcW1jID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcW1jKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFxbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcW1jLT5kZXYg PSAmcGRldi0+ZGV2OworCUlOSVRfTElTVF9IRUFEKCZxbWMtPmNoYW5faGVhZCk7CisKKwlxbWMt PnNjY19yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCAi c2NjX3JlZ3MiKTsKKwlpZiAoSVNfRVJSKHFtYy0+c2NjX3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VS UihxbWMtPnNjY19yZWdzKTsKKworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNjY19wcmFtIik7CisJaWYgKCFyZXMpCisJCXJldHVy biAtRUlOVkFMOworCXFtYy0+c2NjX3ByYW1fb2Zmc2V0ID0gcmVzLT5zdGFydCAtIGdldF9pbW1y YmFzZSgpOworCXFtYy0+c2NjX3ByYW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UocW1jLT5kZXYs IHJlcyk7CisJaWYgKElTX0VSUihxbWMtPnNjY19wcmFtKSkKKwkJcmV0dXJuIFBUUl9FUlIocW1j LT5zY2NfcHJhbSk7CisKKwlxbWMtPmRwcmFtICA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNv dXJjZV9ieW5hbWUocGRldiwgImRwcmFtIik7CisJaWYgKElTX0VSUihxbWMtPmRwcmFtKSkKKwkJ cmV0dXJuIFBUUl9FUlIocW1jLT5kcHJhbSk7CisKKwlxbWMtPnRzYV9zZXJpYWwgPSBkZXZtX3Rz YV9zZXJpYWxfZ2V0X2J5cGhhbmRsZShxbWMtPmRldiwgbnAsICJmc2wsdHNhLXNlcmlhbCIpOwor CWlmIChJU19FUlIocW1jLT50c2Ffc2VyaWFsKSkgeworCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShx bWMtPmRldiwgUFRSX0VSUihxbWMtPnRzYV9zZXJpYWwpLAorCQkJCSAgICAgIkZhaWxlZCB0byBn ZXQgVFNBIHNlcmlhbFxuIik7CisJfQorCisJLyogQ29ubmVjdCB0aGUgc2VyaWFsIChTQ0MpIHRv IFRTQSAqLworCXJldCA9IHRzYV9zZXJpYWxfY29ubmVjdChxbWMtPnRzYV9zZXJpYWwpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihxbWMtPmRldiwgIkZhaWxlZCB0byBjb25uZWN0IFRTQSBzZXJp YWxcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFBhcnNlIGNoYW5uZWxzIGluZm9ybWF0 aW9uc3MgKi8KKwlyZXQgPSBxbWNfb2ZfcGFyc2VfY2hhbnMocW1jLCBucCk7CisJaWYgKHJldCkK KwkJZ290byBlcnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0OworCisJbmJfY2hhbnMgPSBxbWNfbmJf Y2hhbnMocW1jKTsKKworCS8qIEluaXQgR01TUl9IIGFuZCBHTVNSX0wgcmVnaXN0ZXJzICovCisJ cW1jX3dyaXRlMzIocW1jLT5zY2NfcmVncyArIFNDQ19HU01SSCwKKwkJICAgIFNDQ19HU01SSF9D RFMgfCBTQ0NfR1NNUkhfQ1RTUyB8IFNDQ19HU01SSF9DRFAgfCBTQ0NfR1NNUkhfQ1RTUCk7CisK KwkvKiBlbmFibGUgUU1DIG1vZGUgKi8KKwlxbWNfd3JpdGUzMihxbWMtPnNjY19yZWdzICsgU0ND X0dTTVJMLCBTQ0NfR1NNUkxfTU9ERV9RTUMpOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgYnVm ZmVyIGRlc2NyaXB0b3IgdGFibGUKKwkgKiA4IHJ4IGFuZCA4IHR4IGRlc2NyaXB0b3JzIHBlciBj aGFubmVsCisJICovCisJcW1jLT5iZF9zaXplID0gKG5iX2NoYW5zICogKFFNQ19OQl9UWEJEUyAr IFFNQ19OQl9SWEJEUykpICogc2l6ZW9mKGNiZF90KTsKKwlxbWMtPmJkX3RhYmxlID0gZG1hbV9h bGxvY19jb2hlcmVudChxbWMtPmRldiwgcW1jLT5iZF9zaXplLAorCQkmcW1jLT5iZF9kbWFfYWRk ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxbWMtPmJkX3RhYmxlKSB7CisJCWRldl9lcnIocW1jLT5k ZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgYmQgdGFibGVcbiIpOworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7CisJfQorCW1lbXNldChxbWMtPmJkX3Rh YmxlLCAwLCBxbWMtPmJkX3NpemUpOworCisJcW1jX3dyaXRlMzIocW1jLT5zY2NfcHJhbSArIFFN Q19HQkxfTUNCQVNFLCBxbWMtPmJkX2RtYV9hZGRyKTsKKworCS8qIEFsbG9jYXRlIHRoZSBpbnRl cnJ1cHQgdGFibGUgKi8KKwlxbWMtPmludF9zaXplID0gUU1DX05CX0lOVFMgKiBzaXplb2YodTE2 KTsKKwlxbWMtPmludF90YWJsZSA9IGRtYW1fYWxsb2NfY29oZXJlbnQocW1jLT5kZXYsIHFtYy0+ aW50X3NpemUsCisJCSZxbWMtPmludF9kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxbWMt PmludF90YWJsZSkgeworCQlkZXZfZXJyKHFtYy0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGlu dGVycnVwdCB0YWJsZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3RzYV9zZXJp YWxfZGlzY29ubmVjdDsKKwl9CisJbWVtc2V0KHFtYy0+aW50X3RhYmxlLCAwLCBxbWMtPmludF9z aXplKTsKKworCXFtYy0+aW50X2N1cnIgPSBxbWMtPmludF90YWJsZTsKKwlxbWNfd3JpdGUzMihx bWMtPnNjY19wcmFtICsgUU1DX0dCTF9JTlRCQVNFLCBxbWMtPmludF9kbWFfYWRkcik7CisJcW1j X3dyaXRlMzIocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfSU5UUFRSLCBxbWMtPmludF9kbWFfYWRk cik7CisKKwkvKiBTZXQgTVJCTFIgKHZhbGlkIGZvciBIRExDIG9ubHkpIG1heCBNUlUgKyBtYXgg Q1JDICovCisJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfTVJCTFIsIEhETENf TUFYX01SVSArIDQpOworCisJcW1jX3dyaXRlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfR1JG VEhSLCAxKTsKKwlxbWNfd3JpdGUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9HUkZDTlQsIDEp OworCisJcW1jX3dyaXRlMzIocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfQ19NQVNLMzIsIDB4REVC QjIwRTMpOworCXFtY193cml0ZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX0NfTUFTSzE2LCAw eEYwQjgpOworCisJcmV0ID0gcW1jX3NldHVwX3RzYShxbWMpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX3RzYV9zZXJpYWxfZGlzY29ubmVjdDsKKworCXFtY193cml0ZTE2KHFtYy0+c2NjX3ByYW0g KyBRTUNfR0JMX1FNQ1NUQVRFLCAweDgwMDApOworCisJcmV0ID0gcW1jX3NldHVwX2NoYW5zKHFt Yyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0OworCisJLyog SW5pdCBpbnRlcnJ1cHRzIHRhYmxlICovCisJcmV0ID0gcW1jX3NldHVwX2ludHMocW1jKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl90c2Ffc2VyaWFsX2Rpc2Nvbm5lY3Q7CisKKwkvKiBEaXNhYmxl IGFuZCBjbGVhciBpbnRlcnJ1cHRzLCAgc2V0IHRoZSBpcnEgaGFuZGxlciAqLworCXFtY193cml0 ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDTSwgMHgwMDAwKTsKKwlxbWNfd3JpdGUxNihxbWMt PnNjY19yZWdzICsgU0NDX1NDQ0UsIDB4MDAwRik7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJZ290byBlcnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0 OworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEocW1jLT5kZXYsIGlycSwgcW1jX2lycV9oYW5kbGVy LCAwLCAicW1jIiwgcW1jKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdHNhX3NlcmlhbF9k aXNjb25uZWN0OworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlxbWNfd3JpdGUxNihxbWMt PnNjY19yZWdzICsgU0NDX1NDQ00sCisJCVNDQ19TQ0NFX0lRT1YgfCBTQ0NfU0NDRV9HSU5UIHwg U0NDX1NDQ0VfR1VOIHwgU0NDX1NDQ0VfR09WKTsKKworCXJldCA9IHFtY19maW5hbGl6ZV9jaGFu cyhxbWMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kaXNhYmxlX2ludHI7CisKKwkvKiBF bmFibGUgdHJhbnNtaXRlciBhbmQgcmVjZWl2ZXIgKi8KKwlxbWNfc2V0Yml0czMyKHFtYy0+c2Nj X3JlZ3MgKyBTQ0NfR1NNUkwsIFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKTsKKworCXBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHFtYyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2Rpc2Fi bGVfaW50cjoKKwlxbWNfd3JpdGUxNihxbWMtPnNjY19yZWdzICsgU0NDX1NDQ00sIDApOworCitl cnJfdHNhX3NlcmlhbF9kaXNjb25uZWN0OgorCXRzYV9zZXJpYWxfZGlzY29ubmVjdChxbWMtPnRz YV9zZXJpYWwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcW1jX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBxbWMgKnFtYyA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogRGlzYWJsZSB0cmFuc21pdGVyIGFuZCByZWNlaXZl ciAqLworCXFtY19zZXRiaXRzMzIocW1jLT5zY2NfcmVncyArIFNDQ19HU01STCwgMCk7CisKKwkv KiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlxbWNfd3JpdGUxNihxbWMtPnNjY19yZWdzICsgU0ND X1NDQ00sIDApOworCisJLyogRGlzY29ubmVjdCB0aGUgc2VyaWFsIGZyb20gVFNBICovCisJdHNh X3NlcmlhbF9kaXNjb25uZWN0KHFtYy0+dHNhX3NlcmlhbCk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcW1jX2lkX3RhYmxlW10gPSB7CisJeyAu Y29tcGF0aWJsZSA9ICJmc2wsY3BtMS1zY2MtcW1jIiB9LAorCXt9IC8qIHNlbnRpbmVsICovCit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcW1jX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgcW1jX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9 ICJmc2wtcW1jIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHFtY19pZF90YWJs ZSksCisJfSwKKwkucHJvYmUgPSBxbWNfcHJvYmUsCisJLnJlbW92ZSA9IHFtY19yZW1vdmUsCit9 OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihxbWNfZHJpdmVyKTsKKworc3RydWN0IHFtY19jaGFu ICpxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNo YXIgKnBoYW5kbGVfbmFtZSkKK3sKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIG91dF9hcmdzOwor CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHFtY19jaGFuICpxbWNfY2hh bjsKKwlzdHJ1Y3QgcW1jICpxbWM7CisJaW50IHJldDsKKworCXJldCA9IG9mX3BhcnNlX3BoYW5k bGVfd2l0aF9maXhlZF9hcmdzKG5wLCBwaGFuZGxlX25hbWUsIDEsIDAsCisJCQkJCSAgICAgICAm b3V0X2FyZ3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJaWYg KCFvZl9tYXRjaF9ub2RlKHFtY19kcml2ZXIuZHJpdmVyLm9mX21hdGNoX3RhYmxlLCBvdXRfYXJn cy5ucCkpIHsKKwkJb2Zfbm9kZV9wdXQob3V0X2FyZ3MubnApOworCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKwl9CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShvdXRfYXJncy5u cCk7CisJb2Zfbm9kZV9wdXQob3V0X2FyZ3MubnApOworCWlmICghcGRldikKKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT0RFVik7CisKKwlxbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlp ZiAoIXFtYykgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gRVJSX1BU UigtRVBST0JFX0RFRkVSKTsKKwl9CisKKwlpZiAob3V0X2FyZ3MuYXJnc19jb3VudCAhPSAxKSB7 CisJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OworCX0KKworCWlmIChvdXRfYXJncy5hcmdzWzBdID49IEFSUkFZX1NJWkUocW1jLT5jaGFucykp IHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisJfQorCisJcW1jX2NoYW4gPSBxbWMtPmNoYW5zW291dF9hcmdzLmFyZ3NbMF1dOworCWlm ICghcW1jX2NoYW4pIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT0VOVCk7CisJfQorCisJcmV0dXJuIHFtY19jaGFuOworfQorRVhQT1JUX1NZTUJP TChxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKTsKKwordm9pZCBxbWNfY2hhbl9wdXQoc3RydWN0IHFt Y19jaGFuICpjaGFuKQoreworCXB1dF9kZXZpY2UoY2hhbi0+cW1jLT5kZXYpOworfQorRVhQT1JU X1NZTUJPTChxbWNfY2hhbl9wdXQpOworCitzdGF0aWMgdm9pZCBkZXZtX3FtY19jaGFuX3JlbGVh c2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCit7CisJc3RydWN0IHFtY19jaGFuICoq cW1jX2NoYW4gPSByZXM7CisKKwlxbWNfY2hhbl9wdXQoKnFtY19jaGFuKTsKK30KKworc3RydWN0 IHFtY19jaGFuICpkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5kbGUoc3RydWN0IGRldmljZSAqZGV2 LAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSAgICAgY29uc3QgY2hh ciAqcGhhbmRsZV9uYW1lKQoreworCXN0cnVjdCBxbWNfY2hhbiAqcW1jX2NoYW47CisJc3RydWN0 IHFtY19jaGFuICoqZHI7CisKKwlkciA9IGRldnJlc19hbGxvYyhkZXZtX3FtY19jaGFuX3JlbGVh c2UsIHNpemVvZigqZHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyKQorCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKKworCXFtY19jaGFuID0gcW1jX2NoYW5fZ2V0X2J5cGhhbmRsZShucCwgcGhh bmRsZV9uYW1lKTsKKwlpZiAoIUlTX0VSUihxbWNfY2hhbikpIHsKKwkJKmRyID0gcW1jX2NoYW47 CisJCWRldnJlc19hZGQoZGV2LCBkcik7CisJfSBlbHNlIHsKKwkJZGV2cmVzX2ZyZWUoZHIpOwor CX0KKworCXJldHVybiBxbWNfY2hhbjsKK30KK0VYUE9SVF9TWU1CT0woZGV2bV9xbWNfY2hhbl9n ZXRfYnlwaGFuZGxlKTsKKworTU9EVUxFX0FVVEhPUigiSGVydmUgQ29kaW5hIDxoZXJ2ZS5jb2Rp bmFAYm9vdGxpbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQTSBRTUMgZHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvYy9mc2wvcWUv cW1jLmggYi9pbmNsdWRlL3NvYy9mc2wvcWUvcW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4zYzYxYTUwZDJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRl L3NvYy9mc2wvcWUvcW1jLmgKQEAgLTAsMCArMSw3MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKy8qCisgKiBRTUMgbWFuYWdlbWVudAorICoKKyAq IENvcHlyaWdodCAyMDIyIENTIEdST1VQIEZyYW5jZQorICoKKyAqIEF1dGhvcjogSGVydmUgQ29k aW5hIDxoZXJ2ZS5jb2RpbmFAYm9vdGxpbi5jb20+CisgKi8KKyNpZm5kZWYgX19TT0NfRlNMX1FN Q19IX18KKyNkZWZpbmUgX19TT0NfRlNMX1FNQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgcW1jX2No YW47CisKK3N0cnVjdCBxbWNfY2hhbiAqcW1jX2NoYW5fZ2V0X2J5cGhhbmRsZShzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUpOwordm9pZCBxbWNfY2hhbl9w dXQoc3RydWN0IHFtY19jaGFuICpjaGFuKTsKK3N0cnVjdCBxbWNfY2hhbiAqZGV2bV9xbWNfY2hh bl9nZXRfYnlwaGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpu cCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUpOworCitlbnVtIHFtY19tb2Rl IHsKKwlRTUNfVFJBTlNQQVJFTlQsCisJUU1DX0hETEMsCit9OworCitzdHJ1Y3QgcW1jX2NoYW5f aW5mbyB7CisJZW51bSBxbWNfbW9kZSBtb2RlOworCXVuc2lnbmVkIGxvbmcgcnhfZnNfcmF0ZTsK Kwl1bnNpZ25lZCBsb25nIHJ4X2JpdF9yYXRlOworCXU4IG5iX3J4X3RzOworCXVuc2lnbmVkIGxv bmcgdHhfZnNfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHR4X2JpdF9yYXRlOworCXU4IG5iX3R4X3Rz OworfTsKKworaW50IHFtY19jaGFuX2dldF9pbmZvKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgc3Ry dWN0IHFtY19jaGFuX2luZm8gKmluZm8pOworCitzdHJ1Y3QgcW1jX2NoYW5fcGFyYW0geworCWVu dW0gcW1jX21vZGUgbW9kZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1MTYgbWF4X3J4X2J1 Zl9zaXplOworCQkJdTE2IG1heF9yeF9mcmFtZV9zaXplOworCQkJYm9vbCBpc19jcmMzMjsKKwkJ fSBoZGxjOworCQlzdHJ1Y3QgeworCQkJdTE2IG1heF9yeF9idWZfc2l6ZTsKKwkJfSB0cmFuc3A7 CisJfTsKK307CisKK2ludCBxbWNfY2hhbl9zZXRfcGFyYW0oc3RydWN0IHFtY19jaGFuICpjaGFu LCBjb25zdCBzdHJ1Y3QgcW1jX2NoYW5fcGFyYW0gKnBhcmFtKTsKKworaW50IHFtY19jaGFuX3dy aXRlX3N1Ym1pdChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90 IGxlbmd0aCwKKwkJCSAgdm9pZCAoKmNvbXBsZXRlKSh2b2lkICpjb250ZXh0KSwgdm9pZCAqY29u dGV4dCk7CisKK2ludCBxbWNfY2hhbl9yZWFkX3N1Ym1pdChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4s IGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IGxlbmd0aCwKKwkJCSB2b2lkICgqY29tcGxldGUpKHZv aWQgKmNvbnRleHQsIHNpemVfdCBsZW5ndGgpLAorCQkJIHZvaWQgKmNvbnRleHQpOworCisjZGVm aW5lIFFNQ19DSEFOX1JFQUQgICgxPDwwKQorI2RlZmluZSBRTUNfQ0hBTl9XUklURSAoMTw8MSkK KyNkZWZpbmUgUU1DX0NIQU5fQUxMICAgKFFNQ19DSEFOX1JFQUQgfCBRTUNfQ0hBTl9XUklURSkK KworaW50IHFtY19jaGFuX3N0YXJ0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVjdGlv bik7CitpbnQgcW1jX2NoYW5fc3RvcChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGludCBkaXJlY3Rp b24pOworaW50IHFtY19jaGFuX3Jlc2V0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVj dGlvbik7CisKKyNlbmRpZiAvKiBfX1NPQ19GU0xfUU1DX0hfXyAqLwotLSAKMi4zOS4xCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=