/* * Atari Mouse Driver for Linux * by Robert de Vries (robert@and.nl) 19Jul93 * * 16 Nov 1994 Andreas Schwab * Compatibility with busmouse * Support for three button mouse (shamelessly stolen from MiNT) * third button wired to one of the joystick directions on joystick 1 * * 1996/02/11 Andreas Schwab * Module support * Allow multiple open's * * Converted to use new generic busmouse code. 5 Apr 1998 * Russell King */ #include #include #include #include #include #include #include #include #include #include #include #include #include "busmouse.h" static int msedev; static int mouse_threshold[2] = {2,2}; MODULE_PARM(mouse_threshold, "2i"); extern int atari_mouse_buttons; static void atari_mouse_interrupt(char *buf) { int buttons; /* ikbd_mouse_disable(); */ buttons = ((buf[0] & 1) | ((buf[0] & 2) << 1) | (atari_mouse_buttons & 2)); atari_mouse_buttons = buttons; busmouse_add_movementbuttons(msedev, buf[1], -buf[2], buttons ^ 7); /* ikbd_mouse_rel_pos(); */ } static int release_mouse(struct inode *inode, struct file *file) { ikbd_mouse_disable(); atari_mouse_interrupt_hook = NULL; return 0; } static int open_mouse(struct inode *inode, struct file *file) { atari_mouse_buttons = 0; ikbd_mouse_y0_top (); ikbd_mouse_thresh (mouse_threshold[0], mouse_threshold[1]); ikbd_mouse_rel_pos(); atari_mouse_interrupt_hook = atari_mouse_interrupt; return 0; } static struct busmouse atarimouse = { ATARIMOUSE_MINOR, "atarimouse", THIS_MODULE, open_mouse, release_mouse, 0 }; static int __init atari_mouse_init(void) { if (!MACH_IS_ATARI) return -ENODEV; msedev = register_busmouse(&atarimouse); if (msedev < 0) printk(KERN_WARNING "Unable to register Atari mouse driver.\n"); else printk(KERN_INFO "Atari mouse installed.\n"); return msedev < 0 ? msedev : 0; } #ifndef MODULE #define MIN_THRESHOLD 1 #define MAX_THRESHOLD 20 /* more seems not reasonable... */ static int __init atari_mouse_setup( char *str ) { int ints[8]; str = get_options(str, ARRAY_SIZE(ints), ints); if (ints[0] < 1) { printk(KERN_ERR "atari_mouse_setup: no arguments!\n" ); return 0; } else if (ints[0] > 2) { printk(KERN_WARNING "atari_mouse_setup: too many arguments\n" ); } if (ints[1] < MIN_THRESHOLD || ints[1] > MAX_THRESHOLD) printk(KERN_WARNING "atari_mouse_setup: bad threshold value (ignored)\n" ); else { mouse_threshold[0] = ints[1]; mouse_threshold[1] = ints[1]; if (ints[0] > 1) { if (ints[2] < MIN_THRESHOLD || ints[2] > MAX_THRESHOLD) printk(KERN_WARNING "atari_mouse_setup: bad threshold value (ignored)\n" ); else mouse_threshold[1] = ints[2]; } } return 1; } __setup("atarimouse=",atari_mouse_setup); #endif /* !MODULE */ static void __exit atari_mouse_cleanup (void) { unregister_busmouse(msedev); } module_init(atari_mouse_init); module_exit(atari_mouse_cleanup); MODULE_LICENSE("GPL");