diff options
-rw-r--r-- | lib/igt_device.c | 28 | ||||
-rw-r--r-- | lib/igt_device.h | 1 |
2 files changed, 29 insertions, 0 deletions
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__ */ |