Download | Plain Text | No Line Numbers


  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <linux/init.h>
  4. #include <linux/sysfs.h>
  5. #include <linux/pci.h>
  6.  
  7. #define MEGASAS_RELDATE "Aug. 31, 2013"
  8.  
  9. static ssize_t show_release_date(struct device_driver *dd, char *buf)
  10. {
  11. return snprintf(buf, strlen(MEGASAS_RELDATE) + 2, "%s\n", MEGASAS_RELDATE);
  12. }
  13.  
  14. static DRIVER_ATTR(release_date, S_IRUGO, show_release_date, NULL);
  15.  
  16. static struct pci_driver *pdrv = NULL;
  17.  
  18. static int __init dell_omsa_megasas_init(void)
  19. {
  20. int ret;
  21. struct pci_dev *pdev = NULL;
  22.  
  23. request_module("megaraid_sas");
  24.  
  25. for_each_pci_dev(pdev) {
  26. struct pci_driver *tmp = pci_dev_driver(pdev);
  27. if (tmp && tmp->name && !strcmp(tmp->name, "megaraid_sas")) {
  28. pdrv = tmp;
  29. break;
  30. };
  31. }
  32.  
  33. if (!pdrv) {
  34. printk(KERN_ERR "dell_omsa_megasas: module megaraid_sas not loaded\n");
  35. return -1;
  36. }
  37.  
  38. ret = driver_create_file(&pdrv->driver, &driver_attr_release_date);
  39. if (ret)
  40. goto attr_failed;
  41. return 0;
  42.  
  43. attr_failed:
  44. return ret;
  45. }
  46.  
  47. static void __exit dell_omsa_megasas_exit(void)
  48. {
  49. if (pdrv)
  50. driver_remove_file(&pdrv->driver, &driver_attr_release_date);
  51. }
  52.  
  53. module_init(dell_omsa_megasas_init);
  54. module_exit(dell_omsa_megasas_exit);
  55.  
  56. MODULE_LICENSE("GPL");
  57. MODULE_AUTHOR("Manuel Mausz <manuel@mausz.at>");
  58.