2 * File Attributes for Zorro Devices
4 * Copyright (C) 2003 Geert Uytterhoeven
6 * Loosely based on drivers/pci/pci-sysfs.c
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
14 #include <linux/kernel.h>
15 #include <linux/zorro.h>
16 #include <linux/stat.h>
17 #include <linux/string.h>
19 #include <asm/byteorder.h>
24 /* show configuration fields */
25 #define zorro_config_attr(name, field, format_string) \
26 static ssize_t name##_show(struct device *dev, \
27 struct device_attribute *attr, char *buf) \
29 struct zorro_dev *z; \
31 z = to_zorro_dev(dev); \
32 return sprintf(buf, format_string, z->field); \
34 static DEVICE_ATTR_RO(name);
36 zorro_config_attr(id
, id
, "0x%08x\n");
37 zorro_config_attr(type
, rom
.er_Type
, "0x%02x\n");
38 zorro_config_attr(slotaddr
, slotaddr
, "0x%04x\n");
39 zorro_config_attr(slotsize
, slotsize
, "0x%04x\n");
41 static ssize_t
serial_show(struct device
*dev
, struct device_attribute
*attr
,
46 z
= to_zorro_dev(dev
);
47 return sprintf(buf
, "0x%08x\n", be32_to_cpu(z
->rom
.er_SerialNumber
));
49 static DEVICE_ATTR_RO(serial
);
51 static ssize_t
resource_show(struct device
*dev
, struct device_attribute
*attr
,
54 struct zorro_dev
*z
= to_zorro_dev(dev
);
56 return sprintf(buf
, "0x%08lx 0x%08lx 0x%08lx\n",
57 (unsigned long)zorro_resource_start(z
),
58 (unsigned long)zorro_resource_end(z
),
59 zorro_resource_flags(z
));
61 static DEVICE_ATTR_RO(resource
);
63 static ssize_t
modalias_show(struct device
*dev
, struct device_attribute
*attr
,
66 struct zorro_dev
*z
= to_zorro_dev(dev
);
68 return sprintf(buf
, ZORRO_DEVICE_MODALIAS_FMT
"\n", z
->id
);
70 static DEVICE_ATTR_RO(modalias
);
72 static struct attribute
*zorro_device_attrs
[] = {
75 &dev_attr_serial
.attr
,
76 &dev_attr_slotaddr
.attr
,
77 &dev_attr_slotsize
.attr
,
78 &dev_attr_resource
.attr
,
79 &dev_attr_modalias
.attr
,
83 static ssize_t
zorro_read_config(struct file
*filp
, struct kobject
*kobj
,
84 struct bin_attribute
*bin_attr
,
85 char *buf
, loff_t off
, size_t count
)
87 struct zorro_dev
*z
= to_zorro_dev(kobj_to_dev(kobj
));
90 /* Construct a ConfigDev */
91 memset(&cd
, 0, sizeof(cd
));
93 cd
.cd_SlotAddr
= cpu_to_be16(z
->slotaddr
);
94 cd
.cd_SlotSize
= cpu_to_be16(z
->slotsize
);
95 cd
.cd_BoardAddr
= cpu_to_be32(zorro_resource_start(z
));
96 cd
.cd_BoardSize
= cpu_to_be32(zorro_resource_len(z
));
98 return memory_read_from_buffer(buf
, count
, &off
, &cd
, sizeof(cd
));
101 static struct bin_attribute zorro_config_attr
= {
106 .size
= sizeof(struct ConfigDev
),
107 .read
= zorro_read_config
,
110 static struct bin_attribute
*zorro_device_bin_attrs
[] = {
115 static const struct attribute_group zorro_device_attr_group
= {
116 .attrs
= zorro_device_attrs
,
117 .bin_attrs
= zorro_device_bin_attrs
,
120 const struct attribute_group
*zorro_device_attribute_groups
[] = {
121 &zorro_device_attr_group
,