git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
drivers
/
char
/
viotape.c
diff --git
a/drivers/char/viotape.c
b/drivers/char/viotape.c
index
b72b204
..
60aabdb
100644
(file)
--- a/
drivers/char/viotape.c
+++ b/
drivers/char/viotape.c
@@
-31,6
+31,7
@@
* the OS/400 partition. The format of the messages is defined in
* iseries/vio.h
*/
* the OS/400 partition. The format of the messages is defined in
* iseries/vio.h
*/
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
@@
-42,6
+43,7
@@
#include <linux/dma-mapping.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/dma-mapping.h>
#include <linux/fs.h>
#include <linux/cdev.h>
+#include <linux/devfs_fs_kernel.h>
#include <linux/major.h>
#include <linux/completion.h>
#include <linux/proc_fs.h>
#include <linux/major.h>
#include <linux/completion.h>
#include <linux/proc_fs.h>
@@
-244,6
+246,7
@@
static struct device *tape_device[VIOTAPE_MAX_TAPE];
*/
static struct {
unsigned char cur_part;
*/
static struct {
unsigned char cur_part;
+ int dev_handle;
unsigned char part_stat_rwi[MAX_PARTITIONS];
} state[VIOTAPE_MAX_TAPE];
unsigned char part_stat_rwi[MAX_PARTITIONS];
} state[VIOTAPE_MAX_TAPE];
@@
-292,7
+295,7
@@
static int proc_viotape_open(struct inode *inode, struct file *file)
return single_open(file, proc_viotape_show, NULL);
}
return single_open(file, proc_viotape_show, NULL);
}
-static
const
struct file_operations proc_viotape_operations = {
+static struct file_operations proc_viotape_operations = {
.open = proc_viotape_open,
.read = seq_read,
.llseek = seq_lseek,
.open = proc_viotape_open,
.read = seq_read,
.llseek = seq_lseek,
@@
-956,7
+959,12
@@
static int viotape_probe(struct vio_dev *vdev, const struct vio_device_id *id)
"iseries!vt%d", i);
class_device_create(tape_class, NULL, MKDEV(VIOTAPE_MAJOR, i | 0x80),
NULL, "iseries!nvt%d", i);
"iseries!vt%d", i);
class_device_create(tape_class, NULL, MKDEV(VIOTAPE_MAJOR, i | 0x80),
NULL, "iseries!nvt%d", i);
+ devfs_mk_cdev(MKDEV(VIOTAPE_MAJOR, i), S_IFCHR | S_IRUSR | S_IWUSR,
+ "iseries/vt%d", i);
+ devfs_mk_cdev(MKDEV(VIOTAPE_MAJOR, i | 0x80),
+ S_IFCHR | S_IRUSR | S_IWUSR, "iseries/nvt%d", i);
sprintf(tapename, "iseries/vt%d", i);
sprintf(tapename, "iseries/vt%d", i);
+ state[i].dev_handle = devfs_register_tape(tapename);
printk(VIOTAPE_KERN_INFO "tape %s is iSeries "
"resource %10.10s type %4.4s, model %3.3s\n",
tapename, viotape_unitinfo[i].rsrcname,
printk(VIOTAPE_KERN_INFO "tape %s is iSeries "
"resource %10.10s type %4.4s, model %3.3s\n",
tapename, viotape_unitinfo[i].rsrcname,
@@
-968,6
+976,9
@@
static int viotape_remove(struct vio_dev *vdev)
{
int i = vdev->unit_address;
{
int i = vdev->unit_address;
+ devfs_remove("iseries/nvt%d", i);
+ devfs_remove("iseries/vt%d", i);
+ devfs_unregister_tape(state[i].dev_handle);
class_device_destroy(tape_class, MKDEV(VIOTAPE_MAJOR, i | 0x80));
class_device_destroy(tape_class, MKDEV(VIOTAPE_MAJOR, i));
return 0;
class_device_destroy(tape_class, MKDEV(VIOTAPE_MAJOR, i | 0x80));
class_device_destroy(tape_class, MKDEV(VIOTAPE_MAJOR, i));
return 0;
@@
-978,7
+989,7
@@
static int viotape_remove(struct vio_dev *vdev)
* support.
*/
static struct vio_device_id viotape_device_table[] __devinitdata = {
* support.
*/
static struct vio_device_id viotape_device_table[] __devinitdata = {
- { "
byte", "IBM,iSeries-viotape
" },
+ { "
viotape", "
" },
{ "", "" }
};
MODULE_DEVICE_TABLE(vio, viotape_device_table);
{ "", "" }
};
MODULE_DEVICE_TABLE(vio, viotape_device_table);