Commit c8958177 authored by Greg KH's avatar Greg KH

[PATCH] PCI: Add pci shutdown ability

Now pci drivers can know when the system is going down without having to
add a reboot notifier event.
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 4c0619ad
...@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev) ...@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
return 0; 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 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) #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) ...@@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
drv->driver.bus = &pci_bus_type; drv->driver.bus = &pci_bus_type;
drv->driver.probe = pci_device_probe; drv->driver.probe = pci_device_probe;
drv->driver.remove = pci_device_remove; drv->driver.remove = pci_device_remove;
drv->driver.shutdown = pci_device_shutdown,
drv->driver.owner = drv->owner; drv->driver.owner = drv->owner;
drv->driver.kobj.ktype = &pci_driver_kobj_type; drv->driver.kobj.ktype = &pci_driver_kobj_type;
pci_init_dynids(&drv->dynids); pci_init_dynids(&drv->dynids);
......
...@@ -671,6 +671,7 @@ struct pci_driver { ...@@ -671,6 +671,7 @@ struct pci_driver {
int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */
int (*resume) (struct pci_dev *dev); /* Device woken up */ 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 */ 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 device_driver driver;
struct pci_dynids dynids; struct pci_dynids dynids;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment