get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2219692/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2219692,
    "url": "http://patchwork.ozlabs.org/api/patches/2219692/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260403194938.3577011-3-anthony.l.nguyen@intel.com/",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api",
        "name": "Linux PCI development",
        "link_name": "linux-pci",
        "list_id": "linux-pci.vger.kernel.org",
        "list_email": "linux-pci@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260403194938.3577011-3-anthony.l.nguyen@intel.com>",
    "list_archive_url": null,
    "date": "2026-04-03T19:49:24",
    "name": "[net-next,v2,02/14] libie: add PCI device initialization helpers to libie",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b2b615f10d17bbe930d64a291565ddeb5959e8b3",
    "submitter": {
        "id": 68875,
        "url": "http://patchwork.ozlabs.org/api/people/68875/?format=api",
        "name": "Tony Nguyen",
        "email": "anthony.l.nguyen@intel.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260403194938.3577011-3-anthony.l.nguyen@intel.com/mbox/",
    "series": [
        {
            "id": 498668,
            "url": "http://patchwork.ozlabs.org/api/series/498668/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=498668",
            "date": "2026-04-03T19:49:29",
            "name": null,
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/498668/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2219692/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2219692/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-51843-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-pci@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256\n header.s=Intel header.b=fALstElO;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-51843-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com\n header.b=\"fALstElO\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=192.198.163.15",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=intel.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=intel.com"
        ],
        "Received": [
            "from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\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 4fnTsf6pW1z1yG2\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 04 Apr 2026 06:52:54 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 462B0306A897\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  3 Apr 2026 19:49:53 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id C0BCA3D7D6A;\n\tFri,  3 Apr 2026 19:49:50 +0000 (UTC)",
            "from mgamail.intel.com (mgamail.intel.com [192.198.163.15])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E8643D6CBE;\n\tFri,  3 Apr 2026 19:49:48 +0000 (UTC)",
            "from orviesa001.jf.intel.com ([10.64.159.141])\n  by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Apr 2026 12:49:45 -0700",
            "from anguy11-upstream.jf.intel.com ([10.166.9.133])\n  by orviesa001.jf.intel.com with ESMTP; 03 Apr 2026 12:49:44 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775245790; cv=none;\n b=WoXRxDtUOi65vB+oJGBNHaYa0ktbXRqn9fmPQqX05azMPN6863XCLtNz/TWWnayA99QRrosrnL8ftONEBxwzXW9qqIliYRvUJY/hM3YmI+X7Sf30ICEzdTCQ7OnbbzeVilLFeN8wNQQinLoAlJEOeSWrBIKX1uUBbQBjg6Q2F9k=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775245790; c=relaxed/simple;\n\tbh=bXeEbllSUhc62/nolE52XEdol2e7UKXNWrejec72ScU=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=DHi0e24tNu/qpe569zgDQz2KAd/GTeFrOEHrvoldnCXekNeRA/z2v66gMtvBzx6+/3mNE5TsyJiTSazobbIQuzIfeZTF87Ro89zKCr65rKieAdrlJ6RyZY78OvYDNL5SNDw/1EXyYZDEvR+6NYVmjvyw9aOn2cEX2Gj48Dp+nuw=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=intel.com;\n spf=pass smtp.mailfrom=intel.com;\n dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com\n header.b=fALstElO; arc=none smtp.client-ip=192.198.163.15",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n  d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n  t=1775245788; x=1806781788;\n  h=from:to:cc:subject:date:message-id:in-reply-to:\n   references:mime-version:content-transfer-encoding;\n  bh=bXeEbllSUhc62/nolE52XEdol2e7UKXNWrejec72ScU=;\n  b=fALstElOLcrEFkFN1dPRTVJSnh6QATgl/gbyivg4Z2r2JwooHytoA2vT\n   Eo8ngjdU7Ct6jUqehcBPVVqkkySfvICMlLpX556QsfO/jUpKuO69vU5U/\n   kKxB87eNPwRARZ3pkYBoSjFKQ+JZE2ovTRIDXFP4iDVcNEtN8jNM3+LH9\n   wRxedmsR1YvFtnqtLh187zufQ9GGP8DkroDGkVvRJI0wAJxkGQQ6EFxwy\n   JTbDBm2YfAuNTBSz8QCy1ZixvzlyU6rSCkTWg4JTgzY8GfFqKw2e2SStC\n   88ZQ+BMn5kbRV1w2I34E9LGw9rTfPk5SgVsS2s/oTdWQHhWudJ/STma1L\n   A==;",
        "X-CSE-ConnectionGUID": [
            "aIM2LpSCQnayXX7B89GNaA==",
            "bBOwlyLgRXCAMvQN7NTayg=="
        ],
        "X-CSE-MsgGUID": [
            "CjbTmXfmSQK9XYsgyjQl9Q==",
            "kCeEeIQZTpC2rLlXdFeO8w=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6800,10657,11748\"; a=\"76428769\"",
            "E=Sophos;i=\"6.23,158,1770624000\";\n   d=\"scan'208\";a=\"76428769\"",
            "E=Sophos;i=\"6.23,158,1770624000\";\n   d=\"scan'208\";a=\"265266116\""
        ],
        "X-ExtLoop1": "1",
        "From": "Tony Nguyen <anthony.l.nguyen@intel.com>",
        "To": "davem@davemloft.net,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\tedumazet@google.com,\n\tandrew+netdev@lunn.ch,\n\tnetdev@vger.kernel.org",
        "Cc": "Phani R Burra <phani.r.burra@intel.com>,\n\tanthony.l.nguyen@intel.com,\n\tlarysa.zaremba@intel.com,\n\tprzemyslaw.kitszel@intel.com,\n\taleksander.lobakin@intel.com,\n\tsridhar.samudrala@intel.com,\n\tanjali.singhai@intel.com,\n\tmichal.swiatkowski@linux.intel.com,\n\tmaciej.fijalkowski@intel.com,\n\temil.s.tantilov@intel.com,\n\tmadhu.chittim@intel.com,\n\tjoshua.a.hay@intel.com,\n\tjacob.e.keller@intel.com,\n\tjayaprakash.shanmugam@intel.com,\n\tjiri@resnulli.us,\n\thorms@kernel.org,\n\tcorbet@lwn.net,\n\trichardcochran@gmail.com,\n\tlinux-doc@vger.kernel.org,\n\tbhelgaas@google.com,\n\tlinux-pci@vger.kernel.org,\n\tBharath R <bharath.r@intel.com>,\n\tSamuel Salin <Samuel.salin@intel.com>,\n\tAleksandr Loktionov <aleksandr.loktionov@intel.com>",
        "Subject": "[PATCH net-next v2 02/14] libie: add PCI device initialization\n helpers to libie",
        "Date": "Fri,  3 Apr 2026 12:49:24 -0700",
        "Message-ID": "<20260403194938.3577011-3-anthony.l.nguyen@intel.com>",
        "X-Mailer": "git-send-email 2.47.1",
        "In-Reply-To": "<20260403194938.3577011-1-anthony.l.nguyen@intel.com>",
        "References": "<20260403194938.3577011-1-anthony.l.nguyen@intel.com>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-pci@vger.kernel.org",
        "List-Id": "<linux-pci.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "From: Phani R Burra <phani.r.burra@intel.com>\n\nAdd support functions for drivers to configure PCI functionality and access\nMMIO space.\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>\nTested-by: Bharath R <bharath.r@intel.com>\nTested-by: Samuel Salin <Samuel.salin@intel.com>\nReviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>\nSigned-off-by: Tony Nguyen <anthony.l.nguyen@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    | 208 ++++++++++++++++++++++\n include/linux/intel/libie/pci.h           |  56 ++++++\n 4 files changed, 274 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..7276a3533b54\n--- /dev/null\n+++ b/drivers/net/ethernet/intel/libie/pci.c\n@@ -0,0 +1,208 @@\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 MMIO region containing a range\n+ * @mmio_list: list that contains MMIO region info\n+ * @offset: range start offset\n+ * @size: range size\n+ * @bar_idx: BAR index containing the range to search\n+ *\n+ * Return: pointer to a MMIO region overlapping with the range in any way or\n+ *\t   NULL if no such region is mapped.\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, resource_size_t size,\n+\t\t       int bar_idx)\n+{\n+\tresource_size_t end_offset = offset + size;\n+\tstruct libie_pci_mmio_region *mr;\n+\n+\tlist_for_each_entry(mr, mmio_list, list) {\n+\t\tresource_size_t mr_end = mr->offset + mr->size;\n+\t\tresource_size_t mr_start = mr->offset;\n+\n+\t\tif (mr->bar_idx != bar_idx)\n+\t\t\tcontinue;\n+\t\tif (offset < mr_end && end_offset > mr_start)\n+\t\t\treturn mr;\n+\t}\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 to 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+\tif (offset + size > pci_resource_len(pdev, bar_idx))\n+\t\treturn false;\n+\n+\tmr = libie_find_mmio_region(&mmio_info->mmio_list, offset, size,\n+\t\t\t\t    bar_idx);\n+\tif (mr) {\n+\t\tpci_warn(pdev,\n+\t\t\t \"Mapping of BAR%u (offset=%llu, size=%llu) intersecting region (offset=%llu, size=%llu) already exists\\n\",\n+\t\t\t bar_idx, (unsigned long long)mr->offset,\n+\t\t\t (unsigned long long)mr->size,\n+\t\t\t (unsigned long long)offset, (unsigned long long)size);\n+\t\treturn mr->offset <= offset &&\n+\t\t       mr->offset + mr->size >= offset + size;\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_obj(*mr);\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\tkvfree(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\tkvfree(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\terr = pcim_request_region(pdev, bar, pci_name(pdev));\n+\t\t\tif (err)\n+\t\t\t\treturn err;\n+\t\t}\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..effd072c55c8\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 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": [
        "net-next",
        "v2",
        "02/14"
    ]
}