Download | Plain Text | Line Numbers


#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sysfs.h>
#include <linux/pci.h>
 
#define MEGASAS_RELDATE "Aug. 31, 2013"
 
static ssize_t show_release_date(struct device_driver *dd, char *buf)
{
  return snprintf(buf, strlen(MEGASAS_RELDATE) + 2, "%s\n", MEGASAS_RELDATE);
}
 
static DRIVER_ATTR(release_date, S_IRUGO, show_release_date, NULL);
 
static struct pci_driver *pdrv = NULL;
 
static int __init dell_omsa_megasas_init(void)
{
  int ret;
  struct pci_dev *pdev = NULL;
 
  request_module("megaraid_sas");
 
  for_each_pci_dev(pdev) {
    struct pci_driver *tmp = pci_dev_driver(pdev);
    if (tmp && tmp->name && !strcmp(tmp->name, "megaraid_sas")) {
      pdrv = tmp;
      break;
    };
  }
 
  if (!pdrv) {
    printk(KERN_ERR "dell_omsa_megasas: module megaraid_sas not loaded\n");
    return -1;
  }
 
  ret = driver_create_file(&pdrv->driver, &driver_attr_release_date);
  if (ret)
    goto attr_failed;
  return 0;
 
attr_failed:
  return ret;
}
 
static void __exit dell_omsa_megasas_exit(void)
{
  if (pdrv)
    driver_remove_file(&pdrv->driver, &driver_attr_release_date);
}
 
module_init(dell_omsa_megasas_init);
module_exit(dell_omsa_megasas_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Manuel Mausz <manuel@mausz.at>");