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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 8B542C9833F for ; Sun, 27 Sep 2026 20:14:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qcxzqkEDu1iN2Qy7sDpkoiIOE49A3GB51GJsCAfExG8=; b=ufy3hqkPzsbhWQ X64uSoS/DefspyEc0gLZ1dziWzTshQOqnxbtnF2lDC/YVl2petyYKo+E4/Ano/Y8EuV/+32HPyccU cJ0vt9YSPWzP+aJqGUrGILs/nSWGxkX1E5wOMbPiRsRTKc9kS1zxCQp76nOU3EUfYpPrz0LAUv3j1 JlnAB0s4OazZUOA6JYcffeLfytmx4QcYiLnuWr9s1wrzNVzqPrhc2wNoFR2UHhwU0oDOfxjCpyFxX oMq4VDanQdKy/BEqo6pyzRXyKhM2ElTJruyBQ/KMkG3DPYnpgzG2REBRIpxpMP0PlfExvxZeF+322 ta2/r+ykCuKNqp1RcGfQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xAvGf-0000000GnlH-0R1M; Sun, 27 Sep 2026 20:14:37 +0000 Received: from mail-wr2-x10.google.com ([2a00:1450:4864:30::10]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xAvGZ-0000000Gnfe-2Gsr for linux-phy@lists.infradead.org; Sun, 27 Sep 2026 20:14:35 +0000 Received: by mail-wr2-x10.google.com with SMTP id ffacd0b85a97d-4843cedd129so1290771f8f.0 for ; Sun, 27 Sep 2026 13:14:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790540070; x=1791144870; darn=lists.infradead.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=V/KRWurRoJ6BhV7CyY/li23caz2OE8w69+h4Sm4TPoU=; b=ZfXNFfuP8Z0cGuc3PAx/k/XedXzw0qd2ZIUQPT+yELXRn732WslR3Gfl0hcuiJSrtC /8vlChDIO6rDmmYlbMeb5y9x9eVwbkmpLARyBNFvl/f8f7Rz6LGTRI4jfq3In2Ve7LvX x9nsgQOmyBT2RHHHtTHhBbfqNTHYV1vvYh1B0Ukyp0ufKRvD7Ojw2PI1jIGKEt6OeEZg N7z+UezATcpXoL0d2WjEGWHMbC//7u3MgXn7OEaWUjl7Oz3pA8rNUFqJF1oKEVhMIMxx 3loBYOUgzM7nRmicylYp/MPRMm4L7rMcbehaw3JGYqkbmUzsEMEx4//OALaI8U/8NxV6 cdJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790540070; x=1791144870; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=V/KRWurRoJ6BhV7CyY/li23caz2OE8w69+h4Sm4TPoU=; b=C875hNRtridAw8S9kQQjHxbbkD64yMWru03G0TxKZtq66lRlSU0tLh3jELnz6aPvDd 2mWmctxvGA3lFV4L6gOw6admCbuDVh3DIHwF8Xu/186BVQt6QGgoV4630SOpyJbQzVMB fmr1vNJZ8EnDFz+F+eVfgX+EaSHPvyOfF4yEU6gT4Xk2Ra5TlR6+38dp0Iu9VuqbexKL 9FXRprLc6s1fLv5vAGp5cB7W8URP9aJDaf2lwMci/AGdzVztDKyfgTil6gYPpxIVFTMO axidSn0cOKeFxIO46ABLAoOmTvsJpYQPgYRMmYW4Mjso8GZtyBbDIHgzJ3zQfJf7P90G TERw== X-Forwarded-Encrypted: i=1; AKwUvBwh9K/HzxjpMSTTR7Oq/a/BqiAks++/b3nsXOCkzCqXkPAI9VkNZnI8chf3ne/7eI6idwTgdZrVj3E=@lists.infradead.org X-Gm-Message-State: AFq9FYIYDXwt1khkix7etRKzvayBUk4+IsLNbRXzRKOxUMELTq6t/mpA ppjuNMgaiLP2dFDe/XAdOQbXr/UQbNa0XT0/bSQRVv1jXUW9M/jcz807 X-Gm-Gg: AYBFou1lbb1XJw4xFCkcedY4N2rexn59fCErXRaS4mcttkErYcZMn84cf3PJIq68ZhN ZNdk3Kl6Dwv4XF9tFT3Awqa7AKEm14QQiZQyNmS7h6Ts7xSjQNDe06wXI3oVY+UNRr5NTOdMMmR Gg7jFOeXvUaFTjusTT7/FVekEPMzgOm5rmAZu0/KvaB5Os7ByBsEssba+1Ui255/6ZhImDZTQqE IPIlIGZhR0ZN6VC+B9nlYIygAACLcNlU/d8XNW7FH1Qr/yHc9yfFkslrY4de10Fkn7JOklLVZP3 PSvqtlavaq1IY+3+v5Du62WLB28+VH0Wr3INNdZ/RbRhOvIVpAAJOBrre8+xag3uhN6fo91F7RV yc8Lv/npRvaUiUM76T7jy+s+9LaKdanTKb0Ly7K4k829hy7Cb9O/EKXPcO+e8JbOjG4FWRIWvBa 8yBRgiMoOpA55y/mijsPISHx/Lkl+A8X2hUXpAMnIPng4F8YcARiAwopZkCCMaRCry32upzKBDE Iw/cb8F X-Received: by 2002:a5d:5d88:0:b0:488:8859:b0b4 with SMTP id ffacd0b85a97d-4888859b272mr7241100f8f.9.1790540069624; Sun, 27 Sep 2026 13:14:29 -0700 (PDT) Received: from [192.168.0.2] ([197.250.96.148]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4887a34a570sm21781514f8f.13.2026.09.27.13.14.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Sep 2026 13:14:29 -0700 (PDT) From: =?utf-8?q?Stefan_D=C3=B6singer?= Date: Sun, 27 Sep 2026 23:13:36 +0300 Subject: [PATCH v13 08/13] clk: zte: Add zx PLL support infrastructure MIME-Version: 1.0 Message-Id: <20260927-zx29clk-v13-8-70d8f673386c@gmail.com> References: <20260927-zx29clk-v13-0-70d8f673386c@gmail.com> In-Reply-To: <20260927-zx29clk-v13-0-70d8f673386c@gmail.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel , Brian Masney , Vinod Koul , Neil Armstrong , Russell King , Lee Jones , Brian Masney , Jerome Brunet , Manivannan Sadhasivam Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, mfd@lists.linux.dev, =?utf-8?q?Stefan_D=C3=B6singer?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=24260; i=stefandoesinger@gmail.com; h=from:subject:message-id; bh=Zsc3l1UBoa6nhcnX1b0CUglNiu+eSJwVSqjjG25jJVs=; b=owEBiQJ2/ZANAwAIAT0TvMhUTxoiAcsmYgBquXj1Qid3kotjsK6WmIqSo26i3kB9509q9mD9b a7+81IDIIGJAk8EAAEIADkWIQRDFvS2qgVbJ5UyXWw9E7zIVE8aIgUCarl49RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQPRO8yFRPGiKrvxAAlr/7HFgebCzI2hShDi8z5g83O3kaP+O X47fD+ED78oExl+VGSKYrzR7VhPS88dCbkZkPfuhgPD3VVIT3szAo4ks8kHYvLhWP29spGDe7c5 NI9lmwi+YaC/8Q/ewBZEf61pW38pgNn7z7jJjGQHWijewsSAvhtYlz0ErodOPXNp4HDothyeBwV QRrT+TGoUNhHu/pfM69gcsPXdwJgSLPGrdKs6aAEDz4QZSzxpqdhJ8dtpPVgJhxBEUDRK3djIPq X9qTiJOBEnjwtJKqMNV5ejxdsCNw0boN8P21MXR9f+i4zoTgz/pOfBhqUvQqI0yscq7+tdUpunt JDYPQP11rj9utSvVcLJ+EZVoPpz0njOk1mM4dKzxuz9g+twhj8Jqq9HY0M+eZvsefTacpYS12RT 0IZ1rJcmJZsF+Wv4SoE12Oft+63ZyRoh8T3MoIF0CphXl/u9qbCCiyHtAnoKRbrJkoBxeV05J8a 0b8AJPjVI0ewMPM9N0xmQRylDDXJGKxpXHX9YPVb9QFx7Amt8OpRISTs4A+irHTTcGPVdmbWJEU 83E9PbxoS1MQNSuJy8fitv4q4wBHcJBbHBUPwdx/weeuFQdaXc9/4xzOdyFC1ynJPs/MNU/9Hfq BZrYFz/HE7fk1oaQFbpdoObcJG6gthSasBjWQi/3bkrMuLw9ZCR0= X-Developer-Key: i=stefandoesinger@gmail.com; a=openpgp; fpr=4F9C2C8728019633893EBBB98CB81F9A72BBA155 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260927_131432_457927_8E779910 X-CRM114-Status: GOOD ( 44.89 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhpcyBwYXRjaCBhZGRzIGNvZGUgdG8gZGVjb2RlIGFuZCBwcm9ncmFtIFBMTCBzZXR0aW5ncyBv biBaVEUncwp6eDI5NzUyMHYzIFNvQy4gVGhlIFBMTHMgb24gdGhpcyBTb0MgYXJlIHVzdWFsbHkg cHJvZ3JhbW1lZCB0byBzdGF0aWMKdmFsdWVzIGJ5IHRoZSBib290IGxvYWRlci4gVGhlIG9ubHkg c2l0dWF0aW9uIHdoZXJlIC5zZXRfcmF0ZSBtYXR0ZXJzIGlzCmRwbGwsIHdoaWNoIGlzIG5vdCBw cm9ncmFtbWVkIGluIHNvbWUgY2FzZXMuIFRoZSBib290bG9hZGVyIGFsd2F5cyBzZXRzCmZpeGVk IHJhdGVzIHRob3VnaDogNjI0IE1IeiBmb3IgbXBsbCwgMjAwIGZvciBncGxsLCA0ODAgZm9yIHVw bGwuCgpQYXJzaW5nIHRoZSBib290bG9hZGVyLXByb2dyYW1tZWQgdmFsdWVzIGFsbG93cyB0aGUg Y2xvY2sgZHJpdmVyIHRvIGZpbGwKdGhlIGNsb2NrIHRyZWUgd2l0aCBhcHByb3ByaWF0ZWx5IGNs b2NrZWQgcGFyZW50IGNsb2NrcyBpbnN0ZWFkIG9mCnJlZ2lzdGVyaW5nIGZpeGVkIGNsb2NrcyB3 aXRoIGhhcmRjb2RlZCByYXRlcy4KCkkgb25seSB0ZXN0ZWQgdGhlIGNvZGUgb24gengyOTc1MjB2 My4gRnJvbSBsb29raW5nIGF0IHRoZSBoYXJkY29kZWQgUExMCnZhbHVlcyBpbiB0aGUgb2xkIHp4 Mjk2NzAyIC8gengyOTY3MTggY29kZSBJIGJlbGlldmUgdGhhdCB0aGVzZSBQTExzIHVzZQp0aGUg c2FtZSBlbmNvZGluZywgc28gdGhlIGNvZGUgYWRkZWQgYnkgdGhpcyBwYXRjaCBzaG91bGQgYmUg cmV1c2FibGUKYW5kIHRoZSBmaWxlIGhhcyBhIHJlbGF0aXZlbHkgZ2VuZXJpYyBuYW1lIHBsbC16 eC5jLgoKUmV2aWV3ZWQtYnk6IEJyaWFuIE1hc25leSA8Ym1hc25leUByZWRoYXQuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBTdGVmYW4gRMO2c2luZ2VyIDxzdGVmYW5kb2VzaW5nZXJAZ21haWwuY29tPgoK LS0tCgpWZXJzaW9uIDEzOiB1bmNoYW5nZWQKUmVnYXJkaW5nIFNhc2hpa28ncyBjb25jZXJuIGFi b3V0IHNlbGVjdGluZyAiUkFUSU9OQUwiIGZvcgpyYXRpb25hbF9iZXN0X2FwcHJveGltYXRpb246 IENPTU1PTl9DTEssIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUKY29kZSBpbiB0aGlz IHBhdGNoIGFscmVhZHkgZW5hYmxlcyBSQVRJT05BTC4gZHJpdmVycy9jbGsvenRlL0tjb25maWcg aXMKb25seSBpbmNsdWRlZCBpZiBDT01NT05fQ0xLIGlzIGVuYWJsZWQuIEkgZG9uJ3QgdGhpbmsg aXQgY2FuIGxlYWQgdG8KYnVpbGQgcHJvYmxlbXMgZXZlbiB3aXRoIENPTVBJTEVfVEVTVC4KCnFj b20gY2xvY2tzIGVuYWJsZSBSQVRJT05BTCBvbiB0aGVpciBvd24sIHNvIEkgZ3Vlc3MgSSBjYW4g ZG8gdGhlIHNhbWUKaWYgZGVzaXJlZC4gTWFueSBvdGhlciBjbG9jayBkcml2ZXJzIHVzZSByYXRp b25hbF9iZXN0X2FwcHJveGltYXRpb24Kd2l0aG91dCB0aGF0IHRob3VnaC4KClZlcnNpb24gMTEs IDEyOiBVbmNoYW5nZWQKClZlcnNpb24gMTA6ClVzZSBGSUVMRF9HRVQgLyBGSUVMRF9QUkVQLCBy ZW1vdmUgbm93IHJlZHVuZGFudCBfU0hJRlQgZGVmaW5lcy4KClZlcnNpb24gOToKKikgVGFrZSBy ZXEtPm1pbl9yYXRlIGFuZCByZXEtPm1heF9yYXRlIGludG8gYWNjb3VudCB3aGVuIGxvb2tpbmcg Zm9yCnBvc3NpYmxlIFBMTCBjb25maWd1cmF0aW9ucyAoc2FzaGlrbykuIEluIHByYWN0aWNlIHRo ZSBjb2RlIHdpbGwgc3RpbGwKb25seSBldmVyIGVuY291bnRlciBhIGZpeGVkIHJlcXVlc3QgdG8g c2V0IGRwbGwgdG8gNDkxLjUyIE1Iei4KCiopIFRoZSBzYW1lIGNvZGUgc3R5bGUgY2hhbmdlcyBC cmlhbiByZXF1ZXN0ZWQgb24gdGhlIG90aGVyIGNsayBwYXRjaGVzLgoKVmVyc2lvbiA4OgoqKSBE b2N1bWVudCB0aGUgYmVoYXZpb3Igb2YgdW5sb2NrZWQgUExMcyBiZXR0ZXI6IFRoZXkgZG9uJ3Qg cGFzcwp0aHJvdWdoIHRoZWlyIHJlZmVyZW5jZS9wYXJlbnQsIGJ1dCBwYXNzIHRocm91Z2ggdGhl IGZpeGVkIGNsb2NrLTI2bQpvc2NpbGxhdG9yLCBldmVuIGlmIHRoZWlyIHJlZmVyZW5jZSBjbG9j ayBpcyBzb21ldGhpbmcgZWxzZS4KKikgZHBsbCBoYXMgd29ya2luZyBmcmFjdGlvbmFscy4gQWRk IHRoaXMgaW4gdGhlIGNvbW1lbnQsIGJ1dCB0aGVyZSBpcwpubyBhY3R1YWwgY29kZSBzdXBwb3J0 IGZvciBpdCAtIHRoZSBMVEUgaGFyZHdhcmUgZG9lc24ndCBuZWVkIGl0LgoKQXMgZm9yIFNhc2hp a28ncyBjb21tZW50cyBvbiB0aGUgLnNldF9yYXRlIGltcGxlbWVudGF0aW9uOiBJbiBwcmFjdGlj ZQouc2V0X3JhdGUgd2lsbCBvbmx5IGV2ZXIgc2V0IG9uZSByYXRlLCA0OTEuNTIgTUh6IGZvciBk cGxsLiBBbGwgb3RoZXIKUExMcyBhcmUgYm9vdGxvYWRlciBjb25maWd1cmVkLiBEcGxsIGNvdWxk IGJlIGhhbmRsZWQgYnkgd3JpdGluZyBhIG1hZ2ljCmNvbnN0YW50IGludG8gaXRzIGNvbmZpZy4K Ckkgd2FudCB0byBoYXZlIHRoZSByYXRlIGZpbmRpbmcgY29kZSBhcyBkb2N1bWVudGF0aW9uLCBh bmQgbWF5YmUgdGhlcmUKaXMgbW9yZSBlbGFib3JhdGUgZnV0dXJlIHVzZSBmb3IgaXQgKGUuZy4g bW9yZSBmbGV4aWJsZSB1bmRlcmNsb2NraW5nKSwKYnV0IGF0dGVtcHRzIHRvIGhhbmRsZSBldmVu dHVhbGl0aWVzIGxpa2UgcmF0ZSBzZWFyY2hlcyBvciBtaXNjb25maWd1cmVkCmJvb3Rsb2FkZXIg dmFsdWVzIHdvdWxkIGJlIGRlYWQgY29kZS4KClZlcnNpb24gNzoKKikgQWx3YXlzIGtlZXAgdW5r bm93bnBsbCBlbmFibGVkIHdoZW4gcHJlcGFyZWQgc28gZHBsbCBjYW4gYWNxdWlyZSBhCmxvY2sg aW4gaXRzIHByZXBhcmUoKSBmdW5jdGlvbi4KKikgQ2xlYW4gdXAgZXJyb3IgcmVwb3J0aW5nIGEg Yml0IChTYXNoaWtvKQoKVmVyc2lvbiA2OgoqKSBVc2UgYWJzX2RpZmYgdG8gY29tcGFyZSB0YXJn ZXQgYW5kIGNhbmRpZGF0ZSBQTEwgcmF0ZSAoU2FzaGlrbykuCiopIFVzZSByZXEtPmJlc3RfcGFy ZW50X3JhdGUgaW4gengyOV9wbGxfZGV0ZXJtaW5lX3JhdGUuIEFkZCBhIFRPRE8KY29tbWVudCBh Ym91dCB0aGUgcGFyZW50IHJhdGUgZmxleGliaWxpdHkuCgpWZXJzaW9uIDU6IEZpeCBzb21lIGlz c3VlcyBwb2ludGVkIG91dCBieSBTYXNoaWtvOiBOVUxMIGRldiwKengyOV9wbGxfcmVjYWxjX3Jh dGUgZXJyb3IgaGFuZGxpbmcsIGRpc2FibGUgUExMIGFnYWluIG9uIGVuYWJsZSBlcnJvci4KLS0t CiBkcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMgfCA1NjQgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA1NjEgaW5zZXJ0aW9ucygr KSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMg Yi9kcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMKaW5kZXggZmM3NmM2NTI0YTE2Li5kMzY4NzQ5NWQw NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3p0ZS9wbGwtenguYworKysgYi9kcml2ZXJzL2Ns ay96dGUvcGxsLXp4LmMKQEAgLTMsMTYgKzMsNTc0IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMjYg U3RlZmFuIETDtnNpbmdlcgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgogI2lu Y2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2lu Y2x1ZGUgPGxpbnV4L2NvbnRhaW5lcl9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVk ZSA8bGludXgvbWF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGlvbmFsLmg+CiAjaW5jbHVkZSA8 bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51 eC91bml0cy5oPgogCiAjaW5jbHVkZSAiY2xrLXp4LmgiCiAKKy8qCisgKiBUaGlzIGNvZGUgaGFz IG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aCB6eDI5NzUyMHYzIFBMTHMsIGJ1dCBmcm9tIHJlYWRpbmcg dGhlIHp4Mjk2NzE4IGNsb2NrIGNvZGUgaXQKKyAqIGxvb2tzIGxpa2UgUExMIHJlZ2lzdGVycyBh cmUgc2ltaWxhci4gWlRFJ3Mgc291cmNlcyBleHBsYWluIHRoZSBQTEwgcmVnaXN0ZXIgY29udGVu dHMgb25seSBpbiBhCisgKiAuY21tIGZpbGUgKEEgTGF1dGVyYmFjaCBUUkFDRTMyIHNjcmlwdCkg YW5kIHNvbWUgdW51c2VkIGhlYWRlcnMgaW4gdGhlaXIgVS1Cb290IGNvZGUgZHVtcCwgd2hpY2gK KyAqIG1heSBub3QgYmUgYWNjdXJhdGUuIFdoZW4gY2FsY3VsYXRpbmcgdGhlIGZyZXF1ZW5jaWVz IGZyb20gdGhlIGRlZmF1bHQgUExMIGNvbmZpZ3VyYXRpb24gdGhlCisgKiByZXN1bHRzIG1hdGNo IHRoZSBmaXhlZCByYXRlIGNsb2NrcyBmcm9tIHRoZWlyIGNsb2NrIGRyaXZlci4KKyAqCisgKiBU aGUgMjYgTUh6IGFuZCAzMiBrSHogY2xvY2tzIGNhbiBiZSBlYXNpbHkgb2JzZXJ2ZWQgd2l0aCB0 aGUgdGltZXJzLiBUaGUgMTA0IE1IeiBvdXRwdXQgY2FuIGJlCisgKiBvYnNlcnZlZCB0aHJvdWdo IHRoZSBVQVJULiBPbmUgMTIyLjg4IE1IeiBjbG9jayBjYW4gYmUgb2JzZXJ2ZWQgdGhyb3VnaCB0 aGUgVERNIGRldmljZS4gQWxsCisgKiBvdGhlcnMgY2FuIG9ubHkgYmUgaW5kaXJlY3RseSBpbmZl cnJlZCwgZS5nLiBieSBjb21wYXJpbmcgQ1BVIHNwZWVkIG9yIFNESU8gdHJhbnNmZXIgcmF0ZSBi ZXR3ZWVuCisgKiB0aGUgZml4ZWQgMjYgTUh6IG9zY2lsbGF0b3IgYW5kIHRoZSBwcm92aWRlZCBQ TEwgZnJlcXVlbmN5LgorICoKKyAqIFRoZSBmb3JtdWxhIHRvIGNhbGN1bGF0ZSB0aGUgY2xvY2sg aXMgKChyZWYgLyByZWZkaXYpICogZmJkaXYpIC8gcG9zdGRpdjEgLyBwb3N0ZGl2Mi4gVGhlIG1h c2tzCisgKiBhcmUgZ2l2ZW4gYmVsb3cuIFRoZXJlIGFyZSBhIGZldyBjb250cm9sIGZsYWdzOgor ICoKKyAqIEJpdCAzMTogRGlzYWJsZXMgdGhlIFBMTCwgYnV0IHBhc3NlcyBjbG9jay0yNm0gdGhy b3VnaCB1bm1vZGlmaWVkLiBXaGV0aGVyIFBPU1RESVZfT1VUX0RJU0FCTEUKKyAqICAgICAgICAg c3RpbGwgbWF0dGVycyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBQTExzLgorICogQml0IDMwOiBSZXR1 cm5zIGlmIHRoZSBQTEwgaXMgbG9ja2VkCisgKiBCaXQgMjk6IE5vdCBuYW1lZCBpbiBaVEUncyBj b2RlLCBidXQgY2FuIGJlIHNldC4gVGhlcmUgaXMgbm8gb2J2aW91cyBpbXBhY3QuIExvY2sgdGlt ZXMgYXJlCisgKiAgICAgICAgIHVuY2hhbmdlZCwgc28gaXQgZG9lc24ndCBpbmZsdWVuY2Ugb3Ig YnlwYXNzIGxvY2sgZGV0ZWN0aW9uLiBJdCBkb2Vzbid0IHJhaXNlIGFueSBJUlFzIG9yCisgKiAg ICAgICAgIGluZmx1ZW5jZSBHUElPcy4KKyAqIEJpdCAyNzogR2l2ZW4gaXRzIG5hbWUgaXQgbGlr ZWx5IGRpc2FibGVzIHRoZSBEZWx0YS1TaWdtYSBNb2R1bGF0b3IsIGlmIG9uZSBleGlzdHMgYXQg YWxsLiBUaGUKKyAqICAgICAgICAgYm9vdCBST00gc2V0cyBpdCBvbiBldmVyeSBQTEwuIFVuc2V0 dGluZyBpdCBtYXJnaW5hbGx5IGRlY3JlYXNlcyB0aGUgdGltZSBpdCB0YWtlcyB0bworICogICAg ICAgICBsb2NrIHRvIHRoZSByZWZlcmVuY2UgY2xvY2sgKGZyb20gfjQwMCB1cyB0byB+MzAwIHVz KS4KKyAqIEJpdCAyNDogQnlwYXNzZXMgdGhlIFZDTywgYnV0IHN0aWxsIGFwcGxpZXMgcmVmZGl2 IGFuZCBwb3N0ZGl2LiBEb2Vzbid0IG1hdHRlciBpZiBQTExfRElTQUJMRT0xLgorICoKKyAqIE5C OiBTb21lIFBMTHMgaGF2ZSBhbiBhdXRvbWF0aWMgYnlwYXNzIGxvZ2ljIHRoYXQgZm9yd2FyZHMg Y2xvY2stMjZtIChSRUdBUkRMRVNTIG9mIHJlZmVyZW5jZSkKKyAqIHdoZW4gdGhleSBkb24ndCBo YXZlIGEgbG9jaywgcmVnYXJkbGVzcyBvZiByZWFzb24uIFRoaXMgY2FuIGJlIHRyaWdnZXJlZCBi eSBkaXNhYmxpbmcgdGhlIFBMTCwKKyAqIHNldHRpbmcgYW4gb3V0LW9mLXNwZWMgVkNPIGZyZXF1 ZW5jeSBvciBkaXNhYmxpbmcgdGhlIHBhcmVudC4gVGhpcyBzaG91bGRuJ3QgbWF0dGVyIGluIHJl Z3VsYXIKKyAqIG9wZXJhdGlvbiwgYnV0IGNhdXNlZCBtZSBzb21lIGNvbmZ1c2lvbiB3aGVuIHJl dmVyc2UgZW5naW5lZXJpbmcgdGhlIGNsb2NrIHRyZWUuIEUuZy4gY2xvY2stMjZtLT4KKyAqIHVu a25vd25wbGwoZGlzYWJsZWQpIC0+IGRwbGwoZW5hYmxlZCkgY291bnRlcmludHVpdGl2ZWx5IHJl c3VsdHMgaW4gYSAyNiBNSHogb3V0cHV0IGNsb2NrLgorICovCisKKyNkZWZpbmUgWlgyOV9QTExf RElTQUJMRQkJCUJJVCgzMSkKKyNkZWZpbmUgWlgyOV9QTExfTE9DS0VECQkJCUJJVCgzMCkKKyNk ZWZpbmUgWlgyOV9QTExfTE9DS19GSUxURVIJCQlCSVQoMjkpCisjZGVmaW5lIFpYMjlfUExMX0RT TV9ESVNBQkxFCQkJQklUKDI3KQorI2RlZmluZSBaWDI5X1BMTF9QQVJFTlRfTUFTSwkJCUdFTk1B U0soMjYsIDI1KQorI2RlZmluZSBaWDI5X1BMTF9CWVBBU1MJCQkJQklUKDI0KQorI2RlZmluZSBa WDI5X1BMTF9SRUZESVZfTUFTSwkJCUdFTk1BU0soMjMsIDE4KQorI2RlZmluZSBaWDI5X1BMTF9G QkRJVl9NQVNLCQkJR0VOTUFTSygxNywgNikKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVjFfTUFT SwkJCUdFTk1BU0soNSwgMykKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVjJfTUFTSwkJCUdFTk1B U0soMiwgMCkKKworLyoKKyAqIFRoZSBzZWNvbmQgcmVnaXN0ZXIgaGFzIGEgMjQgYml0IGZyYWN0 aW9uYWwgdmFsdWUsIHdoaWNoIG9ubHkgbWF0dGVycyB3aGVuIFpYMjlfUExMX0RTTV9ESVNBQkxF CisgKiBpcyBub3Qgc2V0LCBhbmQgb25seSBzZWVtcyB0byBtYXR0ZXIgZm9yIGRwbGwuIFpURSdz IGZpcm13YXJlIGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZSBmcmFjdGlvbmFsCisgKiBhbmQgaXQg aXMgdW5pbXBsZW1lbnRlZCBpbiB0aGlzIGRyaXZlci4gRXhwZXJpbWVudGFsIHRlc3RpbmcgY29u ZmlybXMgdGhhdCBpdCBoYXMgYW4gaW1wYWN0IG9uCisgKiBkcGxsLgorICoKKyAqIEJpdHMgMjc6 MjQgY29udGFpbiBtb3JlIGZsYWdzOgorICoKKyAqIEJpdCAyNzogU2V0dGluZyBaWDI5X1BMTF9E QUNBUCBzbG93cyBkb3duIHRoZSBsb2NrIHRpbWUgYW5kIG9idmlhdGVzIHRoZSBzcGVlZCBnYWlu ZWQgZnJvbQorICogICAgICAgICAhRFNNX0RJU0FCTEUuIE5vIG90aGVyIGVmZmVjdCBvYnNlcnZl ZC4KKyAqCisgKiBCaXQgMjY6IFpYMjlfUExMXzRQSEFTRV9PVVRfRElTQUJMRSBpcyBzZXQgb24g c29tZSBQTExzIG9uIGJvb3QgYnV0IG5vdCBvbiBvdGhlcnMuIEl0IGlzIHNldCBvbgorICogICAg ICAgICBib290IG9uIG1wbGwgYW5kIHVwbGwsIGJ1dCBub3QgZ3BsbCwgZHBsbCBvciB1bmtub3du cGxsLiBJIGFtIG5vdCBzdXJlIHdoYXQgaXQgZG9lcworICogICAgICAgICBlaXRoZXIuIFRoZSBT RElPIGRldmljZXMgYnJlYWsgaWYgdGhleSBhcmUgZmVkIGZyb20gZ3BsbCB3aXRoIHRoaXMgZmxh ZyBzZXQsIGJ1dCB0aGV5CisgKiAgICAgICAgIHdvcmsgT0sgaWYgdGhleSBhcmUgZmVkIGZyb20g bXBsbCB3aXRob3V0IHRoaXMgZmxhZyBzZXQuCisgKgorICogQml0IDI1OiBaWDI5X1BMTF9QT1NU RElWX09VVF9ESVNBQkxFIHNlZW1zIHRvIGRpc2FibGUgdGhlIFBMTCBvdXRwdXQgZW50aXJlbHku IFdoZXRoZXIgaXQgaXMKKyAqICAgICAgICAgYnlwYXNzZWQgYnkgUExMX0RJU0FCTEUgZGlmZmVy cyBiZXR3ZWVuIFBMTHMuIGdwbGwgc3RpbGwgcHJvZHVjZXMgYW4gb3V0cHV0IGNsb2NrIGlmCisg KiAgICAgICAgIFBMTF9ESVNBQkxFID0gMSBhbmQgUE9TVERJVl9ESVNBQkxFID0gMSwgYnV0IHBy b2R1Y2VzIG5vIG91dHB1dCBpZiBQTExfRElTQUJMRSA9IDAgYW5kCisgKiAgICAgICAgIFBPU1RE SVZfRElTQUJMRSA9IDEuIFRoZSBkcGxsIGZlZWRlciAoInVua25vd25wbGwiKSBhdCAweDEwMCBw cm9kdWNlcyBubyBvdXRwdXQgY2xvY2sgaWYKKyAqICAgICAgICAgYm90aCBQTExfRElTQUJMRSBh bmQgUE9TVERJVl9ESVNBQkxFIGFyZSBzZXQgdG8gMS4KKyAqCisgKiBCaXQgMjQ6IFpYMjlfUExM X1ZDT19PVVRfRElTQUJMRSBwcm9iYWJseSBkaXNhYmxlcyB0aGUgb3V0cHV0IG9mIHRoZSBWQ08g Y2xvY2sgd2l0aG91dAorICogICAgICAgICBwb3N0LVZDTy1kaXZpZGVycywgYnV0IHRoZSByYXcg VkNPIG91dHB1dCBpcyBub3QgYSBwb3NzaWJsZSBwYXJlbnQgb2YgYW55IGNvbnN1bWVyIGNsb2Nr LAorICogICAgICAgICBzbyBJIGNvdWxkIG5vdCBjb25maXJtIHRoaXMuIEl0IGRvZXMgbm90IGRp c2FibGUgdGhlIFZDTyBlbnRpcmVseSAtIHRoYXQncyB3aGF0CisgKiAgICAgICAgIFBMTF9ESVNB QkxFIGRvZXMuCisgKgorICogQSBzcGlubG9jayBzaG91bGQgbm90IGJlIG5lZWRlZC4gUExMcyBk b24ndCBzaGFyZSB0aGVpciByZWdpc3RlcnMgd2l0aCBhbnl0aGluZyBlbHNlIGFuZCB0aGUKKyAq IGdsb2JhbCBwcmVwYXJlIG11dGV4IGFuZCBlbmFibGUgc3BpbmxvY2sgc2hvdWxkIGJlIGVub3Vn aC4gQmV3YXJlIG9mIGNvbmZsaWN0cyBpbiByZWcyIGJldHdlZW4KKyAqIFBPU1RESVZfT1VUX0RJ U0FCTEUgYW5kIHRoZSBmcmFjdGlvbmFsIHZhbHVlIGluIGNhc2UgeW91IGZpbmQgb3V0IGhvdyBm cmFjdGlvbmFsIGRpdmlkZXJzIHdvcmsKKyAqIGFuZCBhZGQgc3VwcG9ydCBmb3IgdGhlbS4KKyAq LworI2RlZmluZSBaWDI5X1BMTF9SRUcyX09GRlNFVAkJCTQKKyNkZWZpbmUgWlgyOV9QTExfREFD QVAJCQkJQklUKDI3KQorI2RlZmluZSBaWDI5X1BMTF80UEhBU0VfT1VUX0RJU0FCTEUJCUJJVCgy NikKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVl9PVVRfRElTQUJMRQkJQklUKDI1KQorI2RlZmlu ZSBaWDI5X1BMTF9WQ09fT1VUX0RJU0FCTEUJCUJJVCgyNCkKKyNkZWZpbmUgWlgyOV9QTExfRlJB Q1QJCQkJR0VOTUFTSygyMywgMCkKKworLyoKKyAqIFRoZSBWQ08ncyBmcmVxdWVuY3kgcmFuZ2Ug aXMgbGltaXRlZC4gVGhlIHN0b2NrIHNldHRpbmdzIHJ1biB0aGUgVkNPIGJldHdlZW4gOTYwIGFu ZCAxMjQ4IE1Iei4KKyAqIEFkLWhvYyB0ZXN0aW5nIHdpdGggZ3BsbCBzdWdnZXN0cyB0aGF0IGF0 IGxlYXN0IHRoaXMgUExMIHJlbWFpbnMgc3RhYmxlIGRvd24gdG8gYWJvdXQgNyBNSHogYW5kCisg KiB1cCB0byAyIEdIeiBhbmQgcHJvZHVjZXMgYSBjbG9jayB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRo ZSBTRElPIGNvbnRyb2xsZXIuIEF0dGVtcHRpbmcgdG8gcnVuIHRoZQorICogbXBsbCBWQ08gYXQg NjI0IE1IeiBhbmQgc2V0dGluZyBwb3N0ZGl2MSA9IHBvc3RkaXYyID0gMSAtIHdoaWNoIHNob3Vs ZCByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0CisgKiBmcmVxdWVuY3kgLSBvciBydW5uaW5nIGl0 IGF0IDE4NzIgTUh6IHdpdGggYW4gZWZmZWN0aXZlIHBvc3QgZGl2aWRlciBvZiAzIGNyYXNoZXMg dGhlIENQVS4gTW9zdAorICogbGlrZWx5IHRoZSBQTExzIGJlY29tZSB1bnN0YWJsZSBvdXRzaWRl IHRoZWlyIGNvcmUgcmFuZ2UgYW5kIHRoZSBTRElPIGNvbnRyb2xsZXIgaXMgbXVjaCBtb3JlCisg KiBmb3JnaXZpbmcgdGhhbiBDUFUgYW5kIERSQU0gYXJlLgorICovCisjZGVmaW5lIFpYMjlfUExM X1ZDT19NQVhfRlJFUQkJCSgxMzAwICogSFpfUEVSX01IWikKKyNkZWZpbmUgWlgyOV9QTExfVkNP X01JTl9GUkVRCQkJKDkwMCAqIEhaX1BFUl9NSFopCisKK3N0cnVjdCB6eDI5X2Nsa19wbGwgewor CXN0cnVjdCBjbGtfaHcJaHc7CisJc3RydWN0IGRldmljZQkqZGV2OworCXN0cnVjdCByZWdtYXAJ Km1hcDsKKwl1MTYJCXJlZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHp4MjlfY2xrX3Bs bCAqdG9fengyOV9jbGtfcGxsKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXJldHVybiBjb250YWlu ZXJfb2YoaHcsIHN0cnVjdCB6eDI5X2Nsa19wbGwsIGh3KTsKK30KKworc3RhdGljIGludCB6eDI5 X3BsbF9pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtf cGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCWludCByZXM7CisKKwlyZXMgPSByZWdt YXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7CisJaWYg KHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXR1cm4gIXJlczsKK30KKworc3RhdGljIGlu dCB6eDI5X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCB6eDI5X2Ns a19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJdTMyIHZhbCA9IDA7CisJaW50IHJl czsKKworCXJlcyA9IHJlZ21hcF9jbGVhcl9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9Q TExfRElTQUJMRSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwkvKiBMb2NrIGR1 cmF0aW9uIGlzIHVzdWFsbHkgYmV0d2VlbiAzMDAgdXMgYW5kIDUwMCB1cyAqLworCXJlcyA9IHJl Z21hcF9yZWFkX3BvbGxfdGltZW91dChwbGwtPm1hcCwgcGxsLT5yZWcsIHZhbCwgdmFsICYgWlgy OV9QTExfTE9DS0VELCA1MCwgMjAwMCk7CisJaWYgKHJlcykgeworCQlyZWdtYXBfc2V0X2JpdHMo cGxsLT5tYXAsIHBsbC0+cmVnLCBaWDI5X1BMTF9ESVNBQkxFKTsKKwkJZGV2X2VycihwbGwtPmRl diwgIiVzOiBQTEwgcHJlcGFyZSBmYWlsZWQ6ICVkLiBDb25maWcgdmFsdWUgMHglMDh4XG4iLAor CQkJY2xrX2h3X2dldF9uYW1lKCZwbGwtPmh3KSwgcmVzLCB2YWwpOworCX0KKwlyZXR1cm4gcmVz OworfQorCitzdGF0aWMgdm9pZCB6eDI5X3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcp Cit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwor CXJlZ21hcF9zZXRfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0RJU0FCTEUpOwor fQorCitzdGF0aWMgaW50IHp4MjlfcGxsX2lzX2VuYWJsZWQoc3RydWN0IGNsa19odyAqaHcpCit7 CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwlpbnQg cmVzOworCisJcmVzID0gcmVnbWFwX3Rlc3RfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcgKyBaWDI5 X1BMTF9SRUcyX09GRlNFVCwKKwkJCSAgICAgICBaWDI5X1BMTF9QT1NURElWX09VVF9ESVNBQkxF KTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCXJldHVybiAhcmVzOworfQorCitz dGF0aWMgaW50IHp4MjlfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3Qg engyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCisJcmV0dXJuIHJlZ21h cF9jbGVhcl9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULAor CQkJCSBaWDI5X1BMTF9QT1NURElWX09VVF9ESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQgengy OV9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxs ICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCisJcmVnbWFwX3NldF9iaXRzKHBsbC0+bWFw LCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULAorCQkJWlgyOV9QTExfUE9TVERJVl9P VVRfRElTQUJMRSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHp4MjlfcGxsX2dldF9yYXRl KGNvbnN0IHN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0 ZSwKKwkJCQkgICAgICAgdTMyIHNldHRpbmcpCit7CisJdW5zaWduZWQgbG9uZyByZWZkaXYsIGZi ZGl2LCBwb3N0ZGl2MSwgcG9zdGRpdjIsIGZyZXE7CisJY29uc3QgY2hhciAqbmFtZSA9IGNsa19o d19nZXRfbmFtZSgmcGxsLT5odyk7CisJdTY0IHZjbzsKKworCXJlZmRpdiA9IEZJRUxEX0dFVCha WDI5X1BMTF9SRUZESVZfTUFTSywgc2V0dGluZyk7CisJZmJkaXYgPSBGSUVMRF9HRVQoWlgyOV9Q TExfRkJESVZfTUFTSywgc2V0dGluZyk7CisJcG9zdGRpdjEgPSBGSUVMRF9HRVQoWlgyOV9QTExf UE9TVERJVjFfTUFTSywgc2V0dGluZyk7CisJcG9zdGRpdjIgPSBGSUVMRF9HRVQoWlgyOV9QTExf UE9TVERJVjJfTUFTSywgc2V0dGluZyk7CisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiByZWZlcmVu Y2UgY2xvY2sgJWx1IEh6LCBQTEwgc2V0dGluZyAweCUwOHhcbiIsCisJCW5hbWUsIHBhcmVudF9y YXRlLCBzZXR0aW5nKTsKKworCWlmICghcmVmZGl2IHx8ICFwb3N0ZGl2MSB8fCAhcG9zdGRpdjIp IHsKKwkJZGV2X2VycihwbGwtPmRldiwgIiVzOiBkaXZpZGUgYnkgemVybyAoJWx1LCAlbHUsICVs dSlcbiIsIG5hbWUsIHJlZmRpdiwgcG9zdGRpdjEsCisJCQlwb3N0ZGl2Mik7CisJCXJldHVybiAw OworCX0KKworCXZjbyA9IGRpdl91NjQoKHU2NClwYXJlbnRfcmF0ZSAqIGZiZGl2LCByZWZkaXYp OworCWZyZXEgPSBkaXZfdTY0KGRpdl91NjQodmNvLCBwb3N0ZGl2MSksIHBvc3RkaXYyKTsKKwlk ZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IHJlZmRpdiAlbHUgZmJkaXYgJWx1XG4iLCBuYW1lLCByZWZk aXYsIGZiZGl2KTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IHBvc3RkaXYxICVsdSBwb3N0ZGl2 MiAlbHVcbiIsIG5hbWUsIHBvc3RkaXYxLCBwb3N0ZGl2Mik7CisKKwlkZXZfZGJnKHBsbC0+ZGV2 LCAiJXM6ICVsdSBNSHpcbiIsIG5hbWUsIGZyZXEgLyBIWl9QRVJfTUhaKTsKKworCXJldHVybiBm cmVxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB6eDI5X3BsbF9yZWNhbGNfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3Qgengy OV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCXUzMiB2YWw7CisJaW50IHJl czsKKworCXJlcyA9IHJlZ21hcF9yZWFkKHBsbC0+bWFwLCBwbGwtPnJlZywgJnZhbCk7CisJaWYg KHJlcyA8IDApIHsKKwkJZGV2X2VycihwbGwtPmRldiwgIiVzOiBGYWlsZWQgdG8gcmVhZCBQTEwg c2V0dGluZ3NcbiIsIGNsa19od19nZXRfbmFtZSgmcGxsLT5odykpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlyZXR1cm4gengyOV9wbGxfZ2V0X3JhdGUocGxsLCBwYXJlbnRfcmF0ZSwgdmFsKTsKK30K Kworc3RhdGljIHUzMiB6eDI5X3BsbF9jYWxjX3ZhbHVlcyhjb25zdCBzdHJ1Y3QgengyOV9jbGtf cGxsICpwbGwsIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsCisJCQkJdW5zaWduZWQgbG9uZyBy YXRlLCB1bnNpZ25lZCBsb25nIG1pbl9yYXRlLCB1bnNpZ25lZCBsb25nIG1heF9yYXRlKQorewor CWNvbnN0IHVuc2lnbmVkIGludCBwb3N0ZGl2MV9tYXggPSAoMSA8PCBod2VpZ2h0MzIoWlgyOV9Q TExfUE9TVERJVjFfTUFTSykpIC0gMTsKKwljb25zdCB1bnNpZ25lZCBpbnQgcG9zdGRpdjJfbWF4 ID0gKDEgPDwgaHdlaWdodDMyKFpYMjlfUExMX1BPU1RESVYyX01BU0spKSAtIDE7CisJdW5zaWdu ZWQgbG9uZyBmYmRpdiwgcmVmZGl2LCBiZXN0X2ZiZGl2ID0gMCwgYmVzdF9yZWZkaXYgPSAwOwor CXUzMiBwb3N0ZGl2MSA9IDAsIHBvc3RkaXYyID0gMCwgaSwgaiwgc2V0dGluZzsKKwljb25zdCBj aGFyICpuYW1lID0gY2xrX2h3X2dldF9uYW1lKCZwbGwtPmh3KTsKKwlsb25nIGJlc3QgPSBMT05H X01BWDsKKworCS8qCisJICogVGhpcyBjb2RlIHByb2R1Y2VzIHRoZSBzYW1lIFZDTyBzZXR0aW5n cyB0aGF0IHRoZSBib290IGxvYWRlciBhbmQgc3RvY2sgZmlybXdhcmUgdXNlIGZvcgorCSAqIHRo ZSBzdGFuZGFyZCBmcmVxdWVuY2llcy4gSXQgaGFzIHNlZW4gb25seSB2ZXJ5IGxpdHRsZSBtYW51 YWwgdGVzdGluZyBiZXlvbmQgdGhhdC4KKwkgKgorCSAqIFRoZSBnb2FsIGlzIHRvIGZpbmQgYSBW Q08gc2V0dGluZyB0aGF0IGdldHMgdXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIGRlc2ly ZWQgb3V0cHV0CisJICogcmF0ZSwgd2hpbGUgYmVpbmcgd2l0aGluIHRoZSBWQ08ncyBvcGVyYXRp bmcgbGltaXRzIGFuZCBhY2hpZXZhYmxlIHdpdGggdGhlIGlucHV0IHZhbHVlCisJICogcmFuZ2Uu IEl0IGlzIGl0ZXJhdGluZyBvdmVyIHBvc3NpYmxlIHBvc3QtVkNPIGRpdmlkZXIgdmFsdWVzICgx LTcpKigxLTcpIHRvIGxvb2sgZm9yCisJICogdmFsaWQgVkNPIHRhcmdldCBmcmVxdWVuY2llcyBh bmQgdGhlbiBsb29rcyBmb3IgcmVmZGl2IGFuZCBmYmRpdiB2YWx1ZXMgdG8gYWNoaWV2ZSB0aGUK KwkgKiBWQ08gZnJlcXVlbmN5IGZyb20gdGhlIHJlZmVyZW5jZSBmcmVxdWVuY3kuCisJICovCisJ Zm9yIChqID0gMTsgaiA8PSBwb3N0ZGl2Ml9tYXg7IGorKykgeworCQlmb3IgKGkgPSAxOyBpIDw9 IHBvc3RkaXYxX21heDsgaSsrKSB7CisJCQl1NjQgdmNvID0gKHU2NClyYXRlICogaSAqIGo7CisJ CQl1bnNpZ25lZCBsb25nIG91dDsKKworCQkJaWYgKHZjbyA+IFpYMjlfUExMX1ZDT19NQVhfRlJF USB8fCB2Y28gPCBaWDI5X1BMTF9WQ09fTUlOX0ZSRVEpCisJCQkJY29udGludWU7CisKKwkJCXJh dGlvbmFsX2Jlc3RfYXBwcm94aW1hdGlvbih2Y28sIHBhcmVudF9yYXRlLAorCQkJCQkJICAgICgx IDw8IGh3ZWlnaHQzMihaWDI5X1BMTF9GQkRJVl9NQVNLKSkgLSAxLAorCQkJCQkJICAgICgxIDw8 IGh3ZWlnaHQzMihaWDI5X1BMTF9SRUZESVZfTUFTSykpIC0gMSwKKwkJCQkJCSAgICAmZmJkaXYs ICZyZWZkaXYpOworCQkJc2V0dGluZyA9IEZJRUxEX1BSRVAoWlgyOV9QTExfRkJESVZfTUFTSywg ZmJkaXYpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1JFRkRJVl9NQVNLLCBy ZWZkaXYpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1BPU1RESVYxX01BU0ss IGkpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1BPU1RESVYyX01BU0ssIGop OworCQkJb3V0ID0gengyOV9wbGxfZ2V0X3JhdGUocGxsLCBwYXJlbnRfcmF0ZSwgc2V0dGluZyk7 CisKKwkJCWlmIChvdXQgPCBtaW5fcmF0ZSB8fCBvdXQgPiBtYXhfcmF0ZSkKKwkJCQljb250aW51 ZTsKKworCQkJaWYgKGFic19kaWZmKG91dCwgcmF0ZSkgPiBiZXN0KQorCQkJCWNvbnRpbnVlOwor CisJCQlpZiAoYWJzX2RpZmYob3V0LCByYXRlKSA8IGJlc3QpIHsKKwkJCQlwb3N0ZGl2MSA9IGk7 CisJCQkJcG9zdGRpdjIgPSBqOworCQkJCWJlc3RfZmJkaXYgPSBmYmRpdjsKKwkJCQliZXN0X3Jl ZmRpdiA9IHJlZmRpdjsKKwkJCQliZXN0ID0gYWJzX2RpZmYob3V0LCByYXRlKTsKKworCQkJCWlm ICghYmVzdCkKKwkJCQkJZ290byBzZWFyY2hfZG9uZTsKKwkJCX0KKwkJfQorCX0KK3NlYXJjaF9k b25lOgorCisJaWYgKCFwb3N0ZGl2MSkgeworCQlkZXZfZXJyKHBsbC0+ZGV2LCAiRGlkIG5vdCBm aW5kIGEgc2V0dGluZyBmb3IgJWx1IEh6LCBwYXJlbnQgJWx1IEh6XG4iLAorCQkJcmF0ZSwgcGFy ZW50X3JhdGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IHBh cmVudCByYXRlICVsdVxuIiwgbmFtZSwgcGFyZW50X3JhdGUpOworCWRldl9kYmcocGxsLT5kZXYs ICIlczogZm91bmQgVkNPIGRpdmlkZXJzICV1IGFuZCAldVxuIiwgbmFtZSwgcG9zdGRpdjEsIHBv c3RkaXYyKTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IFZDTyB0YXJnZXQgcmF0ZSAlbHVcbiIs IG5hbWUsIHJhdGUgKiBwb3N0ZGl2MSAqIHBvc3RkaXYyKTsKKworCWRldl9kYmcocGxsLT5kZXYs ICIlczogR290IGZiZGl2ID0gJWx1IHJlZmRpdiA9ICVsdVxuIiwgbmFtZSwgYmVzdF9mYmRpdiwg YmVzdF9yZWZkaXYpOworCisJc2V0dGluZyA9IEZJRUxEX1BSRVAoWlgyOV9QTExfRkJESVZfTUFT SywgYmVzdF9mYmRpdik7CisJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1JFRkRJVl9N QVNLLCBiZXN0X3JlZmRpdik7CisJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1BPU1RE SVYxX01BU0ssIHBvc3RkaXYxKTsKKwlzZXR0aW5nIHw9IEZJRUxEX1BSRVAoWlgyOV9QTExfUE9T VERJVjJfTUFTSywgcG9zdGRpdjIpOworCWRldl9kYmcocGxsLT5kZXYsICIlczogRmluYWwgc2V0 dGluZyAweCUwOHhcbiIsIG5hbWUsIHNldHRpbmcpOworCisJcmV0dXJuIHNldHRpbmc7Cit9CisK K3N0YXRpYyBpbnQgengyOV9wbGxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHN0 cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxs ID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwl1bnNpZ25lZCBsb25nIG5ld19yYXRlOworCXUzMiBz ZXR0aW5nOworCisJLyoKKwkgKiBUT0RPOiBEUExMIGNhbiBzd2l0Y2ggYmV0d2VlbiB0d28gcGFy ZW50cywgb25lIG9mIHdoaWNoIGlzIGFub3RoZXIgUExMLiBUYWtlIHRoaXMgaW50bworCSAqIGFj Y291bnQgd2hlbiBzZWFyY2hpbmcgdGhlIGNvbmZpZyBzcGFjZSBhbmQgc2V0IHJlcS0+YmVzdF9w YXJlbnRfcmF0ZS4KKwkgKgorCSAqIEluIHByYWN0aWNlIGl0IHNob3VsZG4ndCBtYXR0ZXIgdGhv dWdoLiBEcGxsIGlzIGFsd2F5cyBjb25maWd1cmVkIHRvIGEgZml4ZWQgZnJlcXVlbmN5CisJICog YW5kIGlzIHRoZSBvbmx5IGNsb2NrIHdpdGggYSBzd2l0Y2hhYmxlIHBhcmVudC4KKwkgKi8KKwlp ZiAoIXJlcS0+YmVzdF9wYXJlbnRfcmF0ZSkgeworCQlkZXZfZXJyKHBsbC0+ZGV2LCAiRGlkIG5v dCBleHBlY3QgYmVzdF9wYXJlbnRfcmF0ZT0wXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJc2V0dGluZyA9IHp4MjlfcGxsX2NhbGNfdmFsdWVzKHBsbCwgcmVxLT5iZXN0X3BhcmVudF9y YXRlLCByZXEtPnJhdGUsIHJlcS0+bWluX3JhdGUsCisJCQkJICAgICAgIHJlcS0+bWF4X3JhdGUp OworCWlmICghc2V0dGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfcmF0ZSA9IHp4Mjlf cGxsX2dldF9yYXRlKHBsbCwgcmVxLT5iZXN0X3BhcmVudF9yYXRlLCBzZXR0aW5nKTsKKwlpZiAo bmV3X3JhdGUgIT0gcmVxLT5yYXRlKSB7CisJCWRldl9kYmcocGxsLT5kZXYsICJEaWQgbm90IGZp bmQgYW4gZXhhY3QgbWF0Y2guIFdhbnQgJWx1LCBnb3QgJWx1XG4iLAorCQkJcmVxLT5yYXRlLCBu ZXdfcmF0ZSk7CisJCXJlcS0+cmF0ZSA9IG5ld19yYXRlOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHp4MjlfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25l ZCBsb25nIHJhdGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3Ry dWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwl1MzIgc2V0dGlu ZzsKKworCS8qCisJICogVE9ETzogSW1wbGVtZW50IGdyYWR1YWwgUExMIHJhdGUgY2hhbmdlLiBQ TExzIGNhbiBiZSBjaGFuZ2VkIHdoaWxlIHRoZXkgYXJlIHJ1bm5pbmcgYW5kCisJICogZG93bnN0 cmVhbSBoYXJkd2FyZSBpcyBnZW5lcmFsbHkgZmluZSB3aXRoIHRoYXQuIFRoZSBleGNlcHRpb24g aXMgRFJBTSwgd2hpY2ggcmVhZHMKKwkgKiBpbmNvcnJlY3QgdmFsdWVzIGlmIGNoYW5nZWQgdG9v IGZhc3QuCisJICoKKwkgKiBDaGFuZ2luZyB0aGUgbXBsbCByYXRlIGlzIHBvdGVudGlhbGx5IHVz ZWZ1bCBmb3Igb3Zlci91bmRlcmNsb2NraW5nLiBHYXRpbmcgbXBsbCBpcworCSAqIHVucmVhbGlz dGljIGJlY2F1c2UgdG9vIG1hbnkgZGV2aWNlcyBkZXBlbmQgb24gaXQuCisJICovCisJc2V0dGlu ZyA9IHp4MjlfcGxsX2NhbGNfdmFsdWVzKHBsbCwgcGFyZW50X3JhdGUsIHJhdGUsIHJhdGUsIHJh dGUpOworCWlmICghc2V0dGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfZGJnKHBsbC0+ ZGV2LCAiJXM6IFNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb246IDB4JTA4eFxuIiwgY2xrX2h3X2dl dF9uYW1lKGh3KSwgc2V0dGluZyk7CisKKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHBsbC0+ bWFwLCBwbGwtPnJlZywgMHgwMGZmZmZmZiwgc2V0dGluZyk7Cit9CisKK3N0YXRpYyB1OCB6eDI5 X3BsbF9nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCB6eDI5X2Nsa19w bGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJdTMyIHZhbDsKKwlpbnQgcmVzOworCisJ cmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVnLCAmdmFsKTsKKwlpZiAocmVzIDwg MCkKKwkJcmV0dXJuIDB4ZmY7CisKKwl2YWwgPSBGSUVMRF9HRVQoWlgyOV9QTExfUEFSRU5UX01B U0ssIHZhbCk7CisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBQYXJlbnQgMHgleFxuIiwgY2xrX2h3 X2dldF9uYW1lKGh3KSwgdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgengy OV9wbGxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpCit7CisJc3RydWN0 IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwl1MzIgcGFyZW50ID0g RklFTERfUFJFUChaWDI5X1BMTF9QQVJFTlRfTUFTSywgaW5kZXgpOworCWludCByZXM7CisJdTMy IHZhbDsKKworCXJlcyA9IHJlZ21hcF91cGRhdGVfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpY MjlfUExMX1BBUkVOVF9NQVNLLCBwYXJlbnQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVz OworCisJcmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVnLCAmdmFsKTsKKwlpZiAo cmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCWlmICgodmFsICYgWlgyOV9QTExfUEFSRU5UX01B U0spICE9IHBhcmVudCkgeworCQlkZXZfZXJyKHBsbC0+ZGV2LCAiSGFyZHdhcmUgcmVqZWN0ZWQg UExMIHBhcmVudCAldVxuIiwgaW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB6eDI5X3BsbF9pbml0KHN0cnVjdCBjbGtfaHcgKmh3KQor eworCXN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJY29u c3QgY2hhciAqbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7CisJaW50IHJlczsKKwl1MzIgdmFs OworCisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBpbml0aWFsaXppbmdcbiIsIG5hbWUpOworCisJ LyoKKwkgKiBUaGUgZnJhY3Rpb25hbCB2YWx1ZSBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBJdCB3 b3JrcyBhdCBsZWFzdCB3aXRoIGRwbGwsIGJ1dCBJIGhhdmUKKwkgKiBuZXZlciBzZWVuIGl0IHVz ZWQgb24gYWN0dWFsIGhhcmR3YXJlLgorCSAqLworCXJlcyA9IHJlZ21hcF9yZWFkKHBsbC0+bWFw LCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULCAmdmFsKTsKKwlpZiAocmVzIDwgMCkK KwkJcmV0dXJuIHJlczsKKworCWlmICh2YWwgJiBaWDI5X1BMTF9GUkFDVCkgeworCQlkZXZfd2Fy bihwbGwtPmRldiwgIiVzOiB1bnN1cHBvcnRlZCBub256ZXJvIGZyYWN0aW9uYWwgdmFsdWUgMHgl MDhseFxuIiwKKwkJCSBuYW1lLCB2YWwgJiBaWDI5X1BMTF9GUkFDVCk7CisJfQorCisJLyoKKwkg KiBSZW1vdmUgdGhlIGJ5cGFzcyBmbGFnIHNvIHdlIGRvbid0IGhhdmUgdG8gYm90aGVyIHdpdGgg aXQgaW4gZW5hYmxlL2Rpc2FibGUuIEkgaGF2ZSBuZXZlcgorCSAqIHNlZW4gaXQgc2V0IGJ5IHRo ZSBlYXJsaWVyIGJvb3Qgc3RhZ2VzIGFueWhvdy4KKwkgKi8KKwlyZXMgPSByZWdtYXBfY2xlYXJf Yml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0JZUEFTUyk7CisJaWYgKHJlcyA8IDAp CisJCXJldHVybiByZXM7CisKKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwt PnJlZywgWlgyOV9QTExfRElTQUJMRSk7CisJaWYgKHJlcyA+IDApIHsKKwkJLyoKKwkJICogU2V0 IFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUgZm9yIFBMTHMgdGhhdCBoYXZlIFpYMjlfUExM X0RJU0FCTEUgZm9yCisJCSAqIGNvbnNpc3RlbmN5IHdpdGggLmVuYWJsZSBhbmQgLnByZXBhcmUu IFRoaXMgZW5zdXJlcyB0aGF0IC5wcmVwYXJlIGRvZXNuJ3QKKwkJICogaW5hZHZlcnRlbnRseSBl bmFibGUgUExMcyB3aXRob3V0IC5lbmFibGUgYmVpbmcgY2FsbGVkLgorCQkgKi8KKwkJcmVzID0g cmVnbWFwX3NldF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VU LAorCQkJCSAgICAgIFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUpOworCX0KKworCXJldHVy biByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyB6eDI5X3BsbF9vcHMgPSB7 CisJLmluaXQJCT0gengyOV9wbGxfaW5pdCwKKwkuaXNfcHJlcGFyZWQJPSB6eDI5X3BsbF9pc19w cmVwYXJlZCwKKwkucHJlcGFyZQk9IHp4MjlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZQk9IHp4 MjlfcGxsX3VucHJlcGFyZSwKKwkuaXNfZW5hYmxlZAk9IHp4MjlfcGxsX2lzX2VuYWJsZWQsCisJ LmVuYWJsZQkJPSB6eDI5X3BsbF9lbmFibGUsCisJLmRpc2FibGUJPSB6eDI5X3BsbF9kaXNhYmxl LAorCS5yZWNhbGNfcmF0ZQk9IHp4MjlfcGxsX3JlY2FsY19yYXRlLAorCS5kZXRlcm1pbmVfcmF0 ZSA9IHp4MjlfcGxsX2RldGVybWluZV9yYXRlLAorCS5nZXRfcGFyZW50CT0gengyOV9wbGxfZ2V0 X3BhcmVudCwKKwkuc2V0X3BhcmVudAk9IHp4MjlfcGxsX3NldF9wYXJlbnQsCisJLnNldF9yYXRl CT0gengyOV9wbGxfc2V0X3JhdGUsCit9OworCisvKgorICogQSBQTEwgdGhhdCBjYW4gYmUgYSBw YXJlbnQgb2YgYW5vdGhlciBQTEwgbmVlZHMgdG8gcHJvZHVjZSBhbiBvdXRwdXQgc2lnbmFsIHdo ZW4gcHJlcGFyZWQsCisgKiBvdGhlcndpc2UgdGhlIGRvd25zdHJlYW0gUExMJ3MgcHJlcGFyZSgp IHdpbGwgZmFpbCB0byBhY3F1aXJlIGEgbG9jay4KKyAqLworc3RhdGljIGludCB6eDI5X3BsbF9u b2Rpc2FibGVfaW5pdChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxs ICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjbGtfaHdf Z2V0X25hbWUoaHcpOworCWludCByZXM7CisJdTMyIHZhbDsKKworCWRldl9kYmcocGxsLT5kZXYs ICIlczogaW5pdGlhbGl6aW5nLCBwcmVwYXJlLWlzLWVuYWJsZWRcbiIsIG5hbWUpOworCisJcmVz ID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9QTExfUkVHMl9PRkZTRVQs ICZ2YWwpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOworCisJaWYgKHZhbCAmIFpYMjlf UExMX0ZSQUNUKSB7CisJCWRldl93YXJuKHBsbC0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIG5vbnpl cm8gZnJhY3Rpb25hbCB2YWx1ZSAweCUwOGx4XG4iLAorCQkJIG5hbWUsIHZhbCAmIFpYMjlfUExM X0ZSQUNUKTsKKwl9CisKKwlyZXMgPSByZWdtYXBfY2xlYXJfYml0cyhwbGwtPm1hcCwgcGxsLT5y ZWcsIFpYMjlfUExMX0JZUEFTUyk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwly ZXR1cm4gcmVnbWFwX2NsZWFyX2JpdHMocGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9QTExfUkVH Ml9PRkZTRVQsCisJCQkJIFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgengyOV9wbGxfbm9kaXNhYmxlX29wcyA9IHsKKwkuaW5p dAkJPSB6eDI5X3BsbF9ub2Rpc2FibGVfaW5pdCwKKwkuaXNfcHJlcGFyZWQJPSB6eDI5X3BsbF9p c19wcmVwYXJlZCwKKwkucHJlcGFyZQk9IHp4MjlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZQk9 IHp4MjlfcGxsX3VucHJlcGFyZSwKKwkucmVjYWxjX3JhdGUJPSB6eDI5X3BsbF9yZWNhbGNfcmF0 ZSwKKwkuZGV0ZXJtaW5lX3JhdGUgPSB6eDI5X3BsbF9kZXRlcm1pbmVfcmF0ZSwKKwkuZ2V0X3Bh cmVudAk9IHp4MjlfcGxsX2dldF9wYXJlbnQsCisJLnNldF9wYXJlbnQJPSB6eDI5X3BsbF9zZXRf cGFyZW50LAorCS5zZXRfcmF0ZQk9IHp4MjlfcGxsX3NldF9yYXRlLAorfTsKKwogc3RydWN0IGNs a19odyAqenhfY2xrX3JlZ2lzdGVyX3BsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZWdt YXAgKnJlZ21hcCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgenhfcGxsX2Rlc2MgKmRlc2MsCi0JCQkJ ICAgc3RydWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpCisJCQkJICAgY29uc3Qgc3RydWN0IHp4 X3BsbF9kZXNjICpkZXNjLCBzdHJ1Y3QgY2xrX2h3ICogY29uc3QgKmNsb2NrcykKIHsKLQlyZXR1 cm4gRVJSX1BUUigtRU5PREVWKTsKKwlzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIHBhcmVudHNbQ0xL X1pYX01BWF9QQVJFTlRTXTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0ge307CisJc3Ry dWN0IHp4MjlfY2xrX3BsbCAqcGxsOworCXVuc2lnbmVkIGludCBpOworCWludCByZXM7CisKKwlw bGwgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBsbCksIEdGUF9LRVJORUwpOworCWlmICgh cGxsKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChkZXNjLT5mbGFncyAmIENM S19aWF9QTExfUFJFUEFSRV9JU19FTkFCTEUpCisJCWluaXQub3BzID0gJnp4MjlfcGxsX25vZGlz YWJsZV9vcHM7CisJZWxzZQorCQlpbml0Lm9wcyA9ICZ6eDI5X3BsbF9vcHM7CisKKwlpZiAoV0FS Tl9PTihkZXNjLT5udW1fcGFyZW50cyA+IEFSUkFZX1NJWkUocGFyZW50cykpKQorCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5udW1fcGFyZW50czsg KytpKQorCQlwYXJlbnRzW2ldID0genhfZ2V0X3BhcmVudCgmZGVzYy0+cGFyZW50c1tpXSwgY2xv Y2tzKTsKKworCWluaXQubmFtZSA9IGRlc2MtPm5hbWU7CisJaW5pdC5wYXJlbnRfZGF0YSA9IHBh cmVudHM7CisJaW5pdC5udW1fcGFyZW50cyA9IGRlc2MtPm51bV9wYXJlbnRzOworCisJLyoKKwkg KiBEaXNhbGxvdyBsaXZlIHJlcGFyZW50LCBidXQgYWxsb3cgcmF0ZSBjaGFuZ2VzLiBQTExzIGNh biBoYW5kbGUgZ3JhZHVhbCBjaGFuZ2VzIGZpbmUsIGJ1dAorCSAqIGxhcmdlIG9uZXMgY2F1c2Ug YSB0ZW1wb3JhcnkgaW5jb3JyZWN0IG91dHB1dCwgd2hpY2ggY2FuIGJyZWFrIGRvd25zdHJlYW0g ZGV2aWNlcy4KKwkgKiBTZWUgengyOV9wbGxfc2V0X3JhdGUgZm9yIGNvbnNpZGVyYXRpb25zIG9u IHRoYXQuCisJICovCisJaW5pdC5mbGFncyA9IENMS19TRVRfUEFSRU5UX0dBVEU7CisJcGxsLT5o dy5pbml0ID0gJmluaXQ7CisJcGxsLT5kZXYgPSBkZXY7CisJcGxsLT5tYXAgPSByZWdtYXA7CisJ cGxsLT5yZWcgPSBkZXNjLT5yZWc7CisKKwlyZXMgPSBkZXZtX2Nsa19od19yZWdpc3RlcihkZXYs ICZwbGwtPmh3KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gRVJSX1BUUihyZXMpOworCisJLyoKKwkg KiBTZXQgdGhlIFBMTCByYXRlIG9ubHkgaWYgdGhlIGJvb3Rsb2FkZXIgbGVmdCBpdCBkaXNhYmxl ZC4gS2VlcCB0aGUgYm9vdGxvYWRlciBzZXR1cAorCSAqIG90aGVyd2lzZS4KKwkgKi8KKwlyZXMg PSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7 CisJaWYgKHJlcyA8IDApCisJCXJldHVybiBFUlJfUFRSKHJlcyk7CisKKwlpZiAocmVzID4gMCAm JiBkZXNjLT5yYXRlKSB7CisJCWRldl9kYmcocGxsLT5kZXYsICIlczogc2V0dGluZyB0byAlbHUg SHpcbiIsIGRlc2MtPm5hbWUsIGRlc2MtPnJhdGUpOworCQlyZXMgPSBjbGtfc2V0X3JhdGUocGxs LT5ody5jbGssIGRlc2MtPnJhdGUpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIEVSUl9QVFIoZGV2 X2Vycl9wcm9iZShkZXYsIHJlcywgIiVzOiBmYWlsZWQgdG8gc2V0IHJhdGVcbiIsCisJCQkJCQkg ICAgIGRlc2MtPm5hbWUpKTsKKwl9CisKKwlyZXR1cm4gJnBsbC0+aHc7CiB9CgotLSAKMi41NS4w CgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5 Cg==