13 #include <linux/kernel.h>
16 #include <linux/stat.h>
17 #include <linux/capability.h>
22 #define rio_config_attr(field, format_string) \
24 field##_show(struct device *dev, struct device_attribute *attr, char *buf) \
26 struct rio_dev *rdev = to_rio_dev(dev); \
28 return sprintf(buf, format_string, rdev->field); \
64 (rdev->
prev) ? rio_name(rdev->
prev) :
"root");
78 rio_name(rdev->
rswitch->nextdev[i]));
104 rio_read_config(
struct file *filp,
struct kobject *kobj,
106 char *buf, loff_t off,
size_t count)
110 unsigned int size = 0x100;
111 loff_t init_off = off;
120 if (off + count > size) {
127 if ((off & 1) &&
size) {
129 rio_read_config_8(dev, off, &val);
130 data[off - init_off] =
val;
135 if ((off & 3) && size > 2) {
137 rio_read_config_16(dev, off, &val);
138 data[off - init_off] = (val >> 8) & 0xff;
139 data[off - init_off + 1] = val & 0xff;
146 rio_read_config_32(dev, off, &val);
147 data[off - init_off] = (val >> 24) & 0xff;
148 data[off - init_off + 1] = (val >> 16) & 0xff;
149 data[off - init_off + 2] = (val >> 8) & 0xff;
150 data[off - init_off + 3] = val & 0xff;
157 rio_read_config_16(dev, off, &val);
158 data[off - init_off] = (val >> 8) & 0xff;
159 data[off - init_off + 1] = val & 0xff;
166 rio_read_config_8(dev, off, &val);
167 data[off - init_off] =
val;
176 rio_write_config(
struct file *filp,
struct kobject *kobj,
178 char *buf, loff_t off,
size_t count)
182 unsigned int size =
count;
183 loff_t init_off = off;
184 u8 *data = (
u8 *) buf;
193 if ((off & 1) &&
size) {
194 rio_write_config_8(dev, off, data[off - init_off]);
199 if ((off & 3) && (size > 2)) {
200 u16 val = data[off - init_off + 1];
201 val |= (
u16) data[off - init_off] << 8;
202 rio_write_config_16(dev, off, val);
208 u32 val = data[off - init_off + 3];
209 val |= (
u32) data[off - init_off + 2] << 8;
210 val |= (
u32) data[off - init_off + 1] << 16;
211 val |= (
u32) data[off - init_off] << 24;
212 rio_write_config_32(dev, off, val);
218 u16 val = data[off - init_off + 1];
219 val |= (
u16) data[off - init_off] << 8;
220 rio_write_config_16(dev, off, val);
226 rio_write_config_8(dev, off, data[off - init_off]);
240 .read = rio_read_config,
241 .write = rio_write_config,
260 if (!err && rdev->
rswitch->sw_sysfs)
265 pr_warning(
"RIO: Failed to create attribute file(s) for %s\n",