summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Simmons <jsimmons@maxwell.earthlink.net>2002-07-06 00:12:46 -0700
committerJames Simmons <jsimmons@maxwell.earthlink.net>2002-07-06 00:12:46 -0700
commit1159a2cae8c718d08d7dffab045de53d7a9ea958 (patch)
tree0b2cfda04d5906051257cbda65e6a111944026b1
parenta9c5e233ae82ca768cb495aa0dedc496c8f660b7 (diff)
parenta321a55fcbb2c21eb7bc8b7d4b294eefaea9065c (diff)
Merge http://linus.bkbits.net/linux-2.5
into maxwell.earthlink.net:/tmp/linus-2.5
-rw-r--r--drivers/input/gameport/Config.help4
-rw-r--r--drivers/input/joystick/Config.help11
-rw-r--r--drivers/input/joystick/Config.in4
-rw-r--r--drivers/input/joystick/joydump.c152
-rw-r--r--drivers/scsi/ips.c4
-rw-r--r--fs/driverfs/inode.c7
-rw-r--r--fs/ramfs/inode.c7
-rw-r--r--mm/mmap.c2
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);