1#include <linux/kernel.h> 2#include <linux/pci.h> 3#include <linux/module.h> 4#include "pci.h" 5 6int 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} 54