diff options
| author | James Simmons <jsimmons@maxwell.earthlink.net> | 2002-07-06 00:12:46 -0700 |
|---|---|---|
| committer | James Simmons <jsimmons@maxwell.earthlink.net> | 2002-07-06 00:12:46 -0700 |
| commit | 1159a2cae8c718d08d7dffab045de53d7a9ea958 (patch) | |
| tree | 0b2cfda04d5906051257cbda65e6a111944026b1 | |
| parent | a9c5e233ae82ca768cb495aa0dedc496c8f660b7 (diff) | |
| parent | a321a55fcbb2c21eb7bc8b7d4b294eefaea9065c (diff) | |
Merge http://linus.bkbits.net/linux-2.5
into maxwell.earthlink.net:/tmp/linus-2.5
| -rw-r--r-- | drivers/input/gameport/Config.help | 4 | ||||
| -rw-r--r-- | drivers/input/joystick/Config.help | 11 | ||||
| -rw-r--r-- | drivers/input/joystick/Config.in | 4 | ||||
| -rw-r--r-- | drivers/input/joystick/joydump.c | 152 | ||||
| -rw-r--r-- | drivers/scsi/ips.c | 4 | ||||
| -rw-r--r-- | fs/driverfs/inode.c | 7 | ||||
| -rw-r--r-- | fs/ramfs/inode.c | 7 | ||||
| -rw-r--r-- | mm/mmap.c | 2 |
8 files changed, 178 insertions, 13 deletions
diff --git a/drivers/input/gameport/Config.help b/drivers/input/gameport/Config.help index 2d66d4e98260..10b849c461c3 100644 --- a/drivers/input/gameport/Config.help +++ b/drivers/input/gameport/Config.help @@ -34,7 +34,7 @@ CONFIG_GAMEPORT_L4 The module will be called lightning.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. -CONFIG_GAMEPORT_EMU10K1 +CONFIG_INPUT_EMU10K1 Say Y here if you have a SoundBlaster Live! or SoundBlaster Audigy card and want to use its gameport. @@ -52,7 +52,7 @@ CONFIG_GAMEPORT_VORTEX The module will be called vortex.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. -CONFIG_GAMEPORT_CS461X +CONFIG_GAMEPORT_CS461x Say Y here if you have a Cirrus CS461x aka "Crystal SoundFusion" PCI audio accelerator and want to use its gameport. diff --git a/drivers/input/joystick/Config.help b/drivers/input/joystick/Config.help index a8998c103900..155f0b83064a 100644 --- a/drivers/input/joystick/Config.help +++ b/drivers/input/joystick/Config.help @@ -1,4 +1,4 @@ -CONFIG_JOYSTICK +CONFIG_INPUT_JOYSTICK If you have a joystick, 6dof controller, gamepad, steering wheel, weapon control system or something like that you can say Y here and the list of supported devices will be displayed. This option @@ -221,3 +221,12 @@ CONFIG_JOYSTICK_AMIJOY The module will be called joy-amiga.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. +CONFIG_INPUT_JOYDUMP + Say Y here if you want to dump data from your joystick into the system + log for debugging purposes. Say N if you are making a production + configuration or aren't sure. + + This driver is also available as a module ( = code which can be + inserted in and removed from the running kernel whenever you want). + The module will be called joydump.o. If you want to compile it as + a module, say M here and read <file:Documentation/modules.txt>. diff --git a/drivers/input/joystick/Config.in b/drivers/input/joystick/Config.in index 25a293ddee3e..bb69101b9b9e 100644 --- a/drivers/input/joystick/Config.in +++ b/drivers/input/joystick/Config.in @@ -22,7 +22,7 @@ dep_tristate ' LogiCad3d Magellan/SpaceMouse 6dof controllers' CONFIG_JOYSTICK_ dep_tristate ' SpaceTec SpaceOrb/Avenger 6dof controllers' CONFIG_JOYSTICK_SPACEORB $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_SERIO dep_tristate ' SpaceTec SpaceBall 6dof controllers' CONFIG_JOYSTICK_SPACEBALL $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_SERIO dep_tristate ' Gravis Stinger gamepad' CONFIG_JOYSTICK_STINGER $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_SERIO -dep_tristate ' Twiddler as as joystick' CONFIG_JOYSTICK_TWIDDLER $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_SERIO +dep_tristate ' Twiddler as a joystick' CONFIG_JOYSTICK_TWIDDLER $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_SERIO dep_tristate ' Multisystem, Sega Genesis, Saturn joysticks and gamepads' CONFIG_JOYSTICK_DB9 $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_PARPORT dep_tristate ' Multisystem, NES, SNES, N64, PSX joysticks and gamepads' CONFIG_JOYSTICK_GAMECON $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK $CONFIG_PARPORT @@ -31,3 +31,5 @@ dep_tristate ' Multisystem joysticks via TurboGraFX device' CONFIG_JOYSTICK_TUR if [ "$CONFIG_AMIGA" = "y" ]; then dep_tristate ' Amiga joysticks' CONFIG_JOYSTICK_AMIJOY $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK fi + +dep_tristate ' Gameport data dumper' CONFIG_INPUT_JOYDUMP $CONFIG_INPUT $CONFIG_INPUT_JOYSTICK diff --git a/drivers/input/joystick/joydump.c b/drivers/input/joystick/joydump.c new file mode 100644 index 000000000000..d64493c0cc04 --- /dev/null +++ b/drivers/input/joystick/joydump.c @@ -0,0 +1,152 @@ +/* + * $Id: joydump.c,v 1.1 2002/01/23 06:56:16 jsimmons Exp $ + * + * Copyright (c) 1996-2001 Vojtech Pavlik + */ + +/* + * This is just a very simple driver that can dump the data + * out of the joystick port into the syslog ... + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: + * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic + */ + +#include <linux/module.h> +#include <linux/gameport.h> +#include <linux/kernel.h> +#include <linux/delay.h> +#include <linux/init.h> + +MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); +MODULE_DESCRIPTION("Gameport data dumper module"); +MODULE_LICENSE("GPL"); + +#define BUF_SIZE 256 + +struct joydump { + unsigned int time; + unsigned char data; +}; + +static void __devinit joydump_connect(struct gameport *gameport, struct gameport_dev *dev) +{ + struct joydump buf[BUF_SIZE]; + int axes[4], buttons; + int i, j, t, timeout; + unsigned long flags; + unsigned char u; + + printk(KERN_INFO "joydump: ,------------------- START ------------------.\n"); + printk(KERN_INFO "joydump: | Dumping gameport%s.\n", gameport->phys); + printk(KERN_INFO "joydump: | Speed: %4d kHz. |\n", gameport->speed); + + if (gameport_open(gameport, dev, GAMEPORT_MODE_RAW)) { + + printk(KERN_INFO "joydump: | Raw mode not available - trying cooked. |\n"); + + if (gameport_open(gameport, dev, GAMEPORT_MODE_COOKED)) { + + printk(KERN_INFO "joydump: | Cooked not available either. Failing. |\n"); + printk(KERN_INFO "joydump: `-------------------- END -------------------'\n"); + return; + } + + gameport_cooked_read(gameport, axes, &buttons); + + for (i = 0; i < 4; i++) + printk(KERN_INFO "joydump: | Axis %d: %4d. |\n", i, axes[i]); + printk(KERN_INFO "joydump: | Buttons %02x. |\n", buttons); + printk(KERN_INFO "joydump: `-------------------- END -------------------'\n"); + } + + timeout = gameport_time(gameport, 10000); /* 10 ms */ + t = 0; + i = 1; + + save_flags(flags); + cli(); + + u = gameport_read(gameport); + + buf[0].data = u; + buf[0].time = t; + + gameport_trigger(gameport); + + while (i < BUF_SIZE && t < timeout) { + + buf[i].data = gameport_read(gameport); + + if (buf[i].data ^ u) { + u = buf[i].data; + buf[i].time = t; + i++; + } + t++; + } + + restore_flags(flags); + +/* + * Dump data. + */ + + t = i; + + printk(KERN_INFO "joydump: >------------------- DATA -------------------<\n"); + printk(KERN_INFO "joydump: | index: %3d delta: %3d.%02d us data: ", 0, 0, 0); + for (j = 7; j >= 0; j--) + printk("%d",(buf[0].data >> j) & 1); + printk(" |\n"); + for (i = 1; i < t; i++) { + printk(KERN_INFO "joydump: | index: %3d delta: %3d us data: ", + i, buf[i].time - buf[i-1].time); + for (j = 7; j >= 0; j--) + printk("%d",(buf[i].data >> j) & 1); + printk(" |\n"); + } + + printk(KERN_INFO "joydump: `-------------------- END -------------------'\n"); +} + +static void __devexit joydump_disconnect(struct gameport *gameport) +{ + gameport_close(gameport); +} + +static struct gameport_dev joydump_dev = { + connect: joydump_connect, + disconnect: joydump_disconnect, +}; + +static int __init joydump_init(void) +{ + gameport_register_device(&joydump_dev); + return 0; +} + +static void __exit joydump_exit(void) +{ + gameport_unregister_device(&joydump_dev); +} + +module_init(joydump_init); +module_exit(joydump_exit); diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index ad14e1ba25f7..be8f9cee7e88 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c @@ -596,6 +596,7 @@ ips_setup(char *ips_str, int *dummy) { } return (1); +} __setup("ips=", ips_setup); @@ -632,11 +633,10 @@ __setup("ips=", ips_setup); } } } +} #endif -} - /****************************************************************************/ /* */ /* Routine Name: ips_detect */ diff --git a/fs/driverfs/inode.c b/fs/driverfs/inode.c index 2fd9126199b2..e6a098cdd04b 100644 --- a/fs/driverfs/inode.c +++ b/fs/driverfs/inode.c @@ -119,6 +119,9 @@ struct inode *driverfs_get_inode(struct super_block *sb, int mode, int dev) case S_IFDIR: inode->i_op = &driverfs_dir_inode_operations; inode->i_fop = &simple_dir_operations; + + /* directory inodes start off with i_nlink == 2 (for "." entry) */ + inode->i_nlink++; break; case S_IFLNK: inode->i_op = &page_symlink_inode_operations; @@ -149,10 +152,8 @@ static int driverfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) lock_kernel(); dentry->d_op = &driverfs_dentry_dir_ops; res = driverfs_mknod(dir, dentry, mode | S_IFDIR, 0); - if (!res) { + if (!res) dir->i_nlink++; - dentry->d_inode->i_nlink++; - } unlock_kernel(); return res; } diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index 7d41fc6389f2..1ed057e963f2 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c @@ -102,6 +102,9 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, int dev) case S_IFDIR: inode->i_op = &ramfs_dir_inode_operations; inode->i_fop = &simple_dir_operations; + + /* directory inodes start off with i_nlink == 2 (for "." entry) */ + inode->i_nlink++; break; case S_IFLNK: inode->i_op = &page_symlink_inode_operations; @@ -131,10 +134,8 @@ static int ramfs_mknod(struct inode *dir, struct dentry *dentry, int mode, int d static int ramfs_mkdir(struct inode * dir, struct dentry * dentry, int mode) { int retval = ramfs_mknod(dir, dentry, mode | S_IFDIR, 0); - if (!retval) { + if (!retval) dir->i_nlink++; - dentry->d_inode->i_nlink++; - } return retval; } diff --git a/mm/mmap.c b/mm/mmap.c index 7c1badcd5155..384d1ff87f87 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1121,7 +1121,6 @@ void exit_mmap(struct mm_struct * mm) unsigned long end = mpnt->vm_end; mm->map_count--; - remove_shared_vm_struct(mpnt); unmap_page_range(tlb, mpnt, start, end); mpnt = mpnt->vm_next; } @@ -1148,6 +1147,7 @@ void exit_mmap(struct mm_struct * mm) */ while (mpnt) { struct vm_area_struct * next = mpnt->vm_next; + remove_shared_vm_struct(mpnt); if (mpnt->vm_ops) { if (mpnt->vm_ops->close) mpnt->vm_ops->close(mpnt); |
