blob: 10444988a10b58532dd942a0af906594904bd5fe [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#include <linux/kernel.h>
2#include <linux/pci.h>
3#include <linux/module.h>
4#include "pci.h"
5
6int 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
Linus Torvalds1da177e2005-04-16 15:20:36 -070023
Greg Kroah-Hartman7bcf5c02005-08-18 14:33:01 +100024 if (add_hotplug_env_var(envp, num_envp, &i,
25 buffer, buffer_size, &length,
26 "PCI_CLASS=%04X", pdev->class))
Linus Torvalds1da177e2005-04-16 15:20:36 -070027 return -ENOMEM;
28
Greg Kroah-Hartman7bcf5c02005-08-18 14:33:01 +100029 if (add_hotplug_env_var(envp, num_envp, &i,
30 buffer, buffer_size, &length,
31 "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
32 return -ENOMEM;
33
34 if (add_hotplug_env_var(envp, num_envp, &i,
35 buffer, buffer_size, &length,
36 "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
37 pdev->subsystem_device))
38 return -ENOMEM;
39
40 if (add_hotplug_env_var(envp, num_envp, &i,
41 buffer, buffer_size, &length,
42 "PCI_SLOT_NAME=%s", pci_name(pdev)))
43 return -ENOMEM;
44
45 if (add_hotplug_env_var(envp, num_envp, &i,
46 buffer, buffer_size, &length,
47 "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
48 pdev->vendor, pdev->device,
49 pdev->subsystem_vendor, pdev->subsystem_device,
50 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
51 (u8)(pdev->class)))
Greg KHd1ded202005-05-05 11:57:25 -070052 return -ENOMEM;
53
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 envp[i] = NULL;
55
56 return 0;
57}