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=-6.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,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 C6A7BC3815B for ; Thu, 9 Apr 2020 10:42:19 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 A56972083E for ; Thu, 9 Apr 2020 10:42:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A56972083E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 80A016E0AD; Thu, 9 Apr 2020 10:42:16 +0000 (UTC) Received: from honk.sigxcpu.org (honk.sigxcpu.org [24.134.29.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 123DA6E090 for ; Thu, 9 Apr 2020 10:42:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 9EF2BFB02; Thu, 9 Apr 2020 12:42:13 +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 Hp5LJLoQxV9F; Thu, 9 Apr 2020 12:42:06 +0200 (CEST) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id E7BDA400EE; Thu, 9 Apr 2020 12:42:02 +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 v11 2/2] drm/bridge: Add NWL MIPI DSI host controller support Date: Thu, 9 Apr 2020 12:42:02 +0200 Message-Id: <1cf5750f734e33d005564cd89c576eaf3c1c192b.1586427783.git.agx@sigxcpu.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXIgZm91bmQgb24KaS5NWDggU29Dcy4KCkl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4 TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgplLmcuIHRoZSBpLk1YOFFYUC4KCkl0 IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIG14c2ZiLgoKU2ln bmVkLW9mZi1ieTogR3VpZG8gR8O8bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KQ28tZGV2ZWxvcGVk LWJ5OiBSb2JlcnQgQ2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+ClNpZ25lZC1vZmYtYnk6 IFJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4KVGVzdGVkLWJ5OiBSb2JlcnQg Q2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+ClRlc3RlZC1ieTogTWFydGluIEtlcHBsaW5n ZXIgPG1hcnRpbi5rZXBwbGluZ2VyQHB1cmkuc20+ClJldmlld2VkLWJ5OiBGYWJpbyBFc3RldmFt IDxmZXN0ZXZhbUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmln ICAgfCAgIDE2ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgIHwgICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYyB8IDEyMTMgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaCB8ICAxNDQgKysr KwogNCBmaWxlcyBjaGFuZ2VkLCAxMzc0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4 IGFhZWQyMzQ3YWNlOS4uNmVjOTQ1ZjgzN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCkBAIC01 OCw2ICs1OCwyMiBAQCBjb25maWcgRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcK IAkgIHRvIERQKysuIFRoaXMgaXMgdXNlZCB3aXRoIHRoZSBpLk1YNiBpbXgtbGRiCiAJICBkcml2 ZXIuIFlvdSBhcmUgbGlrZWx5IHRvIHNheSBOIGhlcmUuCiAKK2NvbmZpZyBEUk1fTldMX01JUElf RFNJCisJdHJpc3RhdGUgIk5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXIi CisJZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlkZXBlbmRzIG9uIE9G ICYmIEhBU19JT01FTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9E U0kKKwlzZWxlY3QgRFJNX1BBTkVMX0JSSURHRQorCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQ SFkKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBNVUxUSVBMRVhFUgorCXNlbGVjdCBSRUdN QVBfTU1JTworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgTm9ydGh3ZXN0IExvZ2ljIE1JUEkg RFNJIEhvc3QgY29udHJvbGxlciBhcworCSAgZm9yIGV4YW1wbGUgZm91bmQgb24gTlhQJ3MgaS5N WDggUHJvY2Vzc29ycy4KKwogY29uZmlnIERSTV9OWFBfUFROMzQ2MAogCXRyaXN0YXRlICJOWFAg UFROMzQ2MCBEUC9MVkRTIGJyaWRnZSIKIAlkZXBlbmRzIG9uIE9GCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZQppbmRleCA2ZmIwNjJiNWIwZjAuLmIwNGFjMmRmYTIyYyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIG9iai0kKENPTkZJR19EUk1fSTJDX0FEVjc1MTEpICs9 IGFkdjc1MTEvCiBvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGktc242NWRzaTg2 Lm8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0MTAubwogb2JqLSQoQ09O RklHX0RSTV9USV9UUEQxMlMwMTUpICs9IHRpLXRwZDEyczAxNS5vCitvYmotJChDT05GSUdfRFJN X05XTF9NSVBJX0RTSSkgKz0gbndsLWRzaS5vCiAKIG9iai15ICs9IGFuYWxvZ2l4Lwogb2JqLXkg Kz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2ku YyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uYjE0ZDcyNWJmNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMKQEAgLTAsMCArMSwxMjEzIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBpLk1YOCBOV0wgTUlQSSBEU0kg aG9zdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCisgKiBDb3B5cmlnaHQg KEMpIDIwMjAgUHVyaXNtIFNQQworICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgor I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUg PGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXgvY29uc3VtZXIuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVk ZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUg PGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgorI2luY2x1ZGUgPGxp bnV4L3RpbWU2NC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisKKyNpbmNsdWRlIDx2 aWRlby9taXBpX2Rpc3BsYXkuaD4KKworI2luY2x1ZGUgIm53bC1kc2kuaCIKKworI2RlZmluZSBE UlZfTkFNRSAibndsLWRzaSIKKworLyogaS5NWDggTldMIHF1aXJrcyAqLworLyogaS5NWDhNUSBl cnJhdGEgRTExNDE4ICovCisjZGVmaW5lIEUxMTQxOF9IU19NT0RFX1FVSVJLCUJJVCgwKQorCisj ZGVmaW5lIE5XTF9EU0lfTUlQSV9GSUZPX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcyg1MDApCisK K2VudW0gdHJhbnNmZXJfZGlyZWN0aW9uIHsKKwlEU0lfUEFDS0VUX1NFTkQsCisJRFNJX1BBQ0tF VF9SRUNFSVZFLAorfTsKKworI2RlZmluZSBOV0xfRFNJX0VORFBPSU5UX0xDRElGIDAKKyNkZWZp bmUgTldMX0RTSV9FTkRQT0lOVF9EQ1NTIDEKKworc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29u ZmlnIHsKKwljb25zdCBjaGFyICppZDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJYm9vbCBwcmVzZW50 OworfTsKKworc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgeworCWNvbnN0IHN0cnVjdCBtaXBpX2Rz aV9tc2cgKm1zZzsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0IHBhY2tldDsKKwlzdHJ1Y3QgY29t cGxldGlvbiBjb21wbGV0ZWQ7CisKKwlpbnQgc3RhdHVzOyAvKiBzdGF0dXMgb2YgdHJhbnNtaXNz aW9uICovCisJZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOworCWJvb2wgbmVlZF9i dGE7CisJdTggY21kOworCXUxNiByeF93b3JkX2NvdW50OworCXNpemVfdCB0eF9sZW47IC8qIGlu IGJ5dGVzICovCisJc2l6ZV90IHJ4X2xlbjsgLyogaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBu d2xfZHNpIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IG1pcGlfZHNpX2hv c3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9icmlkZ2UgKnBhbmVsX2JyaWRnZTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAqcGh5OworCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0 cyBwaHlfY2ZnOworCXVuc2lnbmVkIGludCBxdWlya3M7CisKKwlzdHJ1Y3QgcmVnbWFwICpyZWdt YXA7CisJaW50IGlycTsKKwkvKgorCSAqIFRoZSBEU0kgaG9zdCBjb250cm9sbGVyIG5lZWRzIHRo aXMgcmVzZXQgc2VxdWVuY2UgYWNjb3JkaW5nIHRvIE5XTDoKKwkgKiAxLiBEZWFzc2VydCBwY2xr IHJlc2V0IHRvIGdldCBhY2Nlc3MgdG8gRFNJIHJlZ3MKKwkgKiAyLiBDb25maWd1cmUgRFNJIEhv c3QgYW5kIERQSFkgYW5kIGVuYWJsZSBEUEhZCisJICogMy4gRGVhc3NlcnQgRVNDIGFuZCBCWVRF IHJlc2V0cyB0byBhbGxvdyBob3N0IFRYIG9wZXJhdGlvbnMpCisJICogNC4gU2VuZCBEU0kgY21k cyB0byBjb25maWd1cmUgcGVyaXBoZXJhbCAoaGFuZGxlZCBieSBwYW5lbCBkcnYpCisJICogNS4g RGVhc3NlcnQgRFBJIHJlc2V0IHNvIERQSSByZWNlaXZlcyBwaXhlbHMgYW5kIHN0YXJ0cyBzZW5k aW5nCisJICogICAgRFNJIGRhdGEKKwkgKgorCSAqIFRPRE86IFNpbmNlIHBhbmVsX2JyaWRnZXMg ZG8gdGhlaXIgRFNJIHNldHVwIGluIGVuYWJsZSB3ZQorCSAqIGN1cnJlbnRseSBoYXZlIDQuIGFu ZCA1LiBzd2FwcGVkLgorCSAqLworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RfYnl0ZTsKKwlz dHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0X2VzYzsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0 X2RwaTsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0X3BjbGs7CisJc3RydWN0IG11eF9jb250 cm9sICptdXg7CisKKwkvKiBEU0kgY2xvY2tzICovCisJc3RydWN0IGNsayAqcGh5X3JlZl9jbGs7 CisJc3RydWN0IGNsayAqcnhfZXNjX2NsazsKKwlzdHJ1Y3QgY2xrICp0eF9lc2NfY2xrOworCXN0 cnVjdCBjbGsgKmNvcmVfY2xrOworCS8qCisJICogaGFyZHdhcmUgYnVnOiB0aGUgaS5NWDhNUSBu ZWVkcyB0aGlzIGNsb2NrIG9uIGR1cmluZyByZXNldAorCSAqIGV2ZW4gd2hlbiBub3QgdXNpbmcg TENESUYuCisJICovCisJc3RydWN0IGNsayAqbGNkaWZfY2xrOworCisJLyogZHNpIGxhbmVzICov CisJdTMyIGxhbmVzOworCWVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCXVuc2lnbmVkIGxvbmcgZHNpX21vZGVfZmxhZ3M7 CisJaW50IGVycm9yOworCisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXI7Cit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbndsX2RzaV9yZWdtYXBfY29uZmlnID0g eworCS5yZWdfYml0cyA9IDE2LAorCS52YWxfYml0cyA9IDMyLAorCS5yZWdfc3RyaWRlID0gNCwK KwkubWF4X3JlZ2lzdGVyID0gTldMX0RTSV9JUlFfTUFTSzIsCisJLm5hbWUgPSBEUlZfTkFNRSwK K307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG53bF9kc2kgKmJyaWRnZV90b19kc2koc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3Ry dWN0IG53bF9kc2ksIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9jbGVhcl9lcnJv cihzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCWludCByZXQgPSBkc2ktPmVycm9yOworCisJZHNp LT5lcnJvciA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV93cml0 ZShzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWlu dCByZXQ7CisKKwlpZiAoZHNpLT5lcnJvcikKKwkJcmV0dXJuOworCisJcmV0ID0gcmVnbWFwX3dy aXRlKGRzaS0+cmVnbWFwLCByZWcsIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwKKwkJCSAgICAgICJGYWlsZWQgdG8gd3JpdGUgTldMIERTSSByZWcgMHgl eDogJWRcbiIsIHJlZywKKwkJCSAgICAgIHJldCk7CisJCWRzaS0+ZXJyb3IgPSByZXQ7CisJfQor fQorCitzdGF0aWMgdTMyIG53bF9kc2lfcmVhZChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgcmVn KQoreworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCWlmIChkc2ktPmVycm9yKQor CQlyZXR1cm4gMDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRzaS0+cmVnbWFwLCByZWcsICZ2YWwp OworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8g cmVhZCBOV0wgRFNJIHJlZyAweCV4OiAlZFxuIiwKKwkJCSAgICAgIHJlZywgcmV0KTsKKwkJZHNp LT5lcnJvciA9IHJldDsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBud2xfZHNp X2dldF9kcGlfcGl4ZWxfZm9ybWF0KGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdCkK K3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKKwkJcmV0 dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE2OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoK KwkJcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TDsKKwljYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjZfUEFDS0VEOgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMTg7CisJY2FzZSBN SVBJX0RTSV9GTVRfUkdCODg4OgorCQlyZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMjQ7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogcHMyYmMgLSBQaWNv c2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgdTMyIHBzMmJjKHN0cnVj dCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyBwcykKK3sKKwl1MzIgYnBwID0gbWlw aV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisKKwlyZXR1cm4gRElWNjRf VTY0X1JPVU5EX1VQKHBzICogZHNpLT5tb2RlLmNsb2NrICogYnBwLAorCQkJCSAgZHNpLT5sYW5l cyAqIDggKiBOU0VDX1BFUl9TRUMpOworfQorCisvKgorICogdWkyYmMgLSBVSSB0aW1lIHBlcmlv ZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMKKyAqLworc3RhdGljIHUzMiB1aTJiYyhzdHJ1Y3Qgbnds X2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIGxvbmcgdWkpCit7CisJdTMyIGJwcCA9IG1pcGlfZHNp X3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCisJcmV0dXJuIERJVjY0X1U2NF9S T1VORF9VUCh1aSAqIGRzaS0+bGFuZXMsCisJCQkJICBkc2ktPm1vZGUuY2xvY2sgKiAxMDAwICog YnBwKTsKK30KKworLyoKKyAqIHVzMmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBjbG9jayBjeWNs ZXMKKyAqLworc3RhdGljIHUzMiB1czJscCh1MzIgbHBfY2xrX3JhdGUsIHVuc2lnbmVkIGxvbmcg dXMpCit7CisJcmV0dXJuIERJVl9ST1VORF9VUCh1cyAqIGxwX2Nsa19yYXRlLCBVU0VDX1BFUl9T RUMpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfY29uZmlnX2hvc3Qoc3RydWN0IG53bF9kc2kg KmRzaSkKK3sKKwl1MzIgY3ljbGVzOworCXN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9k cGh5ICpjZmcgPSAmZHNpLT5waHlfY2ZnLm1pcGlfZHBoeTsKKworCWlmIChkc2ktPmxhbmVzIDwg MSB8fCBkc2ktPmxhbmVzID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkc2ktPmRldiwgIkRTSSBMYW5lcyAlZFxuIiwgZHNpLT5sYW5lcyk7CisJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOworCisJ aWYgKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykg eworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssIDB4 MDEpOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQLCAw eDAxKTsKKwl9IGVsc2UgeworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09O VElOVU9VU19DTEssIDB4MDApOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVU T0lOU0VSVF9FT1RQLCAweDAwKTsKKwl9CisKKwkvKiB2YWx1ZXMgaW4gYnl0ZSBjbG9jayBjeWNs ZXMgKi8KKwljeWNsZXMgPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wcmU6IDB4JXhcbiIsIGN5Y2xlcyk7CisJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUFJFLCBjeWNsZXMpOworCWN5Y2xlcyA9IHBzMmJj KGRzaSwgY2ZnLT5scHggKyBjZmctPmNsa19wcmVwYXJlICsgY2ZnLT5jbGtfemVybyk7CisJRFJN X0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdHhfZ2FwIChwcmUpOiAweCV4XG4iLCBj eWNsZXMpOworCWN5Y2xlcyArPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7CisJRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wb3N0OiAweCV4XG4iLCBjeWNsZXMpOworCW53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UX1BPU1QsIGN5Y2xlcyk7CisJY3ljbGVzID0g cHMyYmMoZHNpLCBjZmctPmhzX2V4aXQpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2 LCAiY2ZnX3R4X2dhcDogMHgleFxuIiwgY3ljbGVzKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9DRkdfVFhfR0FQLCBjeWNsZXMpOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf Q0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUCwgMHgwMSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfQ0ZHX0hUWF9UT19DT1VOVCwgMHgwMCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9E U0lfQ0ZHX0xSWF9IX1RPX0NPVU5ULCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9DRkdfQlRBX0hfVE9fQ09VTlQsIDB4MDApOworCS8qIEluIExQIGNsb2NrIGN5Y2xlcyAqLwor CWN5Y2xlcyA9IHVzMmxwKGNmZy0+bHBfY2xrX3JhdGUsIGNmZy0+d2FrZXVwKTsKKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190d2FrZXVwOiAweCV4XG4iLCBjeWNsZXMpOwor CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UV0FLRVVQLCBjeWNsZXMpOworCisJcmV0 dXJuIG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2Nv bmZpZ19kcGkoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwl1MzIgbW9kZTsKKwlpbnQgY29sb3Jf Zm9ybWF0OworCWJvb2wgYnVyc3RfbW9kZTsKKwlpbnQgaGZyb250X3BvcmNoLCBoYmFja19wb3Jj aCwgdmZyb250X3BvcmNoLCB2YmFja19wb3JjaDsKKwlpbnQgaHN5bmNfbGVuLCB2c3luY19sZW47 CisKKwloZnJvbnRfcG9yY2ggPSBkc2ktPm1vZGUuaHN5bmNfc3RhcnQgLSBkc2ktPm1vZGUuaGRp c3BsYXk7CisJaHN5bmNfbGVuID0gZHNpLT5tb2RlLmhzeW5jX2VuZCAtIGRzaS0+bW9kZS5oc3lu Y19zdGFydDsKKwloYmFja19wb3JjaCA9IGRzaS0+bW9kZS5odG90YWwgLSBkc2ktPm1vZGUuaHN5 bmNfZW5kOworCisJdmZyb250X3BvcmNoID0gZHNpLT5tb2RlLnZzeW5jX3N0YXJ0IC0gZHNpLT5t b2RlLnZkaXNwbGF5OworCXZzeW5jX2xlbiA9IGRzaS0+bW9kZS52c3luY19lbmQgLSBkc2ktPm1v ZGUudnN5bmNfc3RhcnQ7CisJdmJhY2tfcG9yY2ggPSBkc2ktPm1vZGUudnRvdGFsIC0gZHNpLT5t b2RlLnZzeW5jX2VuZDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGZyb250 X3BvcmNoID0gJWRcbiIsIGhmcm9udF9wb3JjaCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJoYmFja19wb3JjaCA9ICVkXG4iLCBoYmFja19wb3JjaCk7CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJoc3luY19sZW4gPSAlZFxuIiwgaHN5bmNfbGVuKTsKKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhkaXNwbGF5ID0gJWRcbiIsIGRzaS0+bW9kZS5o ZGlzcGxheSk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2ZnJvbnRfcG9yY2gg PSAlZFxuIiwgdmZyb250X3BvcmNoKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwg InZiYWNrX3BvcmNoID0gJWRcbiIsIHZiYWNrX3BvcmNoKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZF Uihkc2ktPmRldiwgInZzeW5jX2xlbiA9ICVkXG4iLCB2c3luY19sZW4pOworCURSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAidmFjdGl2ZSA9ICVkXG4iLCBkc2ktPm1vZGUudmRpc3BsYXkp OworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2xvY2sgPSAlZCBrSHpcbiIsIGRz aS0+bW9kZS5jbG9jayk7CisKKwljb2xvcl9mb3JtYXQgPSBud2xfZHNpX2dldF9kcGlfcGl4ZWxf Zm9ybWF0KGRzaS0+Zm9ybWF0KTsKKwlpZiAoY29sb3JfZm9ybWF0IDwgMCkgeworCQlEUk1fREVW X0VSUk9SKGRzaS0+ZGV2LCAiSW52YWxpZCBjb2xvciBmb3JtYXQgMHgleFxuIiwKKwkJCSAgICAg IGRzaS0+Zm9ybWF0KTsKKwkJcmV0dXJuIGNvbG9yX2Zvcm1hdDsKKwl9CisJRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJwaXhlbCBmbXQgPSAlZFxuIiwgZHNpLT5mb3JtYXQpOworCisJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSU5URVJGQUNFX0NPTE9SX0NPRElORywgTldMX0RT SV9EUElfMjRfQklUKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9GT1JNQVQs IGNvbG9yX2Zvcm1hdCk7CisJLyoKKwkgKiBBZGp1c3RpbmcgaW5wdXQgcG9sYXJpdHkgYmFzZWQg b24gdGhlIHZpZGVvIG1vZGUgcmVzdWx0cyBpbgorCSAqIGEgYmxhY2sgc2NyZWVuIHNvIGFsd2F5 cyBwaWNrIGFjdGl2ZSBsb3c6CisJICovCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVlNZ TkNfUE9MQVJJVFksCisJCSAgICAgIE5XTF9EU0lfVlNZTkNfUE9MQVJJVFlfQUNUSVZFX0xPVyk7 CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFksCisJCSAgICAgIE5X TF9EU0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0xPVyk7CisKKwlidXJzdF9tb2RlID0gKGRzaS0+ ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKSAmJgorCQkgICAgICEo ZHNpLT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSk7CisK KwlpZiAoYnVyc3RfbW9kZSkgeworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WSURFT19N T0RFLCBOV0xfRFNJX1ZNX0JVUlNUX01PREUpOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9QSVhFTF9GSUZPX1NFTkRfTEVWRUwsIDI1Nik7CisJfSBlbHNlIHsKKwkJbW9kZSA9ICgoZHNp LT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkgPworCQkJ CU5XTF9EU0lfVk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNfUFVMU0VTIDoKKwkJCQlOV0xfRFNJX1ZN X05PTl9CVVJTVF9NT0RFX1dJVEhfU1lOQ19FVkVOVFMpOworCQlud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9WSURFT19NT0RFLCBtb2RlKTsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf UElYRUxfRklGT19TRU5EX0xFVkVMLAorCQkJICAgICAgZHNpLT5tb2RlLmhkaXNwbGF5KTsKKwl9 CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IRlAsIGhmcm9udF9wb3JjaCk7CisJbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSEJQLCBoYmFja19wb3JjaCk7CisJbndsX2RzaV93cml0 ZShkc2ksIE5XTF9EU0lfSFNBLCBoc3luY19sZW4pOworCisJbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfRU5BQkxFX01VTFRfUEtUUywgMHgwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9CTExQX01PREUsIDB4MSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVVNFX05VTExf UEtUX0JMTFAsIDB4MCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkMsIDB4MCk7CisK Kwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9QQVlMT0FEX1NJWkUsIGRzaS0+bW9k ZS5oZGlzcGxheSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkFDVElWRSwgZHNpLT5t b2RlLnZkaXNwbGF5IC0gMSk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkJQLCB2YmFj a19wb3JjaCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVkZQLCB2ZnJvbnRfcG9yY2gp OworCisJcmV0dXJuIG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsKK30KKworc3RhdGljIGludCBu d2xfZHNpX2luaXRfaW50ZXJydXB0cyhzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXUzMiBpcnFf ZW5hYmxlOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIDB4ZmZmZmZm ZmYpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLMiwgMHg3KTsKKworCWly cV9lbmFibGUgPSB+KHUzMikoTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNLIHwKKwkJCSAgICBOV0xf RFNJX1JYX1BLVF9IRFJfUkNWRF9NQVNLIHwKKwkJCSAgICBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdf TUFTSyB8CisJCQkgICAgTldMX0RTSV9IU19UWF9USU1FT1VUX01BU0spOworCisJbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIGlycV9lbmFibGUpOworCisJcmV0dXJuIG53bF9k c2lfY2xlYXJfZXJyb3IoZHNpKTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2hvc3RfYXR0YWNo KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwKKwkJCSAgICAgICBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9v Zihkc2lfaG9zdCwgc3RydWN0IG53bF9kc2ksIGRzaV9ob3N0KTsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBkc2ktPmRldjsKKworCURSTV9ERVZfSU5GTyhkZXYsICJsYW5lcz0ldSwgZm9ybWF0PTB4 JXggZmxhZ3M9MHglbHhcbiIsIGRldmljZS0+bGFuZXMsCisJCSAgICAgZGV2aWNlLT5mb3JtYXQs IGRldmljZS0+bW9kZV9mbGFncyk7CisKKwlpZiAoZGV2aWNlLT5sYW5lcyA8IDEgfHwgZGV2aWNl LT5sYW5lcyA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJZHNpLT5sYW5lcyA9IGRldmljZS0+ bGFuZXM7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKKwlkc2ktPmRzaV9tb2RlX2Zs YWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29s IG53bF9kc2lfcmVhZF9wYWNrZXQoc3RydWN0IG53bF9kc2kgKmRzaSwgdTMyIHN0YXR1cykKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2Zl ciAqeGZlciA9IGRzaS0+eGZlcjsKKwlpbnQgZXJyOworCXU4ICpwYXlsb2FkID0geGZlci0+bXNn LT5yeF9idWY7CisJdTMyIHZhbDsKKwl1MTYgd29yZF9jb3VudDsKKwl1OCBjaGFubmVsOworCXU4 IGRhdGFfdHlwZTsKKworCXhmZXItPnN0YXR1cyA9IDA7CisKKwlpZiAoeGZlci0+cnhfd29yZF9j b3VudCA9PSAwKSB7CisJCWlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEKSkK KwkJCXJldHVybiBmYWxzZTsKKwkJLyogR2V0IHRoZSBSWCBoZWFkZXIgYW5kIHBhcnNlIGl0ICov CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hFQURFUik7CisJCWVy ciA9IG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsKKwkJaWYgKGVycikKKwkJCXhmZXItPnN0YXR1 cyA9IGVycjsKKwkJd29yZF9jb3VudCA9IE5XTF9EU0lfV0ModmFsKTsKKwkJY2hhbm5lbCA9IE5X TF9EU0lfUlhfVkModmFsKTsKKwkJZGF0YV90eXBlID0gTldMX0RTSV9SWF9EVCh2YWwpOworCisJ CWlmIChjaGFubmVsICE9IHhmZXItPm1zZy0+Y2hhbm5lbCkgeworCQkJRFJNX0RFVl9FUlJPUihk ZXYsCisJCQkJICAgICAgIlslMDJYXSBDaGFubmVsIG1pc21hdGNoICgldSAhPSAldSlcbiIsCisJ CQkJICAgICAgeGZlci0+Y21kLCBjaGFubmVsLCB4ZmVyLT5tc2ctPmNoYW5uZWwpOworCQkJeGZl ci0+c3RhdHVzID0gLUVJTlZBTDsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJc3dpdGNoIChk YXRhX3R5cGUpIHsKKwkJY2FzZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9O U0VfMkJZVEU6CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRf UkVBRF9SRVNQT05TRV8yQllURToKKwkJCWlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDEpIHsKKwkJ CQkvKiByZWFkIHNlY29uZCBieXRlICovCisJCQkJcGF5bG9hZFsxXSA9IHdvcmRfY291bnQgPj4g ODsKKwkJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIE1J UElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToKKwkJCWZhbGx0aHJv dWdoOworCQljYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOgor CQkJaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMCkgeworCQkJCS8qIHJlYWQgZmlyc3QgYnl0ZSAq LworCQkJCXBheWxvYWRbMF0gPSB3b3JkX2NvdW50ICYgMHhmZjsKKwkJCQkrK3hmZXItPnJ4X2xl bjsKKwkJCX0KKwkJCXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKKwkJCXJldHVybiB0cnVl OworCQljYXNlIE1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJPUl9SRVBPUlQ6CisJCQl3 b3JkX2NvdW50ICY9IDB4ZmY7CisJCQlEUk1fREVWX0VSUk9SKGRldiwgIlslMDJYXSBEU0kgZXJy b3IgcmVwb3J0OiAweCUwMnhcbiIsCisJCQkJICAgICAgeGZlci0+Y21kLCB3b3JkX2NvdW50KTsK KwkJCXhmZXItPnN0YXR1cyA9IC1FUFJPVE87CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlm ICh3b3JkX2NvdW50ID4geGZlci0+bXNnLT5yeF9sZW4pIHsKKwkJCURSTV9ERVZfRVJST1IoZGV2 LAorCQkJCSJbJTAyWF0gUmVjZWl2ZSBidWZmZXIgdG9vIHNtYWxsOiAlenUgKDwgJXUpXG4iLAor CQkJCXhmZXItPmNtZCwgeGZlci0+bXNnLT5yeF9sZW4sIHdvcmRfY291bnQpOworCQkJeGZlci0+ c3RhdHVzID0gLUVJTlZBTDsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJeGZlci0+cnhfd29y ZF9jb3VudCA9IHdvcmRfY291bnQ7CisJfSBlbHNlIHsKKwkJLyogU2V0IHdvcmRfY291bnQgZnJv bSBwcmV2aW91cyBoZWFkZXIgcmVhZCAqLworCQl3b3JkX2NvdW50ID0geGZlci0+cnhfd29yZF9j b3VudDsKKwl9CisKKwkvKiBJZiBSWCBwYXlsb2FkIGlzIG5vdCB5ZXQgcmVjZWl2ZWQsIHdhaXQg Zm9yIGl0ICovCisJaWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JD VkQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBSZWFkIHRoZSBSWCBwYXlsb2FkICovCisJd2hp bGUgKHdvcmRfY291bnQgPj0gNCkgeworCQl2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJ X1JYX1BBWUxPQUQpOworCQlwYXlsb2FkWzBdID0gKHZhbCA+PiAwKSAmIDB4ZmY7CisJCXBheWxv YWRbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJcGF5bG9hZFsyXSA9ICh2YWwgPj4gMTYpICYg MHhmZjsKKwkJcGF5bG9hZFszXSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKKwkJcGF5bG9hZCArPSA0 OworCQl4ZmVyLT5yeF9sZW4gKz0gNDsKKwkJd29yZF9jb3VudCAtPSA0OworCX0KKworCWlmICh3 b3JkX2NvdW50ID4gMCkgeworCQl2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BB WUxPQUQpOworCQlzd2l0Y2ggKHdvcmRfY291bnQpIHsKKwkJY2FzZSAzOgorCQkJcGF5bG9hZFsy XSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwkJCSsreGZlci0+cnhfbGVuOworCQkJZmFsbHRocm91 Z2g7CisJCWNhc2UgMjoKKwkJCXBheWxvYWRbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJCSsr eGZlci0+cnhfbGVuOworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgMToKKwkJCXBheWxvYWRbMF0g PSAodmFsID4+IDApICYgMHhmZjsKKwkJCSsreGZlci0+cnhfbGVuOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwl4ZmVyLT5zdGF0dXMgPSB4ZmVyLT5yeF9sZW47CisJZXJyID0gbndsX2RzaV9jbGVh cl9lcnJvcihkc2kpOworCWlmIChlcnIpCisJCXhmZXItPnN0YXR1cyA9IGVycjsKKworCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oc3Ry dWN0IG53bF9kc2kgKmRzaSwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2Zl ciAqeGZlciA9IGRzaS0+eGZlcjsKKwlib29sIGVuZF9wYWNrZXQgPSBmYWxzZTsKKworCWlmICgh eGZlcikKKwkJcmV0dXJuOworCisJaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1NF TkQgJiYKKwkgICAgc3RhdHVzICYgTldMX0RTSV9UWF9QS1RfRE9ORSkgeworCQl4ZmVyLT5zdGF0 dXMgPSB4ZmVyLT50eF9sZW47CisJCWVuZF9wYWNrZXQgPSB0cnVlOworCX0gZWxzZSBpZiAoc3Rh dHVzICYgTldMX0RTSV9EUEhZX0RJUkVDVElPTiAmJgorCQkgICAoKHN0YXR1cyAmIChOV0xfRFNJ X1JYX1BLVF9IRFJfUkNWRCB8CisJCQkgICAgICAgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRB X1JDVkQpKSkpIHsKKwkJZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9wYWNrZXQoZHNpLCBzdGF0 dXMpOworCX0KKworCWlmIChlbmRfcGFja2V0KQorCQljb21wbGV0ZSgmeGZlci0+Y29tcGxldGVk KTsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oc3RydWN0IG53 bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9IGRzaS0+eGZl cjsKKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwa3QgPSAmeGZlci0+cGFja2V0OworCWNvbnN0 IHU4ICpwYXlsb2FkOworCXNpemVfdCBsZW5ndGg7CisJdTE2IHdvcmRfY291bnQ7CisJdTggaHNf bW9kZTsKKwl1MzIgdmFsOworCXUzMiBoc193b3JrYXJvdW5kID0gMDsKKworCS8qIFNlbmQgdGhl IHBheWxvYWQsIGlmIGFueSAqLworCWxlbmd0aCA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7CisJcGF5 bG9hZCA9IHBrdC0+cGF5bG9hZDsKKworCXdoaWxlIChsZW5ndGggPj0gNCkgeworCQl2YWwgPSAq KHUzMiAqKXBheWxvYWQ7CisJCWhzX3dvcmthcm91bmQgfD0gISh2YWwgJiAweEZGRkYwMCk7CisJ CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7CisJCXBheWxvYWQg Kz0gNDsKKwkJbGVuZ3RoIC09IDQ7CisJfQorCS8qIFNlbmQgdGhlIHJlc3Qgb2YgdGhlIHBheWxv YWQgKi8KKwl2YWwgPSAwOworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAzOgorCQl2YWwgfD0g cGF5bG9hZFsyXSA8PCAxNjsKKwkJZmFsbHRocm91Z2g7CisJY2FzZSAyOgorCQl2YWwgfD0gcGF5 bG9hZFsxXSA8PCA4OworCQloc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhGRkZGMDApOworCQlm YWxsdGhyb3VnaDsKKwljYXNlIDE6CisJCXZhbCB8PSBwYXlsb2FkWzBdOworCQlud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9UWF9QQVlMT0FELCB2YWwpOworCQlicmVhazsKKwl9CisJeGZlci0+ dHhfbGVuID0gcGt0LT5wYXlsb2FkX2xlbmd0aDsKKworCS8qCisJICogU2VuZCB0aGUgaGVhZGVy CisJICogaGVhZGVyWzBdID0gVmlydHVhbCBDaGFubmVsICsgRGF0YSBUeXBlCisJICogaGVhZGVy WzFdID0gV29yZCBDb3VudCBMU0IgKExQKSBvciBmaXJzdCBwYXJhbSAoU1ApCisJICogaGVhZGVy WzJdID0gV29yZCBDb3VudCBNU0IgKExQKSBvciBzZWNvbmQgcGFyYW0gKFNQKQorCSAqLworCXdv cmRfY291bnQgPSBwa3QtPmhlYWRlclsxXSB8IChwa3QtPmhlYWRlclsyXSA8PCA4KTsKKwlpZiAo aHNfd29ya2Fyb3VuZCAmJiAoZHNpLT5xdWlya3MgJiBFMTE0MThfSFNfTU9ERV9RVUlSSykpIHsK KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsCisJCQkJICAgICAiVXNpbmcgaHMgbW9k ZSB3b3JrYXJvdW5kIGZvciBjbWQgMHgleFxuIiwKKwkJCQkgICAgIHhmZXItPmNtZCk7CisJCWhz X21vZGUgPSAxOworCX0gZWxzZSB7CisJCWhzX21vZGUgPSAoeGZlci0+bXNnLT5mbGFncyAmIE1J UElfRFNJX01TR19VU0VfTFBNKSA/IDAgOiAxOworCX0KKwl2YWwgPSBOV0xfRFNJX1dDKHdvcmRf Y291bnQpIHwgTldMX0RTSV9UWF9WQyh4ZmVyLT5tc2ctPmNoYW5uZWwpIHwKKwkgICAgICBOV0xf RFNJX1RYX0RUKHhmZXItPm1zZy0+dHlwZSkgfCBOV0xfRFNJX0hTX1NFTChoc19tb2RlKSB8CisJ ICAgICAgTldMX0RTSV9CVEFfVFgoeGZlci0+bmVlZF9idGEpOworCW53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1BLVF9DT05UUk9MLCB2YWwpOworCisJLyogU2VuZCBwYWNrZXQgY29tbWFuZCAq LworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1NFTkRfUEFDS0VULCAweDEpOworfQorCitz dGF0aWMgc3NpemVfdCBud2xfZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3Qg KmRzaV9ob3N0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQorewor CXN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xf ZHNpLCBkc2lfaG9zdCk7CisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgeGZlcjsKKwlzc2l6ZV90 IHJldCA9IDA7CisKKwkvKiBDcmVhdGUgcGFja2V0IHRvIGJlIHNlbnQgKi8KKwlkc2ktPnhmZXIg PSAmeGZlcjsKKwlyZXQgPSBtaXBpX2RzaV9jcmVhdGVfcGFja2V0KCZ4ZmVyLnBhY2tldCwgbXNn KTsKKwlpZiAocmV0IDwgMCkgeworCQlkc2ktPnhmZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0Owor CX0KKworCWlmICgobXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9Q QVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1Rf MV9QQVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVF U1RfMl9QQVJBTSB8fAorCSAgICAgbXNnLT50eXBlICYgTUlQSV9EU0lfRENTX1JFQUQpICYmCisJ ICAgIG1zZy0+cnhfbGVuID4gMCAmJiBtc2ctPnJ4X2J1ZikKKwkJeGZlci5kaXJlY3Rpb24gPSBE U0lfUEFDS0VUX1JFQ0VJVkU7CisJZWxzZQorCQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRf U0VORDsKKworCXhmZXIubmVlZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9S RUNFSVZFKTsKKwl4ZmVyLm5lZWRfYnRhIHw9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JF UV9BQ0spID8gMSA6IDA7CisJeGZlci5tc2cgPSBtc2c7CisJeGZlci5zdGF0dXMgPSAtRVRJTUVE T1VUOworCXhmZXIucnhfd29yZF9jb3VudCA9IDA7CisJeGZlci5yeF9sZW4gPSAwOworCXhmZXIu Y21kID0gMHgwMDsKKwlpZiAobXNnLT50eF9sZW4gPiAwKQorCQl4ZmVyLmNtZCA9ICgodTggKiko bXNnLT50eF9idWYpKVswXTsKKwlpbml0X2NvbXBsZXRpb24oJnhmZXIuY29tcGxldGVkKTsKKwor CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnJ4X2VzY19jbGspOworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHJ4X2VzYyBj bGs6ICV6ZFxuIiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCURSTV9ERVZf REVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiRW5hYmxlZCByeF9lc2MgY2xrIEAlbHUgSHpcbiIsCisJ CQkgICAgIGNsa19nZXRfcmF0ZShkc2ktPnJ4X2VzY19jbGspKTsKKworCS8qIEluaXRpYXRlIHRo ZSBEU0kgcGFja2V0IHRyYW5zbWlzaW9uICovCisJbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24o ZHNpKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ4ZmVyLmNvbXBsZXRl ZCwKKwkJCQkJIE5XTF9EU0lfTUlQSV9GSUZPX1RJTUVPVVQpKSB7CisJCURSTV9ERVZfRVJST1Io ZHNpX2hvc3QtPmRldiwgIlslMDJYXSBEU0kgdHJhbnNmZXIgdGltZWQgb3V0XG4iLAorCQkJICAg ICAgeGZlci5jbWQpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IHhm ZXIuc3RhdHVzOworCX0KKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnJ4X2VzY19jbGsp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0 X29wcyBud2xfZHNpX2hvc3Rfb3BzID0geworCS5hdHRhY2ggPSBud2xfZHNpX2hvc3RfYXR0YWNo LAorCS50cmFuc2ZlciA9IG53bF9kc2lfaG9zdF90cmFuc2ZlciwKK307CisKK3N0YXRpYyBpcnFy ZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTMy IGlycV9zdGF0dXM7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGRhdGE7CisKKwlpcnFfc3RhdHVz ID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9JUlFfU1RBVFVTKTsKKworCWlmIChpcnFfc3Rh dHVzICYgTldMX0RTSV9UWF9GSUZPX09WRkxXKQorCQlEUk1fREVWX0VSUk9SX1JBVEVMSU1JVEVE KGRzaS0+ZGV2LCAidHggZmlmbyBvdmVyZmxvd1xuIik7CisKKwlpZiAoaXJxX3N0YXR1cyAmIE5X TF9EU0lfSFNfVFhfVElNRU9VVCkKKwkJRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRl diwgIkhTIHR4IHRpbWVvdXRcbiIpOworCisJaWYgKGlycV9zdGF0dXMgJiBOV0xfRFNJX1RYX1BL VF9ET05FIHx8CisJICAgIGlycV9zdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCB8fAor CSAgICBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpCisJCW53 bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihkc2ksIGlycV9zdGF0dXMpOworCisJcmV0dXJuIElS UV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfZW5hYmxlKHN0cnVjdCBud2xfZHNp ICpkc2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJdW5pb24gcGh5X2Nv bmZpZ3VyZV9vcHRzICpwaHlfY2ZnID0gJmRzaS0+cGh5X2NmZzsKKwlpbnQgcmV0OworCisJaWYg KCFkc2ktPmxhbmVzKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiTmVlZCBEU0kgbGFuZXM6ICVk XG4iLCBkc2ktPmxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gcGh5X2lu aXQoZHNpLT5waHkpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIGluaXQgRFNJIHBoeTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmV0ID0gcGh5X2NvbmZpZ3VyZShkc2ktPnBoeSwgcGh5X2NmZyk7CisJaWYgKHJldCA8IDApIHsK KwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIERTSSBwaHk6ICVkXG4i LCByZXQpOworCQlnb3RvIHVuaW5pdF9waHk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKGRzaS0+dHhfZXNjX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihk c2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUgdHhfZXNjIGNsazogJWRcbiIsCisJCQkgICAgICBy ZXQpOworCQlnb3RvIHVuaW5pdF9waHk7CisJfQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ ZGV2LCAiRW5hYmxlZCB0eF9lc2MgY2xrIEAlbHUgSHpcbiIsCisJCQkgICAgIGNsa19nZXRfcmF0 ZShkc2ktPnR4X2VzY19jbGspKTsKKworCXJldCA9IG53bF9kc2lfY29uZmlnX2hvc3QoZHNpKTsK KwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAg RFNJOiAlZCIsIHJldCk7CisJCWdvdG8gZGlzYWJsZV9jbG9jazsKKwl9CisKKwlyZXQgPSBud2xf ZHNpX2NvbmZpZ19kcGkoZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBzZXQgdXAgRFBJOiAlZCIsIHJldCk7CisJCWdvdG8gZGlzYWJsZV9jbG9j azsKKwl9CisKKwlyZXQgPSBwaHlfcG93ZXJfb24oZHNpLT5waHkpOworCWlmIChyZXQgPCAwKSB7 CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERQSFkgKCVkKVxuIiwg cmV0KTsKKwkJZ290byBkaXNhYmxlX2Nsb2NrOworCX0KKworCXJldCA9IG53bF9kc2lfaW5pdF9p bnRlcnJ1cHRzKGRzaSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcG93ZXJfb2ZmX3BoeTsKKwor CXJldHVybiByZXQ7CisKK3Bvd2VyX29mZl9waHk6CisJcGh5X3Bvd2VyX29mZihkc2ktPnBoeSk7 CitkaXNhYmxlX2Nsb2NrOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnR4X2VzY19jbGsp OwordW5pbml0X3BoeToKKwlwaHlfZXhpdChkc2ktPnBoeSk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiRGlzYWJsaW5nIGNsb2NrcyBhbmQgcGh5XG4iKTsKKworCXBoeV9wb3dlcl9vZmYoZHNpLT5w aHkpOworCXBoeV9leGl0KGRzaS0+cGh5KTsKKworCS8qIERpc2FibGluZyB0aGUgY2xvY2sgYmVm b3JlIHRoZSBwaHkgYnJlYWtzIGVuYWJsaW5nIGRzaSBhZ2FpbiAqLworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkc2ktPnR4X2VzY19jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IG53bF9kc2lfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlz dHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOworCWludCByZXQ7CisK Kwlud2xfZHNpX2Rpc2FibGUoZHNpKTsKKworCXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRz aS0+cnN0X2RwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwg IkZhaWxlZCB0byBhc3NlcnQgRFBJOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwlyZXQg PSByZXNldF9jb250cm9sX2Fzc2VydChkc2ktPnJzdF9ieXRlKTsKKwlpZiAocmV0IDwgMCkgewor CQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGFzc2VydCBFU0M6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm47CisJfQorCXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cnN0 X2VzYyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxl ZCB0byBhc3NlcnQgQllURTogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisJcmV0ID0gcmVz ZXRfY29udHJvbF9hc3NlcnQoZHNpLT5yc3RfcGNsayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBhc3NlcnQgUENMSzogJWRcbiIsIHJldCk7 CisJCXJldHVybjsKKwl9CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5jb3JlX2Nsayk7 CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+bGNkaWZfY2xrKTsKKworCXBtX3J1bnRpbWVf cHV0KGRzaS0+ZGV2KTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhz dHJ1Y3QgbndsX2RzaSAqZHNpLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLAorCQkJCSAgIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5X29wdHMpCit7CisJ dW5zaWduZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwlpZiAoZHNpLT5sYW5lcyA8IDEgfHwg ZHNpLT5sYW5lcyA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTbyBmYXIgdGhl IERQSFkgc3BlYyBtaW5pbWFsIHRpbWluZ3Mgd29yayBmb3IgYm90aCBtaXhlbAorCSAqIGRwaHkg YW5kIG53bCBkc2kgaG9zdAorCSAqLworCXJldCA9IHBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRf Y29uZmlnKG1vZGUtPmNsb2NrICogMTAwMCwKKwkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2Jw cChkc2ktPmZvcm1hdCksIGRzaS0+bGFuZXMsCisJCSZwaHlfb3B0cy0+bWlwaV9kcGh5KTsKKwlp ZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT50 eF9lc2NfY2xrKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkxQIGNsayBpcyBA JWx1IEh6XG4iLCByYXRlKTsKKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0gcmF0 ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBud2xfZHNpX2JyaWRnZV9tb2RlX2Zp eHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCit7CisJLyogQXQgbGVhc3QgTENESUYgKyBOV0wgbmVlZHMgYWN0aXZl IGhpZ2ggc3luYyAqLworCWFkanVzdGVkX21vZGUtPmZsYWdzIHw9IChEUk1fTU9ERV9GTEFHX1BI U1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwlhZGp1c3RlZF9tb2RlLT5mbGFncyAmPSB+ KERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpOworCisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworbndsX2RzaV9icmlkZ2Vf bW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICBjb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdl X3RvX2RzaShicmlkZ2UpOworCWludCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBw KGRzaS0+Zm9ybWF0KTsKKworCWlmIChtb2RlLT5jbG9jayAqIGJwcCA+IDE1MDAwMDAwICogZHNp LT5sYW5lcykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCWlmIChtb2RlLT5jbG9jayAq IGJwcCA8IDgwMDAwICogZHNpLT5sYW5lcykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCisJ cmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyB2b2lkCitud2xfZHNpX2JyaWRnZV9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCisJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRf bW9kZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwor CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0 cyBuZXdfY2ZnOworCXVuc2lnbmVkIGxvbmcgcGh5X3JlZl9yYXRlOworCWludCByZXQ7CisKKwly ZXQgPSBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhkc2ksIGFkanVzdGVkX21vZGUsICZuZXdfY2Zn KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBocyBjbG9jayBpcyB1 bmNoYW5nZWQsIHdlJ3JlIGFsbCBnb29kIC0gYWxsIHBhcmFtZXRlcnMgYXJlCisJICogZGVyaXZl ZCBmcm9tIGl0IGF0bS4KKwkgKi8KKwlpZiAobmV3X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUg PT0gZHNpLT5waHlfY2ZnLm1pcGlfZHBoeS5oc19jbGtfcmF0ZSkKKwkJcmV0dXJuOworCisJcGh5 X3JlZl9yYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+cGh5X3JlZl9jbGspOworCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIlBIWSBhdCByZWYgcmF0ZTogJWx1XG4iLCBwaHlfcmVmX3JhdGUpOwor CS8qIFNhdmUgdGhlIG5ldyBkZXNpcmVkIHBoeSBjb25maWcgKi8KKwltZW1jcHkoJmRzaS0+cGh5 X2NmZywgJm5ld19jZmcsIHNpemVvZihuZXdfY2ZnKSk7CisKKwltZW1jcHkoJmRzaS0+bW9kZSwg YWRqdXN0ZWRfbW9kZSwgc2l6ZW9mKGRzaS0+bW9kZSkpOworCWRybV9tb2RlX2RlYnVnX3ByaW50 bW9kZWxpbmUoYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdl X3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbndsX2Rz aSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOworCWludCByZXQ7CisKKwlwbV9ydW50aW1l X2dldF9zeW5jKGRzaS0+ZGV2KTsKKworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5sY2Rp Zl9jbGspIDwgMCkKKwkJcmV0dXJuOworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5jb3Jl X2NsaykgPCAwKQorCQlyZXR1cm47CisKKwkvKiBTdGVwIDEgZnJvbSBEU0kgcmVzZXQtb3V0IGlu c3RydWN0aW9ucyAqLworCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoZHNpLT5yc3RfcGNs ayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0 byBkZWFzc2VydCBQQ0xLOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIFN0ZXAg MiBmcm9tIERTSSByZXNldC1vdXQgaW5zdHJ1Y3Rpb25zICovCisJbndsX2RzaV9lbmFibGUoZHNp KTsKKworCS8qIFN0ZXAgMyBmcm9tIERTSSByZXNldC1vdXQgaW5zdHJ1Y3Rpb25zICovCisJcmV0 ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkc2ktPnJzdF9lc2MpOworCWlmIChyZXQgPCAwKSB7 CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZGVhc3NlcnQgRVNDOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRz aS0+cnN0X2J5dGUpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJGYWlsZWQgdG8gZGVhc3NlcnQgQllURTogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7 CisJaW50IHJldDsKKworCS8qIFN0ZXAgNSBmcm9tIERTSSByZXNldC1vdXQgaW5zdHJ1Y3Rpb25z ICovCisJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkc2ktPnJzdF9kcGkpOworCWlmIChy ZXQgPCAwKQorCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRlYXNzZXJ0IERQ STogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9icmlkZ2VfYXR0YWNoKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJIGVudW0gZHJtX2JyaWRnZV9hdHRhY2hfZmxh Z3MgZmxhZ3MpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdl KTsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOworCXN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsOworCWludCByZXQ7CisKKwlpZiAoZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFDSF9OT19D T05ORUNUT1IpIHsKKwkJRFJNX0VSUk9SKCJGaXggYnJpZGdlIGRyaXZlciB0byBtYWtlIGNvbm5l Y3RvciBvcHRpb25hbCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX29m X2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGRzaS0+ZGV2LT5vZl9ub2RlLCAxLCAwLCAmcGFuZWwsCisJ CQkJCSAgJnBhbmVsX2JyaWRnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChw YW5lbCkgeworCQlwYW5lbF9icmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCk7CisJ CWlmIChJU19FUlIocGFuZWxfYnJpZGdlKSkKKwkJCXJldHVybiBQVFJfRVJSKHBhbmVsX2JyaWRn ZSk7CisJfQorCWRzaS0+cGFuZWxfYnJpZGdlID0gcGFuZWxfYnJpZGdlOworCisJaWYgKCFkc2kt PnBhbmVsX2JyaWRnZSkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlyZXR1cm4gZHJtX2Jy aWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwgYnJpZGdlLAor CQkJCSBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX2RldGFjaChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQorewlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3Rv X2RzaShicmlkZ2UpOworCisJZHJtX29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5kZXYtPm9m X25vZGUsIDEsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mg bndsX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLnByZV9lbmFibGUgPSBud2xfZHNpX2JyaWRnZV9w cmVfZW5hYmxlLAorCS5lbmFibGUgICAgID0gbndsX2RzaV9icmlkZ2VfZW5hYmxlLAorCS5kaXNh YmxlICAgID0gbndsX2RzaV9icmlkZ2VfZGlzYWJsZSwKKwkubW9kZV9maXh1cCA9IG53bF9kc2lf YnJpZGdlX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ICAgPSBud2xfZHNpX2JyaWRnZV9tb2RlX3Nl dCwKKwkubW9kZV92YWxpZCA9IG53bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQsCisJLmF0dGFjaAkg ICAgPSBud2xfZHNpX2JyaWRnZV9hdHRhY2gsCisJLmRldGFjaAkgICAgPSBud2xfZHNpX2JyaWRn ZV9kZXRhY2gsCit9OworCitzdGF0aWMgaW50IG53bF9kc2lfcGFyc2VfZHQoc3RydWN0IG53bF9k c2kgKmRzaSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1f ZGV2aWNlKGRzaS0+ZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpiYXNl OworCWludCByZXQ7CisKKwlkc2ktPnBoeSA9IGRldm1fcGh5X2dldChkc2ktPmRldiwgImRwaHki KTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsK KwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwg IkNvdWxkIG5vdCBnZXQgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlj bGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJsY2RpZiIpOworCWlmIChJU19FUlIoY2xrKSkg eworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZ2V0IGxjZGlmIGNsb2NrOiAlZFxuIiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCWRzaS0+bGNkaWZfY2xrID0gY2xrOworCisJY2xrID0gZGV2bV9jbGtfZ2V0KGRz aS0+ZGV2LCAiY29yZSIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNs ayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNvcmUgY2xvY2s6 ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHNpLT5jb3JlX2Ns ayA9IGNsazsKKworCWNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInBoeV9yZWYiKTsKKwlp ZiAoSVNfRVJSKGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwaHlfcmVmIGNsb2NrOiAlZFxuIiwKKwkJCSAgICAg IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+cGh5X3JlZl9jbGsgPSBjbGs7CisKKwlj bGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJyeF9lc2MiKTsKKwlpZiAoSVNfRVJSKGNsaykp IHsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFp bGVkIHRvIGdldCByeF9lc2MgY2xvY2s6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisJZHNpLT5yeF9lc2NfY2xrID0gY2xrOworCisJY2xrID0gZGV2bV9jbGtfZ2V0 KGRzaS0+ZGV2LCAidHhfZXNjIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXJldCA9IFBUUl9F UlIoY2xrKTsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgdHhfZXNj IGNsb2NrOiAlZFxuIiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+ dHhfZXNjX2NsayA9IGNsazsKKworCWRzaS0+bXV4ID0gZGV2bV9tdXhfY29udHJvbF9nZXQoZHNp LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZHNpLT5tdXgpKSB7CisJCXJldCA9IFBUUl9FUlIo ZHNpLT5tdXgpOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBtdXg6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7 CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZSk7CisKKwlkc2ktPnJl Z21hcCA9CisJCWRldm1fcmVnbWFwX2luaXRfbW1pbyhkc2ktPmRldiwgYmFzZSwgJm53bF9kc2lf cmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkc2ktPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRS X0VSUihkc2ktPnJlZ21hcCk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8g Y3JlYXRlIE5XTCBEU0kgcmVnbWFwOiAlZFxuIiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJZHNpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChk c2ktPmlycSA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQg ZGV2aWNlIElSUTogJWRcbiIsCisJCQkgICAgICBkc2ktPmlycSk7CisJCXJldHVybiBkc2ktPmly cTsKKwl9CisKKwlkc2ktPnJzdF9wY2xrID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNp dmUoZHNpLT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkc2ktPnJzdF9wY2xrKSkgeworCQlE Uk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBwY2xrIHJlc2V0OiAlbGRcbiIs CisJCQkgICAgICBQVFJfRVJSKGRzaS0+cnN0X3BjbGspKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNp LT5yc3RfcGNsayk7CisJfQorCWRzaS0+cnN0X2J5dGUgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0 X2V4Y2x1c2l2ZShkc2ktPmRldiwgImJ5dGUiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cnN0X2J5dGUp KSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IGJ5dGUgcmVzZXQ6 ICVsZFxuIiwKKwkJCSAgICAgIFBUUl9FUlIoZHNpLT5yc3RfYnl0ZSkpOworCQlyZXR1cm4gUFRS X0VSUihkc2ktPnJzdF9ieXRlKTsKKwl9CisJZHNpLT5yc3RfZXNjID0gZGV2bV9yZXNldF9jb250 cm9sX2dldF9leGNsdXNpdmUoZHNpLT5kZXYsICJlc2MiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cnN0 X2VzYykpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgZXNjIHJl c2V0OiAlbGRcbiIsCisJCQkgICAgICBQVFJfRVJSKGRzaS0+cnN0X2VzYykpOworCQlyZXR1cm4g UFRSX0VSUihkc2ktPnJzdF9lc2MpOworCX0KKwlkc2ktPnJzdF9kcGkgPSBkZXZtX3Jlc2V0X2Nv bnRyb2xfZ2V0X2V4Y2x1c2l2ZShkc2ktPmRldiwgImRwaSIpOworCWlmIChJU19FUlIoZHNpLT5y c3RfZHBpKSkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBkcGkg cmVzZXQ6ICVsZFxuIiwKKwkJCSAgICAgIFBUUl9FUlIoZHNpLT5yc3RfZHBpKSk7CisJCXJldHVy biBQVFJfRVJSKGRzaS0+cnN0X2RwaSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG53bF9kc2lfc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJc3RydWN0IGRl dmljZV9ub2RlICpyZW1vdGU7CisJdTMyIHVzZV9kY3NzID0gMTsKKwlpbnQgcmV0OworCisJcmVt b3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+ZGV2LT5vZl9ub2RlLCAwLAorCQkJ CQkgIE5XTF9EU0lfRU5EUE9JTlRfTENESUYpOworCWlmIChyZW1vdGUpIHsKKwkJdXNlX2Rjc3Mg PSAwOworCX0gZWxzZSB7CisJCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2kt PmRldi0+b2Zfbm9kZSwgMCwKKwkJCQkJCSAgTldMX0RTSV9FTkRQT0lOVF9EQ1NTKTsKKwkJaWYg KCFyZW1vdGUpIHsKKwkJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCisJCQkJICAgICAgIk5vIHZh bGlkIGlucHV0IGVuZHBvaW50IGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJ fQorCisJRFJNX0RFVl9JTkZPKGRzaS0+ZGV2LCAiVXNpbmcgJXMgYXMgaW5wdXQgc291cmNlXG4i LAorCQkgICAgICh1c2VfZGNzcykgPyAiRENTUyIgOiAiTENESUYiKTsKKwlyZXQgPSBtdXhfY29u dHJvbF90cnlfc2VsZWN0KGRzaS0+bXV4LCB1c2VfZGNzcyk7CisJaWYgKHJldCA8IDApCisJCURS TV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gc2VsZWN0IGlucHV0OiAlZFxuIiwgcmV0 KTsKKworCW9mX25vZGVfcHV0KHJlbW90ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBud2xfZHNpX2Rlc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJaW50IHJl dDsKKworCXJldCA9IG11eF9jb250cm9sX2Rlc2VsZWN0KGRzaS0+bXV4KTsKKwlpZiAocmV0IDwg MCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBkZXNlbGVjdCBpbnB1dDog JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9icmlkZ2VfdGltaW5ncyBud2xfZHNpX3RpbWluZ3MgPSB7CisJLmlucHV0X2J1c19mbGFncyA9 IERSTV9CVVNfRkxBR19ERV9MT1csCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBud2xfZHNpX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1u d2wtZHNpIiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBud2xfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2RldmljZV9h dHRyaWJ1dGUgbndsX2RzaV9xdWlya3NfbWF0Y2hbXSA9IHsKKwl7IC5zb2NfaWQgPSAiaS5NWDhN USIsIC5yZXZpc2lvbiA9ICIyLjAiLAorCSAgLmRhdGEgPSAodm9pZCAqKUUxMTQxOF9IU19NT0RF X1FVSVJLIH0sCisJeyAvKiBzZW50aW5lbC4gKi8gfSwKK307CisKK3N0YXRpYyBpbnQgbndsX2Rz aV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwZGV2LT5kZXY7CisJY29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICph dHRyOworCXN0cnVjdCBud2xfZHNpICpkc2k7CisJaW50IHJldDsKKworCWRzaSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc2kpCisJCXJldHVy biAtRU5PTUVNOworCisJZHNpLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBud2xfZHNpX3BhcnNlX2R0 KGRzaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRldm1fcmVxdWVzdF9p cnEoZGV2LCBkc2ktPmlycSwgbndsX2RzaV9pcnFfaGFuZGxlciwgMCwKKwkJCSAgICAgICBkZXZf bmFtZShkZXYpLCBkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3QgSVJRICVkOiAlZFxuIiwgZHNpLT5pcnEsCisJCQkgICAgICByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZHNpX2hvc3Qub3BzID0gJm53bF9kc2lfaG9z dF9vcHM7CisJZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisJcmV0ID0gbWlwaV9kc2lfaG9zdF9y ZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byByZWdpc3RlciBNSVBJIGhvc3Q6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCWF0dHIgPSBzb2NfZGV2aWNlX21hdGNoKG53bF9kc2lfcXVpcmtzX21hdGNo KTsKKwlpZiAoYXR0cikKKwkJZHNpLT5xdWlya3MgPSAodWludHB0cl90KWF0dHItPmRhdGE7CisK Kwlkc2ktPmJyaWRnZS5kcml2ZXJfcHJpdmF0ZSA9IGRzaTsKKwlkc2ktPmJyaWRnZS5mdW5jcyA9 ICZud2xfZHNpX2JyaWRnZV9mdW5jczsKKwlkc2ktPmJyaWRnZS5vZl9ub2RlID0gZGV2LT5vZl9u b2RlOworCWRzaS0+YnJpZGdlLnRpbWluZ3MgPSAmbndsX2RzaV90aW1pbmdzOworCisJZGV2X3Nl dF9kcnZkYXRhKGRldiwgZHNpKTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJcmV0ID0g bndsX2RzaV9zZWxlY3RfaW5wdXQoZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQltaXBpX2RzaV9o b3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRy bV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bndsX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg bndsX2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlud2xfZHNpX2Rl c2VsZWN0X2lucHV0KGRzaSk7CisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9o b3N0KTsKKwlkcm1fYnJpZGdlX3JlbW92ZSgmZHNpLT5icmlkZ2UpOworCXBtX3J1bnRpbWVfZGlz YWJsZSgmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbndsX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG53bF9kc2lfcHJvYmUsCisJ LnJlbW92ZQkJPSBud2xfZHNpX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm9mX21hdGNoX3Rh YmxlID0gbndsX2RzaV9kdF9pZHMsCisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK21v ZHVsZV9wbGF0Zm9ybV9kcml2ZXIobndsX2RzaV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJO WFAgU2VtaWNvbmR1Y3RvciIpOworTU9EVUxFX0FVVEhPUigiUHVyaXNtIFNQQyIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJOb3J0aHdlc3QgTG9naWMgTUlQSS1EU0kgZHJpdmVyIik7CitNT0RVTEVf TElDRU5TRSgiR1BMIik7IC8qIEdQTHYyIG9yIGxhdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaCBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTI0N2E4YTExYzdj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmgKQEAg LTAsMCArMSwxNDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLwor LyoKKyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx NyBOWFAKKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDCisgKi8KKyNpZm5kZWYgX19O V0xfRFNJX0hfXworI2RlZmluZSBfX05XTF9EU0lfSF9fCisKKy8qIERTSSBIT1NUIHJlZ2lzdGVy cyAqLworI2RlZmluZSBOV0xfRFNJX0NGR19OVU1fTEFORVMJCQkweDAKKyNkZWZpbmUgTldMX0RT SV9DRkdfTk9OQ09OVElOVU9VU19DTEsJCTB4NAorI2RlZmluZSBOV0xfRFNJX0NGR19UX1BSRQkJ CTB4OAorI2RlZmluZSBOV0xfRFNJX0NGR19UX1BPU1QJCQkweGMKKyNkZWZpbmUgTldMX0RTSV9D RkdfVFhfR0FQCQkJMHgxMAorI2RlZmluZSBOV0xfRFNJX0NGR19BVVRPSU5TRVJUX0VPVFAJCTB4 MTQKKyNkZWZpbmUgTldMX0RTSV9DRkdfRVhUUkFfQ01EU19BRlRFUl9FT1RQCTB4MTgKKyNkZWZp bmUgTldMX0RTSV9DRkdfSFRYX1RPX0NPVU5UCQkweDFjCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX0xS WF9IX1RPX0NPVU5UCQkweDIwCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX0JUQV9IX1RPX0NPVU5UCQkw eDI0CisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RXQUtFVVAJCQkweDI4CisjZGVmaW5lIE5XTF9EU0lf Q0ZHX1NUQVRVU19PVVQJCQkweDJjCisjZGVmaW5lIE5XTF9EU0lfUlhfRVJST1JfU1RBVFVTCQkJ MHgzMAorCisvKiBEU0kgRFBJIHJlZ2lzdGVycyAqLworI2RlZmluZSBOV0xfRFNJX1BJWEVMX1BB WUxPQURfU0laRQkJMHgyMDAKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GSUZPX1NFTkRfTEVWRUwJ CTB4MjA0CisjZGVmaW5lIE5XTF9EU0lfSU5URVJGQUNFX0NPTE9SX0NPRElORwkJMHgyMDgKKyNk ZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVQJCQkweDIwYworI2RlZmluZSBOV0xfRFNJX1ZTWU5D X1BPTEFSSVRZCQkJMHgyMTAKKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVf TE9XCTAKKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfSElHSAlCSVQoMSkK KworI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZCQkJMHgyMTQKKyNkZWZpbmUgTldMX0RT SV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XCTAKKyNkZWZpbmUgTldMX0RTSV9IU1lOQ19QT0xB UklUWV9BQ1RJVkVfSElHSAlCSVQoMSkKKworI2RlZmluZSBOV0xfRFNJX1ZJREVPX01PREUJCQkw eDIxOAorI2RlZmluZSBOV0xfRFNJX0hGUAkJCQkweDIxYworI2RlZmluZSBOV0xfRFNJX0hCUAkJ CQkweDIyMAorI2RlZmluZSBOV0xfRFNJX0hTQQkJCQkweDIyNAorI2RlZmluZSBOV0xfRFNJX0VO QUJMRV9NVUxUX1BLVFMJCTB4MjI4CisjZGVmaW5lIE5XTF9EU0lfVkJQCQkJCTB4MjJjCisjZGVm aW5lIE5XTF9EU0lfVkZQCQkJCTB4MjMwCisjZGVmaW5lIE5XTF9EU0lfQkxMUF9NT0RFCQkJMHgy MzQKKyNkZWZpbmUgTldMX0RTSV9VU0VfTlVMTF9QS1RfQkxMUAkJMHgyMzgKKyNkZWZpbmUgTldM X0RTSV9WQUNUSVZFCQkJCTB4MjNjCisjZGVmaW5lIE5XTF9EU0lfVkMJCQkJMHgyNDAKKworLyog RFNJIEFQQiBQS1QgY29udHJvbCAqLworI2RlZmluZSBOV0xfRFNJX1RYX1BBWUxPQUQJCQkweDI4 MAorI2RlZmluZSBOV0xfRFNJX1BLVF9DT05UUk9MCQkJMHgyODQKKyNkZWZpbmUgTldMX0RTSV9T RU5EX1BBQ0tFVAkJCTB4Mjg4CisjZGVmaW5lIE5XTF9EU0lfUEtUX1NUQVRVUwkJCTB4MjhjCisj ZGVmaW5lIE5XTF9EU0lfUEtUX0ZJRk9fV1JfTEVWRUwJCTB4MjkwCisjZGVmaW5lIE5XTF9EU0lf UEtUX0ZJRk9fUkRfTEVWRUwJCTB4Mjk0CisjZGVmaW5lIE5XTF9EU0lfUlhfUEFZTE9BRAkJCTB4 Mjk4CisjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hFQURFUgkJCTB4MjljCisKKy8qIERTSSBJUlEg aGFuZGxpbmcgKi8KKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTCQkJMHgyYTAKKyNkZWZpbmUg TldMX0RTSV9TTV9OT1RfSURMRQkJCUJJVCgwKQorI2RlZmluZSBOV0xfRFNJX1RYX1BLVF9ET05F CQkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfRFBIWV9ESVJFQ1RJT04JCQlCSVQoMikKKyNkZWZp bmUgTldMX0RTSV9UWF9GSUZPX09WRkxXCQkJQklUKDMpCisjZGVmaW5lIE5XTF9EU0lfVFhfRklG T19VREZMVwkJCUJJVCg0KQorI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZGTFcJCQlCSVQoNSkK KyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX1VERkxXCQkJQklUKDYpCisjZGVmaW5lIE5XTF9EU0lf UlhfUEtUX0hEUl9SQ1ZECQkJQklUKDcpCisjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURf REFUQV9SQ1ZECUJJVCg4KQorI2RlZmluZSBOV0xfRFNJX0JUQV9USU1FT1VUCQkJQklUKDI5KQor I2RlZmluZSBOV0xfRFNJX0xQX1JYX1RJTUVPVVQJCQlCSVQoMzApCisjZGVmaW5lIE5XTF9EU0lf SFNfVFhfVElNRU9VVAkJCUJJVCgzMSkKKworI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVMyCQkJ MHgyYTQKKyNkZWZpbmUgTldMX0RTSV9TSU5HTEVfQklUX0VDQ19FUlIJCUJJVCgwKQorI2RlZmlu ZSBOV0xfRFNJX01VTFRJX0JJVF9FQ0NfRVJSCQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9DUkNf RVJSCQkJCUJJVCgyKQorCisjZGVmaW5lIE5XTF9EU0lfSVJRX01BU0sJCQkweDJhOAorI2RlZmlu ZSBOV0xfRFNJX1NNX05PVF9JRExFX01BU0sJCUJJVCgwKQorI2RlZmluZSBOV0xfRFNJX1RYX1BL VF9ET05FX01BU0sJCUJJVCgxKQorI2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OX01BU0sJ CUJJVCgyKQorI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdfTUFTSwkJQklUKDMpCisjZGVm aW5lIE5XTF9EU0lfVFhfRklGT19VREZMV19NQVNLCQlCSVQoNCkKKyNkZWZpbmUgTldMX0RTSV9S WF9GSUZPX09WRkxXX01BU0sJCUJJVCg1KQorI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFdf TUFTSwkJQklUKDYpCisjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEX01BU0sJCUJJVCg3 KQorI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRF9NQVNLCUJJVCg4KQor I2RlZmluZSBOV0xfRFNJX0JUQV9USU1FT1VUX01BU0sJCUJJVCgyOSkKKyNkZWZpbmUgTldMX0RT SV9MUF9SWF9USU1FT1VUX01BU0sJCUJJVCgzMCkKKyNkZWZpbmUgTldMX0RTSV9IU19UWF9USU1F T1VUX01BU0sJCUJJVCgzMSkKKworI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLMgkJCTB4MmFjCisj ZGVmaW5lIE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0NfRVJSX01BU0sJCUJJVCgwKQorI2RlZmluZSBO V0xfRFNJX01VTFRJX0JJVF9FQ0NfRVJSX01BU0sJCUJJVCgxKQorI2RlZmluZSBOV0xfRFNJX0NS Q19FUlJfTUFTSwkJCUJJVCgyKQorCisvKgorICogUEtUX0NPTlRST0wgZm9ybWF0OgorICogWzE1 OiAwXSAtIHdvcmQgY291bnQKKyAqIFsxNzoxNl0gLSB2aXJ0dWFsIGNoYW5uZWwKKyAqIFsyMzox OF0gLSBkYXRhIHR5cGUKKyAqIFsyNF0JICAgLSBMUCBvciBIUyBzZWxlY3QgKDAgLSBMUCwgMSAt IEhTKQorICogWzI1XQkgICAtIHBlcmZvcm0gQlRBIGFmdGVyIHBhY2tldCBpcyBzZW50CisgKiBb MjZdCSAgIC0gcGVyZm9ybSBCVEEgb25seSwgbm8gcGFja2V0IHR4CisgKi8KKyNkZWZpbmUgTldM X0RTSV9XQyh4KQkJRklFTERfUFJFUChHRU5NQVNLKDE1LCAwKSwgKHgpKQorI2RlZmluZSBOV0xf RFNJX1RYX1ZDKHgpCUZJRUxEX1BSRVAoR0VOTUFTSygxNywgMTYpLCAoeCkpCisjZGVmaW5lIE5X TF9EU0lfVFhfRFQoeCkJRklFTERfUFJFUChHRU5NQVNLKDIzLCAxOCksICh4KSkKKyNkZWZpbmUg TldMX0RTSV9IU19TRUwoeCkJRklFTERfUFJFUChHRU5NQVNLKDI0LCAyNCksICh4KSkKKyNkZWZp bmUgTldMX0RTSV9CVEFfVFgoeCkJRklFTERfUFJFUChHRU5NQVNLKDI1LCAyNSksICh4KSkKKyNk ZWZpbmUgTldMX0RTSV9CVEFfTk9fVFgoeCkJRklFTERfUFJFUChHRU5NQVNLKDI2LCAyNiksICh4 KSkKKworLyoKKyAqIFJYX1BLVF9IRUFERVIgZm9ybWF0OgorICogWzE1OiAwXSAtIHdvcmQgY291 bnQKKyAqIFsyMToxNl0gLSBkYXRhIHR5cGUKKyAqIFsyMzoyMl0gLSB2aXJ0dWFsIGNoYW5uZWwK KyAqLworI2RlZmluZSBOV0xfRFNJX1JYX0RUKHgpCUZJRUxEX0dFVChHRU5NQVNLKDIxLCAxNiks ICh4KSkKKyNkZWZpbmUgTldMX0RTSV9SWF9WQyh4KQlGSUVMRF9HRVQoR0VOTUFTSygyMywgMjIp LCAoeCkpCisKKy8qIERTSSBWaWRlbyBtb2RlICovCisjZGVmaW5lIE5XTF9EU0lfVk1fQlVSU1Rf TU9ERV9XSVRIX1NZTkNfUFVMU0VTCQkwCisjZGVmaW5lIE5XTF9EU0lfVk1fTk9OX0JVUlNUX01P REVfV0lUSF9TWU5DX0VWRU5UUwlCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9WTV9CVVJTVF9NT0RF CQkJCUJJVCgxKQorCisvKiAqIERQSSBjb2xvciBjb2RpbmcgKi8KKyNkZWZpbmUgTldMX0RTSV9E UElfMTZfQklUXzU2NV9QQUNLRUQJMAorI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X0FM SUdORUQJMQorI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1NISUZURUQJMgorI2RlZmlu ZSBOV0xfRFNJX0RQSV8xOF9CSVRfUEFDS0VECTMKKyNkZWZpbmUgTldMX0RTSV9EUElfMThfQklU X0FMSUdORUQJNAorI2RlZmluZSBOV0xfRFNJX0RQSV8yNF9CSVQJCTUKKworLyogKiBEUEkgUGl4 ZWwgZm9ybWF0ICovCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzE2ICAwCisjZGVmaW5l IE5XTF9EU0lfUElYRUxfRk9STUFUXzE4ICBCSVQoMCkKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9G T1JNQVRfMThMIEJJVCgxKQorI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNCAgKEJJVCgw KSB8IEJJVCgxKSkKKworI2VuZGlmIC8qIF9fTldMX0RTSV9IX18gKi8KLS0gCjIuMjMuMAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=