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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5569C433EF for ; Tue, 22 Feb 2022 15:52:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233770AbiBVPwk (ORCPT ); Tue, 22 Feb 2022 10:52:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233710AbiBVPwM (ORCPT ); Tue, 22 Feb 2022 10:52:12 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 980B226556; Tue, 22 Feb 2022 07:51:45 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 44FEBB81B34; Tue, 22 Feb 2022 15:51:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D692C340EB; Tue, 22 Feb 2022 15:51:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645545103; bh=ibc5rga4Qgkj4YzNPZsYsQvQMb2RWiIyhTS6gczaEvg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q/EXd14UCZu7M1pOcQqTFUWdMU8L2a++W225JKEb8mQQ1vfiasJXmUGYGLF/e9A1N P1cb8aLWwWG55PCY24FMTS6ngbzEFcQ4u+1FZe6t6jWSxLYX2t33ubaQdnlckHHznr 4bMeZxS1moIrbxgzC4p4flWZ403jubNwHdUeo/EbkzGChYi8fntM1TTmCup1oQH8jl p0TQ6B3mxvygQeCnbwu8XOXH0me7DPWziftIz2OfLmevmLglpktKAjx1AwGpT/L6kT GUZnrgGjLoO9k9UM7E9DfFfzWmNwurVTdrRPxEbE0UwZsCJWvqtznCTY8/6VnwcRb9 J5A7kn98v4VRg== Received: by pali.im (Postfix) id 52AAEFDB; Tue, 22 Feb 2022 16:51:42 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Bjorn Helgaas , Rob Herring , Thomas Petazzoni , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Russell King Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 08/12] PCI: mvebu: Use child_ops API Date: Tue, 22 Feb 2022 16:50:26 +0100 Message-Id: <20220222155030.988-9-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220222155030.988-1-pali@kernel.org> References: <20220222155030.988-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Split struct pci_ops between ops and child_ops. Member ops is used for accessing PCIe Root Ports via pci-bridge-emul.c driver and child_ops for accessing real PCIe cards. There is no need to mix these two struct pci_ops into one as PCI core code already provides separate callbacks via bridge->ops and bridge->child_ops. Signed-off-by: Pali Rohár --- drivers/pci/controller/pci-mvebu.c | 77 ++++++++++++++++-------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c index 1cf5c02499cd..1ae7718a2e3e 100644 --- a/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c @@ -294,11 +294,25 @@ static void mvebu_pcie_setup_hw(struct mvebu_pcie_port *port) mvebu_writel(port, mask, PCIE_MASK_OFF); } -static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_port *port, - struct pci_bus *bus, - u32 devfn, int where, int size, u32 *val) +static struct mvebu_pcie_port *mvebu_pcie_find_port(struct mvebu_pcie *pcie, + struct pci_bus *bus, + int devfn); + +static int mvebu_pcie_child_rd_conf(struct pci_bus *bus, u32 devfn, int where, + int size, u32 *val) { - void __iomem *conf_data = port->base + PCIE_CONF_DATA_OFF; + struct mvebu_pcie *pcie = bus->sysdata; + struct mvebu_pcie_port *port; + void __iomem *conf_data; + + port = mvebu_pcie_find_port(pcie, bus, devfn); + if (!port) + return PCIBIOS_DEVICE_NOT_FOUND; + + if (!mvebu_pcie_link_up(port)) + return PCIBIOS_DEVICE_NOT_FOUND; + + conf_data = port->base + PCIE_CONF_DATA_OFF; mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where), PCIE_CONF_ADDR_OFF); @@ -314,18 +328,27 @@ static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_port *port, *val = readl_relaxed(conf_data); break; default: - *val = 0xffffffff; return PCIBIOS_BAD_REGISTER_NUMBER; } return PCIBIOS_SUCCESSFUL; } -static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_port *port, - struct pci_bus *bus, - u32 devfn, int where, int size, u32 val) +static int mvebu_pcie_child_wr_conf(struct pci_bus *bus, u32 devfn, + int where, int size, u32 val) { - void __iomem *conf_data = port->base + PCIE_CONF_DATA_OFF; + struct mvebu_pcie *pcie = bus->sysdata; + struct mvebu_pcie_port *port; + void __iomem *conf_data; + + port = mvebu_pcie_find_port(pcie, bus, devfn); + if (!port) + return PCIBIOS_DEVICE_NOT_FOUND; + + if (!mvebu_pcie_link_up(port)) + return PCIBIOS_DEVICE_NOT_FOUND; + + conf_data = port->base + PCIE_CONF_DATA_OFF; mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where), PCIE_CONF_ADDR_OFF); @@ -347,6 +370,11 @@ static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_port *port, return PCIBIOS_SUCCESSFUL; } +static struct pci_ops mvebu_pcie_child_ops = { + .read = mvebu_pcie_child_rd_conf, + .write = mvebu_pcie_child_wr_conf, +}; + /* * Remove windows, starting from the largest ones to the smallest * ones. @@ -862,25 +890,12 @@ static int mvebu_pcie_wr_conf(struct pci_bus *bus, u32 devfn, { struct mvebu_pcie *pcie = bus->sysdata; struct mvebu_pcie_port *port; - int ret; port = mvebu_pcie_find_port(pcie, bus, devfn); if (!port) return PCIBIOS_DEVICE_NOT_FOUND; - /* Access the emulated PCI-to-PCI bridge */ - if (bus->number == 0) - return pci_bridge_emul_conf_write(&port->bridge, where, - size, val); - - if (!mvebu_pcie_link_up(port)) - return PCIBIOS_DEVICE_NOT_FOUND; - - /* Access the real PCIe interface */ - ret = mvebu_pcie_hw_wr_conf(port, bus, devfn, - where, size, val); - - return ret; + return pci_bridge_emul_conf_write(&port->bridge, where, size, val); } /* PCI configuration space read function */ @@ -889,25 +904,12 @@ static int mvebu_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where, { struct mvebu_pcie *pcie = bus->sysdata; struct mvebu_pcie_port *port; - int ret; port = mvebu_pcie_find_port(pcie, bus, devfn); if (!port) return PCIBIOS_DEVICE_NOT_FOUND; - /* Access the emulated PCI-to-PCI bridge */ - if (bus->number == 0) - return pci_bridge_emul_conf_read(&port->bridge, where, - size, val); - - if (!mvebu_pcie_link_up(port)) - return PCIBIOS_DEVICE_NOT_FOUND; - - /* Access the real PCIe interface */ - ret = mvebu_pcie_hw_rd_conf(port, bus, devfn, - where, size, val); - - return ret; + return pci_bridge_emul_conf_read(&port->bridge, where, size, val); } static struct pci_ops mvebu_pcie_ops = { @@ -1416,6 +1418,7 @@ static int mvebu_pcie_probe(struct platform_device *pdev) bridge->sysdata = pcie; bridge->ops = &mvebu_pcie_ops; + bridge->child_ops = &mvebu_pcie_child_ops; bridge->align_resource = mvebu_pcie_align_resource; bridge->map_irq = mvebu_pcie_map_irq; -- 2.20.1 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 B546FC433EF for ; Tue, 22 Feb 2022 15:57:36 +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=RFz7Lub8IJG9ecnkgaRWaUDfgyQ9j9TwmptUvFNNnlY=; b=AzVOMAXXo/0UnQ 3uAT+Lbm7J/e3l7FNpX9Nn2hBaD3IlZSFpL3rWGAi3MUBcdW6L8tUiOiWdD04nsXto1bDRljBu8vV q3hKvxoFcOgkfCj/TIl+WaX/lJzR45MAsZ5X+eNsv9sHaZfoqXT5hGNT1rZQayr3qGmbeV0SCmasY ZCqYujAtZy4DJI5hTFOf1ryVrle5QezEPGT9bNWIYpGYHOuuk4jLDvbZRE0Eg4Q4TcCGnw8Harx0t KfKSrIcjrQPqGkM/cMJ+UUJDIWNRNiBzZHwaA1kcweRrJIq8Ueb010Grz/gS1JU2BDLWfUQ4gDCRB /FRMpwqK8YRwMwNsNGtA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nMXWL-00ARxX-Hc; Tue, 22 Feb 2022 15:56:10 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nMXS5-00APhd-Td for linux-arm-kernel@lists.infradead.org; Tue, 22 Feb 2022 15:51:49 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 44223B81B24; Tue, 22 Feb 2022 15:51:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D692C340EB; Tue, 22 Feb 2022 15:51:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645545103; bh=ibc5rga4Qgkj4YzNPZsYsQvQMb2RWiIyhTS6gczaEvg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q/EXd14UCZu7M1pOcQqTFUWdMU8L2a++W225JKEb8mQQ1vfiasJXmUGYGLF/e9A1N P1cb8aLWwWG55PCY24FMTS6ngbzEFcQ4u+1FZe6t6jWSxLYX2t33ubaQdnlckHHznr 4bMeZxS1moIrbxgzC4p4flWZ403jubNwHdUeo/EbkzGChYi8fntM1TTmCup1oQH8jl p0TQ6B3mxvygQeCnbwu8XOXH0me7DPWziftIz2OfLmevmLglpktKAjx1AwGpT/L6kT GUZnrgGjLoO9k9UM7E9DfFfzWmNwurVTdrRPxEbE0UwZsCJWvqtznCTY8/6VnwcRb9 J5A7kn98v4VRg== Received: by pali.im (Postfix) id 52AAEFDB; Tue, 22 Feb 2022 16:51:42 +0100 (CET) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Bjorn Helgaas , Rob Herring , Thomas Petazzoni , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Russell King Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 08/12] PCI: mvebu: Use child_ops API Date: Tue, 22 Feb 2022 16:50:26 +0100 Message-Id: <20220222155030.988-9-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220222155030.988-1-pali@kernel.org> References: <20220222155030.988-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220222_075146_416184_449A1D76 X-CRM114-Status: GOOD ( 17.90 ) 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 U3BsaXQgc3RydWN0IHBjaV9vcHMgYmV0d2VlbiBvcHMgYW5kIGNoaWxkX29wcy4gTWVtYmVyIG9w cyBpcyB1c2VkIGZvcgphY2Nlc3NpbmcgUENJZSBSb290IFBvcnRzIHZpYSBwY2ktYnJpZGdlLWVt dWwuYyBkcml2ZXIgYW5kIGNoaWxkX29wcyBmb3IKYWNjZXNzaW5nIHJlYWwgUENJZSBjYXJkcy4K ClRoZXJlIGlzIG5vIG5lZWQgdG8gbWl4IHRoZXNlIHR3byBzdHJ1Y3QgcGNpX29wcyBpbnRvIG9u ZSBhcyBQQ0kgY29yZSBjb2RlCmFscmVhZHkgcHJvdmlkZXMgc2VwYXJhdGUgY2FsbGJhY2tzIHZp YSBicmlkZ2UtPm9wcyBhbmQgYnJpZGdlLT5jaGlsZF9vcHMuCgpTaWduZWQtb2ZmLWJ5OiBQYWxp IFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp LW12ZWJ1LmMgfCA3NyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA0MCBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1tdmVidS5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2ktbXZlYnUuYwppbmRleCAxY2Y1YzAyNDk5Y2QuLjFhZTc3MThhMmUzZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktbXZlYnUuYworKysgYi9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL3BjaS1tdmVidS5jCkBAIC0yOTQsMTEgKzI5NCwyNSBAQCBzdGF0aWMgdm9pZCBtdmVi dV9wY2llX3NldHVwX2h3KHN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnQpCiAJbXZlYnVfd3Jp dGVsKHBvcnQsIG1hc2ssIFBDSUVfTUFTS19PRkYpOwogfQogCi1zdGF0aWMgaW50IG12ZWJ1X3Bj aWVfaHdfcmRfY29uZihzdHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0LAotCQkJCSBzdHJ1Y3Qg cGNpX2J1cyAqYnVzLAotCQkJCSB1MzIgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAq dmFsKQorc3RhdGljIHN0cnVjdCBtdmVidV9wY2llX3BvcnQgKm12ZWJ1X3BjaWVfZmluZF9wb3J0 KHN0cnVjdCBtdmVidV9wY2llICpwY2llLAorCQkJCQkJICAgIHN0cnVjdCBwY2lfYnVzICpidXMs CisJCQkJCQkgICAgaW50IGRldmZuKTsKKworc3RhdGljIGludCBtdmVidV9wY2llX2NoaWxkX3Jk X2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLCBpbnQgd2hlcmUsCisJCQkJICAg IGludCBzaXplLCB1MzIgKnZhbCkKIHsKLQl2b2lkIF9faW9tZW0gKmNvbmZfZGF0YSA9IHBvcnQt PmJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkY7CisJc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBi dXMtPnN5c2RhdGE7CisJc3RydWN0IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydDsKKwl2b2lkIF9faW9t ZW0gKmNvbmZfZGF0YTsKKworCXBvcnQgPSBtdmVidV9wY2llX2ZpbmRfcG9ydChwY2llLCBidXMs IGRldmZuKTsKKwlpZiAoIXBvcnQpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7 CisKKwlpZiAoIW12ZWJ1X3BjaWVfbGlua191cChwb3J0KSkKKwkJcmV0dXJuIFBDSUJJT1NfREVW SUNFX05PVF9GT1VORDsKKworCWNvbmZfZGF0YSA9IHBvcnQtPmJhc2UgKyBQQ0lFX0NPTkZfREFU QV9PRkY7CiAKIAltdmVidV93cml0ZWwocG9ydCwgUENJRV9DT05GX0FERFIoYnVzLT5udW1iZXIs IGRldmZuLCB3aGVyZSksCiAJCSAgICAgUENJRV9DT05GX0FERFJfT0ZGKTsKQEAgLTMxNCwxOCAr MzI4LDI3IEBAIHN0YXRpYyBpbnQgbXZlYnVfcGNpZV9od19yZF9jb25mKHN0cnVjdCBtdmVidV9w Y2llX3BvcnQgKnBvcnQsCiAJCSp2YWwgPSByZWFkbF9yZWxheGVkKGNvbmZfZGF0YSk7CiAJCWJy ZWFrOwogCWRlZmF1bHQ6Ci0JCSp2YWwgPSAweGZmZmZmZmZmOwogCQlyZXR1cm4gUENJQklPU19C QURfUkVHSVNURVJfTlVNQkVSOwogCX0KIAogCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CiB9 CiAKLXN0YXRpYyBpbnQgbXZlYnVfcGNpZV9od193cl9jb25mKHN0cnVjdCBtdmVidV9wY2llX3Bv cnQgKnBvcnQsCi0JCQkJIHN0cnVjdCBwY2lfYnVzICpidXMsCi0JCQkJIHUzMiBkZXZmbiwgaW50 IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3N0YXRpYyBpbnQgbXZlYnVfcGNpZV9jaGlsZF93 cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKKwkJCQkgICAgaW50IHdoZXJl LCBpbnQgc2l6ZSwgdTMyIHZhbCkKIHsKLQl2b2lkIF9faW9tZW0gKmNvbmZfZGF0YSA9IHBvcnQt PmJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkY7CisJc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBi dXMtPnN5c2RhdGE7CisJc3RydWN0IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydDsKKwl2b2lkIF9faW9t ZW0gKmNvbmZfZGF0YTsKKworCXBvcnQgPSBtdmVidV9wY2llX2ZpbmRfcG9ydChwY2llLCBidXMs IGRldmZuKTsKKwlpZiAoIXBvcnQpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7 CisKKwlpZiAoIW12ZWJ1X3BjaWVfbGlua191cChwb3J0KSkKKwkJcmV0dXJuIFBDSUJJT1NfREVW SUNFX05PVF9GT1VORDsKKworCWNvbmZfZGF0YSA9IHBvcnQtPmJhc2UgKyBQQ0lFX0NPTkZfREFU QV9PRkY7CiAKIAltdmVidV93cml0ZWwocG9ydCwgUENJRV9DT05GX0FERFIoYnVzLT5udW1iZXIs IGRldmZuLCB3aGVyZSksCiAJCSAgICAgUENJRV9DT05GX0FERFJfT0ZGKTsKQEAgLTM0Nyw2ICsz NzAsMTEgQEAgc3RhdGljIGludCBtdmVidV9wY2llX2h3X3dyX2NvbmYoc3RydWN0IG12ZWJ1X3Bj aWVfcG9ydCAqcG9ydCwKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwogfQogCitzdGF0aWMg c3RydWN0IHBjaV9vcHMgbXZlYnVfcGNpZV9jaGlsZF9vcHMgPSB7CisJLnJlYWQgPSBtdmVidV9w Y2llX2NoaWxkX3JkX2NvbmYsCisJLndyaXRlID0gbXZlYnVfcGNpZV9jaGlsZF93cl9jb25mLAor fTsKKwogLyoKICAqIFJlbW92ZSB3aW5kb3dzLCBzdGFydGluZyBmcm9tIHRoZSBsYXJnZXN0IG9u ZXMgdG8gdGhlIHNtYWxsZXN0CiAgKiBvbmVzLgpAQCAtODYyLDI1ICs4OTAsMTIgQEAgc3RhdGlj IGludCBtdmVidV9wY2llX3dyX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLAog ewogCXN0cnVjdCBtdmVidV9wY2llICpwY2llID0gYnVzLT5zeXNkYXRhOwogCXN0cnVjdCBtdmVi dV9wY2llX3BvcnQgKnBvcnQ7Ci0JaW50IHJldDsKIAogCXBvcnQgPSBtdmVidV9wY2llX2ZpbmRf cG9ydChwY2llLCBidXMsIGRldmZuKTsKIAlpZiAoIXBvcnQpCiAJCXJldHVybiBQQ0lCSU9TX0RF VklDRV9OT1RfRk9VTkQ7CiAKLQkvKiBBY2Nlc3MgdGhlIGVtdWxhdGVkIFBDSS10by1QQ0kgYnJp ZGdlICovCi0JaWYgKGJ1cy0+bnVtYmVyID09IDApCi0JCXJldHVybiBwY2lfYnJpZGdlX2VtdWxf Y29uZl93cml0ZSgmcG9ydC0+YnJpZGdlLCB3aGVyZSwKLQkJCQkJCSAgc2l6ZSwgdmFsKTsKLQot CWlmICghbXZlYnVfcGNpZV9saW5rX3VwKHBvcnQpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0Vf Tk9UX0ZPVU5EOwotCi0JLyogQWNjZXNzIHRoZSByZWFsIFBDSWUgaW50ZXJmYWNlICovCi0JcmV0 ID0gbXZlYnVfcGNpZV9od193cl9jb25mKHBvcnQsIGJ1cywgZGV2Zm4sCi0JCQkJICAgIHdoZXJl LCBzaXplLCB2YWwpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcGNpX2JyaWRnZV9lbXVsX2Nv bmZfd3JpdGUoJnBvcnQtPmJyaWRnZSwgd2hlcmUsIHNpemUsIHZhbCk7CiB9CiAKIC8qIFBDSSBj b25maWd1cmF0aW9uIHNwYWNlIHJlYWQgZnVuY3Rpb24gKi8KQEAgLTg4OSwyNSArOTA0LDEyIEBA IHN0YXRpYyBpbnQgbXZlYnVfcGNpZV9yZF9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBk ZXZmbiwgaW50IHdoZXJlLAogewogCXN0cnVjdCBtdmVidV9wY2llICpwY2llID0gYnVzLT5zeXNk YXRhOwogCXN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnQ7Ci0JaW50IHJldDsKIAogCXBvcnQg PSBtdmVidV9wY2llX2ZpbmRfcG9ydChwY2llLCBidXMsIGRldmZuKTsKIAlpZiAoIXBvcnQpCiAJ CXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKLQkvKiBBY2Nlc3MgdGhlIGVtdWxh dGVkIFBDSS10by1QQ0kgYnJpZGdlICovCi0JaWYgKGJ1cy0+bnVtYmVyID09IDApCi0JCXJldHVy biBwY2lfYnJpZGdlX2VtdWxfY29uZl9yZWFkKCZwb3J0LT5icmlkZ2UsIHdoZXJlLAotCQkJCQkJ IHNpemUsIHZhbCk7Ci0KLQlpZiAoIW12ZWJ1X3BjaWVfbGlua191cChwb3J0KSkKLQkJcmV0dXJu IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCS8qIEFjY2VzcyB0aGUgcmVhbCBQQ0llIGlu dGVyZmFjZSAqLwotCXJldCA9IG12ZWJ1X3BjaWVfaHdfcmRfY29uZihwb3J0LCBidXMsIGRldmZu LAotCQkJCSAgICB3aGVyZSwgc2l6ZSwgdmFsKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHBj aV9icmlkZ2VfZW11bF9jb25mX3JlYWQoJnBvcnQtPmJyaWRnZSwgd2hlcmUsIHNpemUsIHZhbCk7 CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtdmVidV9wY2llX29wcyA9IHsKQEAgLTE0MTYs NiArMTQxOCw3IEBAIHN0YXRpYyBpbnQgbXZlYnVfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQogCiAJYnJpZGdlLT5zeXNkYXRhID0gcGNpZTsKIAlicmlkZ2UtPm9wcyA9 ICZtdmVidV9wY2llX29wczsKKwlicmlkZ2UtPmNoaWxkX29wcyA9ICZtdmVidV9wY2llX2NoaWxk X29wczsKIAlicmlkZ2UtPmFsaWduX3Jlc291cmNlID0gbXZlYnVfcGNpZV9hbGlnbl9yZXNvdXJj ZTsKIAlicmlkZ2UtPm1hcF9pcnEgPSBtdmVidV9wY2llX21hcF9pcnE7CiAKLS0gCjIuMjAuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK