Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ide-sysfs.c
Go to the documentation of this file.
1 #include <linux/kernel.h>
2 #include <linux/ide.h>
3 
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 
65  __ATTR_RO(media),
66  __ATTR_RO(drivename),
67  __ATTR_RO(modalias),
70  __ATTR(serial, 0400, serial_show, NULL),
71  __ATTR(unload_heads, 0644, ide_park_show, ide_park_store),
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 
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 
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 
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 }