[PATCH] PCI: Add pci shutdown ability
authorGreg KH <gregkh@suse.de>
Fri, 8 Apr 2005 05:53:31 +0000 (14:53 +0900)
committerGreg KH <gregkh@suse.de>
Wed, 4 May 2005 06:45:15 +0000 (23:45 -0700)
Now pci drivers can know when the system is going down without having to
add a reboot notifier event.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/pci/pci-driver.c
include/linux/pci.h

index 37b7961efc44a93fff15ee41c125be1e71c5d9e5..b42466ccbb309f4961b7a653aa079c3577d7cbb7 100644 (file)
@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
        return 0;
 }
 
+static void pci_device_shutdown(struct device *dev)
+{
+       struct pci_dev *pci_dev = to_pci_dev(dev);
+       struct pci_driver *drv = pci_dev->driver;
+
+       if (drv && drv->shutdown)
+               drv->shutdown(pci_dev);
+}
 
 #define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
 #define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
@@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
        drv->driver.bus = &pci_bus_type;
        drv->driver.probe = pci_device_probe;
        drv->driver.remove = pci_device_remove;
+       drv->driver.shutdown = pci_device_shutdown,
        drv->driver.owner = drv->owner;
        drv->driver.kobj.ktype = &pci_driver_kobj_type;
        pci_init_dynids(&drv->dynids);
index 3c89148ae28a6e28d4ec21e680a6e383fb885e3d..cff5ba3ac8ce816c8261dd588be17f488de89507 100644 (file)
@@ -671,6 +671,7 @@ struct pci_driver {
        int  (*suspend) (struct pci_dev *dev, pm_message_t state);      /* Device suspended */
        int  (*resume) (struct pci_dev *dev);                   /* Device woken up */
        int  (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);   /* Enable wake event */
+       void (*shutdown) (struct pci_dev *dev);
 
        struct device_driver    driver;
        struct pci_dynids dynids;