* add p cc
[mascara-docs.git] / i386 / linux / linux-0.99 / drivers / char / mouse.c
blob107405f82525ed533c87b7071e9fbce97a7e88de
1 /*
2 * linux/kernel/chr_drv/mouse.c
4 * Generic mouse open routine by Johan Myreen
6 * Based on code from Linus
8 * Teemu Rantanen's Microsoft Busmouse support and Derrick Cole's
9 * changes incorporated into 0.97pl4
10 * by Peter Cervasio (pete%q106fm.uucp@wupost.wustl.edu) (08SEP92)
11 * See busmouse.c for particulars.
13 * Made things a lot mode modular - easy to compile in just one or two
14 * of the mouse drivers, as they are now completely independent. Linus.
17 #include <linux/fs.h>
18 #include <linux/errno.h>
19 #include <linux/mouse.h>
20 #include <linux/config.h>
21 #include <linux/kernel.h>
22 #include <linux/major.h>
25 * note that you can remove any or all of the drivers by undefining
26 * the minor values in <linux/mouse.h>
28 extern struct file_operations bus_mouse_fops;
29 extern struct file_operations psaux_fops;
30 extern struct file_operations ms_bus_mouse_fops;
31 extern struct file_operations atixl_busmouse_fops;
33 extern unsigned long bus_mouse_init(unsigned long);
34 extern unsigned long psaux_init(unsigned long);
35 extern unsigned long ms_bus_mouse_init(unsigned long);
36 extern unsigned long atixl_busmouse_init(unsigned long);
38 static int mouse_open(struct inode * inode, struct file * file)
40 int minor = MINOR(inode->i_rdev);
42 switch (minor) {
43 #ifdef CONFIG_BUSMOUSE
44 case BUSMOUSE_MINOR:
45 file->f_op = &bus_mouse_fops;
46 break;
47 #endif
48 #if defined CONFIG_PSMOUSE || defined CONFIG_82C710_MOUSE
49 case PSMOUSE_MINOR:
50 file->f_op = &psaux_fops;
51 break;
52 #endif
53 #ifdef CONFIG_MS_BUSMOUSE
54 case MS_BUSMOUSE_MINOR:
55 file->f_op = &ms_bus_mouse_fops;
56 break;
57 #endif
58 #ifdef CONFIG_ATIXL_BUSMOUSE
59 case ATIXL_BUSMOUSE_MINOR:
60 file->f_op = &atixl_busmouse_fops;
61 break;
62 #endif
63 default:
64 return -ENODEV;
66 return file->f_op->open(inode,file);
69 static struct file_operations mouse_fops = {
70 NULL, /* seek */
71 NULL, /* read */
72 NULL, /* write */
73 NULL, /* readdir */
74 NULL, /* select */
75 NULL, /* ioctl */
76 NULL, /* mmap */
77 mouse_open,
78 NULL /* release */
81 unsigned long mouse_init(unsigned long kmem_start)
83 #ifdef CONFIG_BUSMOUSE
84 kmem_start = bus_mouse_init(kmem_start);
85 #endif
86 #if defined CONFIG_PSMOUSE || defined CONFIG_82C710_MOUSE
87 kmem_start = psaux_init(kmem_start);
88 #endif
89 #ifdef CONFIG_MS_BUSMOUSE
90 kmem_start = ms_bus_mouse_init(kmem_start);
91 #endif
92 #ifdef CONFIG_ATIXL_BUSMOUSE
93 kmem_start = atixl_busmouse_init(kmem_start);
94 #endif
95 if (register_chrdev(MOUSE_MAJOR,"mouse",&mouse_fops))
96 printk("unable to get major %d for mouse devices\n",
97 MOUSE_MAJOR);
98 return kmem_start;