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 CA58FC77B7C for ; Tue, 25 Apr 2023 10:26:16 +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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tqyXu1PMRN1STFY0RaS6Pl0qfItFqmDQ+jvGGSoswZ8=; b=PLO9HqLt3Kq90D BVnXeKtoNTCRvqPxmg0n4OUNsskmqS1g9z1nUrueMY6OaqT9/zFiKolqjzxeAR6R+jUbd6tpJxmIY x/hLKkbbWbmaHb0mq/YAvxVTsTK4SFqYiN6zd5ibgx/7LM5RE3Z9JGhBI53B8q58AihhEVSo2KeeM fSZyPsi2kW3RX7QOw1md0sfz3l8SbCHZTH55eqRmiRMKCgyVZxHcc+W7yP0S9zxhv/ktV/AzShHJ/ QoDuZszsDUt1hX94fp4drBSR22YnJmUPjoxGO5eTIztU+Xo/vzb+Hh2JMI1QpMta8UW1UdFE6HhxG OeK5EJtEbIQR76NgAvWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1prFrJ-000kJK-2U; Tue, 25 Apr 2023 10:25:17 +0000 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1prFr2-000k0G-0J for linux-arm-kernel@lists.infradead.org; Tue, 25 Apr 2023 10:25:03 +0000 Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-63d4595d60fso34427551b3a.0 for ; Tue, 25 Apr 2023 03:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682418299; x=1685010299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LCyxItp3ACUv9/z7+KRSyCtuHljrLC91jkFY1KnWnF0=; b=ki7owMIbVJSoQ09C3QneLVCPC4lAnHRqRLG6B+mxR5gBjuSrpkmLW5JISytBBIn2nY s44zV05F3ntd4usb4SBwlOEvb71EeT8iKmR6qs3nATK4VdCFZeOaPTZ/2ONCG6biqjku IUb6+nTucaVCvuGflyaisHZAy1N9Xo4+ccw69Q94y31Q2oy+3ujaqO+Phb0sKRG2b1Gz uJmUd+au4FlFpoIGShcoHqquqB8UbuYwLeRnVJ40bxc9fgG4c8bd3ZnlaBhFVb1HOh2i 3JpBx47oQlOaLKBkd2GCrWQln/1i+8mJlTai+sJJ7M7WLeMb86orFYFo3eJCfyhDY8gU UenA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682418299; x=1685010299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LCyxItp3ACUv9/z7+KRSyCtuHljrLC91jkFY1KnWnF0=; b=Quqez26so47PeaP91++TbNtIi4O0BG/ICVXg2HFkwuvBZw+LqzjVTSU5Wsxokla6TA h7Ai+dGoPNQryoqVcXwG19lG6W8QD07jfvLhj5qZxkl4jkK4hJmPJBuAr7jVFKWKEZ6e iLHrDHBclT3+GYXDZdOvehs9aL4TMYcJmNrjcGMtTqQq3YonhWjL/jcdFJGmju+KXf8C d9rLJk+2OUjqxb2bJ1zoNg4xzGRLpskLWD7fyrGI8rfA1JuNZ4VyUjU3EVWzEqWJXicP cAGpvfMwNVIA7jBV2RFwuYNdH8hqn4geAV2ftGrGANhyKIlUViNtex3VYaYUos4MVZIw 8qJg== X-Gm-Message-State: AAQBX9cvdXxTLcnCfvM3ODqPN8hH7o/eBwxQOGD9+KWRL8/7b99A+wta x6CqQFG1NNwFUa71Z6GV1vw= X-Google-Smtp-Source: AKy350bhNnpf6G2c0CrpdDyWEDSYtoRdToz5ng/G6eDb2Ogp4ukdPpEJI/VXjyeMU8OCs7CDMmy52w== X-Received: by 2002:a17:902:dad0:b0:1a3:dcc1:307d with SMTP id q16-20020a170902dad000b001a3dcc1307dmr22655647plx.23.1682418299398; Tue, 25 Apr 2023 03:24:59 -0700 (PDT) Received: from a28aa0606c51.. (60-250-192-107.hinet-ip.hinet.net. [60.250.192.107]) by smtp.gmail.com with ESMTPSA id 30-20020a63125e000000b0051b70c8d446sm7644715pgs.73.2023.04.25.03.24.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Apr 2023 03:24:59 -0700 (PDT) From: Jacky Huang To: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, lee@kernel.org, mturquette@baylibre.com, sboyd@kernel.org, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, jirislaby@kernel.org, tmaimon77@gmail.com, catalin.marinas@arm.com, will@kernel.org Cc: devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-serial@vger.kernel.org, arnd@arndb.de, schung@nuvoton.com, mjchen@nuvoton.com, Jacky Huang Subject: [PATCH v8 10/11] tty: serial: Add Nuvoton ma35d1 serial driver support Date: Tue, 25 Apr 2023 10:24:17 +0000 Message-Id: <20230425102418.185783-11-ychuang570808@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230425102418.185783-1-ychuang570808@gmail.com> References: <20230425102418.185783-1-ychuang570808@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230425_032500_152246_0045B8FC X-CRM114-Status: GOOD ( 24.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogSmFja3kgSHVhbmcgPHljaHVhbmczQG51dm90b24uY29tPgoKVGhpcyBhZGRzIFVBUlQg YW5kIGNvbnNvbGUgZHJpdmVyIGZvciBOdXZvdG9uIG1hMzVkMSBTb2MuCkl0IHN1cHBvcnRzIGZ1 bGwtZHVwbGV4IGNvbW11bmljYXRpb24sIEZJRk8gY29udHJvbCwgYW5kCmhhcmR3YXJlIGZsb3cg Y29udHJvbC4KClNpZ25lZC1vZmYtYnk6IEphY2t5IEh1YW5nIDx5Y2h1YW5nM0BudXZvdG9uLmNv bT4KLS0tCiBkcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyAgICAgICAgIHwgIDE4ICsKIGRyaXZl cnMvdHR5L3NlcmlhbC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogZHJpdmVycy90dHkvc2VyaWFs L21hMzVkMV9zZXJpYWwuYyB8IDc4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBm aWxlcyBjaGFuZ2VkLCA4MDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdHR5L3NlcmlhbC9tYTM1ZDFfc2VyaWFsLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9z ZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IDAwNzI4OTJj YTdmYy4uZGFhNGFlNmJjMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZp ZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpAQCAtMTU2Miw2ICsxNTYyLDI0IEBA IGNvbmZpZyBTRVJJQUxfU1VOUExVU19DT05TT0xFCiAJICB5b3UgY2FuIGFsdGVyIHRoYXQgdXNp bmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzCiAJICAiY29uc29sZT10dHlT VVB4Ii4KIAorY29uZmlnIFNFUklBTF9OVVZPVE9OX01BMzVEMQorCXRyaXN0YXRlICJOdXZvdG9u IE1BMzVEMSBmYW1pbHkgVUFSVCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9OVVZPVE9OIHx8 IENPTVBJTEVfVEVTVAorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWhlbHAKKwkgIFRoaXMgZHJpdmVy IHN1cHBvcnRzIE51dm90b24gTUEzNUQxIGZhbWlseSBVQVJUIHBvcnRzLiBJZiB5b3Ugd291bGQK KwkgIGxpa2UgdG8gdXNlIHRoZW0sIHlvdSBtdXN0IGFuc3dlciBZIG9yIE0gdG8gdGhpcyBvcHRp b24uIE5vdGUgdGhhdAorCSAgZm9yIHVzZSBhcyBjb25zb2xlLCBpdCBtdXN0IGJlIGluY2x1ZGVk IGluIGtlcm5lbCBhbmQgbm90IGFzIGEKKwkgIG1vZHVsZQorCitjb25maWcgU0VSSUFMX05VVk9U T05fTUEzNUQxX0NPTlNPTEUKKwlib29sICJDb25zb2xlIG9uIGEgTnV2b3RuIE1BMzVEMSBmYW1p bHkgVUFSVCBwb3J0IgorCWRlcGVuZHMgb24gU0VSSUFMX05VVk9UT05fTUEzNUQxPXkKKwlzZWxl Y3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbnMgaWYg eW91J2QgbGlrZSB0byB1c2UgdGhlIFVBUlQgcG9ydDAgb2YgdGhlCisJICBOdXZvdG9uIE1BMzVE MSBmYW1pbHkgYXMgYSBjb25zb2xlLgorCiBlbmRtZW51CiAKIGNvbmZpZyBTRVJJQUxfTUNUUkxf R1BJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy90 dHkvc2VyaWFsL01ha2VmaWxlCmluZGV4IGNkOWFmZDllMzAxOC4uMGU4MjM4NTFjNDJjIDEwMDY0 NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy90dHkvc2Vy aWFsL01ha2VmaWxlCkBAIC05MywzICs5Myw0IEBAIG9iai0kKENPTkZJR19TRVJJQUxfTUNUUkxf R1BJTykJKz0gc2VyaWFsX21jdHJsX2dwaW8ubwogCiBvYmotJChDT05GSUdfU0VSSUFMX0tHREJf Tk1JKSArPSBrZ2RiX25taS5vCiBvYmotJChDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRSkgKz0g a2dkYm9jLm8KK29iai0kKENPTkZJR19TRVJJQUxfTlVWT1RPTl9NQTM1RDEpICs9IG1hMzVkMV9z ZXJpYWwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21hMzVkMV9zZXJpYWwuYyBi L2RyaXZlcnMvdHR5L3NlcmlhbC9tYTM1ZDFfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi40MTdjZDkzYWE5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL3R0eS9zZXJpYWwvbWEzNWQxX3NlcmlhbC5jCkBAIC0wLDAgKzEsNzgxIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgTUEzNUQxIHNlcmlhbCBkcml2 ZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjMgTnV2b3RvbiBUZWNobm9sb2d5IENvcnAuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKworI2Rl ZmluZSBVQVJUX05SCQkJMTcKKworI2RlZmluZSBVQVJUX1JFR19SQlIJCTB4MDAKKyNkZWZpbmUg VUFSVF9SRUdfVEhSCQkweDAwCisjZGVmaW5lIFVBUlRfUkVHX0lFUgkJMHgwNAorI2RlZmluZSBV QVJUX1JFR19GQ1IJCTB4MDgKKyNkZWZpbmUgVUFSVF9SRUdfTENSCQkweDBDCisjZGVmaW5lIFVB UlRfUkVHX01DUgkJMHgxMAorI2RlZmluZSBVQVJUX1JFR19NU1IJCTB4MTQKKyNkZWZpbmUgVUFS VF9SRUdfRlNSCQkweDE4CisjZGVmaW5lIFVBUlRfUkVHX0lTUgkJMHgxQworI2RlZmluZSBVQVJU X1JFR19UT1IJCTB4MjAKKyNkZWZpbmUgVUFSVF9SRUdfQkFVRAkJMHgyNAorI2RlZmluZSBVQVJU X1JFR19BTFRDVEwJCTB4MkMKKyNkZWZpbmUgVUFSVF9GVU5fU0VMCQkweDMwCisjZGVmaW5lIFVB UlRfUkVHX1dLQ1RMCQkweDQwCisjZGVmaW5lIFVBUlRfUkVHX1dLU1RTCQkweDQ0CisKKy8qIFVB UlRfUkVHX0lFUiAtIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUVSX1JE QV9JRU4JCUJJVCgwKSAgLyogUkJSIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVm aW5lIElFUl9USFJFX0lFTgkJQklUKDEpICAvKiBUSFIgRW1wdHkgSW50ZXJydXB0IEVuYWJsZSAq LworI2RlZmluZSBJRVJfUkxTX0lFTgkJQklUKDIpICAvKiBSWCBMaW5lIFN0YXR1cyBJbnRlcnJ1 cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9SVE9fSUVOCQlCSVQoNCkgIC8qIFJYIFRpbWUtb3V0 IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX0JVRkVSUl9JRU4JCUJJVCg1KSAgLyog QnVmZmVyIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1RJTUVfT1VUX0VO CQlCSVQoMTEpIC8qIFJYIEJ1ZmZlciBUaW1lLW91dCBDb3VudGVyIEVuYWJsZSAqLworI2RlZmlu ZSBJRVJfQVVUT19SVFMJCUJJVCgxMikgLyogblJUUyBBdXRvLWZsb3cgQ29udHJvbCBFbmFibGUg Ki8KKyNkZWZpbmUgSUVSX0FVVE9fQ1RTCQlCSVQoMTMpIC8qIG5DVFMgQXV0by1mbG93IENvbnRy b2wgRW5hYmxlICovCisKKy8qIFVBUlRfUkVHX0ZDUiAtIEZJRk8gQ29udHJvbCBSZWdpc3RlciAq LworI2RlZmluZSBGQ1JfUkZSCQkJQklUKDEpICAvKiBSWCBGaWVsZCBTb2Z0d2FyZSBSZXNldCAq LworI2RlZmluZSBGQ1JfVEZSCQkJQklUKDIpICAvKiBUWCBGaWVsZCBTb2Z0d2FyZSBSZXNldCAq LworI2RlZmluZSBGQ1JfUkZJVExfTUFTSwkJR0VOTUFTSyg3LCA0KSAvKiBSWCBGSUZPIEludGVy cnVwdCBUcmlnZ2VyIExldmVsICovCisjZGVmaW5lIEZDUl9SRklUTF8xQllURQkJRklFTERfUFJF UChGQ1JfUkZJVExfTUFTSywgMCkKKyNkZWZpbmUgRkNSX1JGSVRMXzRCWVRFUwlGSUVMRF9QUkVQ KEZDUl9SRklUTF9NQVNLLCAxKQorI2RlZmluZSBGQ1JfUkZJVExfOEJZVEVTCUZJRUxEX1BSRVAo RkNSX1JGSVRMX01BU0ssIDIpCisjZGVmaW5lIEZDUl9SRklUTF8xNEJZVEVTCUZJRUxEX1BSRVAo RkNSX1JGSVRMX01BU0ssIDMpCisjZGVmaW5lIEZDUl9SRklUTF8zMEJZVEVTCUZJRUxEX1BSRVAo RkNSX1JGSVRMX01BU0ssIDQpCisjZGVmaW5lIEZDUl9SVFNUUkdMVl9NQVNLCUdFTk1BU0soMTks IDE2KSAvKiBuUlRTIFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUgRkNSX1JUU1RSR0xWXzFCWVRF CUZJRUxEX1BSRVAoRkNSX1JUU1RSR0xWX01BU0ssIDApCisjZGVmaW5lIEZDUl9SVFNUUkdMVl80 QllURVMJRklFTERfUFJFUChGQ1JfUlRTVFJHTFZfTUFTSywgMSkKKyNkZWZpbmUgRkNSX1JUU1RS R0xWXzhCWVRFUwlGSUVMRF9QUkVQKEZDUl9SVFNUUkdMVl9NQVNLLCAyKQorI2RlZmluZSBGQ1Jf UlRTVFJHTFZfMTRCWVRFUwlGSUVMRF9QUkVQKEZDUl9SVFNUUkdMVl9NQVNLLCAzKQorI2RlZmlu ZSBGQ1JfUlRTVFJHTFZMXzMwQllURVMJRklFTERfUFJFUChGQ1JfUlRTVFJHTFZfTUFTSywgNCkK KworLyogVUFSVF9SRUdfTENSIC0gTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCUxD Ul9OU0IJCQlCSVQoMikgLyogTnVtYmVyIG9mIOKAnFNUT1AgQml04oCdICovCisjZGVmaW5lIExD Ul9QQkUJCQlCSVQoMykgLyogUGFyaXR5IEJpdCBFbmFibGUgKi8KKyNkZWZpbmUgTENSX0VQRQkJ CUJJVCg0KSAvKiBFdmVuIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgTENSX1NQRQkJCUJJVCg1 KSAvKiBTdGljayBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIExDUl9CUkVBSwkJQklUKDYpIC8q IEJyZWFrIENvbnRyb2wgKi8KKyNkZWZpbmUgTENSX1dMU19NQVNLCQlHRU5NQVNLKDEsIDApIC8q IFdvcmQgTGVuZ3RoIFNlbGVjdGlvbiAqLworI2RlZmluZSBMQ1JfV0xTXzVCSVRTCQlGSUVMRF9Q UkVQKExDUl9XTFNfTUFTSywgMCkKKyNkZWZpbmUgTENSX1dMU182QklUUwkJRklFTERfUFJFUChM Q1JfV0xTX01BU0ssIDEpCisjZGVmaW5lIExDUl9XTFNfN0JJVFMJCUZJRUxEX1BSRVAoTENSX1dM U19NQVNLLCAyKQorI2RlZmluZSBMQ1JfV0xTXzhCSVRTCQlGSUVMRF9QUkVQKExDUl9XTFNfTUFT SywgMykKKworLyogVUFSVF9SRUdfTUNSIC0gTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2Rl ZmluZSBNQ1JfUlRTX0NUUkwJCUJJVCgxKSAgLyogblJUUyBTaWduYWwgQ29udHJvbCAqLworI2Rl ZmluZSBNQ1JfUlRTQUNUTFYJCUJJVCg5KSAgLyogblJUUyBQaW4gQWN0aXZlIExldmVsICovCisj ZGVmaW5lIE1DUl9SVFNTVFMJCUJJVCgxMykgLyogblJUUyBQaW4gU3RhdHVzIChSZWFkIE9ubHkp ICovCisKKy8qIFVBUlRfUkVHX01TUiAtIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmlu ZSBNU1JfQ1RTREVURgkJQklUKDApICAvKiBEZXRlY3QgbkNUUyBTdGF0ZSBDaGFuZ2UgRmxhZyAq LworI2RlZmluZSBNU1JfQ1RTU1RTCQlCSVQoNCkgIC8qIG5DVFMgUGluIFN0YXR1cyAoUmVhZCBP bmx5KSAqLworI2RlZmluZSBNU1JfQ1RTQUNUTFYJCUJJVCg4KSAgLyogbkNUUyBQaW4gQWN0aXZl IExldmVsICovCisKKy8qIFVBUlRfUkVHX0ZTUiAtIEZJRk8gU3RhdHVzIFJlZ2lzdGVyICovCisj ZGVmaW5lIEZTUl9SWF9PVkVSX0lGCQlCSVQoMCkgIC8qIFJYIE92ZXJmbG93IEVycm9yIEludGVy cnVwdCBGbGFnICovCisjZGVmaW5lIEZTUl9QRUYJCQlCSVQoNCkgIC8qIFBhcml0eSBFcnJvciBG bGFnKi8KKyNkZWZpbmUgRlNSX0ZFRgkJCUJJVCg1KSAgLyogRnJhbWluZyBFcnJvciBGbGFnICov CisjZGVmaW5lIEZTUl9CSUYJCQlCSVQoNikgIC8qIEJyZWFrIEludGVycnVwdCBGbGFnICovCisj ZGVmaW5lIEZTUl9SWF9FTVBUWQkJQklUKDE0KSAvKiBSZWNlaXZlciBGSUZPIEVtcHR5IChSZWFk IE9ubHkpICovCisjZGVmaW5lIEZTUl9SWF9GVUxMCQlCSVQoMTUpIC8qIFJlY2VpdmVyIEZJRk8g RnVsbCAoUmVhZCBPbmx5KSAqLworI2RlZmluZSBGU1JfVFhfRU1QVFkJCUJJVCgyMikgLyogVHJh bnNtaXR0ZXIgRklGTyBFbXB0eSAoUmVhZCBPbmx5KSAqLworI2RlZmluZSBGU1JfVFhfRlVMTAkJ QklUKDIzKSAvKiBUcmFuc21pdHRlciBGSUZPIEZ1bGwgKFJlYWQgT25seSkgKi8KKyNkZWZpbmUg RlNSX1RYX09WRVJfSUYJCUJJVCgyNCkgLyogVFggT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IEZs YWcgKi8KKyNkZWZpbmUgRlNSX1RFX0ZMQUcJCUJJVCgyOCkgLyogVHJhbnNtaXR0ZXIgRW1wdHkg RmxhZyAoUmVhZCBPbmx5KSAqLworI2RlZmluZSBGU1JfUlhQVFJfTVNLCQlHRU5NQVNLKDEzLCA4 KSAvKiBUWCBGSUZPIFBvaW50ZXIgbWFzayAqLworI2RlZmluZSBGU1JfVFhQVFJfTVNLCQlHRU5N QVNLKDIxLCAxNikgLyogUlggRklGTyBQb2ludGVyIG1hc2sgKi8KKworLyogVUFSVF9SRUdfSVNS IC0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJU1JfUkRBX0lGCQlCSVQo MCkgLyogUkJSIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBJU1JfVEhSRV9J RgkJQklUKDEpIC8qIFRIUiBFbXB0eSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBJU1JfUkxT SUYJCUJJVCgyKSAvKiBSZWNlaXZlIExpbmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgSVNS X01PREVNSUYJCUJJVCgzKSAvKiBNT0RFTSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBJU1Jf UlhUT19JRgkJQklUKDQpIC8qIFJYIFRpbWUtb3V0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5l IElTUl9CVUZFSUYJCUJJVCg1KSAvKiBCdWZmZXIgRXJyb3IgSW50ZXJydXB0IEZsYWcgKi8KKyNk ZWZpbmUgVUFSVF9JU1JfV0tfSUYJCUJJVCg2KSAvKiBVQVJUIFdha2UtdXAgSW50ZXJydXB0IEZs YWcgKi8KKyNkZWZpbmUgVUFSVF9JU1JfUkRBSU5UCQlCSVQoOCkgLyogUkJSIEF2YWlsYWJsZSBJ bnRlcnJ1cHQgSW5kaWNhdG9yICovCisjZGVmaW5lIElTUl9USFJFX0lOVAkJQklUKDkpIC8qIFRI UiBFbXB0eSBJbnRlcnJ1cHQgSW5kaWNhdG9yICovCisjZGVmaW5lIElTUl9BTEwJCQkweEZGRkZG RkZGCisKKy8qIFVBUlRfUkVHX0JBVUQgLSBCYXVkIFJhdGUgRGl2aWRlciBSZWdpc3RlciAqLwor I2RlZmluZQlCQVVEX01PREVfTUFTSwkJR0VOTUFTSygyOSwgMjgpCisjZGVmaW5lIEJBVURfTU9E RTAJCUZJRUxEX1BSRVAoQkFVRF9NT0RFX01BU0ssIDApCisjZGVmaW5lIEJBVURfTU9ERTEJCUZJ RUxEX1BSRVAoQkFVRF9NT0RFX01BU0ssIDIpCisjZGVmaW5lIEJBVURfTU9ERTIJCUZJRUxEX1BS RVAoQkFVRF9NT0RFX01BU0ssIDMpCisKKy8qIFVBUlRfUkVHX0FMVENUTCAtIEFsdGVybmF0ZSBD b250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBTFRDVExfUlM0ODVBVUQJCUJJVCgx MCkgLyogUlMtNDg1IEF1dG8gRGlyZWN0aW9uIEZ1bmN0aW9uICovCisKKy8qIFVBUlRfRlVOX1NF TCAtIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBGVU5fU0VMX01BU0sJCUdF Tk1BU0soMiwgMCkKKyNkZWZpbmUgRlVOX1NFTF9VQVJUCQlGSUVMRF9QUkVQKEZVTl9TRUxfTUFT SywgMCkKKyNkZWZpbmUgRlVOX1NFTF9SUzQ4NQkJRklFTERfUFJFUChGVU5fU0VMX01BU0ssIDMp CisKKy8qIFVBUlQgRklGTyBkZXB0aCAqLworI2RlZmluZSBVQVJUX0ZJRk9fREVQVEgJCTMyCisv KiBVQVJUIGNvbnNvbGUgY2xvY2sgKi8KKyNkZWZpbmUgVUFSVF9DT05TT0xFX0NMSwkyNDAwMDAw MAorLyogVUFSVCByZWdpc3RlciBpb3JlbWFwIHNpemUgKi8KKyNkZWZpbmUgVUFSVF9SRUdfU0la RQkJMHgxMDAKKy8qIFJ4IFRpbWVvdXQgKi8KKyNkZWZpbmUgVUFSVF9SWF9UT1VUCQkweDQwCisK KyNkZWZpbmUgVUFSVF9JU1JfSUZfQ0hFQ0sgKElTUl9SREFfSUYgfCBJU1JfUlhUT19JRiB8IElT Ul9USFJFX0lOVCB8IElTUl9CVUZFSUYpCisKKyNkZWZpbmUgTE9PUF9USU1FT1VUCQkxMDAwCisK K3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbWEzNWQxc2VyaWFsX3JlZzsKK3N0cnVjdCBjbGsg KmNsazsKKworc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgeworCXN0cnVjdCB1YXJ0X3BvcnQgcG9y dDsKKwl1MTYgY2FwYWJpbGl0aWVzOyAvKiBwb3J0IGNhcGFiaWxpdGllcyAqLworCXU4IGllcjsK Kwl1OCBsY3I7CisJdTggbWNyOworCXUzMiBiYXVkX3JhdGU7CisJdTMyIGNvbnNvbGVfYmF1ZF9y YXRlOworCXUzMiBjb25zb2xlX2xpbmU7CisJdTMyIGNvbnNvbGVfaW50OworfTsKKworc3RhdGlj IHN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0IG1hMzVkMXNlcmlhbF9wb3J0c1tVQVJUX05SXTsKKwor c3RhdGljIHN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp0b19tYTM1ZDFfdWFydF9wb3J0KHN0cnVj dCB1YXJ0X3BvcnQgKnVhcnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih1YXJ0LCBzdHJ1Y3Qg dWFydF9tYTM1ZDFfcG9ydCwgcG9ydCk7Cit9CisKK3N0YXRpYyB1MzIgc2VyaWFsX2luKHN0cnVj dCB1YXJ0X21hMzVkMV9wb3J0ICpwLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFkbF9yZWxh eGVkKHAtPnBvcnQubWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9v dXQoc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnAsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sK Kwl3cml0ZWxfcmVsYXhlZCh2YWx1ZSwgcC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKwor c3RhdGljIHZvaWQgX19zdG9wX3R4KHN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICpwKQoreworCXUz MiBpZXI7CisKKwlpZXIgPSBzZXJpYWxfaW4ocCwgVUFSVF9SRUdfSUVSKTsKKwlpZiAoaWVyICYg SUVSX1RIUkVfSUVOKQorCQlzZXJpYWxfb3V0KHAsIFVBUlRfUkVHX0lFUiwgaWVyICYgfklFUl9U SFJFX0lFTik7Cit9CisKK3N0YXRpYyB2b2lkIG1hMzVkMXNlcmlhbF9zdG9wX3R4KHN0cnVjdCB1 YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnVwID0gdG9fbWEz NWQxX3VhcnRfcG9ydChwb3J0KTsKKworCV9fc3RvcF90eCh1cCk7Cit9CisKK3N0YXRpYyB2b2lk IHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1cCkKK3sKKwl1MzIgY291 bnQ7CisJdTggY2g7CisKKwlpZiAodWFydF90eF9zdG9wcGVkKCZ1cC0+cG9ydCkpIHsKKwkJbWEz NWQxc2VyaWFsX3N0b3BfdHgoJnVwLT5wb3J0KTsKKwkJcmV0dXJuOworCX0KKwljb3VudCA9IFVB UlRfRklGT19ERVBUSCAtIEZJRUxEX0dFVChGU1JfVFhQVFJfTVNLLCBzZXJpYWxfaW4odXAsIFVB UlRfUkVHX0ZTUikpOworCXVhcnRfcG9ydF90eF9saW1pdGVkKCZ1cC0+cG9ydCwgY2gsIGNvdW50 LAorCQkJICAgICAhKHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfRlNSKSAmIEZTUl9UWF9GVUxMKSwK KwkJCSAgICAgc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfVEhSLCBjaCksCisJCQkgICAgICh7fSkp OworfQorCitzdGF0aWMgdm9pZCBtYTM1ZDFzZXJpYWxfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9y dCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9tYTM1ZDFfcG9ydCAqdXAgPSB0b19tYTM1ZDFfdWFy dF9wb3J0KHBvcnQpOworCXUzMiBpZXI7CisKKwlpZXIgPSBzZXJpYWxfaW4odXAsIFVBUlRfUkVH X0lFUik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfSUVSLCBpZXIgJiB+SUVSX1RIUkVfSUVO KTsKKwl0cmFuc21pdF9jaGFycyh1cCk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfSUVSLCBp ZXIgfCBJRVJfVEhSRV9JRU4pOworfQorCitzdGF0aWMgdm9pZCBtYTM1ZDFzZXJpYWxfc3RvcF9y eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1 cCA9IHRvX21hMzVkMV91YXJ0X3BvcnQocG9ydCk7CisKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX1JF R19JRVIsIHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfSUVSKSAmIH5JRVJfUkRBX0lFTik7Cit9CisK K3N0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnVwKQor eworCXU4IGNoLCBmbGFnOworCXUzMiBmc3I7CisJaW50IG1heF9jb3VudCA9IDI1NjsKKworCWZz ciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfRlNSKTsKKwlkbyB7CisJCWZsYWcgPSBUVFlfTk9S TUFMOworCQl1cC0+cG9ydC5pY291bnQucngrKzsKKworCQlpZiAodW5saWtlbHkoZnNyICYgKEZT Ul9CSUYgfCBGU1JfRkVGIHwgRlNSX1BFRiB8IEZTUl9SWF9PVkVSX0lGKSkpIHsKKwkJCWlmIChm c3IgJiBGU1JfQklGKSB7CisJCQkJdXAtPnBvcnQuaWNvdW50LmJyaysrOworCQkJCWlmICh1YXJ0 X2hhbmRsZV9icmVhaygmdXAtPnBvcnQpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChm c3IgJiBGU1JfRkVGKQorCQkJCXVwLT5wb3J0Lmljb3VudC5mcmFtZSsrOworCQkJaWYgKGZzciAm IEZTUl9QRUYpCisJCQkJdXAtPnBvcnQuaWNvdW50LnBhcml0eSsrOworCQkJaWYgKGZzciAmIEZT Ul9SWF9PVkVSX0lGKQorCQkJCXVwLT5wb3J0Lmljb3VudC5vdmVycnVuKys7CisKKwkJCXNlcmlh bF9vdXQodXAsIFVBUlRfUkVHX0ZTUiwgZnNyICYKKwkJCQkgICAoRlNSX0JJRiB8IEZTUl9GRUYg fCBGU1JfUEVGIHwgRlNSX1JYX09WRVJfSUYpKTsKKworCQkJaWYgKGZzciAmIEZTUl9CSUYpCisJ CQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJCWVsc2UgaWYgKGZzciAmIEZTUl9QRUYpCisJCQkJZmxh ZyA9IFRUWV9QQVJJVFk7CisJCQllbHNlIGlmIChmc3IgJiBGU1JfRkVGKQorCQkJCWZsYWcgPSBU VFlfRlJBTUU7CisJCX0KKworCQljaCA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfUkJSKTsKKwkJ aWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVwLT5wb3J0LCBjaCkpCisJCQljb250aW51ZTsK KworCQlzcGluX2xvY2soJnVwLT5wb3J0LmxvY2spOworCQl1YXJ0X2luc2VydF9jaGFyKCZ1cC0+ cG9ydCwgZnNyLCBGU1JfUlhfT1ZFUl9JRiwgY2gsIGZsYWcpOworCQlzcGluX3VubG9jaygmdXAt PnBvcnQubG9jayk7CisKKwkJZnNyID0gc2VyaWFsX2luKHVwLCBVQVJUX1JFR19GU1IpOworCX0g d2hpbGUgKCEoZnNyICYgRlNSX1JYX0VNUFRZKSAmJiAobWF4X2NvdW50LS0gPiAwKSk7CisKKwlz cGluX2xvY2soJnVwLT5wb3J0LmxvY2spOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKCZ1cC0+cG9y dC5zdGF0ZS0+cG9ydCk7CisJc3Bpbl91bmxvY2soJnVwLT5wb3J0LmxvY2spOworfQorCitzdGF0 aWMgaXJxcmV0dXJuX3QgbWEzNWQxc2VyaWFsX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZf aWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKKwlzdHJ1Y3QgdWFydF9t YTM1ZDFfcG9ydCAqdXAgPSB0b19tYTM1ZDFfdWFydF9wb3J0KHBvcnQpOworCXUzMiBpc3IsIGZz cjsKKworCWlzciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfSVNSKTsKKwlmc3IgPSBzZXJpYWxf aW4odXAsIFVBUlRfUkVHX0ZTUik7CisKKwlpZiAoIShpc3IgJiBVQVJUX0lTUl9JRl9DSEVDSykp CisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChpc3IgJiAoSVNSX1JEQV9JRiB8IElTUl9SWFRP X0lGKSkKKwkJcmVjZWl2ZV9jaGFycyh1cCk7CisJaWYgKGlzciAmIElTUl9USFJFX0lOVCkKKwkJ dHJhbnNtaXRfY2hhcnModXApOworCWlmIChmc3IgJiBGU1JfVFhfT1ZFUl9JRikKKwkJc2VyaWFs X291dCh1cCwgVUFSVF9SRUdfRlNSLCBGU1JfVFhfT1ZFUl9JRik7CisKKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cit9CisKK3N0YXRpYyB1MzIgbWEzNWQxc2VyaWFsX3R4X2VtcHR5KHN0cnVjdCB1YXJ0 X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnVwID0gdG9fbWEzNWQx X3VhcnRfcG9ydChwb3J0KTsKKwl1MzIgZnNyOworCisJZnNyID0gc2VyaWFsX2luKHVwLCBVQVJU X1JFR19GU1IpOworCXJldHVybiAoZnNyICYgKEZTUl9URV9GTEFHIHwgRlNSX1RYX0VNUFRZKSkg PT0KKwkJKEZTUl9URV9GTEFHIHwgRlNSX1RYX0VNUFRZKSA/IFRJT0NTRVJfVEVNVCA6IDA7Cit9 CisKK3N0YXRpYyB1MzIgbWEzNWQxc2VyaWFsX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpw b3J0KQoreworCXN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1cCA9IHRvX21hMzVkMV91YXJ0X3Bv cnQocG9ydCk7CisJdTMyIHN0YXR1czsKKwl1MzIgcmV0ID0gMDsKKworCXN0YXR1cyA9IHNlcmlh bF9pbih1cCwgVUFSVF9SRUdfTVNSKTsKKwlpZiAoIShzdGF0dXMgJiBNU1JfQ1RTU1RTKSkKKwkJ cmV0IHw9IFRJT0NNX0NUUzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtYTM1ZDFz ZXJpYWxfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHUzMiBtY3RybCkKK3sKKwlz dHJ1Y3QgdWFydF9tYTM1ZDFfcG9ydCAqdXAgPSB0b19tYTM1ZDFfdWFydF9wb3J0KHBvcnQpOwor CXUzMiBtY3IgPSAwOworCXUzMiBpZXIgPSAwOworCisJaWYgKG1jdHJsICYgVElPQ01fUlRTKSB7 CisJCW1jciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfTUNSKTsKKwkJbWNyIHw9IE1DUl9SVFNB Q1RMVjsKKwkJbWNyICY9IH5NQ1JfUlRTX0NUUkw7CisJfQorCWlmICh1cC0+bWNyICYgVUFSVF9N Q1JfQUZFKSB7CisJCW1jciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfTUNSKTsKKwkJbWNyIHw9 IE1DUl9SVFNBQ1RMVjsKKwkJbWNyICY9IH5NQ1JfUlRTX0NUUkw7CisKKwkJc2VyaWFsX291dCh1 cCwgVUFSVF9SRUdfSUVSLAorCQkJICAgKHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfSUVSKSB8IElF Ul9BVVRPX1JUUyB8IElFUl9BVVRPX0NUUykpOworCisJCXVwLT5wb3J0LmZsYWdzIHw9IFVQRl9I QVJEX0ZMT1c7CisJfSBlbHNlIHsKKwkJaWVyID0gc2VyaWFsX2luKHVwLCBVQVJUX1JFR19JRVIp OworCQlpZXIgJj0gfihJRVJfQVVUT19SVFMgfCBJRVJfQVVUT19DVFMpOworCQlzZXJpYWxfb3V0 KHVwLCBVQVJUX1JFR19JRVIsIGllcik7CisKKwkJdXAtPnBvcnQuZmxhZ3MgJj0gflVQRl9IQVJE X0ZMT1c7CisJfQorCXNlcmlhbF9vdXQodXAsIFVBUlRfUkVHX01TUiwgKHNlcmlhbF9pbih1cCwg VUFSVF9SRUdfTVNSKSB8IE1TUl9DVFNBQ1RMVikpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfUkVH X01DUiwgbWNyKTsKK30KKworc3RhdGljIHZvaWQgbWEzNWQxc2VyaWFsX2JyZWFrX2N0bChzdHJ1 Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVhcnRfbWEz NWQxX3BvcnQgKnVwID0gdG9fbWEzNWQxX3VhcnRfcG9ydChwb3J0KTsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCXUzMiBsY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywg ZmxhZ3MpOworCWxjciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfTENSKTsKKwlpZiAoYnJlYWtf c3RhdGUgIT0gMCkKKwkJbGNyIHw9IExDUl9CUkVBSzsKKwllbHNlCisJCWxjciAmPSB+TENSX0JS RUFLOworCXNlcmlhbF9vdXQodXAsIFVBUlRfUkVHX0xDUiwgbGNyKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWEzNWQx c2VyaWFsX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9t YTM1ZDFfcG9ydCAqdXAgPSB0b19tYTM1ZDFfdWFydF9wb3J0KHBvcnQpOworCWludCByZXR2YWw7 CisKKwkvKiBSZXNldCBGSUZPICovCisJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfRkNSLCBGQ1Jf VEZSIHwgRkNSX1JGUik7CisKKwkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlzZXJp YWxfb3V0KHVwLCBVQVJUX1JFR19JU1IsIElTUl9BTEwpOworCisJcmV0dmFsID0gcmVxdWVzdF9p cnEocG9ydC0+aXJxLCBtYTM1ZDFzZXJpYWxfaW50ZXJydXB0LCAwLAorCQkJICAgICBkZXZfbmFt ZShwb3J0LT5kZXYpLCBwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIodXAtPnBvcnQu ZGV2LCAicmVxdWVzdCBpcnEgZmFpbGVkLlxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJ c2VyaWFsX291dCh1cCwgVUFSVF9SRUdfRkNSLCBzZXJpYWxfaW4odXAsIFVBUlRfUkVHX0ZDUikg fAorCQkgICBGQ1JfUkZJVExfNEJZVEVTIHwgRkNSX1JUU1RSR0xWXzhCWVRFUyk7CisJc2VyaWFs X291dCh1cCwgVUFSVF9SRUdfTENSLCBMQ1JfV0xTXzhCSVRTKTsKKwlzZXJpYWxfb3V0KHVwLCBV QVJUX1JFR19UT1IsIFVBUlRfUlhfVE9VVCk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfSUVS LCBJRVJfUlRPX0lFTiB8IElFUl9SREFfSUVOIHwKKwkJICAgSUVSX1RJTUVfT1VUX0VOIHwgSUVS X0JVRkVSUl9JRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYTM1ZDFzZXJpYWxf c2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9tYTM1ZDFf cG9ydCAqdXAgPSB0b19tYTM1ZDFfdWFydF9wb3J0KHBvcnQpOworCisJc2VyaWFsX291dCh1cCwg VUFSVF9SRUdfSUVSLCAwKTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCitzdGF0 aWMgdTMyIG1hMzVkMXNlcmlhbF9nZXRfZGl2aXNvcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1 MzIgYmF1ZCkKK3sKKwlyZXR1cm4gKHBvcnQtPnVhcnRjbGsgLyBiYXVkKSAtIDI7Cit9CisKK3N0 YXRpYyB2b2lkIG1hMzVkMXNlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0 LAorCQkJCSAgICAgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJCSAgICAgY29uc3Qgc3Ry dWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnVwID0gdG9f bWEzNWQxX3VhcnRfcG9ydChwb3J0KTsKKwl1MzIgbGNyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCXUzMiBiYXVkLCBxdW90OworCisJbGNyID0gVUFSVF9MQ1JfV0xFTih0dHlfZ2V0X2No YXJfc2l6ZSh0ZXJtaW9zLT5jX2NmbGFnKSk7CisKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENT VE9QQikKKwkJbGNyIHw9IExDUl9OU0I7CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIp CisJCWxjciB8PSBMQ1JfUEJFOworCWlmICghKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpKQor CQlsY3IgfD0gTENSX0VQRTsKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENNU1BBUikKKwkJbGNy IHw9IExDUl9TUEU7CisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3Ms IG9sZCwgcG9ydC0+dWFydGNsayAvIDB4ZmZmZiwKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyAxMSk7 CisKKwlxdW90ID0gbWEzNWQxc2VyaWFsX2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOworCisJLyoK KwkgKiBPaywgd2UncmUgbm93IGNoYW5naW5nIHRoZSBwb3J0IHN0YXRlLiAgRG8gaXQgd2l0aAor CSAqIGludGVycnVwdHMgZGlzYWJsZWQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5w b3J0LmxvY2ssIGZsYWdzKTsKKworCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgPSBGU1JfUlhf T1ZFUl9JRjsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElOUENLKQorCQl1cC0+cG9ydC5yZWFk X3N0YXR1c19tYXNrIHw9IEZTUl9GRUYgfCBGU1JfUEVGOworCWlmICh0ZXJtaW9zLT5jX2lmbGFn ICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgfD0gRlNS X0JJRjsKKworCS8qIENoYXJhY3RlcmVzIHRvIGlnbm9yZSAqLworCXVwLT5wb3J0Lmlnbm9yZV9z dGF0dXNfbWFzayA9IDA7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05QQVIpCisJCXVwLT5w b3J0Lmlnbm9yZV9zdGF0dXNfbWFzayB8PSBGU1JfRkVGIHwgRlNSX1BFRjsKKwlpZiAodGVybWlv cy0+Y19pZmxhZyAmIElHTkJSSykgeworCQl1cC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2sgfD0g RlNSX0JJRjsKKwkJLyoKKwkJICogSWYgd2UncmUgaWdub3JpbmcgcGFyaXR5IGFuZCBicmVhayBp bmRpY2F0b3JzLAorCQkgKiBpZ25vcmUgb3ZlcnJ1bnMgdG9vIChmb3IgcmVhbCByYXcgc3VwcG9y dCkuCisJCSAqLworCQlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJCXVwLT5wb3J0 Lmlnbm9yZV9zdGF0dXNfbWFzayB8PSBGU1JfUlhfT1ZFUl9JRjsKKwl9CisJaWYgKHRlcm1pb3Mt PmNfY2ZsYWcgJiBDUlRTQ1RTKQorCQl1cC0+bWNyIHw9IFVBUlRfTUNSX0FGRTsKKwllbHNlCisJ CXVwLT5tY3IgJj0gflVBUlRfTUNSX0FGRTsKKworCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwg dGVybWlvcy0+Y19jZmxhZywgYmF1ZCk7CisJbWEzNWQxc2VyaWFsX3NldF9tY3RybCgmdXAtPnBv cnQsIHVwLT5wb3J0Lm1jdHJsKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX1JFR19CQVVELCBxdW90 IHwgQkFVRF9NT0RFMik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfTENSLCBsY3IpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGlj IGNvbnN0IGNoYXIgKm1hMzVkMXNlcmlhbF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7 CisJcmV0dXJuICJtYTM1ZDEtdWFydCI7Cit9CisKK3N0YXRpYyB2b2lkIG1hMzVkMXNlcmlhbF9j b25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCit7CisJLyoKKwkg KiBEcml2ZXIgY29yZSBmb3Igc2VyaWFsIHBvcnRzIGZvcmNlcyBhIG5vbi16ZXJvIHZhbHVlIGZv ciBwb3J0IHR5cGUuCisJICogV3JpdGUgYW4gYXJiaXRyYXJ5IHZhbHVlIGhlcmUgdG8gYWNjb21t b2RhdGUgdGhlIHNlcmlhbCBjb3JlIGRyaXZlciwKKwkgKiBhcyBJRCBwYXJ0IG9mIFVBUEkgaXMg cmVkdW5kYW50LgorCSAqLworCXBvcnQtPnR5cGUgPSAxOworfQorCitzdGF0aWMgaW50IG1hMzVk MXNlcmlhbF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBz ZXJpYWxfc3RydWN0ICpzZXIpCit7CisJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9VTktOT1dOICYm IHNlci0+dHlwZSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IHVhcnRfb3BzIG1hMzVkMXNlcmlhbF9vcHMgPSB7CisJLnR4X2Vt cHR5ICAgICA9IG1hMzVkMXNlcmlhbF90eF9lbXB0eSwKKwkuc2V0X21jdHJsICAgID0gbWEzNWQx c2VyaWFsX3NldF9tY3RybCwKKwkuZ2V0X21jdHJsICAgID0gbWEzNWQxc2VyaWFsX2dldF9tY3Ry bCwKKwkuc3RvcF90eCAgICAgID0gbWEzNWQxc2VyaWFsX3N0b3BfdHgsCisJLnN0YXJ0X3R4ICAg ICA9IG1hMzVkMXNlcmlhbF9zdGFydF90eCwKKwkuc3RvcF9yeCAgICAgID0gbWEzNWQxc2VyaWFs X3N0b3BfcngsCisJLmJyZWFrX2N0bCAgICA9IG1hMzVkMXNlcmlhbF9icmVha19jdGwsCisJLnN0 YXJ0dXAgICAgICA9IG1hMzVkMXNlcmlhbF9zdGFydHVwLAorCS5zaHV0ZG93biAgICAgPSBtYTM1 ZDFzZXJpYWxfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zICA9IG1hMzVkMXNlcmlhbF9zZXRfdGVy bWlvcywKKwkudHlwZSAgICAgICAgID0gbWEzNWQxc2VyaWFsX3R5cGUsCisJLmNvbmZpZ19wb3J0 ICA9IG1hMzVkMXNlcmlhbF9jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQgID0gbWEzNWQxc2Vy aWFsX3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg bWEzNWQxX3NlcmlhbF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibnV2b3Rvbixt YTM1ZDEtdWFydCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtYTM1ZDFf c2VyaWFsX29mX21hdGNoKTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTlVWT1RPTl9NQTM1RDFf Q09OU09MRQorCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICptYTM1ZDFzZXJpYWxfdWFydF9u b2Rlc1tVQVJUX05SXTsKKworc3RhdGljIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRf bWEzNWQxX3BvcnQgKnVwKQoreworCXVuc2lnbmVkIGludCB0bW91dDsKKworCS8qIFdhaXQgdXAg dG8gMTBtcyBmb3IgdGhlIGNoYXJhY3RlcihzKSB0byBiZSBzZW50LiAqLworCXRtb3V0ID0gMTAw MDA7CisJd2hpbGUgKC0tdG1vdXQpIHsKKwkJaWYgKHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfRlNS KSAmIEZTUl9UWF9FTVBUWSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorfQorCitzdGF0 aWMgdm9pZCBtYTM1ZDFzZXJpYWxfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBv cnQsIHVuc2lnbmVkIGNoYXIgY2gpCit7CisJc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnVwID0g dG9fbWEzNWQxX3VhcnRfcG9ydChwb3J0KTsKKworCXdhaXRfZm9yX3htaXRyKHVwKTsKKwlzZXJp YWxfb3V0KHVwLCBVQVJUX1JFR19USFIsIGNoKTsKK30KKworLyoKKyAqICBQcmludCBhIHN0cmlu ZyB0byB0aGUgc2VyaWFsIHBvcnQgdHJ5aW5nIG5vdCB0byBkaXN0dXJiCisgKiAgYW55IHBvc3Np YmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCisgKgorICogIFRoZSBjb25zb2xlX2xvY2sgbXVz dCBiZSBoZWxkIHdoZW4gd2UgZ2V0IGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIG1hMzVkMXNlcmlh bF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywKKwkJCQkgICAgICAgY29uc3QgY2hh ciAqcywgdTMyIGNvdW50KQoreworCXN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1cCA9ICZtYTM1 ZDFzZXJpYWxfcG9ydHNbY28tPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBp ZXI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCisJLyoK KwkgKiAgRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cworCSAq LworCWllciA9IHNlcmlhbF9pbih1cCwgVUFSVF9SRUdfSUVSKTsKKwlzZXJpYWxfb3V0KHVwLCBV QVJUX1JFR19JRVIsIDApOworCisJdWFydF9jb25zb2xlX3dyaXRlKCZ1cC0+cG9ydCwgcywgY291 bnQsIG1hMzVkMXNlcmlhbF9jb25zb2xlX3B1dGNoYXIpOworCisJd2FpdF9mb3JfeG1pdHIodXAp OworCXNlcmlhbF9vdXQodXAsIFVBUlRfUkVHX0lFUiwgaWVyKTsKKworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2luaXQg bWEzNWQxc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLAorCQkJCQkgICAg IGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG1hMzVkMXNlcmlh bF91YXJ0X25vZGVzW2NvLT5pbmRleF07CisJc3RydWN0IHVhcnRfbWEzNWQxX3BvcnQgKnAgPSAm bWEzNWQxc2VyaWFsX3BvcnRzW2NvLT5pbmRleF07CisJdTMyIHZhbDMyWzRdOworCXN0cnVjdCB1 YXJ0X3BvcnQgKnBvcnQ7CisJaW50IGJhdWQgPSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWlu dCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwkvKgorCSAqIENoZWNrIHdoZXRo ZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZAorCSAqIGlm IHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQor CSAqIGNvbnNvbGUgc3VwcG9ydC4KKwkgKi8KKwlpZiAoKGNvLT5pbmRleCA8IDApIHx8IChjby0+ aW5kZXggPj0gVUFSVF9OUikpIHsKKwkJcHJfZGVidWcoIkNvbnNvbGUgUG9ydCV4IG91dCBvZiBy YW5nZVxuIiwgY28tPmluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG9mX3By b3BlcnR5X3JlYWRfdTMyX2FycmF5KG5wLCAicmVnIiwgdmFsMzIsIDQpICE9IDApCisJCXJldHVy biAtRUlOVkFMOworCXAtPnBvcnQuaW9iYXNlID0gdmFsMzJbMV07CisJcC0+cG9ydC5tZW1iYXNl ID0gaW9yZW1hcChwLT5wb3J0LmlvYmFzZSwgVUFSVF9SRUdfU0laRSk7CisJcC0+cG9ydC5vcHMg PSAmbWEzNWQxc2VyaWFsX29wczsKKwlwLT5wb3J0LmxpbmUgPSAwOworCXAtPnBvcnQudWFydGNs ayA9IFVBUlRfQ09OU09MRV9DTEs7CisKKwlwb3J0ID0gJm1hMzVkMXNlcmlhbF9wb3J0c1tjby0+ aW5kZXhdLnBvcnQ7CisKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlv bnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCisJcmV0dXJuIHVhcnRfc2V0X29w dGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgY29uc29sZSBtYTM1ZDFzZXJpYWxfY29uc29sZSA9IHsKKwkubmFtZSAgICA9ICJ0dHlT IiwKKwkud3JpdGUgICA9IG1hMzVkMXNlcmlhbF9jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UgID0g dWFydF9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAgICA9IG1hMzVkMXNlcmlhbF9jb25zb2xlX3Nl dHVwLAorCS5mbGFncyAgID0gQ09OX1BSSU5UQlVGRkVSIHwgQ09OX0VOQUJMRUQsCisJLmluZGV4 ICAgPSAtMSwKKwkuZGF0YSAgICA9ICZtYTM1ZDFzZXJpYWxfcmVnLAorfTsKKworc3RhdGljIHZv aWQgbWEzNWQxc2VyaWFsX2NvbnNvbGVfaW5pdF9wb3J0KHZvaWQpCit7CisJdTMyIGkgPSAwOwor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5wLCBt YTM1ZDFfc2VyaWFsX29mX21hdGNoKSB7CisJCWlmIChtYTM1ZDFzZXJpYWxfdWFydF9ub2Rlc1tp XSA9PSBOVUxMKSB7CisJCQlvZl9ub2RlX2dldChucCk7CisJCQltYTM1ZDFzZXJpYWxfdWFydF9u b2Rlc1tpXSA9IG5wOworCQkJaSsrOworCQkJaWYgKGkgPT0gVUFSVF9OUikKKwkJCQlicmVhazsK KwkJfQorCX0KK30KKworc3RhdGljIGludCBfX2luaXQgbWEzNWQxc2VyaWFsX2NvbnNvbGVfaW5p dCh2b2lkKQoreworCW1hMzVkMXNlcmlhbF9jb25zb2xlX2luaXRfcG9ydCgpOworCXJlZ2lzdGVy X2NvbnNvbGUoJm1hMzVkMXNlcmlhbF9jb25zb2xlKTsKKwlyZXR1cm4gMDsKK30KK2NvbnNvbGVf aW5pdGNhbGwobWEzNWQxc2VyaWFsX2NvbnNvbGVfaW5pdCk7CisKKyNkZWZpbmUgTUEzNUQxU0VS SUFMX0NPTlNPTEUgICAgKCZtYTM1ZDFzZXJpYWxfY29uc29sZSkKKyNlbHNlCisjZGVmaW5lIE1B MzVEMVNFUklBTF9DT05TT0xFICAgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHVhcnRf ZHJpdmVyIG1hMzVkMXNlcmlhbF9yZWcgPSB7CisJLm93bmVyICAgICAgICA9IFRISVNfTU9EVUxF LAorCS5kcml2ZXJfbmFtZSAgPSAic2VyaWFsIiwKKwkuZGV2X25hbWUgICAgID0gInR0eVMiLAor CS5tYWpvciAgICAgICAgPSBUVFlfTUFKT1IsCisJLm1pbm9yICAgICAgICA9IDY0LAorCS5jb25z ICAgICAgICAgPSBNQTM1RDFTRVJJQUxfQ09OU09MRSwKKwkubnIgICAgICAgICAgID0gVUFSVF9O UiwKK307CisKKy8qCisgKiBSZWdpc3RlciBhIHNldCBvZiBzZXJpYWwgZGV2aWNlcyBhdHRhY2hl ZCB0byBhIHBsYXRmb3JtIGRldmljZS4KKyAqIFRoZSBsaXN0IGlzIHRlcm1pbmF0ZWQgd2l0aCBh IHplcm8gZmxhZ3MgZW50cnksIHdoaWNoIG1lYW5zIHdlIGV4cGVjdAorICogYWxsIGVudHJpZXMg dG8gaGF2ZSBhdCBsZWFzdCBVUEZfQk9PVF9BVVRPQ09ORiBzZXQuCisgKi8KK3N0YXRpYyBpbnQg bWEzNWQxc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IHJlc291cmNlICpyZXNfbWVtOworCXN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1cDsKKwlp bnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGVycjsKKworCWlmIChwZGV2LT5k ZXYub2Zfbm9kZSkgeworCQlyZXQgPSBvZl9hbGlhc19nZXRfaWQocGRldi0+ZGV2Lm9mX25vZGUs ICJzZXJpYWwiKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byBnZXQgYWxpYXMvcGRldiBpZCwgZXJybm8gJWRcbiIsIHJldCk7CisJCQlyZXR1cm4g cmV0OworCQl9CisJfQorCXVwID0gJm1hMzVkMXNlcmlhbF9wb3J0c1tyZXRdOworCXVwLT5wb3J0 LmxpbmUgPSByZXQ7CisJcmVzX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNfbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVw LT5wb3J0LmlvYmFzZSA9IHJlc19tZW0tPnN0YXJ0OworCXVwLT5wb3J0Lm1lbWJhc2UgPSBkZXZt X2lvcmVtYXAoJnBkZXYtPmRldiwgdXAtPnBvcnQuaW9iYXNlLCBVQVJUX1JFR19TSVpFKTsKKwl1 cC0+cG9ydC5vcHMgPSAmbWEzNWQxc2VyaWFsX29wczsKKworCXNwaW5fbG9ja19pbml0KCZ1cC0+ cG9ydC5sb2NrKTsKKworCWNsayA9IG9mX2Nsa19nZXQocGRldi0+ZGV2Lm9mX25vZGUsIDApOwor CWlmIChJU19FUlIoY2xrKSkgeworCQllcnIgPSBQVFJfRVJSKGNsayk7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY29yZSBjbGs6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4g LUVOT0VOVDsKKwl9CisKKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwlpZiAoZXJy KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlmICh1cC0+cG9ydC5saW5lICE9IDApCisJCXVwLT5w b3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKworCXJldCA9IHBsYXRmb3JtX2dldF9p cnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJdXAtPnBvcnQuaXJx ID0gcmV0OworCXVwLT5wb3J0LmRldiA9ICZwZGV2LT5kZXY7CisJdXAtPnBvcnQuZmxhZ3MgPSBV UEZfQk9PVF9BVVRPQ09ORjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVwKTsKKwor CXJldHVybiB1YXJ0X2FkZF9vbmVfcG9ydCgmbWEzNWQxc2VyaWFsX3JlZywgJnVwLT5wb3J0KTsK K30KKworLyoKKyAqIFJlbW92ZSBzZXJpYWwgcG9ydHMgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgcGxh dGZvcm0gZGV2aWNlLgorICovCitzdGF0aWMgaW50IG1hMzVkMXNlcmlhbF9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1hMzVkMXNl cmlhbF9yZWcsIHBvcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hMzVkMXNlcmlh bF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRl KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYp OworCXN0cnVjdCB1YXJ0X21hMzVkMV9wb3J0ICp1cCA9IHRvX21hMzVkMV91YXJ0X3BvcnQocG9y dCk7CisKKwl1YXJ0X3N1c3BlbmRfcG9ydCgmbWEzNWQxc2VyaWFsX3JlZywgJnVwLT5wb3J0KTsK KwlpZiAodXAtPnBvcnQubGluZSA9PSAwKSB7CisJCXVwLT5jb25zb2xlX2JhdWRfcmF0ZSA9IHNl cmlhbF9pbih1cCwgVUFSVF9SRUdfQkFVRCk7CisJCXVwLT5jb25zb2xlX2xpbmUgPSBzZXJpYWxf aW4odXAsIFVBUlRfUkVHX0xDUik7CisJCXVwLT5jb25zb2xlX2ludCA9IHNlcmlhbF9pbih1cCwg VUFSVF9SRUdfSUVSKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWEzNWQxc2Vy aWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVhcnRf cG9ydCAqcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfbWEz NWQxX3BvcnQgKnVwID0gdG9fbWEzNWQxX3VhcnRfcG9ydChwb3J0KTsKKworCWlmICh1cC0+cG9y dC5saW5lID09IDApIHsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfQkFVRCwgdXAtPmNvbnNv bGVfYmF1ZF9yYXRlKTsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfTENSLCB1cC0+Y29uc29s ZV9saW5lKTsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9SRUdfSUVSLCB1cC0+Y29uc29sZV9pbnQp OworCX0KKwl1YXJ0X3Jlc3VtZV9wb3J0KCZtYTM1ZDFzZXJpYWxfcmVnLCAmdXAtPnBvcnQpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYTM1ZDFzZXJp YWxfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gbWEzNWQxc2VyaWFsX3Byb2JlLAorCS5yZW1v dmUgICAgID0gbWEzNWQxc2VyaWFsX3JlbW92ZSwKKwkuc3VzcGVuZCAgICA9IG1hMzVkMXNlcmlh bF9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gbWEzNWQxc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVy ICAgICA9IHsKKwkJLm5hbWUgICA9ICJtYTM1ZDEtdWFydCIsCisJCS5vd25lciAgPSBUSElTX01P RFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG1hMzVkMV9zZXJpYWxfb2Zf bWF0Y2gpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYTM1ZDFzZXJpYWxfaW5pdCh2 b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbWEzNWQx c2VyaWFsX3JlZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBwbGF0Zm9ybV9k cml2ZXJfcmVnaXN0ZXIoJm1hMzVkMXNlcmlhbF9kcml2ZXIpOworCWlmIChyZXQpCisJCXVhcnRf dW5yZWdpc3Rlcl9kcml2ZXIoJm1hMzVkMXNlcmlhbF9yZWcpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIF9fZXhpdCBtYTM1ZDFzZXJpYWxfZXhpdCh2b2lkKQoreworCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZtYTM1ZDFzZXJpYWxfZHJpdmVyKTsKKwl1YXJ0X3VucmVnaXN0 ZXJfZHJpdmVyKCZtYTM1ZDFzZXJpYWxfcmVnKTsKK30KKworbW9kdWxlX2luaXQobWEzNWQxc2Vy aWFsX2luaXQpOworbW9kdWxlX2V4aXQobWEzNWQxc2VyaWFsX2V4aXQpOworCitNT0RVTEVfTElD RU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1BMzVEMSBzZXJpYWwgZHJpdmVyIik7 CisKLS0gCjIuMzQuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK