hotplug.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <linux/kernel.h>
  2. #include <linux/pci.h>
  3. #include <linux/module.h>
  4. #include "pci.h"
  5. int pci_hotplug (struct device *dev, char **envp, int num_envp,
  6. char *buffer, int buffer_size)
  7. {
  8. struct pci_dev *pdev;
  9. char *scratch;
  10. int i = 0;
  11. int length = 0;
  12. if (!dev)
  13. return -ENODEV;
  14. pdev = to_pci_dev(dev);
  15. if (!pdev)
  16. return -ENODEV;
  17. scratch = buffer;
  18. if (add_hotplug_env_var(envp, num_envp, &i,
  19. buffer, buffer_size, &length,
  20. "PCI_CLASS=%04X", pdev->class))
  21. return -ENOMEM;
  22. if (add_hotplug_env_var(envp, num_envp, &i,
  23. buffer, buffer_size, &length,
  24. "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
  25. return -ENOMEM;
  26. if (add_hotplug_env_var(envp, num_envp, &i,
  27. buffer, buffer_size, &length,
  28. "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
  29. pdev->subsystem_device))
  30. return -ENOMEM;
  31. if (add_hotplug_env_var(envp, num_envp, &i,
  32. buffer, buffer_size, &length,
  33. "PCI_SLOT_NAME=%s", pci_name(pdev)))
  34. return -ENOMEM;
  35. if (add_hotplug_env_var(envp, num_envp, &i,
  36. buffer, buffer_size, &length,
  37. "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
  38. pdev->vendor, pdev->device,
  39. pdev->subsystem_vendor, pdev->subsystem_device,
  40. (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
  41. (u8)(pdev->class)))
  42. return -ENOMEM;
  43. envp[i] = NULL;
  44. return 0;
  45. }