Merge branch 'master' into upstream-fixes
[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_uevent(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_uevent_var(envp, num_envp, &i,
21                            buffer, buffer_size, &length,
22                            "PCI_CLASS=%04X", pdev->class))
23                 return -ENOMEM;
24
25         if (add_uevent_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_uevent_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_uevent_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_uevent_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 }