]> err.no Git - linux-2.6/blobdiff - drivers/pci/pci-driver.c
Merge branch 'upstream-fixes' into upstream
[linux-2.6] / drivers / pci / pci-driver.c
index 94e68c54d27397bf06c56b32d7539c927b8dcf41..1456759936c59410f0af1aaab1d91d81c4e5f34f 100644 (file)
@@ -37,7 +37,7 @@ struct pci_dynid {
  * Adds a new dynamic pci device ID to this driver,
  * and causes the driver to probe for all devices again.
  */
-static inline ssize_t
+static ssize_t
 store_new_id(struct device_driver *driver, const char *buf, size_t count)
 {
        struct pci_dynid *dynid;
@@ -53,11 +53,10 @@ store_new_id(struct device_driver *driver, const char *buf, size_t count)
        if (fields < 0)
                return -EINVAL;
 
-       dynid = kmalloc(sizeof(*dynid), GFP_KERNEL);
+       dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
        if (!dynid)
                return -ENOMEM;
 
-       memset(dynid, 0, sizeof(*dynid));
        INIT_LIST_HEAD(&dynid->node);
        dynid->id.vendor = vendor;
        dynid->id.device = device;
@@ -272,10 +271,12 @@ static int pci_device_suspend(struct device * dev, pm_message_t state)
        struct pci_driver * drv = pci_dev->driver;
        int i = 0;
 
-       if (drv && drv->suspend)
+       if (drv && drv->suspend) {
                i = drv->suspend(pci_dev, state);
-       else
+               suspend_report_result(drv->suspend, i);
+       } else {
                pci_save_state(pci_dev);
+       }
        return i;
 }
 
@@ -364,32 +365,23 @@ static struct kobj_type pci_driver_kobj_type = {
 };
 
 /**
- * pci_register_driver - register a new pci driver
+ * __pci_register_driver - register a new pci driver
  * @drv: the driver structure to register
+ * @owner: owner module of drv
  * 
  * Adds the driver structure to the list of registered drivers.
  * Returns a negative value on error, otherwise 0. 
  * If no error occurred, the driver remains registered even if 
  * no device was claimed during registration.
  */
-int pci_register_driver(struct pci_driver *drv)
+int __pci_register_driver(struct pci_driver *drv, struct module *owner)
 {
        int error;
 
        /* initialize common driver fields */
        drv->driver.name = drv->name;
        drv->driver.bus = &pci_bus_type;
-       drv->driver.probe = pci_device_probe;
-       drv->driver.remove = pci_device_remove;
-       /* FIXME, once all of the existing PCI drivers have been fixed to set
-        * the pci shutdown function, this test can go away. */
-       if (!drv->driver.shutdown)
-               drv->driver.shutdown = pci_device_shutdown;
-       else
-               printk(KERN_WARNING "Warning: PCI driver %s has a struct "
-                       "device_driver shutdown method, please update!\n",
-                       drv->name);
-       drv->driver.owner = drv->owner;
+       drv->driver.owner = owner;
        drv->driver.kobj.ktype = &pci_driver_kobj_type;
 
        spin_lock_init(&drv->dynids.lock);
@@ -501,8 +493,8 @@ void pci_dev_put(struct pci_dev *dev)
 }
 
 #ifndef CONFIG_HOTPLUG
-int pci_hotplug (struct device *dev, char **envp, int num_envp,
-                char *buffer, int buffer_size)
+int pci_uevent(struct device *dev, char **envp, int num_envp,
+              char *buffer, int buffer_size)
 {
        return -ENODEV;
 }
@@ -511,8 +503,11 @@ int pci_hotplug (struct device *dev, char **envp, int num_envp,
 struct bus_type pci_bus_type = {
        .name           = "pci",
        .match          = pci_bus_match,
-       .hotplug        = pci_hotplug,
+       .uevent         = pci_uevent,
+       .probe          = pci_device_probe,
+       .remove         = pci_device_remove,
        .suspend        = pci_device_suspend,
+       .shutdown       = pci_device_shutdown,
        .resume         = pci_device_resume,
        .dev_attrs      = pci_dev_attrs,
 };
@@ -526,7 +521,7 @@ postcore_initcall(pci_driver_init);
 
 EXPORT_SYMBOL(pci_match_id);
 EXPORT_SYMBOL(pci_match_device);
-EXPORT_SYMBOL(pci_register_driver);
+EXPORT_SYMBOL(__pci_register_driver);
 EXPORT_SYMBOL(pci_unregister_driver);
 EXPORT_SYMBOL(pci_dev_driver);
 EXPORT_SYMBOL(pci_bus_type);