[PATCH] Make sparc64 use setup-res.c
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / 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 }