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 1BB76CA9ECF for ; Fri, 1 Nov 2019 08:46:06 +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 D792121A49 for ; Fri, 1 Nov 2019 08:46:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ysws6yAU"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="EuNctU7f" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D792121A49 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=cDW9PyBXkEhuWr8phZAkfU7P/dQZZ26IbQ8nwAGwKoo=; b=Ysws6yAUNwCVPX XBBEwVkLSbMIb5tGSgIvwGp5PJ1fGswvie5m267gD0OFxhJc9W7ixVO/cMVe5IXuz5bRJLNyfQm+6 r3XgxAL+BKucqirxxAlLUHjwhlwJNX+jkwPjxY4BSkeRubytbo04I8GNMVJuKU+OWRgqj6cxkkmd2 z3BgANRqmZv/2d3i7ybe8PKU4KttTfPr8AqsT2zKKvXfmEEsWfYVWb0iQffd9u3JWLphzIvl9k91M b5VoYC6fr85PBokqf99cbm6PFJXM4+MZL+KuSQwqRsI+JtFJP0xvk8zXIAOpQoqi+qmVRnR8UhQjE n4YMnwxWGdwIWzDhJx4g==; 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 1iQSZD-0005mx-AK; Fri, 01 Nov 2019 08:45:59 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iQSUb-0000ZR-7k for linux-arm-kernel@lists.infradead.org; Fri, 01 Nov 2019 08:41:21 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA18f9Lh021583; Fri, 1 Nov 2019 03:41:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572597669; bh=PAkPplyefd5lefRPI5ICLVdGT+/XYzR7I6Y0Vwyr1g8=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=EuNctU7fLRxO0JYyKQyiy6TU9PFtiPKDpEG3x4eEhPgdf+CAfWWiGMx/DBTH7SRsQ pcfuSkXldmQn2luzd0q4K1i6MEfkNTSryUV6s/k3JkHwGvt+4g70yxYn5ZmgRUQQTC o54fKjBXIqUP5JC8E6BXbXGYPoroXDmXP/otoWBM= Received: from DFLE102.ent.ti.com (dfle102.ent.ti.com [10.64.6.23]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xA18f98R015544 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 1 Nov 2019 03:41:09 -0500 Received: from DFLE106.ent.ti.com (10.64.6.27) by DFLE102.ent.ti.com (10.64.6.23) 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:40:54 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE106.ent.ti.com (10.64.6.27) 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:40:54 -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 xA18eP8j036903; Fri, 1 Nov 2019 03:41:04 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v4 10/15] dmaengine: ti: New driver for K3 UDMA - split#2: probe/remove, xlate and filter_fn Date: Fri, 1 Nov 2019 10:41:30 +0200 Message-ID: <20191101084135.14811-11-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_014113_436942_246823A8 X-CRM114-Status: GOOD ( 19.10 ) 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 U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOiBtb2R1bGUgcHJvYmUvcmVtb3ZlIGZ1 bmN0aW9ucywgb2ZfeGxhdGUKYW5kIGZpbHRlcl9mbiBmb3Igc2xhdmUgY2hhbm5lbCByZXF1ZXN0 cy4KCkRNQSBkcml2ZXIgZm9yClRleGFzIEluc3RydW1lbnRzIEszIE5BVlNTIFVuaWZpZWQgRE1B IOKAkyBQZXJpcGhlcmFsIFJvb3QgQ29tcGxleCAoVURNQS1QKQoKVGhlIFVETUEtUCBpcyBpbnRl bmRlZCB0byBwZXJmb3JtIHNpbWlsYXIgKGJ1dCBzaWduaWZpY2FudGx5IHVwZ3JhZGVkKSBmdW5j dGlvbnMKYXMgdGhlIHBhY2tldC1vcmllbnRlZCBETUEgdXNlZCBvbiBwcmV2aW91cyBTb0MgZGV2 aWNlcy4gVGhlIFVETUEtUCBtb2R1bGUKc3VwcG9ydHMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgcmVj ZXB0aW9uIG9mIHZhcmlvdXMgcGFja2V0IHR5cGVzLiBUaGUgVURNQS1QIGlzCmFyY2hpdGVjdGVk IHRvIGZhY2lsaXRhdGUgdGhlIHNlZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvZiBTb0MgRE1B IGRhdGEKc3RydWN0dXJlIGNvbXBsaWFudCBwYWNrZXRzIHRvL2Zyb20gc21hbGxlciBkYXRhIGJs b2NrcyB0aGF0IGFyZSBuYXRpdmVseQpjb21wYXRpYmxlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVp cmVtZW50cyBvZiBlYWNoIGNvbm5lY3RlZCBwZXJpcGhlcmFsLiBNdWx0aXBsZQpUeCBhbmQgUngg Y2hhbm5lbHMgYXJlIHByb3ZpZGVkIHdpdGhpbiB0aGUgRE1BIHdoaWNoIGFsbG93IG11bHRpcGxl IHNlZ21lbnRhdGlvbgpvciByZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgb25nb2luZy4gVGhl IERNQSBjb250cm9sbGVyIG1haW50YWlucyBzdGF0ZQppbmZvcm1hdGlvbiBmb3IgZWFjaCBvZiB0 aGUgY2hhbm5lbHMgd2hpY2ggYWxsb3dzIHBhY2tldCBzZWdtZW50YXRpb24gYW5kCnJlYXNzZW1i bHkgb3BlcmF0aW9ucyB0byBiZSB0aW1lIGRpdmlzaW9uIG11bHRpcGxleGVkIGJldHdlZW4gY2hh bm5lbHMgaW4gb3JkZXIKdG8gc2hhcmUgdGhlIHVuZGVybHlpbmcgRE1BIGhhcmR3YXJlLiBBbiBl eHRlcm5hbCBETUEgc2NoZWR1bGVyIGlzIHVzZWQgdG8KY29udHJvbCB0aGUgb3JkZXJpbmcgYW5k IHJhdGUgYXQgd2hpY2ggdGhpcyBtdWx0aXBsZXhpbmcgb2NjdXJzIGZvciBUcmFuc21pdApvcGVy YXRpb25zLiBUaGUgb3JkZXJpbmcgYW5kIHJhdGUgb2YgUmVjZWl2ZSBvcGVyYXRpb25zIGlzIGlu ZGlyZWN0bHkgY29udHJvbGxlZApieSB0aGUgb3JkZXIgaW4gd2hpY2ggYmxvY2tzIGFyZSBwdXNo ZWQgaW50byB0aGUgRE1BIG9uIHRoZSBSeCBQU0ktTCBpbnRlcmZhY2UuCgpUaGUgVURNQS1QIGFs c28gc3VwcG9ydHMgYWN0aW5nIGFzIGJvdGggYSBVVEMgYW5kIFVETUEtQyBmb3IgaXRzIGludGVy bmFsCmNoYW5uZWxzLiBDaGFubmVscyBpbiB0aGUgVURNQS1QIGNhbiBiZSBjb25maWd1cmVkIHRv IGJlIGVpdGhlciBQYWNrZXQtQmFzZWQgb3IKVGhpcmQtUGFydHkgY2hhbm5lbHMgb24gYSBjaGFu bmVsIGJ5IGNoYW5uZWwgYmFzaXMuCgpUaGUgaW5pdGlhbCBkcml2ZXIgc3VwcG9ydHM6Ci0gTUVN X1RPX01FTSAoVFIgbW9kZSkKLSBERVZfVE9fTUVNIChQYWNrZXQgLyBUUiBtb2RlKQotIE1FTV9U T19ERVYgKFBhY2tldCAvIFRSIG1vZGUpCi0gQ3ljbGljIChQYWNrZXQgLyBUUiBtb2RlKQotIE1l dGFkYXRhIGZvciBkZXNjcmlwdG9ycwoKU2lnbmVkLW9mZi1ieTogUGV0ZXIgVWpmYWx1c2kgPHBl dGVyLnVqZmFsdXNpQHRpLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMgfCA1MjMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg NTIzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMg Yi9kcml2ZXJzL2RtYS90aS9rMy11ZG1hLmMKaW5kZXggNWVmNzE1Y2E3M2EyLi5lMzhjNzgwY2Qy MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYworKysgYi9kcml2ZXJzL2Rt YS90aS9rMy11ZG1hLmMKQEAgLTEwNDksMyArMTA0OSw1MjYgQEAgc3RhdGljIGlycXJldHVybl90 IHVkbWFfdWRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogCiAJcmV0dXJuIElS UV9IQU5ETEVEOwogfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZG1hX2RyaXZl cjsKKworc3RhdGljIGJvb2wgdWRtYV9kbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hh biwgdm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHBzaWxfZW5kcG9pbnRfY29uZmlnICplcF9jb25m aWc7CisJc3RydWN0IHVkbWFfY2hhbiAqdWM7CisJc3RydWN0IHVkbWFfZGV2ICp1ZDsKKwl1MzIg KmFyZ3M7CisKKwlpZiAoY2hhbi0+ZGV2aWNlLT5kZXYtPmRyaXZlciAhPSAmdWRtYV9kcml2ZXIu ZHJpdmVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwl1YyA9IHRvX3VkbWFfY2hhbihjaGFuKTsKKwl1 ZCA9IHVjLT51ZDsKKwlhcmdzID0gcGFyYW07CisJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSBhcmdz WzBdOworCisJaWYgKHVjLT5yZW1vdGVfdGhyZWFkX2lkICYgSzNfUFNJTF9EU1RfVEhSRUFEX0lE X09GRlNFVCkKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fREVWOworCWVsc2UKKwkJdWMtPmRpciA9 IERNQV9ERVZfVE9fTUVNOworCisJZXBfY29uZmlnID0gcHNpbF9nZXRfZXBfY29uZmlnKHVjLT5y ZW1vdGVfdGhyZWFkX2lkKTsKKwlpZiAoSVNfRVJSKGVwX2NvbmZpZykpIHsKKwkJZGV2X2Vycih1 ZC0+ZGV2LCAiTm8gY29uZmlndXJhdGlvbiBmb3IgcHNpLWwgdGhyZWFkIDB4JTA0eFxuIiwKKwkJ CXVjLT5yZW1vdGVfdGhyZWFkX2lkKTsKKwkJdWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCQl1 Yy0+cmVtb3RlX3RocmVhZF9pZCA9IC0xOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdWMtPnBr dF9tb2RlID0gZXBfY29uZmlnLT5wa3RfbW9kZTsKKwl1Yy0+Y2hhbm5lbF90cGwgPSBlcF9jb25m aWctPmNoYW5uZWxfdHBsOworCXVjLT5ub3RkcGt0ID0gZXBfY29uZmlnLT5ub3RkcGt0OworCXVj LT5lcF90eXBlID0gZXBfY29uZmlnLT5lcF90eXBlOworCisJaWYgKHVjLT5lcF90eXBlICE9IFBT SUxfRVBfTkFUSVZFKSB7CisJCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2Rh dGEgPSB1ZC0+bWF0Y2hfZGF0YTsKKworCQlpZiAobWF0Y2hfZGF0YS0+aGF2ZV9hY2MzMikKKwkJ CXVjLT5lbmFibGVfYWNjMzIgPSBlcF9jb25maWctPnBkbWFfYWNjMzI7CisJCWlmIChtYXRjaF9k YXRhLT5oYXZlX2J1cnN0KQorCQkJdWMtPmVuYWJsZV9idXJzdCA9IGVwX2NvbmZpZy0+cGRtYV9i dXJzdDsKKwl9CisKKwl1Yy0+bmVlZHNfZXBpYiA9IGVwX2NvbmZpZy0+bmVlZHNfZXBpYjsKKwl1 Yy0+cHNkX3NpemUgPSBlcF9jb25maWctPnBzZF9zaXplOworCXVjLT5tZXRhZGF0YV9zaXplID0g KHVjLT5uZWVkc19lcGliID8gQ1BQSTVfSU5GTzBfSERFU0NfRVBJQl9TSVpFIDogMCkgKworCQkJ ICAgIHVjLT5wc2Rfc2l6ZTsKKworCWlmICh1Yy0+cGt0X21vZGUpCisJCXVjLT5oZGVzY19zaXpl ID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBjcHBpNV9ob3N0X2Rlc2NfdCkgKworCQkJCSB1Yy0+bWV0 YWRhdGFfc2l6ZSwgdWQtPmRlc2NfYWxpZ24pOworCisJZGV2X2RiZyh1ZC0+ZGV2LCAiY2hhbiVk OiBSZW1vdGUgdGhyZWFkOiAweCUwNHggKCVzKVxuIiwgdWMtPmlkLAorCQl1Yy0+cmVtb3RlX3Ro cmVhZF9pZCwgdWRtYV9nZXRfZGlyX3RleHQodWMtPmRpcikpOworCisJcmV0dXJuIHRydWU7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKnVkbWFfb2ZfeGxhdGUoc3RydWN0IG9mX3BoYW5k bGVfYXJncyAqZG1hX3NwZWMsCisJCQkJICAgICAgc3RydWN0IG9mX2RtYSAqb2ZkbWEpCit7CisJ c3RydWN0IHVkbWFfZGV2ICp1ZCA9IG9mZG1hLT5vZl9kbWFfZGF0YTsKKwlkbWFfY2FwX21hc2tf dCBtYXNrID0gdWQtPmRkZXYuY2FwX21hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCisJ aWYgKGRtYV9zcGVjLT5hcmdzX2NvdW50ICE9IDEpCisJCXJldHVybiBOVUxMOworCisJY2hhbiA9 IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgmbWFzaywgdWRtYV9kbWFfZmlsdGVyX2ZuLAorCQkJCSAg ICAgJmRtYV9zcGVjLT5hcmdzWzBdLCBvZmRtYS0+b2Zfbm9kZSk7CisJaWYgKCFjaGFuKSB7CisJ CWRldl9lcnIodWQtPmRldiwgImdldCBjaGFubmVsIGZhaWwgaW4gJXMuXG4iLCBfX2Z1bmNfXyk7 CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBjaGFuOworfQorCitz dGF0aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBhbTY1NF9tYWluX2RhdGEgPSB7CisJLnBzaWxf YmFzZSA9IDB4MTAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaGF2ZV9h Y2MzMiA9IGZhbHNlLAorCS5oYXZlX2J1cnN0ID0gZmFsc2UsCisJLnN0YXRpY3RyX3pfbWFzayA9 IEdFTk1BU0soMTEsIDApLAorCS5yY2hhbl9vZXNfb2Zmc2V0ID0gMHgyMDAwLAorCS50cGxfbGV2 ZWxzID0gMiwKKwkubGV2ZWxfc3RhcnRfaWR4ID0geworCQlbMF0gPSA4LCAvKiBOb3JtYWwgY2hh bm5lbHMgKi8KKwkJWzFdID0gMCwgLyogSGlnaCBUaHJvdWdocHV0IGNoYW5uZWxzICovCisJfSwK K307CisKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhIGFtNjU0X21jdV9kYXRhID0gewor CS5wc2lsX2Jhc2UgPSAweDYwMDAsCisJLmVuYWJsZV9tZW1jcHlfc3VwcG9ydCA9IGZhbHNlLCAv KiBNRU1fVE9fTUVNIGlzIHNsb3cgdmlhIE1DVSBVRE1BICovCisJLmhhdmVfYWNjMzIgPSBmYWxz ZSwKKwkuaGF2ZV9idXJzdCA9IGZhbHNlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5NQVNLKDEx LCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4MjAwMCwKKwkudHBsX2xldmVscyA9IDIsCisJ LmxldmVsX3N0YXJ0X2lkeCA9IHsKKwkJWzBdID0gMiwgLyogTm9ybWFsIGNoYW5uZWxzICovCisJ CVsxXSA9IDAsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCX0sCit9OworCitzdGF0 aWMgc3RydWN0IHVkbWFfbWF0Y2hfZGF0YSBqNzIxZV9tYWluX2RhdGEgPSB7CisJLnBzaWxfYmFz ZSA9IDB4MTAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaGF2ZV9hY2Mz MiA9IHRydWUsCisJLmhhdmVfYnVyc3QgPSB0cnVlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5N QVNLKDIzLCAwKSwKKwkucmNoYW5fb2VzX29mZnNldCA9IDB4NDAwLAorCS50cGxfbGV2ZWxzID0g MywKKwkubGV2ZWxfc3RhcnRfaWR4ID0geworCQlbMF0gPSAxNiwgLyogTm9ybWFsIGNoYW5uZWxz ICovCisJCVsxXSA9IDQsIC8qIEhpZ2ggVGhyb3VnaHB1dCBjaGFubmVscyAqLworCQlbMl0gPSAw LCAvKiBVbHRyYSBIaWdoIFRocm91Z2hwdXQgY2hhbm5lbHMgKi8KKwl9LAorfTsKKworc3RhdGlj IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgajcyMWVfbWN1X2RhdGEgPSB7CisJLnBzaWxfYmFzZSA9 IDB4NjAwMCwKKwkuZW5hYmxlX21lbWNweV9zdXBwb3J0ID0gZmFsc2UsIC8qIE1FTV9UT19NRU0g aXMgc2xvdyB2aWEgTUNVIFVETUEgKi8KKwkuaGF2ZV9hY2MzMiA9IHRydWUsCisJLmhhdmVfYnVy c3QgPSB0cnVlLAorCS5zdGF0aWN0cl96X21hc2sgPSBHRU5NQVNLKDIzLCAwKSwKKwkucmNoYW5f b2VzX29mZnNldCA9IDB4NDAwLAorCS50cGxfbGV2ZWxzID0gMiwKKwkubGV2ZWxfc3RhcnRfaWR4 ID0geworCQlbMF0gPSAyLCAvKiBOb3JtYWwgY2hhbm5lbHMgKi8KKwkJWzFdID0gMCwgLyogSGln aCBUaHJvdWdocHV0IGNoYW5uZWxzICovCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHVkbWFfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInRp LGFtNjU0LW5hdnNzLW1haW4tdWRtYXAiLAorCQkuZGF0YSA9ICZhbTY1NF9tYWluX2RhdGEsCisJ fSwKKwl7CisJCS5jb21wYXRpYmxlID0gInRpLGFtNjU0LW5hdnNzLW1jdS11ZG1hcCIsCisJCS5k YXRhID0gJmFtNjU0X21jdV9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAidGksajcyMWUt bmF2c3MtbWFpbi11ZG1hcCIsCisJCS5kYXRhID0gJmo3MjFlX21haW5fZGF0YSwKKwl9LCB7CisJ CS5jb21wYXRpYmxlID0gInRpLGo3MjFlLW5hdnNzLW1jdS11ZG1hcCIsCisJCS5kYXRhID0gJmo3 MjFlX21jdV9kYXRhLAorCX0sCisJeyAvKiBTZW50aW5lbCAqLyB9LAorfTsKK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHVkbWFfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHVkbWFfZ2V0X21tcnMo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IHVkbWFfZGV2ICp1ZCkKK3sKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNTVJfTEFT VDsgaSsrKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9S RVNPVVJDRV9NRU0sCisJCQkJCQkgICBtbXJfbmFtZXNbaV0pOworCQl1ZC0+bW1yc1tpXSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCQlpZiAoSVNfRVJSKHVkLT5t bXJzW2ldKSkKKwkJCXJldHVybiBQVFJfRVJSKHVkLT5tbXJzW2ldKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB1ZG1hX3NldHVwX3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9kZXYg KnVkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVkLT5kZXY7CisJaW50IGNoX2NvdW50LCBy ZXQsIGksIGo7CisJdTMyIGNhcDIsIGNhcDM7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNj ICpybV9kZXNjOworCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX3JlcywgaXJxX3JlczsKKwlz dHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCXN0YXRpYyBj b25zdCBjaGFyICogY29uc3QgcmFuZ2VfbmFtZXNbXSA9IHsgInRpLHNjaS1ybS1yYW5nZS10Y2hh biIsCisJCQkJCQkgICAgInRpLHNjaS1ybS1yYW5nZS1yY2hhbiIsCisJCQkJCQkgICAgInRpLHNj aS1ybS1yYW5nZS1yZmxvdyIgfTsKKworCWNhcDIgPSB1ZG1hX3JlYWQodWQtPm1tcnNbTU1SX0dD RkddLCAweDI4KTsKKwljYXAzID0gdWRtYV9yZWFkKHVkLT5tbXJzW01NUl9HQ0ZHXSwgMHgyYyk7 CisKKwl1ZC0+cmZsb3dfY250ID0gY2FwMyAmIDB4M2ZmZjsKKwl1ZC0+dGNoYW5fY250ID0gY2Fw MiAmIDB4MWZmOworCXVkLT5lY2hhbl9jbnQgPSAoY2FwMiA+PiA5KSAmIDB4MWZmOworCXVkLT5y Y2hhbl9jbnQgPSAoY2FwMiA+PiAxOCkgJiAweDFmZjsKKwljaF9jb3VudCAgPSB1ZC0+dGNoYW5f Y250ICsgdWQtPnJjaGFuX2NudDsKKworCXVkLT50Y2hhbl9tYXAgPSBkZXZtX2ttYWxsb2NfYXJy YXkoZGV2LCBCSVRTX1RPX0xPTkdTKHVkLT50Y2hhbl9jbnQpLAorCQkJCQkgICBzaXplb2YodW5z aWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCXVkLT50Y2hhbnMgPSBkZXZtX2tjYWxsb2MoZGV2 LCB1ZC0+dGNoYW5fY250LCBzaXplb2YoKnVkLT50Y2hhbnMpLAorCQkJCSAgR0ZQX0tFUk5FTCk7 CisJdWQtPnJjaGFuX21hcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIEJJVFNfVE9fTE9OR1Mo dWQtPnJjaGFuX2NudCksCisJCQkJCSAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5F TCk7CisJdWQtPnJjaGFucyA9IGRldm1fa2NhbGxvYyhkZXYsIHVkLT5yY2hhbl9jbnQsIHNpemVv ZigqdWQtPnJjaGFucyksCisJCQkJICBHRlBfS0VSTkVMKTsKKwl1ZC0+cmZsb3dfZ3BfbWFwID0g ZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgQklUU19UT19MT05HUyh1ZC0+cmZsb3dfY250KSwKKwkJ CQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsK Kwl1ZC0+cmZsb3dfZ3BfbWFwX2FsbG9jYXRlZCA9IGRldm1fa2NhbGxvYyhkZXYsCisJCQkJCQkg IEJJVFNfVE9fTE9OR1ModWQtPnJmbG93X2NudCksCisJCQkJCQkgIHNpemVvZih1bnNpZ25lZCBs b25nKSwKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJdWQtPnJmbG93X2luX3VzZSA9IGRldm1fa2Nh bGxvYyhkZXYsIEJJVFNfVE9fTE9OR1ModWQtPnJmbG93X2NudCksCisJCQkJCXNpemVvZih1bnNp Z25lZCBsb25nKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJdWQtPnJmbG93cyA9IGRldm1fa2NhbGxv YyhkZXYsIHVkLT5yZmxvd19jbnQsIHNpemVvZigqdWQtPnJmbG93cyksCisJCQkJICBHRlBfS0VS TkVMKTsKKworCWlmICghdWQtPnRjaGFuX21hcCB8fCAhdWQtPnJjaGFuX21hcCB8fCAhdWQtPnJm bG93X2dwX21hcCB8fAorCSAgICAhdWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQgfHwgIXVkLT50 Y2hhbnMgfHwgIXVkLT5yY2hhbnMgfHwKKwkgICAgIXVkLT5yZmxvd3MgfHwgIXVkLT5yZmxvd19p bl91c2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBSWCBmbG93cyB3aXRoIHRoZSBz YW1lIElkcyBhcyBSWCBjaGFubmVscyBhcmUgcmVzZXJ2ZWQgdG8gYmUgdXNlZAorCSAqIGFzIGRl ZmF1bHQgZmxvd3MgaWYgcmVtb3RlIEhXIGNhbid0IGdlbmVyYXRlIGZsb3dfaWRzLiBUaG9zZQor CSAqIFJYIGZsb3dzIGNhbiBiZSByZXF1ZXN0ZWQgb25seSBleHBsaWNpdGx5IGJ5IGlkLgorCSAq LworCWJpdG1hcF9zZXQodWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQsIDAsIHVkLT5yY2hhbl9j bnQpOworCisJLyogYnkgZGVmYXVsdCBubyBHUCByZmxvd3MgYXJlIGFzc2lnbmVkIHRvIExpbnV4 ICovCisJYml0bWFwX3NldCh1ZC0+cmZsb3dfZ3BfbWFwLCAwLCB1ZC0+cmZsb3dfY250KTsKKwor CS8qIEdldCByZXNvdXJjZSByYW5nZXMgZnJvbSB0aXNjaSAqLworCWZvciAoaSA9IDA7IGkgPCBS TV9SQU5HRV9MQVNUOyBpKyspCisJCXRpc2NpX3JtLT5ybV9yYW5nZXNbaV0gPQorCQkJZGV2bV90 aV9zY2lfZ2V0X29mX3Jlc291cmNlKHRpc2NpX3JtLT50aXNjaSwgZGV2LAorCQkJCQkJICAgIHRp c2NpX3JtLT50aXNjaV9kZXZfaWQsCisJCQkJCQkgICAgKGNoYXIgKilyYW5nZV9uYW1lc1tpXSk7 CisKKwkvKiB0Y2hhbiByYW5nZXMgKi8KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2VzW1JN X1JBTkdFX1RDSEFOXTsKKwlpZiAoSVNfRVJSKHJtX3JlcykpIHsKKwkJYml0bWFwX3plcm8odWQt PnRjaGFuX21hcCwgdWQtPnRjaGFuX2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFwX2ZpbGwodWQt PnRjaGFuX21hcCwgdWQtPnRjaGFuX2NudCk7CisJCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNl dHM7IGkrKykgeworCQkJcm1fZGVzYyA9ICZybV9yZXMtPmRlc2NbaV07CisJCQliaXRtYXBfY2xl YXIodWQtPnRjaGFuX21hcCwgcm1fZGVzYy0+c3RhcnQsCisJCQkJICAgICBybV9kZXNjLT5udW0p OworCQkJZGV2X2RiZyhkZXYsICJ0aS1zY2ktcmVzOiB0Y2hhbjogJWQ6JWRcbiIsCisJCQkJcm1f ZGVzYy0+c3RhcnQsIHJtX2Rlc2MtPm51bSk7CisJCX0KKwl9CisJaXJxX3Jlcy5zZXRzID0gcm1f cmVzLT5zZXRzOworCisJLyogcmNoYW4gYW5kIG1hdGNoaW5nIGRlZmF1bHQgZmxvdyByYW5nZXMg Ki8KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2VzW1JNX1JBTkdFX1JDSEFOXTsKKwlpZiAo SVNfRVJSKHJtX3JlcykpIHsKKwkJYml0bWFwX3plcm8odWQtPnJjaGFuX21hcCwgdWQtPnJjaGFu X2NudCk7CisJfSBlbHNlIHsKKwkJYml0bWFwX2ZpbGwodWQtPnJjaGFuX21hcCwgdWQtPnJjaGFu X2NudCk7CisJCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQkJcm1fZGVz YyA9ICZybV9yZXMtPmRlc2NbaV07CisJCQliaXRtYXBfY2xlYXIodWQtPnJjaGFuX21hcCwgcm1f ZGVzYy0+c3RhcnQsCisJCQkJICAgICBybV9kZXNjLT5udW0pOworCQkJZGV2X2RiZyhkZXYsICJ0 aS1zY2ktcmVzOiByY2hhbjogJWQ6JWRcbiIsCisJCQkJcm1fZGVzYy0+c3RhcnQsIHJtX2Rlc2Mt Pm51bSk7CisJCX0KKwl9CisKKwlpcnFfcmVzLnNldHMgKz0gcm1fcmVzLT5zZXRzOworCWlycV9y ZXMuZGVzYyA9IGtjYWxsb2MoaXJxX3Jlcy5zZXRzLCBzaXplb2YoKmlycV9yZXMuZGVzYyksIEdG UF9LRVJORUwpOworCXJtX3JlcyA9IHRpc2NpX3JtLT5ybV9yYW5nZXNbUk1fUkFOR0VfVENIQU5d OworCWZvciAoaSA9IDA7IGkgPCBybV9yZXMtPnNldHM7IGkrKykgeworCQlpcnFfcmVzLmRlc2Nb aV0uc3RhcnQgPSBybV9yZXMtPmRlc2NbaV0uc3RhcnQ7CisJCWlycV9yZXMuZGVzY1tpXS5udW0g PSBybV9yZXMtPmRlc2NbaV0ubnVtOworCX0KKwlybV9yZXMgPSB0aXNjaV9ybS0+cm1fcmFuZ2Vz W1JNX1JBTkdFX1JDSEFOXTsKKwlmb3IgKGogPSAwOyBqIDwgcm1fcmVzLT5zZXRzOyBqKyssIGkr KykgeworCQlpcnFfcmVzLmRlc2NbaV0uc3RhcnQgPSBybV9yZXMtPmRlc2Nbal0uc3RhcnQgKwor CQkJCQl1ZC0+bWF0Y2hfZGF0YS0+cmNoYW5fb2VzX29mZnNldDsKKwkJaXJxX3Jlcy5kZXNjW2ld Lm51bSA9IHJtX3Jlcy0+ZGVzY1tqXS5udW07CisJfQorCXJldCA9IHRpX3NjaV9pbnRhX21zaV9k b21haW5fYWxsb2NfaXJxcyh1ZC0+ZGV2LCAmaXJxX3Jlcyk7CisJa2ZyZWUoaXJxX3Jlcy5kZXNj KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWQtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBN U0kgaW50ZXJydXB0c1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogR1AgcmZsb3cgcmFu Z2VzICovCisJcm1fcmVzID0gdGlzY2lfcm0tPnJtX3Jhbmdlc1tSTV9SQU5HRV9SRkxPV107CisJ aWYgKElTX0VSUihybV9yZXMpKSB7CisJCS8qIGFsbCBncCBmbG93cyBhcmUgYXNzaWduZWQgZXhj bHVzaXZlbHkgdG8gTGludXggKi8KKwkJYml0bWFwX2NsZWFyKHVkLT5yZmxvd19ncF9tYXAsIHVk LT5yY2hhbl9jbnQsCisJCQkgICAgIHVkLT5yZmxvd19jbnQgLSB1ZC0+cmNoYW5fY250KTsKKwl9 IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgcm1fcmVzLT5zZXRzOyBpKyspIHsKKwkJCXJtX2Rl c2MgPSAmcm1fcmVzLT5kZXNjW2ldOworCQkJYml0bWFwX2NsZWFyKHVkLT5yZmxvd19ncF9tYXAs IHJtX2Rlc2MtPnN0YXJ0LAorCQkJCSAgICAgcm1fZGVzYy0+bnVtKTsKKwkJCWRldl9kYmcoZGV2 LCAidGktc2NpLXJlczogcmZsb3c6ICVkOiVkXG4iLAorCQkJCXJtX2Rlc2MtPnN0YXJ0LCBybV9k ZXNjLT5udW0pOworCQl9CisJfQorCisJY2hfY291bnQgLT0gYml0bWFwX3dlaWdodCh1ZC0+dGNo YW5fbWFwLCB1ZC0+dGNoYW5fY250KTsKKwljaF9jb3VudCAtPSBiaXRtYXBfd2VpZ2h0KHVkLT5y Y2hhbl9tYXAsIHVkLT5yY2hhbl9jbnQpOworCWlmICghY2hfY291bnQpCisJCXJldHVybiAtRU5P REVWOworCisJdWQtPmNoYW5uZWxzID0gZGV2bV9rY2FsbG9jKGRldiwgY2hfY291bnQsIHNpemVv ZigqdWQtPmNoYW5uZWxzKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZC0+Y2hhbm5l bHMpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2luZm8oZGV2LCAiQ2hhbm5lbHM6ICVkICh0 Y2hhbjogJXUsIHJjaGFuOiAldSwgZ3AtcmZsb3c6ICV1KVxuIiwKKwkJIGNoX2NvdW50LAorCQkg dWQtPnRjaGFuX2NudCAtIGJpdG1hcF93ZWlnaHQodWQtPnRjaGFuX21hcCwgdWQtPnRjaGFuX2Nu dCksCisJCSB1ZC0+cmNoYW5fY250IC0gYml0bWFwX3dlaWdodCh1ZC0+cmNoYW5fbWFwLCB1ZC0+ cmNoYW5fY250KSwKKwkJIHVkLT5yZmxvd19jbnQgLSBiaXRtYXBfd2VpZ2h0KHVkLT5yZmxvd19n cF9tYXAsCisJCQkJCSAgICAgICB1ZC0+cmZsb3dfY250KSk7CisKKwlyZXR1cm4gY2hfY291bnQ7 Cit9CisKKyNkZWZpbmUgVElfVURNQUNfQlVTV0lEVEhTCShCSVQoRE1BX1NMQVZFX0JVU1dJRFRI XzFfQllURSkgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBcCisJ CQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfM19CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xB VkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfOF9C WVRFUykpCisKK3N0YXRpYyBpbnQgdWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmF2c3Nfbm9kZSA9IHBkZXYtPmRldi5wYXJl bnQtPm9mX25vZGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qg dWRtYV9kZXYgKnVkOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCWludCBp LCByZXQ7CisJaW50IGNoX2NvdW50OworCisJcmV0ID0gZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hl cmVudChkZXYsIERNQV9CSVRfTUFTSyg0OCkpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHNldCBkbWEgbWFzayBzdHVmZlxuIik7CisKKwl1ZCA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqdWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVkKQorCQlyZXR1cm4gLUVOT01F TTsKKworCXJldCA9IHVkbWFfZ2V0X21tcnMocGRldiwgdWQpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwl1ZC0+dGlzY2lfcm0udGlzY2kgPSB0aV9zY2lfZ2V0X2J5X3BoYW5kbGUoZGV2 LT5vZl9ub2RlLCAidGksc2NpIik7CisJaWYgKElTX0VSUih1ZC0+dGlzY2lfcm0udGlzY2kpKQor CQlyZXR1cm4gUFRSX0VSUih1ZC0+dGlzY2lfcm0udGlzY2kpOworCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAidGksc2NpLWRldi1pZCIsCisJCQkJICAgJnVkLT50 aXNjaV9ybS50aXNjaV9kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxz Y2ktZGV2LWlkIHJlYWQgZmFpbHVyZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJ cGRldi0+aWQgPSB1ZC0+dGlzY2lfcm0udGlzY2lfZGV2X2lkOworCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobmF2c3Nfbm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZ1ZC0+dGlz Y2lfcm0udGlzY2lfbmF2c3NfZGV2X2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAi TkFWU1MgdGksc2NpLWRldi1pZCByZWFkIGZhaWx1cmUgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJdWQtPnRpc2NpX3JtLnRpc2NpX3VkbWFwX29wcyA9ICZ1ZC0+dGlzY2lfcm0u dGlzY2ktPm9wcy5ybV91ZG1hcF9vcHM7CisJdWQtPnRpc2NpX3JtLnRpc2NpX3BzaWxfb3BzID0g JnVkLT50aXNjaV9ybS50aXNjaS0+b3BzLnJtX3BzaWxfb3BzOworCisJdWQtPnJpbmdhY2MgPSBv Zl9rM19yaW5nYWNjX2dldF9ieV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgInRpLHJpbmdhY2MiKTsK KwlpZiAoSVNfRVJSKHVkLT5yaW5nYWNjKSkKKwkJcmV0dXJuIFBUUl9FUlIodWQtPnJpbmdhY2Mp OworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dldF9kb21haW4oZGV2LCBkZXYtPm9mX25v ZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9JTlRBX01TSSk7CisJaWYgKCFkZXYtPm1z aV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1TSSBkb21haW5cbiIp OworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUo dWRtYV9vZl9tYXRjaCwgZGV2LT5vZl9ub2RlKTsKKwlpZiAoIW1hdGNoKSB7CisJCWRldl9lcnIo ZGV2LCAiTm8gY29tcGF0aWJsZSBtYXRjaCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOwor CX0KKwl1ZC0+bWF0Y2hfZGF0YSA9IG1hdGNoLT5kYXRhOworCisJZG1hX2NhcF9zZXQoRE1BX1NM QVZFLCB1ZC0+ZGRldi5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgdWQtPmRk ZXYuY2FwX21hc2spOworCisJdWQtPmRkZXYuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0g dWRtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKKwl1ZC0+ZGRldi5kZXZpY2VfY29uZmlnID0gdWRt YV9zbGF2ZV9jb25maWc7CisJdWQtPmRkZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSB1ZG1hX3By ZXBfc2xhdmVfc2c7CisJdWQtPmRkZXYuZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9IHVkbWFfcHJl cF9kbWFfY3ljbGljOworCXVkLT5kZGV2LmRldmljZV9pc3N1ZV9wZW5kaW5nID0gdWRtYV9pc3N1 ZV9wZW5kaW5nOworCXVkLT5kZGV2LmRldmljZV90eF9zdGF0dXMgPSB1ZG1hX3R4X3N0YXR1czsK Kwl1ZC0+ZGRldi5kZXZpY2VfcGF1c2UgPSB1ZG1hX3BhdXNlOworCXVkLT5kZGV2LmRldmljZV9y ZXN1bWUgPSB1ZG1hX3Jlc3VtZTsKKwl1ZC0+ZGRldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9IHVk bWFfdGVybWluYXRlX2FsbDsKKwl1ZC0+ZGRldi5kZXZpY2Vfc3luY2hyb25pemUgPSB1ZG1hX3N5 bmNocm9uaXplOworCisJdWQtPmRkZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSB1ZG1h X2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJdWQtPmRkZXYuc3JjX2FkZHJfd2lkdGhzID0gVElfVURN QUNfQlVTV0lEVEhTOworCXVkLT5kZGV2LmRzdF9hZGRyX3dpZHRocyA9IFRJX1VETUFDX0JVU1dJ RFRIUzsKKwl1ZC0+ZGRldi5kaXJlY3Rpb25zID0gQklUKERNQV9ERVZfVE9fTUVNKSB8IEJJVChE TUFfTUVNX1RPX0RFVik7CisJdWQtPmRkZXYucmVzaWR1ZV9ncmFudWxhcml0eSA9IERNQV9SRVNJ RFVFX0dSQU5VTEFSSVRZX0JVUlNUOworCXVkLT5kZGV2LmNvcHlfYWxpZ24gPSBETUFFTkdJTkVf QUxJR05fOF9CWVRFUzsKKwl1ZC0+ZGRldi5kZXNjX21ldGFkYXRhX21vZGVzID0gREVTQ19NRVRB REFUQV9DTElFTlQgfAorCQkJCSAgICAgICBERVNDX01FVEFEQVRBX0VOR0lORTsKKwlpZiAodWQt Pm1hdGNoX2RhdGEtPmVuYWJsZV9tZW1jcHlfc3VwcG9ydCkgeworCQlkbWFfY2FwX3NldChETUFf TUVNQ1BZLCB1ZC0+ZGRldi5jYXBfbWFzayk7CisJCXVkLT5kZGV2LmRldmljZV9wcmVwX2RtYV9t ZW1jcHkgPSB1ZG1hX3ByZXBfZG1hX21lbWNweTsKKwkJdWQtPmRkZXYuZGlyZWN0aW9ucyB8PSBC SVQoRE1BX01FTV9UT19NRU0pOworCX0KKworCXVkLT5kZGV2LmRldiA9IGRldjsKKwl1ZC0+ZGV2 ID0gZGV2OworCXVkLT5wc2lsX2Jhc2UgPSB1ZC0+bWF0Y2hfZGF0YS0+cHNpbF9iYXNlOworCisJ SU5JVF9MSVNUX0hFQUQoJnVkLT5kZGV2LmNoYW5uZWxzKTsKKwlJTklUX0xJU1RfSEVBRCgmdWQt PmRlc2NfdG9fcHVyZ2UpOworCisJY2hfY291bnQgPSB1ZG1hX3NldHVwX3Jlc291cmNlcyh1ZCk7 CisJaWYgKGNoX2NvdW50IDw9IDApCisJCXJldHVybiBjaF9jb3VudDsKKworCXNwaW5fbG9ja19p bml0KCZ1ZC0+bG9jayk7CisJSU5JVF9XT1JLKCZ1ZC0+cHVyZ2Vfd29yaywgdWRtYV9wdXJnZV9k ZXNjX3dvcmspOworCisJdWQtPmRlc2NfYWxpZ24gPSA2NDsKKwlpZiAodWQtPmRlc2NfYWxpZ24g PCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpKQorCQl1ZC0+ZGVzY19hbGlnbiA9IGRtYV9nZXRf Y2FjaGVfYWxpZ25tZW50KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWQtPnRjaGFuX2NudDsgaSsr KSB7CisJCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbiA9ICZ1ZC0+dGNoYW5zW2ldOworCisJCXRj aGFuLT5pZCA9IGk7CisJCXRjaGFuLT5yZWdfcnQgPSB1ZC0+bW1yc1tNTVJfVENIQU5SVF0gKyBp ICogMHgxMDAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1ZC0+cmNoYW5fY250OyBpKyspIHsK KwkJc3RydWN0IHVkbWFfcmNoYW4gKnJjaGFuID0gJnVkLT5yY2hhbnNbaV07CisKKwkJcmNoYW4t PmlkID0gaTsKKwkJcmNoYW4tPnJlZ19ydCA9IHVkLT5tbXJzW01NUl9SQ0hBTlJUXSArIGkgKiAw eDEwMDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVkLT5yZmxvd19jbnQ7IGkrKykgeworCQlz dHJ1Y3QgdWRtYV9yZmxvdyAqcmZsb3cgPSAmdWQtPnJmbG93c1tpXTsKKworCQlyZmxvdy0+aWQg PSBpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjaF9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB1 ZG1hX2NoYW4gKnVjID0gJnVkLT5jaGFubmVsc1tpXTsKKworCQl1Yy0+dWQgPSB1ZDsKKwkJdWMt PnZjLmRlc2NfZnJlZSA9IHVkbWFfZGVzY19mcmVlOworCQl1Yy0+aWQgPSBpOworCQl1Yy0+cmVt b3RlX3RocmVhZF9pZCA9IC0xOworCQl1Yy0+dGNoYW4gPSBOVUxMOworCQl1Yy0+cmNoYW4gPSBO VUxMOworCQl1Yy0+ZGlyID0gRE1BX01FTV9UT19NRU07CisJCXVjLT5uYW1lID0gZGV2bV9rYXNw cmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMgY2hhbiVkIiwKKwkJCQkJICBkZXZfbmFtZShkZXYp LCBpKTsKKworCQl2Y2hhbl9pbml0KCZ1Yy0+dmMsICZ1ZC0+ZGRldik7CisJCS8qIFVzZSBjdXN0 b20gdmNoYW4gY29tcGxldGlvbiBoYW5kbGluZyAqLworCQl0YXNrbGV0X2luaXQoJnVjLT52Yy50 YXNrLCB1ZG1hX3ZjaGFuX2NvbXBsZXRlLAorCQkJICAgICAodW5zaWduZWQgbG9uZykmdWMtPnZj KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwl9CisKKwly ZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZ1ZC0+ZGRldik7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBzbGF2ZSBETUEgZW5naW5lOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCB1ZCk7CisKKwlyZXQgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdpc3RlcihkZXYtPm9mX25vZGUs IHVkbWFfb2ZfeGxhdGUsIHVkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIG9mX2RtYSBjb250cm9sbGVyXG4iKTsKKwkJZG1hX2FzeW5jX2RldmljZV91 bnJlZ2lzdGVyKCZ1ZC0+ZGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCB1ZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1 ZG1hX2RldiAqdWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW9mX2RtYV9jb250 cm9sbGVyX2ZyZWUocGRldi0+ZGV2Lm9mX25vZGUpOworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdp c3RlcigmdWQtPmRkZXYpOworCisJLyogTWFrZSBzdXJlIHRoYXQgd2UgZGlkIHByb3BlciBjbGVh bnVwICovCisJY2FuY2VsX3dvcmtfc3luYygmdWQtPnB1cmdlX3dvcmspOworCXVkbWFfcHVyZ2Vf ZGVzY193b3JrKCZ1ZC0+cHVyZ2Vfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRtYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5h bWUJPSAidGktdWRtYSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHVkbWFfb2ZfbWF0Y2gsCisJfSwK KwkucHJvYmUJCT0gdWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IHVkbWFfcmVtb3ZlLAorfTsKKwor bW9kdWxlX3BsYXRmb3JtX2RyaXZlcih1ZG1hX2RyaXZlcik7CisKK01PRFVMRV9BTElBUygicGxh dGZvcm06dGktdWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBLMyBETUEgZHJpdmVyIGZv ciBDUFBJIDUuMCBjb21wbGlhbnQgZGV2aWNlcyIpOworTU9EVUxFX0FVVEhPUigiUGV0ZXIgVWpm YWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1 IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290 aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==