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=-8.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,T_DKIMWL_WL_HIGH,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 53DB4C04A6B for ; Mon, 6 May 2019 12:37:47 +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 2490E20830 for ; Mon, 6 May 2019 12:37:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="RhiNMI0a"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="eEKLKAwN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2490E20830 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=C66r0lS+oQqYWHwct4G9LLGxs+PopifKDsMZj9XzDQ4=; b=RhiNMI0aNOfg+b 9eF287to5PISYKbHasqfsThPMnfTWMUdktC14Ainxjaf/OoI6JwRlc74F7YongriZSs3WPfK5GvEj SVr2CSxTCKnrE23PQLSWyx3YChhSMVmP62r3x4SXmwezvSymqBlfqxNoNUorNsduHFO37evCltcYJ Qzz+el1pVIk45W69N/RQmslH/2inCr5xEsHI2lFgSEe956HDZuJoN1AIvfncH2yJ6yQ62wgnsUG+9 OGPZbttF1QnjQ2XvhsrSTmXrUKEdtUUHcHTPSNBH3B/b6g4qDeANx03+6djMhQJtFXUoAdKCtzyPd huZOTb5Natdt4grinqDg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcsH-0001na-Mk; Mon, 06 May 2019 12:37:41 +0000 Received: from fllv0016.ext.ti.com ([198.47.19.142]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcqL-0007sC-Ma for linux-arm-kernel@lists.infradead.org; Mon, 06 May 2019 12:36:22 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x46CZcod059264; Mon, 6 May 2019 07:35:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1557146138; bh=yoQizM9Gklqx6mF4k0rXDydqoCeepUm0BFMCAvF5NbA=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=eEKLKAwNOe3x+aflaPSynDOlxLXF08sT4BWtBbr7+mOuYHQir35vDyQ/4lkv8gXTc Nfz9h08AER8KOAyFsfoQLAM0Tl6/TqNh1/NX4Kue/hjVznWG4Gd5BnDIaAVRen1dFF Ho6l7vpzKaDkK4ee1QtThyBHPydEJP0SAlxlTgNw= Received: from DFLE104.ent.ti.com (dfle104.ent.ti.com [10.64.6.25]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x46CZcL3024744 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 May 2019 07:35:38 -0500 Received: from DFLE110.ent.ti.com (10.64.6.31) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 6 May 2019 07:35:37 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE110.ent.ti.com (10.64.6.31) 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; Mon, 6 May 2019 07:35:37 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id x46CYpUK110286; Mon, 6 May 2019 07:35:34 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH 14/16] dmaengine: ti: New driver for K3 UDMA - split#5: dma_device callbacks 2 Date: Mon, 6 May 2019 15:34:54 +0300 Message-ID: <20190506123456.6777-15-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190506123456.6777-1-peter.ujfalusi@ti.com> References: <20190506123456.6777-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-20190506_053542_917903_7F902494 X-CRM114-Status: GOOD ( 18.04 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 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, 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 azMtdWRtYS5jIHwgNjk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MSBmaWxlIGNoYW5nZWQsIDY5NSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9k bWEvdGkvazMtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCmluZGV4IDJmNzBkNTBm YWE4YS4uYmU1NzE0ODcyZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMK KysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCkBAIC0xNzQzLDYgKzE3NDMsNzAxIEBAIHN0 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 ZGV2X3dpZHRoLAorCQkJCSAgIHUxNiBlbGNudCkKK3sKKwlpZiAoIXVjLT5zdGF0aWNfdHJfdHlw ZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBCdXMgd2lkdGggdHJhbnNsYXRlcyB0byB0aGUgZWxlbWVu dCBzaXplIChFUykgKi8KKwlzd2l0Y2ggKGRldl93aWR0aCkgeworCWNhc2UgRE1BX1NMQVZFX0JV U1dJRFRIXzFfQllURToKKwkJZC0+c3RhdGljX3RyLmVsc2l6ZSA9IDA7CisJCWJyZWFrOworCWNh c2UgRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM6CisJCWQtPnN0YXRpY190ci5lbHNpemUgPSAx OworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8zX0JZVEVTOgorCQlkLT5zdGF0 aWNfdHIuZWxzaXplID0gMjsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9C WVRFUzoKKwkJZC0+c3RhdGljX3RyLmVsc2l6ZSA9IDM7CisJCWJyZWFrOworCWNhc2UgRE1BX1NM QVZFX0JVU1dJRFRIXzhfQllURVM6CisJCWQtPnN0YXRpY190ci5lbHNpemUgPSA0OworCQlicmVh azsKKwlkZWZhdWx0OiAvKiBub3QgcmVhY2hlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlkLT5zdGF0aWNfdHIuZWxjbnQgPSBlbGNudDsKKworCS8qCisJICogUERNQSBtdXN0IHRvIGNs b3NlIHRoZSBwYWNrZXQgd2hlbiB0aGUgY2hhbm5lbCBpcyBpbiBwYWNrZXQgbW9kZS4KKwkgKiBG b3IgVFIgbW9kZSB3aGVuIHRoZSBjaGFubmVsIGlzIG5vdCBjeWNsaWMgd2UgYWxzbyBuZWVkIFBE TUEgdG8gY2xvc2UKKwkgKiB0aGUgcGFja2V0IG90aGVyd2lzZSB0aGUgdHJhbnNmZXIgd2lsbCBz dGFsbCBiZWNhdXNlIFBETUEgaG9sZHMgb24KKwkgKiB0aGUgZGF0YSBpdCBoYXMgcmVjZWl2ZWQg ZnJvbSB0aGUgcGVyaXBoZXJhbC4KKwkgKi8KKwlpZiAodWMtPnBrdF9tb2RlIHx8ICF1Yy0+Y3lj bGljKSB7CisJCXVuc2lnbmVkIGludCBkaXYgPSBkZXZfd2lkdGggKiBlbGNudDsKKworCQlpZiAo dWMtPmN5Y2xpYykKKwkJCWQtPnN0YXRpY190ci5ic3RjbnQgPSBkLT5yZXNpZHVlIC8gZC0+c2ds ZW4gLyBkaXY7CisJCWVsc2UKKwkJCWQtPnN0YXRpY190ci5ic3RjbnQgPSBkLT5yZXNpZHVlIC8g ZGl2OworCisJCWlmICh1Yy0+ZGlyID09IERNQV9ERVZfVE9fTUVNICYmIGQtPnN0YXRpY190ci5i c3RjbnQgPiAweGZmZikKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWQtPnN0YXRp Y190ci5ic3RjbnQgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVk bWFfZGVzYyAqdWRtYV9wcmVwX3NsYXZlX3NnX3BrdCgKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1Yywg c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ2xlbiwKKwllbnVtIGRtYV90 cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLCB1bnNpZ25lZCBsb25nIHR4X2ZsYWdzLCB2b2lkICpjb250 ZXh0KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbnQ7CisJc3RydWN0IGNwcGk1X2hvc3Rf ZGVzY190ICpoX2Rlc2MgPSBOVUxMOworCXN0cnVjdCB1ZG1hX2Rlc2MgKmQ7CisJdTMyIHJpbmdf aWQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlkID0ga3phbGxvYyhzaXplb2YoKmQpICsgc2dsZW4g KiBzaXplb2YoZC0+aHdkZXNjWzBdKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkKQorCQlyZXR1cm4g TlVMTDsKKworCWQtPnNnbGVuID0gc2dsZW47CisJZC0+aHdkZXNjX2NvdW50ID0gc2dsZW47CisK KwlpZiAoZGlyID09IERNQV9ERVZfVE9fTUVNKQorCQlyaW5nX2lkID0gazNfcmluZ2FjY19nZXRf cmluZ19pZCh1Yy0+cmNoYW4tPnJfcmluZyk7CisJZWxzZQorCQlyaW5nX2lkID0gazNfcmluZ2Fj Y19nZXRfcmluZ19pZCh1Yy0+dGNoYW4tPnRjX3JpbmcpOworCisJZm9yX2VhY2hfc2coc2dsLCBz Z2VudCwgc2dsZW4sIGkpIHsKKwkJc3RydWN0IHVkbWFfaHdkZXNjICpod2Rlc2MgPSAmZC0+aHdk ZXNjW2ldOworCQlkbWFfYWRkcl90IHNnX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VudCk7CisJ CXN0cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCAqZGVzYzsKKwkJc2l6ZV90IHNnX2xlbiA9IHNnX2Rt YV9sZW4oc2dlbnQpOworCisJCWh3ZGVzYy0+Y3BwaTVfZGVzY192YWRkciA9IGRtYV9wb29sX3ph bGxvYyh1Yy0+aGRlc2NfcG9vbCwKKwkJCQkJCUdGUF9BVE9NSUMsCisJCQkJCQkmaHdkZXNjLT5j cHBpNV9kZXNjX3BhZGRyKTsKKwkJaWYgKCFod2Rlc2MtPmNwcGk1X2Rlc2NfdmFkZHIpIHsKKwkJ CWRldl9lcnIodWMtPnVkLT5kZXYsCisJCQkJImRlc2NyaXB0b3IlZCBhbGxvY2F0aW9uIGZhaWxl ZFxuIiwgaSk7CisKKwkJCXVkbWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQkJa2ZyZWUoZCk7CisJ CQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWQtPnJlc2lkdWUgKz0gc2dfbGVuOworCQlod2Rlc2Mt PmNwcGk1X2Rlc2Nfc2l6ZSA9IHVjLT5oZGVzY19zaXplOworCQlkZXNjID0gaHdkZXNjLT5jcHBp NV9kZXNjX3ZhZGRyOworCisJCWlmIChpID09IDApIHsKKwkJCWNwcGk1X2hkZXNjX2luaXQoZGVz YywgMCwgMCk7CisJCQkvKiBGbG93IGFuZCBQYWNrZWQgSUQgKi8KKwkJCWNwcGk1X2Rlc2Nfc2V0 X3BrdGlkcygmZGVzYy0+aGRyLCB1Yy0+aWQsIDB4M2ZmZik7CisJCQljcHBpNV9kZXNjX3NldF9y ZXRwb2xpY3koJmRlc2MtPmhkciwgMCwgcmluZ19pZCk7CisJCX0gZWxzZSB7CisJCQljcHBpNV9o ZGVzY19yZXNldF9oYmRlc2MoZGVzYyk7CisJCQljcHBpNV9kZXNjX3NldF9yZXRwb2xpY3koJmRl c2MtPmhkciwgMCwgMHhmZmZmKTsKKwkJfQorCisJCS8qIGF0dGFjaCB0aGUgc2cgYnVmZmVyIHRv IHRoZSBkZXNjcmlwdG9yICovCisJCWNwcGk1X2hkZXNjX2F0dGFjaF9idWYoZGVzYywgc2dfYWRk ciwgc2dfbGVuLCBzZ19hZGRyLCBzZ19sZW4pOworCisJCS8qIEF0dGFjaCBsaW5rIGFzIGhvc3Qg YnVmZmVyIGRlc2NyaXB0b3IgKi8KKwkJaWYgKGhfZGVzYykKKwkJCWNwcGk1X2hkZXNjX2xpbmtf aGJkZXNjKGhfZGVzYywKKwkJCQkJCWh3ZGVzYy0+Y3BwaTVfZGVzY19wYWRkcik7CisKKwkJaWYg KGRpciA9PSBETUFfTUVNX1RPX0RFVikKKwkJCWhfZGVzYyA9IGRlc2M7CisJfQorCisJaWYgKGQt PnJlc2lkdWUgPj0gU1pfNE0pIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCSIlczogVHJh bnNmZXIgc2l6ZSAldSBpcyBvdmVyIHRoZSBzdXBwb3J0ZWQgNE0gcmFuZ2VcbiIsCisJCQlfX2Z1 bmNfXywgZC0+cmVzaWR1ZSk7CisJCXVkbWFfZnJlZV9od2Rlc2ModWMsIGQpOworCQlrZnJlZShk KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaF9kZXNjID0gZC0+aHdkZXNjWzBdLmNwcGk1X2Rl c2NfdmFkZHI7CisJY3BwaTVfaGRlc2Nfc2V0X3BrdGxlbihoX2Rlc2MsIGQtPnJlc2lkdWUpOwor CisJcmV0dXJuIGQ7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9hdHRhY2hfbWV0YWRhdGEoc3RydWN0 IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCXZvaWQgKmRhdGEsIHNpemVfdCBs ZW4pCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlzdHJ1 Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3QgY3Bw aTVfaG9zdF9kZXNjX3QgKmhfZGVzYzsKKwl1MzIgcHNkX3NpemUgPSBsZW47CisJdTMyIGZsYWdz ID0gMDsKKworCWlmICghdWMtPnBrdF9tb2RlIHx8ICF1Yy0+bWV0YWRhdGFfc2l6ZSkKKwkJcmV0 dXJuIC1FTk9UU1VQUDsKKworCWlmICghZGF0YSB8fCBsZW4gPiB1Yy0+bWV0YWRhdGFfc2l6ZSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodWMtPm5lZWRzX2VwaWIgJiYgbGVuIDwgQ1BQSTVf SU5GTzBfSERFU0NfRVBJQl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhfZGVzYyA9IGQt Pmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyOworCWlmIChkLT5kaXIgPT0gRE1BX01FTV9UT19E RVYpCisJCW1lbWNweShoX2Rlc2MtPmVwaWIsIGRhdGEsIGxlbik7CisKKwlpZiAodWMtPm5lZWRz X2VwaWIpCisJCXBzZF9zaXplIC09IENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0laRTsKKworCWQt Pm1ldGFkYXRhID0gZGF0YTsKKwlkLT5tZXRhZGF0YV9zaXplID0gbGVuOworCWlmICh1Yy0+bmVl ZHNfZXBpYikKKwkJZmxhZ3MgfD0gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9QUkVTRU5UOworCisJ Y3BwaTVfaGRlc2NfdXBkYXRlX2ZsYWdzKGhfZGVzYywgZmxhZ3MpOworCWNwcGk1X2hkZXNjX3Vw ZGF0ZV9wc2RhdGFfc2l6ZShoX2Rlc2MsIHBzZF9zaXplKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCAqdWRtYV9nZXRfbWV0YWRhdGFfcHRyKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVz Y3JpcHRvciAqZGVzYywKKwkJCQkgICBzaXplX3QgKnBheWxvYWRfbGVuLCBzaXplX3QgKm1heF9s ZW4pCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlzdHJ1 Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3QgY3Bw aTVfaG9zdF9kZXNjX3QgKmhfZGVzYzsKKworCWlmICghdWMtPnBrdF9tb2RlIHx8ICF1Yy0+bWV0 YWRhdGFfc2l6ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKKworCWhfZGVzYyA9IGQt Pmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyOworCisJKm1heF9sZW4gPSB1Yy0+bWV0YWRhdGFf c2l6ZTsKKworCSpwYXlsb2FkX2xlbiA9IGNwcGk1X2hkZXNjX2VwaWJfcHJlc2VudCgmaF9kZXNj LT5oZHIpID8KKwkJICAgICAgIENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0laRSA6IDA7CisJKnBh eWxvYWRfbGVuICs9IGNwcGk1X2hkZXNjX2dldF9wc2RhdGFfc2l6ZShoX2Rlc2MpOworCisJcmV0 dXJuIGhfZGVzYy0+ZXBpYjsKK30KKworc3RhdGljIGludCB1ZG1hX3NldF9tZXRhZGF0YV9sZW4o c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLAorCQkJCSBzaXplX3QgcGF5bG9h ZF9sZW4pCit7CisJc3RydWN0IHVkbWFfZGVzYyAqZCA9IHRvX3VkbWFfZGVzYyhkZXNjKTsKKwlz dHJ1Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihkZXNjLT5jaGFuKTsKKwlzdHJ1Y3Qg Y3BwaTVfaG9zdF9kZXNjX3QgKmhfZGVzYzsKKwl1MzIgcHNkX3NpemUgPSBwYXlsb2FkX2xlbjsK Kwl1MzIgZmxhZ3MgPSAwOworCisJaWYgKCF1Yy0+cGt0X21vZGUgfHwgIXVjLT5tZXRhZGF0YV9z aXplKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJaWYgKHBheWxvYWRfbGVuID4gdWMtPm1ldGFk YXRhX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVjLT5uZWVkc19lcGliICYmIHBh eWxvYWRfbGVuIDwgQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWhfZGVzYyA9IGQtPmh3ZGVzY1swXS5jcHBpNV9kZXNjX3ZhZGRyOworCisJaWYgKHVj LT5uZWVkc19lcGliKSB7CisJCXBzZF9zaXplIC09IENQUEk1X0lORk8wX0hERVNDX0VQSUJfU0la RTsKKwkJZmxhZ3MgfD0gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9QUkVTRU5UOworCX0KKworCWNw cGk1X2hkZXNjX3VwZGF0ZV9mbGFncyhoX2Rlc2MsIGZsYWdzKTsKKwljcHBpNV9oZGVzY191cGRh dGVfcHNkYXRhX3NpemUoaF9kZXNjLCBwc2Rfc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBkbWFfZGVzY3JpcHRvcl9tZXRhZGF0YV9vcHMgbWV0YWRhdGFfb3BzID0gewor CS5hdHRhY2ggPSB1ZG1hX2F0dGFjaF9tZXRhZGF0YSwKKwkuZ2V0X3B0ciA9IHVkbWFfZ2V0X21l dGFkYXRhX3B0ciwKKwkuc2V0X2xlbiA9IHVkbWFfc2V0X21ldGFkYXRhX2xlbiwKK307CisKK3N0 YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnVkbWFfcHJlcF9zbGF2ZV9zZygK KwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25l ZCBpbnQgc2dsZW4sCisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwgdW5zaWduZWQg bG9uZyB0eF9mbGFncywgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9 IHRvX3VkbWFfY2hhbihjaGFuKTsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lkdGg7 CisJc3RydWN0IHVkbWFfZGVzYyAqZDsKKwl1MzIgYnVyc3Q7CisKKwlpZiAoZGlyICE9IHVjLT5k aXIpIHsKKwkJZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwKKwkJCSIlczogY2hhbiVkIGlzIGZv ciAlcywgbm90IHN1cHBvcnRpbmcgJXNcbiIsCisJCQlfX2Z1bmNfXywgdWMtPmlkLCB1ZG1hX2dl dF9kaXJfdGV4dCh1Yy0+ZGlyKSwKKwkJCXVkbWFfZ2V0X2Rpcl90ZXh0KGRpcikpOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlpZiAoZGlyID09IERNQV9ERVZfVE9fTUVNKSB7CisJCWRldl93aWR0 aCA9IHVjLT5jZmcuc3JjX2FkZHJfd2lkdGg7CisJCWJ1cnN0ID0gdWMtPmNmZy5zcmNfbWF4YnVy c3Q7CisJfSBlbHNlIGlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJZGV2X3dpZHRoID0g dWMtPmNmZy5kc3RfYWRkcl93aWR0aDsKKwkJYnVyc3QgPSB1Yy0+Y2ZnLmRzdF9tYXhidXJzdDsK Kwl9IGVsc2UgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiJXM6IGJhZCBkaXJlY3Rp b24/XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghYnVyc3QpCisJ CWJ1cnN0ID0gMTsKKworCWlmICh1Yy0+cGt0X21vZGUpCisJCWQgPSB1ZG1hX3ByZXBfc2xhdmVf c2dfcGt0KHVjLCBzZ2wsIHNnbGVuLCBkaXIsIHR4X2ZsYWdzLAorCQkJCQkgICBjb250ZXh0KTsK KwllbHNlCisJCWQgPSB1ZG1hX3ByZXBfc2xhdmVfc2dfdHIodWMsIHNnbCwgc2dsZW4sIGRpciwg dHhfZmxhZ3MsCisJCQkJCSAgY29udGV4dCk7CisKKwlpZiAoIWQpCisJCXJldHVybiBOVUxMOwor CisJZC0+ZGlyID0gZGlyOworCWQtPmRlc2NfaWR4ID0gMDsKKwlkLT50cl9pZHggPSAwOworCisJ Lyogc3RhdGljIFRSIGZvciByZW1vdGUgUERNQSAqLworCWlmICh1ZG1hX2NvbmZpZ3VyZV9zdGF0 aWN0cih1YywgZCwgZGV2X3dpZHRoLCBidXJzdCkpIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwK KwkJCSIlczogU3RhdGljVFIgWiBpcyBsaW10ZWQgdG8gbWF4aW11bSA0MDk1ICgldSlcbiIsCisJ CQlfX2Z1bmNfXywgZC0+c3RhdGljX3RyLmJzdGNudCk7CisKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1 YywgZCk7CisJCWtmcmVlKGQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodWMtPm1ldGFk YXRhX3NpemUpCisJCWQtPnZkLnR4Lm1ldGFkYXRhX29wcyA9ICZtZXRhZGF0YV9vcHM7CisKKwly ZXR1cm4gdmNoYW5fdHhfcHJlcCgmdWMtPnZjLCAmZC0+dmQsIHR4X2ZsYWdzKTsKK30KKworc3Rh dGljIHN0cnVjdCB1ZG1hX2Rlc2MgKnVkbWFfcHJlcF9kbWFfY3ljbGljX3RyKAorCXN0cnVjdCB1 ZG1hX2NoYW4gKnVjLCBkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwKKwlzaXpl X3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpciwgdW5zaWduZWQg bG9uZyBmbGFncykKK3sKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkZXZfd2lkdGg7CisJc3Ry dWN0IHVkbWFfZGVzYyAqZDsKKwlzaXplX3QgdHJfc2l6ZTsKKwlzdHJ1Y3QgY3BwaTVfdHJfdHlw ZTFfdCAqdHJfcmVxOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBwZXJpb2RzID0g YnVmX2xlbiAvIHBlcmlvZF9sZW47CisJdTMyIGJ1cnN0OworCisJaWYgKGRpciA9PSBETUFfREVW X1RPX01FTSkgeworCQlkZXZfd2lkdGggPSB1Yy0+Y2ZnLnNyY19hZGRyX3dpZHRoOworCQlidXJz dCA9IHVjLT5jZmcuc3JjX21heGJ1cnN0OworCX0gZWxzZSBpZiAoZGlyID09IERNQV9NRU1fVE9f REVWKSB7CisJCWRldl93aWR0aCA9IHVjLT5jZmcuZHN0X2FkZHJfd2lkdGg7CisJCWJ1cnN0ID0g dWMtPmNmZy5kc3RfbWF4YnVyc3Q7CisJfSBlbHNlIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwg IiVzOiBiYWQgZGlyZWN0aW9uP1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlpZiAoIWJ1cnN0KQorCQlidXJzdCA9IDE7CisKKwkvKiBOb3cgYWxsb2NhdGUgYW5kIHNldHVw IHRoZSBkZXNjcmlwdG9yLiAqLworCXRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X3RyX3R5 cGUxX3QpOworCWQgPSB1ZG1hX2FsbG9jX3RyX2Rlc2ModWMsIHRyX3NpemUsIHBlcmlvZHMsIGRp cik7CisJaWYgKCFkKQorCQlyZXR1cm4gTlVMTDsKKworCXRyX3JlcSA9IChzdHJ1Y3QgY3BwaTVf dHJfdHlwZTFfdCAqKWQtPmh3ZGVzY1swXS50cl9yZXFfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwg cGVyaW9kczsgaSsrKSB7CisJCWNwcGk1X3RyX2luaXQoJnRyX3JlcVtpXS5mbGFncywgQ1BQSTVf VFJfVFlQRTEsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIENQUEk1X1RSX0VWRU5UX1NJWkVfQ09N UExFVElPTiwgMCk7CisKKwkJdHJfcmVxW2ldLmFkZHIgPSBidWZfYWRkciArIHBlcmlvZF9sZW4g KiBpOworCQl0cl9yZXFbaV0uaWNudDAgPSBkZXZfd2lkdGg7CisJCXRyX3JlcVtpXS5pY250MSA9 IHBlcmlvZF9sZW4gLyBkZXZfd2lkdGg7CisJCXRyX3JlcVtpXS5kaW0xID0gZGV2X3dpZHRoOwor CisJCWlmICghKGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKSkKKwkJCWNwcGk1X3RyX2NzZl9z ZXQoJnRyX3JlcVtpXS5mbGFncywKKwkJCQkJIENQUEk1X1RSX0NTRl9TVVBSX0VWVCk7CisJfQor CisJcmV0dXJuIGQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9kZXNjICp1ZG1hX3ByZXBfZG1h X2N5Y2xpY19wa3QoCisJc3RydWN0IHVkbWFfY2hhbiAqdWMsIGRtYV9hZGRyX3QgYnVmX2FkZHIs IHNpemVfdCBidWZfbGVuLAorCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9k aXJlY3Rpb24gZGlyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB1ZG1hX2Rlc2Mg KmQ7CisJdTMyIHJpbmdfaWQ7CisJaW50IGk7CisJaW50IHBlcmlvZHMgPSBidWZfbGVuIC8gcGVy aW9kX2xlbjsKKworCWlmIChwZXJpb2RzID4gKEszX1VETUFfREVGQVVMVF9SSU5HX1NJWkUgLSAx KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocGVyaW9kX2xlbiA+IDB4M0ZGRkZGKQorCQlyZXR1 cm4gTlVMTDsKKworCWQgPSBremFsbG9jKHNpemVvZigqZCkgKyBwZXJpb2RzICogc2l6ZW9mKGQt Pmh3ZGVzY1swXSksIEdGUF9BVE9NSUMpOworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlk LT5od2Rlc2NfY291bnQgPSBwZXJpb2RzOworCisJLyogVE9ETzogcmUtY2hlY2sgdGhpcy4uLiAq LworCWlmIChkaXIgPT0gRE1BX0RFVl9UT19NRU0pCisJCXJpbmdfaWQgPSBrM19yaW5nYWNjX2dl dF9yaW5nX2lkKHVjLT5yY2hhbi0+cl9yaW5nKTsKKwllbHNlCisJCXJpbmdfaWQgPSBrM19yaW5n YWNjX2dldF9yaW5nX2lkKHVjLT50Y2hhbi0+dGNfcmluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwg cGVyaW9kczsgaSsrKSB7CisJCXN0cnVjdCB1ZG1hX2h3ZGVzYyAqaHdkZXNjID0gJmQtPmh3ZGVz Y1tpXTsKKwkJZG1hX2FkZHJfdCBwZXJpb2RfYWRkciA9IGJ1Zl9hZGRyICsgKHBlcmlvZF9sZW4g KiBpKTsKKwkJc3RydWN0IGNwcGk1X2hvc3RfZGVzY190ICpoX2Rlc2M7CisKKwkJaHdkZXNjLT5j cHBpNV9kZXNjX3ZhZGRyID0gZG1hX3Bvb2xfemFsbG9jKHVjLT5oZGVzY19wb29sLAorCQkJCQkJ R0ZQX0FUT01JQywKKwkJCQkJCSZod2Rlc2MtPmNwcGk1X2Rlc2NfcGFkZHIpOworCQlpZiAoIWh3 ZGVzYy0+Y3BwaTVfZGVzY192YWRkcikgeworCQkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCQki ZGVzY3JpcHRvciVkIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBpKTsKKworCQkJdWRtYV9mcmVlX2h3 ZGVzYyh1YywgZCk7CisJCQlrZnJlZShkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaHdk ZXNjLT5jcHBpNV9kZXNjX3NpemUgPSB1Yy0+aGRlc2Nfc2l6ZTsKKwkJaF9kZXNjID0gaHdkZXNj LT5jcHBpNV9kZXNjX3ZhZGRyOworCisJCWNwcGk1X2hkZXNjX2luaXQoaF9kZXNjLCAwLCAwKTsK KwkJY3BwaTVfaGRlc2Nfc2V0X3BrdGxlbihoX2Rlc2MsIHBlcmlvZF9sZW4pOworCisJCS8qIEZs b3cgYW5kIFBhY2tlZCBJRCAqLworCQljcHBpNV9kZXNjX3NldF9wa3RpZHMoJmhfZGVzYy0+aGRy LCB1Yy0+aWQsIDB4M2ZmZik7CisJCWNwcGk1X2Rlc2Nfc2V0X3JldHBvbGljeSgmaF9kZXNjLT5o ZHIsIDAsIHJpbmdfaWQpOworCisJCS8qIGF0dGFjaCBlYWNoIHBlcmlvZCB0byBhIG5ldyBkZXNj cmlwdG9yICovCisJCWNwcGk1X2hkZXNjX2F0dGFjaF9idWYoaF9kZXNjLAorCQkJCSAgICAgICBw ZXJpb2RfYWRkciwgcGVyaW9kX2xlbiwKKwkJCQkgICAgICAgcGVyaW9kX2FkZHIsIHBlcmlvZF9s ZW4pOworCX0KKworCXJldHVybiBkOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9k ZXNjcmlwdG9yICp1ZG1hX3ByZXBfZG1hX2N5Y2xpYygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4s IGRtYV9hZGRyX3QgYnVmX2FkZHIsIHNpemVfdCBidWZfbGVuLAorCXNpemVfdCBwZXJpb2RfbGVu LCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQor eworCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOworCWVudW0gZG1h X3NsYXZlX2J1c3dpZHRoIGRldl93aWR0aDsKKwlzdHJ1Y3QgdWRtYV9kZXNjICpkOworCXUzMiBi dXJzdDsKKworCWlmIChkaXIgIT0gdWMtPmRpcikgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ ZGV2LAorCQkJIiVzOiBjaGFuJWQgaXMgZm9yICVzLCBub3Qgc3VwcG9ydGluZyAlc1xuIiwKKwkJ CV9fZnVuY19fLCB1Yy0+aWQsIHVkbWFfZ2V0X2Rpcl90ZXh0KHVjLT5kaXIpLAorCQkJdWRtYV9n ZXRfZGlyX3RleHQoZGlyKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXVjLT5jeWNsaWMgPSB0 cnVlOworCisJaWYgKGRpciA9PSBETUFfREVWX1RPX01FTSkgeworCQlkZXZfd2lkdGggPSB1Yy0+ Y2ZnLnNyY19hZGRyX3dpZHRoOworCQlidXJzdCA9IHVjLT5jZmcuc3JjX21heGJ1cnN0OworCX0g ZWxzZSBpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKSB7CisJCWRldl93aWR0aCA9IHVjLT5jZmcu ZHN0X2FkZHJfd2lkdGg7CisJCWJ1cnN0ID0gdWMtPmNmZy5kc3RfbWF4YnVyc3Q7CisJfSBlbHNl IHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwgIiVzOiBiYWQgZGlyZWN0aW9uP1xuIiwgX19mdW5j X18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWJ1cnN0KQorCQlidXJzdCA9IDE7CisK KwlpZiAodWMtPnBrdF9tb2RlKQorCQlkID0gdWRtYV9wcmVwX2RtYV9jeWNsaWNfcGt0KHVjLCBi dWZfYWRkciwgYnVmX2xlbiwgcGVyaW9kX2xlbiwKKwkJCQkJICAgICBkaXIsIGZsYWdzKTsKKwll bHNlCisJCWQgPSB1ZG1hX3ByZXBfZG1hX2N5Y2xpY190cih1YywgYnVmX2FkZHIsIGJ1Zl9sZW4s IHBlcmlvZF9sZW4sCisJCQkJCSAgICBkaXIsIGZsYWdzKTsKKworCWlmICghZCkKKwkJcmV0dXJu IE5VTEw7CisKKwlkLT5zZ2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOworCisJZC0+ZGlyID0g ZGlyOworCWQtPnJlc2lkdWUgPSBidWZfbGVuOworCisJLyogc3RhdGljIFRSIGZvciByZW1vdGUg UERNQSAqLworCWlmICh1ZG1hX2NvbmZpZ3VyZV9zdGF0aWN0cih1YywgZCwgZGV2X3dpZHRoLCBi dXJzdCkpIHsKKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwKKwkJCSIlczogU3RhdGljVFIgWiBpcyBs aW10ZWQgdG8gbWF4aW11bSA0MDk1ICgldSlcbiIsCisJCQlfX2Z1bmNfXywgZC0+c3RhdGljX3Ry LmJzdGNudCk7CisKKwkJdWRtYV9mcmVlX2h3ZGVzYyh1YywgZCk7CisJCWtmcmVlKGQpOworCQly ZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodWMtPm1ldGFkYXRhX3NpemUpCisJCWQtPnZkLnR4Lm1l dGFkYXRhX29wcyA9ICZtZXRhZGF0YV9vcHM7CisKKwlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmdWMt PnZjLCAmZC0+dmQsIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVz Y3JpcHRvciAqdWRtYV9wcmVwX2RtYV9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBk bWFfYWRkcl90IGRlc3QsIGRtYV9hZGRyX3Qgc3JjLAorCXNpemVfdCBsZW4sIHVuc2lnbmVkIGxv bmcgdHhfZmxhZ3MpCit7CisJc3RydWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1hX2NoYW4oY2hh bik7CisJc3RydWN0IHVkbWFfZGVzYyAqZDsKKwlzdHJ1Y3QgY3BwaTVfdHJfdHlwZTE1X3QgKnRy X3JlcTsKKwlpbnQgbnVtX3RyOworCXNpemVfdCB0cl9zaXplID0gc2l6ZW9mKHN0cnVjdCBjcHBp NV90cl90eXBlMTVfdCk7CisJdTE2IHRyMF9jbnQwLCB0cjBfY250MSwgdHIxX2NudDA7CisKKwlp ZiAodWMtPmRpciAhPSBETUFfTUVNX1RPX01FTSkgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ ZGV2LAorCQkJIiVzOiBjaGFuJWQgaXMgZm9yICVzLCBub3Qgc3VwcG9ydGluZyAlc1xuIiwKKwkJ CV9fZnVuY19fLCB1Yy0+aWQsIHVkbWFfZ2V0X2Rpcl90ZXh0KHVjLT5kaXIpLAorCQkJdWRtYV9n ZXRfZGlyX3RleHQoRE1BX01FTV9UT19NRU0pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYg KGxlbiA8IFNaXzY0SykgeworCQludW1fdHIgPSAxOworCQl0cjBfY250MCA9IGxlbjsKKwkJdHIw X2NudDEgPSAxOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgYWxpZ25fdG8gPSBfX2Zmcyhz cmMgfCBkZXN0KTsKKworCQlpZiAoYWxpZ25fdG8gPiAzKQorCQkJYWxpZ25fdG8gPSAzOworCQkv KgorCQkgKiBLZWVwIHNpbXBsZTogdHIwOiBTWl82NEstYWxpZ25tZW50IGJsb2NrcywKKwkJICoJ CXRyMTogdGhlIHJlbWFpbmluZworCQkgKi8KKwkJbnVtX3RyID0gMjsKKwkJdHIwX2NudDAgPSAo U1pfNjRLIC0gQklUKGFsaWduX3RvKSk7CisJCWlmIChsZW4gLyB0cjBfY250MCA+PSBTWl82NEsp IHsKKwkJCWRldl9lcnIodWMtPnVkLT5kZXYsICJzaXplICV6dSBpcyBub3Qgc3VwcG9ydGVkXG4i LAorCQkJCWxlbik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXRyMF9jbnQxID0gbGVuIC8g dHIwX2NudDA7CisJCXRyMV9jbnQwID0gbGVuICUgdHIwX2NudDA7CisJfQorCisJZCA9IHVkbWFf YWxsb2NfdHJfZGVzYyh1YywgdHJfc2l6ZSwgbnVtX3RyLCBETUFfTUVNX1RPX01FTSk7CisJaWYg KCFkKQorCQlyZXR1cm4gTlVMTDsKKworCWQtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCWQtPmRl c2NfaWR4ID0gMDsKKwlkLT50cl9pZHggPSAwOworCWQtPnJlc2lkdWUgPSBsZW47CisKKwl0cl9y ZXEgPSAoc3RydWN0IGNwcGk1X3RyX3R5cGUxNV90ICopZC0+aHdkZXNjWzBdLnRyX3JlcV9iYXNl OworCisJY3BwaTVfdHJfaW5pdCgmdHJfcmVxWzBdLmZsYWdzLCBDUFBJNV9UUl9UWVBFMTUsIGZh bHNlLCB0cnVlLAorCQkgICAgICBDUFBJNV9UUl9FVkVOVF9TSVpFX0NPTVBMRVRJT04sIDApOwor CWNwcGk1X3RyX2NzZl9zZXQoJnRyX3JlcVswXS5mbGFncywgQ1BQSTVfVFJfQ1NGX1NVUFJfRVZU KTsKKworCXRyX3JlcVswXS5hZGRyID0gc3JjOworCXRyX3JlcVswXS5pY250MCA9IHRyMF9jbnQw OworCXRyX3JlcVswXS5pY250MSA9IHRyMF9jbnQxOworCXRyX3JlcVswXS5pY250MiA9IDE7CisJ dHJfcmVxWzBdLmljbnQzID0gMTsKKwl0cl9yZXFbMF0uZGltMSA9IHRyMF9jbnQwOworCisJdHJf cmVxWzBdLmRhZGRyID0gZGVzdDsKKwl0cl9yZXFbMF0uZGljbnQwID0gdHIwX2NudDA7CisJdHJf cmVxWzBdLmRpY250MSA9IHRyMF9jbnQxOworCXRyX3JlcVswXS5kaWNudDIgPSAxOworCXRyX3Jl cVswXS5kaWNudDMgPSAxOworCXRyX3JlcVswXS5kZGltMSA9IHRyMF9jbnQwOworCisJaWYgKG51 bV90ciA9PSAyKSB7CisJCWNwcGk1X3RyX2luaXQoJnRyX3JlcVsxXS5mbGFncywgQ1BQSTVfVFJf VFlQRTE1LCBmYWxzZSwgdHJ1ZSwKKwkJCSAgICAgIENQUEk1X1RSX0VWRU5UX1NJWkVfQ09NUExF VElPTiwgMCk7CisJCWNwcGk1X3RyX2NzZl9zZXQoJnRyX3JlcVsxXS5mbGFncywgQ1BQSTVfVFJf Q1NGX1NVUFJfRVZUKTsKKworCQl0cl9yZXFbMV0uYWRkciA9IHNyYyArIHRyMF9jbnQxICogdHIw X2NudDA7CisJCXRyX3JlcVsxXS5pY250MCA9IHRyMV9jbnQwOworCQl0cl9yZXFbMV0uaWNudDEg PSAxOworCQl0cl9yZXFbMV0uaWNudDIgPSAxOworCQl0cl9yZXFbMV0uaWNudDMgPSAxOworCisJ CXRyX3JlcVsxXS5kYWRkciA9IGRlc3QgKyB0cjBfY250MSAqIHRyMF9jbnQwOworCQl0cl9yZXFb MV0uZGljbnQwID0gdHIxX2NudDA7CisJCXRyX3JlcVsxXS5kaWNudDEgPSAxOworCQl0cl9yZXFb MV0uZGljbnQyID0gMTsKKwkJdHJfcmVxWzFdLmRpY250MyA9IDE7CisJfQorCisJY3BwaTVfdHJf Y3NmX3NldCgmdHJfcmVxW251bV90ciAtIDFdLmZsYWdzLCBDUFBJNV9UUl9DU0ZfRU9QKTsKKwor CWlmICh1Yy0+bWV0YWRhdGFfc2l6ZSkKKwkJZC0+dmQudHgubWV0YWRhdGFfb3BzID0gJm1ldGFk YXRhX29wczsKKworCXJldHVybiB2Y2hhbl90eF9wcmVwKCZ1Yy0+dmMsICZkLT52ZCwgdHhfZmxh Z3MpOworfQorCiBzdGF0aWMgdm9pZCB1ZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFu ICpjaGFuKQogewogCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOwot LSAKUGV0ZXIKClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUgMjIs IDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFp a2thL0RvbWljaWxlOiBIZWxzaW5raQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK