Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2165658/?format=api
{ "id": 2165658, "url": "http://patchwork.ozlabs.org/api/patches/2165658/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20251117134912.18566-4-larysa.zaremba@intel.com/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20251117134912.18566-4-larysa.zaremba@intel.com>", "list_archive_url": null, "date": "2025-11-17T13:48:43", "name": "[iwl-next,v5,03/15] libie: add PCI device initialization helpers to libie", "commit_ref": null, "pull_url": null, "state": "under-review", "archived": false, "hash": "4affbe685b805b2bd27d898e02d9385e6ddb5531", "submitter": { "id": 84900, "url": "http://patchwork.ozlabs.org/api/people/84900/?format=api", "name": "Larysa Zaremba", "email": "larysa.zaremba@intel.com" }, "delegate": { "id": 109701, "url": "http://patchwork.ozlabs.org/api/users/109701/?format=api", "username": "anguy11", "first_name": "Anthony", "last_name": "Nguyen", "email": "anthony.l.nguyen@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20251117134912.18566-4-larysa.zaremba@intel.com/mbox/", "series": [ { "id": 482391, "url": "http://patchwork.ozlabs.org/api/series/482391/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=482391", "date": "2025-11-17T13:48:40", "name": "Introduce iXD driver", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/482391/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2165658/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2165658/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=osuosl.org header.i=@osuosl.org header.a=rsa-sha256\n header.s=default header.b=ij7pSeM/;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=osuosl.org\n (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org;\n envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4d98Hd5cx3z1yDb\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 18 Nov 2025 00:49:33 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 9A18280AEA;\n\tMon, 17 Nov 2025 13:49:29 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id yFBwPAivmuFG; Mon, 17 Nov 2025 13:49:28 +0000 (UTC)", "from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 934D980893;\n\tMon, 17 Nov 2025 13:49:28 +0000 (UTC)", "from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n by lists1.osuosl.org (Postfix) with ESMTP id 9FF65158\n for <intel-wired-lan@lists.osuosl.org>; Mon, 17 Nov 2025 13:49:27 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id 9DADD807E7\n for <intel-wired-lan@lists.osuosl.org>; Mon, 17 Nov 2025 13:49:27 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id DnOrZ63jz1dF for <intel-wired-lan@lists.osuosl.org>;\n Mon, 17 Nov 2025 13:49:26 +0000 (UTC)", "from mgamail.intel.com (mgamail.intel.com [198.175.65.19])\n by smtp1.osuosl.org (Postfix) with ESMTPS id 9C25980419\n for <intel-wired-lan@lists.osuosl.org>; Mon, 17 Nov 2025 13:49:26 +0000 (UTC)", "from fmviesa008.fm.intel.com ([10.60.135.148])\n by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 17 Nov 2025 05:49:26 -0800", "from irvmail002.ir.intel.com ([10.43.11.120])\n by fmviesa008.fm.intel.com with ESMTP; 17 Nov 2025 05:49:20 -0800", "from mglak.igk.intel.com (mglak.igk.intel.com [10.237.112.146])\n by irvmail002.ir.intel.com (Postfix) with ESMTP id 520AD37E3A;\n Mon, 17 Nov 2025 13:49:18 +0000 (GMT)" ], "X-Virus-Scanned": [ "amavis at osuosl.org", "amavis at osuosl.org" ], "X-Comment": "SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=<UNKNOWN> ", "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 934D980893", "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9C25980419" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=osuosl.org;\n\ts=default; t=1763387368;\n\tbh=Xf/u7Qx3n/BWfrPPiIWzrcE+uqkVVuCx5kDdulOXbN0=;\n\th=From:To:Cc:Date:In-Reply-To:References:Subject:List-Id:\n\t List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:\n\t From;\n\tb=ij7pSeM/2d3GSoWZFMgDLv7n7lgKcwdii8dOoo44AMo8ivsAU1eAfr+ZYiqU9JxKQ\n\t El/qizDk5QqA3P1RNOuYVM+d8nnDl14i249HxCRe+Bj6eqUHEcKtNAhvUjtXapwlzC\n\t VHla4L92NFRzws57P6v7fi0C7oJJ7vcyW+TWQRBYHaj74ysjjTWR6IlvJCjIyRwz/a\n\t LCwYdZ6iH5qOKy47vw7bvvWmAEvu1hns+DaT7cmNE9Zfcl19uq4D/aTyp92CRbNiJh\n\t FOqGpvjbfBg6rlnp8OFhHfxDjQRKVOQX34nj7C/wwhk0+qUsVX4p6zV1lVoP2MrPn4\n\t eYl7h4Tkgk0gQ==", "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=198.175.65.19;\n helo=mgamail.intel.com; envelope-from=larysa.zaremba@intel.com;\n receiver=<UNKNOWN>", "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp1.osuosl.org 9C25980419", "X-CSE-ConnectionGUID": [ "J5vlKxcyQAucyjuCLSTDsQ==", "u2oNzo1hS12ze9JABI5ThA==" ], "X-CSE-MsgGUID": [ "SAi7jH2sQBCzR70nCYtF6w==", "ZDvWQzTIT+i0qFXTPUoCPQ==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6800,10657,11616\"; a=\"65266962\"", "E=Sophos;i=\"6.19,311,1754982000\"; d=\"scan'208\";a=\"65266962\"", "E=Sophos;i=\"6.19,311,1754982000\"; d=\"scan'208\";a=\"190684006\"" ], "X-ExtLoop1": "1", "From": "Larysa Zaremba <larysa.zaremba@intel.com>", "To": "intel-wired-lan@lists.osuosl.org, Tony Nguyen <anthony.l.nguyen@intel.com>", "Cc": "aleksander.lobakin@intel.com, sridhar.samudrala@intel.com,\n \"Singhai, Anjali\" <anjali.singhai@intel.com>,\n Michal Swiatkowski <michal.swiatkowski@linux.intel.com>,\n Larysa Zaremba <larysa.zaremba@intel.com>,\n \"Fijalkowski, Maciej\" <maciej.fijalkowski@intel.com>,\n Emil Tantilov <emil.s.tantilov@intel.com>,\n Madhu Chittim <madhu.chittim@intel.com>, Josh Hay <joshua.a.hay@intel.com>,\n \"Keller, Jacob E\" <jacob.e.keller@intel.com>,\n jayaprakash.shanmugam@intel.com, natalia.wochtman@intel.com,\n Jiri Pirko <jiri@resnulli.us>, \"David S. Miller\" <davem@davemloft.net>,\n Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>,\n Paolo Abeni <pabeni@redhat.com>, Simon Horman <horms@kernel.org>,\n Jonathan Corbet <corbet@lwn.net>,\n Richard Cochran <richardcochran@gmail.com>,\n Przemek Kitszel <przemyslaw.kitszel@intel.com>,\n Andrew Lunn <andrew+netdev@lunn.ch>, netdev@vger.kernel.org,\n linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,\n Phani R Burra <phani.r.burra@intel.com>", "Date": "Mon, 17 Nov 2025 14:48:43 +0100", "Message-ID": "<20251117134912.18566-4-larysa.zaremba@intel.com>", "X-Mailer": "git-send-email 2.47.0", "In-Reply-To": "<20251117134912.18566-1-larysa.zaremba@intel.com>", "References": "<20251117134912.18566-1-larysa.zaremba@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Mailman-Original-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1763387367; x=1794923367;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=b2oHtswzOIbKJMZuKbKUfiuFrIl0WBhel79tguh0j1o=;\n b=Jx25tXO25tWevc67hKGJpPHLSc0DUjf23NDiZWRxPuKX01PYrRcqy+9C\n rzC1M5Wy4wS606eVkMvAjaUn/OpcLfzRz1ThUiSQWZpqLU6Gt8EhIAs6E\n 965w1g22RDPiOv6UwMkLZ+IIYeLcK3aGAr4P1PPt8nsC3HIZhX9VPXOZi\n gA1xpVchaO1DFt8eY7sFb4wJ1uTwoXV76luecuTztqJ2UxlHnYw0FlUh7\n AxxoCKGZj++S8v6IoUvCO3zII6xBZJh9EWSjvWGFtNRv03NnwzpAN+5tP\n ug17emBQtPGEf5Unb0Mnedg2JZsaDOPg8lMtFnI9TP53qTkqmVELAwBkv\n A==;", "X-Mailman-Original-Authentication-Results": [ "smtp1.osuosl.org;\n dmarc=pass (p=none dis=none)\n header.from=intel.com", "smtp1.osuosl.org;\n dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com\n header.a=rsa-sha256 header.s=Intel header.b=Jx25tXO2" ], "Subject": "[Intel-wired-lan] [PATCH iwl-next v5 03/15] libie: add PCI device\n initialization helpers to libie", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n <intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "From: Phani R Burra <phani.r.burra@intel.com>\n\nAdd memory related support functions for drivers to access MMIO space and\nallocate/free dma buffers.\n\nReviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>\nSigned-off-by: Phani R Burra <phani.r.burra@intel.com>\nCo-developed-by: Victor Raj <victor.raj@intel.com>\nSigned-off-by: Victor Raj <victor.raj@intel.com>\nCo-developed-by: Sridhar Samudrala <sridhar.samudrala@intel.com>\nSigned-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com>\nCo-developed-by: Pavan Kumar Linga <pavan.kumar.linga@intel.com>\nSigned-off-by: Pavan Kumar Linga <pavan.kumar.linga@intel.com>\nCo-developed-by: Larysa Zaremba <larysa.zaremba@intel.com>\nSigned-off-by: Larysa Zaremba <larysa.zaremba@intel.com>\n---\n drivers/net/ethernet/intel/libie/Kconfig | 6 +\n drivers/net/ethernet/intel/libie/Makefile | 4 +\n drivers/net/ethernet/intel/libie/pci.c | 187 ++++++++++++++++++++++\n include/linux/intel/libie/pci.h | 56 +++++++\n 4 files changed, 253 insertions(+)\n create mode 100644 drivers/net/ethernet/intel/libie/pci.c\n create mode 100644 include/linux/intel/libie/pci.h", "diff": "diff --git a/drivers/net/ethernet/intel/libie/Kconfig b/drivers/net/ethernet/intel/libie/Kconfig\nindex 70831c7e336e..500a95c944a8 100644\n--- a/drivers/net/ethernet/intel/libie/Kconfig\n+++ b/drivers/net/ethernet/intel/libie/Kconfig\n@@ -23,3 +23,9 @@ config LIBIE_FWLOG\n \t for it. Firmware logging is using admin queue interface to communicate\n \t with the device. Debugfs is a user interface used to config logging\n \t and dump all collected logs.\n+\n+config LIBIE_PCI\n+\ttristate\n+\thelp\n+\t Helper functions for management of PCI resources belonging\n+\t to networking devices.\ndiff --git a/drivers/net/ethernet/intel/libie/Makefile b/drivers/net/ethernet/intel/libie/Makefile\nindex db57fc6780ea..a28509cb9086 100644\n--- a/drivers/net/ethernet/intel/libie/Makefile\n+++ b/drivers/net/ethernet/intel/libie/Makefile\n@@ -12,3 +12,7 @@ libie_adminq-y\t\t\t:= adminq.o\n obj-$(CONFIG_LIBIE_FWLOG) \t+= libie_fwlog.o\n \n libie_fwlog-y\t\t\t:= fwlog.o\n+\n+obj-$(CONFIG_LIBIE_PCI)\t\t+= libie_pci.o\n+\n+libie_pci-y\t\t\t:= pci.o\ndiff --git a/drivers/net/ethernet/intel/libie/pci.c b/drivers/net/ethernet/intel/libie/pci.c\nnew file mode 100644\nindex 000000000000..50d8d296476d\n--- /dev/null\n+++ b/drivers/net/ethernet/intel/libie/pci.c\n@@ -0,0 +1,187 @@\n+// SPDX-License-Identifier: GPL-2.0-only\n+/* Copyright (C) 2025 Intel Corporation */\n+\n+#include <linux/intel/libie/pci.h>\n+\n+/**\n+ * libie_find_mmio_region - find if MMIO region is present in the list\n+ * @mmio_list: list that contains MMIO region info\n+ * @offset: MMIO region start offset\n+ * @bar_idx: BAR index where the offset to search\n+ *\n+ * Return: MMIO region pointer or NULL if the region info is not present.\n+ */\n+static struct libie_pci_mmio_region *\n+libie_find_mmio_region(const struct list_head *mmio_list,\n+\t\t resource_size_t offset, int bar_idx)\n+{\n+\tstruct libie_pci_mmio_region *mr;\n+\n+\tlist_for_each_entry(mr, mmio_list, list)\n+\t\tif (mr->bar_idx == bar_idx && mr->offset == offset)\n+\t\t\treturn mr;\n+\n+\treturn NULL;\n+}\n+\n+/**\n+ * __libie_pci_get_mmio_addr - get the MMIO virtual address\n+ * @mmio_info: contains list of MMIO regions\n+ * @offset: register offset of find\n+ * @num_args: number of additional arguments present\n+ *\n+ * This function finds the virtual address of a register offset by iterating\n+ * through the non-linear MMIO regions that are mapped by the driver.\n+ *\n+ * Return: valid MMIO virtual address or NULL.\n+ */\n+void __iomem *__libie_pci_get_mmio_addr(struct libie_mmio_info *mmio_info,\n+\t\t\t\t\tresource_size_t offset,\n+\t\t\t\t\tint num_args, ...)\n+{\n+\tstruct libie_pci_mmio_region *mr;\n+\tint bar_idx = 0;\n+\tva_list args;\n+\n+\tif (num_args) {\n+\t\tva_start(args, num_args);\n+\t\tbar_idx = va_arg(args, int);\n+\t\tva_end(args);\n+\t}\n+\n+\tlist_for_each_entry(mr, &mmio_info->mmio_list, list)\n+\t\tif (bar_idx == mr->bar_idx && offset >= mr->offset &&\n+\t\t offset < mr->offset + mr->size) {\n+\t\t\toffset -= mr->offset;\n+\n+\t\t\treturn mr->addr + offset;\n+\t\t}\n+\n+\treturn NULL;\n+}\n+EXPORT_SYMBOL_NS_GPL(__libie_pci_get_mmio_addr, \"LIBIE_PCI\");\n+\n+/**\n+ * __libie_pci_map_mmio_region - map PCI device MMIO region\n+ * @mmio_info: struct to store the mapped MMIO region\n+ * @offset: MMIO region start offset\n+ * @size: MMIO region size\n+ * @num_args: number of additional arguments present\n+ *\n+ * Return: true on success, false on memory map failure.\n+ */\n+bool __libie_pci_map_mmio_region(struct libie_mmio_info *mmio_info,\n+\t\t\t\t resource_size_t offset,\n+\t\t\t\t resource_size_t size, int num_args, ...)\n+{\n+\tstruct pci_dev *pdev = mmio_info->pdev;\n+\tstruct libie_pci_mmio_region *mr;\n+\tresource_size_t pa;\n+\tvoid __iomem *va;\n+\tint bar_idx = 0;\n+\tva_list args;\n+\n+\tif (num_args) {\n+\t\tva_start(args, num_args);\n+\t\tbar_idx = va_arg(args, int);\n+\t\tva_end(args);\n+\t}\n+\n+\tmr = libie_find_mmio_region(&mmio_info->mmio_list, offset, bar_idx);\n+\tif (mr) {\n+\t\tpci_warn(pdev, \"Mapping of BAR%u with offset %llu already exists\\n\",\n+\t\t\t bar_idx, (unsigned long long)offset);\n+\t\treturn true;\n+\t}\n+\n+\tpa = pci_resource_start(pdev, bar_idx) + offset;\n+\tva = ioremap(pa, size);\n+\tif (!va) {\n+\t\tpci_err(pdev, \"Failed to map BAR%u region\\n\", bar_idx);\n+\t\treturn false;\n+\t}\n+\n+\tmr = kvzalloc(sizeof(*mr), GFP_KERNEL);\n+\tif (!mr) {\n+\t\tiounmap(va);\n+\t\treturn false;\n+\t}\n+\n+\tmr->addr = va;\n+\tmr->offset = offset;\n+\tmr->size = size;\n+\tmr->bar_idx = bar_idx;\n+\n+\tlist_add_tail(&mr->list, &mmio_info->mmio_list);\n+\n+\treturn true;\n+}\n+EXPORT_SYMBOL_NS_GPL(__libie_pci_map_mmio_region, \"LIBIE_PCI\");\n+\n+/**\n+ * libie_pci_unmap_fltr_regs - unmap selected PCI device MMIO regions\n+ * @mmio_info: contains list of MMIO regions to unmap\n+ * @fltr: returns true, if region is to be unmapped\n+ */\n+void libie_pci_unmap_fltr_regs(struct libie_mmio_info *mmio_info,\n+\t\t\t bool (*fltr)(struct libie_mmio_info *mmio_info,\n+\t\t\t\t\t struct libie_pci_mmio_region *reg))\n+{\n+\tstruct libie_pci_mmio_region *mr, *tmp;\n+\n+\tlist_for_each_entry_safe(mr, tmp, &mmio_info->mmio_list, list) {\n+\t\tif (!fltr(mmio_info, mr))\n+\t\t\tcontinue;\n+\t\tiounmap(mr->addr);\n+\t\tlist_del(&mr->list);\n+\t\tkfree(mr);\n+\t}\n+}\n+EXPORT_SYMBOL_NS_GPL(libie_pci_unmap_fltr_regs, \"LIBIE_PCI\");\n+\n+/**\n+ * libie_pci_unmap_all_mmio_regions - unmap all PCI device MMIO regions\n+ * @mmio_info: contains list of MMIO regions to unmap\n+ */\n+void libie_pci_unmap_all_mmio_regions(struct libie_mmio_info *mmio_info)\n+{\n+\tstruct libie_pci_mmio_region *mr, *tmp;\n+\n+\tlist_for_each_entry_safe(mr, tmp, &mmio_info->mmio_list, list) {\n+\t\tiounmap(mr->addr);\n+\t\tlist_del(&mr->list);\n+\t\tkfree(mr);\n+\t}\n+}\n+EXPORT_SYMBOL_NS_GPL(libie_pci_unmap_all_mmio_regions, \"LIBIE_PCI\");\n+\n+/**\n+ * libie_pci_init_dev - enable and reserve PCI regions of the device\n+ * @pdev: PCI device information\n+ *\n+ * Return: %0 on success, -%errno on failure.\n+ */\n+int libie_pci_init_dev(struct pci_dev *pdev)\n+{\n+\tint err;\n+\n+\terr = pcim_enable_device(pdev);\n+\tif (err)\n+\t\treturn err;\n+\n+\tfor (int bar = 0; bar < PCI_STD_NUM_BARS; bar++)\n+\t\tif (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)\n+\t\t\tpcim_request_region(pdev, bar, pci_name(pdev));\n+\n+\terr = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));\n+\tif (err)\n+\t\treturn err;\n+\n+\tpci_set_master(pdev);\n+\n+\treturn 0;\n+}\n+EXPORT_SYMBOL_NS_GPL(libie_pci_init_dev, \"LIBIE_PCI\");\n+\n+MODULE_DESCRIPTION(\"Common Ethernet PCI library\");\n+MODULE_LICENSE(\"GPL\");\ndiff --git a/include/linux/intel/libie/pci.h b/include/linux/intel/libie/pci.h\nnew file mode 100644\nindex 000000000000..d3129f1023b7\n--- /dev/null\n+++ b/include/linux/intel/libie/pci.h\n@@ -0,0 +1,56 @@\n+/* SPDX-License-Identifier: GPL-2.0-only */\n+/* Copyright (C) 2025 Intel Corporation */\n+\n+#ifndef __LIBIE_PCI_H\n+#define __LIBIE_PCI_H\n+\n+#include <linux/pci.h>\n+\n+/**\n+ * struct libie_pci_mmio_region - structure for MMIO region info\n+ * @list: used to add a MMIO region to the list of MMIO regions in\n+ *\t libie_mmio_info\n+ * @addr: virtual address of MMIO region start\n+ * @offset: start offset of the MMIO region\n+ * @size: size of the MMIO region\n+ * @bar_idx: BAR index to which the MMIO region belongs to\n+ */\n+struct libie_pci_mmio_region {\n+\tstruct list_head\tlist;\n+\tvoid __iomem\t\t*addr;\n+\tresource_size_t\t\toffset;\n+\tresource_size_t\t\tsize;\n+\tu16\t\t\tbar_idx;\n+};\n+\n+/**\n+ * struct libie_mmio_info - contains list of MMIO regions\n+ * @pdev: PCI device pointer\n+ * @mmio_list: list of MMIO regions\n+ */\n+struct libie_mmio_info {\n+\tstruct pci_dev\t\t*pdev;\n+\tstruct list_head\tmmio_list;\n+};\n+\n+#define libie_pci_map_mmio_region(mmio_info, offset, size, ...)\t\\\n+\t__libie_pci_map_mmio_region(mmio_info, offset, size,\t\t\\\n+\t\t\t\t COUNT_ARGS(__VA_ARGS__), ##__VA_ARGS__)\n+\n+#define libie_pci_get_mmio_addr(mmio_info, offset, ...)\t\t\\\n+\t__libie_pci_get_mmio_addr(mmio_info, offset,\t\t\t\\\n+\t\t\t\t COUNT_ARGS(__VA_ARGS__), ##__VA_ARGS__)\n+\n+bool __libie_pci_map_mmio_region(struct libie_mmio_info *mmio_info,\n+\t\t\t\t resource_size_t offset, resource_size_t size,\n+\t\t\t\t int num_args, ...);\n+void __iomem *__libie_pci_get_mmio_addr(struct libie_mmio_info *mmio_info,\n+\t\t\t\t\tresource_size_t region_offset,\n+\t\t\t\t\tint num_args, ...);\n+void libie_pci_unmap_all_mmio_regions(struct libie_mmio_info *mmio_info);\n+void libie_pci_unmap_fltr_regs(struct libie_mmio_info *mmio_info,\n+\t\t\t bool (*fltr)(struct libie_mmio_info *mmio_info,\n+\t\t\t\t\t struct libie_pci_mmio_region *reg));\n+int libie_pci_init_dev(struct pci_dev *pdev);\n+\n+#endif /* __LIBIE_PCI_H */\n", "prefixes": [ "iwl-next", "v5", "03/15" ] }