diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common_interface.c | 10 | ||||
-rw-r--r-- | src/linux_sysfs.c | 15 | ||||
-rw-r--r-- | src/pciaccess_private.h | 1 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/common_interface.c b/src/common_interface.c index a4439b6..6dbaa6b 100644 --- a/src/common_interface.c +++ b/src/common_interface.c @@ -676,6 +676,16 @@ pci_device_enable(struct pci_device *dev) pci_sys->methods->enable(dev); } +void +pci_device_disable(struct pci_device *dev) +{ + if (dev == NULL) + return; + + if (pci_sys->methods->disable) + pci_sys->methods->disable(dev); +} + /** * Map the legacy memory space for the PCI domain containing \c dev. * diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c index 1b4051b..d62f48c 100644 --- a/src/linux_sysfs.c +++ b/src/linux_sysfs.c @@ -742,7 +742,7 @@ pci_device_linux_sysfs_unmap_range(struct pci_device *dev, return err; } -static void pci_device_linux_sysfs_enable(struct pci_device *dev) +static void pci_device_linux_sysfs_set_enable(struct pci_device *dev, int enable) { char name[256]; int fd; @@ -758,10 +758,20 @@ static void pci_device_linux_sysfs_enable(struct pci_device *dev) if (fd == -1) return; - write( fd, "1", 1 ); + write( fd, enable ? "1" : "0" , 1 ); close(fd); } +static void pci_device_linux_sysfs_enable(struct pci_device *dev) +{ + return pci_device_linux_sysfs_set_enable(dev, 1); +} + +static void pci_device_linux_sysfs_disable(struct pci_device *dev) +{ + return pci_device_linux_sysfs_set_enable(dev, 0); +} + static int pci_device_linux_sysfs_boot_vga(struct pci_device *dev) { char name[256]; @@ -1042,6 +1052,7 @@ static const struct pci_system_methods linux_sysfs_methods = { .fill_capabilities = pci_fill_capabilities_generic, .enable = pci_device_linux_sysfs_enable, + .disable = pci_device_linux_sysfs_disable, .boot_vga = pci_device_linux_sysfs_boot_vga, .has_kernel_driver = pci_device_linux_sysfs_has_kernel_driver, diff --git a/src/pciaccess_private.h b/src/pciaccess_private.h index d3b68d4..be5d15d 100644 --- a/src/pciaccess_private.h +++ b/src/pciaccess_private.h @@ -76,6 +76,7 @@ struct pci_system_methods { int (*fill_capabilities)( struct pci_device * dev ); void (*enable)( struct pci_device *dev ); + void (*disable)( struct pci_device *dev ); int (*boot_vga)( struct pci_device *dev ); int (*has_kernel_driver)( struct pci_device *dev ); struct pci_io_handle *(*open_device_io)( struct pci_io_handle *handle, |