From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8397CC3A59D for ; Thu, 22 Aug 2019 10:45:15 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 43CBA205ED for ; Thu, 22 Aug 2019 10:45:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="mcuzJnIh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43CBA205ED Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; 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:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5v6/5+yBG77YVP68ZYoUwBbK3+pY/NzF0sgAaPIjU1w=; b=mcuzJnIhvwNhkL cB3F+VOZteGeznbZYv3LC693aXcibvqf4oNbCAGnenIooDSnPx9mbPm1tNQmLULXP5AtM1nlrHaaA 0tM9XFwL5F+dUdz5C5TfHGBrpR3B77gYqBsvQZXeDGIEKDKpwtmtEn55aSsTy6zzS6Fn9UJb/klgG FjscUO+eHUfO8iVsCk9/76LQweaHy5y2QaH8GdsYSKYr6mDTO2Vr0WKY5k4c4ktKISQDaLceEBaKh WqmuguPssrfyxkYRdJ29b7vPsG9Na4tNMrtJgLv4GPimbVhjxRao+pNghf6ELSucZNai4wZsl2Qb+ h2ezjQyzNbDqhM6n1eIQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i0kaY-00081O-A2; Thu, 22 Aug 2019 10:45:06 +0000 Received: from honk.sigxcpu.org ([24.134.29.49]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i0kZx-0007GU-As for linux-arm-kernel@lists.infradead.org; Thu, 22 Aug 2019 10:44:34 +0000 Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id E3723FB02; Thu, 22 Aug 2019 12:44:27 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at honk.sigxcpu.org Received: from honk.sigxcpu.org ([127.0.0.1]) by localhost (honk.sigxcpu.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qR7CdQ25IUkd; Thu, 22 Aug 2019 12:44:19 +0200 (CEST) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id B25994017B; Thu, 22 Aug 2019 12:44:16 +0200 (CEST) From: =?UTF-8?q?Guido=20G=C3=BCnther?= To: David Airlie , Daniel Vetter , Rob Herring , Mark Rutland , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Andrzej Hajda , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Lee Jones , =?UTF-8?q?Guido=20G=C3=BCnther?= , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Robert Chiras , Sam Ravnborg , Arnd Bergmann Subject: [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Date: Thu, 22 Aug 2019 12:44:16 +0200 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190822_034429_920380_EB41EF61 X-CRM114-Status: GOOD ( 22.66 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 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+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXIgZm91bmQgb24KaS5NWDggU29Dcy4KCkl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4 TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgplLmcuIHRoZSBpLk1YOFFYUC4KCkl0 IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIG14c2ZiLgoKU2ln bmVkLW9mZi1ieTogR3VpZG8gR8O8bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KQ28tZGV2ZWxvcGVk LWJ5OiBSb2JlcnQgQ2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv bndsLWRzaS9LY29uZmlnICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L01ha2VmaWxlICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRy di5jIHwgNTAxICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS9ud2wtZHJ2LmggfCAgNjUgKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbnds LWRzaS5jIHwgNzAwICsrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRzaS5oIHwgMTEyICsrKysKIDggZmlsZXMgY2hhbmdlZCwgMTQwMSBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9u d2wtZHNpL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCmlu ZGV4IDFjYzlmNTAyYzFmMi4uNzk4MGI1YzIxNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCkBA IC0xNTQsNiArMTU0LDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4 L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL0tjb25m aWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWciCisK IHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnIgogCiBlbmRt ZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRleCA0OTM0ZmNmNWE2ZjguLmQ5ZjZjMGY3NzU5 MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCkBAIC0xNiw0ICsxNiw1IEBAIG9iai0kKENPTkZJ R19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwogb2JqLSQoQ09ORklHX0RSTV9JMkNfQURW NzUxMSkgKz0gYWR2NzUxMS8KIG9iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2KSArPSB0aS1z bjY1ZHNpODYubwogb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vCitv YmotJChDT05GSUdfRFJNX05XTF9NSVBJX0RTSSkgKz0gbndsLWRzaS8KIG9iai15ICs9IHN5bm9w c3lzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNiMTU3YTlmMjIyOQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAK K2NvbmZpZyBEUk1fTldMX01JUElfRFNJCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5vcnRod2Vz dCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBEUk0KKwlkZXBl bmRzIG9uIENPTU1PTl9DTEsKKwlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQorCXNlbGVjdCBE Uk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMX0JS SURHRQorCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQSFkKKwlzZWxlY3QgTUZEX1NZU0NPTgor CXNlbGVjdCBNVUxUSVBMRVhFUgorCXNlbGVjdCBSRUdNQVBfTU1JTworCWhlbHAKKwkgIFRoaXMg ZW5hYmxlcyB0aGUgTm9ydGh3ZXN0IExvZ2ljIE1JUEkgRFNJIEhvc3QgY29udHJvbGxlciBhcwor CSAgZm9yIGV4YW1wbGUgZm91bmQgb24gTlhQJ3MgaS5NWDggUHJvY2Vzc29ycy4KKwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uODA0YmFmMmYxOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorIyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorbndsLW1pcGktZHNpLXkgOj0gbndsLWRydi5vIG53 bC1kc2kubworb2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1taXBpLWRzaS5v CitoZWFkZXItdGVzdC15ICs9IG53bC1kcnYuaCBud2wtZHNpLmgKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZTQ1NzQzODczOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpL253bC1kcnYuYwpAQCAtMCwwICsxLDUwMSBAQAorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgorICogaS5NWDggTldMIE1JUEkgRFNJIGhvc3QgZHJp dmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5 IFB1cmlzbSBTUEMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211eC9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxp bnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51 eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9wcmludC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNs dWRlICJud2wtZHJ2LmgiCisjaW5jbHVkZSAibndsLWRzaS5oIgorCisjZGVmaW5lIERSVl9OQU1F ICJud2wtZHNpIgorCisvKiBQb3NzaWJsZSBwbGF0Zm9ybSBzcGVjaWZpYyBjbG9ja3MgKi8KKyNk ZWZpbmUgTldMX0RTSV9DTEtfQ09SRQkiY29yZSIKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdt YXBfY29uZmlnIG53bF9kc2lfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAxNiwKKwku dmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IE5XTF9E U0lfSVJRX01BU0syLAorCS5uYW1lID0gRFJWX05BTUUsCit9OworCitzdHJ1Y3QgbndsX2RzaV9w bGF0Zm9ybV9kYXRhIHsKKwlpbnQgKCpwb3dlcm9uKShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKKwlp bnQgKCpwb3dlcm9mZikoc3RydWN0IG53bF9kc2kgKmRzaSk7CisJaW50ICgqc2VsZWN0X2lucHV0 KShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKKwlpbnQgKCpkZXNlbGVjdF9pbnB1dCkoc3RydWN0IG53 bF9kc2kgKmRzaSk7CisJc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmlnIGNsa19jb25maWdb TldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IG53bF9kc2kgKmJyaWRnZV90b19kc2koc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IG53bF9kc2ksIGJyaWRnZSk7Cit9CisK K3N0YXRpYyBpbnQgbndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKHN0cnVjdCBud2xfZHNpICpk c2ksIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCWNv bnN0IGNoYXIgKmlkOworCXN0cnVjdCBjbGsgKmNsazsKKwlzaXplX3QgaTsKKwl1bnNpZ25lZCBs b25nIHJhdGU7CisJaW50IHJldCwgcmVzdWx0ID0gMDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIiVzIHBsYXRmb3JtIGNsb2Nrc1xuIiwKKwkJCSAgICAgZW5hYmxlID8gImVuYWJsaW5n IiA6ICJkaXNhYmxpbmciKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBkYXRh LT5jbGtfY29uZmlnKTsgaSsrKSB7CisJCWlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQp CisJCQljb250aW51ZTsKKwkJaWQgPSBkc2ktPmNsa19jb25maWdbaV0uaWQ7CisJCWNsayA9IGRz aS0+Y2xrX2NvbmZpZ1tpXS5jbGs7CisKKwkJaWYgKGVuYWJsZSkgeworCQkJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGNsayk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCURSTV9ERVZfRVJST1Io ZGV2LAorCQkJCQkgICAgICAiRmFpbGVkIHRvIGVuYWJsZSAlcyBjbGs6ICVkXG4iLAorCQkJCQkg ICAgICBpZCwgcmV0KTsKKwkJCQlyZXN1bHQgPSByZXN1bHQgPzogcmV0OworCQkJfQorCQkJcmF0 ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRW5h YmxlZCAlcyBjbGsgQCVsdSBIelxuIiwKKwkJCQkJICAgICBpZCwgcmF0ZSk7CisJCX0gZWxzZSB7 CisJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKKwkJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIkRpc2FibGVkICVzIGNsa1xuIiwgaWQpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KKworc3RhdGljIGludCBud2xfZHNpX3BsYXRfZW5hYmxlKHN0cnVjdCBud2xfZHNpICpk c2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJldDsKKworCWlm IChkc2ktPnBkYXRhLT5zZWxlY3RfaW5wdXQpCisJCWRzaS0+cGRhdGEtPnNlbGVjdF9pbnB1dChk c2kpOworCisJcmV0ID0gbndsX2RzaV9zZXRfcGxhdGZvcm1fY2xvY2tzKGRzaSwgdHJ1ZSk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkc2ktPnBkYXRhLT5wb3dlcm9u KGRzaSk7CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBv d2VyIG9uIERTSTogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg bndsX2RzaV9wbGF0X2Rpc2FibGUoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlkc2ktPnBkYXRh LT5wb3dlcm9mZihkc2kpOworCW53bF9kc2lfc2V0X3BsYXRmb3JtX2Nsb2Nrcyhkc2ksIGZhbHNl KTsKKwlpZiAoZHNpLT5wZGF0YS0+ZGVzZWxlY3RfaW5wdXQpCisJCWRzaS0+cGRhdGEtPmRlc2Vs ZWN0X2lucHV0KGRzaSk7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX2Rpc2FibGUo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJp ZGdlX3RvX2RzaShicmlkZ2UpOworCisJbndsX2RzaV9kaXNhYmxlKGRzaSk7CisJbndsX2RzaV9w bGF0X2Rpc2FibGUoZHNpKTsKKwlwbV9ydW50aW1lX3B1dChkc2ktPmRldik7Cit9CisKK3N0YXRp YyBpbnQgbndsX2RzaV9nZXRfZHBoeV9wYXJhbXMoc3RydWN0IG53bF9kc2kgKmRzaSwKKwkJCQkg ICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICB1bmlvbiBwaHlf Y29uZmlndXJlX29wdHMgKnBoeV9vcHRzKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQg cmV0OworCisJaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMgPiA0KQorCQlyZXR1cm4g LUVJTlZBTDsKKworCS8qCisJICogU28gZmFyIHRoZSBEUEhZIHNwZWMgbWluaW1hbCB0aW1pbmdz IHdvcmsgZm9yIGJvdGggbWl4ZWwKKwkgKiBkcGh5IGFuZCBud2wgZHNpIGhvc3QKKwkgKi8KKwly ZXQgPSBwaHlfbWlwaV9kcGh5X2dldF9kZWZhdWx0X2NvbmZpZygKKwkJbW9kZS0+Y3J0Y19jbG9j ayAqIDEwMDAsCisJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpLCBk c2ktPmxhbmVzLAorCQkmcGh5X29wdHMtPm1pcGlfZHBoeSk7CisJaWYgKHJldCA8IDApCisJCXJl dHVybiByZXQ7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNjX2Nsayk7CisJRFJN X0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJMUCBjbGsgaXMgQCVsdSBIelxuIiwgcmF0ZSk7 CisJcGh5X29wdHMtPm1pcGlfZHBoeS5scF9jbGtfcmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGJvb2wgbndsX2RzaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQor eworCS8qIEF0IGxlYXN0IExDRElGICsgTldMIG5lZWRzIGFjdGl2ZSBoaWdoIHN5bmMgKi8KKwlh ZGp1c3RlZF9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9G TEFHX1BWU1lOQyk7CisJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJj0gfihEUk1fTU9ERV9GTEFHX05I U1lOQyB8IERSTV9NT0RFX0ZMQUdfTlZTWU5DKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK253bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsK KwlpbnQgYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisK KwlpZiAobW9kZS0+Y2xvY2sgKiBicHAgPiAxNTAwMDAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tf SElHSDsKKworCWlmIChtb2RlLT5jbG9jayAqIGJwcCA8IDgwMDAwKQorCQlyZXR1cm4gTU9ERV9D TE9DS19MT1c7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHZvaWQKK253bF9kc2lf YnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9f ZHNpKGJyaWRnZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJdW5pb24gcGh5 X2NvbmZpZ3VyZV9vcHRzIG5ld19jZmc7CisJdW5zaWduZWQgbG9uZyBwaHlfcmVmX3JhdGU7CisJ aW50IHJldDsKKworCXJldCA9IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKGRzaSwgYWRqdXN0ZWRf bW9kZSwgJm5ld19jZmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElm IGhzIGNsb2NrIGlzIHVuY2hhbmdlZCwgd2UncmUgYWxsIGdvb2QgLSBhbGwgcGFyYW1ldGVycyBh cmUKKwkgKiBkZXJpdmVkIGZyb20gaXQgYXRtLgorCSAqLworCWlmIChuZXdfY2ZnLm1pcGlfZHBo eS5oc19jbGtfcmF0ZSA9PSBkc2ktPnBoeV9jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlKQorCQly ZXR1cm47CisKKwlwaHlfcmVmX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT5waHlfcmVmX2Nsayk7 CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiUEhZIGF0IHJlZiByYXRlOiAlbHVcbiIsIHBo eV9yZWZfcmF0ZSk7CisJLyogU2F2ZSB0aGUgbmV3IGRlc2lyZWQgcGh5IGNvbmZpZyAqLworCW1l bWNweSgmZHNpLT5waHlfY2ZnLCAmbmV3X2NmZywgc2l6ZW9mKG5ld19jZmcpKTsKKworCW1lbWNw eSgmZHNpLT5tb2RlLCBhZGp1c3RlZF9tb2RlLCBzaXplb2YoZHNpLT5tb2RlKSk7CisJZHJtX21v ZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIHZvaWQg bndsX2RzaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQorewor CXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisKKwlwbV9ydW50 aW1lX2dldF9zeW5jKGRzaS0+ZGV2KTsKKwlud2xfZHNpX3BsYXRfZW5hYmxlKGRzaSk7CisJbnds X2RzaV9lbmFibGUoZHNpKTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2JyaWRnZV9hdHRhY2go c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJp ZGdlLT5kcml2ZXJfcHJpdmF0ZTsKKworCXJldHVybiBkcm1fYnJpZGdlX2F0dGFjaChicmlkZ2Ut PmVuY29kZXIsIGRzaS0+cGFuZWxfYnJpZGdlLCBicmlkZ2UpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgbndsX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLnByZV9l bmFibGUgPSBud2xfZHNpX2JyaWRnZV9wcmVfZW5hYmxlLAorCS5kaXNhYmxlICAgID0gbndsX2Rz aV9icmlkZ2VfZGlzYWJsZSwKKwkubW9kZV9maXh1cCA9IG53bF9kc2lfYnJpZGdlX21vZGVfZml4 dXAsCisJLm1vZGVfc2V0ICAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX3NldCwKKwkubW9kZV92YWxp ZCA9IG53bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQsCisJLmF0dGFjaAkgICAgPSBud2xfZHNpX2Jy aWRnZV9hdHRhY2gsCit9OworCitzdGF0aWMgaW50IG53bF9kc2lfcGFyc2VfZHQoc3RydWN0IG53 bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZv cm1fZGV2aWNlKGRzaS0+ZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJY29uc3QgY2hhciAqY2xr X2lkOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaSwgcmV0OworCisJZHNpLT5waHkgPSBk ZXZtX3BoeV9nZXQoZHNpLT5kZXYsICJkcGh5Iik7CisJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsK KwkJcmV0ID0gUFRSX0VSUihkc2ktPnBoeSk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikK KwkJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJDb3VsZCBub3QgZ2V0IFBIWTogJWRcbiIsIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAq LworCW1lbWNweShkc2ktPmNsa19jb25maWcsIGRzaS0+cGRhdGEtPmNsa19jb25maWcsCisJICAg ICAgIHNpemVvZihkc2ktPnBkYXRhLT5jbGtfY29uZmlnKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShkc2ktPnBkYXRhLT5jbGtfY29uZmlnKTsgaSsrKSB7CisJCWlmICghZHNpLT5j bGtfY29uZmlnW2ldLnByZXNlbnQpCisJCQljb250aW51ZTsKKworCQljbGtfaWQgPSBkc2ktPmNs a19jb25maWdbaV0uaWQ7CisJCWNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgY2xrX2lkKTsK KwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCQlEUk1fREVW X0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCAlcyBjbG9jazogJWRcbiIsCisJCQkJICAg ICAgY2xrX2lkLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgIlNldHVwIGNsayAlcyAocmF0ZTogJWx1KVxuIiwKKwkJCQkgICAgIGNs a19pZCwgY2xrX2dldF9yYXRlKGNsaykpOworCQlkc2ktPmNsa19jb25maWdbaV0uY2xrID0gY2xr OworCX0KKworCS8qIERTSSBjbG9ja3MgKi8KKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYs ICJwaHlfcmVmIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrKTsK KwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5X3JlZiBjbG9jazog JWRcbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkc2ktPnBoeV9yZWZf Y2xrID0gY2xrOworCisJY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAicnhfZXNjIik7CisJ aWYgKElTX0VSUihjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcnhfZXNjIGNsb2NrOiAlZFxuIiwKKwkJCSAgICAg IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+cnhfZXNjX2NsayA9IGNsazsKKworCWNs ayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInR4X2VzYyIpOworCWlmIChJU19FUlIoY2xrKSkg eworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZ2V0IHR4X2VzYyBjbG9jazogJWRcbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKwlkc2ktPnR4X2VzY19jbGsgPSBjbGs7CisKKwlkc2ktPm11eCA9IGRldm1fbXV4 X2NvbnRyb2xfZ2V0KGRzaS0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRzaS0+bXV4KSkgewor CQlyZXQgPSBQVFJfRVJSKGRzaS0+bXV4KTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQor CQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgbXV4OiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwliYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jl c291cmNlKHBkZXYsIDApOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJh c2UpOworCisJZHNpLT5yZWdtYXAgPQorCQlkZXZtX3JlZ21hcF9pbml0X21taW8oZHNpLT5kZXYs IGJhc2UsICZud2xfZHNpX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoZHNpLT5yZWdtYXAp KSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5yZWdtYXApOworCQlEUk1fREVWX0VSUk9SKGRzaS0+ ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBOV0wgRFNJIHJlZ21hcDogJWRcbiIsCisJCQkgICAgICBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwlpZiAoZHNpLT5pcnEgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJGYWlsZWQgdG8gZ2V0IGRldmljZSBJUlE6ICVkXG4iLAorCQkJICAgICAgZHNpLT5pcnEpOwor CQlyZXR1cm4gZHNpLT5pcnE7CisJfQorCisJZHNpLT5yc3RjID0gZGV2bV9yZXNldF9jb250cm9s X2FycmF5X2dldChkc2ktPmRldiwgZmFsc2UsIHRydWUpOworCWlmIChJU19FUlIoZHNpLT5yc3Rj KSkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZXNldHM6ICVs ZFxuIiwKKwkJCSAgICAgIFBUUl9FUlIoZHNpLT5yc3RjKSk7CisJCXJldHVybiBQVFJfRVJSKGRz aS0+cnN0Yyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9z ZWxlY3RfaW5wdXQoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg KnJlbW90ZTsKKwl1MzIgdXNlX2Rjc3MgPSAxOworCWludCByZXQ7CisKKwlyZW1vdGUgPSBvZl9n cmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5kZXYtPm9mX25vZGUsIDAsIDApOworCWlmIChzdHJj bXAocmVtb3RlLT5uYW1lLCAibGNkaWYiKSA9PSAwKQorCQl1c2VfZGNzcyA9IDA7CisKKwlEUk1f REVWX0lORk8oZHNpLT5kZXYsICJVc2luZyAlcyBhcyBpbnB1dCBzb3VyY2VcbiIsCisJCSAgICAg KHVzZV9kY3NzKSA/ICJEQ1NTIiA6ICJMQ0RJRiIpOworCisJcmV0ID0gbXV4X2NvbnRyb2xfdHJ5 X3NlbGVjdChkc2ktPm11eCwgdXNlX2Rjc3MpOworCWlmIChyZXQgPCAwKQorCQlEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHNlbGVjdCBpbnB1dDogJWRcbiIsIHJldCk7CisKKwlv Zl9ub2RlX3B1dChyZW1vdGUpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBpbXg4 bXFfZHNpX2Rlc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJaW50IHJldDsK KworCXJldCA9IG11eF9jb250cm9sX2Rlc2VsZWN0KGRzaS0+bXV4KTsKKwlpZiAocmV0IDwgMCkK KwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBkZXNlbGVjdCBpbnB1dDogJWRc biIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgaW14OG1xX2RzaV9w b3dlcm9uKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBvdGhl cndpc2UgdGhlIGRpc3BsYXkgc3RheXMgYmxhbmsgKi8KKwl1c2xlZXBfcmFuZ2UoMjAwLCAzMDAp OworCisJaWYgKGRzaS0+cnN0YykKKwkJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkc2kt PnJzdGMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXg4bXFfZHNpX3Bvd2Vy b2ZmKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHNpLT5x dWlya3MgJiBTUkNfUkVTRVRfUVVJUkspCisJCXJldHVybiAwOworCisJaWYgKGRzaS0+cnN0YykK KwkJcmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQoZHNpLT5yc3RjKTsKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncyBud2xfZHNpX3RpbWlu Z3MgPSB7CisJLmlucHV0X2J1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9MT1csCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSBpbXg4bXFfZGV2ID0gewor CS5wb3dlcm9uID0gJmlteDhtcV9kc2lfcG93ZXJvbiwKKwkucG93ZXJvZmYgPSAmaW14OG1xX2Rz aV9wb3dlcm9mZiwKKwkuc2VsZWN0X2lucHV0ID0gJmlteDhtcV9kc2lfc2VsZWN0X2lucHV0LAor CS5kZXNlbGVjdF9pbnB1dCA9ICZpbXg4bXFfZHNpX2Rlc2VsZWN0X2lucHV0LAorCS5jbGtfY29u ZmlnID0geworCQl7IC5pZCA9IE5XTF9EU0lfQ0xLX0NPUkUsIC5wcmVzZW50ID0gdHJ1ZSB9LAor CX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBud2xfZHNpX2R0X2lk c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1ud2wtZHNpIiwgLmRhdGEgPSAm aW14OG1xX2RldiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBud2xfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2Rldmlj ZV9hdHRyaWJ1dGUgbndsX2RzaV9xdWlya3NfbWF0Y2hbXSA9IHsKKwl7IC5zb2NfaWQgPSAiaS5N WDhNUSIsIC5yZXZpc2lvbiA9ICIyLjAiLAorCSAgLmRhdGEgPSAodm9pZCAqKShFMTE0MThfSFNf TU9ERV9RVUlSSyB8IFNSQ19SRVNFVF9RVUlSSykgfSwKKwl7IC8qIHNlbnRpbmVsLiAqLyB9LAor fTsKKworc3RhdGljIGludCBud2xfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkICpvZl9pZCA9IG9mX21hdGNoX2RldmljZShud2xfZHNpX2R0X2lkcywgZGV2 KTsKKwljb25zdCBzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2lkLT5k YXRhOworCWNvbnN0IHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cjsKKwlzdHJ1Y3Qg bndsX2RzaSAqZHNpOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKworCXJldCA9IG53bF9kc2lf cGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycShkZXYsIGRzaS0+aXJxLCBud2xfZHNpX2lycV9oYW5kbGVyLCAwLAorCQkJICAg ICAgIGRldl9uYW1lKGRldiksIGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJP UihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkXG4iLCBkc2ktPmlycSwKKwkJCSAg ICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kc2lfaG9zdC5vcHMgPSAmbnds X2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKKwlyZXQgPSBtaXBpX2Rz aV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDogJWRcbiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJYXR0ciA9IHNvY19kZXZpY2VfbWF0Y2gobndsX2RzaV9xdWly a3NfbWF0Y2gpOworCWlmIChhdHRyKQorCQlkc2ktPnF1aXJrcyA9ICh1aW50cHRyX3QpYXR0ci0+ ZGF0YTsKKworCWRzaS0+YnJpZGdlLmRyaXZlcl9wcml2YXRlID0gZHNpOworCWRzaS0+YnJpZGdl LmZ1bmNzID0gJm53bF9kc2lfYnJpZGdlX2Z1bmNzOworCWRzaS0+YnJpZGdlLm9mX25vZGUgPSBk ZXYtPm9mX25vZGU7CisJZHNpLT5icmlkZ2UudGltaW5ncyA9ICZud2xfZHNpX3RpbWluZ3M7CisK Kwlkcm1fYnJpZGdlX2FkZCgmZHNpLT5icmlkZ2UpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwg ZHNpKTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG53bF9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IG53bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWlwaV9k c2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUo JnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIG53bF9kc2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBud2xfZHNpX3Byb2JlLAorCS5yZW1v dmUJCT0gbndsX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRjaF90YWJsZSA9 IG53bF9kc2lfZHRfaWRzLAorCQkubmFtZQk9IERSVl9OQU1FLAorCX0sCit9OworCittb2R1bGVf cGxhdGZvcm1fZHJpdmVyKG53bF9kc2lfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTlhQIFNl bWljb25kdWN0b3IiKTsKK01PRFVMRV9BVVRIT1IoIlB1cmlzbSBTUEMiKTsKK01PRFVMRV9ERVND UklQVElPTigiTm9ydGh3ZXN0IExvZ2ljIE1JUEktRFNJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOyAvKiBHUEx2MiBvciBsYXRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvbnds LWRzaS9ud2wtZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4x ZTcyYTkyMjE0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253 bC1kc2kvbndsLWRydi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wKyAqLworLyoKKyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgorICoKKyAq IENvcHlyaWdodCAoQykgMjAxNyBOWFAKKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BD CisgKi8KKworI2lmbmRlZiBfX05XTF9EUlZfSF9fCisjZGVmaW5lIF9fTldMX0RSVl9IX18KKwor I2luY2x1ZGUgPGxpbnV4L211eC9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku aD4KKworI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBp X2RzaS5oPgorCitzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhOworCisvKiBpLk1YOCBOV0wg cXVpcmtzICovCisvKiBpLk1YOE1RIGVycmF0YSBFMTE0MTggKi8KKyNkZWZpbmUgRTExNDE4X0hT X01PREVfUVVJUksJICAgIEJJVCgwKQorLyogU2tpcCBEU0kgYml0cyBpbiBTUkMgb24gZGlzYWJs ZSB0byBhdm9pZCBibGFuayBkaXNwbGF5IG9uIGVuYWJsZSAqLworI2RlZmluZSBTUkNfUkVTRVRf UVVJUksJCSAgICBCSVQoMSkKKworI2RlZmluZSBOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1Mg MQorc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmlnIHsKKwljb25zdCBjaGFyICppZDsKKwlz dHJ1Y3QgY2xrICpjbGs7CisJYm9vbCBwcmVzZW50OworfTsKKworc3RydWN0IG53bF9kc2kgewor CXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lfaG9z dDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOworCXN0cnVjdCBkZXZpY2UgKmRl djsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7 CisJdW5zaWduZWQgaW50IHF1aXJrczsKKworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlpbnQg aXJxOworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjOworCXN0cnVjdCBtdXhfY29udHJvbCAq bXV4OworCisJLyogRFNJIGNsb2NrcyAqLworCXN0cnVjdCBjbGsgKnBoeV9yZWZfY2xrOworCXN0 cnVjdCBjbGsgKnJ4X2VzY19jbGs7CisJc3RydWN0IGNsayAqdHhfZXNjX2NsazsKKwkvKiBQbGF0 Zm9ybSBkZXBlbmRlbnQgY2xvY2tzICovCisJc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmln IGNsa19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsKKworCS8qIGRzaSBsYW5l cyAqLworCXUzMiBsYW5lczsKKwllbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGRzaV9tb2RlX2Zs YWdzOworCisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXI7CisKKwljb25zdCBzdHJ1Y3Qg bndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKK307CisKKyNlbmRpZiAvKiBfX05XTF9EUlZf SF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRz aS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZkMDMwYWY1NWJiNAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMKQEAgLTAsMCAr MSw3MDAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIE5X TCBNSVBJIERTSSBob3N0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAKKyAq IENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jp dGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdGltZTY0Lmg+CisK KyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21v ZGUuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKworI2luY2x1ZGUg Im53bC1kcnYuaCIKKyNpbmNsdWRlICJud2wtZHNpLmgiCisKKyNkZWZpbmUgTldMX0RTSV9NSVBJ X0ZJRk9fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDUwMCkKKworLyoKKyAqIFBLVF9DT05UUk9M IGZvcm1hdDoKKyAqIFsxNTogMF0gLSB3b3JkIGNvdW50CisgKiBbMTc6MTZdIC0gdmlydHVhbCBj aGFubmVsCisgKiBbMjM6MThdIC0gZGF0YSB0eXBlCisgKiBbMjRdCSAgIC0gTFAgb3IgSFMgc2Vs ZWN0ICgwIC0gTFAsIDEgLSBIUykKKyAqIFsyNV0JICAgLSBwZXJmb3JtIEJUQSBhZnRlciBwYWNr ZXQgaXMgc2VudAorICogWzI2XQkgICAtIHBlcmZvcm0gQlRBIG9ubHksIG5vIHBhY2tldCB0eAor ICovCisjZGVmaW5lIE5XTF9EU0lfV0MoeCkJCUZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMCksICh4 KSkKKyNkZWZpbmUgTldMX0RTSV9UWF9WQyh4KQlGSUVMRF9QUkVQKEdFTk1BU0soMTcsIDE2KSwg KHgpKQorI2RlZmluZSBOV0xfRFNJX1RYX0RUKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgp LCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfSFNfU0VMKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygyNCwg MjQpLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfQlRBX1RYKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygy NSwgMjUpLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfQlRBX05PX1RYKHgpCUZJRUxEX1BSRVAoR0VO TUFTSygyNiwgMjYpLCAoeCkpCisKKy8qCisgKiBSWF9QS1RfSEVBREVSIGZvcm1hdDoKKyAqIFsx NTogMF0gLSB3b3JkIGNvdW50CisgKiBbMjE6MTZdIC0gZGF0YSB0eXBlCisgKiBbMjM6MjJdIC0g dmlydHVhbCBjaGFubmVsCisgKi8KKyNkZWZpbmUgTldMX0RTSV9SWF9EVCh4KQlGSUVMRF9HRVQo R0VOTUFTSygyMSwgMTYpLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfUlhfVkMoeCkJRklFTERfR0VU KEdFTk1BU0soMjMsIDIyKSwgKHgpKQorCisvKiBEU0kgVmlkZW8gbW9kZSAqLworI2RlZmluZSBO V0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9TWU5DX1BVTFNFUwkJMAorI2RlZmluZSBOV0xfRFNJ X1ZNX05PTl9CVVJTVF9NT0RFX1dJVEhfU1lOQ19FVkVOVFMJQklUKDApCisjZGVmaW5lIE5XTF9E U0lfVk1fQlVSU1RfTU9ERQkJCQlCSVQoMSkKKworLyogKiBEUEkgY29sb3IgY29kaW5nICovCisj ZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfUEFDS0VECTAKKyNkZWZpbmUgTldMX0RTSV9E UElfMTZfQklUXzU2NV9BTElHTkVECTEKKyNkZWZpbmUgTldMX0RTSV9EUElfMTZfQklUXzU2NV9T SElGVEVECTIKKyNkZWZpbmUgTldMX0RTSV9EUElfMThfQklUX1BBQ0tFRAkzCisjZGVmaW5lIE5X TF9EU0lfRFBJXzE4X0JJVF9BTElHTkVECTQKKyNkZWZpbmUgTldMX0RTSV9EUElfMjRfQklUCQk1 CisKKy8qICogRFBJIFBpeGVsIGZvcm1hdCAqLworI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1B VF8xNiAgMAorI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOCAgQklUKDApCisjZGVmaW5l IE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TCBCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9G T1JNQVRfMjQgIChCSVQoMCkgfCBCSVQoMSkpCisKK2VudW0gdHJhbnNmZXJfZGlyZWN0aW9uIHsK KwlEU0lfUEFDS0VUX1NFTkQsCisJRFNJX1BBQ0tFVF9SRUNFSVZFLAorfTsKKworc3RydWN0IG53 bF9kc2lfdHJhbnNmZXIgeworCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZzsKKwlzdHJ1 Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tldDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZWQ7 CisKKwlpbnQgc3RhdHVzOyAvKiBzdGF0dXMgb2YgdHJhbnNtaXNzaW9uICovCisJZW51bSB0cmFu c2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOworCWJvb2wgbmVlZF9idGE7CisJdTggY21kOworCXUx NiByeF93b3JkX2NvdW50OworCXNpemVfdCB0eF9sZW47IC8qIGluIGJ5dGVzICovCisJc2l6ZV90 IHJ4X2xlbjsgLyogaW4gYnl0ZXMgKi8KK307CisKK3N0YXRpYyBpbnQgbndsX2RzaV93cml0ZShz dHJ1Y3QgbndsX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWludCBy ZXQ7CisKKwlyZXQgPSByZWdtYXBfd3JpdGUoZHNpLT5yZWdtYXAsIHJlZywgdmFsKTsKKwlpZiAo cmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJCSAgICAgICJGYWlsZWQgdG8g d3JpdGUgTldMIERTSSByZWcgMHgleDogJWRcbiIsIHJlZywKKwkJCSAgICAgIHJldCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBud2xfZHNpX3JlYWQoc3RydWN0IG53bF9kc2kgKmRz aSwgdTMyIHJlZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBy ZWdtYXBfcmVhZChkc2ktPnJlZ21hcCwgcmVnLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJRFJN X0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFkIE5XTCBEU0kgcmVnIDB4JXg6ICVk XG4iLAorCQkJICAgICAgcmVnLCByZXQpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUz MiBud2xfZHNpX2dldF9kcGlfcGl4ZWxfZm9ybWF0KGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 IGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2 NToKKwkJcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE2OworCWNhc2UgTUlQSV9EU0lfRk1U X1JHQjY2NjoKKwkJcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TDsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTg7 CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JN QVRfMjQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisjZGVmaW5lIFBT RUNfUEVSX1NFQyAxMDAwMDAwMDAwMDAwTEwKKy8qCisgKiBwczJiYyAtIFBpY29zZWNvbmRzIHRv IGJ5dGUgY2xvY2sgY3ljbGVzCisgKi8KK3N0YXRpYyB1MzIgcHMyYmMoc3RydWN0IG53bF9kc2kg KmRzaSwgdW5zaWduZWQgbG9uZyBsb25nIHBzKQoreworCWludCBicHAgPSBtaXBpX2RzaV9waXhl bF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKworCXJldHVybiBESVZfUk9VTkRfVVAocHMg KiBkc2ktPm1vZGUuY2xvY2sgKiAxMDAwICogYnBwLAorCQkJICAgIGRzaS0+bGFuZXMgKiA4ICog UFNFQ19QRVJfU0VDKTsKK30KKworLyoKKyAqIHVpMmJjIC0gVUkgdGltZSBwZXJpb2RzIHRvIGJ5 dGUgY2xvY2sgY3ljbGVzCisgKi8KK3N0YXRpYyB1MzIgdWkyYmMoc3RydWN0IG53bF9kc2kgKmRz aSwgdW5zaWduZWQgbG9uZyBsb25nIHVpKQoreworCWludCBicHAgPSBtaXBpX2RzaV9waXhlbF9m b3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKworCXJldHVybiBESVZfUk9VTkRfVVAodWkgKiBk c2ktPmxhbmVzLCBkc2ktPm1vZGUuY2xvY2sgKiAxMDAwICogYnBwKTsKK30KKworLyoKKyAqIHVz MmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBjbG9jayBjeWNsZXMKKyAqLworc3RhdGljIHUzMiB1 czJscCh1MzIgbHBfY2xrX3JhdGUsIHVuc2lnbmVkIGxvbmcgdXMpCit7CisJcmV0dXJuIERJVl9S T1VORF9VUCh1cyAqIGxwX2Nsa19yYXRlLCBVU0VDX1BFUl9TRUMpOworfQorCitzdGF0aWMgaW50 IG53bF9kc2lfY29uZmlnX2hvc3Qoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwl1MzIgY3ljbGVz OworCXN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9kcGh5ICpjZmcgPSAmZHNpLT5waHlf Y2ZnLm1pcGlfZHBoeTsKKworCWlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxhbmVzID4gNCkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkRT SSBMYW5lcyAlZFxuIiwgZHNpLT5sYW5lcyk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf Q0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOworCisJaWYgKGRzaS0+ZHNpX21vZGVfZmxh Z3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykgeworCQlud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssIDB4MDEpOworCQlud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQLCAweDAxKTsKKwl9IGVsc2UgeworCQlu d2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssIDB4MDApOwor CQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQLCAweDAwKTsK Kwl9CisKKwkvKiB2YWx1ZXMgaW4gYnl0ZSBjbG9jayBjeWNsZXMgKi8KKwljeWNsZXMgPSB1aTJi Yyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJj ZmdfdF9wcmU6IDB4JXhcbiIsIGN5Y2xlcyk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf Q0ZHX1RfUFJFLCBjeWNsZXMpOworCWN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5scHggKyBjZmct PmNsa19wcmVwYXJlICsgY2ZnLT5jbGtfemVybyk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJjZmdfdHhfZ2FwIChwcmUpOiAweCV4XG4iLCBjeWNsZXMpOworCWN5Y2xlcyArPSB1 aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYs ICJjZmdfdHhfZ2FwOiAweCV4XG4iLCBjeWNsZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xf RFNJX0NGR19UX1BPU1QsIGN5Y2xlcyk7CisJY3ljbGVzID0gcHMyYmMoZHNpLCBjZmctPmhzX2V4 aXQpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R4X2dhcDogMHgleFxu IiwgY3ljbGVzKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVFhfR0FQLCBjeWNs ZXMpOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJf RU9UUCwgMHgwMSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VO VCwgMHgwMCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0xSWF9IX1RPX0NPVU5U LCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQlRBX0hfVE9fQ09VTlQs IDB4MDApOworCS8qIEluIExQIGNsb2NrIGN5Y2xlcyAqLworCWN5Y2xlcyA9IHVzMmxwKGNmZy0+ bHBfY2xrX3JhdGUsIGNmZy0+d2FrZXVwKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRl diwgImNmZ190d2FrZXVwOiAweCV4XG4iLCBjeWNsZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX0NGR19UV0FLRVVQLCBjeWNsZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgbndsX2RzaV9jb25maWdfZHBpKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJdTMyIGNvbG9y X2Zvcm1hdCwgbW9kZTsKKwlib29sIGJ1cnN0X21vZGU7CisJaW50IGhmcm9udF9wb3JjaCwgaGJh Y2tfcG9yY2gsIHZmcm9udF9wb3JjaCwgdmJhY2tfcG9yY2g7CisJaW50IGhzeW5jX2xlbiwgdnN5 bmNfbGVuOworCisJaGZyb250X3BvcmNoID0gZHNpLT5tb2RlLmhzeW5jX3N0YXJ0IC0gZHNpLT5t b2RlLmhkaXNwbGF5OworCWhzeW5jX2xlbiA9IGRzaS0+bW9kZS5oc3luY19lbmQgLSBkc2ktPm1v ZGUuaHN5bmNfc3RhcnQ7CisJaGJhY2tfcG9yY2ggPSBkc2ktPm1vZGUuaHRvdGFsIC0gZHNpLT5t b2RlLmhzeW5jX2VuZDsKKworCXZmcm9udF9wb3JjaCA9IGRzaS0+bW9kZS52c3luY19zdGFydCAt IGRzaS0+bW9kZS52ZGlzcGxheTsKKwl2c3luY19sZW4gPSBkc2ktPm1vZGUudnN5bmNfZW5kIC0g ZHNpLT5tb2RlLnZzeW5jX3N0YXJ0OworCXZiYWNrX3BvcmNoID0gZHNpLT5tb2RlLnZ0b3RhbCAt IGRzaS0+bW9kZS52c3luY19lbmQ7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwg Imhmcm9udF9wb3JjaCA9ICVkXG4iLCBoZnJvbnRfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAiaGJhY2tfcG9yY2ggPSAlZFxuIiwgaGJhY2tfcG9yY2gpOworCURSTV9E RVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaHN5bmNfbGVuID0gJWRcbiIsIGhzeW5jX2xlbik7 CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoZGlzcGxheSA9ICVkXG4iLCBkc2kt Pm1vZGUuaGRpc3BsYXkpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmZyb250 X3BvcmNoID0gJWRcbiIsIHZmcm9udF9wb3JjaCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJ2YmFja19wb3JjaCA9ICVkXG4iLCB2YmFja19wb3JjaCk7CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJ2c3luY19sZW4gPSAlZFxuIiwgdnN5bmNfbGVuKTsKKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZhY3RpdmUgPSAlZFxuIiwgZHNpLT5tb2RlLnZk aXNwbGF5KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNsb2NrID0gJWQga0h6 XG4iLCBkc2ktPm1vZGUuY2xvY2spOworCisJY29sb3JfZm9ybWF0ID0gbndsX2RzaV9nZXRfZHBp X3BpeGVsX2Zvcm1hdChkc2ktPmZvcm1hdCk7CisJaWYgKGNvbG9yX2Zvcm1hdCA8IDApIHsKKwkJ RFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkludmFsaWQgY29sb3IgZm9ybWF0IDB4JXhcbiIsCisJ CQkgICAgICBkc2ktPmZvcm1hdCk7CisJCXJldHVybiBjb2xvcl9mb3JtYXQ7CisJfQorCURSTV9E RVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAicGl4ZWwgZm10ID0gJWRcbiIsIGRzaS0+Zm9ybWF0 KTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkcs IE5XTF9EU0lfRFBJXzI0X0JJVCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxf Rk9STUFULCBjb2xvcl9mb3JtYXQpOworCS8qCisJICogQWRqdXN0aW5nIGlucHV0IHBvbGFyaXR5 IGJhc2VkIG9uIHRoZSB2aWRlbyBtb2RlIHJlc3VsdHMgaW4KKwkgKiBhIGJsYWNrIHNjcmVlbiBz byBhbHdheXMgcGljayBhY3RpdmUgbG93OgorCSAqLworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xf RFNJX1ZTWU5DX1BPTEFSSVRZLAorCQkgICAgICBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElW RV9MT1cpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZLAorCQkg ICAgICBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOworCisJYnVyc3RfbW9kZSA9 IChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgJiYKKwkJ ICAgICAhKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVM U0UpOworCisJaWYgKGJ1cnN0X21vZGUpIHsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf VklERU9fTU9ERSwgTldMX0RTSV9WTV9CVVJTVF9NT0RFKTsKKwkJbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMLCAyNTYpOworCX0gZWxzZSB7CisJCW1vZGUg PSAoKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0Up ID8KKwkJCQlOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9TWU5DX1BVTFNFUyA6CisJCQkJTldM X0RTSV9WTV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNfRVZFTlRTKTsKKwkJbndsX2RzaV93cml0 ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgbW9kZSk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTCwKKwkJCSAgICAgIGRzaS0+bW9kZS5oZGlzcGxh eSk7CisJfQorCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSEZQLCBoZnJvbnRfcG9yY2gp OworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hCUCwgaGJhY2tfcG9yY2gpOworCW53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTQSwgaHN5bmNfbGVuKTsKKworCW53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMsIDB4MCk7CisJbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfQkxMUF9NT0RFLCAweDEpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0VO QUJMRV9NVUxUX1BLVFMsIDB4MCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVVNFX05V TExfUEtUX0JMTFAsIDB4MCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkMsIDB4MCk7 CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkUsIGRzaS0+ bW9kZS5oZGlzcGxheSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkFDVElWRSwgZHNp LT5tb2RlLnZkaXNwbGF5IC0gMSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkJQLCB2 YmFja19wb3JjaCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkZQLCB2ZnJvbnRfcG9y Y2gpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfaW5pdF9pbnRlcnJ1 cHRzKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJdTMyIGlycV9lbmFibGU7CisKKwlud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgMHhmZmZmZmZmZik7CisJbndsX2RzaV93cml0 ZShkc2ksIE5XTF9EU0lfSVJRX01BU0syLCAweDcpOworCisJaXJxX2VuYWJsZSA9IH4odTMyKShO V0xfRFNJX1RYX1BLVF9ET05FX01BU0sgfAorCQkJICAgIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZE X01BU0sgfAorCQkJICAgIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLIHwKKwkJCSAgICBOV0xf RFNJX0hTX1RYX1RJTUVPVVRfTUFTSyk7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9J UlFfTUFTSywgaXJxX2VuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2F0dGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsCisJCQkgICAgICAgc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJf b2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLCBkc2lfaG9zdCk7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gZHNpLT5kZXY7CisJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKKwlzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbDsKKwlpbnQgcmV0OworCisJRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1 LCBmb3JtYXQ9MHgleCBmbGFncz0weCVseFxuIiwgZGV2aWNlLT5sYW5lcywKKwkJICAgICBkZXZp Y2UtPmZvcm1hdCwgZGV2aWNlLT5tb2RlX2ZsYWdzKTsKKworCWlmIChkZXZpY2UtPmxhbmVzIDwg MSB8fCBkZXZpY2UtPmxhbmVzID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkc2ktPmxhbmVz ID0gZGV2aWNlLT5sYW5lczsKKwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+ ZHNpX21vZGVfZmxhZ3MgPSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisKKwlyZXQgPSBkcm1fb2ZfZmlu ZF9wYW5lbF9vcl9icmlkZ2UoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDAsICZwYW5lbCwKKwkJCQkJ ICAmYnJpZGdlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBhbmVsKSB7CisJ CWJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLCBEUk1fTU9ERV9DT05ORUNUT1Jf RFNJKTsKKwkJaWYgKElTX0VSUihicmlkZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIoYnJpZGdlKTsK Kwl9CisKKwlkc2ktPnBhbmVsX2JyaWRnZSA9IGJyaWRnZTsKKwlkcm1fYnJpZGdlX2FkZCgmZHNp LT5icmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2Rl dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsCisJCQkgICAgICAgc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWlu ZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLCBkc2lfaG9zdCk7CisKKwlkcm1fb2ZfcGFu ZWxfYnJpZGdlX3JlbW92ZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwgMCk7CisJZHJtX2JyaWRnZV9y ZW1vdmUoJmRzaS0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBud2xf ZHNpX3JlYWRfcGFja2V0KHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiBzdGF0dXMpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhm ZXIgPSBkc2ktPnhmZXI7CisJdTggKnBheWxvYWQgPSB4ZmVyLT5tc2ctPnJ4X2J1ZjsKKwl1MzIg dmFsOworCXUxNiB3b3JkX2NvdW50OworCXU4IGNoYW5uZWw7CisJdTggZGF0YV90eXBlOworCisJ eGZlci0+c3RhdHVzID0gMDsKKworCWlmICh4ZmVyLT5yeF93b3JkX2NvdW50ID09IDApIHsKKwkJ aWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQpKQorCQkJcmV0dXJuIGZhbHNl OworCQkvKiBHZXQgdGhlIFJYIGhlYWRlciBhbmQgcGFyc2UgaXQgKi8KKwkJdmFsID0gbndsX2Rz aV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QS1RfSEVBREVSKTsKKwkJd29yZF9jb3VudCA9IE5XTF9E U0lfV0ModmFsKTsKKwkJY2hhbm5lbCA9IE5XTF9EU0lfUlhfVkModmFsKTsKKwkJZGF0YV90eXBl ID0gTldMX0RTSV9SWF9EVCh2YWwpOworCisJCWlmIChjaGFubmVsICE9IHhmZXItPm1zZy0+Y2hh bm5lbCkgeworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJICAgICAgIlslMDJYXSBDaGFubmVs IG1pc21hdGNoICgldSAhPSAldSlcbiIsCisJCQkJICAgICAgeGZlci0+Y21kLCBjaGFubmVsLCB4 ZmVyLT5tc2ctPmNoYW5uZWwpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlzd2l0Y2ggKGRh dGFfdHlwZSkgeworCQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05T RV8yQllURToKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIE1JUElfRFNJX1JYX0RDU19T SE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFOgorCQkJaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMSkg eworCQkJCS8qIHJlYWQgc2Vjb25kIGJ5dGUgKi8KKwkJCQlwYXlsb2FkWzFdID0gd29yZF9jb3Vu dCA+PiA4OworCQkJCSsreGZlci0+cnhfbGVuOworCQkJfQorCQkJLyogRmFsbCB0aHJvdWdoICov CisJCWNhc2UgTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOgor CQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgTUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURf UkVTUE9OU0VfMUJZVEU6CisJCQlpZiAoeGZlci0+bXNnLT5yeF9sZW4gPiAwKSB7CisJCQkJLyog cmVhZCBmaXJzdCBieXRlICovCisJCQkJcGF5bG9hZFswXSA9IHdvcmRfY291bnQgJiAweGZmOwor CQkJCSsreGZlci0+cnhfbGVuOworCQkJfQorCQkJeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVu OworCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgTUlQSV9EU0lfUlhfQUNLTk9XTEVER0VfQU5EX0VS Uk9SX1JFUE9SVDoKKwkJCXdvcmRfY291bnQgJj0gMHhmZjsKKwkJCURSTV9ERVZfRVJST1IoZGV2 LCAiWyUwMlhdIERTSSBlcnJvciByZXBvcnQ6IDB4JTAyeFxuIiwKKwkJCQkgICAgICB4ZmVyLT5j bWQsIHdvcmRfY291bnQpOworCQkJeGZlci0+c3RhdHVzID0gLUVQUk9UTzsKKwkJCXJldHVybiB0 cnVlOworCQl9CisKKwkJaWYgKHdvcmRfY291bnQgPiB4ZmVyLT5tc2ctPnJ4X2xlbikgeworCQkJ RFJNX0RFVl9FUlJPUigKKwkJCQlkZXYsCisJCQkJIlslMDJYXSBSZWNlaXZlIGJ1ZmZlciB0b28g c21hbGw6ICVsdSAoPCAldSlcbiIsCisJCQkJeGZlci0+Y21kLCB4ZmVyLT5tc2ctPnJ4X2xlbiwg d29yZF9jb3VudCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXhmZXItPnJ4X3dvcmRfY291 bnQgPSB3b3JkX2NvdW50OworCX0gZWxzZSB7CisJCS8qIFNldCB3b3JkX2NvdW50IGZyb20gcHJl dmlvdXMgaGVhZGVyIHJlYWQgKi8KKwkJd29yZF9jb3VudCA9IHhmZXItPnJ4X3dvcmRfY291bnQ7 CisJfQorCisJLyogSWYgUlggcGF5bG9hZCBpcyBub3QgeWV0IHJlY2VpdmVkLCB3YWl0IGZvciBp dCAqLworCWlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEKSkK KwkJcmV0dXJuIGZhbHNlOworCisJLyogUmVhZCB0aGUgUlggcGF5bG9hZCAqLworCXdoaWxlICh3 b3JkX2NvdW50ID49IDQpIHsKKwkJdmFsID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9Q QVlMT0FEKTsKKwkJcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAweGZmOworCQlwYXlsb2FkWzFd ID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJCXBheWxvYWRbMl0gPSAodmFsID4+IDE2KSAmIDB4ZmY7 CisJCXBheWxvYWRbM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJCXBheWxvYWQgKz0gNDsKKwkJ eGZlci0+cnhfbGVuICs9IDQ7CisJCXdvcmRfY291bnQgLT0gNDsKKwl9CisKKwlpZiAod29yZF9j b3VudCA+IDApIHsKKwkJdmFsID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QQVlMT0FE KTsKKwkJc3dpdGNoICh3b3JkX2NvdW50KSB7CisJCWNhc2UgMzoKKwkJCXBheWxvYWRbMl0gPSAo dmFsID4+IDE2KSAmIDB4ZmY7CisJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCS8qIEZhbGwgdGhyb3Vn aCAqLworCQljYXNlIDI6CisJCQlwYXlsb2FkWzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJCQkr K3hmZXItPnJ4X2xlbjsKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIDE6CisJCQlwYXls b2FkWzBdID0gKHZhbCA+PiAwKSAmIDB4ZmY7CisJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCWJyZWFr OworCQl9CisJfQorCisJeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVuOworCisJcmV0dXJuIHRy dWU7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihzdHJ1Y3Qg bndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4 ZmVyID0gZHNpLT54ZmVyOworCWJvb2wgZW5kX3BhY2tldCA9IGZhbHNlOworCisJaWYgKCF4ZmVy KQorCQlyZXR1cm47CisKKwlpZiAoc3RhdHVzICYgTldMX0RTSV9UWF9GSUZPX09WRkxXKSB7CisJ CURSTV9ERVZfRVJST1JfUkFURUxJTUlURUQoZHNpLT5kZXYsICJ0eCBmaWZvIG92ZXJmbG93XG4i KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdGF0dXMgJiBOV0xfRFNJX0hTX1RYX1RJTUVPVVQp IHsKKwkJRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgIkhTIHR4IHRpbWVvdXRc biIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VU X1NFTkQgJiYKKwkgICAgc3RhdHVzICYgTldMX0RTSV9UWF9QS1RfRE9ORSkgeworCQl4ZmVyLT5z dGF0dXMgPSB4ZmVyLT50eF9sZW47CisJCWVuZF9wYWNrZXQgPSB0cnVlOworCX0gZWxzZSBpZiAo c3RhdHVzICYgTldMX0RTSV9EUEhZX0RJUkVDVElPTiAmJgorCQkgICAoKHN0YXR1cyAmIChOV0xf RFNJX1JYX1BLVF9IRFJfUkNWRCB8CisJCQkgICAgICAgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9E QVRBX1JDVkQpKSkpIHsKKwkJZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBz dGF0dXMpOworCX0KKworCWlmIChlbmRfcGFja2V0KQorCQljb21wbGV0ZSgmeGZlci0+Y29tcGxl dGVkKTsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oc3RydWN0 IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9IGRzaS0+ eGZlcjsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwa3QgPSAmeGZlci0+cGFja2V0OworCWNv bnN0IHU4ICpwYXlsb2FkOworCXNpemVfdCBsZW5ndGg7CisJdTE2IHdvcmRfY291bnQ7CisJdTgg aHNfbW9kZTsKKwl1MzIgdmFsOworCXUzMiBoc193b3JrYXJvdW5kID0gMDsKKworCS8qIFNlbmQg dGhlIHBheWxvYWQsIGlmIGFueSAqLworCWxlbmd0aCA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7CisJ cGF5bG9hZCA9IHBrdC0+cGF5bG9hZDsKKworCXdoaWxlIChsZW5ndGggPj0gNCkgeworCQl2YWwg PSAqKHUzMiAqKXBheWxvYWQ7CisJCWhzX3dvcmthcm91bmQgfD0gISh2YWwgJiAweEZGRkYwMCk7 CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7CisJCXBheWxv YWQgKz0gNDsKKwkJbGVuZ3RoIC09IDQ7CisJfQorCS8qIFNlbmQgdGhlIHJlc3Qgb2YgdGhlIHBh eWxvYWQgKi8KKwl2YWwgPSAwOworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAzOgorCQl2YWwg fD0gcGF5bG9hZFsyXSA8PCAxNjsKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSAyOgorCQl2 YWwgfD0gcGF5bG9hZFsxXSA8PCA4OworCQloc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhGRkZG MDApOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDE6CisJCXZhbCB8PSBwYXlsb2FkWzBd OworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9UWF9QQVlMT0FELCB2YWwpOworCQlicmVh azsKKwl9CisJeGZlci0+dHhfbGVuID0gcGt0LT5wYXlsb2FkX2xlbmd0aDsKKworCS8qCisJICog U2VuZCB0aGUgaGVhZGVyCisJICogaGVhZGVyWzBdID0gVmlydHVhbCBDaGFubmVsICsgRGF0YSBU eXBlCisJICogaGVhZGVyWzFdID0gV29yZCBDb3VudCBMU0IgKExQKSBvciBmaXJzdCBwYXJhbSAo U1ApCisJICogaGVhZGVyWzJdID0gV29yZCBDb3VudCBNU0IgKExQKSBvciBzZWNvbmQgcGFyYW0g KFNQKQorCSAqLworCXdvcmRfY291bnQgPSBwa3QtPmhlYWRlclsxXSB8IChwa3QtPmhlYWRlclsy XSA8PCA4KTsKKwlpZiAoaHNfd29ya2Fyb3VuZCAmJiAoZHNpLT5xdWlya3MgJiBFMTE0MThfSFNf TU9ERV9RVUlSSykpIHsKKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsCisJCQkJICAg ICAiVXNpbmcgaHMgbW9kZSB3b3JrYXJvdW5kIGZvciBjbWQgMHgleFxuIiwKKwkJCQkgICAgIHhm ZXItPmNtZCk7CisJCWhzX21vZGUgPSAxOworCX0gZWxzZSB7CisJCWhzX21vZGUgPSAoeGZlci0+ bXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNKSA/IDAgOiAxOworCX0KKwl2YWwgPSBO V0xfRFNJX1dDKHdvcmRfY291bnQpIHwgTldMX0RTSV9UWF9WQyh4ZmVyLT5tc2ctPmNoYW5uZWwp IHwKKwkgICAgICBOV0xfRFNJX1RYX0RUKHhmZXItPm1zZy0+dHlwZSkgfCBOV0xfRFNJX0hTX1NF TChoc19tb2RlKSB8CisJICAgICAgTldMX0RTSV9CVEFfVFgoeGZlci0+bmVlZF9idGEpOworCW53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BLVF9DT05UUk9MLCB2YWwpOworCisJLyogU2VuZCBw YWNrZXQgY29tbWFuZCAqLworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1NFTkRfUEFDS0VU LCAweDEpOworfQorCitzdGF0aWMgc3NpemVfdCBud2xfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hv c3QsIHN0cnVjdCBud2xfZHNpLCBkc2lfaG9zdCk7CisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIg eGZlcjsKKwlzc2l6ZV90IHJldCA9IDA7CisKKwkvKiBDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQg Ki8KKwlkc2ktPnhmZXIgPSAmeGZlcjsKKwlyZXQgPSBtaXBpX2RzaV9jcmVhdGVfcGFja2V0KCZ4 ZmVyLnBhY2tldCwgbXNnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkc2ktPnhmZXIgPSBOVUxMOwor CQlyZXR1cm4gcmV0OworCX0KKworCWlmICgobXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19S RUFEX1JFUVVFU1RfMF9QQVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJ Q19SRUFEX1JFUVVFU1RfMV9QQVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VO RVJJQ19SRUFEX1JFUVVFU1RfMl9QQVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lf RENTX1JFQUQpICYmCisJICAgIG1zZy0+cnhfbGVuID4gMCAmJiBtc2ctPnJ4X2J1ZiAhPSBOVUxM KQorCQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfUkVDRUlWRTsKKwllbHNlCisJCXhmZXIu ZGlyZWN0aW9uID0gRFNJX1BBQ0tFVF9TRU5EOworCisJeGZlci5uZWVkX2J0YSA9ICh4ZmVyLmRp cmVjdGlvbiA9PSBEU0lfUEFDS0VUX1JFQ0VJVkUpOworCXhmZXIubmVlZF9idGEgfD0gKG1zZy0+ ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykgPyAxIDogMDsKKwl4ZmVyLm1zZyA9IG1zZzsK Kwl4ZmVyLnN0YXR1cyA9IC1FVElNRURPVVQ7CisJeGZlci5yeF93b3JkX2NvdW50ID0gMDsKKwl4 ZmVyLnJ4X2xlbiA9IDA7CisJeGZlci5jbWQgPSAweDAwOworCWlmIChtc2ctPnR4X2xlbiA+IDAp CisJCXhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOworCWluaXRfY29tcGxldGlv bigmeGZlci5jb21wbGV0ZWQpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cnhf ZXNjX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZh aWxlZCB0byBlbmFibGUgcnhfZXNjIGNsazogJXpkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVkIHJ4 X2VzYyBjbGsgQCVsdSBIelxuIiwKKwkJCSAgICAgY2xrX2dldF9yYXRlKGRzaS0+cnhfZXNjX2Ns aykpOworCisJLyogSW5pdGlhdGUgdGhlIERTSSBwYWNrZXQgdHJhbnNtaXNpb24gKi8KKwlud2xf ZHNpX2JlZ2luX3RyYW5zbWlzc2lvbihkc2kpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoJnhmZXIuY29tcGxldGVkLAorCQkJCQkgTldMX0RTSV9NSVBJX0ZJRk9fVElNRU9V VCkpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2lfaG9zdC0+ZGV2LCAiWyUwMlhdIERTSSB0cmFuc2Zl ciB0aW1lZCBvdXRcbiIsCisJCQkgICAgICB4ZmVyLmNtZCk7CisJCXJldCA9IC1FVElNRURPVVQ7 CisJfSBlbHNlIHsKKwkJcmV0ID0geGZlci5zdGF0dXM7CisJfQorCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+cnhfZXNjX2Nsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitjb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gbnds X2RzaV9ob3N0X2F0dGFjaCwKKwkuZGV0YWNoID0gbndsX2RzaV9ob3N0X2RldGFjaCwKKwkudHJh bnNmZXIgPSBud2xfZHNpX2hvc3RfdHJhbnNmZXIsCit9OworCitpcnFyZXR1cm5fdCBud2xfZHNp X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTMyIGlycV9zdGF0dXM7CisJ c3RydWN0IG53bF9kc2kgKmRzaSA9IGRhdGE7CisKKwlpcnFfc3RhdHVzID0gbndsX2RzaV9yZWFk KGRzaSwgTldMX0RTSV9JUlFfU1RBVFVTKTsKKworCWlmIChpcnFfc3RhdHVzICYgTldMX0RTSV9U WF9QS1RfRE9ORSB8fAorCSAgICBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQg fHwKKwkgICAgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEKQor CQlud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oZHNpLCBpcnFfc3RhdHVzKTsKKworCXJldHVy biBJUlFfSEFORExFRDsKK30KKworaW50IG53bF9kc2lfZW5hYmxlKHN0cnVjdCBud2xfZHNpICpk c2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJdW5pb24gcGh5X2NvbmZp Z3VyZV9vcHRzICpwaHlfY2ZnID0gJmRzaS0+cGh5X2NmZzsKKwlpbnQgcmV0OworCisJaWYgKCFk c2ktPmxhbmVzKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiTmVlZCBEU0kgbGFuZXM6ICVkXG4i LCBkc2ktPmxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gcGh5X2luaXQo ZHNpLT5waHkpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIGluaXQgRFNJIHBoeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gcGh5X2NvbmZpZ3VyZShkc2ktPnBoeSwgcGh5X2NmZyk7CisJaWYgKHJldCA8IDApIHsKKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIERTSSBwaHk6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2kt PnR4X2VzY19jbGspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJGYWlsZWQgdG8gZW5hYmxlIHR4X2VzYyBjbGs6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJFbmFibGVk IHR4X2VzYyBjbGsgQCVsdSBIelxuIiwKKwkJCSAgICAgY2xrX2dldF9yYXRlKGRzaS0+dHhfZXNj X2NsaykpOworCisJcmV0ID0gbndsX2RzaV9jb25maWdfaG9zdChkc2kpOworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEU0k6ICVkIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBud2xfZHNpX2NvbmZpZ19kcGkoZHNpKTsK KwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAg RFBJOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcGh5X3Bvd2VyX29u KGRzaS0+cGh5KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byBwb3dlciBvbiBEUEhZICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ bndsX2RzaV9pbml0X2ludGVycnVwdHMoZHNpKTsKKworCXJldHVybiAwOworfQorCitpbnQgbnds X2RzaV9kaXNhYmxlKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gZHNpLT5kZXY7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEaXNhYmxpbmcgY2xv Y2tzIGFuZCBwaHlcbiIpOworCisJcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7CisJcGh5X2V4aXQo ZHNpLT5waHkpOworCisJLyogRGlzYWJsaW5nIHRoZSBjbG9jayBiZWZvcmUgdGhlIHBoeSBicmVh a3MgZW5hYmxpbmcgZHNpIGFnYWluICovCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dHhf ZXNjX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvbndsLWRzaS9ud2wtZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kv bndsLWRzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTc5YjM2 NmRlNjUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L253bC1kc2kuaApAQCAtMCwwICsxLDExMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArICovCisvKgorICogTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAq LworI2lmbmRlZiBfX05XTF9EU0lfSF9fCisjZGVmaW5lIF9fTldMX0RTSV9IX18KKworI2luY2x1 ZGUgPGxpbnV4L2lycXJldHVybi5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgor CisjaW5jbHVkZSAibndsLWRydi5oIgorCisvKiBEU0kgSE9TVCByZWdpc3RlcnMgKi8KKyNkZWZp bmUgTldMX0RTSV9DRkdfTlVNX0xBTkVTCQkJMHgwCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX05PTkNP TlRJTlVPVVNfQ0xLCQkweDQKKyNkZWZpbmUgTldMX0RTSV9DRkdfVF9QUkUJCQkweDgKKyNkZWZp bmUgTldMX0RTSV9DRkdfVF9QT1NUCQkJMHhjCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RYX0dBUAkJ CTB4MTAKKyNkZWZpbmUgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQCQkweDE0CisjZGVmaW5l IE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUAkweDE4CisjZGVmaW5lIE5XTF9EU0lf Q0ZHX0hUWF9UT19DT1VOVAkJMHgxYworI2RlZmluZSBOV0xfRFNJX0NGR19MUlhfSF9UT19DT1VO VAkJMHgyMAorI2RlZmluZSBOV0xfRFNJX0NGR19CVEFfSF9UT19DT1VOVAkJMHgyNAorI2RlZmlu ZSBOV0xfRFNJX0NGR19UV0FLRVVQCQkJMHgyOAorI2RlZmluZSBOV0xfRFNJX0NGR19TVEFUVVNf T1VUCQkJMHgyYworI2RlZmluZSBOV0xfRFNJX1JYX0VSUk9SX1NUQVRVUwkJCTB4MzAKKworLyog RFNJIERQSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkUJ CTB4MjAwCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMCQkweDIwNAorI2Rl ZmluZSBOV0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkcJCTB4MjA4CisjZGVmaW5lIE5XTF9E U0lfUElYRUxfRk9STUFUCQkJMHgyMGMKKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWQkJ CTB4MjEwCisjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0xPVwkwCisjZGVm aW5lIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0gJQklUKDEpCisKKyNkZWZpbmUg TldMX0RTSV9IU1lOQ19QT0xBUklUWQkJCTB4MjE0CisjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9M QVJJVFlfQUNUSVZFX0xPVwkwCisjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZF X0hJR0gJQklUKDEpCisKKyNkZWZpbmUgTldMX0RTSV9WSURFT19NT0RFCQkJMHgyMTgKKyNkZWZp bmUgTldMX0RTSV9IRlAJCQkJMHgyMWMKKyNkZWZpbmUgTldMX0RTSV9IQlAJCQkJMHgyMjAKKyNk ZWZpbmUgTldMX0RTSV9IU0EJCQkJMHgyMjQKKyNkZWZpbmUgTldMX0RTSV9FTkFCTEVfTVVMVF9Q S1RTCQkweDIyOAorI2RlZmluZSBOV0xfRFNJX1ZCUAkJCQkweDIyYworI2RlZmluZSBOV0xfRFNJ X1ZGUAkJCQkweDIzMAorI2RlZmluZSBOV0xfRFNJX0JMTFBfTU9ERQkJCTB4MjM0CisjZGVmaW5l IE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFAJCTB4MjM4CisjZGVmaW5lIE5XTF9EU0lfVkFDVElW RQkJCQkweDIzYworI2RlZmluZSBOV0xfRFNJX1ZDCQkJCTB4MjQwCisKKy8qIERTSSBBUEIgUEtU IGNvbnRyb2wgKi8KKyNkZWZpbmUgTldMX0RTSV9UWF9QQVlMT0FECQkJMHgyODAKKyNkZWZpbmUg TldMX0RTSV9QS1RfQ09OVFJPTAkJCTB4Mjg0CisjZGVmaW5lIE5XTF9EU0lfU0VORF9QQUNLRVQJ CQkweDI4OAorI2RlZmluZSBOV0xfRFNJX1BLVF9TVEFUVVMJCQkweDI4YworI2RlZmluZSBOV0xf RFNJX1BLVF9GSUZPX1dSX0xFVkVMCQkweDI5MAorI2RlZmluZSBOV0xfRFNJX1BLVF9GSUZPX1JE X0xFVkVMCQkweDI5NAorI2RlZmluZSBOV0xfRFNJX1JYX1BBWUxPQUQJCQkweDI5OAorI2RlZmlu ZSBOV0xfRFNJX1JYX1BLVF9IRUFERVIJCQkweDI5YworCisvKiBEU0kgSVJRIGhhbmRsaW5nICov CisjZGVmaW5lIE5XTF9EU0lfSVJRX1NUQVRVUwkJCTB4MmEwCisjZGVmaW5lIE5XTF9EU0lfU01f Tk9UX0lETEUJCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORQkJCUJJVCgxKQor I2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OCQkJQklUKDIpCisjZGVmaW5lIE5XTF9EU0lf VFhfRklGT19PVkZMVwkJCUJJVCgzKQorI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fVURGTFcJCQlC SVQoNCkKKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX09WRkxXCQkJQklUKDUpCisjZGVmaW5lIE5X TF9EU0lfUlhfRklGT19VREZMVwkJCUJJVCg2KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJf UkNWRAkJCUJJVCg3KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRAlC SVQoOCkKKyNkZWZpbmUgTldMX0RTSV9CVEFfVElNRU9VVAkJCUJJVCgyOSkKKyNkZWZpbmUgTldM X0RTSV9MUF9SWF9USU1FT1VUCQkJQklUKDMwKQorI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJTUVP VVQJCQlCSVQoMzEpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTMgkJCTB4MmE0CisjZGVm aW5lIE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0NfRVJSCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9N VUxUSV9CSVRfRUNDX0VSUgkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUgkJCQlCSVQo MikKKworI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLCQkJMHgyYTgKKyNkZWZpbmUgTldMX0RTSV9T TV9OT1RfSURMRV9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNL CQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTl9NQVNLCQlCSVQoMikKKyNk ZWZpbmUgTldMX0RTSV9UWF9GSUZPX09WRkxXX01BU0sJCUJJVCgzKQorI2RlZmluZSBOV0xfRFNJ X1RYX0ZJRk9fVURGTFdfTUFTSwkJQklUKDQpCisjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19PVkZM V19NQVNLCQlCSVQoNSkKKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX1VERkxXX01BU0sJCUJJVCg2 KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLCQlCSVQoNykKKyNkZWZpbmUg TldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkRfTUFTSwlCSVQoOCkKKyNkZWZpbmUgTldM X0RTSV9CVEFfVElNRU9VVF9NQVNLCQlCSVQoMjkpCisjZGVmaW5lIE5XTF9EU0lfTFBfUlhfVElN RU9VVF9NQVNLCQlCSVQoMzApCisjZGVmaW5lIE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNLCQlC SVQoMzEpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfTUFTSzIJCQkweDJhYworI2RlZmluZSBOV0xf RFNJX1NJTkdMRV9CSVRfRUNDX0VSUl9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9NVUxU SV9CSVRfRUNDX0VSUl9NQVNLCQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9DUkNfRVJSX01BU0sJ CQlCSVQoMikKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBud2xfZHNp X2hvc3Rfb3BzOworCitpcnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRhdGEpOworaW50IG53bF9kc2lfZW5hYmxlKHN0cnVjdCBud2xfZHNpICpkc2kpOworaW50 IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsKKworI2VuZGlmIC8qIF9fTldM X0RTSV9IX18gKi8KLS0gCjIuMjAuMQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==