qemu/include/hw/pci
Alex Williamson 9461afd200 hw/pci: Basic support for PCI power management
The memory and IO BARs for devices are only accessible in the D0 power
state.  In other power states the PCI spec defines that the device
responds to TLPs and messages with an Unsupported Request response.

To approximate this behavior, consider the BARs as unmapped when the
device is not in the D0 power state.  This makes the BARs inaccessible
and has the additional bonus for vfio-pci that we don't attempt to DMA
map BARs for devices in a non-D0 power state.

To support this, an interface is added for devices to register the PM
capability, which allows central tracking to enforce valid transitions
and unmap BARs in non-D0 states.

NB. We currently have device models (eepro100 and pcie_pci_bridge)
that register a PM capability but do not set wmask to enable writes to
the power state field.  In order to maintain migration compatibility,
this new helper does not manage the wmask to enable guest writes to
initiate a power state change.  The contents and write access of the
PM capability are still managed by the caller.

Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20250225215237.3314011-2-alex.williamson@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
2025-03-06 06:47:33 +01:00
..
msi.h hw/xen: Support MSI mapping to PIRQ 2023-03-01 09:09:22 +00:00
msix.h msix: Assert that specified vector is in range 2022-11-07 14:08:17 -05:00
pci.h hw/pci: Basic support for PCI power management 2025-03-06 06:47:33 +01:00
pci_bridge.h virtio-pci: fix memory_region_find for VirtIOPCIRegion's MR 2024-11-04 16:03:24 -05:00
pci_bus.h hw/pci: modify pci_setup_iommu() to set PCIIOMMUOps 2023-11-03 09:20:31 +01:00
pci_device.h hw/pci: Basic support for PCI power management 2025-03-06 06:47:33 +01:00
pci_host.h hw/pci/pci_host: Introduce PCI_HOST_BYPASS_IOMMU macro 2023-07-10 16:29:17 -04:00
pci_ids.h hw/vmapple/virtio-blk: Add support for apple virtio-blk 2025-03-04 14:45:34 +01:00
pci_regs.h pcie: Add 1.2 version token for the Power Management Capability 2022-03-06 05:08:23 -05:00
pcie.h hw/pcie: Provide a utility function for control of EP / SW USP link 2024-11-04 16:03:24 -05:00
pcie_aer.h pci: remove some types from typedefs.h 2024-05-03 15:47:48 +02:00
pcie_doe.h hw/nvme: Add SPDM over DOE support 2024-07-22 20:15:42 -04:00
pcie_host.h include/hw/pci/pcie_host: Correct PCIE_MMCFG_SIZE_MAX 2022-05-16 16:15:40 -04:00
pcie_port.h hw/pci: Remove unused pcie_chassis_find_slot 2024-10-03 17:26:06 +03:00
pcie_regs.h pcie: Support PCIe Gen5/Gen6 link speeds 2024-03-12 17:56:55 -04:00
pcie_sriov.h pcie_sriov: Register VFs after migration 2025-02-20 18:23:19 -05:00
shpc.h hw/pci: Constify VMState 2023-12-30 07:38:06 +11:00
slotid_cap.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00