linux/drivers/ide/ide-sysfs.c
<<
>>
Prefs
   1#include <linux/kernel.h>
   2#include <linux/ide.h>
   3
   4char *ide_media_string(ide_drive_t *drive)
   5{
   6        switch (drive->media) {
   7        case ide_disk:
   8                return "disk";
   9        case ide_cdrom:
  10                return "cdrom";
  11        case ide_tape:
  12                return "tape";
  13        case ide_floppy:
  14                return "floppy";
  15        case ide_optical:
  16                return "optical";
  17        default:
  18                return "UNKNOWN";
  19        }
  20}
  21
  22static ssize_t media_show(struct device *dev, struct device_attribute *attr,
  23                          char *buf)
  24{
  25        ide_drive_t *drive = to_ide_device(dev);
  26        return sprintf(buf, "%s\n", ide_media_string(drive));
  27}
  28
  29static ssize_t drivename_show(struct device *dev, struct device_attribute *attr,
  30                              char *buf)
  31{
  32        ide_drive_t *drive = to_ide_device(dev);
  33        return sprintf(buf, "%s\n", drive->name);
  34}
  35
  36static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
  37                             char *buf)
  38{
  39        ide_drive_t *drive = to_ide_device(dev);
  40        return sprintf(buf, "ide:m-%s\n", ide_media_string(drive));
  41}
  42
  43static ssize_t model_show(struct device *dev, struct device_attribute *attr,
  44                          char *buf)
  45{
  46        ide_drive_t *drive = to_ide_device(dev);
  47        return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_PROD]);
  48}
  49
  50static ssize_t firmware_show(struct device *dev, struct device_attribute *attr,
  51                             char *buf)
  52{
  53        ide_drive_t *drive = to_ide_device(dev);
  54        return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_FW_REV]);
  55}
  56
  57static ssize_t serial_show(struct device *dev, struct device_attribute *attr,
  58                           char *buf)
  59{
  60        ide_drive_t *drive = to_ide_device(dev);
  61        return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_SERNO]);
  62}
  63
  64struct device_attribute ide_dev_attrs[] = {
  65        __ATTR_RO(media),
  66        __ATTR_RO(drivename),
  67        __ATTR_RO(modalias),
  68        __ATTR_RO(model),
  69        __ATTR_RO(firmware),
  70        __ATTR(serial, 0400, serial_show, NULL),
  71        __ATTR(unload_heads, 0644, ide_park_show, ide_park_store),
  72        __ATTR_NULL
  73};
  74
  75static ssize_t store_delete_devices(struct device *portdev,
  76                                    struct device_attribute *attr,
  77                                    const char *buf, size_t n)
  78{
  79        ide_hwif_t *hwif = dev_get_drvdata(portdev);
  80
  81        if (strncmp(buf, "1", n))
  82                return -EINVAL;
  83
  84        ide_port_unregister_devices(hwif);
  85
  86        return n;
  87};
  88
  89static DEVICE_ATTR(delete_devices, S_IWUSR, NULL, store_delete_devices);
  90
  91static ssize_t store_scan(struct device *portdev,
  92                          struct device_attribute *attr,
  93                          const char *buf, size_t n)
  94{
  95        ide_hwif_t *hwif = dev_get_drvdata(portdev);
  96
  97        if (strncmp(buf, "1", n))
  98                return -EINVAL;
  99
 100        ide_port_unregister_devices(hwif);
 101        ide_port_scan(hwif);
 102
 103        return n;
 104};
 105
 106static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
 107
 108static struct device_attribute *ide_port_attrs[] = {
 109        &dev_attr_delete_devices,
 110        &dev_attr_scan,
 111        NULL
 112};
 113
 114int ide_sysfs_register_port(ide_hwif_t *hwif)
 115{
 116        int i, uninitialized_var(rc);
 117
 118        for (i = 0; ide_port_attrs[i]; i++) {
 119                rc = device_create_file(hwif->portdev, ide_port_attrs[i]);
 120                if (rc)
 121                        break;
 122        }
 123
 124        return rc;
 125}
 126
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.