]> err.no Git - linux-2.6/blob - drivers/pci/hotplug.c
Merge /spare/repo/linux-2.6/
[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         char *scratch;
11         int i = 0;
12         int length = 0;
13
14         if (!dev)
15                 return -ENODEV;
16
17         pdev = to_pci_dev(dev);
18         if (!pdev)
19                 return -ENODEV;
20
21         scratch = buffer;
22
23         /* stuff we want to pass to /sbin/hotplug */
24         envp[i++] = scratch;
25         length += scnprintf (scratch, buffer_size - length, "PCI_CLASS=%04X",
26                             pdev->class);
27         if ((buffer_size - length <= 0) || (i >= num_envp))
28                 return -ENOMEM;
29         ++length;
30         scratch += length;
31
32         envp[i++] = scratch;
33         length += scnprintf (scratch, buffer_size - length, "PCI_ID=%04X:%04X",
34                             pdev->vendor, pdev->device);
35         if ((buffer_size - length <= 0) || (i >= num_envp))
36                 return -ENOMEM;
37         ++length;
38         scratch += length;
39
40         envp[i++] = scratch;
41         length += scnprintf (scratch, buffer_size - length,
42                             "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
43                             pdev->subsystem_device);
44         if ((buffer_size - length <= 0) || (i >= num_envp))
45                 return -ENOMEM;
46         ++length;
47         scratch += length;
48
49         envp[i++] = scratch;
50         length += scnprintf (scratch, buffer_size - length, "PCI_SLOT_NAME=%s",
51                             pci_name(pdev));
52         if ((buffer_size - length <= 0) || (i >= num_envp))
53                 return -ENOMEM;
54
55         envp[i++] = scratch;
56         length += scnprintf (scratch, buffer_size - length,
57                             "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
58                             pdev->vendor, pdev->device,
59                             pdev->subsystem_vendor, pdev->subsystem_device,
60                             (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
61                             (u8)(pdev->class));
62         if ((buffer_size - length <= 0) || (i >= num_envp))
63                 return -ENOMEM;
64
65         envp[i] = NULL;
66
67         return 0;
68 }