• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/ide/
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