From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 D989BC7619B for ; Sun, 16 Feb 2020 17:27:26 +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 5DF8220857 for ; Sun, 16 Feb 2020 17:27:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5DF8220857 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=tronnes.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 B32316E484; Sun, 16 Feb 2020 17:27:07 +0000 (UTC) Received: from asav22.altibox.net (asav22.altibox.net [109.247.116.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 30BDB6E45E for ; Sun, 16 Feb 2020 17:27:03 +0000 (UTC) Received: from localhost.localdomain (unknown [81.166.168.211]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: noralf.tronnes@ebnett.no) by asav22.altibox.net (Postfix) with ESMTPSA id D801E200F7; Sun, 16 Feb 2020 18:21:41 +0100 (CET) From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= To: broonie@kernel.org, balbi@kernel.org, lee.jones@linaro.org Subject: [RFC 9/9] usb: gadget: function: mud: Add display support Date: Sun, 16 Feb 2020 18:21:17 +0100 Message-Id: <20200216172117.49832-10-noralf@tronnes.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200216172117.49832-1-noralf@tronnes.org> References: <20200216172117.49832-1-noralf@tronnes.org> MIME-Version: 1.0 X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=ZvHD1ezG c=1 sm=1 tr=0 a=OYZzhG0JTxDrWp/F2OJbnw==:117 a=OYZzhG0JTxDrWp/F2OJbnw==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=IkcTkHD0fZMA:10 a=M51BFTxLslgA:10 a=SJz97ENfAAAA:8 a=pRkQhgFihsD0AXEq5_EA:9 a=a1pVt0SKTu3krwcm:21 a=wySlcR8iXnGGWabC:21 a=QEXdDO2ut3YA:10 a=vFet0B0WnEQeilDPIY6i:22 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: , Cc: linux-usb@vger.kernel.org, dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QWRkIG9wdGlvbmFsIGRpc3BsYXkgZnVuY3Rpb25hbGl0eSB0byB0aGUgTXVsdGlmdW5jdGlvbiBV U0IgRGV2aWNlLgpUaGUgYnVsayBvZiB0aGUgY29kZSBpcyBwbGFjZWQgaW4gdGhlIGRybSBzdWJz eXN0ZW0gc2luY2UgaXQncyByZWFjaGluZwppbnRvIHRoZSBkcm0gaW50ZXJuYWxzLgoKU2lnbmVk LW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL211ZC9LY29uZmlnICAgICAgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2Ry bS9tdWQvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbXVkL211 ZF9kcm1fZ2FkZ2V0LmMgICAgfCA4ODkgKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L3VzYi9nYWRnZXQvS2NvbmZpZyAgICAgICAgICAgICAgfCAgMTIgKwogZHJpdmVycy91c2IvZ2Fk Z2V0L2Z1bmN0aW9uL01ha2VmaWxlICAgIHwgICAyICsKIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5j dGlvbi9mX211ZF9kcm0uYyB8IDE4MSArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMDg4IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXVkL211ZF9kcm1f Z2FkZ2V0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24v Zl9tdWRfZHJtLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXVkL0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vbXVkL0tjb25maWcKaW5kZXggNDQwZTk5NGNhMGEyLi5iM2M2ZDA3M2Nj OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tdWQvS2NvbmZpZworKysgYi9kcml2ZXJz L2dwdS9kcm0vbXVkL0tjb25maWcKQEAgLTEzLDMgKzEzLDYgQEAgY29uZmlnIERSTV9NVUQKIAlo ZWxwCiAJIFRoaXMgaXMgYSBLTVMgZHJpdmVyIGZvciBNdWx0aWZ1bmN0aW9uIFVTQiBEZXZpY2Ug ZGlzcGxheXMgb3IgZGlzcGxheQogCSBhZGFwdGVycy4KKworY29uZmlnIERSTV9NVURfR0FER0VU CisJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tdWQvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vbXVkL01ha2VmaWxlCmluZGV4IGQ1OTQxZDMzYmNkOS4uNTZkMmMzOWFj MGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXVkL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tdWQvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiAjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiAKIG9iai0kKENPTkZJR19EUk1fTVVEKQkJCSs9 IG11ZF9kcm0ubworb2JqLSQoQ09ORklHX0RSTV9NVURfR0FER0VUKQkJKz0gbXVkX2RybV9nYWRn ZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL211ZC9tdWRfZHJtX2dhZGdldC5jIGIv ZHJpdmVycy9ncHUvZHJtL211ZC9tdWRfZHJtX2dhZGdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uOTM5NWQ4YjdjZWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL211ZC9tdWRfZHJtX2dhZGdldC5jCkBAIC0wLDAgKzEsODg5IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLyoKKyAqIENvcHlyaWdo dCAyMDIwIE5vcmFsZiBUcsO4bm5lcworICovCisKKyNpbmNsdWRlIDxsaW51eC9sejQuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXBfdXNiLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5j bHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmUu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3JlY3QuaD4KKworI2luY2x1ZGUgIm11ZF9kcm0uaCIKKwor LyogVGVtcG9yYXJ5IGRlYnVnZ2luZyBhaWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWcg PSA4OworCisjZGVmaW5lIHBkZWJ1ZyhsZXZlbCwgZm10LCAuLi4pCQkJCVwKKwlpZiAobGV2ZWwg PD0gZGVidWcpCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI19fVkFfQVJHU19fKQor CitzdHJ1Y3QgbXVkX2RybV9nYWRnZXRfY29ubmVjdG9yIHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yOworCXUzMiBjYXBhYmlsaXRpZXM7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgaW50IHdpZHRoX21tOworCXVuc2lnbmVkIGludCBoZWln aHRfbW07CisJdm9pZCAqZWRpZDsKKwlzaXplX3QgZWRpZF9sZW47CisJc3RydWN0IG11ZF9kcm1f ZGlzcGxheV9tb2RlICptb2RlczsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOworfTsKKworc3Ry dWN0IG11ZF9kcm1fZ2FkZ2V0IHsKKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgY2xpZW50OworCisJ c3RydWN0IG11ZF9kcm1fZ2FkZ2V0X2Nvbm5lY3RvciAqY29ubmVjdG9yczsKKwl1bnNpZ25lZCBp bnQgY29ubmVjdG9yX2NvdW50OworCisJY29uc3QgdTMyICpmb3JtYXRzOworCXVuc2lnbmVkIGlu dCBmb3JtYXRfY291bnQ7CisKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY3VycmVudF9jb25uZWN0 b3I7CisJc3RydWN0IG11ZF9kcm1fZGlzcGxheV9tb2RlIGN1cnJlbnRfbW9kZTsKKwl1MzIgY3Vy cmVudF9mb3JtYXQ7CisKKwl1bnNpZ25lZCBpbnQgcmVjdF94OworCXVuc2lnbmVkIGludCByZWN0 X3k7CisJdW5zaWduZWQgaW50IHJlY3Rfd2lkdGg7CisJdW5zaWduZWQgaW50IHJlY3RfaGVpZ2h0 OworCisJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IGRybV9jbGll bnRfYnVmZmVyICpidWZmZXJfY2hlY2s7CisJYm9vbCBjaGVja19vazsKKworCXNpemVfdCBtYXhf dHJhbnNmZXJfc2l6ZTsKKwl2b2lkICp3b3JrX2J1ZjsKK307CisKK3N0YXRpYyBpbnQgbXVkX2Ry bV9nYWRnZXRfcHJvYmVfY29ubmVjdG9yKHN0cnVjdCBtdWRfZHJtX2dhZGdldF9jb25uZWN0b3Ig Km1jb25uKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBtY29ubi0+Y29u bmVjdG9yOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisJaW50IHJl dCA9IDA7CisJdm9pZCAqZWRpZDsKKworCXBkZWJ1ZygyLCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisK KwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCWNvbm5lY3Rvci0+ZnVu Y3MtPmZpbGxfbW9kZXMoY29ubmVjdG9yLAorCQkJCSAgICAgZGV2LT5tb2RlX2NvbmZpZy5tYXhf d2lkdGgsCisJCQkJICAgICBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQpOworCisJbWNvbm4t PndpZHRoX21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW07CisJbWNvbm4tPmhl aWdodF9tbSA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbTsKKwltY29ubi0+c3Rh dHVzID0gY29ubmVjdG9yLT5zdGF0dXM7CisKKwltY29ubi0+bnVtX21vZGVzID0gMDsKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKQorCQltY29ubi0+ bnVtX21vZGVzKys7CisKKwlwZGVidWcoMiwgIiAgICBudW1fbW9kZXM9JXVcbiIsIG1jb25uLT5u dW1fbW9kZXMpOworCisJaWYgKCFtY29ubi0+bnVtX21vZGVzKQorCQlnb3RvIHVubG9jazsKKwor CS8vIEZJWE1FOiBDaGVja3BhdGNoIGNvbXBsYWluczogUmV1c2luZyB0aGUga3JlYWxsb2MgYXJn IGlzIGFsbW9zdCBhbHdheXMgYSBidWcKKwltY29ubi0+bW9kZXMgPSBrcmVhbGxvYyhtY29ubi0+ bW9kZXMsIG1jb25uLT5udW1fbW9kZXMgKiBzaXplb2YoKm1jb25uLT5tb2RlcyksIEdGUF9LRVJO RUwpOworCWlmICghbWNvbm4tPm1vZGVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1jb25uLT5u dW1fbW9kZXMgPSAwOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCXBkZWJ1ZygyLCAiICAgIE1vZGVs aW5lICIgRFJNX01PREVfRk1UICJcbiIsIERSTV9NT0RFX0FSRyhtb2RlKSk7CisJCW11ZF9kcm1f ZnJvbV9kaXNwbGF5X21vZGUoJm1jb25uLT5tb2Rlc1tpKytdLCBtb2RlKTsKKwl9CisKKwlpZiAo IWNvbm5lY3Rvci0+ZWRpZF9ibG9iX3B0cikKKwkJZ290byB1bmxvY2s7CisKKwllZGlkID0gY29u bmVjdG9yLT5lZGlkX2Jsb2JfcHRyLT5kYXRhOworCW1jb25uLT5lZGlkX2xlbiA9IGNvbm5lY3Rv ci0+ZWRpZF9ibG9iX3B0ci0+bGVuZ3RoOworCXBkZWJ1ZygyLCAiICAgIGVkaWRfbGVuPSV6dVxu IiwgbWNvbm4tPmVkaWRfbGVuKTsKKwlpZiAoIW1jb25uLT5lZGlkX2xlbiB8fCAhZWRpZCkgewor CQltY29ubi0+ZWRpZF9sZW4gPSAwOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlrZnJlZShtY29u bi0+ZWRpZCk7CisJbWNvbm4tPmVkaWQgPSBrbWVtZHVwKGVkaWQsIG1jb25uLT5lZGlkX2xlbiwg R0ZQX0tFUk5FTCk7CisJaWYgKCFtY29ubi0+ZWRpZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlt Y29ubi0+ZWRpZF9sZW4gPSAwOworCQlnb3RvIHVubG9jazsKKwl9CisKK3VubG9jazoKKwltdXRl eF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgbXVkX2RybV9nYWRnZXRfcHJvYmVfY29ubmVjdG9ycyhzdHJ1Y3QgbXVkX2Ry bV9nYWRnZXQgKm1kZykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBt ZGctPmNvbm5lY3Rvcl9jb3VudDsgaSsrKQorCQltdWRfZHJtX2dhZGdldF9wcm9iZV9jb25uZWN0 b3IoJm1kZy0+Y29ubmVjdG9yc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgbXVkX2RybV9nYWRnZXRf cmVhZF9jb25uZWN0b3Ioc3RydWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcsIHVuc2lnbmVkIGludCBy ZWduciwKKwkJCQkJIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbXVkX2RybV9n YWRnZXRfY29ubmVjdG9yICptY29ubjsKKwlzaXplX3QgY291bnQgPSBsZW4gLyBzaXplb2YodTMy KTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXVuc2lnbmVkIGludCBpbmRl eCwgYmFzZXJlZywgaTsKKwlfX2xlMzIgKmJ1ZjMyID0gYnVmOworCXNpemVfdCBvZmZzZXQ7CisJ dTMyIHZhbDsKKworCWlmIChyZWduciA8IE1VRF9EUk1fUkVHX0NPTk5FQ1RPUl9FRElEKSB7CisJ CWluZGV4ID0gKHJlZ25yIC0gTVVEX0RSTV9SRUdfQ09OTkVDVE9SX1RZUEUpICUgTVVEX0RSTV9N QVhfQ09OTkVDVE9SUzsKKwkJYmFzZXJlZyA9IHJlZ25yIC0gaW5kZXg7CisJfSBlbHNlIGlmIChy ZWduciA8PSBNVURfRFJNX1JFR19DT05ORUNUT1JfRURJRF9NQVgpIHsKKwkJaW5kZXggPSAocmVn bnIgLSBNVURfRFJNX1JFR19DT05ORUNUT1JfRURJRCkgJSBNVURfRFJNX0NPTk5FQ1RPUl9FRElE X0JMT0NLX01BWDsKKwkJYmFzZXJlZyA9IE1VRF9EUk1fUkVHX0NPTk5FQ1RPUl9FRElEOworCX0g ZWxzZSBpZiAocmVnbnIgPD0gTVVEX0RSTV9SRUdfQ09OTkVDVE9SX01PREVTX01BWCkgeworCQlp bmRleCA9IChyZWduciAtIE1VRF9EUk1fUkVHX0NPTk5FQ1RPUl9NT0RFUykgJSBNVURfRFJNX0NP Tk5FQ1RPUl9NT0RFU19CTE9DS19NQVg7CisJCWJhc2VyZWcgPSBNVURfRFJNX1JFR19DT05ORUNU T1JfTU9ERVM7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRlYnVnKDMs ICIlczogY29ubmVjdG9yIGluZGV4PSV1XG4iLCBfX2Z1bmNfXywgaW5kZXgpOworCisJaWYgKGlu ZGV4ID49IG1kZy0+Y29ubmVjdG9yX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1jb25u ID0gJm1kZy0+Y29ubmVjdG9yc1tpbmRleF07CisJY29ubmVjdG9yID0gbWNvbm4tPmNvbm5lY3Rv cjsKKworCXN3aXRjaCAoYmFzZXJlZykgeworCWNhc2UgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX1RW X01PREU6CisJCS8vIGRybV9hdG9taWNfY29ubmVjdG9yX2dldF9wcm9wZXJ0eSgpCisJCWRybV9t b2Rlc2V0X2xvY2soJmNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4 LCBOVUxMKTsKKwkJdmFsID0gY29ubmVjdG9yLT5zdGF0ZSA/IGNvbm5lY3Rvci0+c3RhdGUtPnR2 Lm1vZGUgOiAwOworCQlpZiAoIWNvbm5lY3Rvci0+c3RhdGUpCisJCQlwcl9lcnIoIk5vIENvbm5l Y3RvciBzdGF0ZSEhIVxuIik7CisJCXBkZWJ1Zyg0LCAiICAgIE1VRF9EUk1fUkVHX0NPTk5FQ1RP Ul9UVl9NT0RFPSV1XG4iLCBjb25uZWN0b3ItPnN0YXRlLT50di5tb2RlKTsKKwkJZHJtX21vZGVz ZXRfdW5sb2NrKCZjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7 CisJCWJyZWFrOworCWNhc2UgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX01PREVTX0NPVU5UOgorCQl2 YWwgPSBtY29ubi0+bnVtX21vZGVzOworCQlicmVhazsKKwljYXNlIE1VRF9EUk1fUkVHX0NPTk5F Q1RPUl9FRElEX0xFTjoKKwkJdmFsID0gbWNvbm4tPmVkaWRfbGVuOworCQlicmVhazsKKwljYXNl IE1VRF9EUk1fUkVHX0NPTk5FQ1RPUl9TVEFUVVM6CisJCXZhbCA9IG1jb25uLT5zdGF0dXM7CisJ CWJyZWFrOworCWNhc2UgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX0NBUFM6CisJCXZhbCA9IG1jb25u LT5jYXBhYmlsaXRpZXM7CisJCWJyZWFrOworCWNhc2UgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX1RZ UEU6CisJCXZhbCA9IG1jb25uLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlOworCQlicmVhazsK KworCWNhc2UgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX0VESUQ6CisJCW9mZnNldCA9IHJlZ25yIC0g TVVEX0RSTV9SRUdfQ09OTkVDVE9SX0VESUQgLSAoaW5kZXggKiBNVURfRFJNX0NPTk5FQ1RPUl9F RElEX0JMT0NLX01BWCk7CisKKwkJcGRlYnVnKDQsICIgICAgTVVEX0RSTV9SRUdfQ09OTkVDVE9S X0VESUQ6IG9mZnNldD0lenVcbiIsIG9mZnNldCk7CisKKwkJaWYgKChvZmZzZXQgKyBsZW4pID4g bWNvbm4tPmVkaWRfbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbWNweShidWYsIG1jb25u LT5lZGlkICsgb2Zmc2V0LCBsZW4pOworCQlyZXR1cm4gMDsKKworCWNhc2UgTVVEX0RSTV9SRUdf Q09OTkVDVE9SX01PREVTOgorCQlvZmZzZXQgPSByZWduciAtIE1VRF9EUk1fUkVHX0NPTk5FQ1RP Ul9NT0RFUyAtIChpbmRleCAqIE1VRF9EUk1fQ09OTkVDVE9SX01PREVTX0JMT0NLX01BWCk7CisK KwkJcGRlYnVnKDQsICIgICAgTVVEX0RSTV9SRUdfQ09OTkVDVE9SX01PREVTOiBvZmZzZXQ9JXp1 LCBjb3VudD0lenVcbiIsIG9mZnNldCwgY291bnQpOworCisJCWlmIChvZmZzZXQgKyBjb3VudCA+ IG1jb25uLT5udW1fbW9kZXMgKiBNVURfRFJNX0RJU1BMQVlfTU9ERV9GSUVMRFMpCisJCQlyZXR1 cm4gLUVJTlZBTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJCWJ1ZjMyW2ld ID0gY3B1X3RvX2xlMzIoKCh1MzIgKiltY29ubi0+bW9kZXMpW2ldKTsKKwkJcmV0dXJuIDA7CisK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY291bnQgIT0gMSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwkqYnVmMzIgPSBjcHVfdG9fbGUzMih2YWwpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX211ZF9nYWRnZXRfdHZfbW9kZV9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCB1MzIgKm51bV9tb2RlcywKKwkJCQkJICAgY29uc3QgY2hhciAq Km5hbWVzKQoreworCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5ID0gZHJtLT5tb2RlX2Nv bmZpZy50dl9tb2RlX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHlfZW51bSAqcHJvcF9l bnVtOworCWNoYXIgKmJ1ZjsKKworCWlmICghcHJvcGVydHkpCisJCXJldHVybiAtRUlOVkFMOwor CisJKm51bV9tb2RlcyA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcm9wX2VudW0sICZwcm9w ZXJ0eS0+ZW51bV9saXN0LCBoZWFkKQorCQkoKm51bV9tb2RlcykrKzsKKworCXBkZWJ1ZygzLCAi JXM6ICpudW1fbW9kZXM9JXVcbiIsIF9fZnVuY19fLCAqbnVtX21vZGVzKTsKKworCWlmICghbmFt ZXMpCisJCXJldHVybiAwOworCisJYnVmID0ga2NhbGxvYygqbnVtX21vZGVzLCBEUk1fUFJPUF9O QU1FX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJ Km5hbWVzID0gYnVmOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcm9wX2VudW0sICZwcm9wZXJ0 eS0+ZW51bV9saXN0LCBoZWFkKSB7CisJCXN0cm5jcHkoYnVmLCBwcm9wX2VudW0tPm5hbWUsIERS TV9QUk9QX05BTUVfTEVOKTsKKwkJYnVmICs9IDMyOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgYm9vbCBtdWRfZHJtX2dhZGdldF9jaGVja19idWZmZXIoc3RydWN0IG11ZF9kcm1fZ2Fk Z2V0ICptZGcsCisJCQkJCXN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyLAorCQkJCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYjsKKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmYiA9IGJ1ZmZlci0+ ZmI7CisKKwlyZXR1cm4gZmItPmZvcm1hdC0+Zm9ybWF0ID09IG1kZy0+Y3VycmVudF9mb3JtYXQg JiYKKwkgICAgICAgZmItPndpZHRoID09IG1vZGUtPmhkaXNwbGF5ICYmIGZiLT5oZWlnaHQgPT0g bW9kZS0+dmRpc3BsYXk7Cit9CisKK3N0YXRpYyBpbnQgbXVkX2RybV9nYWRnZXRfY2hlY2soc3Ry dWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcpCit7CisJc3RydWN0IGRybV9mb3JtYXRfbmFtZV9idWYg Zm9ybWF0X25hbWU7CisJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXI7CisJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwl2b2lkICp2YWRkcjsKKwlpbnQgcmV0OworCisJbWVt c2V0KCZtb2RlLCAwLCBzaXplb2YobW9kZSkpOworCW11ZF9kcm1fdG9fZGlzcGxheV9tb2RlKCZt b2RlLCAmbWRnLT5jdXJyZW50X21vZGUpOworCisJcGRlYnVnKDMsICIlczpcbiIsIF9fZnVuY19f KTsKKwlwZGVidWcoMywgIiAgICAgICAgRm9ybWF0ICVzXG4iLCBkcm1fZ2V0X2Zvcm1hdF9uYW1l KG1kZy0+Y3VycmVudF9mb3JtYXQsICZmb3JtYXRfbmFtZSkpOworCXBkZWJ1ZygzLCAiICAgICAg ICBNb2RlbGluZSAiIERSTV9NT0RFX0ZNVCAiXG4iLCBEUk1fTU9ERV9BUkcoJm1vZGUpKTsKKwor CW1kZy0+Y2hlY2tfb2sgPSBmYWxzZTsKKworCWlmICghbW9kZS5oZGlzcGxheSB8fCAhbWRnLT5j dXJyZW50X2Zvcm1hdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWRnLT5idWZmZXJfY2hl Y2spIHsKKwkJZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUobWRnLT5idWZmZXJfY2hlY2sp OworCQltZGctPmJ1ZmZlcl9jaGVjayA9IE5VTEw7CisJfQorCisJaWYgKCFtdWRfZHJtX2dhZGdl dF9jaGVja19idWZmZXIobWRnLCBtZGctPmJ1ZmZlciwgJm1vZGUpKSB7CisJCWJ1ZmZlciA9IGRy bV9jbGllbnRfZnJhbWVidWZmZXJfY3JlYXRlKCZtZGctPmNsaWVudCwgbW9kZS5oZGlzcGxheSwg bW9kZS52ZGlzcGxheSwKKwkJCQkJCSAgICAgICBtZGctPmN1cnJlbnRfZm9ybWF0KTsKKwkJaWYg KElTX0VSUihidWZmZXIpKQorCQkJcmV0dXJuIFBUUl9FUlIoYnVmZmVyKTsKKworCQl2YWRkciA9 IGRybV9jbGllbnRfYnVmZmVyX3ZtYXAoYnVmZmVyKTsKKwkJaWYgKElTX0VSUih2YWRkcikpIHsK KwkJCWRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVsZXRlKGJ1ZmZlcik7CisJCQlyZXR1cm4gUFRS X0VSUih2YWRkcik7CisJCX0KKworCQltZGctPmJ1ZmZlcl9jaGVjayA9IGJ1ZmZlcjsKKwl9IGVs c2UgeworCQlidWZmZXIgPSBtZGctPmJ1ZmZlcjsKKwl9CisKKwlyZXQgPSBkcm1fY2xpZW50X21v ZGVzZXRfc2V0KCZtZGctPmNsaWVudCwgbWRnLT5jdXJyZW50X2Nvbm5lY3RvciwgJm1vZGUsIGJ1 ZmZlci0+ZmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvL3JldCA9IGRybV9jbGll bnRfbW9kZXNldF9jaGVjaygmbWRnLT5jbGllbnQpOworCisJbWRnLT5jaGVja19vayA9IHRydWU7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdWRfZHJtX2dhZGdldF9jb21taXQoc3Ry dWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcpCit7CisJaW50IHJldDsKKworCXBkZWJ1ZygzLCAiJXM6 IGNoZWNrX29rPSVzXG4iLCBfX2Z1bmNfXywgbWRnLT5jaGVja19vayA/ICJ0cnVlIiA6ICJmYWxz ZSIpOworCisJaWYgKCFtZGctPmNoZWNrX29rKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9 IGRybV9jbGllbnRfbW9kZXNldF9jb21taXQoJm1kZy0+Y2xpZW50KTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJaWYgKG1kZy0+YnVmZmVyX2NoZWNrKSB7CisJCWRybV9jbGllbnRfZnJh bWVidWZmZXJfZGVsZXRlKG1kZy0+YnVmZmVyKTsKKwkJbWRnLT5idWZmZXIgPSBtZGctPmJ1ZmZl cl9jaGVjazsKKwkJbWRnLT5idWZmZXJfY2hlY2sgPSBOVUxMOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgc2l6ZV90IG11ZF9kcm1fZ2FkZ2V0X3dyaXRlX2J1ZmZlcl9yZ2I1NjVfdG9f eHJnYjg4ODgoc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIsCisJCQkJCQkJICAgICBj b25zdCB1MTYgKnNyYzE2LCBzaXplX3QgbGVuLAorCQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHgx LCB1bnNpZ25lZCBpbnQgeDIsCisJCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgeTEsIHVuc2lnbmVk IGludCB5MikKK3sKKwl1bnNpZ25lZCBpbnQgZHN0X3dpZHRoID0gYnVmZmVyLT5mYi0+d2lkdGg7 CisJdW5zaWduZWQgaW50IHNyY193aWR0aCA9IHgyIC0geDE7CisJdW5zaWduZWQgaW50IHgsIHk7 CisJdTMyICpkc3QzMjsKKwl1MTYgdmFsMTY7CisKKwlwZGVidWcoNCwgIiVzOiAldXgldSsldSsl dVxuIiwgX19mdW5jX18sIHgyIC0geDEsIHkyIC0geTEsIHgxLCB5MSk7CisKKwkvKiBHZXQgdGhl IGFkZHJlc3MsIGl0J3MgYWxyZWFkeSBtYXBwZWQgKi8KKwlkc3QzMiA9IGRybV9jbGllbnRfYnVm ZmVyX3ZtYXAoYnVmZmVyKTsKKworCWZvciAoeSA9IHkxOyB5IDwgeTI7IHkrKykgeworCQlmb3Ig KHggPSB4MTsgeCA8IHgyOyB4KyspIHsKKwkJCXZhbDE2ID0gc3JjMTZbeCArICh5ICogc3JjX3dp ZHRoKV07CisJCQlkc3QzMlt4ICsgKHkgKiBkc3Rfd2lkdGgpXSA9ICgodmFsMTYgJiAweGY4MDAp IDw8IDgpIHwKKwkJCQkJCSAgICAgKCh2YWwxNiAmIDB4MDdlMCkgPDwgNSkgfAorCQkJCQkJICAg ICAoKHZhbDE2ICYgMHgwMDFmKSA8PCAzKTsKKwkJCWxlbiAtPSAyOworCQkJaWYgKCFsZW4pCisJ CQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc2l6ZV90 IG11ZF9kcm1fZ2FkZ2V0X3dyaXRlX2J1ZmZlcl9tZW1jcHkoc3RydWN0IGRybV9jbGllbnRfYnVm ZmVyICpidWZmZXIsCisJCQkJCQkgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLAorCQkJCQkJ IHVuc2lnbmVkIGludCB4MSwgdW5zaWduZWQgaW50IHgyLAorCQkJCQkJIHVuc2lnbmVkIGludCB5 MSwgdW5zaWduZWQgaW50IHkyKQoreworCXVuc2lnbmVkIGludCBjcHAgPSBidWZmZXItPmZiLT5m b3JtYXQtPmNwcFswXTsKKwlzaXplX3QgZHN0X3BpdGNoID0gYnVmZmVyLT5mYi0+cGl0Y2hlc1sw XTsKKwlzaXplX3Qgc3JjX3BpdGNoID0gKHgyIC0geDEpICogY3BwOworCXZvaWQgKmRzdDsKKwor CXBkZWJ1Zyg1LCAiJXM6ICV1eCV1KyV1KyV1XG4iLCBfX2Z1bmNfXywgeDIgLSB4MSwgeTIgLSB5 MSwgeDEsIHkxKTsKKworCS8qIEdldCB0aGUgYWRkcmVzcywgaXQncyBhbHJlYWR5IG1hcHBlZCAq LworCWRzdCA9IGRybV9jbGllbnRfYnVmZmVyX3ZtYXAoYnVmZmVyKTsKKwlkc3QgKz0geTEgKiBk c3RfcGl0Y2g7CisJZHN0ICs9IHgxICogY3BwOworCisJZm9yICg7IHkxIDwgeTIgJiYgbGVuOyB5 MSsrKSB7CisJCXNyY19waXRjaCA9IG1pbihzcmNfcGl0Y2gsIGxlbik7CisJCW1lbWNweShkc3Qs IHNyYywgc3JjX3BpdGNoKTsKKwkJc3JjICs9IHNyY19waXRjaDsKKwkJZHN0ICs9IGRzdF9waXRj aDsKKwkJbGVuIC09IHNyY19waXRjaDsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMg aW50IG11ZF9kcm1fZ2FkZ2V0X3dyaXRlX2J1ZmZlcihzdHJ1Y3QgbXVkX2RybV9nYWRnZXQgKm1k ZywgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVu LCB1OCBjb21wcmVzc2lvbikKK3sKKwlzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlciA9 IG1kZy0+YnVmZmVyID8gbWRnLT5idWZmZXIgOiBtZGctPmJ1ZmZlcl9jaGVjazsKKwl1bnNpZ25l ZCBpbnQgeDEgPSBtZGctPnJlY3RfeDsKKwl1bnNpZ25lZCBpbnQgeDIgPSB4MSArIG1kZy0+cmVj dF93aWR0aDsKKwl1bnNpZ25lZCBpbnQgeTEgPSBtZGctPnJlY3RfeTsKKwl1bnNpZ25lZCBpbnQg eTIgPSB5MSArIG1kZy0+cmVjdF9oZWlnaHQ7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7 CisJaW50IHJldDsKKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZiID0g YnVmZmVyLT5mYjsKKworCXBkZWJ1ZygyLCAiJXM6IFtGQjolZF0gJXV4JXUrJXUrJXVcbiIsIF9f ZnVuY19fLCBmYi0+YmFzZS5pZCwKKwkgICAgICAgbWRnLT5yZWN0X3dpZHRoLCBtZGctPnJlY3Rf aGVpZ2h0LCBtZGctPnJlY3RfeCwgbWRnLT5yZWN0X3kpOworCisJaWYgKCF4MiB8fCAheTIgfHwg eDIgPiBmYi0+d2lkdGggfHwgeTIgPiBmYi0+aGVpZ2h0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChjb21wcmVzc2lvbiAmIFJFR01BUF9VU0JfQ09NUFJFU1NJT05fTFo0KSB7CisJCWJvb2wg ZGlyZWN0ID0gIXgxICYmICF5MSAmJiB4MiA9PSBmYi0+d2lkdGggJiYgeTIgPT0gZmItPmhlaWdo dCAmJgorCQkJICAgICAgKHgyICogZmItPmZvcm1hdC0+Y3BwWzBdKSA9PSBmYi0+cGl0Y2hlc1sw XTsKKwkJdm9pZCAqZGVzdCA9IG1kZy0+d29ya19idWY7CisKKwkJLyogaWYgc3JjIGJ1ZmZlciBm aXRzIGRzdCBidWZmZXIsIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byBkc3QgKi8KKwkJaWYgKGRp cmVjdCkKKwkJCWRlc3QgPSBkcm1fY2xpZW50X2J1ZmZlcl92bWFwKGJ1ZmZlcik7CisKKwkJcmV0 ID0gTFo0X2RlY29tcHJlc3Nfc2FmZShidWYsIGRlc3QsIGxlbiwgbWRnLT5tYXhfdHJhbnNmZXJf c2l6ZSk7CisJCXBkZWJ1Zyg0LCAiICBkZWNvbXByZXNzIGxlbj0lenUsIHJldD0lZFxuIiwgbGVu LCByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJCWlmIChkaXJlY3Qp CisJCQlyZXR1cm4gMDsKKworCQlidWYgPSBtZGctPndvcmtfYnVmOworCQlsZW4gPSByZXQ7CisJ fQorCisJaWYgKG9mZnNldCArIGxlbiA+IChtZGctPnJlY3Rfd2lkdGggKiBtZGctPnJlY3RfaGVp Z2h0ICogZmItPmZvcm1hdC0+Y3BwWzBdKSkgeworCQlwcl9lcnIoIiVzOiBCdWZmZXIgZG9lc24n dCBmaXQgcmVjdGFuZ2xlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CS8qIG9mZnNldCBhbmQgbGVuIGFyZSAzMi1iaXQgYWxpZ25lZCAqLworCisJaWYgKG9mZnNldCkg eworCQl1bnNpZ25lZCBpbnQgYnVmX2NwcCA9IGZiLT5mb3JtYXQtPmNwcFswXTsKKwkJdW5zaWdu ZWQgaW50IHBpeF9vZmZzZXQgPSBvZmZzZXQgLyBidWZfY3BwOworCQl1bnNpZ25lZCBpbnQgb2Zm X3gxID0geDEgKyAocGl4X29mZnNldCAlIGJ1Zl9jcHApOworCQlzaXplX3QgcmVtYWluOworCisJ CXkxICs9IHBpeF9vZmZzZXQgLyAoeDIgLSB4MSk7CisJCXBkZWJ1Zyg2LCAiICAgIGJ1Zl9jcHA9 JXUsIHBpeF9vZmZzZXQ9JXUsIG9mZl94MT0ldSwgeDE9JXUsIHkxPSV1XG4iLAorCQkgICAgICAg YnVmX2NwcCwgcGl4X29mZnNldCwgb2ZmX3gxLCB4MSwgeTEpOworCQlpZiAoeTEgPj0geTIpCisJ CQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAob2ZmX3gxICE9IHgxKSB7CisJCQlyZW1haW4gPSBt dWRfZHJtX2dhZGdldF93cml0ZV9idWZmZXJfbWVtY3B5KGJ1ZmZlciwgYnVmLCBsZW4sCisJCQkJ CQkJCSAgICBvZmZfeDEsIHgyLCB5MSwgeTEgKyAxKTsKKwkJCWlmICghcmVtYWluKQorCQkJCXJl dHVybiAwOworCisJCQlidWYgKz0gbGVuIC0gcmVtYWluOworCQkJbGVuID0gcmVtYWluOworCQkJ aWYgKCsreTEgPj0geTIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlsZW4gPSBt dWRfZHJtX2dhZGdldF93cml0ZV9idWZmZXJfbWVtY3B5KGJ1ZmZlciwgYnVmLCBsZW4sIHgxLCB4 MiwgeTEsIHkyKTsKKwlpZiAobGVuKQorCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gd3JpdGUgaXQg YWxsOiAlenVcbiIsIF9fZnVuY19fLCBsZW4pOworCisJcmV0dXJuIGxlbiA/IC1FSU8gOiAwOwor fQorCitzdGF0aWMgaW50IG11ZF9kcm1fZ2FkZ2V0X2Rpc2FibGVfcGlwZShzdHJ1Y3QgbXVkX2Ry bV9nYWRnZXQgKm1kZykKK3sKKwlpbnQgcmV0OworCisJcGRlYnVnKDIsICIlczogYnVmZmVyPSVw eCBidWZmZXJfY2hlY2s9JXB4XG4iLAorCSAgICAgICBfX2Z1bmNfXywgbWRnLT5idWZmZXIsIG1k Zy0+YnVmZmVyX2NoZWNrKTsKKworCWRybV9jbGllbnRfbW9kZXNldF9zZXQoJm1kZy0+Y2xpZW50 LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlyZXQgPSBkcm1fY2xpZW50X21vZGVzZXRfY29tbWl0KCZt ZGctPmNsaWVudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRybV9jbGllbnRfZnJh bWVidWZmZXJfZGVsZXRlKG1kZy0+YnVmZmVyX2NoZWNrKTsKKwlkcm1fY2xpZW50X2ZyYW1lYnVm ZmVyX2RlbGV0ZShtZGctPmJ1ZmZlcik7CisJbWRnLT5idWZmZXJfY2hlY2sgPSBOVUxMOworCW1k Zy0+YnVmZmVyID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitpbnQgbXVkX2RybV9nYWRnZXRf d3JpdGVyZWcoc3RydWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcsIHVuc2lnbmVkIGludCByZWduciwK KwkJCSAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIHU4IGNvbXByZXNzaW9uKQorewor CWNvbnN0IF9fbGUzMiAqYnVmMzI7CisJc2l6ZV90IGNvdW50OworCXUzMiB2YWw7CisJaW50IHJl dDsKKworCXBkZWJ1ZygyLCAiJXM6IHJlZ25yPTB4JTAyeCwgbGVuPSV6dVxuIiwgX19mdW5jX18s IHJlZ25yLCBsZW4pOworCisJaWYgKHJlZ25yID49IE1VRF9EUk1fUkVHX0JVRkZFUikgeworCQlz aXplX3Qgb2Zmc2V0ID0gKHJlZ25yIC0gTVVEX0RSTV9SRUdfQlVGRkVSKSAqIHNpemVvZih1MzIp OworCisJCXBkZWJ1ZygzLCAiICAgIE1VRF9EUk1fUkVHX0JVRkZFUlxuIik7CisJCXJldHVybiBt dWRfZHJtX2dhZGdldF93cml0ZV9idWZmZXIobWRnLCBidWYsIG9mZnNldCwgbGVuLCBjb21wcmVz c2lvbik7CisJfQorCisJaWYgKGNvbXByZXNzaW9uICYgUkVHTUFQX1VTQl9DT01QUkVTU0lPTl9M WjQpIHsKKwkJcmV0ID0gTFo0X2RlY29tcHJlc3Nfc2FmZShidWYsIG1kZy0+d29ya19idWYsIGxl biwgbWRnLT5tYXhfdHJhbnNmZXJfc2l6ZSk7CisJCXBkZWJ1Zyg0LCAiICBkZWNvbXByZXNzIGxl bj0lenUsIHJldD0lZFxuIiwgbGVuLCByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAt RUlPOworCisJCWJ1ZiA9IG1kZy0+d29ya19idWY7CisJCWxlbiA9IHJldDsKKwl9CisKKwljb3Vu dCA9IGxlbiAvIHNpemVvZih1MzIpOworCWJ1ZjMyID0gYnVmOworCisJd2hpbGUgKGNvdW50LS0p IHsKKwkJdmFsID0gbGUzMl90b19jcHVwKGJ1ZjMyKyspOworCisJCWlmIChyZWduciA+PSBNVURf RFJNX1JFR19TRVRfTU9ERSAmJiByZWduciA8PSBNVURfRFJNX1JFR19TRVRfTU9ERV9NQVgpIHsK KwkJCSgodTMyICopJm1kZy0+Y3VycmVudF9tb2RlKVtyZWduciAtIE1VRF9EUk1fUkVHX1NFVF9N T0RFXSA9IHZhbDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAocmVnbnIpIHsKKwkJCWNhc2UgTVVE X0RSTV9SRUdfUElQRV9FTkFCTEU6CisJCQkJcGRlYnVnKDMsICIgICAgTVVEX0RSTV9SRUdfUElQ RV9FTkFCTEU6ICV1XG4iLCB2YWwpOworCQkJCWlmICh2YWwgPT0gMCkgeworCQkJCQlyZXQgPSBt dWRfZHJtX2dhZGdldF9kaXNhYmxlX3BpcGUobWRnKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCXJl dHVybiByZXQ7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIE1VRF9EUk1fUkVHX1JFQ1Rf WDoKKwkJCQltZGctPnJlY3RfeCA9IHZhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTVVEX0RSTV9S RUdfUkVDVF9ZOgorCQkJCW1kZy0+cmVjdF95ID0gdmFsOworCQkJCWJyZWFrOworCQkJY2FzZSBN VURfRFJNX1JFR19SRUNUX1dJRFRIOgorCQkJCW1kZy0+cmVjdF93aWR0aCA9IHZhbDsKKwkJCQli cmVhazsKKwkJCWNhc2UgTVVEX0RSTV9SRUdfUkVDVF9IRUlHSFQ6CisJCQkJbWRnLT5yZWN0X2hl aWdodCA9IHZhbDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNVURfRFJNX1JFR19TRVRfQ09OTkVD VE9SOgorCQkJCWlmICh2YWwgPj0gbWRnLT5jb25uZWN0b3JfY291bnQpCisJCQkJCXJldHVybiAt RUlOVkFMOworCisJCQkJcGRlYnVnKDMsICIgICAgTVVEX0RSTV9SRUdfU0VUX0NPTk5FQ1RPUjog JXVcbiIsIHZhbCk7CisJCQkJbWRnLT5jdXJyZW50X2Nvbm5lY3RvciA9IG1kZy0+Y29ubmVjdG9y c1t2YWxdLmNvbm5lY3RvcjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNVURfRFJNX1JFR19TRVRf Rk9STUFUOgorCQkJCXBkZWJ1ZygzLCAiICAgIE1VRF9EUk1fUkVHX1NFVF9GT1JNQVQ6ICV1XG4i LCB2YWwpOworCQkJCW1kZy0+Y3VycmVudF9mb3JtYXQgPSB2YWw7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgTVVEX0RSTV9SRUdfU0VUX0NPTU1JVDoKKwkJCQlwZGVidWcoMywgIiAgICBNVURfRFJN X1JFR19TRVRfQ09NTUlUOiAldVxuIiwgdmFsKTsKKworCQkJCWlmICh2YWwgPT0gTVVEX0RSTV9D T01NSVRfQVBQTFkpCisJCQkJCXJldCA9IG11ZF9kcm1fZ2FkZ2V0X2NvbW1pdChtZGcpOworCQkJ CWVsc2UKKwkJCQkJcmV0ID0gbXVkX2RybV9nYWRnZXRfY2hlY2sobWRnKTsKKwkJCQlwZGVidWco MywgIiAgICAgICAgcmV0PSVkXG4iLCByZXQpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiBy ZXQ7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJfZXJyKCIlczogdW5rbm93biBy ZWdpc3RlcjogMHgleFxuIiwgX19mdW5jX18sIHJlZ25yKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsK KwkJCX0KKwkJfQorCisJCXJlZ25yKys7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lN Qk9MKG11ZF9kcm1fZ2FkZ2V0X3dyaXRlcmVnKTsKKworaW50IG11ZF9kcm1fZ2FkZ2V0X3JlYWRy ZWcoc3RydWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcsIHVuc2lnbmVkIGludCByZWduciwKKwkJCSAg IHZvaWQgKmJ1Ziwgc2l6ZV90ICpsZW4sIHU4IGNvbXByZXNzaW9uKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBtZGctPmNsaWVudC5kZXY7CisJc2l6ZV90IGNvdW50ID0gKmxlbiAvIHNp emVvZih1MzIpOworCV9fbGUzMiAqYnVmMzIgPSBidWY7CisJdTMyIHZhbDsKKwlpbnQgcmV0Owor CisJLyoKKwkgKiBGSVhNRToKKwkgKiBTaG91bGQgd2UgYm90aGVyIHdpdGggY29tcHJlc3Npb24/ IFRoZSBob3N0IGhvbm91cnMgb3VyIGNob2ljZS4KKwkgKiBFRElEIGFuZCBtb2RlcyBhcmUgdGhl IGJpZyBvbmVzLCBvbmx5IG9uIGNvbm5lY3RvciBwcm9iaW5nLgorCSAqLworCisJcGRlYnVnKDIs ICIlczogcmVnbnI9MHglMDJ4LCBjb3VudD0lenVcbiIsIF9fZnVuY19fLCByZWduciwgY291bnQp OworCisJaWYgKHJlZ25yID49IE1VRF9EUk1fUkVHX0NPTk5FQ1RPUl9UWVBFICYmIHJlZ25yIDwg TVVEX0RSTV9SRUdfQ09OTkVDVE9SX01BWCkKKwkJcmV0dXJuIG11ZF9kcm1fZ2FkZ2V0X3JlYWRf Y29ubmVjdG9yKG1kZywgcmVnbnIsIGJ1ZiwgKmxlbik7CisKKwlpZiAocmVnbnIgPT0gTVVEX0RS TV9SRUdfVFZfTU9ERVMpIHsKKwkJY29uc3QgY2hhciAqbmFtZXM7CisKKwkJcmV0ID0gZHJtX211 ZF9nYWRnZXRfdHZfbW9kZV9wcm9wZXJ0eShkcm0sICZ2YWwsICZuYW1lcyk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCQlpZiAoKmxlbiAhPSB2YWwgKiBEUk1fUFJPUF9OQU1FX0xFTikK KwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UKKwkJCW1lbWNweShidWYsIG5hbWVzLCAqbGVuKTsK KwkJa2ZyZWUobmFtZXMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlIChjb3VudC0tKSB7 CisJCWlmIChyZWduciA+PSBNVURfRFJNX1JFR19GT1JNQVRTICYmIHJlZ25yIDw9IE1VRF9EUk1f UkVHX0ZPUk1BVFNfTUFYICYmCisJCSAgICByZWduciA8IChNVURfRFJNX1JFR19GT1JNQVRTICsg bWRnLT5mb3JtYXRfY291bnQpKSB7CisJCQl2YWwgPSBtZGctPmZvcm1hdHNbcmVnbnIgLSBNVURf RFJNX1JFR19GT1JNQVRTXTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAocmVnbnIpIHsKKwkJCWNh c2UgTVVEX0RSTV9SRUdfTUlOX1dJRFRIOgorCQkJCXZhbCA9IGRybS0+bW9kZV9jb25maWcubWlu X3dpZHRoOworCQkJCWJyZWFrOworCQkJY2FzZSBNVURfRFJNX1JFR19NQVhfV0lEVEg6CisJCQkJ dmFsID0gZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGg7CisJCQkJYnJlYWs7CisJCQljYXNlIE1V RF9EUk1fUkVHX01JTl9IRUlHSFQ6CisJCQkJdmFsID0gZHJtLT5tb2RlX2NvbmZpZy5taW5faGVp Z2h0OworCQkJCWJyZWFrOworCQkJY2FzZSBNVURfRFJNX1JFR19NQVhfSEVJR0hUOgorCQkJCXZh bCA9IGRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBN VURfRFJNX1JFR19OVU1fQ09OTkVDVE9SUzoKKwkJCQl2YWwgPSBtZGctPmNvbm5lY3Rvcl9jb3Vu dDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNVURfRFJNX1JFR19GT1JNQVRTX0NPVU5UOgorCQkJ CXZhbCA9IG1kZy0+Zm9ybWF0X2NvdW50OworCQkJCWJyZWFrOworCisJCQljYXNlIE1VRF9EUk1f UkVHX1RWX01PREVTX0NPVU5UOgorCQkJCXJldCA9IGRybV9tdWRfZ2FkZ2V0X3R2X21vZGVfcHJv cGVydHkoZHJtLCAmdmFsLCBOVUxMKTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0Owor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcl9lcnIoIiVzOiB1bmtub3duIHJlZ2lzdGVy OiAweCV4XG4iLCBfX2Z1bmNfXywgcmVnbnIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQor CQl9CisKKwkJKihidWYzMisrKSA9IGNwdV90b19sZTMyKHZhbCk7CisJCXJlZ25yKys7CisJfQor CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG11ZF9kcm1fZ2FkZ2V0X3JlYWRyZWcpOwor Cit2b2lkIG11ZF9kcm1fZ2FkZ2V0X2VuYWJsZShzdHJ1Y3QgbXVkX2RybV9nYWRnZXQgKm1kZykK K3sKKwlwZGVidWcoMSwgIiVzOlxuIiwgX19mdW5jX18pOworfQorRVhQT1JUX1NZTUJPTChtdWRf ZHJtX2dhZGdldF9lbmFibGUpOworCit2b2lkIG11ZF9kcm1fZ2FkZ2V0X2Rpc2FibGUoc3RydWN0 IG11ZF9kcm1fZ2FkZ2V0ICptZGcpCit7CisJcGRlYnVnKDEsICIlczpcbiIsIF9fZnVuY19fKTsK KwltdWRfZHJtX2dhZGdldF9kaXNhYmxlX3BpcGUobWRnKTsKK30KK0VYUE9SVF9TWU1CT0wobXVk X2RybV9nYWRnZXRfZGlzYWJsZSk7CisKK3N0YXRpYyBpbnQgZHJtX211ZF9nYWRnZXRfZ2V0X2Zv cm1hdHMoc3RydWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IG1kZy0+Y2xpZW50LmRldjsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwkvL3N0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgKmZvcm1hdHM7CisK KwlwZGVidWcoMSwgIiVzOlxuIiwgX19mdW5jX18pOworCS8vY3J0YyA9IGRybV9jcnRjX2Zyb21f aW5kZXgoZHJtLCAwKTsKKwkvL3BsYW5lID0gY3J0Yy0+cHJpbWFyeTsKKworCWRybV9mb3JfZWFj aF9wbGFuZShwbGFuZSwgZHJtKSB7CisJCXBkZWJ1ZygxLCAiICBwbGFuZT0lcHhcbiIsIHBsYW5l KTsKKwkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCisJCQlicmVh azsKKwl9CisKKwlmb3JtYXRzID0ga2NhbGxvYyhwbGFuZS0+Zm9ybWF0X2NvdW50LCBzaXplb2Yo dTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmb3JtYXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+Zm9ybWF0X2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRy bV9mb3JtYXRfbmFtZV9idWYgZm9ybWF0X25hbWU7CisJCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmZtdDsKKworCQlmbXQgPSBkcm1fZm9ybWF0X2luZm8ocGxhbmUtPmZvcm1hdF90eXBl c1tpXSk7CisJCWlmIChmbXQtPm51bV9wbGFuZXMgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWZv cm1hdHNbbWRnLT5mb3JtYXRfY291bnQrK10gPSBwbGFuZS0+Zm9ybWF0X3R5cGVzW2ldOworCQlw ZGVidWcoMSwgIiAgICAlc1xuIiwgZHJtX2dldF9mb3JtYXRfbmFtZShwbGFuZS0+Zm9ybWF0X3R5 cGVzW2ldLCAmZm9ybWF0X25hbWUpKTsKKwl9CisKKwlpZiAobWRnLT5mb3JtYXRfY291bnQgPiAo TVVEX0RSTV9SRUdfRk9STUFUU19NQVggLSBNVURfRFJNX1JFR19GT1JNQVRTKSkgeworCQlrZnJl ZShmb3JtYXRzKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJbWRnLT5mb3JtYXRzID0gZm9y bWF0czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBvYmplY3RfaGFzX3Byb3BlcnR5 KHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVy dHkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2JqLT5wcm9wZXJ0 aWVzLT5jb3VudDsgaSsrKQorCQlpZiAob2JqLT5wcm9wZXJ0aWVzLT5wcm9wZXJ0aWVzW2ldID09 IHByb3BlcnR5KQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp YyB2b2lkIG11ZF9kcm1fZ2FkZ2V0X2dldF9jb25uZWN0b3JzKHN0cnVjdCBtdWRfZHJtX2dhZGdl dCAqbWRnKQoreworCXN0cnVjdCBtdWRfZHJtX2dhZGdldF9jb25uZWN0b3IgKmNvbm5lY3RvcnMg PSBOVUxMOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CisJdW5z aWduZWQgaW50IGNvbm5lY3Rvcl9jb3VudCA9IDA7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbWRnLT5jbGllbnQuZGV2OworCisJ cGRlYnVnKDEsICIlczpcbiIsIF9fZnVuY19fKTsKKworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVy X2JlZ2luKGRybSwgJmNvbm5faXRlcik7CisJZHJtX2NsaWVudF9mb3JfZWFjaF9jb25uZWN0b3Jf aXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKKwkJc3RydWN0IG11ZF9kcm1fZ2FkZ2V0X2Nv bm5lY3RvciAqdG1wLCAqbWNvbm47CisKKwkJdG1wID0ga3JlYWxsb2MoY29ubmVjdG9ycywgKGNv bm5lY3Rvcl9jb3VudCArIDEpICogc2l6ZW9mKCpjb25uZWN0b3JzKSwKKwkJCSAgICAgICBHRlBf S0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCWlmICghdG1wKQorCQkJYnJlYWs7CisKKwkJY29ubmVj dG9ycyA9IHRtcDsKKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKKwkJbWNvbm4gPSAm Y29ubmVjdG9yc1tjb25uZWN0b3JfY291bnQrK107CisJCW1jb25uLT5jb25uZWN0b3IgPSBjb25u ZWN0b3I7CisKKwkJbWNvbm4tPmNhcGFiaWxpdGllcyA9IE1VRF9EUk1fQ09OTkVDVE9SX0NBUF9N T0RFOworCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNU T1JfVklSVFVBTCkKKwkJCW1jb25uLT5jYXBhYmlsaXRpZXMgfD0gTVVEX0RSTV9DT05ORUNUT1Jf Q0FQX0VESUQ7CisJCWlmIChvYmplY3RfaGFzX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsIGRy bS0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSkpCisJCQltY29ubi0+Y2FwYWJpbGl0aWVz IHw9IE1VRF9EUk1fQ09OTkVDVE9SX0NBUF9UVjsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0 ZXJfZW5kKCZjb25uX2l0ZXIpOworCisJbWRnLT5jb25uZWN0b3JzID0gY29ubmVjdG9yczsKKwlt ZGctPmNvbm5lY3Rvcl9jb3VudCA9IGNvbm5lY3Rvcl9jb3VudDsKK30KKworc3RhdGljIHZvaWQg bXVkX2RybV9nYWRnZXRfY2xpZW50X3VucmVnaXN0ZXIoc3RydWN0IGRybV9jbGllbnRfZGV2ICpj bGllbnQpCit7CisJc3RydWN0IG11ZF9kcm1fZ2FkZ2V0ICptZGcgPSBjb250YWluZXJfb2YoY2xp ZW50LCBzdHJ1Y3QgbXVkX2RybV9nYWRnZXQsIGNsaWVudCk7CisJdW5zaWduZWQgaW50IGk7CisK KwlwZGVidWcoMSwgIiVzOlxuIiwgX19mdW5jX18pOworCisJdmZyZWUobWRnLT53b3JrX2J1Zik7 CisJa2ZyZWUobWRnLT5mb3JtYXRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBtZGctPmNvbm5lY3Rv cl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBtdWRfZHJtX2dhZGdldF9jb25uZWN0b3IgKm1jb25u ID0gJm1kZy0+Y29ubmVjdG9yc1tpXTsKKworCQlkcm1fY29ubmVjdG9yX3B1dChtY29ubi0+Y29u bmVjdG9yKTsKKwkJa2ZyZWUobWNvbm4tPm1vZGVzKTsKKwkJa2ZyZWUobWNvbm4tPmVkaWQpOwor CX0KKwlrZnJlZShtZGctPmNvbm5lY3RvcnMpOworCisJZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9k ZWxldGUobWRnLT5idWZmZXJfY2hlY2spOworCWRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVsZXRl KG1kZy0+YnVmZmVyKTsKKwlkcm1fY2xpZW50X3JlbGVhc2UoY2xpZW50KTsKKwlrZnJlZShtZGcp OworfQorCitzdGF0aWMgaW50IG11ZF9kcm1fZ2FkZ2V0X2NsaWVudF9ob3RwbHVnKHN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50KQoreworCXN0cnVjdCBtdWRfZHJtX2dhZGdldCAqbWRnID0g Y29udGFpbmVyX29mKGNsaWVudCwgc3RydWN0IG11ZF9kcm1fZ2FkZ2V0LCBjbGllbnQpOworCisJ cGRlYnVnKDEsICIlczpcbiIsIF9fZnVuY19fKTsKKworCW11ZF9kcm1fZ2FkZ2V0X3Byb2JlX2Nv bm5lY3RvcnMobWRnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jbGllbnRfZnVuY3MgbWRnX2NsaWVudF9mdW5jcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RV TEUsCisJLnVucmVnaXN0ZXIJPSBtdWRfZHJtX2dhZGdldF9jbGllbnRfdW5yZWdpc3RlciwKKwku aG90cGx1Zwk9IG11ZF9kcm1fZ2FkZ2V0X2NsaWVudF9ob3RwbHVnLAorfTsKKworc3RydWN0IG11 ZF9kcm1fZ2FkZ2V0ICptdWRfZHJtX2dhZGdldF9pbml0KHVuc2lnbmVkIGludCBtaW5vcl9pZCwK KwkJCQkJICAgc2l6ZV90IG1heF90cmFuc2Zlcl9zaXplKQoreworCXN0cnVjdCBtdWRfZHJtX2dh ZGdldCAqbWRnOworCXZvaWQgKndvcmtfYnVmOworCWludCByZXQ7CisKKwlwZGVidWcoMSwgIiVz OlxuIiwgX19mdW5jX18pOworCisJbWRnID0ga3phbGxvYyhzaXplb2YoKm1kZyksIEdGUF9LRVJO RUwpOworCXdvcmtfYnVmID0gdm1hbGxvYyhtYXhfdHJhbnNmZXJfc2l6ZSk7CisJaWYgKCFtZGcg fHwgIXdvcmtfYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfZnJlZTsKKwl9 CisKKwltZGctPm1heF90cmFuc2Zlcl9zaXplID0gbWF4X3RyYW5zZmVyX3NpemU7CisJbWRnLT53 b3JrX2J1ZiA9IHdvcmtfYnVmOworCisJcmV0ID0gZHJtX2NsaWVudF9pbml0X2Zyb21faWQobWlu b3JfaWQsICZtZGctPmNsaWVudCwgIm11ZC1kcm0tZ2FkZ2V0IiwgJm1kZ19jbGllbnRfZnVuY3Mp OworCWlmICgwICYmIHJldCkKKwkJZ290byBlcnJvcl9mcmVlOworCisJLyogRnJvbSB0aGlzIHBv aW50IG9uIHdlIGNhbid0IGZhaWwgc2luY2Ugb25seSBhIGRybV9kZXZfdW5yZWdpc3RlcigpIGNh biB1bmxvYWQgdXMgKi8KKworCWlmICghcmV0KSB7CisJCXJldCA9IGRybV9tdWRfZ2FkZ2V0X2dl dF9mb3JtYXRzKG1kZyk7CisJCWlmIChyZXQpCisJCQlwcl9lcnIoIkVSUk9SOiBkcm1fbXVkX2dh ZGdldF9nZXRfZm9ybWF0cz0lZFxuIiwgcmV0KTsKKworCQltdWRfZHJtX2dhZGdldF9nZXRfY29u bmVjdG9ycyhtZGcpOworCQltdWRfZHJtX2dhZGdldF9wcm9iZV9jb25uZWN0b3JzKG1kZyk7CisJ fQorCisJcGRlYnVnKDEsICIlczogY29ubmVjdG9yX2NvdW50PSV1XG4iLCBfX2Z1bmNfXywgbWRn LT5jb25uZWN0b3JfY291bnQpOworCisJcmV0dXJuIG1kZzsKKworZXJyb3JfZnJlZToKKwl2ZnJl ZSh3b3JrX2J1Zik7CisJa2ZyZWUobWRnKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitF WFBPUlRfU1lNQk9MKG11ZF9kcm1fZ2FkZ2V0X2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJOb3Jh bGYgVHLDuG5uZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXgg ZDYyODUxNDZlYzc2Li5lMzBjYjAzOWYzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdl dC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yMTksNiArMjE5 LDkgQEAgY29uZmlnIFVTQl9GX1RDTQogY29uZmlnIFVTQl9GX01VRAogCXRyaXN0YXRlCiAKK2Nv bmZpZyBVU0JfRl9NVURfRFJNCisJdHJpc3RhdGUKKwogY29uZmlnIFVTQl9GX01VRF9QSU5TCiAJ dHJpc3RhdGUKIApAQCAtNDk4LDYgKzUwMSwxNSBAQCBtZW51Y29uZmlnIFVTQl9DT05GSUdGU19G X01VRAogCiBpZiBVU0JfRl9NVUQKIAorY29uZmlnIFVTQl9DT05GSUdGU19GX01VRF9EUk0KKwli b29sICJNdWx0aWZ1bmN0aW9uIFVTQiBEZXZpY2UgRGlzcGxheSIKKwlkZXBlbmRzIG9uIERSTQor CXNlbGVjdCBEUk1fTVVEX0dBREdFVAorCXNlbGVjdCBVU0JfRl9NVURfRFJNCisJc2VsZWN0IExa NF9ERUNPTVBSRVNTCisJaGVscAorCSAgRGlzcGxheSBzdXBwb3J0IGZvciB0aGUgTXVsdGlmdW5j dGlvbiBVU0IgRGV2aWNlLgorCiBjb25maWcgVVNCX0NPTkZJR0ZTX0ZfTVVEX1BJTlMKIAlib29s ICJNdWx0aWZ1bmN0aW9uIFVTQiBEZXZpY2UgR1BJTyIKIAlkZXBlbmRzIG9uIFBJTkNUUkwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZSBiL2RyaXZlcnMv dXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZQppbmRleCAyZTI0MjI3ZmNjMTIuLmQwZjkzY2U2 YmJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZQpAQCAtNTIsNSArNTIsNyBA QCB1c2JfZl90Y20teQkJCTo9IGZfdGNtLm8KIG9iai0kKENPTkZJR19VU0JfRl9UQ00pCQkrPSB1 c2JfZl90Y20ubwogdXNiX2ZfbXVkLXkJCQk6PSBmX211ZC5vIG11ZF9yZWdtYXAubwogb2JqLSQo Q09ORklHX1VTQl9GX01VRCkJCSs9IHVzYl9mX211ZC5vCit1c2JfZl9tdWRfZHJtLXkJCQk6PSBm X211ZF9kcm0ubworb2JqLSQoQ09ORklHX1VTQl9GX01VRF9EUk0pCSs9IHVzYl9mX211ZF9kcm0u bwogdXNiX2ZfbXVkX3BpbnMteQkJOj0gZl9tdWRfcGlucy5vCiBvYmotJChDT05GSUdfVVNCX0Zf TVVEX1BJTlMpCSs9IHVzYl9mX211ZF9waW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dh ZGdldC9mdW5jdGlvbi9mX211ZF9kcm0uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9m X211ZF9kcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVlN2Jh NzFmMzM4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9m X211ZF9kcm0uYwpAQCAtMCwwICsxLDE4MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb3ItbGF0ZXIKKy8qCisgKiBDb3B5cmlnaHQgMjAyMCBOb3JhbGYgVHLDuG5uZXMK KyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5o PgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcF91c2Iu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJmX211ZC5oIgorI2luY2x1 ZGUgIi4uLy4uLy4uL2dwdS9kcm0vbXVkL211ZF9kcm0uaCIKKworc3RydWN0IGZfbXVkX2RybV9j ZWxsIHsKKwlzdHJ1Y3QgZl9tdWRfY2VsbCBjZWxsOworCisJc3RydWN0IG11dGV4IGxvY2s7CisJ aW50IHJlZmNudDsKKworCWludCBkcm1fZGV2OworCWNvbnN0IGNoYXIgKmJhY2tsaWdodF9kZXY7 CisKKwlzdHJ1Y3QgbXVkX2RybV9nYWRnZXQgKm1kZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGZfbXVkX2RybV9jZWxsICpjaV90b19mX211ZF9kcm1fY2VsbChzdHJ1Y3QgY29uZmlnX2l0 ZW0gKml0ZW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSks IHN0cnVjdCBmX211ZF9kcm1fY2VsbCwgY2VsbC5ncm91cCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGZfbXVkX2RybV9jZWxsICpjZWxsX3RvX2ZfbXVkX2RybV9jZWxsKHN0cnVjdCBmX211 ZF9jZWxsICpjZWxsKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2VsbCwgc3RydWN0IGZfbXVk X2RybV9jZWxsLCBjZWxsKTsKK30KKworc3RhdGljIHZvaWQgZl9tdWRfZHJtX2VuYWJsZShzdHJ1 Y3QgZl9tdWRfY2VsbCAqY2VsbCkKK3sKKwlzdHJ1Y3QgZl9tdWRfZHJtX2NlbGwgKnBjZWxsID0g Y2VsbF90b19mX211ZF9kcm1fY2VsbChjZWxsKTsKKworCW11ZF9kcm1fZ2FkZ2V0X2VuYWJsZShw Y2VsbC0+bWRnKTsKK30KKworc3RhdGljIHZvaWQgZl9tdWRfZHJtX2Rpc2FibGUoc3RydWN0IGZf bXVkX2NlbGwgKmNlbGwpCit7CisJc3RydWN0IGZfbXVkX2RybV9jZWxsICpwY2VsbCA9IGNlbGxf dG9fZl9tdWRfZHJtX2NlbGwoY2VsbCk7CisKKwltdWRfZHJtX2dhZGdldF9kaXNhYmxlKHBjZWxs LT5tZGcpOworfQorCitzdGF0aWMgaW50IGZfbXVkX2RybV93cml0ZXJlZyhzdHJ1Y3QgZl9tdWRf Y2VsbCAqY2VsbCwgdW5zaWduZWQgaW50IHJlZ25yLAorCQkJICAgICAgY29uc3Qgdm9pZCAqYnVm LCBzaXplX3QgbGVuLCB1OCBjb21wcmVzc2lvbikKK3sKKwlzdHJ1Y3QgZl9tdWRfZHJtX2NlbGwg KnBjZWxsID0gY2VsbF90b19mX211ZF9kcm1fY2VsbChjZWxsKTsKKworCXJldHVybiBtdWRfZHJt X2dhZGdldF93cml0ZXJlZyhwY2VsbC0+bWRnLCByZWduciwgYnVmLCBsZW4sIGNvbXByZXNzaW9u KTsKK30KKworc3RhdGljIGludCBmX211ZF9kcm1fcmVhZHJlZyhzdHJ1Y3QgZl9tdWRfY2VsbCAq Y2VsbCwgdW5zaWduZWQgaW50IHJlZ25yLAorCQkJICAgICB2b2lkICpidWYsIHNpemVfdCAqbGVu LCB1OCBjb21wcmVzc2lvbikKK3sKKwlzdHJ1Y3QgZl9tdWRfZHJtX2NlbGwgKnBjZWxsID0gY2Vs bF90b19mX211ZF9kcm1fY2VsbChjZWxsKTsKKworCXJldHVybiBtdWRfZHJtX2dhZGdldF9yZWFk cmVnKHBjZWxsLT5tZGcsIHJlZ25yLCBidWYsIGxlbiwgY29tcHJlc3Npb24pOworfQorCitzdGF0 aWMgaW50IGZfbXVkX2RybV9iaW5kKHN0cnVjdCBmX211ZF9jZWxsICpjZWxsKQoreworCXN0cnVj dCBmX211ZF9kcm1fY2VsbCAqcGNlbGwgPSBjZWxsX3RvX2ZfbXVkX2RybV9jZWxsKGNlbGwpOwor CXN0cnVjdCBtdWRfZHJtX2dhZGdldCAqbWRnOworCWludCBkcm1fZGV2LCByZXQgPSAwOworCisJ cHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnBjZWxsLT5sb2NrKTsK Kwlkcm1fZGV2ID0gcGNlbGwtPmRybV9kZXY7CisJcHJpbnRrKCIgICAgZHJtX2Rldj0lZFxuIiwg cGNlbGwtPmRybV9kZXYpOworCXByaW50aygiICAgIGJhY2tsaWdodF9kZXY9JyVzJ1xuIiwgcGNl bGwtPmJhY2tsaWdodF9kZXYgPyBwY2VsbC0+YmFja2xpZ2h0X2RldiA6ICIiKTsKKworCW1kZyA9 IG11ZF9kcm1fZ2FkZ2V0X2luaXQoZHJtX2RldiwgY2VsbC0+b3BzLT5tYXhfdHJhbnNmZXJfc2l6 ZSk7CisJaWYgKElTX0VSUihtZGcpKSB7CisJCXJldCA9IFBUUl9FUlIobWRnKTsKKwkJZ290byBv dXQ7CisJfQorCisJcGNlbGwtPm1kZyA9IG1kZzsKKwlwY2VsbC0+cmVmY250Kys7CitvdXQ6CisJ bXV0ZXhfdW5sb2NrKCZwY2VsbC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCBmX211ZF9kcm1fdW5iaW5kKHN0cnVjdCBmX211ZF9jZWxsICpjZWxsKQoreworCXN0cnVj dCBmX211ZF9kcm1fY2VsbCAqcGNlbGwgPSBjZWxsX3RvX2ZfbXVkX2RybV9jZWxsKGNlbGwpOwor CisJcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnBjZWxsLT5sb2Nr KTsKKwlwY2VsbC0+cmVmY250LS07CisJbXV0ZXhfdW5sb2NrKCZwY2VsbC0+bG9jayk7Cit9CisK K0ZfTVVEX09QVF9JTlQoZl9tdWRfZHJtX2NlbGwsIGRybV9kZXYsIDAsIDYzKTsKK0ZfTVVEX09Q VF9TVFIoZl9tdWRfZHJtX2NlbGwsIGJhY2tsaWdodF9kZXYpOworCitzdGF0aWMgc3RydWN0IGNv bmZpZ2ZzX2F0dHJpYnV0ZSAqZl9tdWRfZHJtX2F0dHJzW10gPSB7CisJJmZfbXVkX2RybV9jZWxs X2F0dHJfZHJtX2RldiwKKwkmZl9tdWRfZHJtX2NlbGxfYXR0cl9iYWNrbGlnaHRfZGV2LAorCU5V TEwsCit9OworCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBmX211ZF9k cm1faXRlbV9vcHMgPSB7CisJLnJlbGVhc2UgPSBmX211ZF9jZWxsX2l0ZW1fcmVsZWFzZSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBmX211ZF9kcm1fZnVuY190 eXBlID0geworCS5jdF9pdGVtX29wcwk9ICZmX211ZF9kcm1faXRlbV9vcHMsCisJLmN0X2F0dHJz CT0gZl9tdWRfZHJtX2F0dHJzLAorCS5jdF9vd25lcgk9IFRISVNfTU9EVUxFLAorfTsKKworc3Rh dGljIHZvaWQgZl9tdWRfZHJtX2ZyZWUoc3RydWN0IGZfbXVkX2NlbGwgKmNlbGwpCit7CisJc3Ry dWN0IGZfbXVkX2RybV9jZWxsICpwY2VsbCA9IGNvbnRhaW5lcl9vZihjZWxsLCBzdHJ1Y3QgZl9t dWRfZHJtX2NlbGwsIGNlbGwpOworCisJcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKKworCW11 dGV4X2Rlc3Ryb3koJnBjZWxsLT5sb2NrKTsKKwlrZnJlZShwY2VsbC0+YmFja2xpZ2h0X2Rldik7 CisJa2ZyZWUocGNlbGwpOworfQorCitzdGF0aWMgc3RydWN0IGZfbXVkX2NlbGwgKmZfbXVkX2Ry bV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBmX211ZF9kcm1fY2VsbCAqcGNlbGw7CisKKwlwcmlu dGsoIiVzOlxuIiwgX19mdW5jX18pOworCisJcGNlbGwgPSBremFsbG9jKHNpemVvZigqcGNlbGwp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjZWxsKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCW11dGV4X2luaXQoJnBjZWxsLT5sb2NrKTsKKwljb25maWdfZ3JvdXBfaW5pdF90eXBlX25h bWUoJnBjZWxsLT5jZWxsLmdyb3VwLCAiIiwgJmZfbXVkX2RybV9mdW5jX3R5cGUpOworCisJcmV0 dXJuICZwY2VsbC0+Y2VsbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmX211ZF9jZWxsX29w cyBmX211ZF9kcm1fb3BzID0geworCS5uYW1lID0gIm11ZC1kcm0iLAorCS5vd25lciA9IFRISVNf TU9EVUxFLAorCisJLyoKKwkgKiBGSVhNRTogU3VwcG9ydCBpbnRlcnJ1cHQgZm9yIGNvbm5lY3Rv ciBob3RwbHVnIGV2ZW50CisJICogUG9sbGluZyBzaG91bGQgYmUgYSBmYWxsYmFjay4KKwkuaW50 ZXJydXB0X2ludGVydmFsX21zID0gMTAwMCwKKwkgKi8KKworCS5hbGxvYyA9IGZfbXVkX2RybV9h bGxvYywKKwkuZnJlZSA9IGZfbXVkX2RybV9mcmVlLAorCS5iaW5kID0gZl9tdWRfZHJtX2JpbmQs CisJLnVuYmluZCA9IGZfbXVkX2RybV91bmJpbmQsCisKKwkucmVndmFsX2J5dGVzID0gNCwKKwku bWF4X3RyYW5zZmVyX3NpemUgPSBLTUFMTE9DX01BWF9TSVpFLAorCS5jb21wcmVzc2lvbiA9IFJF R01BUF9VU0JfQ09NUFJFU1NJT05fTFo0LAorCisJLmVuYWJsZSA9IGZfbXVkX2RybV9lbmFibGUs CisJLmRpc2FibGUgPSBmX211ZF9kcm1fZGlzYWJsZSwKKwkucmVhZHJlZyA9IGZfbXVkX2RybV9y ZWFkcmVnLAorCS53cml0ZXJlZyA9IGZfbXVkX2RybV93cml0ZXJlZywKK307CisKK0RFQ0xBUkVf Rl9NVURfQ0VMTF9JTklUKGZfbXVkX2RybV9vcHMpOworCitNT0RVTEVfQVVUSE9SKCJOb3JhbGYg VHLDuG5uZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gCjIuMjMuMAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==