-/*
- * sysfs support for osst driver parameter information
- */
-
-static ssize_t osst_version_show(struct device_driver *ddd, char *buf)
-{
- return snprintf(buf, PAGE_SIZE, "%s\n", osst_version);
-}
-
-static DRIVER_ATTR(version, S_IRUGO, osst_version_show, NULL);
-
-static void osst_create_driverfs_files(struct device_driver *driverfs)
-{
- driver_create_file(driverfs, &driver_attr_version);
-}
-
-static void osst_remove_driverfs_files(struct device_driver *driverfs)
-{
- driver_remove_file(driverfs, &driver_attr_version);
-}
-
-/*
- * sysfs support for accessing ADR header information
- */
-
-static ssize_t osst_adr_rev_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "%d.%d\n", STp->header_cache->major_rev, STp->header_cache->minor_rev);
- return l;
-}
-
-CLASS_DEVICE_ATTR(ADR_rev, S_IRUGO, osst_adr_rev_show, NULL);
-
-static ssize_t osst_linux_media_version_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "LIN%d\n", STp->linux_media_version);
- return l;
-}
-
-CLASS_DEVICE_ATTR(media_version, S_IRUGO, osst_linux_media_version_show, NULL);
-
-static ssize_t osst_capacity_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "%d\n", STp->capacity);
- return l;
-}
-
-CLASS_DEVICE_ATTR(capacity, S_IRUGO, osst_capacity_show, NULL);
-
-static ssize_t osst_first_data_ppos_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "%d\n", STp->first_data_ppos);
- return l;
-}
-
-CLASS_DEVICE_ATTR(BOT_frame, S_IRUGO, osst_first_data_ppos_show, NULL);
-
-static ssize_t osst_eod_frame_ppos_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "%d\n", STp->eod_frame_ppos);
- return l;
-}
-
-CLASS_DEVICE_ATTR(EOD_frame, S_IRUGO, osst_eod_frame_ppos_show, NULL);
-
-static ssize_t osst_filemark_cnt_show(struct class_device *class_dev, char *buf)
-{
- struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev);
- ssize_t l = 0;
-
- if (STp && STp->header_ok && STp->linux_media)
- l = snprintf(buf, PAGE_SIZE, "%d\n", STp->filemark_cnt);
- return l;
-}
-
-CLASS_DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL);
-
-static struct class_simple * osst_sysfs_class;
-
-static int osst_sysfs_valid = 0;
-
-static void osst_sysfs_init(void)
-{
- osst_sysfs_class = class_simple_create(THIS_MODULE, "onstream_tape");
- if ( IS_ERR(osst_sysfs_class) )
- printk(KERN_WARNING "osst :W: Unable to register sysfs class\n");
- else
- osst_sysfs_valid = 1;
-}
-
-static void osst_sysfs_add(dev_t dev, struct device *device, struct osst_tape * STp, char * name)
-{
- struct class_device *osst_class_member;
-
- if (!osst_sysfs_valid) return;
-
- osst_class_member = class_simple_device_add(osst_sysfs_class, dev, device, "%s", name);
- if (IS_ERR(osst_class_member)) {
- printk(KERN_WARNING "osst :W: Unable to add sysfs class member %s\n", name);
- return;
- }
- class_set_devdata(osst_class_member, STp);
- class_device_create_file(osst_class_member, &class_device_attr_ADR_rev);
- class_device_create_file(osst_class_member, &class_device_attr_media_version);
- class_device_create_file(osst_class_member, &class_device_attr_capacity);
- class_device_create_file(osst_class_member, &class_device_attr_BOT_frame);
- class_device_create_file(osst_class_member, &class_device_attr_EOD_frame);
- class_device_create_file(osst_class_member, &class_device_attr_file_count);
-}
-
-static void osst_sysfs_destroy(dev_t dev)
-{
- if (!osst_sysfs_valid) return;
-
- class_simple_device_remove(dev);
-}
-
-static void osst_sysfs_cleanup(void)
-{
- if (osst_sysfs_valid) {
- class_simple_destroy(osst_sysfs_class);
- osst_sysfs_valid = 0;
- }
-}
-