hotplug.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. /* stuff we want to pass to /sbin/hotplug */
  19. envp[i++] = scratch;
  20. length += scnprintf (scratch, buffer_size - length, "PCI_CLASS=%04X",
  21. pdev->class);
  22. if ((buffer_size - length <= 0) || (i >= num_envp))
  23. return -ENOMEM;
  24. ++length;
  25. scratch += length;
  26. envp[i++] = scratch;
  27. length += scnprintf (scratch, buffer_size - length, "PCI_ID=%04X:%04X",
  28. pdev->vendor, pdev->device);
  29. if ((buffer_size - length <= 0) || (i >= num_envp))
  30. return -ENOMEM;
  31. ++length;
  32. scratch += length;
  33. envp[i++] = scratch;
  34. length += scnprintf (scratch, buffer_size - length,
  35. "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
  36. pdev->subsystem_device);
  37. if ((buffer_size - length <= 0) || (i >= num_envp))
  38. return -ENOMEM;
  39. ++length;
  40. scratch += length;
  41. envp[i++] = scratch;
  42. length += scnprintf (scratch, buffer_size - length, "PCI_SLOT_NAME=%s",
  43. pci_name(pdev));
  44. if ((buffer_size - length <= 0) || (i >= num_envp))
  45. return -ENOMEM;
  46. envp[i] = NULL;
  47. return 0;
  48. }