From 9dd9be530386093c30b3da80093a6887876040ec Mon Sep 17 00:00:00 2001 From: Anshuman Gupta Date: Tue, 17 May 2022 19:01:08 +0530 Subject: lib/igt_device: Get gfx PCI card root port Utility library function to get the Gfx Card PCI topology root port pci device using libpaciaccess. root port will be used to get the real ACPI D state. Cc: Rodrigo Vivi Signed-off-by: Anshuman Gupta Reviewed-by: Rodrigo Vivi --- lib/igt_device.c | 28 ++++++++++++++++++++++++++++ lib/igt_device.h | 1 + 2 files changed, 29 insertions(+) (limited to 'lib') diff --git a/lib/igt_device.c b/lib/igt_device.c index 9794a992..fddfba72 100644 --- a/lib/igt_device.c +++ b/lib/igt_device.c @@ -257,3 +257,31 @@ struct pci_device *igt_device_get_pci_device(int fd) return pci_dev; } + +/** + * igt_device_get_pci_root_port: + * @fd: the device. + * + * Looks up the graphics pci device root port using libpciaccess. + * + * Returns: + * The root port pci_device. + */ +struct pci_device * +igt_device_get_pci_root_port(int fd) +{ + struct pci_device *pci_dev, *prev; + + pci_dev = __igt_device_get_pci_device(fd, 0); + igt_require(pci_dev); + + while (pci_dev) { + prev = pci_dev; + pci_dev = pci_device_get_parent_bridge(pci_dev); + } + + igt_debug("Root Port PCI device %04x:%02x:%02x.%01x\n", + prev->domain, prev->bus, prev->dev, prev->func); + + return prev; +} diff --git a/lib/igt_device.h b/lib/igt_device.h index 1aaa840e..800a0fcc 100644 --- a/lib/igt_device.h +++ b/lib/igt_device.h @@ -34,5 +34,6 @@ void igt_device_drop_master(int fd); int igt_device_get_card_index(int fd); struct pci_device *igt_device_get_pci_device(int fd); struct pci_device *__igt_device_get_pci_device(int fd, unsigned int vf_id); +struct pci_device *igt_device_get_pci_root_port(int fd); #endif /* __IGT_DEVICE_H__ */ -- cgit v1.2.3