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 900F9C98312 for ; Wed, 23 Sep 2026 18:30:14 +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=EyR+YACX/nYHClo60UwZVoSrKVoKojq8sK6lroRRxwI=; b=B/NjnOkOZzW1Sd 2Sl6J24iNaTX3UHaDB5gVSRTgGrnUyOhPRor5gwspQf4OwKdztgGau5YCaCfYEP9ZFy0wxXC8kWmd rGtiFOoFo2AGbUPZzQ+l0lTf2G5pMLbjYKXXtvnXpOrOBMHkkZUtDtKMWeldj8iV2H9Xsz9vphKMK 3P7Kdu4cjBF2oMvTMKsiMHLQTtrNiMNqL2reS6TwWDxchsta+yCtVsQMqAviZQLgyJhk0dKlDraVl HmhTtHNnWdHwomNGlpDAn/VpY3W3CNqs9e57Tq1IkyYr9Kqo0CXlS8oBv/MQF8r3zaFZZlNNVSRhz 7ojj5g+jQtWrI41LPduQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9RjS-00000009CNg-0tln; Wed, 23 Sep 2026 18:30:14 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x9RjE-00000009CEN-2Enn for linux-phy@bombadil.infradead.org; Wed, 23 Sep 2026 18:30:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=YO7civX8MGJPH4ILny1DZ3vkVbAWd1DfDXfWosRBdpk=; b=dKpKaj9Oa1ZE+ICV6jQWUYoYz3 15kZxNdZr32RdjB0K9hLhyFz3HMHAZyCL3sutvixoSTtqCaPzOlI3I+f0XsUaIlwcC+oaUIL/3JpV nBpGa5571BoQgu1drrNZzXpqYbYq5GEYxezCEpqCQXMGE5FieZ+LZ2/9RJ7U/ZBQ4nYR7grZcps+5 slYwTMbYT+OHNejs7GmmHfuUAoZjhqk6KZw6Yn1kB6OmG+tFeJULe82m0tskFtvudJtN9t11jx51w kHytGWHntYZzWs4Sl+cJEzq0c8qQBnsJ1fTYiFdTpMqTrOHxLnfc+y2Ix8MHf2X25+NqN6zyvAb/g b4ynzDmQ==; Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by desiato.infradead.org with esmtps (Exim 4.99.2 #2 (Red Hat Linux)) id 1x9RjB-0000000F9hZ-30zR for linux-phy@lists.infradead.org; Wed, 23 Sep 2026 18:29:59 +0000 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49cd38e0f79so6998175e9.3 for ; Wed, 23 Sep 2026 11:29:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790188196; x=1790792996; 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=YO7civX8MGJPH4ILny1DZ3vkVbAWd1DfDXfWosRBdpk=; b=EE0CaMy31xGwsWPyETQCXGI1BDn+kWR0ltuiZIROwH8c8ClHWgxr/dqJkNk0N0x7Wo WBo4x2NMkx5mWr6Kc9WmCGG8UiTYf8rFnQ7XVX6gCXnxwdBGQwQAO2VJ1uEgYhKOgBwv /Rio6hlYPXXlq3k3ckPlM7ayrKl2T9/r6AzuSn6LND2G62KBHcjvbW8JHUcetHXyADOz ZK19GWwAGY6HUw9OSUQu1v/BB7TL2e3c+0zw+r/tPNSpiVwwferZs9tlLxj2QF2PxYpI G0t50uIRheqZQwDzvMH589q9aFp7WmPCDijzKjrFjK1CPFHkut5NEXHcqvs5c+d4VTkM Mk0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790188196; x=1790792996; 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=YO7civX8MGJPH4ILny1DZ3vkVbAWd1DfDXfWosRBdpk=; b=lmVgtvyXH2wp74De8DQ1HTk3Y49mOKaSLUQ1TgoFgdxD1Rd1132x4E/0g3bQYyb9Na NR6D68WDY5gKvytdPCtQ92HbTcEj4PCxLgaBV9N0nJ+TFMOhGoUSTSt9j7XIEpHqvala SSCBFRAZD9blGr+MMPN9m4qv1k5fC6sxbwaN2YrOG3LWP7xI7oYjq0en7Lf7/2ZzXemu y9d1xD6avl0dKN/HN4W6g/IAaNcFxdykgoM6wc/aC0bGRhNN7ujuLU2T8ZKnjm01xnu/ 7PtM1CbEGgdnP4CVLs3pXmC8ddOCHJXWEuFMtoOd47znZHwQBlV2fHzauOZOffx+sevJ LDxw== X-Forwarded-Encrypted: i=1; AKwUvBwoGlHO5P4cRm8VSjg5+sOTydHhRlPo9qy5ETS6gQBnGnnuOaC2Q0CKMO5HKaA5OLfWCn/qM3pCLJQ=@lists.infradead.org X-Gm-Message-State: AFuF++kOoPEl3ZG7B1jODac9EjeYH4//EjyL/A2Vs9VcvHL9nvjmfwEm T92lAGokUUdefmVTjEwN05SzVT5zdpjnBVO58nLhUu2m7w0xuiLqeL44 X-Gm-Gg: AYBFou1I6OCJzDHPzM2WEoKC0a9DaHMPxvQFiPtB931/vGQVHa7GlUsEFBt5E+6Q5je 2Dmk6IFNgh0vuOmFgzasVuE6WL9VdI5v9xQiznczf4intgdI/UULKIJLraUdxCUsEwL+jYj6lPK mEobZCBmtTcj1+426iockEuACzIBr7ddgUeFPlqM/yaJPxb2qmLM0y4H6TWTAVy0ez7pkAThHoI FQ09QpzHJajVSgWHi/2bhECgqDHNztL+5lnvN3R/yKX69syByDE96SNhN0qvPBpysrGYgdyj3YW iYFTu3vdt38Bm1sD22aTL/JmTuhKTKH2I48za70QABP7dAcAey/y7Yg86FQHY2imhfAyNIniip1 a+GjYweQia73aNJgvVpXGhtcV8GsyKlB7TdaGTVZYlU+dHXzh4lqgZ8qtxGzkFiplcexdGCaHDr D9df1SWDIjEr4evgbEfubmc59a8gfjXZk3VvRPgQR4xGVJPUZC5N0Ai/AbQVy3zTG1f4fG4vm+6 qp0zbkSFievZjOq X-Received: by 2002:a05:600c:1c25:b0:49f:ce78:3561 with SMTP id 5b1f17b1804b1-49fe66f19demr1194485e9.18.1790188196090; Wed, 23 Sep 2026 11:29:56 -0700 (PDT) Received: from [192.168.0.2] ([197.250.51.38]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fe5cd3d5csm4711835e9.14.2026.09.23.11.29.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 11:29:55 -0700 (PDT) From: =?utf-8?q?Stefan_D=C3=B6singer?= Date: Wed, 23 Sep 2026 21:28:53 +0300 Subject: [PATCH v12 07/12] clk: zte: Add zx PLL support infrastructure MIME-Version: 1.0 Message-Id: <20260923-zx29clk-v12-7-9c243796b6d2@gmail.com> References: <20260923-zx29clk-v12-0-9c243796b6d2@gmail.com> In-Reply-To: <20260923-zx29clk-v12-0-9c243796b6d2@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=23750; i=stefandoesinger@gmail.com; h=from:subject:message-id; bh=sbLJ0u4oUa7S2k0ecc0xf8M8SDdDseo5IJY3miTfvzI=; b=owEBiQJ2/ZANAwAIAT0TvMhUTxoiAcsmYgBqtBpuSxzhqLCe9cIm9gxyltqx+F2nlJqToOtuP DWX3bX6/4KJAk8EAAEIADkWIQRDFvS2qgVbJ5UyXWw9E7zIVE8aIgUCarQabhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQPRO8yFRPGiK3gA/8D7yU/QeTIpFS+iCyQSOdr+78EOEEwvw CEgJ8W9TDLYMUWeRFJos3OGjoQMd8zrki21QTrCZ9+QcUNwyzU8GQQJNw4cSAG1ycknwNF8xeXv 1MsS36Kk2ACsfl142lp7ZjwS9pjYj5YIApTHM4ohVxh4tUUav9zwvde7tDqBKhBXTeGVJVh4Znp w9bnElrrOg9rUxx22YIjBasA9JUXMwBWU2jJCHulzaUs/8At6WcBWIk/W0llyT5n9f5ZOdKsZAJ JMPJDEMkkXJTNtpYAC0yo/HYyQfPVvm+5lIyKRyuJAk61OkVEaKLLFB4YDtiF3NM6GlclkeLRRn tFQWIYbkIXIO9hAANqpn9Smm7pB5H8nl8YbZRT3qeFhUc7J+raWNvKIoBXooBSAtfZl8Jvl4+5e cAd3oi88QYUAUxmLb4kYtJfz+lvcFU2fFuN5OdnJznJd2mMA9uuebAMEyek6SirwNbHqJKYRjI2 V6bJzQKwzQMCucDn3WE+MY0/EfxWkdLb7uYuepODDMaG1FxjrgpRGPlFBW+DXF6r5ZFd0zRt110 lcdY1IVGoydExilmnzy/WAlvM7rHjKQJX2VCqFJHGTC1qRFQ79SjhZ+ymnWaO8Smk4OAbvmW+tZ uiYVh6EaRWb2yzbqDK1GhOmCh5IJU7ty6c4s7Ou7PkTQjlrMUaU8= 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-20260923_192957_941310_0CB86A15 X-CRM114-Status: GOOD ( 43.10 ) 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 ZWQtb2ZmLWJ5OiBTdGVmYW4gRMO2c2luZ2VyIDxzdGVmYW5kb2VzaW5nZXJAZ21haWwuY29tPgot LS0KClZlcnNpb24gMTEsIDEyOiBVbmNoYW5nZWQKClZlcnNpb24gMTA6ClVzZSBGSUVMRF9HRVQg LyBGSUVMRF9QUkVQLCByZW1vdmUgbm93IHJlZHVuZGFudCBfU0hJRlQgZGVmaW5lcy4KClZlcnNp b24gOToKKikgVGFrZSByZXEtPm1pbl9yYXRlIGFuZCByZXEtPm1heF9yYXRlIGludG8gYWNjb3Vu dCB3aGVuIGxvb2tpbmcgZm9yCnBvc3NpYmxlIFBMTCBjb25maWd1cmF0aW9ucyAoc2FzaGlrbyku IEluIHByYWN0aWNlIHRoZSBjb2RlIHdpbGwgc3RpbGwKb25seSBldmVyIGVuY291bnRlciBhIGZp eGVkIHJlcXVlc3QgdG8gc2V0IGRwbGwgdG8gNDkxLjUyIE1Iei4KCiopIFRoZSBzYW1lIGNvZGUg c3R5bGUgY2hhbmdlcyBCcmlhbiByZXF1ZXN0ZWQgb24gdGhlIG90aGVyIGNsayBwYXRjaGVzLgoK VmVyc2lvbiA4OgoqKSBEb2N1bWVudCB0aGUgYmVoYXZpb3Igb2YgdW5sb2NrZWQgUExMcyBiZXR0 ZXI6IFRoZXkgZG9uJ3QgcGFzcwp0aHJvdWdoIHRoZWlyIHJlZmVyZW5jZS9wYXJlbnQsIGJ1dCBw YXNzIHRocm91Z2ggdGhlIGZpeGVkIGNsb2NrLTI2bQpvc2NpbGxhdG9yLCBldmVuIGlmIHRoZWly IHJlZmVyZW5jZSBjbG9jayBpcyBzb21ldGhpbmcgZWxzZS4KKikgZHBsbCBoYXMgd29ya2luZyBm cmFjdGlvbmFscy4gQWRkIHRoaXMgaW4gdGhlIGNvbW1lbnQsIGJ1dCB0aGVyZSBpcwpubyBhY3R1 YWwgY29kZSBzdXBwb3J0IGZvciBpdCAtIHRoZSBMVEUgaGFyZHdhcmUgZG9lc24ndCBuZWVkIGl0 LgoKQXMgZm9yIFNhc2hpa28ncyBjb21tZW50cyBvbiB0aGUgLnNldF9yYXRlIGltcGxlbWVudGF0 aW9uOiBJbiBwcmFjdGljZQouc2V0X3JhdGUgd2lsbCBvbmx5IGV2ZXIgc2V0IG9uZSByYXRlLCA0 OTEuNTIgTUh6IGZvciBkcGxsLiBBbGwgb3RoZXIKUExMcyBhcmUgYm9vdGxvYWRlciBjb25maWd1 cmVkLiBEcGxsIGNvdWxkIGJlIGhhbmRsZWQgYnkgd3JpdGluZyBhIG1hZ2ljCmNvbnN0YW50IGlu dG8gaXRzIGNvbmZpZy4KCkkgd2FudCB0byBoYXZlIHRoZSByYXRlIGZpbmRpbmcgY29kZSBhcyBk b2N1bWVudGF0aW9uLCBhbmQgbWF5YmUgdGhlcmUKaXMgbW9yZSBlbGFib3JhdGUgZnV0dXJlIHVz ZSBmb3IgaXQgKGUuZy4gbW9yZSBmbGV4aWJsZSB1bmRlcmNsb2NraW5nKSwKYnV0IGF0dGVtcHRz IHRvIGhhbmRsZSBldmVudHVhbGl0aWVzIGxpa2UgcmF0ZSBzZWFyY2hlcyBvciBtaXNjb25maWd1 cmVkCmJvb3Rsb2FkZXIgdmFsdWVzIHdvdWxkIGJlIGRlYWQgY29kZS4KClZlcnNpb24gNzoKKikg QWx3YXlzIGtlZXAgdW5rbm93bnBsbCBlbmFibGVkIHdoZW4gcHJlcGFyZWQgc28gZHBsbCBjYW4g YWNxdWlyZSBhCmxvY2sgaW4gaXRzIHByZXBhcmUoKSBmdW5jdGlvbi4KKikgQ2xlYW4gdXAgZXJy b3IgcmVwb3J0aW5nIGEgYml0IChTYXNoaWtvKQoKVmVyc2lvbiA2OgoqKSBVc2UgYWJzX2RpZmYg dG8gY29tcGFyZSB0YXJnZXQgYW5kIGNhbmRpZGF0ZSBQTEwgcmF0ZSAoU2FzaGlrbykuCiopIFVz ZSByZXEtPmJlc3RfcGFyZW50X3JhdGUgaW4gengyOV9wbGxfZGV0ZXJtaW5lX3JhdGUuIEFkZCBh IFRPRE8KY29tbWVudCBhYm91dCB0aGUgcGFyZW50IHJhdGUgZmxleGliaWxpdHkuCgpWZXJzaW9u IDU6IEZpeCBzb21lIGlzc3VlcyBwb2ludGVkIG91dCBieSBTYXNoaWtvOiBOVUxMIGRldiwKengy OV9wbGxfcmVjYWxjX3JhdGUgZXJyb3IgaGFuZGxpbmcsIGRpc2FibGUgUExMIGFnYWluIG9uIGVu YWJsZSBlcnJvci4KLS0tCiBkcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMgfCA1NjQgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA1 NjEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay96dGUvcGxsLXp4LmMgYi9kcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMKaW5kZXggZmM3NmM2NTI0 YTE2Li5kMzY4NzQ5NWQwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL3p0ZS9wbGwtenguYwor KysgYi9kcml2ZXJzL2Nsay96dGUvcGxsLXp4LmMKQEAgLTMsMTYgKzMsNTc0IEBACiAgKiBDb3B5 cmlnaHQgKEMpIDIwMjYgU3RlZmFuIETDtnNpbmdlcgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9i aXRmaWVsZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnRhaW5lcl9vZi5oPgogI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vy cm5vLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGlvbmFs Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K KyNpbmNsdWRlIDxsaW51eC91bml0cy5oPgogCiAjaW5jbHVkZSAiY2xrLXp4LmgiCiAKKy8qCisg KiBUaGlzIGNvZGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aCB6eDI5NzUyMHYzIFBMTHMsIGJ1 dCBmcm9tIHJlYWRpbmcgdGhlIHp4Mjk2NzE4IGNsb2NrIGNvZGUgaXQKKyAqIGxvb2tzIGxpa2Ug UExMIHJlZ2lzdGVycyBhcmUgc2ltaWxhci4gWlRFJ3Mgc291cmNlcyBleHBsYWluIHRoZSBQTEwg cmVnaXN0ZXIgY29udGVudHMgb25seSBpbiBhCisgKiAuY21tIGZpbGUgKEEgTGF1dGVyYmFjaCBU UkFDRTMyIHNjcmlwdCkgYW5kIHNvbWUgdW51c2VkIGhlYWRlcnMgaW4gdGhlaXIgVS1Cb290IGNv ZGUgZHVtcCwgd2hpY2gKKyAqIG1heSBub3QgYmUgYWNjdXJhdGUuIFdoZW4gY2FsY3VsYXRpbmcg dGhlIGZyZXF1ZW5jaWVzIGZyb20gdGhlIGRlZmF1bHQgUExMIGNvbmZpZ3VyYXRpb24gdGhlCisg KiByZXN1bHRzIG1hdGNoIHRoZSBmaXhlZCByYXRlIGNsb2NrcyBmcm9tIHRoZWlyIGNsb2NrIGRy aXZlci4KKyAqCisgKiBUaGUgMjYgTUh6IGFuZCAzMiBrSHogY2xvY2tzIGNhbiBiZSBlYXNpbHkg b2JzZXJ2ZWQgd2l0aCB0aGUgdGltZXJzLiBUaGUgMTA0IE1IeiBvdXRwdXQgY2FuIGJlCisgKiBv YnNlcnZlZCB0aHJvdWdoIHRoZSBVQVJULiBPbmUgMTIyLjg4IE1IeiBjbG9jayBjYW4gYmUgb2Jz ZXJ2ZWQgdGhyb3VnaCB0aGUgVERNIGRldmljZS4gQWxsCisgKiBvdGhlcnMgY2FuIG9ubHkgYmUg aW5kaXJlY3RseSBpbmZlcnJlZCwgZS5nLiBieSBjb21wYXJpbmcgQ1BVIHNwZWVkIG9yIFNESU8g dHJhbnNmZXIgcmF0ZSBiZXR3ZWVuCisgKiB0aGUgZml4ZWQgMjYgTUh6IG9zY2lsbGF0b3IgYW5k IHRoZSBwcm92aWRlZCBQTEwgZnJlcXVlbmN5LgorICoKKyAqIFRoZSBmb3JtdWxhIHRvIGNhbGN1 bGF0ZSB0aGUgY2xvY2sgaXMgKChyZWYgLyByZWZkaXYpICogZmJkaXYpIC8gcG9zdGRpdjEgLyBw b3N0ZGl2Mi4gVGhlIG1hc2tzCisgKiBhcmUgZ2l2ZW4gYmVsb3cuIFRoZXJlIGFyZSBhIGZldyBj b250cm9sIGZsYWdzOgorICoKKyAqIEJpdCAzMTogRGlzYWJsZXMgdGhlIFBMTCwgYnV0IHBhc3Nl cyBjbG9jay0yNm0gdGhyb3VnaCB1bm1vZGlmaWVkLiBXaGV0aGVyIFBPU1RESVZfT1VUX0RJU0FC TEUKKyAqICAgICAgICAgc3RpbGwgbWF0dGVycyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBQTExzLgor ICogQml0IDMwOiBSZXR1cm5zIGlmIHRoZSBQTEwgaXMgbG9ja2VkCisgKiBCaXQgMjk6IE5vdCBu YW1lZCBpbiBaVEUncyBjb2RlLCBidXQgY2FuIGJlIHNldC4gVGhlcmUgaXMgbm8gb2J2aW91cyBp bXBhY3QuIExvY2sgdGltZXMgYXJlCisgKiAgICAgICAgIHVuY2hhbmdlZCwgc28gaXQgZG9lc24n dCBpbmZsdWVuY2Ugb3IgYnlwYXNzIGxvY2sgZGV0ZWN0aW9uLiBJdCBkb2Vzbid0IHJhaXNlIGFu eSBJUlFzIG9yCisgKiAgICAgICAgIGluZmx1ZW5jZSBHUElPcy4KKyAqIEJpdCAyNzogR2l2ZW4g aXRzIG5hbWUgaXQgbGlrZWx5IGRpc2FibGVzIHRoZSBEZWx0YS1TaWdtYSBNb2R1bGF0b3IsIGlm IG9uZSBleGlzdHMgYXQgYWxsLiBUaGUKKyAqICAgICAgICAgYm9vdCBST00gc2V0cyBpdCBvbiBl dmVyeSBQTEwuIFVuc2V0dGluZyBpdCBtYXJnaW5hbGx5IGRlY3JlYXNlcyB0aGUgdGltZSBpdCB0 YWtlcyB0bworICogICAgICAgICBsb2NrIHRvIHRoZSByZWZlcmVuY2UgY2xvY2sgKGZyb20gfjQw MCB1cyB0byB+MzAwIHVzKS4KKyAqIEJpdCAyNDogQnlwYXNzZXMgdGhlIFZDTywgYnV0IHN0aWxs IGFwcGxpZXMgcmVmZGl2IGFuZCBwb3N0ZGl2LiBEb2Vzbid0IG1hdHRlciBpZiBQTExfRElTQUJM RT0xLgorICoKKyAqIE5COiBTb21lIFBMTHMgaGF2ZSBhbiBhdXRvbWF0aWMgYnlwYXNzIGxvZ2lj IHRoYXQgZm9yd2FyZHMgY2xvY2stMjZtIChSRUdBUkRMRVNTIG9mIHJlZmVyZW5jZSkKKyAqIHdo ZW4gdGhleSBkb24ndCBoYXZlIGEgbG9jaywgcmVnYXJkbGVzcyBvZiByZWFzb24uIFRoaXMgY2Fu IGJlIHRyaWdnZXJlZCBieSBkaXNhYmxpbmcgdGhlIFBMTCwKKyAqIHNldHRpbmcgYW4gb3V0LW9m LXNwZWMgVkNPIGZyZXF1ZW5jeSBvciBkaXNhYmxpbmcgdGhlIHBhcmVudC4gVGhpcyBzaG91bGRu J3QgbWF0dGVyIGluIHJlZ3VsYXIKKyAqIG9wZXJhdGlvbiwgYnV0IGNhdXNlZCBtZSBzb21lIGNv bmZ1c2lvbiB3aGVuIHJldmVyc2UgZW5naW5lZXJpbmcgdGhlIGNsb2NrIHRyZWUuIEUuZy4gY2xv Y2stMjZtLT4KKyAqIHVua25vd25wbGwoZGlzYWJsZWQpIC0+IGRwbGwoZW5hYmxlZCkgY291bnRl cmludHVpdGl2ZWx5IHJlc3VsdHMgaW4gYSAyNiBNSHogb3V0cHV0IGNsb2NrLgorICovCisKKyNk ZWZpbmUgWlgyOV9QTExfRElTQUJMRQkJCUJJVCgzMSkKKyNkZWZpbmUgWlgyOV9QTExfTE9DS0VE CQkJCUJJVCgzMCkKKyNkZWZpbmUgWlgyOV9QTExfTE9DS19GSUxURVIJCQlCSVQoMjkpCisjZGVm aW5lIFpYMjlfUExMX0RTTV9ESVNBQkxFCQkJQklUKDI3KQorI2RlZmluZSBaWDI5X1BMTF9QQVJF TlRfTUFTSwkJCUdFTk1BU0soMjYsIDI1KQorI2RlZmluZSBaWDI5X1BMTF9CWVBBU1MJCQkJQklU KDI0KQorI2RlZmluZSBaWDI5X1BMTF9SRUZESVZfTUFTSwkJCUdFTk1BU0soMjMsIDE4KQorI2Rl ZmluZSBaWDI5X1BMTF9GQkRJVl9NQVNLCQkJR0VOTUFTSygxNywgNikKKyNkZWZpbmUgWlgyOV9Q TExfUE9TVERJVjFfTUFTSwkJCUdFTk1BU0soNSwgMykKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJ VjJfTUFTSwkJCUdFTk1BU0soMiwgMCkKKworLyoKKyAqIFRoZSBzZWNvbmQgcmVnaXN0ZXIgaGFz IGEgMjQgYml0IGZyYWN0aW9uYWwgdmFsdWUsIHdoaWNoIG9ubHkgbWF0dGVycyB3aGVuIFpYMjlf UExMX0RTTV9ESVNBQkxFCisgKiBpcyBub3Qgc2V0LCBhbmQgb25seSBzZWVtcyB0byBtYXR0ZXIg Zm9yIGRwbGwuIFpURSdzIGZpcm13YXJlIGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZSBmcmFjdGlv bmFsCisgKiBhbmQgaXQgaXMgdW5pbXBsZW1lbnRlZCBpbiB0aGlzIGRyaXZlci4gRXhwZXJpbWVu dGFsIHRlc3RpbmcgY29uZmlybXMgdGhhdCBpdCBoYXMgYW4gaW1wYWN0IG9uCisgKiBkcGxsLgor ICoKKyAqIEJpdHMgMjc6MjQgY29udGFpbiBtb3JlIGZsYWdzOgorICoKKyAqIEJpdCAyNzogU2V0 dGluZyBaWDI5X1BMTF9EQUNBUCBzbG93cyBkb3duIHRoZSBsb2NrIHRpbWUgYW5kIG9idmlhdGVz IHRoZSBzcGVlZCBnYWluZWQgZnJvbQorICogICAgICAgICAhRFNNX0RJU0FCTEUuIE5vIG90aGVy IGVmZmVjdCBvYnNlcnZlZC4KKyAqCisgKiBCaXQgMjY6IFpYMjlfUExMXzRQSEFTRV9PVVRfRElT QUJMRSBpcyBzZXQgb24gc29tZSBQTExzIG9uIGJvb3QgYnV0IG5vdCBvbiBvdGhlcnMuIEl0IGlz IHNldCBvbgorICogICAgICAgICBib290IG9uIG1wbGwgYW5kIHVwbGwsIGJ1dCBub3QgZ3BsbCwg ZHBsbCBvciB1bmtub3ducGxsLiBJIGFtIG5vdCBzdXJlIHdoYXQgaXQgZG9lcworICogICAgICAg ICBlaXRoZXIuIFRoZSBTRElPIGRldmljZXMgYnJlYWsgaWYgdGhleSBhcmUgZmVkIGZyb20gZ3Bs bCB3aXRoIHRoaXMgZmxhZyBzZXQsIGJ1dCB0aGV5CisgKiAgICAgICAgIHdvcmsgT0sgaWYgdGhl eSBhcmUgZmVkIGZyb20gbXBsbCB3aXRob3V0IHRoaXMgZmxhZyBzZXQuCisgKgorICogQml0IDI1 OiBaWDI5X1BMTF9QT1NURElWX09VVF9ESVNBQkxFIHNlZW1zIHRvIGRpc2FibGUgdGhlIFBMTCBv dXRwdXQgZW50aXJlbHkuIFdoZXRoZXIgaXQgaXMKKyAqICAgICAgICAgYnlwYXNzZWQgYnkgUExM X0RJU0FCTEUgZGlmZmVycyBiZXR3ZWVuIFBMTHMuIGdwbGwgc3RpbGwgcHJvZHVjZXMgYW4gb3V0 cHV0IGNsb2NrIGlmCisgKiAgICAgICAgIFBMTF9ESVNBQkxFID0gMSBhbmQgUE9TVERJVl9ESVNB QkxFID0gMSwgYnV0IHByb2R1Y2VzIG5vIG91dHB1dCBpZiBQTExfRElTQUJMRSA9IDAgYW5kCisg KiAgICAgICAgIFBPU1RESVZfRElTQUJMRSA9IDEuIFRoZSBkcGxsIGZlZWRlciAoInVua25vd25w bGwiKSBhdCAweDEwMCBwcm9kdWNlcyBubyBvdXRwdXQgY2xvY2sgaWYKKyAqICAgICAgICAgYm90 aCBQTExfRElTQUJMRSBhbmQgUE9TVERJVl9ESVNBQkxFIGFyZSBzZXQgdG8gMS4KKyAqCisgKiBC aXQgMjQ6IFpYMjlfUExMX1ZDT19PVVRfRElTQUJMRSBwcm9iYWJseSBkaXNhYmxlcyB0aGUgb3V0 cHV0IG9mIHRoZSBWQ08gY2xvY2sgd2l0aG91dAorICogICAgICAgICBwb3N0LVZDTy1kaXZpZGVy cywgYnV0IHRoZSByYXcgVkNPIG91dHB1dCBpcyBub3QgYSBwb3NzaWJsZSBwYXJlbnQgb2YgYW55 IGNvbnN1bWVyIGNsb2NrLAorICogICAgICAgICBzbyBJIGNvdWxkIG5vdCBjb25maXJtIHRoaXMu IEl0IGRvZXMgbm90IGRpc2FibGUgdGhlIFZDTyBlbnRpcmVseSAtIHRoYXQncyB3aGF0CisgKiAg ICAgICAgIFBMTF9ESVNBQkxFIGRvZXMuCisgKgorICogQSBzcGlubG9jayBzaG91bGQgbm90IGJl IG5lZWRlZC4gUExMcyBkb24ndCBzaGFyZSB0aGVpciByZWdpc3RlcnMgd2l0aCBhbnl0aGluZyBl bHNlIGFuZCB0aGUKKyAqIGdsb2JhbCBwcmVwYXJlIG11dGV4IGFuZCBlbmFibGUgc3BpbmxvY2sg c2hvdWxkIGJlIGVub3VnaC4gQmV3YXJlIG9mIGNvbmZsaWN0cyBpbiByZWcyIGJldHdlZW4KKyAq IFBPU1RESVZfT1VUX0RJU0FCTEUgYW5kIHRoZSBmcmFjdGlvbmFsIHZhbHVlIGluIGNhc2UgeW91 IGZpbmQgb3V0IGhvdyBmcmFjdGlvbmFsIGRpdmlkZXJzIHdvcmsKKyAqIGFuZCBhZGQgc3VwcG9y dCBmb3IgdGhlbS4KKyAqLworI2RlZmluZSBaWDI5X1BMTF9SRUcyX09GRlNFVAkJCTQKKyNkZWZp bmUgWlgyOV9QTExfREFDQVAJCQkJQklUKDI3KQorI2RlZmluZSBaWDI5X1BMTF80UEhBU0VfT1VU X0RJU0FCTEUJCUJJVCgyNikKKyNkZWZpbmUgWlgyOV9QTExfUE9TVERJVl9PVVRfRElTQUJMRQkJ QklUKDI1KQorI2RlZmluZSBaWDI5X1BMTF9WQ09fT1VUX0RJU0FCTEUJCUJJVCgyNCkKKyNkZWZp bmUgWlgyOV9QTExfRlJBQ1QJCQkJR0VOTUFTSygyMywgMCkKKworLyoKKyAqIFRoZSBWQ08ncyBm cmVxdWVuY3kgcmFuZ2UgaXMgbGltaXRlZC4gVGhlIHN0b2NrIHNldHRpbmdzIHJ1biB0aGUgVkNP IGJldHdlZW4gOTYwIGFuZCAxMjQ4IE1Iei4KKyAqIEFkLWhvYyB0ZXN0aW5nIHdpdGggZ3BsbCBz dWdnZXN0cyB0aGF0IGF0IGxlYXN0IHRoaXMgUExMIHJlbWFpbnMgc3RhYmxlIGRvd24gdG8gYWJv dXQgNyBNSHogYW5kCisgKiB1cCB0byAyIEdIeiBhbmQgcHJvZHVjZXMgYSBjbG9jayB0aGF0IGNh biBiZSB1c2VkIGJ5IHRoZSBTRElPIGNvbnRyb2xsZXIuIEF0dGVtcHRpbmcgdG8gcnVuIHRoZQor ICogbXBsbCBWQ08gYXQgNjI0IE1IeiBhbmQgc2V0dGluZyBwb3N0ZGl2MSA9IHBvc3RkaXYyID0g MSAtIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgb3V0cHV0CisgKiBmcmVxdWVuY3kg LSBvciBydW5uaW5nIGl0IGF0IDE4NzIgTUh6IHdpdGggYW4gZWZmZWN0aXZlIHBvc3QgZGl2aWRl ciBvZiAzIGNyYXNoZXMgdGhlIENQVS4gTW9zdAorICogbGlrZWx5IHRoZSBQTExzIGJlY29tZSB1 bnN0YWJsZSBvdXRzaWRlIHRoZWlyIGNvcmUgcmFuZ2UgYW5kIHRoZSBTRElPIGNvbnRyb2xsZXIg aXMgbXVjaCBtb3JlCisgKiBmb3JnaXZpbmcgdGhhbiBDUFUgYW5kIERSQU0gYXJlLgorICovCisj ZGVmaW5lIFpYMjlfUExMX1ZDT19NQVhfRlJFUQkJCSgxMzAwICogSFpfUEVSX01IWikKKyNkZWZp bmUgWlgyOV9QTExfVkNPX01JTl9GUkVRCQkJKDkwMCAqIEhaX1BFUl9NSFopCisKK3N0cnVjdCB6 eDI5X2Nsa19wbGwgeworCXN0cnVjdCBjbGtfaHcJaHc7CisJc3RydWN0IGRldmljZQkqZGV2Owor CXN0cnVjdCByZWdtYXAJKm1hcDsKKwl1MTYJCXJlZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHp4MjlfY2xrX3BsbCAqdG9fengyOV9jbGtfcGxsKHN0cnVjdCBjbGtfaHcgKmh3KQorewor CXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCB6eDI5X2Nsa19wbGwsIGh3KTsKK30KKwor c3RhdGljIGludCB6eDI5X3BsbF9pc19wcmVwYXJlZChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlz dHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCWludCByZXM7 CisKKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9QTExf RElTQUJMRSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXR1cm4gIXJlczsK K30KKworc3RhdGljIGludCB6eDI5X3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor CXN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJdTMyIHZh bCA9IDA7CisJaW50IHJlczsKKworCXJlcyA9IHJlZ21hcF9jbGVhcl9iaXRzKHBsbC0+bWFwLCBw bGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7 CisKKwkvKiBMb2NrIGR1cmF0aW9uIGlzIHVzdWFsbHkgYmV0d2VlbiAzMDAgdXMgYW5kIDUwMCB1 cyAqLworCXJlcyA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwbGwtPm1hcCwgcGxsLT5yZWcs IHZhbCwgdmFsICYgWlgyOV9QTExfTE9DS0VELCA1MCwgMjAwMCk7CisJaWYgKHJlcykgeworCQly ZWdtYXBfc2V0X2JpdHMocGxsLT5tYXAsIHBsbC0+cmVnLCBaWDI5X1BMTF9ESVNBQkxFKTsKKwkJ ZGV2X2VycihwbGwtPmRldiwgIiVzOiBQTEwgcHJlcGFyZSBmYWlsZWQ6ICVkLiBDb25maWcgdmFs dWUgMHglMDh4XG4iLAorCQkJY2xrX2h3X2dldF9uYW1lKCZwbGwtPmh3KSwgcmVzLCB2YWwpOwor CX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCB6eDI5X3BsbF91bnByZXBhcmUoc3Ry dWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9j bGtfcGxsKGh3KTsKKworCXJlZ21hcF9zZXRfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlf UExMX0RJU0FCTEUpOworfQorCitzdGF0aWMgaW50IHp4MjlfcGxsX2lzX2VuYWJsZWQoc3RydWN0 IGNsa19odyAqaHcpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtf cGxsKGh3KTsKKwlpbnQgcmVzOworCisJcmVzID0gcmVnbWFwX3Rlc3RfYml0cyhwbGwtPm1hcCwg cGxsLT5yZWcgKyBaWDI5X1BMTF9SRUcyX09GRlNFVCwKKwkJCSAgICAgICBaWDI5X1BMTF9QT1NU RElWX09VVF9ESVNBQkxFKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCXJldHVy biAhcmVzOworfQorCitzdGF0aWMgaW50IHp4MjlfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpo dykKK3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOwor CisJcmV0dXJuIHJlZ21hcF9jbGVhcl9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExM X1JFRzJfT0ZGU0VULAorCQkJCSBaWDI5X1BMTF9QT1NURElWX09VVF9ESVNBQkxFKTsKK30KKwor c3RhdGljIHZvaWQgengyOV9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1 Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCisJcmVnbWFwX3Nl dF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULAorCQkJWlgy OV9QTExfUE9TVERJVl9PVVRfRElTQUJMRSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHp4 MjlfcGxsX2dldF9yYXRlKGNvbnN0IHN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCwgdW5zaWduZWQg bG9uZyBwYXJlbnRfcmF0ZSwKKwkJCQkgICAgICAgdTMyIHNldHRpbmcpCit7CisJdW5zaWduZWQg bG9uZyByZWZkaXYsIGZiZGl2LCBwb3N0ZGl2MSwgcG9zdGRpdjIsIGZyZXE7CisJY29uc3QgY2hh ciAqbmFtZSA9IGNsa19od19nZXRfbmFtZSgmcGxsLT5odyk7CisJdTY0IHZjbzsKKworCXJlZmRp diA9IEZJRUxEX0dFVChaWDI5X1BMTF9SRUZESVZfTUFTSywgc2V0dGluZyk7CisJZmJkaXYgPSBG SUVMRF9HRVQoWlgyOV9QTExfRkJESVZfTUFTSywgc2V0dGluZyk7CisJcG9zdGRpdjEgPSBGSUVM RF9HRVQoWlgyOV9QTExfUE9TVERJVjFfTUFTSywgc2V0dGluZyk7CisJcG9zdGRpdjIgPSBGSUVM RF9HRVQoWlgyOV9QTExfUE9TVERJVjJfTUFTSywgc2V0dGluZyk7CisJZGV2X2RiZyhwbGwtPmRl diwgIiVzOiByZWZlcmVuY2UgY2xvY2sgJWx1IEh6LCBQTEwgc2V0dGluZyAweCUwOHhcbiIsCisJ CW5hbWUsIHBhcmVudF9yYXRlLCBzZXR0aW5nKTsKKworCWlmICghcmVmZGl2IHx8ICFwb3N0ZGl2 MSB8fCAhcG9zdGRpdjIpIHsKKwkJZGV2X2VycihwbGwtPmRldiwgIiVzOiBkaXZpZGUgYnkgemVy byAoJWx1LCAlbHUsICVsdSlcbiIsIG5hbWUsIHJlZmRpdiwgcG9zdGRpdjEsCisJCQlwb3N0ZGl2 Mik7CisJCXJldHVybiAwOworCX0KKworCXZjbyA9IGRpdl91NjQoKHU2NClwYXJlbnRfcmF0ZSAq IGZiZGl2LCByZWZkaXYpOworCWZyZXEgPSBkaXZfdTY0KGRpdl91NjQodmNvLCBwb3N0ZGl2MSks IHBvc3RkaXYyKTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IHJlZmRpdiAlbHUgZmJkaXYgJWx1 XG4iLCBuYW1lLCByZWZkaXYsIGZiZGl2KTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IHBvc3Rk aXYxICVsdSBwb3N0ZGl2MiAlbHVcbiIsIG5hbWUsIHBvc3RkaXYxLCBwb3N0ZGl2Mik7CisKKwlk ZXZfZGJnKHBsbC0+ZGV2LCAiJXM6ICVsdSBNSHpcbiIsIG5hbWUsIGZyZXEgLyBIWl9QRVJfTUha KTsKKworCXJldHVybiBmcmVxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB6eDI5X3BsbF9y ZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkK K3sKKwlzdHJ1Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCXUz MiB2YWw7CisJaW50IHJlczsKKworCXJlcyA9IHJlZ21hcF9yZWFkKHBsbC0+bWFwLCBwbGwtPnJl ZywgJnZhbCk7CisJaWYgKHJlcyA8IDApIHsKKwkJZGV2X2VycihwbGwtPmRldiwgIiVzOiBGYWls ZWQgdG8gcmVhZCBQTEwgc2V0dGluZ3NcbiIsIGNsa19od19nZXRfbmFtZSgmcGxsLT5odykpOwor CQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gengyOV9wbGxfZ2V0X3JhdGUocGxsLCBwYXJlbnRf cmF0ZSwgdmFsKTsKK30KKworc3RhdGljIHUzMiB6eDI5X3BsbF9jYWxjX3ZhbHVlcyhjb25zdCBz dHJ1Y3QgengyOV9jbGtfcGxsICpwbGwsIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsCisJCQkJ dW5zaWduZWQgbG9uZyByYXRlLCB1bnNpZ25lZCBsb25nIG1pbl9yYXRlLCB1bnNpZ25lZCBsb25n IG1heF9yYXRlKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBwb3N0ZGl2MV9tYXggPSAoMSA8PCBo d2VpZ2h0MzIoWlgyOV9QTExfUE9TVERJVjFfTUFTSykpIC0gMTsKKwljb25zdCB1bnNpZ25lZCBp bnQgcG9zdGRpdjJfbWF4ID0gKDEgPDwgaHdlaWdodDMyKFpYMjlfUExMX1BPU1RESVYyX01BU0sp KSAtIDE7CisJdW5zaWduZWQgbG9uZyBmYmRpdiwgcmVmZGl2LCBiZXN0X2ZiZGl2ID0gMCwgYmVz dF9yZWZkaXYgPSAwOworCXUzMiBwb3N0ZGl2MSA9IDAsIHBvc3RkaXYyID0gMCwgaSwgaiwgc2V0 dGluZzsKKwljb25zdCBjaGFyICpuYW1lID0gY2xrX2h3X2dldF9uYW1lKCZwbGwtPmh3KTsKKwls b25nIGJlc3QgPSBMT05HX01BWDsKKworCS8qCisJICogVGhpcyBjb2RlIHByb2R1Y2VzIHRoZSBz YW1lIFZDTyBzZXR0aW5ncyB0aGF0IHRoZSBib290IGxvYWRlciBhbmQgc3RvY2sgZmlybXdhcmUg dXNlIGZvcgorCSAqIHRoZSBzdGFuZGFyZCBmcmVxdWVuY2llcy4gSXQgaGFzIHNlZW4gb25seSB2 ZXJ5IGxpdHRsZSBtYW51YWwgdGVzdGluZyBiZXlvbmQgdGhhdC4KKwkgKgorCSAqIFRoZSBnb2Fs IGlzIHRvIGZpbmQgYSBWQ08gc2V0dGluZyB0aGF0IGdldHMgdXMgYXMgY2xvc2UgYXMgcG9zc2li bGUgdG8gdGhlIGRlc2lyZWQgb3V0cHV0CisJICogcmF0ZSwgd2hpbGUgYmVpbmcgd2l0aGluIHRo ZSBWQ08ncyBvcGVyYXRpbmcgbGltaXRzIGFuZCBhY2hpZXZhYmxlIHdpdGggdGhlIGlucHV0IHZh bHVlCisJICogcmFuZ2UuIEl0IGlzIGl0ZXJhdGluZyBvdmVyIHBvc3NpYmxlIHBvc3QtVkNPIGRp dmlkZXIgdmFsdWVzICgxLTcpKigxLTcpIHRvIGxvb2sgZm9yCisJICogdmFsaWQgVkNPIHRhcmdl dCBmcmVxdWVuY2llcyBhbmQgdGhlbiBsb29rcyBmb3IgcmVmZGl2IGFuZCBmYmRpdiB2YWx1ZXMg dG8gYWNoaWV2ZSB0aGUKKwkgKiBWQ08gZnJlcXVlbmN5IGZyb20gdGhlIHJlZmVyZW5jZSBmcmVx dWVuY3kuCisJICovCisJZm9yIChqID0gMTsgaiA8PSBwb3N0ZGl2Ml9tYXg7IGorKykgeworCQlm b3IgKGkgPSAxOyBpIDw9IHBvc3RkaXYxX21heDsgaSsrKSB7CisJCQl1NjQgdmNvID0gKHU2NCly YXRlICogaSAqIGo7CisJCQl1bnNpZ25lZCBsb25nIG91dDsKKworCQkJaWYgKHZjbyA+IFpYMjlf UExMX1ZDT19NQVhfRlJFUSB8fCB2Y28gPCBaWDI5X1BMTF9WQ09fTUlOX0ZSRVEpCisJCQkJY29u dGludWU7CisKKwkJCXJhdGlvbmFsX2Jlc3RfYXBwcm94aW1hdGlvbih2Y28sIHBhcmVudF9yYXRl LAorCQkJCQkJICAgICgxIDw8IGh3ZWlnaHQzMihaWDI5X1BMTF9GQkRJVl9NQVNLKSkgLSAxLAor CQkJCQkJICAgICgxIDw8IGh3ZWlnaHQzMihaWDI5X1BMTF9SRUZESVZfTUFTSykpIC0gMSwKKwkJ CQkJCSAgICAmZmJkaXYsICZyZWZkaXYpOworCQkJc2V0dGluZyA9IEZJRUxEX1BSRVAoWlgyOV9Q TExfRkJESVZfTUFTSywgZmJkaXYpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExM X1JFRkRJVl9NQVNLLCByZWZkaXYpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExM X1BPU1RESVYxX01BU0ssIGkpOworCQkJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpYMjlfUExMX1BP U1RESVYyX01BU0ssIGopOworCQkJb3V0ID0gengyOV9wbGxfZ2V0X3JhdGUocGxsLCBwYXJlbnRf cmF0ZSwgc2V0dGluZyk7CisKKwkJCWlmIChvdXQgPCBtaW5fcmF0ZSB8fCBvdXQgPiBtYXhfcmF0 ZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGFic19kaWZmKG91dCwgcmF0ZSkgPiBiZXN0KQor CQkJCWNvbnRpbnVlOworCisJCQlpZiAoYWJzX2RpZmYob3V0LCByYXRlKSA8IGJlc3QpIHsKKwkJ CQlwb3N0ZGl2MSA9IGk7CisJCQkJcG9zdGRpdjIgPSBqOworCQkJCWJlc3RfZmJkaXYgPSBmYmRp djsKKwkJCQliZXN0X3JlZmRpdiA9IHJlZmRpdjsKKwkJCQliZXN0ID0gYWJzX2RpZmYob3V0LCBy YXRlKTsKKworCQkJCWlmICghYmVzdCkKKwkJCQkJZ290byBzZWFyY2hfZG9uZTsKKwkJCX0KKwkJ fQorCX0KK3NlYXJjaF9kb25lOgorCisJaWYgKCFwb3N0ZGl2MSkgeworCQlkZXZfZXJyKHBsbC0+ ZGV2LCAiRGlkIG5vdCBmaW5kIGEgc2V0dGluZyBmb3IgJWx1IEh6LCBwYXJlbnQgJWx1IEh6XG4i LAorCQkJcmF0ZSwgcGFyZW50X3JhdGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfZGJnKHBs bC0+ZGV2LCAiJXM6IHBhcmVudCByYXRlICVsdVxuIiwgbmFtZSwgcGFyZW50X3JhdGUpOworCWRl dl9kYmcocGxsLT5kZXYsICIlczogZm91bmQgVkNPIGRpdmlkZXJzICV1IGFuZCAldVxuIiwgbmFt ZSwgcG9zdGRpdjEsIHBvc3RkaXYyKTsKKwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IFZDTyB0YXJn ZXQgcmF0ZSAlbHVcbiIsIG5hbWUsIHJhdGUgKiBwb3N0ZGl2MSAqIHBvc3RkaXYyKTsKKworCWRl dl9kYmcocGxsLT5kZXYsICIlczogR290IGZiZGl2ID0gJWx1IHJlZmRpdiA9ICVsdVxuIiwgbmFt ZSwgYmVzdF9mYmRpdiwgYmVzdF9yZWZkaXYpOworCisJc2V0dGluZyA9IEZJRUxEX1BSRVAoWlgy OV9QTExfRkJESVZfTUFTSywgYmVzdF9mYmRpdik7CisJc2V0dGluZyB8PSBGSUVMRF9QUkVQKFpY MjlfUExMX1JFRkRJVl9NQVNLLCBiZXN0X3JlZmRpdik7CisJc2V0dGluZyB8PSBGSUVMRF9QUkVQ KFpYMjlfUExMX1BPU1RESVYxX01BU0ssIHBvc3RkaXYxKTsKKwlzZXR0aW5nIHw9IEZJRUxEX1BS RVAoWlgyOV9QTExfUE9TVERJVjJfTUFTSywgcG9zdGRpdjIpOworCWRldl9kYmcocGxsLT5kZXYs ICIlczogRmluYWwgc2V0dGluZyAweCUwOHhcbiIsIG5hbWUsIHNldHRpbmcpOworCisJcmV0dXJu IHNldHRpbmc7Cit9CisKK3N0YXRpYyBpbnQgengyOV9wbGxfZGV0ZXJtaW5lX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHN0cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHp4 MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsKKwl1bnNpZ25lZCBsb25nIG5l d19yYXRlOworCXUzMiBzZXR0aW5nOworCisJLyoKKwkgKiBUT0RPOiBEUExMIGNhbiBzd2l0Y2gg YmV0d2VlbiB0d28gcGFyZW50cywgb25lIG9mIHdoaWNoIGlzIGFub3RoZXIgUExMLiBUYWtlIHRo aXMgaW50bworCSAqIGFjY291bnQgd2hlbiBzZWFyY2hpbmcgdGhlIGNvbmZpZyBzcGFjZSBhbmQg c2V0IHJlcS0+YmVzdF9wYXJlbnRfcmF0ZS4KKwkgKgorCSAqIEluIHByYWN0aWNlIGl0IHNob3Vs ZG4ndCBtYXR0ZXIgdGhvdWdoLiBEcGxsIGlzIGFsd2F5cyBjb25maWd1cmVkIHRvIGEgZml4ZWQg ZnJlcXVlbmN5CisJICogYW5kIGlzIHRoZSBvbmx5IGNsb2NrIHdpdGggYSBzd2l0Y2hhYmxlIHBh cmVudC4KKwkgKi8KKwlpZiAoIXJlcS0+YmVzdF9wYXJlbnRfcmF0ZSkgeworCQlkZXZfZXJyKHBs bC0+ZGV2LCAiRGlkIG5vdCBleHBlY3QgYmVzdF9wYXJlbnRfcmF0ZT0wXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJc2V0dGluZyA9IHp4MjlfcGxsX2NhbGNfdmFsdWVzKHBsbCwgcmVx LT5iZXN0X3BhcmVudF9yYXRlLCByZXEtPnJhdGUsIHJlcS0+bWluX3JhdGUsCisJCQkJICAgICAg IHJlcS0+bWF4X3JhdGUpOworCWlmICghc2V0dGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlu ZXdfcmF0ZSA9IHp4MjlfcGxsX2dldF9yYXRlKHBsbCwgcmVxLT5iZXN0X3BhcmVudF9yYXRlLCBz ZXR0aW5nKTsKKwlpZiAobmV3X3JhdGUgIT0gcmVxLT5yYXRlKSB7CisJCWRldl9kYmcocGxsLT5k ZXYsICJEaWQgbm90IGZpbmQgYW4gZXhhY3QgbWF0Y2guIFdhbnQgJWx1LCBnb3QgJWx1XG4iLAor CQkJcmVxLT5yYXRlLCBuZXdfcmF0ZSk7CisJCXJlcS0+cmF0ZSA9IG5ld19yYXRlOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp4MjlfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtf aHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50 X3JhdGUpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3 KTsKKwl1MzIgc2V0dGluZzsKKworCS8qCisJICogVE9ETzogSW1wbGVtZW50IGdyYWR1YWwgUExM IHJhdGUgY2hhbmdlLiBQTExzIGNhbiBiZSBjaGFuZ2VkIHdoaWxlIHRoZXkgYXJlIHJ1bm5pbmcg YW5kCisJICogZG93bnN0cmVhbSBoYXJkd2FyZSBpcyBnZW5lcmFsbHkgZmluZSB3aXRoIHRoYXQu IFRoZSBleGNlcHRpb24gaXMgRFJBTSwgd2hpY2ggcmVhZHMKKwkgKiBpbmNvcnJlY3QgdmFsdWVz IGlmIGNoYW5nZWQgdG9vIGZhc3QuCisJICoKKwkgKiBDaGFuZ2luZyB0aGUgbXBsbCByYXRlIGlz IHBvdGVudGlhbGx5IHVzZWZ1bCBmb3Igb3Zlci91bmRlcmNsb2NraW5nLiBHYXRpbmcgbXBsbCBp cworCSAqIHVucmVhbGlzdGljIGJlY2F1c2UgdG9vIG1hbnkgZGV2aWNlcyBkZXBlbmQgb24gaXQu CisJICovCisJc2V0dGluZyA9IHp4MjlfcGxsX2NhbGNfdmFsdWVzKHBsbCwgcGFyZW50X3JhdGUs IHJhdGUsIHJhdGUsIHJhdGUpOworCWlmICghc2V0dGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlkZXZfZGJnKHBsbC0+ZGV2LCAiJXM6IFNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb246IDB4JTA4 eFxuIiwgY2xrX2h3X2dldF9uYW1lKGh3KSwgc2V0dGluZyk7CisKKwlyZXR1cm4gcmVnbWFwX3Vw ZGF0ZV9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgMHgwMGZmZmZmZiwgc2V0dGluZyk7Cit9CisK K3N0YXRpYyB1OCB6eDI5X3BsbF9nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0 cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xrX3BsbChodyk7CisJdTMyIHZhbDsK KwlpbnQgcmVzOworCisJcmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVnLCAmdmFs KTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIDB4ZmY7CisKKwl2YWwgPSBGSUVMRF9HRVQoWlgy OV9QTExfUEFSRU5UX01BU0ssIHZhbCk7CisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBQYXJlbnQg MHgleFxuIiwgY2xrX2h3X2dldF9uYW1lKGh3KSwgdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisK K3N0YXRpYyBpbnQgengyOV9wbGxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5k ZXgpCit7CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsID0gdG9fengyOV9jbGtfcGxsKGh3KTsK Kwl1MzIgcGFyZW50ID0gRklFTERfUFJFUChaWDI5X1BMTF9QQVJFTlRfTUFTSywgaW5kZXgpOwor CWludCByZXM7CisJdTMyIHZhbDsKKworCXJlcyA9IHJlZ21hcF91cGRhdGVfYml0cyhwbGwtPm1h cCwgcGxsLT5yZWcsIFpYMjlfUExMX1BBUkVOVF9NQVNLLCBwYXJlbnQpOworCWlmIChyZXMgPCAw KQorCQlyZXR1cm4gcmVzOworCisJcmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVn LCAmdmFsKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCWlmICgodmFsICYgWlgy OV9QTExfUEFSRU5UX01BU0spICE9IHBhcmVudCkgeworCQlkZXZfZXJyKHBsbC0+ZGV2LCAiSGFy ZHdhcmUgcmVqZWN0ZWQgUExMIHBhcmVudCAldVxuIiwgaW5kZXgpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eDI5X3BsbF9pbml0KHN0cnVj dCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCB6eDI5X2Nsa19wbGwgKnBsbCA9IHRvX3p4MjlfY2xr X3BsbChodyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7CisJaW50 IHJlczsKKwl1MzIgdmFsOworCisJZGV2X2RiZyhwbGwtPmRldiwgIiVzOiBpbml0aWFsaXppbmdc biIsIG5hbWUpOworCisJLyoKKwkgKiBUaGUgZnJhY3Rpb25hbCB2YWx1ZSBpcyBub3QgeWV0IGlt cGxlbWVudGVkLiBJdCB3b3JrcyBhdCBsZWFzdCB3aXRoIGRwbGwsIGJ1dCBJIGhhdmUKKwkgKiBu ZXZlciBzZWVuIGl0IHVzZWQgb24gYWN0dWFsIGhhcmR3YXJlLgorCSAqLworCXJlcyA9IHJlZ21h cF9yZWFkKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlfUExMX1JFRzJfT0ZGU0VULCAmdmFsKTsK KwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKKworCWlmICh2YWwgJiBaWDI5X1BMTF9GUkFD VCkgeworCQlkZXZfd2FybihwbGwtPmRldiwgIiVzOiB1bnN1cHBvcnRlZCBub256ZXJvIGZyYWN0 aW9uYWwgdmFsdWUgMHglMDhseFxuIiwKKwkJCSBuYW1lLCB2YWwgJiBaWDI5X1BMTF9GUkFDVCk7 CisJfQorCisJLyoKKwkgKiBSZW1vdmUgdGhlIGJ5cGFzcyBmbGFnIHNvIHdlIGRvbid0IGhhdmUg dG8gYm90aGVyIHdpdGggaXQgaW4gZW5hYmxlL2Rpc2FibGUuIEkgaGF2ZSBuZXZlcgorCSAqIHNl ZW4gaXQgc2V0IGJ5IHRoZSBlYXJsaWVyIGJvb3Qgc3RhZ2VzIGFueWhvdy4KKwkgKi8KKwlyZXMg PSByZWdtYXBfY2xlYXJfYml0cyhwbGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0JZUEFTUyk7 CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CisKKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRz KHBsbC0+bWFwLCBwbGwtPnJlZywgWlgyOV9QTExfRElTQUJMRSk7CisJaWYgKHJlcyA+IDApIHsK KwkJLyoKKwkJICogU2V0IFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUgZm9yIFBMTHMgdGhh dCBoYXZlIFpYMjlfUExMX0RJU0FCTEUgZm9yCisJCSAqIGNvbnNpc3RlbmN5IHdpdGggLmVuYWJs ZSBhbmQgLnByZXBhcmUuIFRoaXMgZW5zdXJlcyB0aGF0IC5wcmVwYXJlIGRvZXNuJ3QKKwkJICog aW5hZHZlcnRlbnRseSBlbmFibGUgUExMcyB3aXRob3V0IC5lbmFibGUgYmVpbmcgY2FsbGVkLgor CQkgKi8KKwkJcmVzID0gcmVnbWFwX3NldF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZyArIFpYMjlf UExMX1JFRzJfT0ZGU0VULAorCQkJCSAgICAgIFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FCTEUp OworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyB6 eDI5X3BsbF9vcHMgPSB7CisJLmluaXQJCT0gengyOV9wbGxfaW5pdCwKKwkuaXNfcHJlcGFyZWQJ PSB6eDI5X3BsbF9pc19wcmVwYXJlZCwKKwkucHJlcGFyZQk9IHp4MjlfcGxsX3ByZXBhcmUsCisJ LnVucHJlcGFyZQk9IHp4MjlfcGxsX3VucHJlcGFyZSwKKwkuaXNfZW5hYmxlZAk9IHp4MjlfcGxs X2lzX2VuYWJsZWQsCisJLmVuYWJsZQkJPSB6eDI5X3BsbF9lbmFibGUsCisJLmRpc2FibGUJPSB6 eDI5X3BsbF9kaXNhYmxlLAorCS5yZWNhbGNfcmF0ZQk9IHp4MjlfcGxsX3JlY2FsY19yYXRlLAor CS5kZXRlcm1pbmVfcmF0ZSA9IHp4MjlfcGxsX2RldGVybWluZV9yYXRlLAorCS5nZXRfcGFyZW50 CT0gengyOV9wbGxfZ2V0X3BhcmVudCwKKwkuc2V0X3BhcmVudAk9IHp4MjlfcGxsX3NldF9wYXJl bnQsCisJLnNldF9yYXRlCT0gengyOV9wbGxfc2V0X3JhdGUsCit9OworCisvKgorICogQSBQTEwg dGhhdCBjYW4gYmUgYSBwYXJlbnQgb2YgYW5vdGhlciBQTEwgbmVlZHMgdG8gcHJvZHVjZSBhbiBv dXRwdXQgc2lnbmFsIHdoZW4gcHJlcGFyZWQsCisgKiBvdGhlcndpc2UgdGhlIGRvd25zdHJlYW0g UExMJ3MgcHJlcGFyZSgpIHdpbGwgZmFpbCB0byBhY3F1aXJlIGEgbG9jay4KKyAqLworc3RhdGlj IGludCB6eDI5X3BsbF9ub2Rpc2FibGVfaW5pdChzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1 Y3QgengyOV9jbGtfcGxsICpwbGwgPSB0b196eDI5X2Nsa19wbGwoaHcpOworCWNvbnN0IGNoYXIg Km5hbWUgPSBjbGtfaHdfZ2V0X25hbWUoaHcpOworCWludCByZXM7CisJdTMyIHZhbDsKKworCWRl dl9kYmcocGxsLT5kZXYsICIlczogaW5pdGlhbGl6aW5nLCBwcmVwYXJlLWlzLWVuYWJsZWRcbiIs IG5hbWUpOworCisJcmVzID0gcmVnbWFwX3JlYWQocGxsLT5tYXAsIHBsbC0+cmVnICsgWlgyOV9Q TExfUkVHMl9PRkZTRVQsICZ2YWwpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOworCisJ aWYgKHZhbCAmIFpYMjlfUExMX0ZSQUNUKSB7CisJCWRldl93YXJuKHBsbC0+ZGV2LCAiJXM6IHVu c3VwcG9ydGVkIG5vbnplcm8gZnJhY3Rpb25hbCB2YWx1ZSAweCUwOGx4XG4iLAorCQkJIG5hbWUs IHZhbCAmIFpYMjlfUExMX0ZSQUNUKTsKKwl9CisKKwlyZXMgPSByZWdtYXBfY2xlYXJfYml0cyhw bGwtPm1hcCwgcGxsLT5yZWcsIFpYMjlfUExMX0JZUEFTUyk7CisJaWYgKHJlcyA8IDApCisJCXJl dHVybiByZXM7CisKKwlyZXR1cm4gcmVnbWFwX2NsZWFyX2JpdHMocGxsLT5tYXAsIHBsbC0+cmVn ICsgWlgyOV9QTExfUkVHMl9PRkZTRVQsCisJCQkJIFpYMjlfUExMX1BPU1RESVZfT1VUX0RJU0FC TEUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgengyOV9wbGxfbm9kaXNhYmxl X29wcyA9IHsKKwkuaW5pdAkJPSB6eDI5X3BsbF9ub2Rpc2FibGVfaW5pdCwKKwkuaXNfcHJlcGFy ZWQJPSB6eDI5X3BsbF9pc19wcmVwYXJlZCwKKwkucHJlcGFyZQk9IHp4MjlfcGxsX3ByZXBhcmUs CisJLnVucHJlcGFyZQk9IHp4MjlfcGxsX3VucHJlcGFyZSwKKwkucmVjYWxjX3JhdGUJPSB6eDI5 X3BsbF9yZWNhbGNfcmF0ZSwKKwkuZGV0ZXJtaW5lX3JhdGUgPSB6eDI5X3BsbF9kZXRlcm1pbmVf cmF0ZSwKKwkuZ2V0X3BhcmVudAk9IHp4MjlfcGxsX2dldF9wYXJlbnQsCisJLnNldF9wYXJlbnQJ PSB6eDI5X3BsbF9zZXRfcGFyZW50LAorCS5zZXRfcmF0ZQk9IHp4MjlfcGxsX3NldF9yYXRlLAor fTsKKwogc3RydWN0IGNsa19odyAqenhfY2xrX3JlZ2lzdGVyX3BsbChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCByZWdtYXAgKnJlZ21hcCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgenhfcGxsX2Rl c2MgKmRlc2MsCi0JCQkJICAgc3RydWN0IGNsa19odyAqIGNvbnN0ICpjbG9ja3MpCisJCQkJICAg Y29uc3Qgc3RydWN0IHp4X3BsbF9kZXNjICpkZXNjLCBzdHJ1Y3QgY2xrX2h3ICogY29uc3QgKmNs b2NrcykKIHsKLQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwlzdHJ1Y3QgY2xrX3BhcmVudF9k YXRhIHBhcmVudHNbQ0xLX1pYX01BWF9QQVJFTlRTXTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBp bml0ID0ge307CisJc3RydWN0IHp4MjlfY2xrX3BsbCAqcGxsOworCXVuc2lnbmVkIGludCBpOwor CWludCByZXM7CisKKwlwbGwgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBsbCksIEdGUF9L RVJORUwpOworCWlmICghcGxsKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChk ZXNjLT5mbGFncyAmIENMS19aWF9QTExfUFJFUEFSRV9JU19FTkFCTEUpCisJCWluaXQub3BzID0g Jnp4MjlfcGxsX25vZGlzYWJsZV9vcHM7CisJZWxzZQorCQlpbml0Lm9wcyA9ICZ6eDI5X3BsbF9v cHM7CisKKwlpZiAoV0FSTl9PTihkZXNjLT5udW1fcGFyZW50cyA+IEFSUkFZX1NJWkUocGFyZW50 cykpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXNj LT5udW1fcGFyZW50czsgKytpKQorCQlwYXJlbnRzW2ldID0genhfZ2V0X3BhcmVudCgmZGVzYy0+ cGFyZW50c1tpXSwgY2xvY2tzKTsKKworCWluaXQubmFtZSA9IGRlc2MtPm5hbWU7CisJaW5pdC5w YXJlbnRfZGF0YSA9IHBhcmVudHM7CisJaW5pdC5udW1fcGFyZW50cyA9IGRlc2MtPm51bV9wYXJl bnRzOworCisJLyoKKwkgKiBEaXNhbGxvdyBsaXZlIHJlcGFyZW50LCBidXQgYWxsb3cgcmF0ZSBj aGFuZ2VzLiBQTExzIGNhbiBoYW5kbGUgZ3JhZHVhbCBjaGFuZ2VzIGZpbmUsIGJ1dAorCSAqIGxh cmdlIG9uZXMgY2F1c2UgYSB0ZW1wb3JhcnkgaW5jb3JyZWN0IG91dHB1dCwgd2hpY2ggY2FuIGJy ZWFrIGRvd25zdHJlYW0gZGV2aWNlcy4KKwkgKiBTZWUgengyOV9wbGxfc2V0X3JhdGUgZm9yIGNv bnNpZGVyYXRpb25zIG9uIHRoYXQuCisJICovCisJaW5pdC5mbGFncyA9IENMS19TRVRfUEFSRU5U X0dBVEU7CisJcGxsLT5ody5pbml0ID0gJmluaXQ7CisJcGxsLT5kZXYgPSBkZXY7CisJcGxsLT5t YXAgPSByZWdtYXA7CisJcGxsLT5yZWcgPSBkZXNjLT5yZWc7CisKKwlyZXMgPSBkZXZtX2Nsa19o d19yZWdpc3RlcihkZXYsICZwbGwtPmh3KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gRVJSX1BUUihy ZXMpOworCisJLyoKKwkgKiBTZXQgdGhlIFBMTCByYXRlIG9ubHkgaWYgdGhlIGJvb3Rsb2FkZXIg bGVmdCBpdCBkaXNhYmxlZC4gS2VlcCB0aGUgYm9vdGxvYWRlciBzZXR1cAorCSAqIG90aGVyd2lz ZS4KKwkgKi8KKwlyZXMgPSByZWdtYXBfdGVzdF9iaXRzKHBsbC0+bWFwLCBwbGwtPnJlZywgWlgy OV9QTExfRElTQUJMRSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiBFUlJfUFRSKHJlcyk7CisK KwlpZiAocmVzID4gMCAmJiBkZXNjLT5yYXRlKSB7CisJCWRldl9kYmcocGxsLT5kZXYsICIlczog c2V0dGluZyB0byAlbHUgSHpcbiIsIGRlc2MtPm5hbWUsIGRlc2MtPnJhdGUpOworCQlyZXMgPSBj bGtfc2V0X3JhdGUocGxsLT5ody5jbGssIGRlc2MtPnJhdGUpOworCQlpZiAocmVzKQorCQkJcmV0 dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJlcywgIiVzOiBmYWlsZWQgdG8gc2V0IHJh dGVcbiIsCisJCQkJCQkgICAgIGRlc2MtPm5hbWUpKTsKKwl9CisKKwlyZXR1cm4gJnBsbC0+aHc7 CiB9CgotLSAKMi41NS4wCgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtcGh5Cg==