From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E9ABCCA9ECF for ; Fri, 1 Nov 2019 08:48:01 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B6D5021A49 for ; Fri, 1 Nov 2019 08:48:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hX6Bi2vM"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="JrW2gvUM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B6D5021A49 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Qrrt4x5r5pk64/qq4Oe5DR7zYR15bIkmzUO/tDHm5rs=; b=hX6Bi2vMFpnUXV W7meQa5Zv485+jri0X4sDXVh2VEED57z6gZV+5sDGQtiDuzSEqNrJa/2T+YP0F9chjXHJhddqIhMW 1czoS1kRhIQv40cLeJhesj0JHUlciF++9kHx0CezUubyCs58ZGCne2uO9UdRf8cA7R/CTxpkLxLu/ gI0/G/7QJ0Fx0mNRN5bTZK0hPmh2LAKP2P7t3sdvjfcDaMqU4aucWpMQc5U2S5xNeTValZ/TPcf87 x7KnV7Qzz4qEC526gWGxeowuQDyi1ML00B/O386S4uHWPdsh91RHvoY3koXIWeZnV5pZQEV6IIAfc oQiOOJIMumbMX4UvNyUA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iQSbA-0007fI-KV; Fri, 01 Nov 2019 08:48:00 +0000 Received: from lelv0143.ext.ti.com ([198.47.23.248]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iQSUl-0000k8-TG for linux-arm-kernel@lists.infradead.org; Fri, 01 Nov 2019 08:41:30 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA18fJp7021433; Fri, 1 Nov 2019 03:41:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572597679; bh=jCmR6jl98P7Yp/MXLWBAxovSmHce6yhPk3sOCjChJeg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=JrW2gvUM1kDoqNPUblmZTmOJbnlVCowJJ23Lh2P7PlQnMioH83kowANkpnL7Fk3wS mdY1dIFnmqbwy7HftACQhEFsyPQXEd2Fu/txefEhkQOY9NowR43AMYiC3x4txoExtY 3QPFGwvjztG0EHyojZ6l9l7NSc010f8Ll5Gpw5kE= Received: from DLEE109.ent.ti.com (dlee109.ent.ti.com [157.170.170.41]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xA18fJpl015722 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 1 Nov 2019 03:41:19 -0500 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE109.ent.ti.com (157.170.170.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 1 Nov 2019 03:41:06 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Fri, 1 Nov 2019 03:41:05 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA18eP8m036903; Fri, 1 Nov 2019 03:41:15 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v4 13/15] dmaengine: ti: New driver for K3 UDMA - split#5: dma_device callbacks 2 Date: Fri, 1 Nov 2019 10:41:33 +0200 Message-ID: <20191101084135.14811-14-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191101084135.14811-1-peter.ujfalusi@ti.com> References: <20191101084135.14811-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191101_014125_659283_CD020F18 X-CRM114-Status: GOOD ( 17.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOgpkZXZpY2VfcHJlcF9zbGF2ZV9zZyBh bmQgZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0aW5nCnBhY2tl dCBhbmQgVFIgY2hhbm5lbHMuCgpETUEgZHJpdmVyIGZvcgpUZXhhcyBJbnN0cnVtZW50cyBLMyBO QVZTUyBVbmlmaWVkIERNQSDigJMgUGVyaXBoZXJhbCBSb290IENvbXBsZXggKFVETUEtUCkKClRo ZSBVRE1BLVAgaXMgaW50ZW5kZWQgdG8gcGVyZm9ybSBzaW1pbGFyIChidXQgc2lnbmlmaWNhbnRs eSB1cGdyYWRlZCkgZnVuY3Rpb25zCmFzIHRoZSBwYWNrZXQtb3JpZW50ZWQgRE1BIHVzZWQgb24g cHJldmlvdXMgU29DIGRldmljZXMuIFRoZSBVRE1BLVAgbW9kdWxlCnN1cHBvcnRzIHRoZSB0cmFu c21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiB2YXJpb3VzIHBhY2tldCB0eXBlcy4gVGhlIFVETUEt UCBpcwphcmNoaXRlY3RlZCB0byBmYWNpbGl0YXRlIHRoZSBzZWdtZW50YXRpb24gYW5kIHJlYXNz ZW1ibHkgb2YgU29DIERNQSBkYXRhCnN0cnVjdHVyZSBjb21wbGlhbnQgcGFja2V0cyB0by9mcm9t IHNtYWxsZXIgZGF0YSBibG9ja3MgdGhhdCBhcmUgbmF0aXZlbHkKY29tcGF0aWJsZSB3aXRoIHRo ZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb2YgZWFjaCBjb25uZWN0ZWQgcGVyaXBoZXJhbC4gTXVs dGlwbGUKVHggYW5kIFJ4IGNoYW5uZWxzIGFyZSBwcm92aWRlZCB3aXRoaW4gdGhlIERNQSB3aGlj aCBhbGxvdyBtdWx0aXBsZSBzZWdtZW50YXRpb24Kb3IgcmVhc3NlbWJseSBvcGVyYXRpb25zIHRv IGJlIG9uZ29pbmcuIFRoZSBETUEgY29udHJvbGxlciBtYWludGFpbnMgc3RhdGUKaW5mb3JtYXRp b24gZm9yIGVhY2ggb2YgdGhlIGNoYW5uZWxzIHdoaWNoIGFsbG93cyBwYWNrZXQgc2VnbWVudGF0 aW9uIGFuZApyZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgdGltZSBkaXZpc2lvbiBtdWx0aXBs ZXhlZCBiZXR3ZWVuIGNoYW5uZWxzIGluIG9yZGVyCnRvIHNoYXJlIHRoZSB1bmRlcmx5aW5nIERN QSBoYXJkd2FyZS4gQW4gZXh0ZXJuYWwgRE1BIHNjaGVkdWxlciBpcyB1c2VkIHRvCmNvbnRyb2wg dGhlIG9yZGVyaW5nIGFuZCByYXRlIGF0IHdoaWNoIHRoaXMgbXVsdGlwbGV4aW5nIG9jY3VycyBm b3IgVHJhbnNtaXQKb3BlcmF0aW9ucy4gVGhlIG9yZGVyaW5nIGFuZCByYXRlIG9mIFJlY2VpdmUg b3BlcmF0aW9ucyBpcyBpbmRpcmVjdGx5IGNvbnRyb2xsZWQKYnkgdGhlIG9yZGVyIGluIHdoaWNo IGJsb2NrcyBhcmUgcHVzaGVkIGludG8gdGhlIERNQSBvbiB0aGUgUnggUFNJLUwgaW50ZXJmYWNl LgoKVGhlIFVETUEtUCBhbHNvIHN1cHBvcnRzIGFjdGluZyBhcyBib3RoIGEgVVRDIGFuZCBVRE1B LUMgZm9yIGl0cyBpbnRlcm5hbApjaGFubmVscy4gQ2hhbm5lbHMgaW4gdGhlIFVETUEtUCBjYW4g YmUgY29uZmlndXJlZCB0byBiZSBlaXRoZXIgUGFja2V0LUJhc2VkIG9yClRoaXJkLVBhcnR5IGNo YW5uZWxzIG9uIGEgY2hhbm5lbCBieSBjaGFubmVsIGJhc2lzLgoKVGhlIGluaXRpYWwgZHJpdmVy IHN1cHBvcnRzOgotIE1FTV9UT19NRU0gKFRSIG1vZGUpCi0gREVWX1RPX01FTSAoUGFja2V0IC8g VFIgbW9kZSkKLSBNRU1fVE9fREVWIChQYWNrZXQgLyBUUiBtb2RlKQotIEN5Y2xpYyAoUGFja2V0 IC8gVFIgbW9kZSkKLSBNZXRhZGF0YSBmb3IgZGVzY3JpcHRvcnMKClNpZ25lZC1vZmYtYnk6IFBl dGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Ci0tLQogZHJpdmVycy9kbWEvdGkv azMtdWRtYS5jIHwgNjk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDY5NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEvdGkvazMtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCmluZGV4IDZiZDM0NmZi YWE1OS4uNGE5NTA5NmUyZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMK KysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCkBAIC0xODIyLDYgKzE4MjIsNzAyIEBAIHN0 YXRpYyBpbnQgdWRtYV9zbGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCXJldHVy biAwOwogfQogCitzdGF0aWMgc3RydWN0IHVkbWFfZGVzYyAqdWRtYV9hbGxvY190cl9kZXNjKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjLAorCQkJCQkgICAgc2l6ZV90IHRyX3NpemUsIGludCB0cl9jb3Vu dCwKKwkJCQkJICAgIGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0 IHVkbWFfaHdkZXNjICpod2Rlc2M7CisJc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QgKnRyX2Rlc2M7 CisJc3RydWN0IHVkbWFfZGVzYyAqZDsKKwl1MzIgcmVsb2FkX2NvdW50ID0gMDsKKwl1MzIgcmlu Z19pZDsKKworCXN3aXRjaCAodHJfc2l6ZSkgeworCWNhc2UgMTY6CisJY2FzZSAzMjoKKwljYXNl IDY0OgorCWNhc2UgMTI4OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHVjLT51ZC0+ ZGV2LCAiVW5zdXBwb3J0ZWQgVFIgc2l6ZSBvZiAlenVcbiIsIHRyX3NpemUpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkvKiBXZSBoYXZlIG9ubHkgb25lIGRlc2NyaXB0b3IgY29udGFpbmluZyBt dWx0aXBsZSBUUnMgKi8KKwlkID0ga3phbGxvYyhzaXplb2YoKmQpICsgc2l6ZW9mKGQtPmh3ZGVz Y1swXSksIEdGUF9BVE9NSUMpOworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkLT5zZ2xl biA9IHRyX2NvdW50OworCisJZC0+aHdkZXNjX2NvdW50ID0gMTsKKwlod2Rlc2MgPSAmZC0+aHdk ZXNjWzBdOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBETUEgcmluZyBkZXNjcmlwdG9yICov CisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJaHdkZXNjLT5jcHBpNV9kZXNjX3NpemUgPSB1 Yy0+aGRlc2Nfc2l6ZTsKKwkJaHdkZXNjLT5jcHBpNV9kZXNjX3ZhZGRyID0gZG1hX3Bvb2xfemFs bG9jKHVjLT5oZGVzY19wb29sLAorCQkJCQkJR0ZQX0FUT01JQywKKwkJCQkJCSZod2Rlc2MtPmNw cGk1X2Rlc2NfcGFkZHIpOworCX0gZWxzZSB7CisJCWh3ZGVzYy0+Y3BwaTVfZGVzY19zaXplID0g Y3BwaTVfdHJkZXNjX2NhbGNfc2l6ZSh0cl9zaXplLAorCQkJCQkJCQkgdHJfY291bnQpOworCQlo d2Rlc2MtPmNwcGk1X2Rlc2Nfc2l6ZSA9IEFMSUdOKGh3ZGVzYy0+Y3BwaTVfZGVzY19zaXplLAor CQkJCQkJdWMtPnVkLT5kZXNjX2FsaWduKTsKKwkJaHdkZXNjLT5jcHBpNV9kZXNjX3ZhZGRyID0g ZG1hX2FsbG9jX2NvaGVyZW50KHVjLT51ZC0+ZGV2LAorCQkJCQkJaHdkZXNjLT5jcHBpNV9kZXNj X3NpemUsCisJCQkJCQkmaHdkZXNjLT5jcHBpNV9kZXNjX3BhZGRyLAorCQkJCQkJR0ZQX0FUT01J Qyk7CisJfQorCisJaWYgKCFod2Rlc2MtPmNwcGk1X2Rlc2NfdmFkZHIpIHsKKwkJa2ZyZWUoZCk7 CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFN0YXJ0IG9mIHRoZSBUUiByZXEgcmVjb3JkcyAq LworCWh3ZGVzYy0+dHJfcmVxX2Jhc2UgPSBod2Rlc2MtPmNwcGk1X2Rlc2NfdmFkZHIgKyB0cl9z aXplOworCS8qIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIFRSIHJlc3BvbnNlIGFycmF5ICovCisJaHdk ZXNjLT50cl9yZXNwX2Jhc2UgPSBod2Rlc2MtPnRyX3JlcV9iYXNlICsgdHJfc2l6ZSAqIHRyX2Nv dW50OworCisJdHJfZGVzYyA9IGh3ZGVzYy0+Y3BwaTVfZGVzY192YWRkcjsKKworCWlmICh1Yy0+ Y3ljbGljKQorCQlyZWxvYWRfY291bnQgPSBDUFBJNV9JTkZPMF9UUkRFU0NfUkxEQ05UX0lORklO SVRFOworCisJaWYgKGRpciA9PSBETUFfREVWX1RPX01FTSkKKwkJcmluZ19pZCA9IGszX3Jpbmdh Y2NfZ2V0X3JpbmdfaWQodWMtPnJjaGFuLT5yX3JpbmcpOworCWVsc2UKKwkJcmluZ19pZCA9IGsz X3JpbmdhY2NfZ2V0X3JpbmdfaWQodWMtPnRjaGFuLT50Y19yaW5nKTsKKworCWNwcGk1X3RyZGVz Y19pbml0KHRyX2Rlc2MsIHRyX2NvdW50LCB0cl9zaXplLCAwLCByZWxvYWRfY291bnQpOworCWNw cGk1X2Rlc2Nfc2V0X3BrdGlkcyh0cl9kZXNjLCB1Yy0+aWQsIDB4M2ZmZik7CisJY3BwaTVfZGVz Y19zZXRfcmV0cG9saWN5KHRyX2Rlc2MsIDAsIHJpbmdfaWQpOworCisJcmV0dXJuIGQ7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgdWRtYV9kZXNjICp1ZG1hX3ByZXBfc2xhdmVfc2dfdHIoCisJc3RydWN0 IHVkbWFfY2hhbiAqdWMsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2ds ZW4sCisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwgdW5zaWduZWQgbG9uZyB0eF9m bGFncywgdm9pZCAqY29udGV4dCkKK3sKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lk dGg7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VudDsKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkOwor CXNpemVfdCB0cl9zaXplOworCXN0cnVjdCBjcHBpNV90cl90eXBlMV90ICp0cl9yZXEgPSBOVUxM OworCXVuc2lnbmVkIGludCBpOworCXUzMiBidXJzdDsKKworCWlmIChkaXIgPT0gRE1BX0RFVl9U T19NRU0pIHsKKwkJZGV2X3dpZHRoID0gdWMtPmNmZy5zcmNfYWRkcl93aWR0aDsKKwkJYnVyc3Qg PSB1Yy0+Y2ZnLnNyY19tYXhidXJzdDsKKwl9IGVsc2UgaWYgKGRpciA9PSBETUFfTUVNX1RPX0RF VikgeworCQlkZXZfd2lkdGggPSB1Yy0+Y2ZnLmRzdF9hZGRyX3dpZHRoOworCQlidXJzdCA9IHVj LT5jZmcuZHN0X21heGJ1cnN0OworCX0gZWxzZSB7CisJCWRldl9lcnIodWMtPnVkLT5kZXYsICIl czogYmFkIGRpcmVjdGlvbj9cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWYgKCFidXJzdCkKKwkJYnVyc3QgPSAxOworCisJLyogTm93IGFsbG9jYXRlIGFuZCBzZXR1cCB0 aGUgZGVzY3JpcHRvci4gKi8KKwl0cl9zaXplID0gc2l6ZW9mKHN0cnVjdCBjcHBpNV90cl90eXBl MV90KTsKKwlkID0gdWRtYV9hbGxvY190cl9kZXNjKHVjLCB0cl9zaXplLCBzZ2xlbiwgZGlyKTsK KwlpZiAoIWQpCisJCXJldHVybiBOVUxMOworCisJZC0+c2dsZW4gPSBzZ2xlbjsKKworCXRyX3Jl cSA9IChzdHJ1Y3QgY3BwaTVfdHJfdHlwZTFfdCAqKWQtPmh3ZGVzY1swXS50cl9yZXFfYmFzZTsK Kwlmb3JfZWFjaF9zZyhzZ2wsIHNnZW50LCBzZ2xlbiwgaSkgeworCQlkLT5yZXNpZHVlICs9IHNn X2RtYV9sZW4oc2dlbnQpOworCisJCWNwcGk1X3RyX2luaXQoJnRyX3JlcVtpXS5mbGFncywgQ1BQ STVfVFJfVFlQRTEsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIENQUEk1X1RSX0VWRU5UX1NJWkVf Q09NUExFVElPTiwgMCk7CisJCWNwcGk1X3RyX2NzZl9zZXQoJnRyX3JlcVtpXS5mbGFncywgQ1BQ STVfVFJfQ1NGX1NVUFJfRVZUKTsKKworCQl0cl9yZXFbaV0uYWRkciA9IHNnX2RtYV9hZGRyZXNz KHNnZW50KTsKKwkJdHJfcmVxW2ldLmljbnQwID0gYnVyc3QgKiBkZXZfd2lkdGg7CisJCXRyX3Jl cVtpXS5kaW0xID0gYnVyc3QgKiBkZXZfd2lkdGg7CisJCXRyX3JlcVtpXS5pY250MSA9IHNnX2Rt YV9sZW4oc2dlbnQpIC8gdHJfcmVxW2ldLmljbnQwOworCX0KKworCWNwcGk1X3RyX2NzZl9zZXQo JnRyX3JlcVtpIC0gMV0uZmxhZ3MsIENQUEk1X1RSX0NTRl9FT1ApOworCisJcmV0dXJuIGQ7Cit9 CisKK3N0YXRpYyBpbnQgdWRtYV9jb25maWd1cmVfc3RhdGljdHIoc3RydWN0IHVkbWFfY2hhbiAq dWMsIHN0cnVjdCB1ZG1hX2Rlc2MgKmQsCisJCQkJICAgZW51bSBkbWFfc2xhdmVfYnVzd2lkdGgg ZGV2X3dpZHRoLAorCQkJCSAgIHUxNiBlbGNudCkKK3sKKwlpZiAodWMtPmVwX3R5cGUgIT0gUFNJ TF9FUF9QRE1BX1hZKQorCQlyZXR1cm4gMDsKKworCS8qIEJ1cyB3aWR0aCB0cmFuc2xhdGVzIHRv IHRoZSBlbGVtZW50IHNpemUgKEVTKSAqLworCXN3aXRjaCAoZGV2X3dpZHRoKSB7CisJY2FzZSBE TUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOgorCQlkLT5zdGF0aWNfdHIuZWxzaXplID0gMDsKKwkJ YnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJZC0+c3RhdGljX3Ry LmVsc2l6ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzNfQllURVM6 CisJCWQtPnN0YXRpY190ci5lbHNpemUgPSAyOworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9C VVNXSURUSF80X0JZVEVTOgorCQlkLT5zdGF0aWNfdHIuZWxzaXplID0gMzsKKwkJYnJlYWs7CisJ Y2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfOF9CWVRFUzoKKwkJZC0+c3RhdGljX3RyLmVsc2l6ZSA9 IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIG5vdCByZWFjaGVkICovCisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWQtPnN0YXRpY190ci5lbGNudCA9IGVsY250OworCisJLyoKKwkgKiBQRE1B IG11c3QgdG8gY2xvc2UgdGhlIHBhY2tldCB3aGVuIHRoZSBjaGFubmVsIGlzIGluIHBhY2tldCBt b2RlLgorCSAqIEZvciBUUiBtb2RlIHdoZW4gdGhlIGNoYW5uZWwgaXMgbm90IGN5Y2xpYyB3ZSBh bHNvIG5lZWQgUERNQSB0byBjbG9zZQorCSAqIHRoZSBwYWNrZXQgb3RoZXJ3aXNlIHRoZSB0cmFu c2ZlciB3aWxsIHN0YWxsIGJlY2F1c2UgUERNQSBob2xkcyBvbgorCSAqIHRoZSBkYXRhIGl0IGhh cyByZWNlaXZlZCBmcm9tIHRoZSBwZXJpcGhlcmFsLgorCSAqLworCWlmICh1Yy0+cGt0X21vZGUg fHwgIXVjLT5jeWNsaWMpIHsKKwkJdW5zaWduZWQgaW50IGRpdiA9IGRldl93aWR0aCAqIGVsY250 OworCisJCWlmICh1Yy0+Y3ljbGljKQorCQkJZC0+c3RhdGljX3RyLmJzdGNudCA9IGQtPnJlc2lk dWUgLyBkLT5zZ2xlbiAvIGRpdjsKKwkJZWxzZQorCQkJZC0+c3RhdGljX3RyLmJzdGNudCA9IGQt PnJlc2lkdWUgLyBkaXY7CisKKwkJaWYgKHVjLT5kaXIgPT0gRE1BX0RFVl9UT19NRU0gJiYKKwkJ ICAgIGQtPnN0YXRpY190ci5ic3RjbnQgPiB1Yy0+dWQtPm1hdGNoX2RhdGEtPnN0YXRpY3RyX3pf bWFzaykKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWQtPnN0YXRpY190ci5ic3Rj bnQgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVkbWFfZGVzYyAq dWRtYV9wcmVwX3NsYXZlX3NnX3BrdCgKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1Yywgc3RydWN0IHNj YXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ2xlbiwKKwllbnVtIGRtYV90cmFuc2Zlcl9k aXJlY3Rpb24gZGlyLCB1bnNpZ25lZCBsb25nIHR4X2ZsYWdzLCB2b2lkICpjb250ZXh0KQorewor CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbnQ7CisJc3RydWN0IGNwcGk1X2hvc3RfZGVzY190ICpo X2Rlc2MgPSBOVUxMOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQ7CisJdTMyIHJpbmdfaWQ7CisJdW5z aWduZWQgaW50IGk7CisKKwlkID0ga3phbGxvYyhzaXplb2YoKmQpICsgc2dsZW4gKiBzaXplb2Yo ZC0+aHdkZXNjWzBdKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkKQorCQlyZXR1cm4gTlVMTDsKKwor CWQtPnNnbGVuID0gc2dsZW47CisJZC0+aHdkZXNjX2NvdW50ID0gc2dsZW47CisKKwlpZiAoZGly ID09IERNQV9ERVZfVE9fTUVNKQorCQlyaW5nX2lkID0gazNfcmluZ2FjY19nZXRfcmluZ19pZCh1 Yy0+cmNoYW4tPnJfcmluZyk7CisJZWxzZQorCQlyaW5nX2lkID0gazNfcmluZ2FjY19nZXRfcmlu Z19pZCh1Yy0+dGNoYW4tPnRjX3JpbmcpOworCisJZm9yX2VhY2hfc2coc2dsLCBzZ2VudCwgc2ds ZW4sIGkpIHsKKwkJc3RydWN0IHVkbWFfaHdkZXNjICpod2Rlc2MgPSAmZC0+aHdkZXNjW2ldOwor CQlkbWFfYWRkcl90IHNnX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VudCk7CisJCXN0cnVjdCBj cHBpNV9ob3N0X2Rlc2NfdCAqZGVzYzsKKwkJc2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2dl bnQpOworCisJCWh3ZGVzYy0+Y3BwaTVfZGVzY192YWRkciA9IGRtYV9wb29sX3phbGxvYyh1Yy0+ aGRlc2NfcG9vbCwKKwkJCQkJCUdGUF9BVE9NSUMsCisJCQkJCQkmaHdkZXNjLT5jcHBpNV9kZXNj X3BhZGRyKTsKKwkJaWYgKCFod2Rlc2MtPmNwcGk1X2Rlc2NfdmFkZHIpIHsKKwkJCWRldl9lcnIo dWMtPnVkLT5kZXYsCisJCQkJImRlc2NyaXB0b3IlZCBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgaSk7 CisKKwkJCXVkbWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQkJa2ZyZWUoZCk7CisJCQlyZXR1cm4g TlVMTDsKKwkJfQorCisJCWQtPnJlc2lkdWUgKz0gc2dfbGVuOworCQlod2Rlc2MtPmNwcGk1X2Rl c2Nfc2l6ZSA9IHVjLT5oZGVzY19zaXplOworCQlkZXNjID0gaHdkZXNjLT5jcHBpNV9kZXNjX3Zh ZGRyOworCisJCWlmIChpID09IDApIHsKKwkJCWNwcGk1X2hkZXNjX2luaXQoZGVzYywgMCwgMCk7 CisJCQkvKiBGbG93IGFuZCBQYWNrZWQgSUQgKi8KKwkJCWNwcGk1X2Rlc2Nfc2V0X3BrdGlkcygm ZGVzYy0+aGRyLCB1Yy0+aWQsIDB4M2ZmZik7CisJCQljcHBpNV9kZXNjX3NldF9yZXRwb2xpY3ko JmRlc2MtPmhkciwgMCwgcmluZ19pZCk7CisJCX0gZWxzZSB7CisJCQljcHBpNV9oZGVzY19yZXNl dF9oYmRlc2MoZGVzYyk7CisJCQljcHBpNV9kZXNjX3NldF9yZXRwb2xpY3koJmRlc2MtPmhkciwg MCwgMHhmZmZmKTsKKwkJfQorCisJCS8qIGF0dGFjaCB0aGUgc2cgYnVmZmVyIHRvIHRoZSBkZXNj cmlwdG9yICovCisJCWNwcGk1X2hkZXNjX2F0dGFjaF9idWYoZGVzYywgc2dfYWRkciwgc2dfbGVu LCBzZ19hZGRyLCBzZ19sZW4pOworCisJCS8qIEF0dGFjaCBsaW5rIGFzIGhvc3QgYnVmZmVyIGRl c2NyaXB0b3IgKi8KKwkJaWYgKGhfZGVzYykKKwkJCWNwcGk1X2hkZXNjX2xpbmtfaGJkZXNjKGhf ZGVzYywKKwkJCQkJCWh3ZGVzYy0+Y3BwaTVfZGVzY19wYWRkcik7CisKKwkJaWYgKGRpciA9PSBE TUFfTUVNX1RPX0RFVikKKwkJCWhfZGVzYyA9IGRlc2M7CisJfQorCisJaWYgKGQtPnJlc2lkdWUg Pj0gU1pfNE0pIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCSIlczogVHJhbnNmZXIgc2l6 ZSAldSBpcyBvdmVyIHRoZSBzdXBwb3J0ZWQgNE0gcmFuZ2VcbiIsCisJCQlfX2Z1bmNfXywgZC0+ cmVzaWR1ZSk7CisJCXVkbWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQlrZnJlZShkKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJaF9kZXNjID0gZC0+aHdkZXNjWzBdLmNwcGk1X2Rlc2NfdmFkZHI7 CisJY3BwaTVfaGRlc2Nfc2V0X3BrdGxlbihoX2Rlc2MsIGQtPnJlc2lkdWUpOworCisJcmV0dXJu IGQ7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9hdHRhY2hfbWV0YWRhdGEoc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCXZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJ c3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlzdHJ1Y3QgdWRtYV9j aGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3QgY3BwaTVfaG9zdF9k ZXNjX3QgKmhfZGVzYzsKKwl1MzIgcHNkX3NpemUgPSBsZW47CisJdTMyIGZsYWdzID0gMDsKKwor CWlmICghdWMtPnBrdF9tb2RlIHx8ICF1Yy0+bWV0YWRhdGFfc2l6ZSkKKwkJcmV0dXJuIC1FTk9U U1VQUDsKKworCWlmICghZGF0YSB8fCBsZW4gPiB1Yy0+bWV0YWRhdGFfc2l6ZSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlpZiAodWMtPm5lZWRzX2VwaWIgJiYgbGVuIDwgQ1BQSTVfSU5GTzBfSERF U0NfRVBJQl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhfZGVzYyA9IGQtPmh3ZGVzY1sw XS5jcHBpNV9kZXNjX3ZhZGRyOworCWlmIChkLT5kaXIgPT0gRE1BX01FTV9UT19ERVYpCisJCW1l bWNweShoX2Rlc2MtPmVwaWIsIGRhdGEsIGxlbik7CisKKwlpZiAodWMtPm5lZWRzX2VwaWIpCisJ CXBzZF9zaXplIC09IENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0laRTsKKworCWQtPm1ldGFkYXRh ID0gZGF0YTsKKwlkLT5tZXRhZGF0YV9zaXplID0gbGVuOworCWlmICh1Yy0+bmVlZHNfZXBpYikK KwkJZmxhZ3MgfD0gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9QUkVTRU5UOworCisJY3BwaTVfaGRl c2NfdXBkYXRlX2ZsYWdzKGhfZGVzYywgZmxhZ3MpOworCWNwcGk1X2hkZXNjX3VwZGF0ZV9wc2Rh dGFfc2l6ZShoX2Rlc2MsIHBzZF9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCAqdWRtYV9nZXRfbWV0YWRhdGFfcHRyKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq ZGVzYywKKwkJCQkgICBzaXplX3QgKnBheWxvYWRfbGVuLCBzaXplX3QgKm1heF9sZW4pCit7CisJ c3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlzdHJ1Y3QgdWRtYV9j aGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3QgY3BwaTVfaG9zdF9k ZXNjX3QgKmhfZGVzYzsKKworCWlmICghdWMtPnBrdF9tb2RlIHx8ICF1Yy0+bWV0YWRhdGFfc2l6 ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKKworCWhfZGVzYyA9IGQtPmh3ZGVzY1sw XS5jcHBpNV9kZXNjX3ZhZGRyOworCisJKm1heF9sZW4gPSB1Yy0+bWV0YWRhdGFfc2l6ZTsKKwor CSpwYXlsb2FkX2xlbiA9IGNwcGk1X2hkZXNjX2VwaWJfcHJlc2VudCgmaF9kZXNjLT5oZHIpID8K KwkJICAgICAgIENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0laRSA6IDA7CisJKnBheWxvYWRfbGVu ICs9IGNwcGk1X2hkZXNjX2dldF9wc2RhdGFfc2l6ZShoX2Rlc2MpOworCisJcmV0dXJuIGhfZGVz Yy0+ZXBpYjsKK30KKworc3RhdGljIGludCB1ZG1hX3NldF9tZXRhZGF0YV9sZW4oc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCSBzaXplX3QgcGF5bG9hZF9sZW4pCit7 CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlzdHJ1Y3QgdWRt YV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3QgY3BwaTVfaG9z dF9kZXNjX3QgKmhfZGVzYzsKKwl1MzIgcHNkX3NpemUgPSBwYXlsb2FkX2xlbjsKKwl1MzIgZmxh Z3MgPSAwOworCisJaWYgKCF1Yy0+cGt0X21vZGUgfHwgIXVjLT5tZXRhZGF0YV9zaXplKQorCQly ZXR1cm4gLUVOT1RTVVBQOworCisJaWYgKHBheWxvYWRfbGVuID4gdWMtPm1ldGFkYXRhX3NpemUp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVjLT5uZWVkc19lcGliICYmIHBheWxvYWRfbGVu IDwgQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhf ZGVzYyA9IGQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyOworCisJaWYgKHVjLT5uZWVkc19l cGliKSB7CisJCXBzZF9zaXplIC09IENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0laRTsKKwkJZmxh Z3MgfD0gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9QUkVTRU5UOworCX0KKworCWNwcGk1X2hkZXNj X3VwZGF0ZV9mbGFncyhoX2Rlc2MsIGZsYWdzKTsKKwljcHBpNV9oZGVzY191cGRhdGVfcHNkYXRh X3NpemUoaF9kZXNjLCBwc2Rfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVj dCBkbWFfZGVzY3JpcHRvcl9tZXRhZGF0YV9vcHMgbWV0YWRhdGFfb3BzID0geworCS5hdHRhY2gg PSB1ZG1hX2F0dGFjaF9tZXRhZGF0YSwKKwkuZ2V0X3B0ciA9IHVkbWFfZ2V0X21ldGFkYXRhX3B0 ciwKKwkuc2V0X2xlbiA9IHVkbWFfc2V0X21ldGFkYXRhX2xlbiwKK307CisKK3N0YXRpYyBzdHJ1 Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnVkbWFfcHJlcF9zbGF2ZV9zZygKKwlzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2ds ZW4sCisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwgdW5zaWduZWQgbG9uZyB0eF9m bGFncywgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFf Y2hhbihjaGFuKTsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lkdGg7CisJc3RydWN0 IHVkbWFfZGVzYyAqZDsKKwl1MzIgYnVyc3Q7CisKKwlpZiAoZGlyICE9IHVjLT5kaXIpIHsKKwkJ ZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwKKwkJCSIlczogY2hhbiVkIGlzIGZvciAlcywgbm90 IHN1cHBvcnRpbmcgJXNcbiIsCisJCQlfX2Z1bmNfXywgdWMtPmlkLCB1ZG1hX2dldF9kaXJfdGV4 dCh1Yy0+ZGlyKSwKKwkJCXVkbWFfZ2V0X2Rpcl90ZXh0KGRpcikpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlpZiAoZGlyID09IERNQV9ERVZfVE9fTUVNKSB7CisJCWRldl93aWR0aCA9IHVjLT5j Zmcuc3JjX2FkZHJfd2lkdGg7CisJCWJ1cnN0ID0gdWMtPmNmZy5zcmNfbWF4YnVyc3Q7CisJfSBl bHNlIGlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJZGV2X3dpZHRoID0gdWMtPmNmZy5k c3RfYWRkcl93aWR0aDsKKwkJYnVyc3QgPSB1Yy0+Y2ZnLmRzdF9tYXhidXJzdDsKKwl9IGVsc2Ug eworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiJXM6IGJhZCBkaXJlY3Rpb24/XG4iLCBf X2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghYnVyc3QpCisJCWJ1cnN0ID0g MTsKKworCWlmICh1Yy0+cGt0X21vZGUpCisJCWQgPSB1ZG1hX3ByZXBfc2xhdmVfc2dfcGt0KHVj LCBzZ2wsIHNnbGVuLCBkaXIsIHR4X2ZsYWdzLAorCQkJCQkgICBjb250ZXh0KTsKKwllbHNlCisJ CWQgPSB1ZG1hX3ByZXBfc2xhdmVfc2dfdHIodWMsIHNnbCwgc2dsZW4sIGRpciwgdHhfZmxhZ3Ms CisJCQkJCSAgY29udGV4dCk7CisKKwlpZiAoIWQpCisJCXJldHVybiBOVUxMOworCisJZC0+ZGly ID0gZGlyOworCWQtPmRlc2NfaWR4ID0gMDsKKwlkLT50cl9pZHggPSAwOworCisJLyogc3RhdGlj IFRSIGZvciByZW1vdGUgUERNQSAqLworCWlmICh1ZG1hX2NvbmZpZ3VyZV9zdGF0aWN0cih1Yywg ZCwgZGV2X3dpZHRoLCBidXJzdCkpIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCSIlczog U3RhdGljVFIgWiBpcyBsaW10ZWQgdG8gbWF4aW11bSA0MDk1ICgldSlcbiIsCisJCQlfX2Z1bmNf XywgZC0+c3RhdGljX3RyLmJzdGNudCk7CisKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1YywgZCk7CisJ CWtmcmVlKGQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodWMtPm1ldGFkYXRhX3NpemUp CisJCWQtPnZkLnR4Lm1ldGFkYXRhX29wcyA9ICZtZXRhZGF0YV9vcHM7CisKKwlyZXR1cm4gdmNo YW5fdHhfcHJlcCgmdWMtPnZjLCAmZC0+dmQsIHR4X2ZsYWdzKTsKK30KKworc3RhdGljIHN0cnVj dCB1ZG1hX2Rlc2MgKnVkbWFfcHJlcF9kbWFfY3ljbGljX3RyKAorCXN0cnVjdCB1ZG1hX2NoYW4g KnVjLCBkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwKKwlzaXplX3QgcGVyaW9k X2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwgdW5zaWduZWQgbG9uZyBmbGFn cykKK3sKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lkdGg7CisJc3RydWN0IHVkbWFf ZGVzYyAqZDsKKwlzaXplX3QgdHJfc2l6ZTsKKwlzdHJ1Y3QgY3BwaTVfdHJfdHlwZTFfdCAqdHJf cmVxOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBwZXJpb2RzID0gYnVmX2xlbiAv IHBlcmlvZF9sZW47CisJdTMyIGJ1cnN0OworCisJaWYgKGRpciA9PSBETUFfREVWX1RPX01FTSkg eworCQlkZXZfd2lkdGggPSB1Yy0+Y2ZnLnNyY19hZGRyX3dpZHRoOworCQlidXJzdCA9IHVjLT5j Zmcuc3JjX21heGJ1cnN0OworCX0gZWxzZSBpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKSB7CisJ CWRldl93aWR0aCA9IHVjLT5jZmcuZHN0X2FkZHJfd2lkdGg7CisJCWJ1cnN0ID0gdWMtPmNmZy5k c3RfbWF4YnVyc3Q7CisJfSBlbHNlIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwgIiVzOiBiYWQg ZGlyZWN0aW9uP1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWJ1 cnN0KQorCQlidXJzdCA9IDE7CisKKwkvKiBOb3cgYWxsb2NhdGUgYW5kIHNldHVwIHRoZSBkZXNj cmlwdG9yLiAqLworCXRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X3RyX3R5cGUxX3QpOwor CWQgPSB1ZG1hX2FsbG9jX3RyX2Rlc2ModWMsIHRyX3NpemUsIHBlcmlvZHMsIGRpcik7CisJaWYg KCFkKQorCQlyZXR1cm4gTlVMTDsKKworCXRyX3JlcSA9IChzdHJ1Y3QgY3BwaTVfdHJfdHlwZTFf dCAqKWQtPmh3ZGVzY1swXS50cl9yZXFfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgcGVyaW9kczsg aSsrKSB7CisJCWNwcGk1X3RyX2luaXQoJnRyX3JlcVtpXS5mbGFncywgQ1BQSTVfVFJfVFlQRTEs IGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIENQUEk1X1RSX0VWRU5UX1NJWkVfQ09NUExFVElPTiwg MCk7CisKKwkJdHJfcmVxW2ldLmFkZHIgPSBidWZfYWRkciArIHBlcmlvZF9sZW4gKiBpOworCQl0 cl9yZXFbaV0uaWNudDAgPSBkZXZfd2lkdGg7CisJCXRyX3JlcVtpXS5pY250MSA9IHBlcmlvZF9s ZW4gLyBkZXZfd2lkdGg7CisJCXRyX3JlcVtpXS5kaW0xID0gZGV2X3dpZHRoOworCisJCWlmICgh KGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKSkKKwkJCWNwcGk1X3RyX2NzZl9zZXQoJnRyX3Jl cVtpXS5mbGFncywKKwkJCQkJIENQUEk1X1RSX0NTRl9TVVBSX0VWVCk7CisJfQorCisJcmV0dXJu IGQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9kZXNjICp1ZG1hX3ByZXBfZG1hX2N5Y2xpY19w a3QoCisJc3RydWN0IHVkbWFfY2hhbiAqdWMsIGRtYV9hZGRyX3QgYnVmX2FkZHIsIHNpemVfdCBi dWZfbGVuLAorCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24g ZGlyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQ7CisJdTMy IHJpbmdfaWQ7CisJaW50IGk7CisJaW50IHBlcmlvZHMgPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsK KworCWlmIChwZXJpb2RzID4gKEszX1VETUFfREVGQVVMVF9SSU5HX1NJWkUgLSAxKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlpZiAocGVyaW9kX2xlbiA+IDB4M0ZGRkZGKQorCQlyZXR1cm4gTlVMTDsK KworCWQgPSBremFsbG9jKHNpemVvZigqZCkgKyBwZXJpb2RzICogc2l6ZW9mKGQtPmh3ZGVzY1sw XSksIEdGUF9BVE9NSUMpOworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkLT5od2Rlc2Nf Y291bnQgPSBwZXJpb2RzOworCisJLyogVE9ETzogcmUtY2hlY2sgdGhpcy4uLiAqLworCWlmIChk aXIgPT0gRE1BX0RFVl9UT19NRU0pCisJCXJpbmdfaWQgPSBrM19yaW5nYWNjX2dldF9yaW5nX2lk KHVjLT5yY2hhbi0+cl9yaW5nKTsKKwllbHNlCisJCXJpbmdfaWQgPSBrM19yaW5nYWNjX2dldF9y aW5nX2lkKHVjLT50Y2hhbi0+dGNfcmluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGVyaW9kczsg aSsrKSB7CisJCXN0cnVjdCB1ZG1hX2h3ZGVzYyAqaHdkZXNjID0gJmQtPmh3ZGVzY1tpXTsKKwkJ ZG1hX2FkZHJfdCBwZXJpb2RfYWRkciA9IGJ1Zl9hZGRyICsgKHBlcmlvZF9sZW4gKiBpKTsKKwkJ c3RydWN0IGNwcGk1X2hvc3RfZGVzY190ICpoX2Rlc2M7CisKKwkJaHdkZXNjLT5jcHBpNV9kZXNj X3ZhZGRyID0gZG1hX3Bvb2xfemFsbG9jKHVjLT5oZGVzY19wb29sLAorCQkJCQkJR0ZQX0FUT01J QywKKwkJCQkJCSZod2Rlc2MtPmNwcGk1X2Rlc2NfcGFkZHIpOworCQlpZiAoIWh3ZGVzYy0+Y3Bw aTVfZGVzY192YWRkcikgeworCQkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCQkiZGVzY3JpcHRv ciVkIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBpKTsKKworCQkJdWRtYV9mcmVlX2h3ZGVzYyh1Yywg ZCk7CisJCQlrZnJlZShkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaHdkZXNjLT5jcHBp NV9kZXNjX3NpemUgPSB1Yy0+aGRlc2Nfc2l6ZTsKKwkJaF9kZXNjID0gaHdkZXNjLT5jcHBpNV9k ZXNjX3ZhZGRyOworCisJCWNwcGk1X2hkZXNjX2luaXQoaF9kZXNjLCAwLCAwKTsKKwkJY3BwaTVf aGRlc2Nfc2V0X3BrdGxlbihoX2Rlc2MsIHBlcmlvZF9sZW4pOworCisJCS8qIEZsb3cgYW5kIFBh Y2tlZCBJRCAqLworCQljcHBpNV9kZXNjX3NldF9wa3RpZHMoJmhfZGVzYy0+aGRyLCB1Yy0+aWQs IDB4M2ZmZik7CisJCWNwcGk1X2Rlc2Nfc2V0X3JldHBvbGljeSgmaF9kZXNjLT5oZHIsIDAsIHJp bmdfaWQpOworCisJCS8qIGF0dGFjaCBlYWNoIHBlcmlvZCB0byBhIG5ldyBkZXNjcmlwdG9yICov CisJCWNwcGk1X2hkZXNjX2F0dGFjaF9idWYoaF9kZXNjLAorCQkJCSAgICAgICBwZXJpb2RfYWRk ciwgcGVyaW9kX2xlbiwKKwkJCQkgICAgICAgcGVyaW9kX2FkZHIsIHBlcmlvZF9sZW4pOworCX0K KworCXJldHVybiBkOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9y ICp1ZG1hX3ByZXBfZG1hX2N5Y2xpYygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRy X3QgYnVmX2FkZHIsIHNpemVfdCBidWZfbGVuLAorCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRt YV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVj dCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOworCWVudW0gZG1hX3NsYXZlX2J1 c3dpZHRoIGRldl93aWR0aDsKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkOworCXUzMiBidXJzdDsKKwor CWlmIChkaXIgIT0gdWMtPmRpcikgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LAorCQkJ IiVzOiBjaGFuJWQgaXMgZm9yICVzLCBub3Qgc3VwcG9ydGluZyAlc1xuIiwKKwkJCV9fZnVuY19f LCB1Yy0+aWQsIHVkbWFfZ2V0X2Rpcl90ZXh0KHVjLT5kaXIpLAorCQkJdWRtYV9nZXRfZGlyX3Rl eHQoZGlyKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXVjLT5jeWNsaWMgPSB0cnVlOworCisJ aWYgKGRpciA9PSBETUFfREVWX1RPX01FTSkgeworCQlkZXZfd2lkdGggPSB1Yy0+Y2ZnLnNyY19h ZGRyX3dpZHRoOworCQlidXJzdCA9IHVjLT5jZmcuc3JjX21heGJ1cnN0OworCX0gZWxzZSBpZiAo ZGlyID09IERNQV9NRU1fVE9fREVWKSB7CisJCWRldl93aWR0aCA9IHVjLT5jZmcuZHN0X2FkZHJf d2lkdGg7CisJCWJ1cnN0ID0gdWMtPmNmZy5kc3RfbWF4YnVyc3Q7CisJfSBlbHNlIHsKKwkJZGV2 X2Vycih1Yy0+dWQtPmRldiwgIiVzOiBiYWQgZGlyZWN0aW9uP1xuIiwgX19mdW5jX18pOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWJ1cnN0KQorCQlidXJzdCA9IDE7CisKKwlpZiAodWMt PnBrdF9tb2RlKQorCQlkID0gdWRtYV9wcmVwX2RtYV9jeWNsaWNfcGt0KHVjLCBidWZfYWRkciwg YnVmX2xlbiwgcGVyaW9kX2xlbiwKKwkJCQkJICAgICBkaXIsIGZsYWdzKTsKKwllbHNlCisJCWQg PSB1ZG1hX3ByZXBfZG1hX2N5Y2xpY190cih1YywgYnVmX2FkZHIsIGJ1Zl9sZW4sIHBlcmlvZF9s ZW4sCisJCQkJCSAgICBkaXIsIGZsYWdzKTsKKworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisK KwlkLT5zZ2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOworCisJZC0+ZGlyID0gZGlyOworCWQt PnJlc2lkdWUgPSBidWZfbGVuOworCisJLyogc3RhdGljIFRSIGZvciByZW1vdGUgUERNQSAqLwor CWlmICh1ZG1hX2NvbmZpZ3VyZV9zdGF0aWN0cih1YywgZCwgZGV2X3dpZHRoLCBidXJzdCkpIHsK KwkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCSIlczogU3RhdGljVFIgWiBpcyBsaW10ZWQgdG8g bWF4aW11bSA0MDk1ICgldSlcbiIsCisJCQlfX2Z1bmNfXywgZC0+c3RhdGljX3RyLmJzdGNudCk7 CisKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1YywgZCk7CisJCWtmcmVlKGQpOworCQlyZXR1cm4gTlVM TDsKKwl9CisKKwlpZiAodWMtPm1ldGFkYXRhX3NpemUpCisJCWQtPnZkLnR4Lm1ldGFkYXRhX29w cyA9ICZtZXRhZGF0YV9vcHM7CisKKwlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmdWMtPnZjLCAmZC0+ dmQsIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq dWRtYV9wcmVwX2RtYV9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90 IGRlc3QsIGRtYV9hZGRyX3Qgc3JjLAorCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgdHhfZmxh Z3MpCit7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1hX2NoYW4oY2hhbik7CisJc3Ry dWN0IHVkbWFfZGVzYyAqZDsKKwlzdHJ1Y3QgY3BwaTVfdHJfdHlwZTE1X3QgKnRyX3JlcTsKKwlp bnQgbnVtX3RyOworCXNpemVfdCB0cl9zaXplID0gc2l6ZW9mKHN0cnVjdCBjcHBpNV90cl90eXBl MTVfdCk7CisJdTE2IHRyMF9jbnQwLCB0cjBfY250MSwgdHIxX2NudDA7CisKKwlpZiAodWMtPmRp ciAhPSBETUFfTUVNX1RPX01FTSkgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LAorCQkJ IiVzOiBjaGFuJWQgaXMgZm9yICVzLCBub3Qgc3VwcG9ydGluZyAlc1xuIiwKKwkJCV9fZnVuY19f LCB1Yy0+aWQsIHVkbWFfZ2V0X2Rpcl90ZXh0KHVjLT5kaXIpLAorCQkJdWRtYV9nZXRfZGlyX3Rl eHQoRE1BX01FTV9UT19NRU0pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGxlbiA8IFNa XzY0SykgeworCQludW1fdHIgPSAxOworCQl0cjBfY250MCA9IGxlbjsKKwkJdHIwX2NudDEgPSAx OworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgYWxpZ25fdG8gPSBfX2ZmcyhzcmMgfCBkZXN0 KTsKKworCQlpZiAoYWxpZ25fdG8gPiAzKQorCQkJYWxpZ25fdG8gPSAzOworCQkvKgorCQkgKiBL ZWVwIHNpbXBsZTogdHIwOiBTWl82NEstYWxpZ25tZW50IGJsb2NrcywKKwkJICoJCXRyMTogdGhl IHJlbWFpbmluZworCQkgKi8KKwkJbnVtX3RyID0gMjsKKwkJdHIwX2NudDAgPSAoU1pfNjRLIC0g QklUKGFsaWduX3RvKSk7CisJCWlmIChsZW4gLyB0cjBfY250MCA+PSBTWl82NEspIHsKKwkJCWRl dl9lcnIodWMtPnVkLT5kZXYsICJzaXplICV6dSBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCWxl bik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXRyMF9jbnQxID0gbGVuIC8gdHIwX2NudDA7 CisJCXRyMV9jbnQwID0gbGVuICUgdHIwX2NudDA7CisJfQorCisJZCA9IHVkbWFfYWxsb2NfdHJf ZGVzYyh1YywgdHJfc2l6ZSwgbnVtX3RyLCBETUFfTUVNX1RPX01FTSk7CisJaWYgKCFkKQorCQly ZXR1cm4gTlVMTDsKKworCWQtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCWQtPmRlc2NfaWR4ID0g MDsKKwlkLT50cl9pZHggPSAwOworCWQtPnJlc2lkdWUgPSBsZW47CisKKwl0cl9yZXEgPSAoc3Ry dWN0IGNwcGk1X3RyX3R5cGUxNV90ICopZC0+aHdkZXNjWzBdLnRyX3JlcV9iYXNlOworCisJY3Bw aTVfdHJfaW5pdCgmdHJfcmVxWzBdLmZsYWdzLCBDUFBJNV9UUl9UWVBFMTUsIGZhbHNlLCB0cnVl LAorCQkgICAgICBDUFBJNV9UUl9FVkVOVF9TSVpFX0NPTVBMRVRJT04sIDApOworCWNwcGk1X3Ry X2NzZl9zZXQoJnRyX3JlcVswXS5mbGFncywgQ1BQSTVfVFJfQ1NGX1NVUFJfRVZUKTsKKworCXRy X3JlcVswXS5hZGRyID0gc3JjOworCXRyX3JlcVswXS5pY250MCA9IHRyMF9jbnQwOworCXRyX3Jl cVswXS5pY250MSA9IHRyMF9jbnQxOworCXRyX3JlcVswXS5pY250MiA9IDE7CisJdHJfcmVxWzBd LmljbnQzID0gMTsKKwl0cl9yZXFbMF0uZGltMSA9IHRyMF9jbnQwOworCisJdHJfcmVxWzBdLmRh ZGRyID0gZGVzdDsKKwl0cl9yZXFbMF0uZGljbnQwID0gdHIwX2NudDA7CisJdHJfcmVxWzBdLmRp Y250MSA9IHRyMF9jbnQxOworCXRyX3JlcVswXS5kaWNudDIgPSAxOworCXRyX3JlcVswXS5kaWNu dDMgPSAxOworCXRyX3JlcVswXS5kZGltMSA9IHRyMF9jbnQwOworCisJaWYgKG51bV90ciA9PSAy KSB7CisJCWNwcGk1X3RyX2luaXQoJnRyX3JlcVsxXS5mbGFncywgQ1BQSTVfVFJfVFlQRTE1LCBm YWxzZSwgdHJ1ZSwKKwkJCSAgICAgIENQUEk1X1RSX0VWRU5UX1NJWkVfQ09NUExFVElPTiwgMCk7 CisJCWNwcGk1X3RyX2NzZl9zZXQoJnRyX3JlcVsxXS5mbGFncywgQ1BQSTVfVFJfQ1NGX1NVUFJf RVZUKTsKKworCQl0cl9yZXFbMV0uYWRkciA9IHNyYyArIHRyMF9jbnQxICogdHIwX2NudDA7CisJ CXRyX3JlcVsxXS5pY250MCA9IHRyMV9jbnQwOworCQl0cl9yZXFbMV0uaWNudDEgPSAxOworCQl0 cl9yZXFbMV0uaWNudDIgPSAxOworCQl0cl9yZXFbMV0uaWNudDMgPSAxOworCisJCXRyX3JlcVsx XS5kYWRkciA9IGRlc3QgKyB0cjBfY250MSAqIHRyMF9jbnQwOworCQl0cl9yZXFbMV0uZGljbnQw ID0gdHIxX2NudDA7CisJCXRyX3JlcVsxXS5kaWNudDEgPSAxOworCQl0cl9yZXFbMV0uZGljbnQy ID0gMTsKKwkJdHJfcmVxWzFdLmRpY250MyA9IDE7CisJfQorCisJY3BwaTVfdHJfY3NmX3NldCgm dHJfcmVxW251bV90ciAtIDFdLmZsYWdzLCBDUFBJNV9UUl9DU0ZfRU9QKTsKKworCWlmICh1Yy0+ bWV0YWRhdGFfc2l6ZSkKKwkJZC0+dmQudHgubWV0YWRhdGFfb3BzID0gJm1ldGFkYXRhX29wczsK KworCXJldHVybiB2Y2hhbl90eF9wcmVwKCZ1Yy0+dmMsICZkLT52ZCwgdHhfZmxhZ3MpOworfQor CiBzdGF0aWMgdm9pZCB1ZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQog ewogCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOwotLSAKUGV0ZXIK ClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUgMjIsIDAwMTgwIEhl bHNpbmtpLgpZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWlj aWxlOiBIZWxzaW5raQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK