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 4152AC4708D for ; Fri, 6 Jan 2023 16:42:28 +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=SczFklHME6K/5B3xzG5XRevHQT85/H73g7EMqouJlfk=; b=mnONKjgoM68NVG itJENPcvQWCLNIPzktLsk0zIYwee6w/hK70WQbhKapA2VkJSBafXSUupzzyOl/tpJeQ/Z2Otyolrm olWnjsOjqikwZ2pXQEOdka7Z7ufjJO9b5JAWLpUrefskX2ftaEADmWTuIAwP75rnarjrI+eM2m5zv kELrE9fqE1X9MY+oQk2TOEMvotFYbhW7WZHJ51zGtzn1GXGeJAOcoF2qis+h2ORLjPWnDDMzRvml8 aNLZrW9A2mpNz51aih7kfHyYOSJfqcpnt+wQeg2wvkhbLePAcSuYBsadU4gcpm1cJlvLyvcVQu91v WhWg9VDCLk3FQEfw4JPg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDpmR-00AKxk-9u; Fri, 06 Jan 2023 16:41:19 +0000 Received: from relay11.mail.gandi.net ([217.70.178.231]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDpjX-00AHzg-Uy for linux-arm-kernel@lists.infradead.org; Fri, 06 Jan 2023 16:38:25 +0000 Received: (Authenticated sender: herve.codina@bootlin.com) by mail.gandi.net (Postfix) with ESMTPA id 9E66710000D; Fri, 6 Jan 2023 16:38:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1673023098; 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=A+FmcSMcy/YgNUSLRrvRIQboSM5Uw0nWB8bZ2PMnsSc=; b=omXVvzh9HqwA0C8NqKaer7lEpYSgn9TE1vSi/FwoNQf7pRoSXtcw/7dfdtNtNhcltvZbRc HIslERSvJIAsWfp/JX96YT/1QfT5OlTV+oEmyl3pmyG9zy/hsksG33X+RPJlfulmjUc7DP 0A5Bh+eM4dFX+M0YfjxP4s2gzEXz6UV2m/zBYuiqWhmgvo01Urmc80/PhZMu57C69fuV8W eb8tmE4zLW+9r+w7TdVvLz4OPRwgiQdua7se206MojbJjnAFLCaXVXnSkJeQCveQJ0v+YW Ql0p6hKvTPbTIwQjGu88pdE03BPaeX3ONVE8QvSUENrmG9FX6DmewQjvTF6Wjg== 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 v2 06/10] soc: fsl: qe: Add support for QMC Date: Fri, 6 Jan 2023 17:37:42 +0100 Message-Id: <20230106163746.439717-7-herve.codina@bootlin.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230106163746.439717-1-herve.codina@bootlin.com> References: <20230106163746.439717-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-20230106_083820_474400_15279612 X-CRM114-Status: GOOD ( 26.18 ) 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 VGhlIFFNQyAoUVVJQ0MgTXVsdGljaGFubmVsIENvbnRyb2xsZXIpIGlzIGF2YWlsYWJsZSBvbiBz b21lClBvd2VyUVVJQ0MgU29DIHN1Y2ggYXMgdGhlIE1QQzg4NSBvciBNUEM4NjYuCgpJdCBlbXVs YXRlcyB1cCB0byA2NCBjaGFubmVscyB3aXRoaW4gb25lIHNlcmlhbCBjb250cm9sbGVyCnVzaW5n IHRoZSBzYW1lIFRETSBwaHlzaWNhbCBpbnRlcmZhY2Ugcm91dGVkIGZyb20gdGhlIFRTQS4KClNp Z25lZC1vZmYtYnk6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPgotLS0K IGRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnICB8ICAgMTIgKwogZHJpdmVycy9zb2MvZnNsL3Fl L01ha2VmaWxlIHwgICAgMSArCiBkcml2ZXJzL3NvYy9mc2wvcWUvcW1jLmMgICAgfCAxNDkzICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL3NvYy9mc2wvcWUvcW1j LmggICAgfCAgIDcxICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE1NzcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2ZzbC9xZS9xbWMuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2Zz bC9xZS9LY29uZmlnIGIvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcKaW5kZXggNjBlYzExYzlm NGQ5Li4yNWIyMTgzNTFhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmln CisrKyBiL2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnCkBAIC00NCw2ICs0NCwxOCBAQCBjb25m aWcgQ1BNX1RTQQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGlzCiAJICBj b250cm9sbGVyCiAKK2NvbmZpZyBDUE1fUU1DCisJdHJpc3RhdGUgIkNQTSBRTUMgc3VwcG9ydCIK KwlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQorCWRlcGVuZHMgb24gQ1BNMSB8fCAoUFBDICYm IENPTVBJTEVfVEVTVCkKKwlkZXBlbmRzIG9uIENQTV9UU0EKKwloZWxwCisJICBGcmVlc2NhbGUg Q1BNIFFVSUNDIE11bHRpY2hhbm5lbCBDb250cm9sbGVyCisJICAoUU1DKQorCisJICBUaGlzIG9w dGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoaXMKKwkgIGNvbnRyb2xsZXIKKwogY29uZmlnIFFF X1RETQogCWJvb2wKIAlkZWZhdWx0IHkgaWYgRlNMX1VDQ19IRExDCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUKaW5k ZXggNDVjOTYxYWNjODFiLi5lYzg1MDZlMTMxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL2Zz bC9xZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NvYy9mc2wvcWUvTWFrZWZpbGUKQEAgLTUsNiAr NSw3IEBACiBvYmotJChDT05GSUdfUVVJQ0NfRU5HSU5FKSs9IHFlLm8gcWVfY29tbW9uLm8gcWVf aWMubyBxZV9pby5vCiBvYmotJChDT05GSUdfQ1BNKQkrPSBxZV9jb21tb24ubwogb2JqLSQoQ09O RklHX0NQTV9UU0EpCSs9IHRzYS5vCitvYmotJChDT05GSUdfQ1BNX1FNQykJKz0gcW1jLm8KIG9i ai0kKENPTkZJR19VQ0MpCSs9IHVjYy5vCiBvYmotJChDT05GSUdfVUNDX1NMT1cpCSs9IHVjY19z bG93Lm8KIG9iai0kKENPTkZJR19VQ0NfRkFTVCkJKz0gdWNjX2Zhc3QubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zb2MvZnNsL3FlL3FtYy5jIGIvZHJpdmVycy9zb2MvZnNsL3FlL3FtYy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODdlNzg4ZTJhOGNlCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9zb2MvZnNsL3FlL3FtYy5jCkBAIC0wLDAgKzEsMTQ5MyBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBRTUMgZHJpdmVyCisg KgorICogQ29weXJpZ2h0IDIwMjIgQ1MgR1JPVVAgRnJhbmNlCisgKgorICogQXV0aG9yOiBIZXJ2 ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4KKyAqLworCisjaW5jbHVkZSA8c29j L2ZzbC9xZS9xbWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUg PGxpbnV4L2hkbGMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxs aW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29m Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c29jL2Zz bC9jcG0uaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgInRzYS5oIgor CisvKiBTQ0MgZ2VuZXJhbCBtb2RlIHJlZ2lzdGVyIGhpZ2ggKDMyIGJpdHMpICovCisjZGVmaW5l IFNDQ19HU01STAkweDAwCisjZGVmaW5lIFNDQ19HU01STF9FTlIJCSgxIDw8IDUpCisjZGVmaW5l IFNDQ19HU01STF9FTlQJCSgxIDw8IDQpCisjZGVmaW5lIFNDQ19HU01STF9NT0RFX1FNQwkoMHgw QSA8PCAwKQorCisvKiBTQ0MgZ2VuZXJhbCBtb2RlIHJlZ2lzdGVyIGxvdyAoMzIgYml0cykgKi8K KyNkZWZpbmUgU0NDX0dTTVJICTB4MDQKKyNkZWZpbmUgICBTQ0NfR1NNUkhfQ1RTUwkoMSA8PCA3 KQorI2RlZmluZSAgIFNDQ19HU01SSF9DRFMJCSgxIDw8IDgpCisjZGVmaW5lICAgU0NDX0dTTVJI X0NUU1AJKDEgPDwgOSkKKyNkZWZpbmUgICBTQ0NfR1NNUkhfQ0RQCQkoMSA8PCAxMCkKKworLyog U0NDIGV2ZW50IHJlZ2lzdGVyICgxNiBiaXRzKSAqLworI2RlZmluZSBTQ0NfU0NDRQkweDEwCisj ZGVmaW5lICAgU0NDX1NDQ0VfSVFPVgkJKDEgPDwgMykKKyNkZWZpbmUgICBTQ0NfU0NDRV9HSU5U CQkoMSA8PCAyKQorI2RlZmluZSAgIFNDQ19TQ0NFX0dVTgkJKDEgPDwgMSkKKyNkZWZpbmUgICBT Q0NfU0NDRV9HT1YJCSgxIDw8IDApCisKKy8qIFNDQyBtYXNrIHJlZ2lzdGVyICgxNiBiaXRzKSAq LworI2RlZmluZSBTQ0NfU0NDTQkweDE0CisvKiBNdWx0aWNoYW5uZWwgYmFzZSBwb2ludGVyICgz MiBiaXRzKSAqLworI2RlZmluZSBRTUNfR0JMX01DQkFTRQkJMHgwMAorLyogTXVsdGljaGFubmVs IGNvbnRyb2xsZXIgc3RhdGUgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfUU1DU1RBVEUJ MHgwNAorLyogTWF4aW11bSByZWNlaXZlIGJ1ZmZlciBsZW5ndGggKDE2IGJpdHMpICovCisjZGVm aW5lIFFNQ19HQkxfTVJCTFIJCTB4MDYKKy8qIFR4IHRpbWUtc2xvdCBhc3NpZ25tZW50IHRhYmxl IHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfVFhfU19QVFIJMHgwOAorLyog UnggcG9pbnRlciAoMTYgYml0cykgKi8KKyNkZWZpbmUgUU1DX0dCTF9SWFBUUgkJMHgwQQorLyog R2xvYmFsIHJlY2VpdmUgZnJhbWUgdGhyZXNob2xkICgxNiBiaXRzKSAqLworI2RlZmluZSBRTUNf R0JMX0dSRlRIUgkJMHgwQworLyogR2xvYmFsIHJlY2VpdmUgZnJhbWUgY291bnQgKDE2IGJpdHMp ICovCisjZGVmaW5lIFFNQ19HQkxfR1JGQ05UCQkweDBFCisvKiBNdWx0aWNoYW5uZWwgaW50ZXJy dXB0IGJhc2UgYWRkcmVzcyAoMzIgYml0cykgKi8KKyNkZWZpbmUgUU1DX0dCTF9JTlRCQVNFCQkw eDEwCisvKiBNdWx0aWNoYW5uZWwgaW50ZXJydXB0IHBvaW50ZXIgKDMyIGJpdHMpICovCisjZGVm aW5lIFFNQ19HQkxfSU5UUFRSCQkweDE0CisvKiBSeCB0aW1lLXNsb3QgYXNzaWdubWVudCB0YWJs ZSBwb2ludGVyICgxNiBiaXRzKSAqLworI2RlZmluZSBRTUNfR0JMX1JYX1NfUFRSCTB4MTgKKy8q IFR4IHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19HQkxfVFhQVFIJCTB4MUEKKy8q IENSQyBjb25zdGFudCAoMzIgYml0cykgKi8KKyNkZWZpbmUgUU1DX0dCTF9DX01BU0szMgkweDFD CisvKiBUaW1lIHNsb3QgYXNzaWdubWVudCB0YWJsZSBSeCAoMzIgeCAxNiBiaXRzKSAqLworI2Rl ZmluZSBRTUNfR0JMX1RTQVRSWAkJMHgyMAorLyogVGltZSBzbG90IGFzc2lnbm1lbnQgdGFibGUg VHggKDMyIHggMTYgYml0cykgKi8KKyNkZWZpbmUgUU1DX0dCTF9UU0FUVFgJCTB4NjAKKy8qIENS QyBjb25zdGFudCAoMTYgYml0cykgKi8KKyNkZWZpbmUgUU1DX0dCTF9DX01BU0sxNgkweEEwCisK Ky8qIFRTQSBlbnRyeSAoMTZiaXQgZW50cnkgaW4gVFNBVFJYIGFuZCBUU0FUVFgpICovCisjZGVm aW5lIFFNQ19UU0FfVkFMSUQJCSgxIDw8IDE1KQorI2RlZmluZSBRTUNfVFNBX1dSQVAJCSgxIDw8 IDE0KQorI2RlZmluZSBRTUNfVFNBX01BU0sJCSgweDMwM0YpCisjZGVmaW5lIFFNQ19UU0FfQ0hB Tk5FTCh4KQkoKHgpIDw8IDYpCisKKy8qIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIGJhc2UgYWRkcmVz cyAoMTYgYml0cywgb2Zmc2V0IGZyb20gTUNCQVNFKSAqLworI2RlZmluZSBRTUNfU1BFX1RCQVNF CTB4MDAKKworLyogQ2hhbm5lbCBtb2RlIHJlZ2lzdGVyICgxNiBiaXRzKSAqLworI2RlZmluZSBR TUNfU1BFX0NIQU1SCTB4MDIKKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX01PREVfSERMQwkoMSA8 PCAxNSkKKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX01PREVfVFJBTlNQCSgoMCA8PCAxNSkgfCAo MSA8PCAxMykpCisjZGVmaW5lICAgUU1DX1NQRV9DSEFNUl9FTlQJCSgxIDw8IDEyKQorI2RlZmlu ZSAgIFFNQ19TUEVfQ0hBTVJfUE9MCQkoMSA8PCA4KQorI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJf SERMQ19JRExNCSgxIDw8IDEzKQorI2RlZmluZSAgIFFNQ19TUEVfQ0hBTVJfSERMQ19DUkMJKDEg PDwgNykKKyNkZWZpbmUgICBRTUNfU1BFX0NIQU1SX0hETENfTk9GCSgweDBmIDw8IDApCisjZGVm aW5lICAgUU1DX1NQRV9DSEFNUl9UUkFOU1BfUkQJKDEgPDwgMTQpCisjZGVmaW5lICAgUU1DX1NQ RV9DSEFNUl9UUkFOU1BfU1lOQwkoMSA8PCAxMCkKKworLyogVHggaW50ZXJuYWwgc3RhdGUgKDMy IGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfVFNUQVRFCTB4MDQKKy8qIFR4IGJ1ZmZlciBkZXNj cmlwdG9yIHBvaW50ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfVEJQVFIJMHgwQwor LyogWmVyby1pbnNlcnRpb24gc3RhdGUgKDMyIGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfWklT VEFURQkweDE0CisvKiBDaGFubmVs4oCZcyBpbnRlcnJ1cHQgbWFzayBmbGFncyAoMTYgYml0cykg Ki8KKyNkZWZpbmUgUU1DX1NQRV9JTlRNU0sJMHgxQworLyogUnggYnVmZmVyIGRlc2NyaXB0b3Ig YmFzZSBhZGRyZXNzICgxNiBiaXRzLCBvZmZzZXQgZnJvbSBNQ0JBU0UpICovCisjZGVmaW5lIFFN Q19TUEVfUkJBU0UJMHgyMAorLyogSERMQzogTWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIg KDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfTUZMUgkweDIyCisvKiBUUkFOU1BBUkVOVDog VHJhbnNwYXJlbnQgbWF4aW11bSByZWNlaXZlIGxlbmd0aCAoMTYgYml0cykgKi8KKyNkZWZpbmUg UU1DX1NQRV9UTVJCTFIJMHgyMgorLyogUnggaW50ZXJuYWwgc3RhdGUgKDMyIGJpdHMpICovCisj ZGVmaW5lIFFNQ19TUEVfUlNUQVRFCTB4MjQKKy8qIFJ4IGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50 ZXIgKDE2IGJpdHMpICovCisjZGVmaW5lIFFNQ19TUEVfUkJQVFIJMHgyQworLyogUGFja3MgNCBi eXRlcyB0byAxIGxvbmcgd29yZCBiZWZvcmUgd3JpdGluZyB0byBidWZmZXIgKDMyIGJpdHMpICov CisjZGVmaW5lIFFNQ19TUEVfUlBBQ0sJMHgzMAorLyogWmVybyBkZWxldGlvbiBzdGF0ZSAoMzIg Yml0cykgKi8KKyNkZWZpbmUgUU1DX1NQRV9aRFNUQVRFCTB4MzQKKworLyogVHJhbnNwYXJlbnQg c3luY2hyb25pemF0aW9uICgxNiBiaXRzKSAqLworI2RlZmluZSBRTUNfU1BFX1RSTlNZTkMgMHgz QworI2RlZmluZSAgIFFNQ19TUEVfVFJOU1lOQ19SWCh4KQkoKHgpIDw8IDgpCisjZGVmaW5lICAg UU1DX1NQRV9UUk5TWU5DX1RYKHgpCSgoeCkgPDwgMCkKKworLyogSW50ZXJydXB0IHJlbGF0ZWQg cmVnaXN0ZXJzIGJpdHMgKi8KKyNkZWZpbmUgUU1DX0lOVF9WCQkoMSA8PCAxNSkKKyNkZWZpbmUg UU1DX0lOVF9XCQkoMSA8PCAxNCkKKyNkZWZpbmUgUU1DX0lOVF9OSUQJCSgxIDw8IDEzKQorI2Rl ZmluZSBRTUNfSU5UX0lETAkJKDEgPDwgMTIpCisjZGVmaW5lIFFNQ19JTlRfR0VUX0NIQU5ORUwo eCkJKCgoeCkgJiAweDBGQzApID4+IDYpCisjZGVmaW5lIFFNQ19JTlRfTVJGCQkoMSA8PCA1KQor I2RlZmluZSBRTUNfSU5UX1VOCQkoMSA8PCA0KQorI2RlZmluZSBRTUNfSU5UX1JYRgkJKDEgPDwg MykKKyNkZWZpbmUgUU1DX0lOVF9CU1kJCSgxIDw8IDIpCisjZGVmaW5lIFFNQ19JTlRfVFhCCQko MSA8PCAxKQorI2RlZmluZSBRTUNfSU5UX1JYQgkJKDEgPDwgMCkKKworLyogQkQgcmVsYXRlZCBy ZWdpc3RlcnMgYml0cyAqLworI2RlZmluZSBRTUNfQkRfUlhfRQkoMSA8PCAxNSkKKyNkZWZpbmUg UU1DX0JEX1JYX1cJKDEgPDwgMTMpCisjZGVmaW5lIFFNQ19CRF9SWF9JCSgxIDw8IDEyKQorI2Rl ZmluZSBRTUNfQkRfUlhfTAkoMSA8PCAxMSkKKyNkZWZpbmUgUU1DX0JEX1JYX0YJKDEgPDwgMTAp CisjZGVmaW5lIFFNQ19CRF9SWF9DTQkoMSA8PCA5KQorI2RlZmluZSBRTUNfQkRfUlhfVUIJKDEg PDwgNykKKyNkZWZpbmUgUU1DX0JEX1JYX0xHCSgxIDw8IDUpCisjZGVmaW5lIFFNQ19CRF9SWF9O TwkoMSA8PCA0KQorI2RlZmluZSBRTUNfQkRfUlhfQUIJKDEgPDwgMykKKyNkZWZpbmUgUU1DX0JE X1JYX0NSCSgxIDw8IDIpCisKKyNkZWZpbmUgUU1DX0JEX1RYX1IJKDEgPDwgMTUpCisjZGVmaW5l IFFNQ19CRF9UWF9XCSgxIDw8IDEzKQorI2RlZmluZSBRTUNfQkRfVFhfSQkoMSA8PCAxMikKKyNk ZWZpbmUgUU1DX0JEX1RYX0wJKDEgPDwgMTEpCisjZGVmaW5lIFFNQ19CRF9UWF9UQwkoMSA8PCAx MCkKKyNkZWZpbmUgUU1DX0JEX1RYX0NNCSgxIDw8IDkpCisjZGVmaW5lIFFNQ19CRF9UWF9VQgko MSA8PCA3KQorI2RlZmluZSBRTUNfQkRfVFhfUEFECSgweDBmIDw8IDApCisKKy8qIE51bWJlcnMg b2YgQkRzIGFuZCBpbnRlcnJ1cHQgaXRlbXMgKi8KKyNkZWZpbmUgUU1DX05CX1RYQkRTCTgKKyNk ZWZpbmUgUU1DX05CX1JYQkRTCTgKKyNkZWZpbmUgUU1DX05CX0lOVFMJMTI4CisKK3N0cnVjdCBx bWNfeGZlcl9kZXNjIHsKKwl1bmlvbiB7CisJCXZvaWQgKCp0eF9jb21wbGV0ZSkodm9pZCAqY29u dGV4dCk7CisJCXZvaWQgKCpyeF9jb21wbGV0ZSkodm9pZCAqY29udGV4dCwgc2l6ZV90IGxlbmd0 aCk7CisJfTsKKwl2b2lkICpjb250ZXh0OworfTsKKworc3RydWN0IHFtY19jaGFuIHsKKwlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgaW50IGlkOworCXN0cnVjdCBxbWMgKnFtYzsK Kwl2b2lkICpfX2lvbWVtIHNfcGFyYW07CisJZW51bSBxbWNfbW9kZSBtb2RlOworCXU2NAl0eF90 c19tYXNrOworCXU2NAlyeF90c19tYXNrOworCWJvb2wgaXNfcmV2ZXJzZV9kYXRhOworCisJc3Bp bmxvY2tfdAl0eF9sb2NrOworCWNiZF90IF9faW9tZW0gKnR4YmRzOworCWNiZF90IF9faW9tZW0g KnR4YmRfZnJlZTsKKwljYmRfdCBfX2lvbWVtICp0eGJkX2RvbmU7CisJc3RydWN0IHFtY194ZmVy X2Rlc2MgdHhfZGVzY1tRTUNfTkJfVFhCRFNdOworCXU2NAluYl90eF91bmRlcnJ1bjsKKwlib29s CWlzX3R4X3N0b3BwZWQ7CisKKwlzcGlubG9ja190CXJ4X2xvY2s7CisJY2JkX3QgX19pb21lbSAq cnhiZHM7CisJY2JkX3QgX19pb21lbSAqcnhiZF9mcmVlOworCWNiZF90IF9faW9tZW0gKnJ4YmRf ZG9uZTsKKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyByeF9kZXNjW1FNQ19OQl9SWEJEU107CisJdTY0 CW5iX3J4X2J1c3k7CisJaW50CXJ4X3BlbmRpbmc7CisJYm9vbAlpc19yeF9oYWx0ZWQ7CisJYm9v bAlpc19yeF9zdG9wcGVkOworfTsKKworc3RydWN0IHFtYyB7CisJc3RydWN0IGRldmljZSAqZGV2 OworCXN0cnVjdCB0c2EgKnRzYTsKKwl2b2lkICpfX2lvbWVtIHNjY19yZWdzOworCXZvaWQgKl9f aW9tZW0gc2NjX3ByYW07CisJdm9pZCAqX19pb21lbSBkcHJhbTsKKwl1MTYgc2NjX3ByYW1fb2Zm c2V0OworCXVuc2lnbmVkIGludCB0c2FfY2VsbF9pZDsKKwljYmRfdCBfX2lvbWVtICpiZF90YWJs ZTsKKwlkbWFfYWRkcl90IGJkX2RtYV9hZGRyOworCXNpemVfdCBiZF9zaXplOworCXUxNiBfX2lv bWVtICppbnRfdGFibGU7CisJdTE2IF9faW9tZW0gKmludF9jdXJyOworCWRtYV9hZGRyX3QgaW50 X2RtYV9hZGRyOworCXNpemVfdCBpbnRfc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5faGVh ZDsKKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW5zWzY0XTsKK307CisKK2ludCBxbWNfY2hhbl9nZXRf aW5mbyhzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIHN0cnVjdCBxbWNfY2hhbl9pbmZvICppbmZvKQor eworCXN0cnVjdCB0c2FfY2VsbF9pbmZvIHRzYV9pbmZvOworCWludCByZXQ7CisKKwkvKiBSZXRy aWV2ZSBpbmZvIGZyb20gVFNBIHJlbGF0ZWQgY2VsbCAqLworCXJldCA9IHRzYV9nZXRfaW5mbyhj aGFuLT5xbWMtPnRzYSwgY2hhbi0+cW1jLT50c2FfY2VsbF9pZCwgJnRzYV9pbmZvKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJaW5mby0+bW9kZSA9IGNoYW4tPm1vZGU7CisJaW5mby0+ cnhfZnNfcmF0ZSA9IHRzYV9pbmZvLnJ4X2ZzX3JhdGU7CisJaW5mby0+cnhfYml0X3JhdGUgPSB0 c2FfaW5mby5yeF9iaXRfcmF0ZTsKKwlpbmZvLT5uYl90eF90cyA9IGh3ZWlnaHQ2NChjaGFuLT50 eF90c19tYXNrKTsKKwlpbmZvLT50eF9mc19yYXRlID0gdHNhX2luZm8udHhfZnNfcmF0ZTsKKwlp bmZvLT50eF9iaXRfcmF0ZSA9IHRzYV9pbmZvLnR4X2JpdF9yYXRlOworCWluZm8tPm5iX3J4X3Rz ID0gaHdlaWdodDY0KGNoYW4tPnJ4X3RzX21hc2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRf U1lNQk9MKHFtY19jaGFuX2dldF9pbmZvKTsKKworaW50IHFtY19jaGFuX3NldF9wYXJhbShzdHJ1 Y3QgcW1jX2NoYW4gKmNoYW4sIGNvbnN0IHN0cnVjdCBxbWNfY2hhbl9wYXJhbSAqcGFyYW0pCit7 CisJaWYgKHBhcmFtLT5tb2RlICE9IGNoYW4tPm1vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJ c3dpdGNoIChwYXJhbS0+bW9kZSkgeworCWNhc2UgUU1DX0hETEM6CisJCWlmICgocGFyYW0tPmhk bGMubWF4X3J4X2J1Zl9zaXplICUgNCkgfHwKKwkJICAgIChwYXJhbS0+aGRsYy5tYXhfcnhfYnVm X3NpemUgPCA4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW91dF9iZTE2KGNoYW4tPnFtYy0+ c2NjX3ByYW0gKyBRTUNfR0JMX01SQkxSLAorCQkJIHBhcmFtLT5oZGxjLm1heF9yeF9idWZfc2l6 ZSAtIDgpOworCQlvdXRfYmUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9NRkxSLAorCQkJIHBh cmFtLT5oZGxjLm1heF9yeF9mcmFtZV9zaXplKTsKKwkJaWYgKHBhcmFtLT5oZGxjLmlzX2NyYzMy KSB7CisJCQlzZXRiaXRzMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsCisJCQkJICBR TUNfU1BFX0NIQU1SX0hETENfQ1JDKTsKKwkJfSBlbHNlIHsKKwkJCWNscmJpdHMxNihjaGFuLT5z X3BhcmFtICsgUU1DX1NQRV9DSEFNUiwKKwkJCQkgIFFNQ19TUEVfQ0hBTVJfSERMQ19DUkMpOwor CQl9CisJCWJyZWFrOworCisJY2FzZSBRTUNfVFJBTlNQQVJFTlQ6CisJCW91dF9iZTE2KGNoYW4t PnNfcGFyYW0gKyBRTUNfU1BFX1RNUkJMUiwKKwkJCSAgcGFyYW0tPnRyYW5zcC5tYXhfcnhfYnVm X3NpemUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChxbWNfY2hhbl9zZXRfcGFyYW0pOworCitpbnQg cW1jX2NoYW5fd3JpdGVfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBh ZGRyLCBzaXplX3QgbGVuZ3RoLAorCQkJICB2b2lkICgqY29tcGxldGUpKHZvaWQgKmNvbnRleHQp LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBxbWNfeGZlcl9kZXNjICp4ZmVyX2Rlc2M7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKwljYmRfdCAqX19pb21lbSBiZDsKKwl1MTYgY3RybDsKKwlp bnQgcmV0OworCisJLyogIFIgYml0ICBVQiBiaXQKKwkgKiAgICAgMCAgICAgICAwICA6IFRoZSBC RCBpcyBmcmVlCisJICogICAgIDEgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGlu ZyBmb3IgdHJhbnNmZXIKKwkgKiAgICAgMCAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3 YWl0aW5nIGZvciBjb21wbGV0aW9uCisJICogICAgIDEgICAgICAgMCAgOiBTaG91bGQgbm90IGFw cGVuZAorCSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsK KwliZCA9IGNoYW4tPnR4YmRfZnJlZTsKKworCWN0cmwgPSBpbl9iZTE2KCZiZC0+Y2JkX3NjKTsK KwlpZiAoY3RybCAmIChRTUNfQkRfVFhfUiB8IFFNQ19CRF9UWF9VQikpIHsKKwkJLyogV2UgYXJl IGZ1bGwgLi4uICovCisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlbmQ7CisJfQorCisJb3V0X2Jl MTYoJmJkLT5jYmRfZGF0bGVuLCBsZW5ndGgpOworCW91dF9iZTMyKCZiZC0+Y2JkX2J1ZmFkZHIs IGFkZHIpOworCisJeGZlcl9kZXNjID0gJmNoYW4tPnR4X2Rlc2NbYmQgLSBjaGFuLT50eGJkc107 CisJeGZlcl9kZXNjLT50eF9jb21wbGV0ZSA9IGNvbXBsZXRlOworCXhmZXJfZGVzYy0+Y29udGV4 dCA9IGNvbnRleHQ7CisKKwkvKiBBY3RpdmF0ZSB0aGUgZGVzY3JpcHRvciAqLworCWN0cmwgfD0g KFFNQ19CRF9UWF9SIHwgUU1DX0JEX1RYX1VCKTsKKwl3bWIoKTsgLyogQmUgc3VyZSB0byBmbHVz aCB0aGUgZGVzY3JpcHRvciBiZWZvcmUgY29udHJvbCB1cGRhdGUgKi8KKwlvdXRfYmUxNigmYmQt PmNiZF9zYywgY3RybCk7CisKKwlpZiAoIWNoYW4tPmlzX3R4X3N0b3BwZWQpCisJCXNldGJpdHMx NihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwgUU1DX1NQRV9DSEFNUl9QT0wpOworCisJ aWYgKGN0cmwgJiBRTUNfQkRfVFhfVykKKwkJY2hhbi0+dHhiZF9mcmVlID0gY2hhbi0+dHhiZHM7 CisJZWxzZQorCQljaGFuLT50eGJkX2ZyZWUrKzsKKworCXJldCA9IDA7CisKK2VuZDoKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT50eF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsK K30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fd3JpdGVfc3VibWl0KTsKKworc3RhdGljIHZvaWQg cW1jX2NoYW5fd3JpdGVfZG9uZShzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHFt Y194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsKKwl2b2lkICgqY29tcGxldGUpKHZvaWQgKmNvbnRleHQp OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqY29udGV4dDsKKwljYmRfdCAqX19pb21l bSBiZDsKKwl1MTYgY3RybDsKKworCS8qICBSIGJpdCAgVUIgYml0CisJICogICAgIDAgICAgICAg MCAgOiBUaGUgQkQgaXMgZnJlZQorCSAqICAgICAxICAgICAgIDEgIDogVGhlIEJEIGlzIGluIHVz ZWQsIHdhaXRpbmcgZm9yIHRyYW5zZmVyCisJICogICAgIDAgICAgICAgMSAgOiBUaGUgQkQgaXMg aW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbgorCSAqICAgICAxICAgICAgIDAgIDogU2hv dWxkIG5vdCBhcHBlbmQKKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT50eF9sb2Nr LCBmbGFncyk7CisJYmQgPSBjaGFuLT50eGJkX2RvbmU7CisKKwljdHJsID0gaW5fYmUxNigmYmQt PmNiZF9zYyk7CisJd2hpbGUgKCEoY3RybCAmIFFNQ19CRF9UWF9SKSkgeworCQlpZiAoIShjdHJs ICYgUU1DX0JEX1RYX1VCKSkKKwkJCWdvdG8gZW5kOworCisJCXhmZXJfZGVzYyA9ICZjaGFuLT50 eF9kZXNjW2JkIC0gY2hhbi0+dHhiZHNdOworCQljb21wbGV0ZSA9IHhmZXJfZGVzYy0+dHhfY29t cGxldGU7CisJCWNvbnRleHQgPSB4ZmVyX2Rlc2MtPmNvbnRleHQ7CisJCXhmZXJfZGVzYy0+dHhf Y29tcGxldGUgPSBOVUxMOworCQl4ZmVyX2Rlc2MtPmNvbnRleHQgPSBOVUxMOworCisJCW91dF9i ZTE2KCZiZC0+Y2JkX3NjLCBjdHJsICYgflFNQ19CRF9UWF9VQik7CisKKwkJaWYgKGN0cmwgJiBR TUNfQkRfVFhfVykKKwkJCWNoYW4tPnR4YmRfZG9uZSA9IGNoYW4tPnR4YmRzOworCQllbHNlCisJ CQljaGFuLT50eGJkX2RvbmUrKzsKKworCQlpZiAoY29tcGxldGUpIHsKKwkJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKKwkJCWNvbXBsZXRlKGNvbnRleHQp OworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKKwkJfQorCisJ CWJkID0gY2hhbi0+dHhiZF9kb25lOworCQljdHJsID0gaW5fYmUxNigmYmQtPmNiZF9zYyk7CisJ fQorCitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3Mp OworfQorCitpbnQgcW1jX2NoYW5fcmVhZF9zdWJtaXQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBk bWFfYWRkcl90IGFkZHIsIHNpemVfdCBsZW5ndGgsCisJCQkgdm9pZCAoKmNvbXBsZXRlKSh2b2lk ICpjb250ZXh0LCBzaXplX3QgbGVuZ3RoKSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcW1j X3hmZXJfZGVzYyAqeGZlcl9kZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2JkX3QgKl9f aW9tZW0gYmQ7CisJdTE2IGN0cmw7CisJaW50IHJldDsKKworCS8qICBFIGJpdCAgVUIgYml0CisJ ICogICAgIDAgICAgICAgMCAgOiBUaGUgQkQgaXMgZnJlZQorCSAqICAgICAxICAgICAgIDEgIDog VGhlIEJEIGlzIGluIHVzZWQsIHdhaXRpbmcgZm9yIHRyYW5zZmVyCisJICogICAgIDAgICAgICAg MSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbgorCSAqICAgICAx ICAgICAgIDAgIDogU2hvdWxkIG5vdCBhcHBlbmQKKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZl KCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJYmQgPSBjaGFuLT5yeGJkX2ZyZWU7CisKKwljdHJs ID0gaW5fYmUxNigmYmQtPmNiZF9zYyk7CisJaWYgKGN0cmwgJiAoUU1DX0JEX1JYX0UgfCBRTUNf QkRfUlhfVUIpKSB7CisJCS8qIFdlIGFyZSBmdWxsIC4uLiAqLworCQlyZXQgPSAtRUJVU1k7CisJ CWdvdG8gZW5kOworCX0KKworCW91dF9iZTE2KCZiZC0+Y2JkX2RhdGxlbiwgMCk7IC8qIGRhdGEg bGVuZ3RoIGlzIHVwZGF0ZWQgYnkgdGhlIFFNQyAqLworCW91dF9iZTMyKCZiZC0+Y2JkX2J1ZmFk ZHIsIGFkZHIpOworCisJeGZlcl9kZXNjID0gJmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5yeGJk c107CisJeGZlcl9kZXNjLT5yeF9jb21wbGV0ZSA9IGNvbXBsZXRlOworCXhmZXJfZGVzYy0+Y29u dGV4dCA9IGNvbnRleHQ7CisKKwkvKiBBY3RpdmF0ZSB0aGUgZGVzY3JpcHRvciAqLworCWN0cmwg fD0gKFFNQ19CRF9SWF9FIHwgUU1DX0JEX1JYX1VCKTsKKwl3bWIoKTsgLyogQmUgc3VyZSB0byBm bHVzaCBkYXRhIGJlZm9yZSBkZXNjcmlwdG9yIGFjdGl2YXRpb24gKi8KKwlvdXRfYmUxNigmYmQt PmNiZF9zYywgY3RybCk7CisKKwkvKiBSZXN0YXJ0IHJlY2VpdmVyIGlmIG5lZWRlZCAqLworCWlm IChjaGFuLT5pc19yeF9oYWx0ZWQgJiYgIWNoYW4tPmlzX3J4X3N0b3BwZWQpIHsKKwkJLyogUmVz dGFydCByZWNlaXZlciAqLworCQlpZiAoY2hhbi0+bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpCisJ CQlvdXRfYmUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDE4MDAwMDgwKTsK KwkJZWxzZQorCQkJb3V0X2JlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwgMHgw MDAwMDA4MCk7CisJCW91dF9iZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JTVEFURSwgMHgz MTAwMDAwMCk7CisJCWNoYW4tPmlzX3J4X2hhbHRlZCA9IGZhbHNlOworCX0KKwljaGFuLT5yeF9w ZW5kaW5nKys7CisKKwlpZiAoY3RybCAmIFFNQ19CRF9SWF9XKQorCQljaGFuLT5yeGJkX2ZyZWUg PSBjaGFuLT5yeGJkczsKKwllbHNlCisJCWNoYW4tPnJ4YmRfZnJlZSsrOworCisJcmV0ID0gMDsK K2VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJ cmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fcmVhZF9zdWJtaXQpOworCitz dGF0aWMgdm9pZCBxbWNfY2hhbl9yZWFkX2RvbmUoc3RydWN0IHFtY19jaGFuICpjaGFuKQorewor CXZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCwgc2l6ZV90IHNpemUpOworCXN0cnVjdCBx bWNfeGZlcl9kZXNjICp4ZmVyX2Rlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljYmRfdCAq X19pb21lbSBiZDsKKwl2b2lkICpjb250ZXh0OworCXUxNiBkYXRhbGVuOworCXUxNiBjdHJsOwor CisJLyogIEUgYml0ICBVQiBiaXQKKwkgKiAgICAgMCAgICAgICAwICA6IFRoZSBCRCBpcyBmcmVl CisJICogICAgIDEgICAgICAgMSAgOiBUaGUgQkQgaXMgaW4gdXNlZCwgd2FpdGluZyBmb3IgdHJh bnNmZXIKKwkgKiAgICAgMCAgICAgICAxICA6IFRoZSBCRCBpcyBpbiB1c2VkLCB3YWl0aW5nIGZv ciBjb21wbGV0aW9uCisJICogICAgIDEgICAgICAgMCAgOiBTaG91bGQgbm90IGFwcGVuZAorCSAq LworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKwliZCA9IGNo YW4tPnJ4YmRfZG9uZTsKKworCWN0cmwgPSBpbl9iZTE2KCZiZC0+Y2JkX3NjKTsKKwl3aGlsZSAo IShjdHJsICYgUU1DX0JEX1JYX0UpKSB7CisJCWlmICghKGN0cmwgJiBRTUNfQkRfUlhfVUIpKQor CQkJZ290byBlbmQ7CisKKwkJeGZlcl9kZXNjID0gJmNoYW4tPnJ4X2Rlc2NbYmQgLSBjaGFuLT5y eGJkc107CisJCWNvbXBsZXRlID0geGZlcl9kZXNjLT5yeF9jb21wbGV0ZTsKKwkJY29udGV4dCA9 IHhmZXJfZGVzYy0+Y29udGV4dDsKKwkJeGZlcl9kZXNjLT5yeF9jb21wbGV0ZSA9IE5VTEw7CisJ CXhmZXJfZGVzYy0+Y29udGV4dCA9IE5VTEw7CisKKwkJZGF0YWxlbiA9IGluX2JlMTYoJmJkLT5j YmRfZGF0bGVuKTsKKwkJb3V0X2JlMTYoJmJkLT5jYmRfc2MsIGN0cmwgJiB+UU1DX0JEX1JYX1VC KTsKKworCQlpZiAoY3RybCAmIFFNQ19CRF9SWF9XKQorCQkJY2hhbi0+cnhiZF9kb25lID0gY2hh bi0+cnhiZHM7CisJCWVsc2UKKwkJCWNoYW4tPnJ4YmRfZG9uZSsrOworCisJCWNoYW4tPnJ4X3Bl bmRpbmctLTsKKworCQlpZiAoY29tcGxldGUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKwkJCWNvbXBsZXRlKGNvbnRleHQsIGRhdGFsZW4pOwor CQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCWJk ID0gY2hhbi0+cnhiZF9kb25lOworCQljdHJsID0gaW5fYmUxNigmYmQtPmNiZF9zYyk7CisJfQor CitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOwor fQorCitzdGF0aWMgaW50IHFtY19jaGFuX2NvbW1hbmQoc3RydWN0IHFtY19jaGFuICpjaGFuLCB1 OCBxbWNfb3Bjb2RlKQoreworCXJldHVybiBjcG1fY29tbWFuZChjaGFuLT5pZCA8PCAyLCAocW1j X29wY29kZSA8PCA0KSB8IDB4MEUpOworfQorCitzdGF0aWMgaW50IHFtY19jaGFuX3N0b3Bfcngo c3RydWN0IHFtY19jaGFuICpjaGFuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJl dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisKKwkvKiBT ZW5kIFNUT1AgUkVDRUlWRSBjb21tYW5kICovCisJcmV0ID0gcW1jX2NoYW5fY29tbWFuZChjaGFu LCAweDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGFuLT5xbWMtPmRldiwgImNoYW4gJXU6 IFNlbmQgU1RPUCBSRUNFSVZFIGZhaWxlZCAoJWQpXG4iLAorCQkJY2hhbi0+aWQsIHJldCk7CisJ CWdvdG8gZW5kOworCX0KKworCWNoYW4tPmlzX3J4X3N0b3BwZWQgPSB0cnVlOworCitlbmQ6CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+cnhfbG9jaywgZmxhZ3MpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgcW1jX2NoYW5fc3RvcF90eChzdHJ1Y3QgcW1jX2NoYW4gKmNo YW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKKworCS8qIFNlbmQgU1RPUCBUUkFOU01JVCBj b21tYW5kICovCisJcmV0ID0gcW1jX2NoYW5fY29tbWFuZChjaGFuLCAweDEpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihjaGFuLT5xbWMtPmRldiwgImNoYW4gJXU6IFNlbmQgU1RPUCBUUkFOU01J VCBmYWlsZWQgKCVkKVxuIiwKKwkJCWNoYW4tPmlkLCByZXQpOworCQlnb3RvIGVuZDsKKwl9CisK KwljaGFuLT5pc190eF9zdG9wcGVkID0gdHJ1ZTsKKworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcW1j X2NoYW5fc3RvcChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGludCBkaXJlY3Rpb24pCit7CisJaW50 IHJldDsKKworCWlmIChkaXJlY3Rpb24gJiBRTUNfQ0hBTl9SRUFEKSB7CisJCXJldCA9IHFtY19j aGFuX3N0b3BfcngoY2hhbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlm IChkaXJlY3Rpb24gJiBRTUNfQ0hBTl9XUklURSkgeworCQlyZXQgPSBxbWNfY2hhbl9zdG9wX3R4 KGNoYW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30K K0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fc3RvcCk7CisKK3N0YXRpYyB2b2lkIHFtY19jaGFuX3N0 YXJ0X3J4KHN0cnVjdCBxbWNfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKworCS8qIFJlc3Rh cnQgdGhlIHJlY2VpdmVyICovCisJaWYgKGNoYW4tPm1vZGUgPT0gUU1DX1RSQU5TUEFSRU5UKQor CQlvdXRfYmUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDE4MDAwMDgwKTsK KwllbHNlCisJCW91dF9iZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1pEU1RBVEUsIDB4MDAw MDAwODApOworCW91dF9iZTMyKGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JTVEFURSwgMHgzMTAw MDAwMCk7CisJY2hhbi0+aXNfcnhfaGFsdGVkID0gZmFsc2U7CisKKwljaGFuLT5pc19yeF9zdG9w cGVkID0gZmFsc2U7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBm bGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHFtY19jaGFuX3N0YXJ0X3R4KHN0cnVjdCBxbWNfY2hh biAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmNoYW4tPnR4X2xvY2ssIGZsYWdzKTsKKworCS8qIEVuYWJsZSBjaGFubmVsIHRyYW5zbWl0dGVy IGFzIGl0IGNvdWxkIGJlIGRpc2FibGVkIGlmCisJICogcW1jX2NoYW5fcmVzZXQoKSB3YXMgY2Fs bGVkCisJICovCisJc2V0Yml0czE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX0NIQU1SLCBRTUNf U1BFX0NIQU1SX0VOVCk7CisKKwkvKiBTZXQgdGhlIFBPTCBiaXQgaW4gdGhlIGNoYW5uZWwgbW9k ZSByZWdpc3RlciAqLworCXNldGJpdHMxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwg UU1DX1NQRV9DSEFNUl9QT0wpOworCisJY2hhbi0+aXNfdHhfc3RvcHBlZCA9IGZhbHNlOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworfQorCitpbnQg cW1jX2NoYW5fc3RhcnQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKQorewor CWlmIChkaXJlY3Rpb24gJiBRTUNfQ0hBTl9SRUFEKQorCQlxbWNfY2hhbl9zdGFydF9yeChjaGFu KTsKKworCWlmIChkaXJlY3Rpb24gJiBRTUNfQ0hBTl9XUklURSkKKwkJcW1jX2NoYW5fc3RhcnRf dHgoY2hhbik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fc3RhcnQp OworCitzdGF0aWMgdm9pZCBxbWNfY2hhbl9yZXNldF9yeChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4p Cit7CisJc3RydWN0IHFtY194ZmVyX2Rlc2MgKnhmZXJfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCWNiZF90ICpfX2lvbWVtIGJkOworCXUxNiBjdHJsOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJmNoYW4tPnJ4X2xvY2ssIGZsYWdzKTsKKwliZCA9IGNoYW4tPnJ4YmRzOworCWRvIHsKKwkJ Y3RybCA9IGluX2JlMTYoJmJkLT5jYmRfc2MpOworCQlvdXRfYmUxNigmYmQtPmNiZF9zYywgY3Ry bCAmIH4oUU1DX0JEX1JYX1VCIHwgUU1DX0JEX1JYX0UpKTsKKworCQl4ZmVyX2Rlc2MgPSAmY2hh bi0+cnhfZGVzY1tiZCAtIGNoYW4tPnJ4YmRzXTsKKwkJeGZlcl9kZXNjLT5yeF9jb21wbGV0ZSA9 IE5VTEw7CisJCXhmZXJfZGVzYy0+Y29udGV4dCA9IE5VTEw7CisKKwkJYmQrKzsKKwl9IHdoaWxl ICghKGN0cmwgJiBRTUNfQkRfUlhfVykpOworCisJY2hhbi0+cnhiZF9mcmVlID0gY2hhbi0+cnhi ZHM7CisJY2hhbi0+cnhiZF9kb25lID0gY2hhbi0+cnhiZHM7CisJb3V0X2JlMTYoY2hhbi0+c19w YXJhbSArIFFNQ19TUEVfUkJQVFIsCisJCSBpbl9iZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BF X1JCQVNFKSk7CisKKwljaGFuLT5yeF9wZW5kaW5nID0gMDsKKwljaGFuLT5pc19yeF9zdG9wcGVk ID0gZmFsc2U7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5yeF9sb2NrLCBmbGFn cyk7Cit9CisKK3N0YXRpYyB2b2lkIHFtY19jaGFuX3Jlc2V0X3R4KHN0cnVjdCBxbWNfY2hhbiAq Y2hhbikKK3sKKwlzdHJ1Y3QgcW1jX3hmZXJfZGVzYyAqeGZlcl9kZXNjOworCXVuc2lnbmVkIGxv bmcgZmxhZ3M7CisJY2JkX3QgKl9faW9tZW0gYmQ7CisJdTE2IGN0cmw7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworCisJLyogRGlzYWJsZSB0cmFuc21pdHRl ci4gSXQgd2lsbCBiZSByZS1lbmFibGUgb24gcW1jX2NoYW5fc3RhcnQoKSAqLworCWNscmJpdHMx NihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9DSEFNUiwgUU1DX1NQRV9DSEFNUl9FTlQpOworCisJ YmQgPSBjaGFuLT50eGJkczsKKwlkbyB7CisJCWN0cmwgPSBpbl9iZTE2KCZiZC0+Y2JkX3NjKTsK KwkJb3V0X2JlMTYoJmJkLT5jYmRfc2MsIGN0cmwgJiB+KFFNQ19CRF9UWF9VQiB8IFFNQ19CRF9U WF9SKSk7CisKKwkJeGZlcl9kZXNjID0gJmNoYW4tPnR4X2Rlc2NbYmQgLSBjaGFuLT50eGJkc107 CisJCXhmZXJfZGVzYy0+dHhfY29tcGxldGUgPSBOVUxMOworCQl4ZmVyX2Rlc2MtPmNvbnRleHQg PSBOVUxMOworCisJCWJkKys7CisJfSB3aGlsZSAoIShjdHJsICYgUU1DX0JEX1RYX1cpKTsKKwor CWNoYW4tPnR4YmRfZnJlZSA9IGNoYW4tPnR4YmRzOworCWNoYW4tPnR4YmRfZG9uZSA9IGNoYW4t PnR4YmRzOworCW91dF9iZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RCUFRSLAorCQkgaW5f YmUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9UQkFTRSkpOworCisJLyogUmVzZXQgVFNUQVRF IGFuZCBaSVNUQVRFIHRvIHRoZWlyIGluaXRpYWwgdmFsdWUgKi8KKwlvdXRfYmUzMihjaGFuLT5z X3BhcmFtICsgUU1DX1NQRV9UU1RBVEUsIDB4MzAwMDAwMDApOworCW91dF9iZTMyKGNoYW4tPnNf cGFyYW0gKyBRTUNfU1BFX1pJU1RBVEUsIDB4MDAwMDAxMDApOworCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmY2hhbi0+dHhfbG9jaywgZmxhZ3MpOworfQorCitpbnQgcW1jX2NoYW5fcmVzZXQo c3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKQoreworCWlmIChkaXJlY3Rpb24g JiBRTUNfQ0hBTl9SRUFEKQorCQlxbWNfY2hhbl9yZXNldF9yeChjaGFuKTsKKworCWlmIChkaXJl Y3Rpb24gJiBRTUNfQ0hBTl9XUklURSkKKwkJcW1jX2NoYW5fcmVzZXRfdHgoY2hhbik7CisKKwly ZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocW1jX2NoYW5fcmVzZXQpOworCitzdGF0aWMgaW50 IHFtY19jaGVja19jaGFucyhzdHJ1Y3QgcW1jICpxbWMpCit7CisJc3RydWN0IHRzYV9jZWxsX2lu Zm8gaW5mbzsKKwlib29sIGlzX29uZV90YWJsZSA9IGZhbHNlOworCXN0cnVjdCBxbWNfY2hhbiAq Y2hhbjsKKwl1NjQgdHhfdHNfbWFzayA9IDA7CisJdTY0IHJ4X3RzX21hc2sgPSAwOworCXU2NCB0 eF90c19hc3NpZ25lZF9tYXNrOworCXU2NCByeF90c19hc3NpZ25lZF9tYXNrOworCWludCByZXQ7 CisKKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20gVFNBIHJlbGF0ZWQgY2VsbCAqLworCXJldCA9IHRz YV9nZXRfaW5mbyhxbWMtPnRzYSwgcW1jLT50c2FfY2VsbF9pZCwgJmluZm8pOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwkvKiBJZiBtb3JlIHRoYW4gMzIgVFMgYXJlIGFzc2lnbmVkIHRv IHRoaXMgY2VsbCwgb25lIGNvbW1vbiB0YWJsZQorCSAqIGlzIHVzZWQgZm9yIFR4IGFuZCBSeCBh bmQgc28gbWFza3MgbXVzdCBiZSBlcXVhbCBmb3IgYWxsIGNoYW5uZWxzLgorCSAqLworCWlmICgo aW5mby5uYl90eF90cyA+IDMyKSB8fCAoaW5mby5uYl9yeF90cyA+IDMyKSkgeworCQlpZiAoaW5m by5uYl90eF90cyAhPSBpbmZvLm5iX3J4X3RzKSB7CisJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiTnVt YmVyIG9mIFRTQSBUeC9SeCBUUyBhc3NpZ25lZCBhcmUgbm90IGVxdWFsXG4iKTsKKwkJCXJldHVy biAtRUlOVkFMOworCQl9CisJCWlzX29uZV90YWJsZSA9IHRydWU7CisJfQorCisKKwl0eF90c19h c3NpZ25lZF9tYXNrID0gKCgodTY0KTEpIDw8IGluZm8ubmJfdHhfdHMpIC0gMTsKKwlyeF90c19h c3NpZ25lZF9tYXNrID0gKCgodTY0KTEpIDw8IGluZm8ubmJfcnhfdHMpIC0gMTsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7CisJCWlmIChjaGFu LT50eF90c19tYXNrID4gdHhfdHNfYXNzaWduZWRfbWFzaykgeworCQkJZGV2X2VycihxbWMtPmRl diwgImNoYW4gJXUgdXNlcyBUU0EgdW5hc3NpZ25lZCBUeCBUU1xuIiwgY2hhbi0+aWQpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHR4X3RzX21hc2sgJiBjaGFuLT50eF90c19tYXNr KSB7CisJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiY2hhbiAldSB1c2VzIGFuIGFscmVhZHkgdXNlZCBU eCBUU1xuIiwgY2hhbi0+aWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY2hh bi0+cnhfdHNfbWFzayA+IHJ4X3RzX2Fzc2lnbmVkX21hc2spIHsKKwkJCWRldl9lcnIocW1jLT5k ZXYsICJjaGFuICV1IHVzZXMgVFNBIHVuYXNzaWduZWQgUnggVFNcbiIsIGNoYW4tPmlkKTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyeF90c19tYXNrICYgY2hhbi0+cnhfdHNfbWFz aykgeworCQkJZGV2X2VycihxbWMtPmRldiwgImNoYW4gJXUgdXNlcyBhbiBhbHJlYWR5IHVzZWQg UnggVFNcbiIsIGNoYW4tPmlkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGlz X29uZV90YWJsZSAmJiAoY2hhbi0+dHhfdHNfbWFzayAhPSBjaGFuLT5yeF90c19tYXNrKSkgewor CQkJZGV2X2VycihxbWMtPmRldiwgImNoYW4gJXUgdXNlcyBkaWZmZXJlbnQgUnggYW5kIFR4IFRT XG4iLCBjaGFuLT5pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXR4X3RzX21hc2sg fD0gY2hhbi0+dHhfdHNfbWFzazsKKwkJcnhfdHNfbWFzayB8PSBjaGFuLT5yeF90c19tYXNrOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHFtY19uYl9jaGFucyhz dHJ1Y3QgcW1jICpxbWMpCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgcW1j X2NoYW4gKmNoYW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNoYW5faGVh ZCwgbGlzdCkKKwkJY291bnQrKzsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBx bWNfb2ZfcGFyc2VfY2hhbnMoc3RydWN0IHFtYyAqcW1jLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hhbl9ucDsKKwlzdHJ1Y3QgcW1jX2NoYW4gKmNo YW47CisJY29uc3QgY2hhciAqbW9kZTsKKwl1MzIgY2hhbl9pZDsKKwl1NjQgdHNfbWFzazsKKwlp bnQgcmV0OworCisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoYW5fbnAp IHsKKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hhbl9ucCwgInJlZyIsICZjaGFuX2lk KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihxbWMtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byBy ZWFkIHJlZ1xuIiwgY2hhbl9ucCk7CisJCQlvZl9ub2RlX3B1dChjaGFuX25wKTsKKwkJCXJldHVy biByZXQ7CisJCX0KKwkJaWYgKGNoYW5faWQgPiA2MykgeworCQkJZGV2X2VycihxbWMtPmRldiwg IiVwT0Y6IEludmFsaWQgY2hhbl9pZFxuIiwgY2hhbl9ucCk7CisJCQlvZl9ub2RlX3B1dChjaGFu X25wKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJY2hhbiA9IGRldm1fa3phbGxvYyhx bWMtPmRldiwgc2l6ZW9mKCpjaGFuKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hhbikgeworCQkJ b2Zfbm9kZV9wdXQoY2hhbl9ucCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNoYW4t PmlkID0gY2hhbl9pZDsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoYW4tPnJ4X2xvY2spOworCQlzcGlu X2xvY2tfaW5pdCgmY2hhbi0+dHhfbG9jayk7CisKKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 NjQoY2hhbl9ucCwgInR4LXRzLW1hc2siLCAmdHNfbWFzayk7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIocW1jLT5kZXYsICIlcE9GOiBmYWlsZWQgdG8gcmVhZCB0eC10cy1tYXNrXG4iLCBjaGFu X25wKTsKKwkJCW9mX25vZGVfcHV0KGNoYW5fbnApOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlj aGFuLT50eF90c19tYXNrID0gdHNfbWFzazsKKworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U2 NChjaGFuX25wLCAicngtdHMtbWFzayIsICZ0c19tYXNrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2VycihxbWMtPmRldiwgIiVwT0Y6IGZhaWxlZCB0byByZWFkIHJ4LXRzLW1hc2tcbiIsIGNoYW5f bnApOworCQkJb2Zfbm9kZV9wdXQoY2hhbl9ucCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNo YW4tPnJ4X3RzX21hc2sgPSB0c19tYXNrOworCisJCW1vZGUgPSAidHJhbnNwYXJlbnQiOworCQly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjaGFuX25wLCAiZnNsLG1vZGUiLCAmbW9kZSk7 CisJCWlmIChyZXQgJiYgcmV0ICE9IC1FSU5WQUwpIHsKKwkJCWRldl9lcnIocW1jLT5kZXYsICIl cE9GOiBmYWlsZWQgdG8gcmVhZCBmc2wsbW9kZVxuIiwgY2hhbl9ucCk7CisJCQlvZl9ub2RlX3B1 dChjaGFuX25wKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKCFzdHJjbXAobW9kZSwgInRy YW5zcGFyZW50IikpIHsKKwkJCWNoYW4tPm1vZGUgPSBRTUNfVFJBTlNQQVJFTlQ7CisJCX0gZWxz ZSBpZiAoIXN0cmNtcChtb2RlLCAiaGRsYyIpKSB7CisJCQljaGFuLT5tb2RlID0gUU1DX0hETEM7 CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHFtYy0+ZGV2LCAiJXBPRjogSW52YWxpZCBmc2wsbW9k ZSAoJXMpXG4iLCBjaGFuX25wLAorCQkJCW1vZGUpOworCQkJb2Zfbm9kZV9wdXQoY2hhbl9ucCk7 CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWNoYW4tPmlzX3JldmVyc2VfZGF0YSA9IG9m X3Byb3BlcnR5X3JlYWRfYm9vbChjaGFuX25wLAorCQkJCQkJCSAgICAgICJmc2wscmV2ZXJzZS1k YXRhIik7CisKKwkJbGlzdF9hZGRfdGFpbCgmY2hhbi0+bGlzdCwgJnFtYy0+Y2hhbl9oZWFkKTsK KwkJcW1jLT5jaGFuc1tjaGFuLT5pZF0gPSBjaGFuOworCX0KKworCXJldHVybiBxbWNfY2hlY2tf Y2hhbnMocW1jKTsKK30KKworc3RhdGljIGludCBxbWNfc2V0dXBfdHNhXzY0cnh0eChzdHJ1Y3Qg cW1jICpxbWMsIGNvbnN0IHN0cnVjdCB0c2FfY2VsbF9pbmZvICppbmZvKQoreworCXN0cnVjdCBx bWNfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgdmFsOworCisJLyogVXNlIGEg Y29tbW9uIFR4L1J4IDY0IGVudHJpZXMgdGFibGUKKwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91 c2x5IGNoZWNrZWQsIFR4IGFuZCBSeCByZWxhdGVkIHN0dWZmcyBhcmUKKwkgKiBpZGVudGljYWwg LT4gVXNlZCBSeCByZWxhdGVkIHN0dWZmIHRvIGJ1aWxkIHRoZSB0YWJsZQorCSAqLworCisJLyog SW52YWxpZGF0ZSBhbGwgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlv dXRfYmUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIpLCAweDAwMDAp OworCisJLyogU2V0IGVudHJpZXMgYmFzZWQgb24gUnggc3R1ZmYqLworCWxpc3RfZm9yX2VhY2hf ZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBp bmZvLT5uYl9yeF90czsgaSsrKSB7CisJCQlpZiAoIShjaGFuLT5yeF90c19tYXNrICYgKCgodTY0 KTEpIDw8IGkpKSkKKwkJCQljb250aW51ZTsKKworCQkJdmFsID0gUU1DX1RTQV9WQUxJRCB8IFFN Q19UU0FfTUFTSyB8CisJCQkgICAgICBRTUNfVFNBX0NIQU5ORUwoY2hhbi0+aWQpOworCQkJb3V0 X2JlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFJYICsgKGkgKiAyKSwgdmFsKTsKKwkJ fQorCX0KKworCS8qIFNldCBXcmFwIGJpdCBvbiBsYXN0IGVudHJ5ICovCisJc2V0Yml0czE2KHFt Yy0+c2NjX3ByYW0gKyBRTUNfR0JMX1RTQVRSWCArICgoaW5mby0+bmJfcnhfdHMgLSAxKSAqIDIp LAorCQlRTUNfVFNBX1dSQVApOworCisJLyogSW5pdCBwb2ludGVycyB0byB0aGUgdGFibGUgKi8K Kwl2YWwgPSBxbWMtPnNjY19wcmFtX29mZnNldCArIFFNQ19HQkxfVFNBVFJYOworCW91dF9iZTE2 KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX1JYX1NfUFRSLCB2YWwpOworCW91dF9iZTE2KHFtYy0+ c2NjX3ByYW0gKyBRTUNfR0JMX1JYUFRSLCB2YWwpOworCW91dF9iZTE2KHFtYy0+c2NjX3ByYW0g KyBRTUNfR0JMX1RYX1NfUFRSLCB2YWwpOworCW91dF9iZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNf R0JMX1RYUFRSLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcW1jX3NldHVw X3RzYV8zMnJ4XzMydHgoc3RydWN0IHFtYyAqcW1jLCBjb25zdCBzdHJ1Y3QgdHNhX2NlbGxfaW5m byAqaW5mbykKK3sKKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW47CisJdW5zaWduZWQgaW50IGk7CisJ dTE2IHZhbDsKKworCS8qIFVzZSBhIFR4IDMyIGVudHJpZXMgdGFibGUgYW5kIGEgUnggMzIgZW50 cmllcyB0YWJsZS4KKwkgKiBFdmVyeXRoaW5nIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQuCisJICov CisKKwkvKiBJbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBp KyspIHsKKwkJb3V0X2JlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFJYICsgKGkgKiAy KSwgMHgwMDAwKTsKKwkJb3V0X2JlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFRYICsg KGkgKiAyKSwgMHgwMDAwKTsKKwl9CisKKwkvKiBTZXQgZW50cmllcyBiYXNlZCBvbiBSeCBhbmQg VHggc3R1ZmYqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJnFtYy0+Y2hhbl9oZWFkLCBs aXN0KSB7CisJCS8qIFJ4IHBhcnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5iX3J4X3Rz OyBpKyspIHsKKwkJCWlmICghKGNoYW4tPnJ4X3RzX21hc2sgJiAoKCh1NjQpMSkgPDwgaSkpKQor CQkJCWNvbnRpbnVlOworCisJCQl2YWwgPSBRTUNfVFNBX1ZBTElEIHwgUU1DX1RTQV9NQVNLIHwK KwkJCSAgICAgIFFNQ19UU0FfQ0hBTk5FTChjaGFuLT5pZCk7CisJCQlvdXRfYmUxNihxbWMtPnNj Y19wcmFtICsgUU1DX0dCTF9UU0FUUlggKyAoaSAqIDIpLCB2YWwpOworCQl9CisJCS8qIFR4IHBh cnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm5iX3R4X3RzOyBpKyspIHsKKwkJCWlmICgh KGNoYW4tPnR4X3RzX21hc2sgJiAoKCh1NjQpMSkgPDwgaSkpKQorCQkJCWNvbnRpbnVlOworCisJ CQl2YWwgPSBRTUNfVFNBX1ZBTElEIHwgUU1DX1RTQV9NQVNLIHwKKwkJCSAgICAgIFFNQ19UU0Ff Q0hBTk5FTChjaGFuLT5pZCk7CisJCQlvdXRfYmUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9U U0FUVFggKyAoaSAqIDIpLCB2YWwpOworCQl9CisJfQorCisJLyogU2V0IFdyYXAgYml0IG9uIGxh c3QgZW50cmllcyAqLworCXNldGJpdHMxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9UU0FUUlgg KyAoKGluZm8tPm5iX3J4X3RzIC0gMSkgKiAyKSwKKwkJUU1DX1RTQV9XUkFQKTsKKwlzZXRiaXRz MTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfVFNBVFRYICsgKChpbmZvLT5uYl90eF90cyAtIDEp ICogMiksCisJCVFNQ19UU0FfV1JBUCk7CisKKwkvKiBJbml0IFJ4IHBvaW50ZXJzIC4uLiovCisJ dmFsID0gcW1jLT5zY2NfcHJhbV9vZmZzZXQgKyBRTUNfR0JMX1RTQVRSWDsKKwlvdXRfYmUxNihx bWMtPnNjY19wcmFtICsgUU1DX0dCTF9SWF9TX1BUUiwgdmFsKTsKKwlvdXRfYmUxNihxbWMtPnNj Y19wcmFtICsgUU1DX0dCTF9SWFBUUiwgdmFsKTsKKworCS8qIC4uLiBhbmQgVHggcG9pbnRlcnMg Ki8KKwl2YWwgPSBxbWMtPnNjY19wcmFtX29mZnNldCArIFFNQ19HQkxfVFNBVFRYOworCW91dF9i ZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX1RYX1NfUFRSLCB2YWwpOworCW91dF9iZTE2KHFt Yy0+c2NjX3ByYW0gKyBRTUNfR0JMX1RYUFRSLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgcW1jX3NldHVwX3RzYShzdHJ1Y3QgcW1jICpxbWMpCit7CisJc3RydWN0IHRzYV9j ZWxsX2luZm8gaW5mbzsKKwlpbnQgcmV0OworCisJLyogUmV0cmlldmUgaW5mbyBmcm9tIFRTQSBy ZWxhdGVkIGNlbGwgKi8KKwlyZXQgPSB0c2FfZ2V0X2luZm8ocW1jLT50c2EsIHFtYy0+dHNhX2Nl bGxfaWQsICZpbmZvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0dXAgb25l IGNvbW1vbiA2NCBlbnRyaWVzIHRhYmxlIG9yIHR3byAzMiBlbnRyaWVzIChvbmUgZm9yIFR4IGFu ZAorCSAqIG9uZSBmb3IgVHgpIGFjY29yZGluZyB0byBhc3NpZ25lZCBUUyBudW1iZXJzLgorCSAq LworCXJldHVybiAoKGluZm8ubmJfdHhfdHMgPiAzMikgfHwgKGluZm8ubmJfcnhfdHMgPiAzMikp ID8KKwkJcW1jX3NldHVwX3RzYV82NHJ4dHgocW1jLCAmaW5mbykgOgorCQlxbWNfc2V0dXBfdHNh XzMycnhfMzJ0eChxbWMsICZpbmZvKTsKK30KKworc3RhdGljIGludCBxbWNfc2V0dXBfY2hhbl90 cm5zeW5jKHN0cnVjdCBxbWMgKnFtYywgc3RydWN0IHFtY19jaGFuICpjaGFuKQoreworCXN0cnVj dCB0c2FfY2VsbF9pbmZvIGluZm87CisJdTE2IGZpcnN0X3J4LCBsYXN0X3R4OworCXUxNiB0cm5z eW5jOworCWludCByZXQ7CisKKwkvKiBSZXRyaWV2ZSBpbmZvIGZyb20gVFNBIHJlbGF0ZWQgY2Vs bCAqLworCXJldCA9IHRzYV9nZXRfaW5mbyhxbWMtPnRzYSwgcW1jLT50c2FfY2VsbF9pZCwgJmlu Zm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBGaW5kIHRoZSBmaXJzdCBSeCBU UyBhbGxvY2F0ZWQgdG8gdGhlIGNoYW5uZWwgKi8KKwlmaXJzdF9yeCA9IGNoYW4tPnJ4X3RzX21h c2sgPyBfX2ZmczY0KGNoYW4tPnJ4X3RzX21hc2spICsgMSA6IDA7CisKKwkvKiBGaW5kIHRoZSBs YXN0IFR4IFRTIGFsbG9jYXRlZCB0byB0aGUgY2hhbm5lbCAqLworCWxhc3RfdHggPSBmbHM2NChj aGFuLT50eF90c19tYXNrKTsKKworCXRybnN5bmMgPSAwOworCWlmIChpbmZvLm5iX3J4X3RzKQor CQl0cm5zeW5jIHw9IFFNQ19TUEVfVFJOU1lOQ19SWCgoZmlyc3RfcnggJSBpbmZvLm5iX3J4X3Rz KSAqIDIpOworCWlmIChpbmZvLm5iX3R4X3RzKQorCQl0cm5zeW5jIHw9IFFNQ19TUEVfVFJOU1lO Q19UWCgobGFzdF90eCAlIGluZm8ubmJfdHhfdHMpICogMik7CisKKwlvdXRfYmUxNihjaGFuLT5z X3BhcmFtICsgUU1DX1NQRV9UUk5TWU5DLCB0cm5zeW5jKTsKKworCWRldl9kYmcocW1jLT5kZXYs ICJjaGFuICV1OiB0cm5zeW5jPTB4JTA0eCwgcnggJXUvJXUgMHglbGx4LCB0eCAldS8ldSAweCVs bHhcbiIsCisJCWNoYW4tPmlkLCB0cm5zeW5jLAorCQlmaXJzdF9yeCwgaW5mby5uYl9yeF90cywg Y2hhbi0+cnhfdHNfbWFzaywKKwkJbGFzdF90eCwgaW5mby5uYl90eF90cywgY2hhbi0+dHhfdHNf bWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbWNfc2V0dXBfY2hhbihzdHJ1 Y3QgcW1jICpxbWMsIHN0cnVjdCBxbWNfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsK KwljYmRfdCBfX2lvbWVtICpiZDsKKwlpbnQgcmV0OworCXUxNiB2YWw7CisKKwljaGFuLT5xbWMg PSBxbWM7CisKKwkvKiBTZXQgY2hhbm5lbCBzcGVjaWZpYyBwYXJhbWV0ZXIgYmFzZSBhZGRyZXNz ICovCisJY2hhbi0+c19wYXJhbSA9IHFtYy0+ZHByYW0gKyAoY2hhbi0+aWQgKiA2NCk7CisJLyog MTYgYmQgcGVyIGNoYW5uZWwgKDggcnggYW5kIDggdHgpICovCisJY2hhbi0+dHhiZHMgPSBxbWMt PmJkX3RhYmxlICsgKGNoYW4tPmlkICogKFFNQ19OQl9UWEJEUyArIFFNQ19OQl9SWEJEUykpOwor CWNoYW4tPnJ4YmRzID0gcW1jLT5iZF90YWJsZSArIChjaGFuLT5pZCAqIChRTUNfTkJfVFhCRFMg KyBRTUNfTkJfUlhCRFMpKSArIFFNQ19OQl9UWEJEUzsKKworCWNoYW4tPnR4YmRfZnJlZSA9IGNo YW4tPnR4YmRzOworCWNoYW4tPnR4YmRfZG9uZSA9IGNoYW4tPnR4YmRzOworCWNoYW4tPnJ4YmRf ZnJlZSA9IGNoYW4tPnJ4YmRzOworCWNoYW4tPnJ4YmRfZG9uZSA9IGNoYW4tPnJ4YmRzOworCisJ LyogVEJBU0UgYW5kIFRCUFRSKi8KKwl2YWwgPSBjaGFuLT5pZCAqIChRTUNfTkJfVFhCRFMgKyBR TUNfTkJfUlhCRFMpICogc2l6ZW9mKGNiZF90KTsKKwlvdXRfYmUxNihjaGFuLT5zX3BhcmFtICsg UU1DX1NQRV9UQkFTRSwgdmFsKTsKKwlvdXRfYmUxNihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9U QlBUUiwgdmFsKTsKKworCS8qIFJCQVNFIGFuZCBSQlBUUiovCisJdmFsID0gKChjaGFuLT5pZCAq IChRTUNfTkJfVFhCRFMgKyBRTUNfTkJfUlhCRFMpKSArIFFNQ19OQl9UWEJEUykgKiBzaXplb2Yo Y2JkX3QpOworCW91dF9iZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JCQVNFLCB2YWwpOwor CW91dF9iZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1JCUFRSLCB2YWwpOworCW91dF9iZTMy KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX1RTVEFURSwgMHgzMDAwMDAwMCk7CisJb3V0X2JlMzIo Y2hhbi0+c19wYXJhbSArIFFNQ19TUEVfUlNUQVRFLCAweDMxMDAwMDAwKTsKKwlvdXRfYmUzMihj aGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aSVNUQVRFLCAweDAwMDAwMTAwKTsKKwlpZiAoY2hhbi0+ bW9kZSA9PSBRTUNfVFJBTlNQQVJFTlQpIHsKKwkJb3V0X2JlMzIoY2hhbi0+c19wYXJhbSArIFFN Q19TUEVfWkRTVEFURSwgMHgxODAwMDA4MCk7CisJCW91dF9iZTE2KGNoYW4tPnNfcGFyYW0gKyBR TUNfU1BFX1RNUkJMUiwgNjApOworCQl2YWwgPSBRTUNfU1BFX0NIQU1SX01PREVfVFJBTlNQIHwg UU1DX1NQRV9DSEFNUl9UUkFOU1BfU1lOQzsKKwkJaWYgKGNoYW4tPmlzX3JldmVyc2VfZGF0YSkK KwkJCXZhbCB8PSBRTUNfU1BFX0NIQU1SX1RSQU5TUF9SRDsKKwkJb3V0X2JlMTYoY2hhbi0+c19w YXJhbSArIFFNQ19TUEVfQ0hBTVIsIHZhbCk7CisJCXJldCA9IHFtY19zZXR1cF9jaGFuX3RybnN5 bmMocW1jLCBjaGFuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJ b3V0X2JlMzIoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfWkRTVEFURSwgMHgwMDAwMDA4MCk7CisJ CW91dF9iZTE2KGNoYW4tPnNfcGFyYW0gKyBRTUNfU1BFX01GTFIsIDYwKTsKKwkJb3V0X2JlMTYo Y2hhbi0+c19wYXJhbSArIFFNQ19TUEVfQ0hBTVIsCisJCQlRTUNfU1BFX0NIQU1SX01PREVfSERM QyB8IFFNQ19TUEVfQ0hBTVJfSERMQ19JRExNKTsKKwl9CisKKwkvKiBEbyBub3QgZW5hYmxlIGlu dGVycnVwdHMgbm93LiBUaGV5IHdpbGwgYmUgZW5hYmxlZCBsYXRlciAqLworCW91dF9iZTE2KGNo YW4tPnNfcGFyYW0gKyBRTUNfU1BFX0lOVE1TSywgMHgwMDAwKTsKKworCS8qIEluaXQgUnggQkRz IGFuZCBzZXQgV3JhcCBiaXQgb24gbGFzdCBkZXNjcmlwdG9yICovCisJQlVJTERfQlVHX09OKFFN Q19OQl9SWEJEUyA9PSAwKTsKKwl2YWwgPSBRTUNfQkRfUlhfSTsKKwlmb3IgKGkgPSAwOyBpIDwg UU1DX05CX1JYQkRTOyBpKyspIHsKKwkJYmQgPSBjaGFuLT5yeGJkcyArIGk7CisJCW91dF9iZTE2 KCZiZC0+Y2JkX3NjLCB2YWwpOworCX0KKwliZCA9IGNoYW4tPnJ4YmRzICsgUU1DX05CX1JYQkRT IC0gMTsKKwlvdXRfYmUxNigmYmQtPmNiZF9zYywgdmFsIHwgUU1DX0JEX1JYX1cpOworCisJLyog SW5pdCBUeCBCRHMgYW5kIHNldCBXcmFwIGJpdCBvbiBsYXN0IGRlc2NyaXB0b3IgKi8KKwlCVUlM RF9CVUdfT04oUU1DX05CX1RYQkRTID09IDApOworCXZhbCA9IFFNQ19CRF9UWF9JOworCWlmIChj aGFuLT5tb2RlID09IFFNQ19IRExDKQorCQl2YWwgfD0gUU1DX0JEX1RYX0wgfCBRTUNfQkRfVFhf VEM7CisJZm9yIChpID0gMDsgaSA8IFFNQ19OQl9UWEJEUzsgaSsrKSB7CisJCWJkID0gY2hhbi0+ dHhiZHMgKyBpOworCQlvdXRfYmUxNigmYmQtPmNiZF9zYywgdmFsKTsKKwl9CisJYmQgPSBjaGFu LT50eGJkcyArIFFNQ19OQl9UWEJEUyAtIDE7CisJb3V0X2JlMTYoJmJkLT5jYmRfc2MsIHZhbCB8 IFFNQ19CRF9UWF9XKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFtY19zZXR1cF9j aGFucyhzdHJ1Y3QgcW1jICpxbWMpCit7CisJc3RydWN0IHFtY19jaGFuICpjaGFuOworCWludCBy ZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZxbWMtPmNoYW5faGVhZCwgbGlzdCkg eworCQlyZXQgPSBxbWNfc2V0dXBfY2hhbihxbWMsIGNoYW4pOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbWNfZmluYWxpemVf Y2hhbnMoc3RydWN0IHFtYyAqcW1jKQoreworCXN0cnVjdCBxbWNfY2hhbiAqY2hhbjsKKwlpbnQg cmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmcW1jLT5jaGFuX2hlYWQsIGxpc3Qp IHsKKwkJLyogVW5tYXNrIGNoYW5uZWwgaW50ZXJydXB0cyAqLworCQlpZiAoY2hhbi0+bW9kZSA9 PSBRTUNfSERMQykgeworCQkJb3V0X2JlMTYoY2hhbi0+c19wYXJhbSArIFFNQ19TUEVfSU5UTVNL LAorCQkJCVFNQ19JTlRfTklEIHwgUU1DX0lOVF9JREwgfCBRTUNfSU5UX01SRiB8CisJCQkJUU1D X0lOVF9VTiB8IFFNQ19JTlRfUlhGIHwgUU1DX0lOVF9CU1kgfAorCQkJCVFNQ19JTlRfVFhCIHwg UU1DX0lOVF9SWEIpOworCQl9IGVsc2UgeworCQkJb3V0X2JlMTYoY2hhbi0+c19wYXJhbSArIFFN Q19TUEVfSU5UTVNLLAorCQkJCVFNQ19JTlRfVU4gfCBRTUNfSU5UX0JTWSB8CisJCQkJUU1DX0lO VF9UWEIgfCBRTUNfSU5UX1JYQik7CisJCX0KKworCQkvKiBGb3JjZWQgc3RvcCB0aGUgY2hhbm5l bCAqLworCQlyZXQgPSBxbWNfY2hhbl9zdG9wKGNoYW4sIFFNQ19DSEFOX0FMTCk7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFt Y19zZXR1cF9pbnRzKHN0cnVjdCBxbWMgKnFtYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYg X19pb21lbSAqbGFzdDsKKworCS8qIFJheiBhbGwgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkg PCAocW1jLT5pbnRfc2l6ZSAvIHNpemVvZih1MTYpKTsgaSsrKQorCQlvdXRfYmUxNihxbWMtPmlu dF90YWJsZSArIGksIDB4MDAwMCk7CisKKwkvKiBTZXQgV3JhcCBiaXQgb24gbGFzdCBlbnRyeSAq LworCWlmIChxbWMtPmludF9zaXplID49IHNpemVvZih1MTYpKSB7CisJCWxhc3QgPSBxbWMtPmlu dF90YWJsZSArIChxbWMtPmludF9zaXplIC8gc2l6ZW9mKHUxNikpIC0gMTsKKwkJb3V0X2JlMTYo bGFzdCwgUU1DX0lOVF9XKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcW1j X2lycV9naW50KHN0cnVjdCBxbWMgKnFtYykKK3sKKwlzdHJ1Y3QgcW1jX2NoYW4gKmNoYW47CisJ dW5zaWduZWQgaW50IGNoYW5faWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgaW50X2Vu dHJ5OworCisJaW50X2VudHJ5ID0gaW5fYmUxNihxbWMtPmludF9jdXJyKTsKKwl3aGlsZSAoaW50 X2VudHJ5ICYgUU1DX0lOVF9WKSB7CisJCS8qIENsZWFyIGFsbCBidXQgdGhlIFdyYXAgYml0ICov CisJCW91dF9iZTE2KHFtYy0+aW50X2N1cnIsIGludF9lbnRyeSAmIFFNQ19JTlRfVyk7CisKKwkJ Y2hhbl9pZCA9IFFNQ19JTlRfR0VUX0NIQU5ORUwoaW50X2VudHJ5KTsKKwkJY2hhbiA9IHFtYy0+ Y2hhbnNbY2hhbl9pZF07CisJCWlmICghY2hhbikgeworCQkJZGV2X2VycihxbWMtPmRldiwgImlu dGVycnVwdCBvbiBpbnZhbGlkIGNoYW4gJXVcbiIsIGNoYW5faWQpOworCQkJZ290byBpbnRfbmV4 dDsKKwkJfQorCisJCWlmIChpbnRfZW50cnkgJiBRTUNfSU5UX1RYQikKKwkJCXFtY19jaGFuX3dy aXRlX2RvbmUoY2hhbik7CisKKwkJaWYgKGludF9lbnRyeSAmIFFNQ19JTlRfVU4pIHsKKwkJCWRl dl9pbmZvKHFtYy0+ZGV2LCAiaW50ciBjaGFuICV1LCAweCUwNHggKFVOKVxuIiwgY2hhbl9pZCwK KwkJCQkgaW50X2VudHJ5KTsKKwkJCWNoYW4tPm5iX3R4X3VuZGVycnVuKys7CisJCX0KKworCQlp ZiAoaW50X2VudHJ5ICYgUU1DX0lOVF9CU1kpIHsKKwkJCWRldl9pbmZvKHFtYy0+ZGV2LCAiaW50 ciBjaGFuICV1LCAweCUwNHggKEJTWSlcbiIsIGNoYW5faWQsCisJCQkJIGludF9lbnRyeSk7CisJ CQljaGFuLT5uYl9yeF9idXN5Kys7CisJCQkvKiBSZXN0YXJ0IHRoZSByZWNlaXZlciBpZiBuZWVk ZWQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5yeF9sb2NrLCBmbGFncyk7CisJCQlp ZiAoY2hhbi0+cnhfcGVuZGluZyAmJiAhY2hhbi0+aXNfcnhfc3RvcHBlZCkgeworCQkJCWlmIChj aGFuLT5tb2RlID09IFFNQ19UUkFOU1BBUkVOVCkKKwkJCQkJb3V0X2JlMzIoY2hhbi0+c19wYXJh bSArIFFNQ19TUEVfWkRTVEFURSwgMHgxODAwMDA4MCk7CisJCQkJZWxzZQorCQkJCQlvdXRfYmUz MihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9aRFNUQVRFLCAweDAwMDAwMDgwKTsKKwkJCQlvdXRf YmUzMihjaGFuLT5zX3BhcmFtICsgUU1DX1NQRV9SU1RBVEUsIDB4MzEwMDAwMDApOworCQkJCWNo YW4tPmlzX3J4X2hhbHRlZCA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQljaGFuLT5pc19yeF9o YWx0ZWQgPSB0cnVlOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+cnhf bG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKGludF9lbnRyeSAmIFFNQ19JTlRfUlhCKQorCQkJ cW1jX2NoYW5fcmVhZF9kb25lKGNoYW4pOworCitpbnRfbmV4dDoKKwkJaWYgKGludF9lbnRyeSAm IFFNQ19JTlRfVykKKwkJCXFtYy0+aW50X2N1cnIgPSBxbWMtPmludF90YWJsZTsKKwkJZWxzZQor CQkJcW1jLT5pbnRfY3VycisrOworCQlpbnRfZW50cnkgPSBpbl9iZTE2KHFtYy0+aW50X2N1cnIp OworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHFtY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpwcml2KQoreworCXN0cnVjdCBxbWMgKnFtYyA9IChzdHJ1Y3QgcW1jICopcHJpdjsKKwl1 MTYgc2NjZTsKKworCXNjY2UgPSBpbl9iZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDRSk7CisJ b3V0X2JlMTYocW1jLT5zY2NfcmVncyArIFNDQ19TQ0NFLCBzY2NlKTsKKworCWlmICh1bmxpa2Vs eShzY2NlICYgU0NDX1NDQ0VfSVFPVikpCisJCWRldl9pbmZvKHFtYy0+ZGV2LCAiSVJRIHF1ZXVl IG92ZXJmbG93XG4iKTsKKworCWlmICh1bmxpa2VseShzY2NlICYgU0NDX1NDQ0VfR1VOKSkKKwkJ ZGV2X2VycihxbWMtPmRldiwgIkdsb2JhbCB0cmFuc21pdHRlciB1bmRlcnJ1blxuIik7CisKKwlp ZiAodW5saWtlbHkoc2NjZSAmIFNDQ19TQ0NFX0dPVikpCisJCWRldl9lcnIocW1jLT5kZXYsICJH bG9iYWwgcmVjZWl2ZXIgb3ZlcnJ1blxuIik7CisKKwkvKiBub3JtYWwgaW50ZXJydXB0ICovCisJ aWYgKGxpa2VseShzY2NlICYgU0NDX1NDQ0VfR0lOVCkpCisJCXFtY19pcnFfZ2ludChxbWMpOwor CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHFtY19wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2 LT5kZXYub2Zfbm9kZTsKKwl1bnNpZ25lZCBpbnQgbmJfY2hhbnM7CisJc3RydWN0IHJlc291cmNl ICpyZXM7CisJc3RydWN0IHFtYyAqcW1jOworCXUzMiB2YWw7CisJaW50IGlycTsKKwlpbnQgcmV0 OworCisJcW1jID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcW1jKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFxbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcW1jLT5kZXYgPSAmcGRl di0+ZGV2OworCUlOSVRfTElTVF9IRUFEKCZxbWMtPmNoYW5faGVhZCk7CisKKwlxbWMtPnNjY19y ZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCAic2NjX3Jl Z3MiKTsKKwlpZiAoSVNfRVJSKHFtYy0+c2NjX3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihxbWMt PnNjY19yZWdzKTsKKworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgInNjY19wcmFtIik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRUlO VkFMOworCXFtYy0+c2NjX3ByYW1fb2Zmc2V0ID0gcmVzLT5zdGFydCAtIGdldF9pbW1yYmFzZSgp OworCXFtYy0+c2NjX3ByYW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UocW1jLT5kZXYsIHJlcyk7 CisJaWYgKElTX0VSUihxbWMtPnNjY19wcmFtKSkKKwkJcmV0dXJuIFBUUl9FUlIocW1jLT5zY2Nf cHJhbSk7CisKKwlxbWMtPmRwcmFtICA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9i eW5hbWUocGRldiwgImRwcmFtIik7CisJaWYgKElTX0VSUihxbWMtPmRwcmFtKSkKKwkJcmV0dXJu IFBUUl9FUlIocW1jLT5kcHJhbSk7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwg InRzYS1jZWxsLWlkIiwgJnZhbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHFtYy0+ZGV2LCAi JXBPRjogZmFpbGVkIHRvIHJlYWQgdHNhLWNlbGwtaWRcbiIsIG5wKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisJcW1jLT50c2FfY2VsbF9pZCA9IHZhbDsKKworCXFtYy0+dHNhID0gZGV2bV90c2FfZ2V0 X2J5cGhhbmRsZShxbWMtPmRldiwgbnAsICJ0c2EiKTsKKwlpZiAoSVNfRVJSKHFtYy0+dHNhKSkg eworCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShxbWMtPmRldiwgUFRSX0VSUihxbWMtPnRzYSksCisJ CQkJICAgICAiRmFpbGVkIHRvIGdldCBUU0FcbiIpOworCX0KKworCS8qIENvbm5lY3QgdGhlIFND QyB0byBUU0EgKi8KKwlyZXQgPSB0c2FfY29ubmVjdChxbWMtPnRzYSwgcW1jLT50c2FfY2VsbF9p ZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHFtYy0+ZGV2LCAiRmFpbGVkIHRvIGNvbm5lY3Qg VFNBXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBQYXJzZSBjaGFubmVscyBpbmZvcm1h dGlvbnNzICovCisJcmV0ID0gcW1jX29mX3BhcnNlX2NoYW5zKHFtYywgbnApOworCWlmIChyZXQp CisJCWdvdG8gZXJyX3RzYV9kaXNjb25uZWN0OworCisJbmJfY2hhbnMgPSBxbWNfbmJfY2hhbnMo cW1jKTsKKworCS8qIEluaXQgR01TUl9IIGFuZCBHTVNSX0wgcmVnaXN0ZXJzICovCisJb3V0X2Jl MzIocW1jLT5zY2NfcmVncyArIFNDQ19HU01SSCwKKwkJU0NDX0dTTVJIX0NEUyB8IFNDQ19HU01S SF9DVFNTIHwgU0NDX0dTTVJIX0NEUCB8IFNDQ19HU01SSF9DVFNQKTsKKworCS8qIGVuYWJsZSBR TUMgbW9kZSAqLworCW91dF9iZTMyKHFtYy0+c2NjX3JlZ3MgKyBTQ0NfR1NNUkwsIFNDQ19HU01S TF9NT0RFX1FNQyk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgdGFibGUK KwkgKiA4IHJ4IGFuZCA4IHR4IGRlc2NyaXB0b3JzIHBlciBjaGFubmVsCisJICovCisJcW1jLT5i ZF9zaXplID0gKG5iX2NoYW5zICogKFFNQ19OQl9UWEJEUyArIFFNQ19OQl9SWEJEUykpICogc2l6 ZW9mKGNiZF90KTsKKwlxbWMtPmJkX3RhYmxlID0gZG1hbV9hbGxvY19jb2hlcmVudChxbWMtPmRl diwgcW1jLT5iZF9zaXplLAorCQkmcW1jLT5iZF9kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYg KCFxbWMtPmJkX3RhYmxlKSB7CisJCWRldl9lcnIocW1jLT5kZXYsICJGYWlsZWQgdG8gYWxsb2Nh dGUgYmQgdGFibGVcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl90c2FfZGlzY29u bmVjdDsKKwl9CisJbWVtc2V0KHFtYy0+YmRfdGFibGUsIDAsIHFtYy0+YmRfc2l6ZSk7CisKKwlv dXRfYmUzMihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9NQ0JBU0UsIHFtYy0+YmRfZG1hX2FkZHIp OworCisJLyogQWxsb2NhdGUgdGhlIGludGVycnVwdCB0YWJsZSAqLworCXFtYy0+aW50X3NpemUg PSBRTUNfTkJfSU5UUyAqIHNpemVvZih1MTYpOworCXFtYy0+aW50X3RhYmxlID0gZG1hbV9hbGxv Y19jb2hlcmVudChxbWMtPmRldiwgcW1jLT5pbnRfc2l6ZSwKKwkJJnFtYy0+aW50X2RtYV9hZGRy LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXFtYy0+aW50X3RhYmxlKSB7CisJCWRldl9lcnIocW1jLT5k ZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0IHRhYmxlXG4iKTsKKwkJcmV0ID0gLUVO T01FTTsKKwkJZ290byBlcnJfdHNhX2Rpc2Nvbm5lY3Q7CisJfQorCW1lbXNldChxbWMtPmludF90 YWJsZSwgMCwgcW1jLT5pbnRfc2l6ZSk7CisKKwlxbWMtPmludF9jdXJyID0gcW1jLT5pbnRfdGFi bGU7CisJb3V0X2JlMzIocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfSU5UQkFTRSwgcW1jLT5pbnRf ZG1hX2FkZHIpOworCW91dF9iZTMyKHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX0lOVFBUUiwgcW1j LT5pbnRfZG1hX2FkZHIpOworCisJLyogU2V0IE1SQkxSICh2YWxpZCBmb3IgSERMQyBvbmx5KSBt YXggTVJVICsgbWF4IENSQyAqLworCW91dF9iZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX01S QkxSLCBIRExDX01BWF9NUlUgKyA0KTsKKworCW91dF9iZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNf R0JMX0dSRlRIUiwgMSk7CisJb3V0X2JlMTYocW1jLT5zY2NfcHJhbSArIFFNQ19HQkxfR1JGQ05U LCAxKTsKKworCW91dF9iZTMyKHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX0NfTUFTSzMyLCAweERF QkIyMEUzKTsKKwlvdXRfYmUxNihxbWMtPnNjY19wcmFtICsgUU1DX0dCTF9DX01BU0sxNiwgMHhG MEI4KTsKKworCXJldCA9IHFtY19zZXR1cF90c2EocW1jKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl90c2FfZGlzY29ubmVjdDsKKworCW91dF9iZTE2KHFtYy0+c2NjX3ByYW0gKyBRTUNfR0JMX1FN Q1NUQVRFLCAweDgwMDApOworCisJcmV0ID0gcW1jX3NldHVwX2NoYW5zKHFtYyk7CisJaWYgKHJl dCkKKwkJZ290byBlcnJfdHNhX2Rpc2Nvbm5lY3Q7CisKKwkvKiBJbml0IGludGVycnVwdHMgdGFi bGUgKi8KKwlyZXQgPSBxbWNfc2V0dXBfaW50cyhxbWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X3RzYV9kaXNjb25uZWN0OworCisJLyogRGlzYWJsZSBhbmQgY2xlYXIgaW50ZXJydXB0cywgIHNl dCB0aGUgaXJxIGhhbmRsZXIgKi8KKwlvdXRfYmUxNihxbWMtPnNjY19yZWdzICsgU0NDX1NDQ00s IDB4MDAwMCk7CisJb3V0X2JlMTYocW1jLT5zY2NfcmVncyArIFNDQ19TQ0NFLCAweDAwMEYpOwor CWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCWdvdG8g ZXJyX3RzYV9kaXNjb25uZWN0OworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEocW1jLT5kZXYsIGly cSwgcW1jX2lycV9oYW5kbGVyLCAwLCAicW1jIiwgcW1jKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290 byBlcnJfdHNhX2Rpc2Nvbm5lY3Q7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCW91dF9i ZTE2KHFtYy0+c2NjX3JlZ3MgKyBTQ0NfU0NDTSwKKwkJU0NDX1NDQ0VfSVFPViB8IFNDQ19TQ0NF X0dJTlQgfCBTQ0NfU0NDRV9HVU4gfCBTQ0NfU0NDRV9HT1YpOworCisJcmV0ID0gcW1jX2ZpbmFs aXplX2NoYW5zKHFtYyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2Rpc2FibGVfaW50cjsK KworCS8qIEVuYWJsZSB0cmFuc21pdGVyIGFuZCByZWNlaXZlciAqLworCXNldGJpdHMzMihxbWMt PnNjY19yZWdzICsgU0NDX0dTTVJMLCBTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCk7CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBxbWMpOworCisJcmV0dXJuIDA7CisKK2Vycl9k aXNhYmxlX2ludHI6CisJb3V0X2JlMTYocW1jLT5zY2NfcmVncyArIFNDQ19TQ0NNLCAwKTsKKwor ZXJyX3RzYV9kaXNjb25uZWN0OgorCXRzYV9kaXNjb25uZWN0KHFtYy0+dHNhLCBxbWMtPnRzYV9j ZWxsX2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHFtY19yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcW1jICpxbWMgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIERpc2FibGUgdHJhbnNtaXRlciBhbmQgcmVjZWl2ZXIg Ki8KKwlzZXRiaXRzMzIocW1jLT5zY2NfcmVncyArIFNDQ19HU01STCwgMCk7CisKKwkvKiBEaXNh YmxlIGludGVycnVwdHMgKi8KKwlvdXRfYmUxNihxbWMtPnNjY19yZWdzICsgU0NDX1NDQ00sIDAp OworCisJLyogRGlzY29ubmVjdCBmcm9tIHRzYSAqLworCXRzYV9kaXNjb25uZWN0KHFtYy0+dHNh LCBxbWMtPnRzYV9jZWxsX2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBxbWNfaWRfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZz bCxjcG0xLXNjYy1xbWMiIH0sCisJe30gLyogc2VudGluZWwgKi8KK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBxbWNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBxbWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImZzbC1xbWMiLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocW1jX2lkX3RhYmxlKSwKKwl9LAorCS5wcm9i ZSA9IHFtY19wcm9iZSwKKwkucmVtb3ZlID0gcW1jX3JlbW92ZSwKK307Cittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKHFtY19kcml2ZXIpOworCitzdHJ1Y3QgcW1jX2NoYW4gKnFtY19jaGFuX2dldF9i eXBoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcGhhbmRsZV9uYW1l KQoreworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mgb3V0X2FyZ3M7CisJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcW1jX2NoYW4gKnFtY19jaGFuOworCXN0cnVjdCBxbWMg KnFtYzsKKwlpbnQgcmV0OworCisJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2Fy Z3MobnAsIHBoYW5kbGVfbmFtZSwgMSwgMCwKKwkJCQkJICAgICAgICZvdXRfYXJncyk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlpZiAoIW9mX21hdGNoX25vZGUo cW1jX2RyaXZlci5kcml2ZXIub2ZfbWF0Y2hfdGFibGUsIG91dF9hcmdzLm5wKSkgeworCQlvZl9u b2RlX3B1dChvdXRfYXJncy5ucCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwor CXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG91dF9hcmdzLm5wKTsKKwlvZl9ub2RlX3B1 dChvdXRfYXJncy5ucCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsK KworCXFtYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghcW1jKSB7CisJCXBs YXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIp OworCX0KKworCWlmIChvdXRfYXJncy5hcmdzX2NvdW50ICE9IDEpIHsKKwkJcGxhdGZvcm1fZGV2 aWNlX3B1dChwZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKG91 dF9hcmdzLmFyZ3NbMF0gPj0gQVJSQVlfU0laRShxbWMtPmNoYW5zKSkgeworCQlwbGF0Zm9ybV9k ZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlxbWNf Y2hhbiA9IHFtYy0+Y2hhbnNbb3V0X2FyZ3MuYXJnc1swXV07CisJaWYgKCFxbWNfY2hhbikgewor CQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsK Kwl9CisKKwlyZXR1cm4gcW1jX2NoYW47Cit9CitFWFBPUlRfU1lNQk9MKHFtY19jaGFuX2dldF9i eXBoYW5kbGUpOworCit2b2lkIHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4pCit7 CisJcHV0X2RldmljZShjaGFuLT5xbWMtPmRldik7Cit9CitFWFBPUlRfU1lNQk9MKHFtY19jaGFu X3B1dCk7CisKK3N0YXRpYyB2b2lkIGRldm1fcW1jX2NoYW5fcmVsZWFzZShzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQgKnJlcykKK3sKKwlzdHJ1Y3QgcW1jX2NoYW4gKipxbWNfY2hhbiA9IHJlczsK KworCXFtY19jaGFuX3B1dCgqcW1jX2NoYW4pOworfQorCitzdHJ1Y3QgcW1jX2NoYW4gKmRldm1f cW1jX2NoYW5fZ2V0X2J5cGhhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3Ry dWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwaGFuZGxlX25hbWUp Cit7CisJc3RydWN0IHFtY19jaGFuICpxbWNfY2hhbjsKKwlzdHJ1Y3QgcW1jX2NoYW4gKipkcjsK KworCWRyID0gZGV2cmVzX2FsbG9jKGRldm1fcW1jX2NoYW5fcmVsZWFzZSwgc2l6ZW9mKCpkciks IEdGUF9LRVJORUwpOworCWlmICghZHIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ cW1jX2NoYW4gPSBxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKG5wLCBwaGFuZGxlX25hbWUpOworCWlm ICghSVNfRVJSKHFtY19jaGFuKSkgeworCQkqZHIgPSBxbWNfY2hhbjsKKwkJZGV2cmVzX2FkZChk ZXYsIGRyKTsKKwl9IGVsc2UgeworCQlkZXZyZXNfZnJlZShkcik7CisJfQorCisJcmV0dXJuIHFt Y19jaGFuOworfQorRVhQT1JUX1NZTUJPTChkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5kbGUpOwor CitNT0RVTEVfQVVUSE9SKCJIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4i KTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1BNIFFNQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMuaCBiL2luY2x1ZGUv c29jL2ZzbC9xZS9xbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjNjNjFhNTBkMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc29jL2ZzbC9xZS9xbWMu aApAQCAtMCwwICsxLDcxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v ci1sYXRlciAqLworLyoKKyAqIFFNQyBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IDIwMjIg Q1MgR1JPVVAgRnJhbmNlCisgKgorICogQXV0aG9yOiBIZXJ2ZSBDb2RpbmEgPGhlcnZlLmNvZGlu YUBib290bGluLmNvbT4KKyAqLworI2lmbmRlZiBfX1NPQ19GU0xfUU1DX0hfXworI2RlZmluZSBf X1NPQ19GU0xfUU1DX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRl dmljZV9ub2RlOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBxbWNfY2hhbjsKKworc3RydWN0IHFt Y19jaGFuICpxbWNfY2hhbl9nZXRfYnlwaGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNv bnN0IGNoYXIgKnBoYW5kbGVfbmFtZSk7Cit2b2lkIHFtY19jaGFuX3B1dChzdHJ1Y3QgcW1jX2No YW4gKmNoYW4pOworc3RydWN0IHFtY19jaGFuICpkZXZtX3FtY19jaGFuX2dldF9ieXBoYW5kbGUo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgICAgIGNv bnN0IGNoYXIgKnBoYW5kbGVfbmFtZSk7CisKK2VudW0gcW1jX21vZGUgeworCVFNQ19UUkFOU1BB UkVOVCwKKwlRTUNfSERMQywKK307CisKK3N0cnVjdCBxbWNfY2hhbl9pbmZvIHsKKwllbnVtIHFt Y19tb2RlIG1vZGU7CisJdW5zaWduZWQgbG9uZyByeF9mc19yYXRlOworCXVuc2lnbmVkIGxvbmcg cnhfYml0X3JhdGU7CisJdTggbmJfcnhfdHM7CisJdW5zaWduZWQgbG9uZyB0eF9mc19yYXRlOwor CXVuc2lnbmVkIGxvbmcgdHhfYml0X3JhdGU7CisJdTggbmJfdHhfdHM7Cit9OworCitpbnQgcW1j X2NoYW5fZ2V0X2luZm8oc3RydWN0IHFtY19jaGFuICpjaGFuLCBzdHJ1Y3QgcW1jX2NoYW5faW5m byAqaW5mbyk7CisKK3N0cnVjdCBxbWNfY2hhbl9wYXJhbSB7CisJZW51bSBxbWNfbW9kZSBtb2Rl OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUxNiBtYXhfcnhfYnVmX3NpemU7CisJCQl1MTYg bWF4X3J4X2ZyYW1lX3NpemU7CisJCQlib29sIGlzX2NyYzMyOworCQl9IGhkbGM7CisJCXN0cnVj dCB7CisJCQl1MTYgbWF4X3J4X2J1Zl9zaXplOworCQl9IHRyYW5zcDsKKwl9OworfTsKKworaW50 IHFtY19jaGFuX3NldF9wYXJhbShzdHJ1Y3QgcW1jX2NoYW4gKmNoYW4sIGNvbnN0IHN0cnVjdCBx bWNfY2hhbl9wYXJhbSAqcGFyYW0pOworCitpbnQgcW1jX2NoYW5fd3JpdGVfc3VibWl0KHN0cnVj dCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuZ3RoLAorCQkJICB2 b2lkICgqY29tcGxldGUpKHZvaWQgKmNvbnRleHQpLCB2b2lkICpjb250ZXh0KTsKKworaW50IHFt Y19jaGFuX3JlYWRfc3VibWl0KHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRy LCBzaXplX3QgbGVuZ3RoLAorCQkJIHZvaWQgKCpjb21wbGV0ZSkodm9pZCAqY29udGV4dCwgc2l6 ZV90IGxlbmd0aCksCisJCQkgdm9pZCAqY29udGV4dCk7CisKKyNkZWZpbmUgUU1DX0NIQU5fUkVB RCAgKDE8PDApCisjZGVmaW5lIFFNQ19DSEFOX1dSSVRFICgxPDwxKQorI2RlZmluZSBRTUNfQ0hB Tl9BTEwgICAoUU1DX0NIQU5fUkVBRCB8IFFNQ19DSEFOX1dSSVRFKQorCitpbnQgcW1jX2NoYW5f c3RhcnQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKTsKK2ludCBxbWNfY2hh bl9zdG9wKHN0cnVjdCBxbWNfY2hhbiAqY2hhbiwgaW50IGRpcmVjdGlvbik7CitpbnQgcW1jX2No YW5fcmVzZXQoc3RydWN0IHFtY19jaGFuICpjaGFuLCBpbnQgZGlyZWN0aW9uKTsKKworI2VuZGlm IC8qIF9fU09DX0ZTTF9RTUNfSF9fICovCi0tIAoyLjM4LjEKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==