Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #include <linux/kernel.h>
  2 #include <linux/ide.h>
  3 
  4 char *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 
 22 static 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 
 29 static 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 
 36 static 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 
 43 static 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 
 50 static 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 
 57 static 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 
 64 struct 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 
 75 static 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 
 89 static DEVICE_ATTR(delete_devices, S_IWUSR, NULL, store_delete_devices);
 90 
 91 static 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 
106 static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
107 
108 static struct device_attribute *ide_port_attrs[] = {
109         &dev_attr_delete_devices,
110         &dev_attr_scan,
111         NULL
112 };
113 
114 int 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 
  This page was automatically generated by the LXR engine.