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 11 : {
9 11 : struct pci_dev *pdev;
10 11 : int i = 0;
11 11 : int length = 0;
12 :
13 11 : if (!dev)
14 0 : return -ENODEV;
15 :
16 11 : pdev = to_pci_dev(dev);
17 11 : if (!pdev)
18 0 : return -ENODEV;
19 :
20 11 : if (add_hotplug_env_var(envp, num_envp, &i,
21 : buffer, buffer_size, &length,
22 : "PCI_CLASS=%04X", pdev->class))
23 0 : return -ENOMEM;
24 :
25 11 : if (add_hotplug_env_var(envp, num_envp, &i,
26 : buffer, buffer_size, &length,
27 : "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
28 0 : return -ENOMEM;
29 :
30 11 : 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 0 : return -ENOMEM;
35 :
36 11 : if (add_hotplug_env_var(envp, num_envp, &i,
37 : buffer, buffer_size, &length,
38 : "PCI_SLOT_NAME=%s", pci_name(pdev)))
39 0 : return -ENOMEM;
40 :
41 11 : 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 0 : return -ENOMEM;
49 :
50 11 : envp[i] = NULL;
51 :
52 11 : return 0;
53 : }
|