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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,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 39E4DC4332D for ; Fri, 20 Mar 2020 18:49:28 +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 187E120777 for ; Fri, 20 Mar 2020 18:49:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 187E120777 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 96E236EB48; Fri, 20 Mar 2020 18:49:26 +0000 (UTC) Received: from honk.sigxcpu.org (honk.sigxcpu.org [24.134.29.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C92F6EB48 for ; Fri, 20 Mar 2020 18:49:24 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 09031FB02; Fri, 20 Mar 2020 19:49:23 +0100 (CET) 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 jbsulEGqk_ic; Fri, 20 Mar 2020 19:49:14 +0100 (CET) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id ED2DF412BF; Fri, 20 Mar 2020 19:49:10 +0100 (CET) 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 v10 2/2] drm/bridge: Add NWL MIPI DSI host controller support Date: Fri, 20 Mar 2020 19:49:10 +0100 Message-Id: <22f34fb7cf7ee4262cf63372aee90bc8e5ae3f35.1584730033.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+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnICAgfCAgIDE2ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgIHwg ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYyB8IDEyMTggKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaCB8 ICAxNDQgKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCmluZGV4IGFhZWQyMzQ3YWNlOS4uNmVjOTQ1ZjgzN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCkBAIC01OCw2ICs1OCwyMiBAQCBjb25maWcgRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9C ODUwVjNfRlcKIAkgIHRvIERQKysuIFRoaXMgaXMgdXNlZCB3aXRoIHRoZSBpLk1YNiBpbXgtbGRi CiAJICBkcml2ZXIuIFlvdSBhcmUgbGlrZWx5IHRvIHNheSBOIGhlcmUuCiAKK2NvbmZpZyBEUk1f TldMX01JUElfRFNJCisJdHJpc3RhdGUgIk5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBIb3N0IGNv bnRyb2xsZXIiCisJZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKKwlkZXBl bmRzIG9uIE9GICYmIEhBU19JT01FTQorCXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBE Uk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMX0JSSURHRQorCXNlbGVjdCBHRU5FUklDX1BI WV9NSVBJX0RQSFkKKwlzZWxlY3QgTUZEX1NZU0NPTgorCXNlbGVjdCBNVUxUSVBMRVhFUgorCXNl bGVjdCBSRUdNQVBfTU1JTworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgTm9ydGh3ZXN0IExv Z2ljIE1JUEkgRFNJIEhvc3QgY29udHJvbGxlciBhcworCSAgZm9yIGV4YW1wbGUgZm91bmQgb24g TlhQJ3MgaS5NWDggUHJvY2Vzc29ycy4KKwogY29uZmlnIERSTV9OWFBfUFROMzQ2MAogCXRyaXN0 YXRlICJOWFAgUFROMzQ2MCBEUC9MVkRTIGJyaWRnZSIKIAlkZXBlbmRzIG9uIE9GCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9NYWtlZmlsZQppbmRleCA2ZmIwNjJiNWIwZjAuLmIwNGFjMmRmYTIyYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIG9iai0kKENPTkZJR19EUk1fSTJDX0FE Vjc1MTEpICs9IGFkdjc1MTEvCiBvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGkt c242NWRzaTg2Lm8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0MTAubwog b2JqLSQoQ09ORklHX0RSTV9USV9UUEQxMlMwMTUpICs9IHRpLXRwZDEyczAxNS5vCitvYmotJChD T05GSUdfRFJNX05XTF9NSVBJX0RTSSkgKz0gbndsLWRzaS5vCiAKIG9iai15ICs9IGFuYWxvZ2l4 Lwogb2JqLXkgKz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTJkMWM1NTQ4ZTJkCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmMKQEAgLTAsMCArMSwxMjE4IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBpLk1YOCBOV0wg TUlQSSBEU0kgaG9zdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCisgKiBD b3B5cmlnaHQgKEMpIDIwMjAgUHVyaXNtIFNQQworICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRm aWVsZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgor I2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXgvY29uc3VtZXIu aD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgor I2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3RpbWU2NC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlf ZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4KKworI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorI2luY2x1ZGUgPHZp ZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAibndsLWRzaS5oIgorCisjZGVmaW5lIERSVl9O QU1FICJud2wtZHNpIgorCisvKiBpLk1YOCBOV0wgcXVpcmtzICovCisvKiBpLk1YOE1RIGVycmF0 YSBFMTE0MTggKi8KKyNkZWZpbmUgRTExNDE4X0hTX01PREVfUVVJUksJQklUKDApCisKKyNkZWZp bmUgTldMX0RTSV9NSVBJX0ZJRk9fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDUwMCkKKworZW51 bSB0cmFuc2Zlcl9kaXJlY3Rpb24geworCURTSV9QQUNLRVRfU0VORCwKKwlEU0lfUEFDS0VUX1JF Q0VJVkUsCit9OworCisjZGVmaW5lIE5XTF9EU0lfRU5EUE9JTlRfTENESUYgMAorI2RlZmluZSBO V0xfRFNJX0VORFBPSU5UX0RDU1MgMQorCitzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcg eworCWNvbnN0IGNoYXIgKmlkOworCXN0cnVjdCBjbGsgKmNsazsKKwlib29sIHByZXNlbnQ7Cit9 OworCitzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciB7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX21z ZyAqbXNnOworCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgcGFja2V0OworCXN0cnVjdCBjb21wbGV0 aW9uIGNvbXBsZXRlZDsKKworCWludCBzdGF0dXM7IC8qIHN0YXR1cyBvZiB0cmFuc21pc3Npb24g Ki8KKwllbnVtIHRyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJYm9vbCBuZWVkX2J0YTsK Kwl1OCBjbWQ7CisJdTE2IHJ4X3dvcmRfY291bnQ7CisJc2l6ZV90IHR4X2xlbjsgLyogaW4gYnl0 ZXMgKi8KKwlzaXplX3QgcnhfbGVuOyAvKiBpbiBieXRlcyAqLworfTsKKworc3RydWN0IG53bF9k c2kgeworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBk c2lfaG9zdDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBo eV9jZmc7CisJdW5zaWduZWQgaW50IHF1aXJrczsKKworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsK KwlpbnQgaXJxOworCS8qCisJICogVGhlIERTSSBob3N0IGNvbnRyb2xsZXIgbmVlZHMgdGhpcyBy ZXNldCBzZXF1ZW5jZSBhY2NvcmRpbmcgdG8gTldMOgorCSAqIDEuIERlYXNzZXJ0IHBjbGsgcmVz ZXQgdG8gZ2V0IGFjY2VzcyB0byBEU0kgcmVncworCSAqIDIuIENvbmZpZ3VyZSBEU0kgSG9zdCBh bmQgRFBIWSBhbmQgZW5hYmxlIERQSFkKKwkgKiAzLiBEZWFzc2VydCBFU0MgYW5kIEJZVEUgcmVz ZXRzIHRvIGFsbG93IGhvc3QgVFggb3BlcmF0aW9ucykKKwkgKiA0LiBTZW5kIERTSSBjbWRzIHRv IGNvbmZpZ3VyZSBwZXJpcGhlcmFsIChoYW5kbGVkIGJ5IHBhbmVsIGRydikKKwkgKiA1LiBEZWFz c2VydCBEUEkgcmVzZXQgc28gRFBJIHJlY2VpdmVzIHBpeGVscyBhbmQgc3RhcnRzIHNlbmRpbmcK KwkgKiAgICBEU0kgZGF0YQorCSAqCisJICogVE9ETzogU2luY2UgcGFuZWxfYnJpZGdlcyBkbyB0 aGVpciBEU0kgc2V0dXAgaW4gZW5hYmxlIHdlCisJICogY3VycmVudGx5IGhhdmUgNC4gYW5kIDUu IHN3YXBwZWQuCisJICovCisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdF9ieXRlOworCXN0cnVj dCByZXNldF9jb250cm9sICpyc3RfZXNjOworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RfZHBp OworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RfcGNsazsKKwlzdHJ1Y3QgbXV4X2NvbnRyb2wg Km11eDsKKworCS8qIERTSSBjbG9ja3MgKi8KKwlzdHJ1Y3QgY2xrICpwaHlfcmVmX2NsazsKKwlz dHJ1Y3QgY2xrICpyeF9lc2NfY2xrOworCXN0cnVjdCBjbGsgKnR4X2VzY19jbGs7CisJc3RydWN0 IGNsayAqY29yZV9jbGs7CisJLyoKKwkgKiBoYXJkd2FyZSBidWc6IHRoZSBpLk1YOE1RIG5lZWRz IHRoaXMgY2xvY2sgb24gZHVyaW5nIHJlc2V0CisJICogZXZlbiB3aGVuIG5vdCB1c2luZyBMQ0RJ Ri4KKwkgKi8KKwlzdHJ1Y3QgY2xrICpsY2RpZl9jbGs7CisKKwkvKiBkc2kgbGFuZXMgKi8KKwl1 MzIgbGFuZXM7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlIG1vZGU7CisJdW5zaWduZWQgbG9uZyBkc2lfbW9kZV9mbGFnczsKKwlp bnQgZXJyb3I7CisKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlcjsKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7CisJ LnJlZ19iaXRzID0gMTYsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5t YXhfcmVnaXN0ZXIgPSBOV0xfRFNJX0lSUV9NQVNLMiwKKwkubmFtZSA9IERSVl9OQU1FLAorfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgbndsX2RzaSAqYnJpZGdlX3RvX2RzaShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3Qg bndsX2RzaSwgYnJpZGdlKTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2NsZWFyX2Vycm9yKHN0 cnVjdCBud2xfZHNpICpkc2kpCit7CisJaW50IHJldCA9IGRzaS0+ZXJyb3I7CisKKwlkc2ktPmVy cm9yID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX3dyaXRlKHN0 cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCit7CisJaW50IHJl dDsKKworCWlmIChkc2ktPmVycm9yKQorCQlyZXR1cm47CisKKwlyZXQgPSByZWdtYXBfd3JpdGUo ZHNpLT5yZWdtYXAsIHJlZywgdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LAorCQkJICAgICAgIkZhaWxlZCB0byB3cml0ZSBOV0wgRFNJIHJlZyAweCV4OiAl ZFxuIiwgcmVnLAorCQkJICAgICAgcmV0KTsKKwkJZHNpLT5lcnJvciA9IHJldDsKKwl9Cit9CisK K3N0YXRpYyB1MzIgbndsX2RzaV9yZWFkKHN0cnVjdCBud2xfZHNpICpkc2ksIHUzMiByZWcpCit7 CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJaWYgKGRzaS0+ZXJyb3IpCisJCXJl dHVybiAwOworCisJcmV0ID0gcmVnbWFwX3JlYWQoZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7CisJ aWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byByZWFk IE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLAorCQkJICAgICAgcmVnLCByZXQpOworCQlkc2ktPmVy cm9yID0gcmV0OworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfZ2V0 X2RwaV9waXhlbF9mb3JtYXQoZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0KQorewor CXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlyZXR1cm4g TldMX0RTSV9QSVhFTF9GT1JNQVRfMTY7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQly ZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMThMOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2 Nl9QQUNLRUQ6CisJCXJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xODsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I4ODg6CisJCXJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNDsKKwlkZWZh dWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBwczJiYyAtIFBpY29zZWNv bmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzCisgKi8KK3N0YXRpYyB1MzIgcHMyYmMoc3RydWN0IG53 bF9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyBsb25nIHBzKQoreworCXUzMiBicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsKKworCXJldHVybiBESVY2NF9VNjRf Uk9VTkRfVVAocHMgKiBkc2ktPm1vZGUuY2xvY2sgKiBicHAsCisJCQkJICBkc2ktPmxhbmVzICog OCAqIE5TRUNfUEVSX1NFQyk7Cit9CisKKy8qCisgKiB1aTJiYyAtIFVJIHRpbWUgcGVyaW9kcyB0 byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgdTMyIHVpMmJjKHN0cnVjdCBud2xfZHNp ICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyB1aSkKK3sKKwl1MzIgYnBwID0gbWlwaV9kc2lfcGl4 ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisKKwlyZXR1cm4gRElWNjRfVTY0X1JPVU5E X1VQKHVpICogZHNpLT5sYW5lcywKKwkJCQkgIGRzaS0+bW9kZS5jbG9jayAqIDEwMDAgKiBicHAp OworfQorCisvKgorICogdXMyYmMgLSBtaWNybyBzZWNvbmRzIHRvIGxwIGNsb2NrIGN5Y2xlcwor ICovCitzdGF0aWMgdTMyIHVzMmxwKHUzMiBscF9jbGtfcmF0ZSwgdW5zaWduZWQgbG9uZyB1cykK K3sKKwlyZXR1cm4gRElWX1JPVU5EX1VQKHVzICogbHBfY2xrX3JhdGUsIFVTRUNfUEVSX1NFQyk7 Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9jb25maWdfaG9zdChzdHJ1Y3QgbndsX2RzaSAqZHNp KQoreworCXUzMiBjeWNsZXM7CisJc3RydWN0IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHkg KmNmZyA9ICZkc2ktPnBoeV9jZmcubWlwaV9kcGh5OworCisJaWYgKGRzaS0+bGFuZXMgPCAxIHx8 IGRzaS0+bGFuZXMgPiA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAiRFNJIExhbmVzICVkXG4iLCBkc2ktPmxhbmVzKTsKKwlud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9DRkdfTlVNX0xBTkVTLCBkc2ktPmxhbmVzIC0gMSk7CisKKwlpZiAo ZHNpLT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTKSB7CisJ CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMSywgMHgwMSk7 CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19BVVRPSU5TRVJUX0VPVFAsIDB4MDEp OworCX0gZWxzZSB7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19OT05DT05USU5V T1VTX0NMSywgMHgwMCk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19BVVRPSU5T RVJUX0VPVFAsIDB4MDApOworCX0KKworCS8qIHZhbHVlcyBpbiBieXRlIGNsb2NrIGN5Y2xlcyAq LworCWN5Y2xlcyA9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsKKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgImNmZ190X3ByZTogMHgleFxuIiwgY3ljbGVzKTsKKwlud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9DRkdfVF9QUkUsIGN5Y2xlcyk7CisJY3ljbGVzID0gcHMyYmMoZHNp LCBjZmctPmxweCArIGNmZy0+Y2xrX3ByZXBhcmUgKyBjZmctPmNsa196ZXJvKTsKKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXAgKHByZSk6IDB4JXhcbiIsIGN5Y2xl cyk7CisJY3ljbGVzICs9IHVpMmJjKGRzaSwgY2ZnLT5jbGtfcHJlKTsKKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkc2ktPmRldiwgImNmZ190X3Bvc3Q6IDB4JXhcbiIsIGN5Y2xlcyk7CisJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUE9TVCwgY3ljbGVzKTsKKwljeWNsZXMgPSBwczJi Yyhkc2ksIGNmZy0+aHNfZXhpdCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJj ZmdfdHhfZ2FwOiAweCV4XG4iLCBjeWNsZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X0NGR19UWF9HQVAsIGN5Y2xlcyk7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdf RVhUUkFfQ01EU19BRlRFUl9FT1RQLCAweDAxKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9DRkdfSFRYX1RPX0NPVU5ULCAweDAwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9D RkdfTFJYX0hfVE9fQ09VTlQsIDB4MDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NG R19CVEFfSF9UT19DT1VOVCwgMHgwMCk7CisJLyogSW4gTFAgY2xvY2sgY3ljbGVzICovCisJY3lj bGVzID0gdXMybHAoY2ZnLT5scF9jbGtfcmF0ZSwgY2ZnLT53YWtldXApOworCURSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R3YWtldXA6IDB4JXhcbiIsIGN5Y2xlcyk7CisJbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RXQUtFVVAsIGN5Y2xlcyk7CisKKwlyZXR1cm4g bndsX2RzaV9jbGVhcl9lcnJvcihkc2kpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfY29uZmln X2RwaShzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXUzMiBtb2RlOworCWludCBjb2xvcl9mb3Jt YXQ7CisJYm9vbCBidXJzdF9tb2RlOworCWludCBoZnJvbnRfcG9yY2gsIGhiYWNrX3BvcmNoLCB2 ZnJvbnRfcG9yY2gsIHZiYWNrX3BvcmNoOworCWludCBoc3luY19sZW4sIHZzeW5jX2xlbjsKKwor CWhmcm9udF9wb3JjaCA9IGRzaS0+bW9kZS5oc3luY19zdGFydCAtIGRzaS0+bW9kZS5oZGlzcGxh eTsKKwloc3luY19sZW4gPSBkc2ktPm1vZGUuaHN5bmNfZW5kIC0gZHNpLT5tb2RlLmhzeW5jX3N0 YXJ0OworCWhiYWNrX3BvcmNoID0gZHNpLT5tb2RlLmh0b3RhbCAtIGRzaS0+bW9kZS5oc3luY19l bmQ7CisKKwl2ZnJvbnRfcG9yY2ggPSBkc2ktPm1vZGUudnN5bmNfc3RhcnQgLSBkc2ktPm1vZGUu dmRpc3BsYXk7CisJdnN5bmNfbGVuID0gZHNpLT5tb2RlLnZzeW5jX2VuZCAtIGRzaS0+bW9kZS52 c3luY19zdGFydDsKKwl2YmFja19wb3JjaCA9IGRzaS0+bW9kZS52dG90YWwgLSBkc2ktPm1vZGUu dnN5bmNfZW5kOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoZnJvbnRfcG9y Y2ggPSAlZFxuIiwgaGZyb250X3BvcmNoKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRl diwgImhiYWNrX3BvcmNoID0gJWRcbiIsIGhiYWNrX3BvcmNoKTsKKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4iLCBoc3luY19sZW4pOworCURSTV9ERVZf REVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGRpc3BsYXkgPSAlZFxuIiwgZHNpLT5tb2RlLmhkaXNw bGF5KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZmcm9udF9wb3JjaCA9ICVk XG4iLCB2ZnJvbnRfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJh Y2tfcG9yY2ggPSAlZFxuIiwgdmJhY2tfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRz aS0+ZGV2LCAidnN5bmNfbGVuID0gJWRcbiIsIHZzeW5jX2xlbik7CisJRFJNX0RFVl9ERUJVR19E UklWRVIoZHNpLT5kZXYsICJ2YWN0aXZlID0gJWRcbiIsIGRzaS0+bW9kZS52ZGlzcGxheSk7CisJ RFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjbG9jayA9ICVkIGtIelxuIiwgZHNpLT5t b2RlLmNsb2NrKTsKKworCWNvbG9yX2Zvcm1hdCA9IG53bF9kc2lfZ2V0X2RwaV9waXhlbF9mb3Jt YXQoZHNpLT5mb3JtYXQpOworCWlmIChjb2xvcl9mb3JtYXQgPCAwKSB7CisJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZvcm1hdCAweCV4XG4iLAorCQkJICAgICAgZHNp LT5mb3JtYXQpOworCQlyZXR1cm4gY29sb3JfZm9ybWF0OworCX0KKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgInBpeGVsIGZtdCA9ICVkXG4iLCBkc2ktPmZvcm1hdCk7CisKKwlud2xf ZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HLCBOV0xfRFNJX0RQ SV8yNF9CSVQpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZPUk1BVCwgY29s b3JfZm9ybWF0KTsKKwkvKgorCSAqIEFkanVzdGluZyBpbnB1dCBwb2xhcml0eSBiYXNlZCBvbiB0 aGUgdmlkZW8gbW9kZSByZXN1bHRzIGluCisJICogYSBibGFjayBzY3JlZW4gc28gYWx3YXlzIHBp Y2sgYWN0aXZlIGxvdzoKKwkgKi8KKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WU1lOQ19Q T0xBUklUWSwKKwkJICAgICAgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsKKwlu d2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU1lOQ19QT0xBUklUWSwKKwkJICAgICAgTldMX0RT SV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsKKworCWJ1cnN0X21vZGUgPSAoZHNpLT5kc2lf bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1QpICYmCisJCSAgICAgIShkc2kt PmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKTsKKworCWlm IChidXJzdF9tb2RlKSB7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZJREVPX01PREUs IE5XTF9EU0lfVk1fQlVSU1RfTU9ERSk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJ WEVMX0ZJRk9fU0VORF9MRVZFTCwgMjU2KTsKKwl9IGVsc2UgeworCQltb2RlID0gKChkc2ktPmRz aV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSA/CisJCQkJTldM X0RTSV9WTV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMgOgorCQkJCU5XTF9EU0lfVk1fTk9O X0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UUyk7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xf RFNJX1ZJREVPX01PREUsIG1vZGUpOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhF TF9GSUZPX1NFTkRfTEVWRUwsCisJCQkgICAgICBkc2ktPm1vZGUuaGRpc3BsYXkpOworCX0KKwor CW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hGUCwgaGZyb250X3BvcmNoKTsKKwlud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9IQlAsIGhiYWNrX3BvcmNoKTsKKwlud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9IU0EsIGhzeW5jX2xlbik7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RT SV9FTkFCTEVfTVVMVF9QS1RTLCAweDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0JM TFBfTU9ERSwgMHgxKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9VU0VfTlVMTF9QS1Rf QkxMUCwgMHgwKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQywgMHgwKTsKKworCW53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX1BBWUxPQURfU0laRSwgZHNpLT5tb2RlLmhk aXNwbGF5KTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQUNUSVZFLCBkc2ktPm1vZGUu dmRpc3BsYXkgLSAxKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQlAsIHZiYWNrX3Bv cmNoKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WRlAsIHZmcm9udF9wb3JjaCk7CisK KwlyZXR1cm4gbndsX2RzaV9jbGVhcl9lcnJvcihkc2kpOworfQorCitzdGF0aWMgaW50IG53bF9k c2lfaW5pdF9pbnRlcnJ1cHRzKHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJdTMyIGlycV9lbmFi bGU7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgMHhmZmZmZmZmZik7 CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0syLCAweDcpOworCisJaXJxX2Vu YWJsZSA9IH4odTMyKShOV0xfRFNJX1RYX1BLVF9ET05FX01BU0sgfAorCQkJICAgIE5XTF9EU0lf UlhfUEtUX0hEUl9SQ1ZEX01BU0sgfAorCQkJICAgIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNL IHwKKwkJCSAgICBOV0xfRFNJX0hTX1RYX1RJTUVPVVRfTUFTSyk7CisKKwlud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9JUlFfTUFTSywgaXJxX2VuYWJsZSk7CisKKwlyZXR1cm4gbndsX2RzaV9j bGVhcl9lcnJvcihkc2kpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfaG9zdF9hdHRhY2goc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0LAorCQkJICAgICAgIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGRz aV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGRzaS0+ZGV2OworCisJRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1LCBmb3JtYXQ9MHgleCBm bGFncz0weCVseFxuIiwgZGV2aWNlLT5sYW5lcywKKwkJICAgICBkZXZpY2UtPmZvcm1hdCwgZGV2 aWNlLT5tb2RlX2ZsYWdzKTsKKworCWlmIChkZXZpY2UtPmxhbmVzIDwgMSB8fCBkZXZpY2UtPmxh bmVzID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkc2ktPmxhbmVzID0gZGV2aWNlLT5sYW5l czsKKwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+ZHNpX21vZGVfZmxhZ3Mg PSBkZXZpY2UtPm1vZGVfZmxhZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbnds X2RzaV9yZWFkX3BhY2tldChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4 ZmVyID0gZHNpLT54ZmVyOworCWludCBlcnI7CisJdTggKnBheWxvYWQgPSB4ZmVyLT5tc2ctPnJ4 X2J1ZjsKKwl1MzIgdmFsOworCXUxNiB3b3JkX2NvdW50OworCXU4IGNoYW5uZWw7CisJdTggZGF0 YV90eXBlOworCisJeGZlci0+c3RhdHVzID0gMDsKKworCWlmICh4ZmVyLT5yeF93b3JkX2NvdW50 ID09IDApIHsKKwkJaWYgKCEoc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQpKQorCQkJ cmV0dXJuIGZhbHNlOworCQkvKiBHZXQgdGhlIFJYIGhlYWRlciBhbmQgcGFyc2UgaXQgKi8KKwkJ dmFsID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QS1RfSEVBREVSKTsKKwkJZXJyID0g bndsX2RzaV9jbGVhcl9lcnJvcihkc2kpOworCQlpZiAoZXJyKQorCQkJeGZlci0+c3RhdHVzID0g ZXJyOworCQl3b3JkX2NvdW50ID0gTldMX0RTSV9XQyh2YWwpOworCQljaGFubmVsID0gTldMX0RT SV9SWF9WQyh2YWwpOworCQlkYXRhX3R5cGUgPSBOV0xfRFNJX1JYX0RUKHZhbCk7CisKKwkJaWYg KGNoYW5uZWwgIT0geGZlci0+bXNnLT5jaGFubmVsKSB7CisJCQlEUk1fREVWX0VSUk9SKGRldiwK KwkJCQkgICAgICAiWyUwMlhdIENoYW5uZWwgbWlzbWF0Y2ggKCV1ICE9ICV1KVxuIiwKKwkJCQkg ICAgICB4ZmVyLT5jbWQsIGNoYW5uZWwsIHhmZXItPm1zZy0+Y2hhbm5lbCk7CisJCQl4ZmVyLT5z dGF0dXMgPSAtRUlOVkFMOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlzd2l0Y2ggKGRhdGFf dHlwZSkgeworCQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8y QllURToKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFE X1JFU1BPTlNFXzJCWVRFOgorCQkJaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMSkgeworCQkJCS8q IHJlYWQgc2Vjb25kIGJ5dGUgKi8KKwkJCQlwYXlsb2FkWzFdID0gd29yZF9jb3VudCA+PiA4Owor CQkJCSsreGZlci0+cnhfbGVuOworCQkJfQorCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgTUlQSV9E U0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOgorCQkJZmFsbHRocm91Z2g7 CisJCWNhc2UgTUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEU6CisJCQlp ZiAoeGZlci0+bXNnLT5yeF9sZW4gPiAwKSB7CisJCQkJLyogcmVhZCBmaXJzdCBieXRlICovCisJ CQkJcGF5bG9hZFswXSA9IHdvcmRfY291bnQgJiAweGZmOworCQkJCSsreGZlci0+cnhfbGVuOwor CQkJfQorCQkJeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVuOworCQkJcmV0dXJuIHRydWU7CisJ CWNhc2UgTUlQSV9EU0lfUlhfQUNLTk9XTEVER0VfQU5EX0VSUk9SX1JFUE9SVDoKKwkJCXdvcmRf Y291bnQgJj0gMHhmZjsKKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiWyUwMlhdIERTSSBlcnJvciBy ZXBvcnQ6IDB4JTAyeFxuIiwKKwkJCQkgICAgICB4ZmVyLT5jbWQsIHdvcmRfY291bnQpOworCQkJ eGZlci0+c3RhdHVzID0gLUVQUk9UTzsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKHdv cmRfY291bnQgPiB4ZmVyLT5tc2ctPnJ4X2xlbikgeworCQkJRFJNX0RFVl9FUlJPUigKKwkJCQlk ZXYsCisJCQkJIlslMDJYXSBSZWNlaXZlIGJ1ZmZlciB0b28gc21hbGw6ICV6dSAoPCAldSlcbiIs CisJCQkJeGZlci0+Y21kLCB4ZmVyLT5tc2ctPnJ4X2xlbiwgd29yZF9jb3VudCk7CisJCQl4ZmVy LT5zdGF0dXMgPSAtRUlOVkFMOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQl4ZmVyLT5yeF93 b3JkX2NvdW50ID0gd29yZF9jb3VudDsKKwl9IGVsc2UgeworCQkvKiBTZXQgd29yZF9jb3VudCBm cm9tIHByZXZpb3VzIGhlYWRlciByZWFkICovCisJCXdvcmRfY291bnQgPSB4ZmVyLT5yeF93b3Jk X2NvdW50OworCX0KKworCS8qIElmIFJYIHBheWxvYWQgaXMgbm90IHlldCByZWNlaXZlZCwgd2Fp dCBmb3IgaXQgKi8KKwlpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFf UkNWRCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFJlYWQgdGhlIFJYIHBheWxvYWQgKi8KKwl3 aGlsZSAod29yZF9jb3VudCA+PSA0KSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9E U0lfUlhfUEFZTE9BRCk7CisJCXBheWxvYWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsKKwkJcGF5 bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQlwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikg JiAweGZmOworCQlwYXlsb2FkWzNdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCQlwYXlsb2FkICs9 IDQ7CisJCXhmZXItPnJ4X2xlbiArPSA0OworCQl3b3JkX2NvdW50IC09IDQ7CisJfQorCisJaWYg KHdvcmRfY291bnQgPiAwKSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhf UEFZTE9BRCk7CisJCXN3aXRjaCAod29yZF9jb3VudCkgeworCQljYXNlIDM6CisJCQlwYXlsb2Fk WzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQlmYWxsdGhy b3VnaDsKKwkJY2FzZSAyOgorCQkJcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQkJ Kyt4ZmVyLT5yeF9sZW47CisJCQlmYWxsdGhyb3VnaDsKKwkJY2FzZSAxOgorCQkJcGF5bG9hZFsw XSA9ICh2YWwgPj4gMCkgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQlicmVhazsKKwkJ fQorCX0KKworCXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKKwllcnIgPSBud2xfZHNpX2Ns ZWFyX2Vycm9yKGRzaSk7CisJaWYgKGVycikKKwkJeGZlci0+c3RhdHVzID0gZXJyOworCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihz dHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBud2xfZHNpX3RyYW5z ZmVyICp4ZmVyID0gZHNpLT54ZmVyOworCWJvb2wgZW5kX3BhY2tldCA9IGZhbHNlOworCisJaWYg KCF4ZmVyKQorCQlyZXR1cm47CisKKwlpZiAoeGZlci0+ZGlyZWN0aW9uID09IERTSV9QQUNLRVRf U0VORCAmJgorCSAgICBzdGF0dXMgJiBOV0xfRFNJX1RYX1BLVF9ET05FKSB7CisJCXhmZXItPnN0 YXR1cyA9IHhmZXItPnR4X2xlbjsKKwkJZW5kX3BhY2tldCA9IHRydWU7CisJfSBlbHNlIGlmIChz dGF0dXMgJiBOV0xfRFNJX0RQSFlfRElSRUNUSU9OICYmCisJCSAgICgoc3RhdHVzICYgKE5XTF9E U0lfUlhfUEtUX0hEUl9SQ1ZEIHwKKwkJCSAgICAgICBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RB VEFfUkNWRCkpKSkgeworCQllbmRfcGFja2V0ID0gbndsX2RzaV9yZWFkX3BhY2tldChkc2ksIHN0 YXR1cyk7CisJfQorCisJaWYgKGVuZF9wYWNrZXQpCisJCWNvbXBsZXRlKCZ4ZmVyLT5jb21wbGV0 ZWQpOworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX2JlZ2luX3RyYW5zbWlzc2lvbihzdHJ1Y3Qg bndsX2RzaSAqZHNpKQoreworCXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54 ZmVyOworCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgKnBrdCA9ICZ4ZmVyLT5wYWNrZXQ7CisJY29u c3QgdTggKnBheWxvYWQ7CisJc2l6ZV90IGxlbmd0aDsKKwl1MTYgd29yZF9jb3VudDsKKwl1OCBo c19tb2RlOworCXUzMiB2YWw7CisJdTMyIGhzX3dvcmthcm91bmQgPSAwOworCisJLyogU2VuZCB0 aGUgcGF5bG9hZCwgaWYgYW55ICovCisJbGVuZ3RoID0gcGt0LT5wYXlsb2FkX2xlbmd0aDsKKwlw YXlsb2FkID0gcGt0LT5wYXlsb2FkOworCisJd2hpbGUgKGxlbmd0aCA+PSA0KSB7CisJCXZhbCA9 ICoodTMyICopcGF5bG9hZDsKKwkJaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4RkZGRjAwKTsK KwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZTE9BRCwgdmFsKTsKKwkJcGF5bG9h ZCArPSA0OworCQlsZW5ndGggLT0gNDsKKwl9CisJLyogU2VuZCB0aGUgcmVzdCBvZiB0aGUgcGF5 bG9hZCAqLworCXZhbCA9IDA7CisJc3dpdGNoIChsZW5ndGgpIHsKKwljYXNlIDM6CisJCXZhbCB8 PSBwYXlsb2FkWzJdIDw8IDE2OworCQlmYWxsdGhyb3VnaDsKKwljYXNlIDI6CisJCXZhbCB8PSBw YXlsb2FkWzFdIDw8IDg7CisJCWhzX3dvcmthcm91bmQgfD0gISh2YWwgJiAweEZGRkYwMCk7CisJ CWZhbGx0aHJvdWdoOworCWNhc2UgMToKKwkJdmFsIHw9IHBheWxvYWRbMF07CisJCW53bF9kc2lf d3JpdGUoZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7CisJCWJyZWFrOworCX0KKwl4ZmVy LT50eF9sZW4gPSBwa3QtPnBheWxvYWRfbGVuZ3RoOworCisJLyoKKwkgKiBTZW5kIHRoZSBoZWFk ZXIKKwkgKiBoZWFkZXJbMF0gPSBWaXJ0dWFsIENoYW5uZWwgKyBEYXRhIFR5cGUKKwkgKiBoZWFk ZXJbMV0gPSBXb3JkIENvdW50IExTQiAoTFApIG9yIGZpcnN0IHBhcmFtIChTUCkKKwkgKiBoZWFk ZXJbMl0gPSBXb3JkIENvdW50IE1TQiAoTFApIG9yIHNlY29uZCBwYXJhbSAoU1ApCisJICovCisJ d29yZF9jb3VudCA9IHBrdC0+aGVhZGVyWzFdIHwgKHBrdC0+aGVhZGVyWzJdIDw8IDgpOworCWlm IChoc193b3JrYXJvdW5kICYmIChkc2ktPnF1aXJrcyAmIEUxMTQxOF9IU19NT0RFX1FVSVJLKSkg eworCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwKKwkJCQkgICAgICJVc2luZyBocyBt b2RlIHdvcmthcm91bmQgZm9yIGNtZCAweCV4XG4iLAorCQkJCSAgICAgeGZlci0+Y21kKTsKKwkJ aHNfbW9kZSA9IDE7CisJfSBlbHNlIHsKKwkJaHNfbW9kZSA9ICh4ZmVyLT5tc2ctPmZsYWdzICYg TUlQSV9EU0lfTVNHX1VTRV9MUE0pID8gMCA6IDE7CisJfQorCXZhbCA9IE5XTF9EU0lfV0Mod29y ZF9jb3VudCkgfCBOV0xfRFNJX1RYX1ZDKHhmZXItPm1zZy0+Y2hhbm5lbCkgfAorCSAgICAgIE5X TF9EU0lfVFhfRFQoeGZlci0+bXNnLT50eXBlKSB8IE5XTF9EU0lfSFNfU0VMKGhzX21vZGUpIHwK KwkgICAgICBOV0xfRFNJX0JUQV9UWCh4ZmVyLT5uZWVkX2J0YSk7CisJbndsX2RzaV93cml0ZShk c2ksIE5XTF9EU0lfUEtUX0NPTlRST0wsIHZhbCk7CisKKwkvKiBTZW5kIHBhY2tldCBjb21tYW5k ICovCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfU0VORF9QQUNLRVQsIDB4MSk7Cit9CisK K3N0YXRpYyBzc2l6ZV90IG53bF9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqZHNpX2hvc3QsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7 CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0IG53 bF9kc2ksIGRzaV9ob3N0KTsKKwlzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciB4ZmVyOworCXNzaXpl X3QgcmV0ID0gMDsKKworCS8qIENyZWF0ZSBwYWNrZXQgdG8gYmUgc2VudCAqLworCWRzaS0+eGZl ciA9ICZ4ZmVyOworCXJldCA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnhmZXIucGFja2V0LCBt c2cpOworCWlmIChyZXQgPCAwKSB7CisJCWRzaS0+eGZlciA9IE5VTEw7CisJCXJldHVybiByZXQ7 CisJfQorCisJaWYgKChtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8w X1BBUkFNIHx8CisJICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVT VF8xX1BBUkFNIHx8CisJICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVR VUVTVF8yX1BBUkFNIHx8CisJICAgICBtc2ctPnR5cGUgJiBNSVBJX0RTSV9EQ1NfUkVBRCkgJiYK KwkgICAgbXNnLT5yeF9sZW4gPiAwICYmIG1zZy0+cnhfYnVmICE9IE5VTEwpCisJCXhmZXIuZGly ZWN0aW9uID0gRFNJX1BBQ0tFVF9SRUNFSVZFOworCWVsc2UKKwkJeGZlci5kaXJlY3Rpb24gPSBE U0lfUEFDS0VUX1NFTkQ7CisKKwl4ZmVyLm5lZWRfYnRhID0gKHhmZXIuZGlyZWN0aW9uID09IERT SV9QQUNLRVRfUkVDRUlWRSk7CisJeGZlci5uZWVkX2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19SRVFfQUNLKSA/IDEgOiAwOworCXhmZXIubXNnID0gbXNnOworCXhmZXIuc3RhdHVz ID0gLUVUSU1FRE9VVDsKKwl4ZmVyLnJ4X3dvcmRfY291bnQgPSAwOworCXhmZXIucnhfbGVuID0g MDsKKwl4ZmVyLmNtZCA9IDB4MDA7CisJaWYgKG1zZy0+dHhfbGVuID4gMCkKKwkJeGZlci5jbWQg PSAoKHU4ICopKG1zZy0+dHhfYnVmKSlbMF07CisJaW5pdF9jb21wbGV0aW9uKCZ4ZmVyLmNvbXBs ZXRlZCk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5yeF9lc2NfY2xrKTsKKwlp ZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJs ZSByeF9lc2MgY2xrOiAlemRcbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkVuYWJsZWQgcnhfZXNjIGNsayBAJWx1 IEh6XG4iLAorCQkJICAgICBjbGtfZ2V0X3JhdGUoZHNpLT5yeF9lc2NfY2xrKSk7CisKKwkvKiBJ bml0aWF0ZSB0aGUgRFNJIHBhY2tldCB0cmFuc21pc2lvbiAqLworCW53bF9kc2lfYmVnaW5fdHJh bnNtaXNzaW9uKGRzaSk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmeGZl ci5jb21wbGV0ZWQsCisJCQkJCSBOV0xfRFNJX01JUElfRklGT19USU1FT1VUKSkgeworCQlEUk1f REVWX0VSUk9SKGRzaV9ob3N0LT5kZXYsICJbJTAyWF0gRFNJIHRyYW5zZmVyIHRpbWVkIG91dFxu IiwKKwkJCSAgICAgIHhmZXIuY21kKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9IGVsc2Ugewor CQlyZXQgPSB4ZmVyLnN0YXR1czsKKwl9CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5y eF9lc2NfY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlw aV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wcyA9IHsKKwkuYXR0YWNoID0gbndsX2RzaV9o b3N0X2F0dGFjaCwKKwkudHJhbnNmZXIgPSBud2xfZHNpX2hvc3RfdHJhbnNmZXIsCit9OworCitz dGF0aWMgaXJxcmV0dXJuX3QgbndsX2RzaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRh KQoreworCXUzMiBpcnFfc3RhdHVzOworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBkYXRhOworCisJ aXJxX3N0YXR1cyA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfSVJRX1NUQVRVUyk7CisKKwlp ZiAoaXJxX3N0YXR1cyAmIE5XTF9EU0lfVFhfRklGT19PVkZMVykKKwkJRFJNX0RFVl9FUlJPUl9S QVRFTElNSVRFRChkc2ktPmRldiwgInR4IGZpZm8gb3ZlcmZsb3dcbiIpOworCisJaWYgKGlycV9z dGF0dXMgJiBOV0xfRFNJX0hTX1RYX1RJTUVPVVQpCisJCURSTV9ERVZfRVJST1JfUkFURUxJTUlU RUQoZHNpLT5kZXYsICJIUyB0eCB0aW1lb3V0XG4iKTsKKworCWlmIChpcnFfc3RhdHVzICYgTldM X0RTSV9UWF9QS1RfRE9ORSB8fAorCSAgICBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERS X1JDVkQgfHwKKwkgICAgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9S Q1ZEKQorCQlud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24oZHNpLCBpcnFfc3RhdHVzKTsKKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBud2xfZHNpX2VuYWJsZShzdHJ1 Y3QgbndsX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXVu aW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5X2NmZyA9ICZkc2ktPnBoeV9jZmc7CisJaW50IHJl dDsKKworCWlmICghZHNpLT5sYW5lcykgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIk5lZWQgRFNJ IGxhbmVzOiAlZFxuIiwgZHNpLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dCA9IHBoeV9pbml0KGRzaS0+cGh5KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBpbml0IERTSSBwaHk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldCA9IHBoeV9jb25maWd1cmUoZHNpLT5waHksIHBoeV9jZmcpOworCWlmIChy ZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBEU0kg cGh5OiAlZFxuIiwgcmV0KTsKKwkJZ290byB1bmluaXRfcGh5OworCX0KKworCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShkc2ktPnR4X2VzY19jbGspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9E RVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHR4X2VzYyBjbGs6ICVkXG4iLAor CQkJICAgICAgcmV0KTsKKwkJZ290byB1bmluaXRfcGh5OworCX0KKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwgIkVuYWJsZWQgdHhfZXNjIGNsayBAJWx1IEh6XG4iLAorCQkJICAgICBj bGtfZ2V0X3JhdGUoZHNpLT50eF9lc2NfY2xrKSk7CisKKwlyZXQgPSBud2xfZHNpX2NvbmZpZ19o b3N0KGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQg dG8gc2V0IHVwIERTSTogJWQiLCByZXQpOworCQlnb3RvIGRpc2FibGVfY2xvY2s7CisJfQorCisJ cmV0ID0gbndsX2RzaV9jb25maWdfZHBpKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHVwIERQSTogJWQiLCByZXQpOworCQlnb3RvIGRp c2FibGVfY2xvY2s7CisJfQorCisJcmV0ID0gcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwb3dlciBvbiBEUEhZ ICglZClcbiIsIHJldCk7CisJCWdvdG8gZGlzYWJsZV9jbG9jazsKKwl9CisKKwlyZXQgPSBud2xf ZHNpX2luaXRfaW50ZXJydXB0cyhkc2kpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBvd2VyX29m Zl9waHk7CisKKwlyZXR1cm4gcmV0OworCitwb3dlcl9vZmZfcGh5OgorCXBoeV9wb3dlcl9vZmYo ZHNpLT5waHkpOworZGlzYWJsZV9jbG9jazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT50 eF9lc2NfY2xrKTsKK3VuaW5pdF9waHk6CisJcGh5X2V4aXQoZHNpLT5waHkpOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBud2xfZHNpX2Rpc2FibGUoc3RydWN0IG53bF9kc2kgKmRz aSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKworCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkRpc2FibGluZyBjbG9ja3MgYW5kIHBoeVxuIik7CisKKwlwaHlfcG93ZXJf b2ZmKGRzaS0+cGh5KTsKKwlwaHlfZXhpdChkc2ktPnBoeSk7CisKKwkvKiBEaXNhYmxpbmcgdGhl IGNsb2NrIGJlZm9yZSB0aGUgcGh5IGJyZWFrcyBlbmFibGluZyBkc2kgYWdhaW4gKi8KKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZHNpLT50eF9lc2NfY2xrKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBud2xfZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKKwlp bnQgcmV0OworCisJbndsX2RzaV9kaXNhYmxlKGRzaSk7CisKKwlyZXQgPSByZXNldF9jb250cm9s X2Fzc2VydChkc2ktPnJzdF9kcGkpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1Io ZHNpLT5kZXYsICJGYWlsZWQgdG8gYXNzZXJ0IERQSTogJWRcbiIsIHJldCk7CisJCXJldHVybjsK Kwl9CisJcmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQoZHNpLT5yc3RfYnl0ZSk7CisJaWYgKHJl dCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBhc3NlcnQgRVND OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwlyZXQgPSByZXNldF9jb250cm9sX2Fzc2Vy dChkc2ktPnJzdF9lc2MpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5k ZXYsICJGYWlsZWQgdG8gYXNzZXJ0IEJZVEU6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQor CXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+cnN0X3BjbGspOworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gYXNzZXJ0IFBDTEs6ICVk XG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ Y29yZV9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmxjZGlmX2Nsayk7CisKKwlw bV9ydW50aW1lX3B1dChkc2ktPmRldik7Cit9CisKK3N0YXRpYyBpbnQgbndsX2RzaV9nZXRfZHBo eV9wYXJhbXMoc3RydWN0IG53bF9kc2kgKmRzaSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKnBoeV9v cHRzKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGRzaS0+bGFu ZXMgPCAxIHx8IGRzaS0+bGFuZXMgPiA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICog U28gZmFyIHRoZSBEUEhZIHNwZWMgbWluaW1hbCB0aW1pbmdzIHdvcmsgZm9yIGJvdGggbWl4ZWwK KwkgKiBkcGh5IGFuZCBud2wgZHNpIGhvc3QKKwkgKi8KKwlyZXQgPSBwaHlfbWlwaV9kcGh5X2dl dF9kZWZhdWx0X2NvbmZpZygKKwkJbW9kZS0+Y2xvY2sgKiAxMDAwLAorCQltaXBpX2RzaV9waXhl bF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KSwgZHNpLT5sYW5lcywKKwkJJnBoeV9vcHRzLT5t aXBpX2RwaHkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmF0ZSA9IGNsa19n ZXRfcmF0ZShkc2ktPnR4X2VzY19jbGspOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2 LCAiTFAgY2xrIGlzIEAlbHUgSHpcbiIsIHJhdGUpOworCXBoeV9vcHRzLT5taXBpX2RwaHkubHBf Y2xrX3JhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIG53bF9kc2lf YnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBBdCBsZWFzdCBMQ0RJRiArIE5X TCBuZWVkcyBhY3RpdmUgaGlnaCBzeW5jICovCisJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgfD0gKERS TV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpOworCWFkanVzdGVkX21v ZGUtPmZsYWdzICY9IH4oRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lO Qyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitu d2xfZHNpX2JyaWRnZV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBud2xfZHNp ICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisJaW50IGJwcCA9IG1pcGlfZHNpX3BpeGVs X2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOworCisJaWYgKG1vZGUtPmNsb2NrICogYnBwID4g MTUwMDAwMDAgKiBkc2ktPmxhbmVzKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJaWYg KG1vZGUtPmNsb2NrICogYnBwIDwgODAwMDAgKiBkc2ktPmxhbmVzKQorCQlyZXR1cm4gTU9ERV9D TE9DS19MT1c7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHZvaWQKK253bF9kc2lf YnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQljb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9f ZHNpKGJyaWRnZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJdW5pb24gcGh5 X2NvbmZpZ3VyZV9vcHRzIG5ld19jZmc7CisJdW5zaWduZWQgbG9uZyBwaHlfcmVmX3JhdGU7CisJ aW50IHJldDsKKworCXJldCA9IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKGRzaSwgYWRqdXN0ZWRf bW9kZSwgJm5ld19jZmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElm IGhzIGNsb2NrIGlzIHVuY2hhbmdlZCwgd2UncmUgYWxsIGdvb2QgLSBhbGwgcGFyYW1ldGVycyBh cmUKKwkgKiBkZXJpdmVkIGZyb20gaXQgYXRtLgorCSAqLworCWlmIChuZXdfY2ZnLm1pcGlfZHBo eS5oc19jbGtfcmF0ZSA9PSBkc2ktPnBoeV9jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlKQorCQly ZXR1cm47CisKKwlwaHlfcmVmX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHNpLT5waHlfcmVmX2Nsayk7 CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiUEhZIGF0IHJlZiByYXRlOiAlbHVcbiIsIHBo eV9yZWZfcmF0ZSk7CisJLyogU2F2ZSB0aGUgbmV3IGRlc2lyZWQgcGh5IGNvbmZpZyAqLworCW1l bWNweSgmZHNpLT5waHlfY2ZnLCAmbmV3X2NmZywgc2l6ZW9mKG5ld19jZmcpKTsKKworCW1lbWNw eSgmZHNpLT5tb2RlLCBhZGp1c3RlZF9tb2RlLCBzaXplb2YoZHNpLT5tb2RlKSk7CisJZHJtX21v ZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIHZvaWQg bndsX2RzaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQorewor CXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisJaW50IHJldDsK KworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYpOworCisJaWYgKGNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPmxjZGlmX2NsaykgPCAwKQorCQlyZXR1cm47CisJaWYgKGNsa19wcmVwYXJlX2Vu YWJsZShkc2ktPmNvcmVfY2xrKSA8IDApCisJCXJldHVybjsKKworCS8qIFN0ZXAgMSBmcm9tIERT SSByZXNldC1vdXQgaW5zdHJ1Y3Rpb25zICovCisJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2Vy dChkc2ktPnJzdF9wY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ ZGV2LCAiRmFpbGVkIHRvIGRlYXNzZXJ0IFBDTEs6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJ fQorCisJLyogU3RlcCAyIGZyb20gRFNJIHJlc2V0LW91dCBpbnN0cnVjdGlvbnMgKi8KKwlud2xf ZHNpX2VuYWJsZShkc2kpOworCisJLyogU3RlcCAzIGZyb20gRFNJIHJlc2V0LW91dCBpbnN0cnVj dGlvbnMgKi8KKwlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRzaS0+cnN0X2VzYyk7CisJ aWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBkZWFz c2VydCBFU0M6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCXJldCA9IHJlc2V0X2NvbnRy b2xfZGVhc3NlcnQoZHNpLT5yc3RfYnl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9F UlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBkZWFzc2VydCBCWVRFOiAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90 b19kc2koYnJpZGdlKTsKKwlpbnQgcmV0OworCisJLyogU3RlcCA1IGZyb20gRFNJIHJlc2V0LW91 dCBpbnN0cnVjdGlvbnMgKi8KKwlyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRzaS0+cnN0 X2RwaSk7CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQg dG8gZGVhc3NlcnQgRFBJOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2Jy aWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgZW51bSBkcm1fYnJp ZGdlX2F0dGFjaF9mbGFncyBmbGFncykKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdl X3RvX2RzaShicmlkZ2UpOworCXN0cnVjdCBkcm1fYnJpZGdlICpwYW5lbF9icmlkZ2U7CisJc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWw7CisJaW50IHJldDsKKworCWlmIChmbGFncyAmIERSTV9CUklE R0VfQVRUQUNIX05PX0NPTk5FQ1RPUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkcm1f b2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDAsICZwYW5lbCwK KwkJCQkJICAmcGFuZWxfYnJpZGdlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYg KHBhbmVsKSB7CisJCXBhbmVsX2JyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsKTsK KwkJaWYgKElTX0VSUihwYW5lbF9icmlkZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIocGFuZWxfYnJp ZGdlKTsKKwl9CisJZHNpLT5wYW5lbF9icmlkZ2UgPSBwYW5lbF9icmlkZ2U7CisKKwlpZiAoIWRz aS0+cGFuZWxfYnJpZGdlKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCXJldHVybiBkcm1f YnJpZGdlX2F0dGFjaChicmlkZ2UtPmVuY29kZXIsIGRzaS0+cGFuZWxfYnJpZGdlLCBicmlkZ2Us CisJCQkJIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9icmlkZ2VfZGV0YWNoKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2Vf dG9fZHNpKGJyaWRnZSk7CisKKwlkcm1fb2ZfcGFuZWxfYnJpZGdlX3JlbW92ZShkc2ktPmRldi0+ b2Zfbm9kZSwgMSwgMCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9i cmlkZ2VfZnVuY3MgbndsX2RzaV9icmlkZ2VfZnVuY3MgPSB7CisJLnByZV9lbmFibGUgPSBud2xf ZHNpX2JyaWRnZV9wcmVfZW5hYmxlLAorCS5lbmFibGUgICAgID0gbndsX2RzaV9icmlkZ2VfZW5h YmxlLAorCS5kaXNhYmxlICAgID0gbndsX2RzaV9icmlkZ2VfZGlzYWJsZSwKKwkubW9kZV9maXh1 cCA9IG53bF9kc2lfYnJpZGdlX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ICAgPSBud2xfZHNpX2Jy aWRnZV9tb2RlX3NldCwKKwkubW9kZV92YWxpZCA9IG53bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQs CisJLmF0dGFjaAkgICAgPSBud2xfZHNpX2JyaWRnZV9hdHRhY2gsCisJLmRldGFjaAkgICAgPSBu d2xfZHNpX2JyaWRnZV9kZXRhY2gsCit9OworCitzdGF0aWMgaW50IG53bF9kc2lfcGFyc2VfZHQo c3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g dG9fcGxhdGZvcm1fZGV2aWNlKGRzaS0+ZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBf X2lvbWVtICpiYXNlOworCWludCByZXQ7CisKKwlkc2ktPnBoeSA9IGRldm1fcGh5X2dldChkc2kt PmRldiwgImRwaHkiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJS KGRzaS0+cGh5KTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJRFJNX0RFVl9FUlJP Uihkc2ktPmRldiwgIkNvdWxkIG5vdCBnZXQgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwljbGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJsY2RpZiIpOworCWlmIChJ U19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGxjZGlmIGNsb2NrOiAlZFxuIiwKKwkJCSAgICAgIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+bGNkaWZfY2xrID0gY2xrOworCisJY2xrID0gZGV2 bV9jbGtfZ2V0KGRzaS0+ZGV2LCAiY29yZSIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQg PSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0 IGNvcmUgY2xvY2s6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJ ZHNpLT5jb3JlX2NsayA9IGNsazsKKworCisJY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAi cGh5X3JlZiIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJ CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBoeV9yZWYgY2xvY2s6ICVk XG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHNpLT5waHlfcmVmX2Ns ayA9IGNsazsKKworCWNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInJ4X2VzYyIpOworCWlm IChJU19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1Io ZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJ4X2VzYyBjbG9jazogJWRcbiIsCisJCQkgICAgICBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkc2ktPnJ4X2VzY19jbGsgPSBjbGs7CisKKwljbGsg PSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsICJ0eF9lc2MiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsK KwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVk IHRvIGdldCB0eF9lc2MgY2xvY2s6ICVkXG4iLAorCQkJICAgICAgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisJZHNpLT50eF9lc2NfY2xrID0gY2xrOworCisJZHNpLT5tdXggPSBkZXZtX211eF9j b250cm9sX2dldChkc2ktPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkc2ktPm11eCkpIHsKKwkJ cmV0ID0gUFRSX0VSUihkc2ktPm11eCk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJ CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IG11eDogJWRcbiIsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJYmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNv dXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNl KTsKKworCWRzaS0+cmVnbWFwID0KKwkJZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRzaS0+ZGV2LCBi YXNlLCAmbndsX2RzaV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVnbWFwKSkg eworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cmVnbWFwKTsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRl diwgIkZhaWxlZCB0byBjcmVhdGUgTldMIERTSSByZWdtYXA6ICVkXG4iLAorCQkJICAgICAgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkc2ktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7CisJaWYgKGRzaS0+aXJxIDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAi RmFpbGVkIHRvIGdldCBkZXZpY2UgSVJROiAlZFxuIiwKKwkJCSAgICAgIGRzaS0+aXJxKTsKKwkJ cmV0dXJuIGRzaS0+aXJxOworCX0KKworCWRzaS0+cnN0X3BjbGsgPSBkZXZtX3Jlc2V0X2NvbnRy b2xfZ2V0X2V4Y2x1c2l2ZShkc2ktPmRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cnN0 X3BjbGspKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBjbGsg cmVzZXQ6ICVsZFxuIiwKKwkJCSAgICAgIFBUUl9FUlIoZHNpLT5yc3RfcGNsaykpOworCQlyZXR1 cm4gUFRSX0VSUihkc2ktPnJzdF9wY2xrKTsKKwl9CisJZHNpLT5yc3RfYnl0ZSA9IGRldm1fcmVz ZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRzaS0+ZGV2LCAiYnl0ZSIpOworCWlmIChJU19FUlIo ZHNpLT5yc3RfYnl0ZSkpIHsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBn ZXQgYnl0ZSByZXNldDogJWxkXG4iLAorCQkJICAgICAgUFRSX0VSUihkc2ktPnJzdF9ieXRlKSk7 CisJCXJldHVybiBQVFJfRVJSKGRzaS0+cnN0X2J5dGUpOworCX0KKwlkc2ktPnJzdF9lc2MgPSBk ZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkc2ktPmRldiwgImVzYyIpOworCWlmIChJ U19FUlIoZHNpLT5yc3RfZXNjKSkgeworCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVk IHRvIGdldCBlc2MgcmVzZXQ6ICVsZFxuIiwKKwkJCSAgICAgIFBUUl9FUlIoZHNpLT5yc3RfZXNj KSk7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+cnN0X2VzYyk7CisJfQorCWRzaS0+cnN0X2RwaSA9 IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRzaS0+ZGV2LCAiZHBpIik7CisJaWYg KElTX0VSUihkc2ktPnJzdF9kcGkpKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZ2V0IGRwaSByZXNldDogJWxkXG4iLAorCQkJICAgICAgUFRSX0VSUihkc2ktPnJzdF9k cGkpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5yc3RfZHBpKTsKKwl9CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbndsX2RzaV9zZWxlY3RfaW5wdXQoc3RydWN0IG53bF9kc2kgKmRzaSkK K3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90ZTsKKwl1MzIgdXNlX2Rjc3MgPSAxOworCWlu dCByZXQ7CisKKwlyZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5kZXYtPm9m X25vZGUsIDAsCisJCQkJCSAgTldMX0RTSV9FTkRQT0lOVF9MQ0RJRik7CisJaWYgKHJlbW90ZSkg eworCQl1c2VfZGNzcyA9IDA7CisJfSBlbHNlIHsKKwkJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3Jl bW90ZV9ub2RlKGRzaS0+ZGV2LT5vZl9ub2RlLCAwLAorCQkJCQkJICBOV0xfRFNJX0VORFBPSU5U X0RDU1MpOworCQlpZiAoIXJlbW90ZSkgeworCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKKwkJ CQkgICAgICAiTm8gdmFsaWQgaW5wdXQgZW5kcG9pbnQgZm91bmRcbiIpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKwl9CisKKwlEUk1fREVWX0lORk8oZHNpLT5kZXYsICJVc2luZyAlcyBhcyBp bnB1dCBzb3VyY2VcbiIsCisJCSAgICAgKHVzZV9kY3NzKSA/ICJEQ1NTIiA6ICJMQ0RJRiIpOwor CXJldCA9IG11eF9jb250cm9sX3RyeV9zZWxlY3QoZHNpLT5tdXgsIHVzZV9kY3NzKTsKKwlpZiAo cmV0IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBzZWxlY3QgaW5w dXQ6ICVkXG4iLCByZXQpOworCisJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IG53bF9kc2lfZGVzZWxlY3RfaW5wdXQoc3RydWN0IG53bF9kc2kgKmRz aSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXV4X2NvbnRyb2xfZGVzZWxlY3QoZHNpLT5tdXgp OworCWlmIChyZXQgPCAwKQorCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRl c2VsZWN0IGlucHV0OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV90aW1pbmdzIG53bF9kc2lfdGltaW5ncyA9IHsKKwkuaW5w dXRfYnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0xPVywKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG53bF9kc2lfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJmc2wsaW14OG1xLW53bC1kc2kiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIG53bF9kc2lfZHRfaWRzKTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBud2xfZHNpX3F1aXJrc19tYXRjaFtdID0geworCXsgLnNv Y19pZCA9ICJpLk1YOE1RIiwgLnJldmlzaW9uID0gIjIuMCIsCisJICAuZGF0YSA9ICh2b2lkICop RTExNDE4X0hTX01PREVfUVVJUksgfSwKKwl7IC8qIHNlbnRpbmVsLiAqLyB9LAorfTsKKworc3Rh dGljIGludCBud2xfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgc29jX2Rldmlj ZV9hdHRyaWJ1dGUgKmF0dHI7CisJc3RydWN0IG53bF9kc2kgKmRzaTsKKwlpbnQgcmV0OworCisJ ZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWRzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc2ktPmRldiA9IGRldjsKKworCXJldCA9IG53 bF9kc2lfcGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0g ZGV2bV9yZXF1ZXN0X2lycShkZXYsIGRzaS0+aXJxLCBud2xfZHNpX2lycV9oYW5kbGVyLCAwLAor CQkJICAgICAgIGRldl9uYW1lKGRldiksIGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkXG4iLCBkc2ktPmlycSwK KwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kc2lfaG9zdC5vcHMg PSAmbndsX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKKwlyZXQgPSBt aXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlpZiAocmV0KSB7CisJCURS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDogJWRcbiIsIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYXR0ciA9IHNvY19kZXZpY2VfbWF0Y2gobndsX2Rz aV9xdWlya3NfbWF0Y2gpOworCWlmIChhdHRyKQorCQlkc2ktPnF1aXJrcyA9ICh1aW50cHRyX3Qp YXR0ci0+ZGF0YTsKKworCWRzaS0+YnJpZGdlLmRyaXZlcl9wcml2YXRlID0gZHNpOworCWRzaS0+ YnJpZGdlLmZ1bmNzID0gJm53bF9kc2lfYnJpZGdlX2Z1bmNzOworCWRzaS0+YnJpZGdlLm9mX25v ZGUgPSBkZXYtPm9mX25vZGU7CisJZHNpLT5icmlkZ2UudGltaW5ncyA9ICZud2xfZHNpX3RpbWlu Z3M7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRl dik7CisKKwlyZXQgPSBud2xfZHNpX3NlbGVjdF9pbnB1dChkc2kpOworCWlmIChyZXQgPCAwKSB7 CisJCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJZHJtX2JyaWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBud2xfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK KworCW53bF9kc2lfZGVzZWxlY3RfaW5wdXQoZHNpKTsKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0 ZXIoJmRzaS0+ZHNpX2hvc3QpOworCWRybV9icmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7CisJ cG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBud2xfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbnds X2RzaV9wcm9iZSwKKwkucmVtb3ZlCQk9IG53bF9kc2lfcmVtb3ZlLAorCS5kcml2ZXIJCT0gewor CQkub2ZfbWF0Y2hfdGFibGUgPSBud2xfZHNpX2R0X2lkcywKKwkJLm5hbWUJPSBEUlZfTkFNRSwK Kwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihud2xfZHNpX2RyaXZlcik7CisKK01P RFVMRV9BVVRIT1IoIk5YUCBTZW1pY29uZHVjdG9yIik7CitNT0RVTEVfQVVUSE9SKCJQdXJpc20g U1BDIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5vcnRod2VzdCBMb2dpYyBNSVBJLURTSSBkcml2 ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsgLyogR1BMdjIgb3IgbGF0ZXIgKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5oIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9ud2wtZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5hMjQ3YThhMTFjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kuaApAQCAtMCwwICsxLDE0NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjArICovCisvKgorICogTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAq LworI2lmbmRlZiBfX05XTF9EU0lfSF9fCisjZGVmaW5lIF9fTldMX0RTSV9IX18KKworLyogRFNJ IEhPU1QgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX05VTV9MQU5FUwkJCTB4MAor I2RlZmluZSBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMSwkJMHg0CisjZGVmaW5lIE5XTF9E U0lfQ0ZHX1RfUFJFCQkJMHg4CisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUE9TVAkJCTB4YworI2Rl ZmluZSBOV0xfRFNJX0NGR19UWF9HQVAJCQkweDEwCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX0FVVE9J TlNFUlRfRU9UUAkJMHgxNAorI2RlZmluZSBOV0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVSX0VP VFAJMHgxOAorI2RlZmluZSBOV0xfRFNJX0NGR19IVFhfVE9fQ09VTlQJCTB4MWMKKyNkZWZpbmUg TldMX0RTSV9DRkdfTFJYX0hfVE9fQ09VTlQJCTB4MjAKKyNkZWZpbmUgTldMX0RTSV9DRkdfQlRB X0hfVE9fQ09VTlQJCTB4MjQKKyNkZWZpbmUgTldMX0RTSV9DRkdfVFdBS0VVUAkJCTB4MjgKKyNk ZWZpbmUgTldMX0RTSV9DRkdfU1RBVFVTX09VVAkJCTB4MmMKKyNkZWZpbmUgTldMX0RTSV9SWF9F UlJPUl9TVEFUVVMJCQkweDMwCisKKy8qIERTSSBEUEkgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5X TF9EU0lfUElYRUxfUEFZTE9BRF9TSVpFCQkweDIwMAorI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZJ Rk9fU0VORF9MRVZFTAkJMHgyMDQKKyNkZWZpbmUgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09E SU5HCQkweDIwOAorI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVAkJCTB4MjBjCisjZGVmaW5l IE5XTF9EU0lfVlNZTkNfUE9MQVJJVFkJCQkweDIxMAorI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BP TEFSSVRZX0FDVElWRV9MT1cJMAorI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElW RV9ISUdICUJJVCgxKQorCisjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFkJCQkweDIxNAor I2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cJMAorI2RlZmluZSBOV0xf RFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9ISUdICUJJVCgxKQorCisjZGVmaW5lIE5XTF9EU0lf VklERU9fTU9ERQkJCTB4MjE4CisjZGVmaW5lIE5XTF9EU0lfSEZQCQkJCTB4MjFjCisjZGVmaW5l IE5XTF9EU0lfSEJQCQkJCTB4MjIwCisjZGVmaW5lIE5XTF9EU0lfSFNBCQkJCTB4MjI0CisjZGVm aW5lIE5XTF9EU0lfRU5BQkxFX01VTFRfUEtUUwkJMHgyMjgKKyNkZWZpbmUgTldMX0RTSV9WQlAJ CQkJMHgyMmMKKyNkZWZpbmUgTldMX0RTSV9WRlAJCQkJMHgyMzAKKyNkZWZpbmUgTldMX0RTSV9C TExQX01PREUJCQkweDIzNAorI2RlZmluZSBOV0xfRFNJX1VTRV9OVUxMX1BLVF9CTExQCQkweDIz OAorI2RlZmluZSBOV0xfRFNJX1ZBQ1RJVkUJCQkJMHgyM2MKKyNkZWZpbmUgTldMX0RTSV9WQwkJ CQkweDI0MAorCisvKiBEU0kgQVBCIFBLVCBjb250cm9sICovCisjZGVmaW5lIE5XTF9EU0lfVFhf UEFZTE9BRAkJCTB4MjgwCisjZGVmaW5lIE5XTF9EU0lfUEtUX0NPTlRST0wJCQkweDI4NAorI2Rl ZmluZSBOV0xfRFNJX1NFTkRfUEFDS0VUCQkJMHgyODgKKyNkZWZpbmUgTldMX0RTSV9QS1RfU1RB VFVTCQkJMHgyOGMKKyNkZWZpbmUgTldMX0RTSV9QS1RfRklGT19XUl9MRVZFTAkJMHgyOTAKKyNk ZWZpbmUgTldMX0RTSV9QS1RfRklGT19SRF9MRVZFTAkJMHgyOTQKKyNkZWZpbmUgTldMX0RTSV9S WF9QQVlMT0FECQkJMHgyOTgKKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSEVBREVSCQkJMHgyOWMK KworLyogRFNJIElSUSBoYW5kbGluZyAqLworI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVMJCQkw eDJhMAorI2RlZmluZSBOV0xfRFNJX1NNX05PVF9JRExFCQkJQklUKDApCisjZGVmaW5lIE5XTF9E U0lfVFhfUEtUX0RPTkUJCQlCSVQoMSkKKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTgkJ CUJJVCgyKQorI2RlZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFcJCQlCSVQoMykKKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX1VERkxXCQkJQklUKDQpCisjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19P VkZMVwkJCUJJVCg1KQorI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFcJCQlCSVQoNikKKyNk ZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQJCQlCSVQoNykKKyNkZWZpbmUgTldMX0RTSV9S WF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQJQklUKDgpCisjZGVmaW5lIE5XTF9EU0lfQlRBX1RJTUVP VVQJCQlCSVQoMjkpCisjZGVmaW5lIE5XTF9EU0lfTFBfUlhfVElNRU9VVAkJCUJJVCgzMCkKKyNk ZWZpbmUgTldMX0RTSV9IU19UWF9USU1FT1VUCQkJQklUKDMxKQorCisjZGVmaW5lIE5XTF9EU0lf SVJRX1NUQVRVUzIJCQkweDJhNAorI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRfRUNDX0VSUgkJ QklUKDApCisjZGVmaW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19FUlIJCUJJVCgxKQorI2RlZmlu ZSBOV0xfRFNJX0NSQ19FUlIJCQkJQklUKDIpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfTUFTSwkJ CTB4MmE4CisjZGVmaW5lIE5XTF9EU0lfU01fTk9UX0lETEVfTUFTSwkJQklUKDApCisjZGVmaW5l IE5XTF9EU0lfVFhfUEtUX0RPTkVfTUFTSwkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfRFBIWV9E SVJFQ1RJT05fTUFTSwkJQklUKDIpCisjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNL CQlCSVQoMykKKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX1VERkxXX01BU0sJCUJJVCg0KQorI2Rl ZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZGTFdfTUFTSwkJQklUKDUpCisjZGVmaW5lIE5XTF9EU0lf UlhfRklGT19VREZMV19NQVNLCQlCSVQoNikKKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JD VkRfTUFTSwkJQklUKDcpCisjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZE X01BU0sJQklUKDgpCisjZGVmaW5lIE5XTF9EU0lfQlRBX1RJTUVPVVRfTUFTSwkJQklUKDI5KQor I2RlZmluZSBOV0xfRFNJX0xQX1JYX1RJTUVPVVRfTUFTSwkJQklUKDMwKQorI2RlZmluZSBOV0xf RFNJX0hTX1RYX1RJTUVPVVRfTUFTSwkJQklUKDMxKQorCisjZGVmaW5lIE5XTF9EU0lfSVJRX01B U0syCQkJMHgyYWMKKyNkZWZpbmUgTldMX0RTSV9TSU5HTEVfQklUX0VDQ19FUlJfTUFTSwkJQklU KDApCisjZGVmaW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19FUlJfTUFTSwkJQklUKDEpCisjZGVm aW5lIE5XTF9EU0lfQ1JDX0VSUl9NQVNLCQkJQklUKDIpCisKKy8qCisgKiBQS1RfQ09OVFJPTCBm b3JtYXQ6CisgKiBbMTU6IDBdIC0gd29yZCBjb3VudAorICogWzE3OjE2XSAtIHZpcnR1YWwgY2hh bm5lbAorICogWzIzOjE4XSAtIGRhdGEgdHlwZQorICogWzI0XQkgICAtIExQIG9yIEhTIHNlbGVj dCAoMCAtIExQLCAxIC0gSFMpCisgKiBbMjVdCSAgIC0gcGVyZm9ybSBCVEEgYWZ0ZXIgcGFja2V0 IGlzIHNlbnQKKyAqIFsyNl0JICAgLSBwZXJmb3JtIEJUQSBvbmx5LCBubyBwYWNrZXQgdHgKKyAq LworI2RlZmluZSBOV0xfRFNJX1dDKHgpCQlGSUVMRF9QUkVQKEdFTk1BU0soMTUsIDApLCAoeCkp CisjZGVmaW5lIE5XTF9EU0lfVFhfVkMoeCkJRklFTERfUFJFUChHRU5NQVNLKDE3LCAxNiksICh4 KSkKKyNkZWZpbmUgTldMX0RTSV9UWF9EVCh4KQlGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwg KHgpKQorI2RlZmluZSBOV0xfRFNJX0hTX1NFTCh4KQlGSUVMRF9QUkVQKEdFTk1BU0soMjQsIDI0 KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX0JUQV9UWCh4KQlGSUVMRF9QUkVQKEdFTk1BU0soMjUs IDI1KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX0JUQV9OT19UWCh4KQlGSUVMRF9QUkVQKEdFTk1B U0soMjYsIDI2KSwgKHgpKQorCisvKgorICogUlhfUEtUX0hFQURFUiBmb3JtYXQ6CisgKiBbMTU6 IDBdIC0gd29yZCBjb3VudAorICogWzIxOjE2XSAtIGRhdGEgdHlwZQorICogWzIzOjIyXSAtIHZp cnR1YWwgY2hhbm5lbAorICovCisjZGVmaW5lIE5XTF9EU0lfUlhfRFQoeCkJRklFTERfR0VUKEdF Tk1BU0soMjEsIDE2KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX1JYX1ZDKHgpCUZJRUxEX0dFVChH RU5NQVNLKDIzLCAyMiksICh4KSkKKworLyogRFNJIFZpZGVvIG1vZGUgKi8KKyNkZWZpbmUgTldM X0RTSV9WTV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMJCTAKKyNkZWZpbmUgTldMX0RTSV9W TV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNfRVZFTlRTCUJJVCgwKQorI2RlZmluZSBOV0xfRFNJ X1ZNX0JVUlNUX01PREUJCQkJQklUKDEpCisKKy8qICogRFBJIGNvbG9yIGNvZGluZyAqLworI2Rl ZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1BBQ0tFRAkwCisjZGVmaW5lIE5XTF9EU0lfRFBJ XzE2X0JJVF81NjVfQUxJR05FRAkxCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfU0hJ RlRFRAkyCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE4X0JJVF9QQUNLRUQJMworI2RlZmluZSBOV0xf RFNJX0RQSV8xOF9CSVRfQUxJR05FRAk0CisjZGVmaW5lIE5XTF9EU0lfRFBJXzI0X0JJVAkJNQor CisvKiAqIERQSSBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRf MTYgIDAKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMTggIEJJVCgwKQorI2RlZmluZSBO V0xfRFNJX1BJWEVMX0ZPUk1BVF8xOEwgQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9S TUFUXzI0ICAoQklUKDApIHwgQklUKDEpKQorCisjZW5kaWYgLyogX19OV0xfRFNJX0hfXyAqLwot LSAKMi4yMy4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==