Merge branch 'master'
[linux-2.6] / drivers / pci / hotplug.c
1 #include <linux/kernel.h>
2 #include <linux/pci.h>
3 #include <linux/module.h>
4 #include "pci.h"
5
6 int pci_hotplug (struct device *dev, char **envp, int num_envp,
7                  char *buffer, int buffer_size)
8 {
9         struct pci_dev *pdev;
10         int i = 0;
11         int length = 0;
12
13         if (!dev)
14                 return -ENODEV;
15
16         pdev = to_pci_dev(dev);
17         if (!pdev)
18                 return -ENODEV;
19
20         if (add_hotplug_env_var(envp, num_envp, &i,
21                                 buffer, buffer_size, &length,
22                                 "PCI_CLASS=%04X", pdev->class))
23                 return -ENOMEM;
24
25         if (add_hotplug_env_var(envp, num_envp, &i,
26                                 buffer, buffer_size, &length,
27                                 "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
28                 return -ENOMEM;
29
30         if (add_hotplug_env_var(envp, num_envp, &i,
31                                 buffer, buffer_size, &length,
32                                 "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
33                                 pdev->subsystem_device))
34                 return -ENOMEM;
35
36         if (add_hotplug_env_var(envp, num_envp, &i,
37                                 buffer, buffer_size, &length,
38                                 "PCI_SLOT_NAME=%s", pci_name(pdev)))
39                 return -ENOMEM;
40
41         if (add_hotplug_env_var(envp, num_envp, &i,
42                                 buffer, buffer_size, &length,
43                                 "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
44                                 pdev->vendor, pdev->device,
45                                 pdev->subsystem_vendor, pdev->subsystem_device,
46                                 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
47                                 (u8)(pdev->class)))
48                 return -ENOMEM;
49
50         envp[i] = NULL;
51
52         return 0;
53 }