Commit 180eb7b9 authored by Linus Torvalds's avatar Linus Torvalds

Linux-2.1.115 - code freeze.

Ok, we've been in a tentative code freeze for a long time, and now it's
final. I've made a 2.1.115 that I hope is good enough, and I won't be
accepting anything but bug-fixes until 2.2..
There are two long-standing patches that I'm still considering:

 - devfs
 - dynamic fd's

and I kind of expect that they'll go in (devfs is configurable, so if you
don't want it you don't need to care, and the dynamic fd's save some
memory and speed certain things up a bit). The reason they're not in now
is mainly that I've been trying to get everything else off my plate, and I
want to ruminate on them in peace for a while.
Bug-fixes are still (and will always be) accepted,

                Linus
parent 29167632
...@@ -899,6 +899,13 @@ S: Kattreinstr 38 ...@@ -899,6 +899,13 @@ S: Kattreinstr 38
S: D-64295 S: D-64295
S: Germany S: Germany
N: Andi Kleen
E: ak@muc.de
D: network hacker, syncookies
S: Schwalbenstr. 96
S: 85551 Ottobrunn
S: Germany
N: Ian Kluft N: Ian Kluft
E: ikluft@thunder.sbay.org E: ikluft@thunder.sbay.org
W: http://www.kluft.com/~ikluft/ W: http://www.kluft.com/~ikluft/
...@@ -934,13 +941,6 @@ N: Andreas Koensgen ...@@ -934,13 +941,6 @@ N: Andreas Koensgen
E: ajk@iehk.rwth-aachen.de E: ajk@iehk.rwth-aachen.de
D: 6pack driver for AX.25 D: 6pack driver for AX.25
N: Andi Kleen
E: ak@muc.de
D: network hacker, syncookies
S: Schwalbenstr. 96
S: 85551 Ottobrunn
S: Germany
N: Willy Konynenberg N: Willy Konynenberg
E: willy@xos.nl E: willy@xos.nl
W: http://www.xos.nl/ W: http://www.xos.nl/
......
...@@ -1170,6 +1170,26 @@ CONFIG_HUB6 ...@@ -1170,6 +1170,26 @@ CONFIG_HUB6
Say Y here to enable support in the dumb serial driver to support Say Y here to enable support in the dumb serial driver to support
the HUB6 card. the HUB6 card.
Unix98 PTY support
CONFIG_UNIX98_PTYS
Linux traditionally uses BSD-like /dev/ptyxx and /dev/ttyxx names
for pseudo-ttys (PTYs). This scheme has a number or problems. The
GNU C library 2.1 and later, however, supports the Unix98 naming
standard, using a cloning device /dev/ptmx and numbered devices in a
subdirectory /dev/pts/xxx. The device nodes in /dev/pts can be
automatically generated by the devpts virtual filesystem.
Say Y here if you are uncertain, unless you are very short on memory.
Maximum number of Unix98 PTYs in use (0-2048)
CONFIG_UNIX98_PTY_COUNT
The maximum number of Unix98 PTYs that can be used at any one time.
The default is 256, and should be enough for desktop systems,
however, server machines which support incoming telnet/rlogin/ssh
connections may want to increase this. When not in use, each
additional set of 256 PTYs occupy approximately 8K of kernel memory
on 32-bit architectures.
TGA Console Support TGA Console Support
CONFIG_TGA_CONSOLE CONFIG_TGA_CONSOLE
Many Alpha systems (e.g the Multia) are shipped with a graphics card Many Alpha systems (e.g the Multia) are shipped with a graphics card
...@@ -6515,10 +6535,7 @@ CONFIG_DEVPTS_FS ...@@ -6515,10 +6535,7 @@ CONFIG_DEVPTS_FS
/dev/pts/2, for example. The GNU C library glibc 2.1 contains the /dev/pts/2, for example. The GNU C library glibc 2.1 contains the
requisite support for this mode of operation. requisite support for this mode of operation.
This code is also available as a module called devpts.o ( = code Say Y here if you have enabled support for Unix98 PTYs.
which can be inserted in and removed from the running kernel
whenever you want). If you want to compile it as a module, say M
here and read Documentation/modules.txt.
Macintosh partition map support Macintosh partition map support
CONFIG_MAC_PARTITION CONFIG_MAC_PARTITION
......
This diff is collapsed.
This diff is collapsed.
...@@ -248,12 +248,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then ...@@ -248,12 +248,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi fi
endmenu endmenu
source drivers/char/Config.in
source fs/Config.in source fs/Config.in
source fs/nls/Config.in source fs/nls/Config.in
source drivers/char/Config.in
if [ "$CONFIG_VT" = "y" ]; then if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment mainmenu_option next_comment
comment 'Console drivers' comment 'Console drivers'
......
...@@ -196,6 +196,7 @@ CONFIG_DE4X5=y ...@@ -196,6 +196,7 @@ CONFIG_DE4X5=y
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set # CONFIG_EEXPRESS_PRO100 is not set
# CONFIG_NE2K_PCI is not set # CONFIG_NE2K_PCI is not set
# CONFIG_TLAN is not set
# CONFIG_NET_POCKET is not set # CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_DLCI is not set # CONFIG_DLCI is not set
...@@ -222,36 +223,6 @@ CONFIG_DE4X5=y ...@@ -222,36 +223,6 @@ CONFIG_DE4X5=y
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_CD_NO_IDESCSI is not set
#
# Filesystems
#
# CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set
CONFIG_EXT2_FS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
# CONFIG_NFSD is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_CODA_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_UFS_FS is not set
# CONFIG_MAC_PARTITION is not set
# CONFIG_NLS is not set
# #
# Character devices # Character devices
# #
...@@ -261,6 +232,8 @@ CONFIG_SERIAL=y ...@@ -261,6 +232,8 @@ CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set # CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_MOUSE=y CONFIG_MOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set # CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set # CONFIG_BUSMOUSE is not set
...@@ -276,13 +249,43 @@ CONFIG_PSMOUSE=y ...@@ -276,13 +249,43 @@ CONFIG_PSMOUSE=y
# CONFIG_VIDEO_DEV is not set # CONFIG_VIDEO_DEV is not set
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
# CONFIG_JOYSTICK is not set # CONFIG_JOYSTICK is not set
# CONFIG_MISC_RADIO is not set
# #
# Ftape, the floppy tape device driver # Ftape, the floppy tape device driver
# #
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
#
# Filesystems
#
# CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set
CONFIG_EXT2_FS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
# CONFIG_NFSD is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_CODA_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_NLS is not set
# #
# Console drivers # Console drivers
# #
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/mman.h> #include <linux/mman.h>
#include <linux/shm.h> #include <linux/shm.h>
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/file.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -137,13 +138,11 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent, ...@@ -137,13 +138,11 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
{ {
int error; int error;
struct file *file; struct file *file;
struct inode *inode;
struct osf_dirent_callback buf; struct osf_dirent_callback buf;
error = -EBADF; error = -EBADF;
if (fd >= NR_OPEN) file = fget(fd);
goto out;
file = current->files->fd[fd];
if (!file) if (!file)
goto out; goto out;
...@@ -154,17 +153,25 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent, ...@@ -154,17 +153,25 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
error = -ENOTDIR; error = -ENOTDIR;
if (!file->f_op || !file->f_op->readdir) if (!file->f_op || !file->f_op->readdir)
goto out; goto out_putf;
/*
* Get the inode's semaphore to prevent changes
* to the directory while we read it.
*/
inode = file->f_dentry->d_inode;
down(&inode->i_sem);
error = file->f_op->readdir(file, &buf, osf_filldir); error = file->f_op->readdir(file, &buf, osf_filldir);
up(&inode->i_sem);
if (error < 0) if (error < 0)
goto out; goto out_putf;
error = buf.error; error = buf.error;
if (count == buf.count) if (count != buf.count)
goto out;
error = count - buf.count; error = count - buf.count;
out_putf:
fput(file);
out: out:
return error; return error;
} }
...@@ -248,13 +255,17 @@ asmlinkage unsigned long osf_mmap(unsigned long addr, unsigned long len, ...@@ -248,13 +255,17 @@ asmlinkage unsigned long osf_mmap(unsigned long addr, unsigned long len,
lock_kernel(); lock_kernel();
if (flags & (_MAP_HASSEMAPHORE | _MAP_INHERIT | _MAP_UNALIGNED)) if (flags & (_MAP_HASSEMAPHORE | _MAP_INHERIT | _MAP_UNALIGNED))
printk("%s: unimplemented OSF mmap flags %04lx\n", current->comm, flags); printk("%s: unimplemented OSF mmap flags %04lx\n",
current->comm, flags);
if (!(flags & MAP_ANONYMOUS)) { if (!(flags & MAP_ANONYMOUS)) {
if (fd >= NR_OPEN || !(file = current->files->fd[fd])) file = fget(fd);
if (!file)
goto out; goto out;
} }
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
ret = do_mmap(file, addr, len, prot, flags, off); ret = do_mmap(file, addr, len, prot, flags, off);
if (file)
fput(file);
out: out:
unlock_kernel(); unlock_kernel();
return ret; return ret;
...@@ -340,11 +351,13 @@ asmlinkage int osf_fstatfs(unsigned long fd, struct osf_statfs *buffer, unsigned ...@@ -340,11 +351,13 @@ asmlinkage int osf_fstatfs(unsigned long fd, struct osf_statfs *buffer, unsigned
lock_kernel(); lock_kernel();
retval = -EBADF; retval = -EBADF;
if (fd >= NR_OPEN || !(file = current->files->fd[fd])) file = fget(fd);
if (!file)
goto out; goto out;
dentry = file->f_dentry; dentry = file->f_dentry;
if (dentry) if (dentry)
retval = do_osf_statfs(dentry, buffer, bufsiz); retval = do_osf_statfs(dentry, buffer, bufsiz);
fput(file);
out: out:
unlock_kernel(); unlock_kernel();
return retval; return retval;
...@@ -390,38 +403,41 @@ static int getdev(const char *name, int rdonly, struct dentry **dp) ...@@ -390,38 +403,41 @@ static int getdev(const char *name, int rdonly, struct dentry **dp)
if (IS_ERR(dentry)) if (IS_ERR(dentry))
return retval; return retval;
retval = -ENOTBLK;
inode = dentry->d_inode; inode = dentry->d_inode;
if (!S_ISBLK(inode->i_mode)) { if (!S_ISBLK(inode->i_mode))
dput(dentry); goto out_dput;
return -ENOTBLK;
} retval = -EACCES;
if (IS_NODEV(inode)) { if (IS_NODEV(inode))
dput(dentry); goto out_dput;
return -EACCES;
} retval = -ENXIO;
dev = inode->i_rdev; dev = inode->i_rdev;
if (MAJOR(dev) >= MAX_BLKDEV) { if (MAJOR(dev) >= MAX_BLKDEV)
dput(dentry); goto out_dput;
return -ENXIO;
} retval = -ENODEV;
fops = get_blkfops(MAJOR(dev)); fops = get_blkfops(MAJOR(dev));
if (!fops) { if (!fops)
dput(dentry); goto out_dput;
return -ENODEV;
}
if (fops->open) { if (fops->open) {
struct file dummy; struct file dummy;
memset(&dummy, 0, sizeof(dummy)); memset(&dummy, 0, sizeof(dummy));
dummy.f_dentry = dentry; dummy.f_dentry = dentry;
dummy.f_mode = rdonly ? 1 : 3; dummy.f_mode = rdonly ? 1 : 3;
retval = fops->open(inode, &dummy); retval = fops->open(inode, &dummy);
if (retval) { if (retval)
dput(dentry); goto out_dput;
return retval;
}
} }
*dp = dentry; *dp = dentry;
return 0; retval = 0;
out:
return retval;
out_dput:
dput(dentry);
goto out;
} }
static void putdev(struct dentry *dentry) static void putdev(struct dentry *dentry)
...@@ -444,17 +460,19 @@ static int osf_ufs_mount(char *dirname, struct ufs_args *args, int flags) ...@@ -444,17 +460,19 @@ static int osf_ufs_mount(char *dirname, struct ufs_args *args, int flags)
struct dentry *dentry; struct dentry *dentry;
struct cdfs_args tmp; struct cdfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args)); retval = -EFAULT;
if (retval) if (copy_from_user(&tmp, args, sizeof(tmp)))
return retval; goto out;
copy_from_user(&tmp, args, sizeof(tmp));
retval = getdev(tmp.devname, 0, &dentry); retval = getdev(tmp.devname, 0, &dentry);
if (retval) if (retval)
return retval; goto out;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname, "ext2", flags, NULL); retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname,
"ext2", flags, NULL);
if (retval) if (retval)
putdev(dentry); putdev(dentry);
dput(dentry); dput(dentry);
out:
return retval; return retval;
} }
...@@ -464,17 +482,19 @@ static int osf_cdfs_mount(char *dirname, struct cdfs_args *args, int flags) ...@@ -464,17 +482,19 @@ static int osf_cdfs_mount(char *dirname, struct cdfs_args *args, int flags)
struct dentry * dentry; struct dentry * dentry;
struct cdfs_args tmp; struct cdfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args)); retval = -EFAULT;
if (retval) if (copy_from_user(&tmp, args, sizeof(tmp)))
return retval; goto out;
copy_from_user(&tmp, args, sizeof(tmp));
retval = getdev(tmp.devname, 1, &dentry); retval = getdev(tmp.devname, 1, &dentry);
if (retval) if (retval)
return retval; goto out;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname, "iso9660", flags, NULL); retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname,
"iso9660", flags, NULL);
if (retval) if (retval)
putdev(dentry); putdev(dentry);
dput(dentry); dput(dentry);
out:
return retval; return retval;
} }
...@@ -484,10 +504,8 @@ static int osf_procfs_mount(char *dirname, struct procfs_args *args, int flags) ...@@ -484,10 +504,8 @@ static int osf_procfs_mount(char *dirname, struct procfs_args *args, int flags)
int retval; int retval;
struct procfs_args tmp; struct procfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args)); if (copy_from_user(&tmp, args, sizeof(tmp)))
if (retval) return -EFAULT;
return retval;
copy_from_user(&tmp, args, sizeof(tmp));
dev = get_unnamed_dev(); dev = get_unnamed_dev();
if (!dev) if (!dev)
return -ENODEV; return -ENODEV;
...@@ -533,21 +551,22 @@ asmlinkage int osf_utsname(char *name) ...@@ -533,21 +551,22 @@ asmlinkage int osf_utsname(char *name)
{ {
int error; int error;
lock_kernel();
error = verify_area(VERIFY_WRITE, name, 5 * 32);
if (error)
goto out;
down(&uts_sem); down(&uts_sem);
copy_to_user(name + 0, system_utsname.sysname, 32); error = -EFAULT;
copy_to_user(name + 32, system_utsname.nodename, 32); if (copy_to_user(name + 0, system_utsname.sysname, 32))
copy_to_user(name + 64, system_utsname.release, 32); goto out;
copy_to_user(name + 96, system_utsname.version, 32); if (copy_to_user(name + 32, system_utsname.nodename, 32))
copy_to_user(name + 128, system_utsname.machine, 32); goto out;
up(&uts_sem); if (copy_to_user(name + 64, system_utsname.release, 32))
goto out;
if (copy_to_user(name + 96, system_utsname.version, 32))
goto out;
if (copy_to_user(name + 128, system_utsname.machine, 32))
goto out;
error = 0;
out: out:
unlock_kernel(); up(&uts_sem);
return error; return error;
} }
......
...@@ -115,12 +115,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then ...@@ -115,12 +115,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi fi
endmenu endmenu
source drivers/char/Config.in
source fs/Config.in source fs/Config.in
source fs/nls/Config.in source fs/nls/Config.in
source drivers/char/Config.in
if [ "$CONFIG_VT" = "y" ]; then if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment mainmenu_option next_comment
comment 'Console drivers' comment 'Console drivers'
......
...@@ -217,36 +217,6 @@ CONFIG_EEXPRESS_PRO100=y ...@@ -217,36 +217,6 @@ CONFIG_EEXPRESS_PRO100=y
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_CD_NO_IDESCSI is not set
#
# Filesystems
#
# CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set
CONFIG_EXT2_FS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
CONFIG_NFSD=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_CODA_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_AUTOFS_FS=y
# CONFIG_UFS_FS is not set
# CONFIG_MAC_PARTITION is not set
# CONFIG_NLS is not set
# #
# Character devices # Character devices
# #
...@@ -256,6 +226,8 @@ CONFIG_SERIAL=y ...@@ -256,6 +226,8 @@ CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set # CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_MOUSE=y CONFIG_MOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set # CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set # CONFIG_BUSMOUSE is not set
...@@ -277,6 +249,37 @@ CONFIG_82C710_MOUSE=y ...@@ -277,6 +249,37 @@ CONFIG_82C710_MOUSE=y
# #
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
#
# Filesystems
#
# CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set
CONFIG_EXT2_FS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
CONFIG_NFSD=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_CODA_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_AUTOFS_FS=y
# CONFIG_UFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_NLS is not set
# #
# Console drivers # Console drivers
# #
......
...@@ -240,15 +240,6 @@ endmenu ...@@ -240,15 +240,6 @@ endmenu
fi fi
fi fi
source fs/Config.in
if [ "$CONFIG_VME" = "n" ]; then
define_bool CONFIG_FB y
source drivers/video/Config.in
fi
source fs/nls/Config.in
mainmenu_option next_comment mainmenu_option next_comment
comment 'Character devices' comment 'Character devices'
...@@ -343,6 +334,14 @@ if [ "$CONFIG_ATARI" = "y" ]; then ...@@ -343,6 +334,14 @@ if [ "$CONFIG_ATARI" = "y" ]; then
fi fi
endmenu endmenu
source fs/Config.in
if [ "$CONFIG_VME" = "n" ]; then
define_bool CONFIG_FB y
source drivers/video/Config.in
fi
source fs/nls/Config.in
mainmenu_option next_comment mainmenu_option next_comment
comment 'Sound support' comment 'Sound support'
......
...@@ -183,12 +183,12 @@ if [ "$CONFIG_SGI" != "y" ]; then ...@@ -183,12 +183,12 @@ if [ "$CONFIG_SGI" != "y" ]; then
endmenu endmenu
fi fi
source drivers/char/Config.in
source fs/Config.in source fs/Config.in
source fs/nls/Config.in source fs/nls/Config.in
source drivers/char/Config.in
mainmenu_option next_comment mainmenu_option next_comment
comment 'Sound' comment 'Sound'
......
...@@ -51,7 +51,7 @@ CONFIG_SYSCTL=y ...@@ -51,7 +51,7 @@ CONFIG_SYSCTL=y
# CONFIG_MODULES is not set # CONFIG_MODULES is not set
# #
# Floppy, IDE, and other block devices # Block devices
# #
CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDE=y
...@@ -74,6 +74,7 @@ CONFIG_BLK_DEV_IDECD=y ...@@ -74,6 +74,7 @@ CONFIG_BLK_DEV_IDECD=y
# Additional Block Devices # Additional Block Devices
# #
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set # CONFIG_BLK_DEV_XD is not set
...@@ -94,7 +95,6 @@ CONFIG_INET=y ...@@ -94,7 +95,6 @@ CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set # CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set # CONFIG_IP_PNP is not set
# CONFIG_IP_ACCT is not set
# CONFIG_IP_ROUTER is not set # CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set # CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set # CONFIG_NET_IPGRE is not set
...@@ -157,12 +157,11 @@ CONFIG_SCSI_LOGGING=y ...@@ -157,12 +157,11 @@ CONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set # CONFIG_SCSI_NCR53C7xx is not set
CONFIG_SCSI_NCR53C8XX=y CONFIG_SCSI_NCR53C8XX=y
# CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT is not set CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
# CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4
CONFIG_SCSI_NCR53C8XX_SYNC=5 CONFIG_SCSI_NCR53C8XX_SYNC=5
# CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT is not set # CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_PCI2220I is not set
...@@ -174,7 +173,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=5 ...@@ -174,7 +173,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=5
# CONFIG_SCSI_T128 is not set # CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set # CONFIG_SCSI_ULTRASTOR is not set
CONFIG_JAZZ_ESP=y # CONFIG_JAZZ_ESP is not set
# #
# Network device support # Network device support
...@@ -196,9 +195,10 @@ CONFIG_PCNET32=y ...@@ -196,9 +195,10 @@ CONFIG_PCNET32=y
# CONFIG_CS89x0 is not set # CONFIG_CS89x0 is not set
# CONFIG_DE4X5 is not set # CONFIG_DE4X5 is not set
# CONFIG_DEC_ELCP is not set # CONFIG_DEC_ELCP is not set
# CONFIG_DEC_ELCP is not set
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set # CONFIG_EEXPRESS_PRO100 is not set
# CONFIG_NE2K_PCI is not set
# CONFIG_TLAN is not set
# CONFIG_NET_POCKET is not set # CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_DLCI is not set # CONFIG_DLCI is not set
...@@ -221,6 +221,7 @@ CONFIG_PCNET32=y ...@@ -221,6 +221,7 @@ CONFIG_PCNET32=y
# CONFIG_BAYCOM_SER_FDX is not set # CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not set # CONFIG_BAYCOM_SER_HDX is not set
# CONFIG_BAYCOM_PAR is not set # CONFIG_BAYCOM_PAR is not set
# CONFIG_BAYCOM_EPP is not set
# CONFIG_SOUNDMODEM is not set # CONFIG_SOUNDMODEM is not set
# #
...@@ -233,6 +234,31 @@ CONFIG_PCNET32=y ...@@ -233,6 +234,31 @@ CONFIG_PCNET32=y
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_CD_NO_IDESCSI is not set
#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_MOUSE is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_APM is not set
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_VIDEO_DEV is not set
# CONFIG_NVRAM is not set
# CONFIG_JOYSTICK is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# #
# Filesystems # Filesystems
# #
...@@ -260,6 +286,7 @@ CONFIG_LOCKD=y ...@@ -260,6 +286,7 @@ CONFIG_LOCKD=y
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
# CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_MAC_PARTITION is not set # CONFIG_MAC_PARTITION is not set
CONFIG_NLS=y CONFIG_NLS=y
...@@ -293,30 +320,6 @@ CONFIG_NLS_ISO8859_1=y ...@@ -293,30 +320,6 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_9 is not set # CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_KOI8_R is not set # CONFIG_NLS_KOI8_R is not set
#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_MOUSE is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_APM is not set
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_VIDEO_DEV is not set
# CONFIG_NVRAM is not set
# CONFIG_JOYSTICK is not set
# CONFIG_MISC_RADIO is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# #
# Sound # Sound
# #
......
...@@ -168,10 +168,6 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then ...@@ -168,10 +168,6 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi fi
endmenu endmenu
source fs/Config.in
source fs/nls/Config.in
mainmenu_option next_comment mainmenu_option next_comment
comment 'Console drivers' comment 'Console drivers'
source drivers/video/Config.in source drivers/video/Config.in
...@@ -179,6 +175,10 @@ endmenu ...@@ -179,6 +175,10 @@ endmenu
source drivers/char/Config.in source drivers/char/Config.in
source fs/Config.in
source fs/nls/Config.in
mainmenu_option next_comment mainmenu_option next_comment
comment 'Sound' comment 'Sound'
......
# #
# Automatically generated by make menuconfig: don't edit # Automatically generated make config: don't edit
# #
# #
...@@ -56,6 +56,10 @@ CONFIG_PROC_DEVICETREE=y ...@@ -56,6 +56,10 @@ CONFIG_PROC_DEVICETREE=y
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
...@@ -67,6 +71,10 @@ CONFIG_BLK_DEV_IDECD=y ...@@ -67,6 +71,10 @@ CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDEPCI is not set # CONFIG_BLK_DEV_IDEPCI is not set
# CONFIG_BLK_DEV_SL82C105 is not set # CONFIG_BLK_DEV_SL82C105 is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
#
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_MD is not set
...@@ -98,10 +106,18 @@ CONFIG_IP_MULTICAST=y ...@@ -98,10 +106,18 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IP_MROUTE is not set # CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y CONFIG_IP_ALIAS=y
# CONFIG_SYN_COOKIES is not set # CONFIG_SYN_COOKIES is not set
#
# (it is safe to leave these untouched)
#
CONFIG_INET_RARP=y CONFIG_INET_RARP=y
CONFIG_IP_NOSR=y CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
#
#
#
# CONFIG_IPX is not set # CONFIG_IPX is not set
CONFIG_ATALK=m CONFIG_ATALK=m
# CONFIG_X25 is not set # CONFIG_X25 is not set
...@@ -119,11 +135,19 @@ CONFIG_ATALK=m ...@@ -119,11 +135,19 @@ CONFIG_ATALK=m
# SCSI support # SCSI support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_CHR_DEV_SG is not set # CONFIG_CHR_DEV_SG is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_LOGGING is not set
...@@ -209,6 +233,10 @@ CONFIG_DEC_ELCP=m ...@@ -209,6 +233,10 @@ CONFIG_DEC_ELCP=m
# CONFIG_COPS is not set # CONFIG_COPS is not set
# CONFIG_IPDDP is not set # CONFIG_IPDDP is not set
CONFIG_PPP=m CONFIG_PPP=m
#
# CCP compressors for PPP are only built as modules.
#
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set # CONFIG_NET_RADIO is not set
# CONFIG_TR is not set # CONFIG_TR is not set
...@@ -229,6 +257,35 @@ CONFIG_PPP=m ...@@ -229,6 +257,35 @@ CONFIG_PPP=m
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_CD_NO_IDESCSI is not set
#
# Console drivers
#
#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
# CONFIG_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_MOUSE is not set
# CONFIG_UMISC is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_APM is not set
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_VIDEO_DEV is not set
CONFIG_NVRAM=y
# CONFIG_JOYSTICK is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# #
# Filesystems # Filesystems
# #
...@@ -256,8 +313,8 @@ CONFIG_HFS_FS=m ...@@ -256,8 +313,8 @@ CONFIG_HFS_FS=m
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
CONFIG_AUTOFS_FS=y CONFIG_AUTOFS_FS=y
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_ADFS_FS is not set
CONFIG_DEVPTS_FS=y CONFIG_DEVPTS_FS=y
# CONFIG_ADFS_FS is not set
CONFIG_MAC_PARTITION=y CONFIG_MAC_PARTITION=y
CONFIG_NLS=y CONFIG_NLS=y
...@@ -291,33 +348,6 @@ CONFIG_NLS_CODEPAGE_437=y ...@@ -291,33 +348,6 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_ISO8859_9 is not set # CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_KOI8_R is not set # CONFIG_NLS_KOI8_R is not set
#
# Console drivers
#
#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
# CONFIG_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_MOUSE is not set
# CONFIG_UMISC is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_APM is not set
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_VIDEO_DEV is not set
CONFIG_NVRAM=y
# CONFIG_JOYSTICK is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# #
# Sound # Sound
# #
......
...@@ -187,3 +187,4 @@ comment 'Kernel hacking' ...@@ -187,3 +187,4 @@ comment 'Kernel hacking'
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
endmenu endmenu
...@@ -40,6 +40,10 @@ if [ "$CONFIG_SERIAL_NONSTANDARD" = "y" ]; then ...@@ -40,6 +40,10 @@ if [ "$CONFIG_SERIAL_NONSTANDARD" = "y" ]; then
fi fi
tristate 'Hayes ESP serial port support' CONFIG_ESPSERIAL tristate 'Hayes ESP serial port support' CONFIG_ESPSERIAL
fi fi
bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
fi
if [ "$CONFIG_PARPORT" != "n" ]; then if [ "$CONFIG_PARPORT" != "n" ]; then
dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PRINTER" != "n" ]; then if [ "$CONFIG_PRINTER" != "n" ]; then
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
* Diacriticals redone & other small changes, aeb@cwi.nl, June 1993 * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
* Added decr/incr_console, dynamic keymaps, Unicode support, * Added decr/incr_console, dynamic keymaps, Unicode support,
* dynamic function/string keys, led setting, Sept 1994 * dynamic function/string keys, led setting, Sept 1994
*
* `Sticky' modifier keys, 951006. * `Sticky' modifier keys, 951006.
* 11-11-96: SAK should now work in the raw mode (Martin Mares) * 11-11-96: SAK should now work in the raw mode (Martin Mares)
* *
...@@ -19,7 +20,7 @@ ...@@ -19,7 +20,7 @@
* parts by Geert Uytterhoeven, May 1997 * parts by Geert Uytterhoeven, May 1997
* *
* 27-05-97: Added support for the Magic SysRq Key (Martin Mares) * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
* 16-01-97: Dead-key-twice behavior now configurable (Jiri Hanika) * 30-07-98: Dead keys redone, aeb@cwi.nl.
*/ */
#include <linux/config.h> #include <linux/config.h>
...@@ -102,12 +103,13 @@ typedef void (k_handfn)(unsigned char value, char up_flag); ...@@ -102,12 +103,13 @@ typedef void (k_handfn)(unsigned char value, char up_flag);
static k_handfn static k_handfn
do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift, do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift,
do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_ignore; do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2,
do_ignore;
static k_hand key_handler[16] = { static k_hand key_handler[16] = {
do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift, do_self, do_fn, do_spec, do_pad, do_dead, do_cons, do_cur, do_shift,
do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2,
do_ignore, do_ignore, do_ignore do_ignore, do_ignore
}; };
/* Key types processed even in raw modes */ /* Key types processed even in raw modes */
...@@ -136,7 +138,7 @@ const int max_vals[] = { ...@@ -136,7 +138,7 @@ const int max_vals[] = {
255, SIZE(func_table) - 1, SIZE(spec_fn_table) - 1, NR_PAD - 1, 255, SIZE(func_table) - 1, SIZE(spec_fn_table) - 1, NR_PAD - 1,
NR_DEAD - 1, 255, 3, NR_SHIFT - 1, NR_DEAD - 1, 255, 3, NR_SHIFT - 1,
255, NR_ASCII - 1, NR_LOCK - 1, 255, 255, NR_ASCII - 1, NR_LOCK - 1, 255,
NR_LOCK - 1 NR_LOCK - 1, 255
}; };
const int NR_TYPES = SIZE(max_vals); const int NR_TYPES = SIZE(max_vals);
...@@ -345,6 +347,10 @@ static void applkey(int key, char mode) ...@@ -345,6 +347,10 @@ static void applkey(int key, char mode)
static void enter(void) static void enter(void)
{ {
if (diacr) {
put_queue(diacr);
diacr = 0;
}
put_queue(13); put_queue(13);
if (vc_kbd_mode(kbd,VC_CRLF)) if (vc_kbd_mode(kbd,VC_CRLF))
put_queue(10); put_queue(10);
...@@ -541,42 +547,49 @@ static void do_self(unsigned char value, char up_flag) ...@@ -541,42 +547,49 @@ static void do_self(unsigned char value, char up_flag)
static unsigned char ret_diacr[NR_DEAD] = static unsigned char ret_diacr[NR_DEAD] =
{A_GRAVE, A_ACUTE, A_CFLEX, A_TILDE, A_DIAER, A_CEDIL }; {A_GRAVE, A_ACUTE, A_CFLEX, A_TILDE, A_DIAER, A_CEDIL };
/* If a dead key pressed twice, output a character corresponding to it, */ /* Obsolete - for backwards compatibility only */
/* unless overriden in accent_table; otherwise just remember the dead key. */
static void do_dead(unsigned char value, char up_flag) static void do_dead(unsigned char value, char up_flag)
{
value = ret_diacr[value];
do_dead2(value,up_flag);
}
/*
* Handle dead key. Note that we now may have several
* dead keys modifying the same character. Very useful
* for Vietnamese.
*/
static void do_dead2(unsigned char value, char up_flag)
{ {
if (up_flag) if (up_flag)
return; return;
value = ret_diacr[value]; diacr = (diacr ? handle_diacr(value) : value);
if (diacr == value) { /* pressed twice */
put_queue(handle_diacr(value));
return;
}
diacr = value;
} }
/* If space is pressed, return the character corresponding the pending */ /*
/* dead key, otherwise try to combine the two. */ * We have a combining character DIACR here, followed by the character CH.
* If the combination occurs in the table, return the corresponding value.
* Otherwise, if CH is a space or equals DIACR, return DIACR.
* Otherwise, conclude that DIACR was not combining after all,
* queue it and return CH.
*/
unsigned char handle_diacr(unsigned char ch) unsigned char handle_diacr(unsigned char ch)
{ {
int d = diacr; int d = diacr;
int i; int i;
diacr = 0; diacr = 0;
if (ch == ' ')
return d;
for (i = 0; i < accent_table_size; i++) { for (i = 0; i < accent_table_size; i++) {
if (accent_table[i].diacr == d && accent_table[i].base == ch) if (accent_table[i].diacr == d && accent_table[i].base == ch)
return accent_table[i].result; return accent_table[i].result;
} }
if (ch != d) /* dead key pressed twice, put once */ if (ch == ' ' || ch == d)
put_queue(d); return d;
return ch; return ch;
} }
......
...@@ -35,9 +35,9 @@ struct pty_struct { ...@@ -35,9 +35,9 @@ struct pty_struct {
#define PTY_MAGIC 0x5001 #define PTY_MAGIC 0x5001
static struct tty_driver pty_driver, pty_slave_driver; static struct tty_driver pty_driver, pty_slave_driver;
static struct tty_driver old_pty_driver, old_pty_slave_driver;
static int pty_refcount; static int pty_refcount;
/* Note: one set of tables for BSD and one for Unix98 */
static struct tty_struct *pty_table[NR_PTYS]; static struct tty_struct *pty_table[NR_PTYS];
static struct termios *pty_termios[NR_PTYS]; static struct termios *pty_termios[NR_PTYS];
static struct termios *pty_termios_locked[NR_PTYS]; static struct termios *pty_termios_locked[NR_PTYS];
...@@ -46,6 +46,20 @@ static struct termios *ttyp_termios[NR_PTYS]; ...@@ -46,6 +46,20 @@ static struct termios *ttyp_termios[NR_PTYS];
static struct termios *ttyp_termios_locked[NR_PTYS]; static struct termios *ttyp_termios_locked[NR_PTYS];
static struct pty_struct pty_state[NR_PTYS]; static struct pty_struct pty_state[NR_PTYS];
#ifdef CONFIG_UNIX98_PTYS
/* These are global because they are accessed in tty_io.c */
struct tty_driver ptm_driver[UNIX98_NR_MAJORS];
struct tty_driver pts_driver[UNIX98_NR_MAJORS];
static struct tty_struct *ptm_table[UNIX98_NR_MAJORS][NR_PTYS];
static struct termios *ptm_termios[UNIX98_NR_MAJORS][NR_PTYS];
static struct termios *ptm_termios_locked[UNIX98_NR_MAJORS][NR_PTYS];
static struct tty_struct *pts_table[UNIX98_NR_MAJORS][NR_PTYS];
static struct termios *pts_termios[UNIX98_NR_MAJORS][NR_PTYS];
static struct termios *pts_termios_locked[UNIX98_NR_MAJORS][NR_PTYS];
static struct pty_struct ptm_state[UNIX98_NR_MAJORS][NR_PTYS];
#endif
#define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b))
static void pty_close(struct tty_struct * tty, struct file * filp) static void pty_close(struct tty_struct * tty, struct file * filp)
...@@ -267,7 +281,7 @@ static int pty_open(struct tty_struct *tty, struct file * filp) ...@@ -267,7 +281,7 @@ static int pty_open(struct tty_struct *tty, struct file * filp)
line = MINOR(tty->device) - tty->driver.minor_start; line = MINOR(tty->device) - tty->driver.minor_start;
if ((line < 0) || (line >= NR_PTYS)) if ((line < 0) || (line >= NR_PTYS))
goto out; goto out;
pty = pty_state + line; pty = (struct pty_struct *)(tty->driver.driver_state) + line;
tty->driver_data = pty; tty->driver_data = pty;
retval = -EIO; retval = -EIO;
...@@ -294,6 +308,10 @@ static void pty_set_termios(struct tty_struct *tty, struct termios *old_termios) ...@@ -294,6 +308,10 @@ static void pty_set_termios(struct tty_struct *tty, struct termios *old_termios)
__initfunc(int pty_init(void)) __initfunc(int pty_init(void))
{ {
int i;
/* Traditional BSD devices */
memset(&pty_state, 0, sizeof(pty_state)); memset(&pty_state, 0, sizeof(pty_state));
memset(&pty_driver, 0, sizeof(struct tty_driver)); memset(&pty_driver, 0, sizeof(struct tty_driver));
pty_driver.magic = TTY_DRIVER_MAGIC; pty_driver.magic = TTY_DRIVER_MAGIC;
...@@ -314,6 +332,7 @@ __initfunc(int pty_init(void)) ...@@ -314,6 +332,7 @@ __initfunc(int pty_init(void))
pty_driver.table = pty_table; pty_driver.table = pty_table;
pty_driver.termios = pty_termios; pty_driver.termios = pty_termios;
pty_driver.termios_locked = pty_termios_locked; pty_driver.termios_locked = pty_termios_locked;
pty_driver.driver_state = pty_state;
pty_driver.other = &pty_slave_driver; pty_driver.other = &pty_slave_driver;
pty_driver.open = pty_open; pty_driver.open = pty_open;
...@@ -337,37 +356,58 @@ __initfunc(int pty_init(void)) ...@@ -337,37 +356,58 @@ __initfunc(int pty_init(void))
pty_slave_driver.table = ttyp_table; pty_slave_driver.table = ttyp_table;
pty_slave_driver.termios = ttyp_termios; pty_slave_driver.termios = ttyp_termios;
pty_slave_driver.termios_locked = ttyp_termios_locked; pty_slave_driver.termios_locked = ttyp_termios_locked;
pty_slave_driver.driver_state = pty_state;
pty_slave_driver.other = &pty_driver; pty_slave_driver.other = &pty_driver;
old_pty_driver = pty_driver; if (tty_register_driver(&pty_driver))
old_pty_driver.driver_name = "compat_pty_master"; panic("Couldn't register pty driver");
old_pty_driver.proc_entry = 0; if (tty_register_driver(&pty_slave_driver))
old_pty_driver.major = TTY_MAJOR; panic("Couldn't register pty slave driver");
old_pty_driver.minor_start = 128;
old_pty_driver.num = (NR_PTYS > 64) ? 64 : NR_PTYS; /*
old_pty_driver.other = &old_pty_slave_driver; * only the master pty gets this ioctl (which is why we
old_pty_slave_driver = pty_slave_driver;
old_pty_slave_driver.driver_name = "compat_pty_slave";
old_pty_slave_driver.proc_entry = 0;
old_pty_slave_driver.major = TTY_MAJOR;
old_pty_slave_driver.minor_start = 192;
old_pty_slave_driver.num = (NR_PTYS > 64) ? 64 : NR_PTYS;
old_pty_slave_driver.other = &old_pty_driver;
/* only the master pty gets this ioctl (which is why we
* assign it here, instead of up with the rest of the * assign it here, instead of up with the rest of the
* pty_driver initialization. <cananian@alumni.princeton.edu> * pty_driver initialization. <cananian@alumni.princeton.edu>
*/ */
pty_driver.ioctl = pty_ioctl; pty_driver.ioctl = pty_ioctl;
if (tty_register_driver(&pty_driver)) /* Unix98 devices */
panic("Couldn't register pty driver"); #ifdef CONFIG_UNIX98_PTYS
if (tty_register_driver(&pty_slave_driver)) printk("pty: %d Unix98 ptys configured\n", UNIX98_NR_MAJORS*NR_PTYS);
panic("Couldn't register pty slave driver"); for ( i = 0 ; i < UNIX98_NR_MAJORS ; i++ ) {
if (tty_register_driver(&old_pty_driver)) ptm_driver[i] = pty_driver;
panic("Couldn't register compat pty driver"); ptm_driver[i].name = "ptm";
if (tty_register_driver(&old_pty_slave_driver)) ptm_driver[i].proc_entry = 0;
panic("Couldn't register compat pty slave driver"); ptm_driver[i].major = UNIX98_PTY_MASTER_MAJOR+i;
ptm_driver[i].minor_start = 0;
ptm_driver[i].num = NR_PTYS;
ptm_driver[i].other = &pts_driver[i];
ptm_driver[i].table = ptm_table[i];
ptm_driver[i].termios = ptm_termios[i];
ptm_driver[i].termios_locked = ptm_termios_locked[i];
ptm_driver[i].driver_state = ptm_state[i];
pts_driver[i] = pty_slave_driver;
pts_driver[i].name = "pts";
pts_driver[i].proc_entry = 0;
pts_driver[i].major = UNIX98_PTY_SLAVE_MAJOR+i;
pts_driver[i].minor_start = 0;
pts_driver[i].num = ptm_driver[i].num;
pts_driver[i].other = &ptm_driver[i];
pts_driver[i].table = pts_table[i];
pts_driver[i].termios = pts_termios[i];
pts_driver[i].termios_locked = pts_termios_locked[i];
pts_driver[i].driver_state = ptm_state[i];
ptm_driver[i].ioctl = pty_ioctl;
if (tty_register_driver(&ptm_driver[i]))
panic("Couldn't register Unix98 ptm driver major %d",
ptm_driver[i].major);
if (tty_register_driver(&pts_driver[i]))
panic("Couldn't register Unix98 pts driver major %d",
pts_driver[i].major);
}
#endif
return 0; return 0;
} }
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
#include <linux/devpts_fs.h> #include <linux/devpts_fs.h>
#include <linux/file.h> #include <linux/file.h>
...@@ -108,6 +109,10 @@ struct termios tty_std_termios; /* for the benefit of tty drivers */ ...@@ -108,6 +109,10 @@ struct termios tty_std_termios; /* for the benefit of tty drivers */
struct tty_driver *tty_drivers = NULL; /* linked list of tty drivers */ struct tty_driver *tty_drivers = NULL; /* linked list of tty drivers */
struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */ struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */
#ifdef CONFIG_UNIX98_PTYS
extern struct tty_driver ptm_driver[]; /* Unix98 pty masters; for /dev/ptmx */
#endif
/* /*
* redirect is the pseudo-tty that console output * redirect is the pseudo-tty that console output
* is redirected to if asked by TIOCCONS. * is redirected to if asked by TIOCCONS.
...@@ -1230,34 +1235,33 @@ static int tty_open(struct inode * inode, struct file * filp) ...@@ -1230,34 +1235,33 @@ static int tty_open(struct inode * inode, struct file * filp)
device = c->device(c); device = c->device(c);
noctty = 1; noctty = 1;
} }
#ifdef CONFIG_UNIX98_PTYS
if (device == PTMX_DEV) { if (device == PTMX_DEV) {
/* find a free pty. */ /* find a free pty. */
struct tty_driver *driver = tty_drivers; int major, minor, line;
int minor, line; struct tty_driver *driver;
/* find the pty driver */
for (driver=tty_drivers; driver; driver=driver->next)
if (driver->major == PTY_MASTER_MAJOR)
break;
if (!driver) return -ENODEV;
/* find a minor device that is not in use. */ /* find a device that is not in use. */
for (minor=driver->minor_start; retval = -1;
minor<driver->minor_start+driver->num; for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
driver = &ptm_driver[major];
for (minor = driver->minor_start ;
minor < driver->minor_start + driver->num ;
minor++) { minor++) {
device = MKDEV(driver->major, minor); device = MKDEV(driver->major, minor);
retval = init_dev(device, &tty); if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
if (retval==0) break; /* success! */ }
} }
if (minor==driver->minor_start+driver->num) /* no success */
return -EIO; /* no free ptys */ return -EIO; /* no free ptys */
ptmx_found:
set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */ set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
line = minor - driver->minor_start; line = minor - driver->minor_start;
devpts_pty_new(line, MKDEV(driver->other->major, line+driver->other->minor_start)); devpts_pty_new(line + major*NR_PTYS, MKDEV(driver->other->major,
line+driver->other->minor_start));
noctty = 1; noctty = 1;
goto init_dev_done; goto init_dev_done;
} }
#endif
retval = init_dev(device, &tty); retval = init_dev(device, &tty);
if (retval) if (retval)
......
...@@ -100,6 +100,10 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD ...@@ -100,6 +100,10 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
Boot Command line options Boot Command line options
------------------------------ ------------------------------
"aic7xxx=no_reset" - Eliminate the SCSI bus reset during startup.
Some SCSI devices need the initial reset that this option disables
in order to work. If you have problems at bootup, please make sure
you aren't using this option.
"aic7xxx=reverse_scan" - Have the driver register the SCSI cards in the "aic7xxx=reverse_scan" - Have the driver register the SCSI cards in the
reverse of the normal order. This may help those people who have more reverse of the normal order. This may help those people who have more
than one PCI Adaptec controller force the correct controller to be than one PCI Adaptec controller force the correct controller to be
......
...@@ -209,7 +209,7 @@ struct proc_dir_entry proc_scsi_aic7xxx = { ...@@ -209,7 +209,7 @@ struct proc_dir_entry proc_scsi_aic7xxx = {
0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL
}; };
#define AIC7XXX_C_VERSION "5.0.18" #define AIC7XXX_C_VERSION "5.0.20"
#define NUMBER(arr) (sizeof(arr) / sizeof(arr[0])) #define NUMBER(arr) (sizeof(arr) / sizeof(arr[0]))
#define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define MIN(a,b) (((a) < (b)) ? (a) : (b))
...@@ -1051,6 +1051,7 @@ static int aic7xxx_7895_irq_hack = -1; /* This enables a hack to fix ...@@ -1051,6 +1051,7 @@ static int aic7xxx_7895_irq_hack = -1; /* This enables a hack to fix
* 1 == Use the Channel B IRQ * 1 == Use the Channel B IRQ
*/ */
static unsigned int aic7xxx_extended = 0; /* extended translation on? */ static unsigned int aic7xxx_extended = 0; /* extended translation on? */
static unsigned int aic7xxx_no_reset = 0; /* no resetting of SCSI bus */
static int aic7xxx_irq_trigger = -1; /* static int aic7xxx_irq_trigger = -1; /*
* -1 use board setting * -1 use board setting
* 0 use edge triggered * 0 use edge triggered
...@@ -1222,6 +1223,7 @@ aic7xxx_setup(char *s, int *dummy) ...@@ -1222,6 +1223,7 @@ aic7xxx_setup(char *s, int *dummy)
unsigned int *flag; unsigned int *flag;
} options[] = { } options[] = {
{ "extended", &aic7xxx_extended }, { "extended", &aic7xxx_extended },
{ "no_reset", &aic7xxx_no_reset },
{ "irq_trigger", &aic7xxx_irq_trigger }, { "irq_trigger", &aic7xxx_irq_trigger },
{ "verbose", &aic7xxx_verbose }, { "verbose", &aic7xxx_verbose },
{ "reverse_scan",&aic7xxx_reverse_scan }, { "reverse_scan",&aic7xxx_reverse_scan },
...@@ -2292,7 +2294,9 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb) ...@@ -2292,7 +2294,9 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
} }
#define WIDE_INQUIRY_BITS 0x60 #define WIDE_INQUIRY_BITS 0x60
#define SYNC_INQUIRY_BITS 0x10 #define SYNC_INQUIRY_BITS 0x10
if (buffer[7] & WIDE_INQUIRY_BITS) if ( (buffer[7] & WIDE_INQUIRY_BITS) &&
(p->needwdtr_copy & (1<<tindex)) &&
(p->type & AHC_WIDE) )
{ {
p->needwdtr |= (1<<tindex); p->needwdtr |= (1<<tindex);
p->needwdtr_copy |= (1<<tindex); p->needwdtr_copy |= (1<<tindex);
...@@ -3166,17 +3170,17 @@ aic7xxx_reset_current_bus(struct aic7xxx_host *p) ...@@ -3166,17 +3170,17 @@ aic7xxx_reset_current_bus(struct aic7xxx_host *p)
scsiseq = aic_inb(p, SCSISEQ); scsiseq = aic_inb(p, SCSISEQ);
aic_outb(p, scsiseq | SCSIRSTO, SCSISEQ); aic_outb(p, scsiseq | SCSIRSTO, SCSISEQ);
mdelay(1); mdelay(5);
/* Turn off the bus reset. */ /* Turn off the bus reset. */
aic_outb(p, scsiseq & ~SCSIRSTO, SCSISEQ); aic_outb(p, scsiseq & ~SCSIRSTO, SCSISEQ);
aic7xxx_clear_intstat(p); mdelay(2);
aic7xxx_clear_intstat(p);
/* Re-enable reset interrupts. */ /* Re-enable reset interrupts. */
aic_outb(p, aic_inb(p, SIMODE1) | ENSCSIRST, SIMODE1); aic_outb(p, aic_inb(p, SIMODE1) | ENSCSIRST, SIMODE1);
mdelay(1);
} }
/*+F************************************************************************* /*+F*************************************************************************
...@@ -4803,17 +4807,8 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat) ...@@ -4803,17 +4807,8 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
Scsi_Cmnd *cmd; Scsi_Cmnd *cmd;
scbptr = aic_inb(p, WAITING_SCBH); scbptr = aic_inb(p, WAITING_SCBH);
if (scbptr >= p->scb_data->maxhscbs)
{
scb_index = SCB_LIST_NULL;
printk(WARN_LEAD "Bad scbptr %d during SELTO.\n",
p->host_no, -1, -1, -1, scbptr);
}
else
{
aic_outb(p, scbptr, SCBPTR); aic_outb(p, scbptr, SCBPTR);
scb_index = aic_inb(p, SCB_TAG); scb_index = aic_inb(p, SCB_TAG);
}
scb = NULL; scb = NULL;
if (scb_index < p->scb_data->numscbs) if (scb_index < p->scb_data->numscbs)
...@@ -4879,6 +4874,7 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat) ...@@ -4879,6 +4874,7 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
* Restarting the sequencer will stop the selection and make sure devices * Restarting the sequencer will stop the selection and make sure devices
* are allowed to reselect in. * are allowed to reselect in.
*/ */
aic_outb(p, 0, SCSISEQ);
aic_outb(p, aic_inb(p, SIMODE1) & ~ENREQINIT, SIMODE1); aic_outb(p, aic_inb(p, SIMODE1) & ~ENREQINIT, SIMODE1);
p->flags &= ~AHC_HANDLING_REQINITS; p->flags &= ~AHC_HANDLING_REQINITS;
aic_outb(p, CLRSELTIMEO | CLRBUSFREE | CLRREQINIT, CLRSINT1); aic_outb(p, CLRSELTIMEO | CLRBUSFREE | CLRREQINIT, CLRSINT1);
...@@ -6407,7 +6403,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p, ...@@ -6407,7 +6403,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
scsi_conf |= p->scsi_id_b; scsi_conf |= p->scsi_id_b;
aic_outb(p, scsi_conf | (term) ? TERM_ENB : 0, SCSICONF + 1); aic_outb(p, scsi_conf | (term) ? TERM_ENB : 0, SCSICONF + 1);
} }
if (scsi_conf & RESET_SCSI) if ( (scsi_conf & RESET_SCSI) && !(aic7xxx_no_reset) )
{ {
/* Reset SCSI bus B. */ /* Reset SCSI bus B. */
if (aic7xxx_verbose & VERBOSE_PROBE) if (aic7xxx_verbose & VERBOSE_PROBE)
...@@ -6443,7 +6439,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p, ...@@ -6443,7 +6439,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
} }
if (scsi_conf & RESET_SCSI) if ( (scsi_conf & RESET_SCSI) && !(aic7xxx_no_reset) )
{ {
/* Reset SCSI bus A. */ /* Reset SCSI bus A. */
if (aic7xxx_verbose & VERBOSE_PROBE) if (aic7xxx_verbose & VERBOSE_PROBE)
...@@ -6543,6 +6539,11 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p, ...@@ -6543,6 +6539,11 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
} }
} }
/*
* If we reset the bus, then clear the transfer ssettings, else leave
* them be
*/
if ( (scsi_conf & RESET_SCSI) && !(aic7xxx_no_reset) )
aic_outb(p, target_settings, TARG_SCRATCH + i); aic_outb(p, target_settings, TARG_SCRATCH + i);
if (p->needsdtr_copy & (0x01 << i)) if (p->needsdtr_copy & (0x01 << i))
{ {
...@@ -6581,8 +6582,16 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p, ...@@ -6581,8 +6582,16 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
} }
p->needsdtr = p->needsdtr_copy; p->needsdtr = p->needsdtr_copy;
p->needwdtr = p->needwdtr_copy; p->needwdtr = p->needwdtr_copy;
/*
* If we reset the bus, then clear the transfer ssettings, else leave
* them be
*/
if ( (scsi_conf & RESET_SCSI) && !(aic7xxx_no_reset) )
{
aic_outb(p, 0, ULTRA_ENB); aic_outb(p, 0, ULTRA_ENB);
aic_outb(p, 0, ULTRA_ENB + 1); aic_outb(p, 0, ULTRA_ENB + 1);
}
/* /*
* Allocate enough hardware scbs to handle the maximum number of * Allocate enough hardware scbs to handle the maximum number of
...@@ -7024,6 +7033,11 @@ load_seeprom (struct aic7xxx_host *p, unsigned char *sxfrctl1) ...@@ -7024,6 +7033,11 @@ load_seeprom (struct aic7xxx_host *p, unsigned char *sxfrctl1)
target_settings &= ~0x70; target_settings &= ~0x70;
p->ultraenb &= ~(0x01 << i); p->ultraenb &= ~(0x01 << i);
} }
/*
* Don't output these settings if we aren't resetting the bus, instead,
* leave the devices current settings in place
*/
if (!(aic7xxx_no_reset))
aic_outb(p, target_settings, TARG_SCRATCH + i); aic_outb(p, target_settings, TARG_SCRATCH + i);
} }
aic_outb(p, ~(p->discenable & 0xFF), DISC_DSB); aic_outb(p, ~(p->discenable & 0xFF), DISC_DSB);
...@@ -9346,6 +9360,7 @@ aic7xxx_release(struct Scsi_Host *host) ...@@ -9346,6 +9360,7 @@ aic7xxx_release(struct Scsi_Host *host)
if(p->irq) if(p->irq)
free_irq(p->irq, p); free_irq(p->irq, p);
release_region(p->base, MAXREG - MINREG); release_region(p->base, MAXREG - MINREG);
#ifdef MMAPIO
if(p->maddr) if(p->maddr)
{ {
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
...@@ -9354,6 +9369,7 @@ aic7xxx_release(struct Scsi_Host *host) ...@@ -9354,6 +9369,7 @@ aic7xxx_release(struct Scsi_Host *host)
iounmap((void *) (((unsigned long) p->maddr) & PAGE_MASK)); iounmap((void *) (((unsigned long) p->maddr) & PAGE_MASK));
#endif #endif
} }
#endif /* MMAPIO */
prev = NULL; prev = NULL;
next = first_aic7xxx; next = first_aic7xxx;
while(next != NULL) while(next != NULL)
......
/*********************************************************/
/* This file was written by someone, somewhere, sometime */
/* And is released into the Public Domain */
/*********************************************************/
#ifndef _AWACS_DEFS_H_
#define _AWACS_DEFS_H_
/*******************************/
/* AWACs Audio Register Layout */
/*******************************/
struct awacs_regs {
unsigned control; /* Audio control register */
unsigned pad0[3];
unsigned codec_ctrl; /* Codec control register */
unsigned pad1[3];
unsigned codec_stat; /* Codec status register */
unsigned pad2[3];
unsigned clip_count; /* Clipping count register */
unsigned pad3[3];
unsigned byteswap; /* Data is little-endian if 1 */
};
/*******************/
/* Audio Bit Masks */
/*******************/
/* Audio Control Reg Bit Masks */
/* ----- ------- --- --- ----- */
#define MASK_ISFSEL (0xf) /* Input SubFrame Select */
#define MASK_OSFSEL (0xf << 4) /* Output SubFrame Select */
#define MASK_RATE (0x7 << 8) /* Sound Rate */
#define MASK_CNTLERR (0x1 << 11) /* Error */
#define MASK_PORTCHG (0x1 << 12) /* Port Change */
#define MASK_IEE (0x1 << 13) /* Enable Interrupt on Error */
#define MASK_IEPC (0x1 << 14) /* Enable Interrupt on Port Change */
#define MASK_SSFSEL (0x3 << 15) /* Status SubFrame Select */
/* Audio Codec Control Reg Bit Masks */
/* ----- ----- ------- --- --- ----- */
#define MASK_NEWECMD (0x1 << 24) /* Lock: don't write to reg when 1 */
#define MASK_EMODESEL (0x3 << 22) /* Send info out on which frame? */
#define MASK_EXMODEADDR (0x3ff << 12) /* Extended Mode Address -- 10 bits */
#define MASK_EXMODEDATA (0xfff) /* Extended Mode Data -- 12 bits */
/* Audio Codec Control Address Values / Masks */
/* ----- ----- ------- ------- ------ - ----- */
#define MASK_ADDR0 (0x0 << 12) /* Expanded Data Mode Address 0 */
#define MASK_ADDR_MUX MASK_ADDR0 /* Mux Control */
#define MASK_ADDR_GAIN MASK_ADDR0
#define MASK_ADDR1 (0x1 << 12) /* Expanded Data Mode Address 1 */
#define MASK_ADDR_MUTE MASK_ADDR1
#define MASK_ADDR_RATE MASK_ADDR1
#define MASK_ADDR2 (0x2 << 12) /* Expanded Data Mode Address 2 */
#define MASK_ADDR_VOLA MASK_ADDR2 /* Volume Control A -- Headphones */
#define MASK_ADDR_VOLHD MASK_ADDR2
#define MASK_ADDR4 (0x4 << 12) /* Expanded Data Mode Address 4 */
#define MASK_ADDR_VOLC MASK_ADDR4 /* Volume Control C -- Speaker */
#define MASK_ADDR_VOLSPK MASK_ADDR4
/* Address 0 Bit Masks & Macros */
/* ------- - --- ----- - ------ */
#define MASK_GAINRIGHT (0xf) /* Gain Right Mask */
#define MASK_GAINLEFT (0xf << 4) /* Gain Left Mask */
#define MASK_GAINLINE (0x1 << 8) /* Change Gain for Line??? */
#define MASK_GAINMIC (0x0 << 8) /* Change Gain for Mic??? */
#define MASK_MUX_CD (0x1 << 9) /* Select CD in MUX */
#define MASK_MUX_MIC (0x1 << 10) /* Select Mic in MUX */
#define MASK_MUX_AUDIN (0x1 << 11) /* Select Audio In in MUX */
#define MASK_MUX_LINE MASK_MUX_AUDIN
#define GAINRIGHT(x) ((x) & MASK_GAINRIGHT)
#define GAINLEFT(x) (((x) << 4) & MASK_GAINLEFT)
/* Address 1 Bit Masks */
/* ------- - --- ----- */
#define MASK_ADDR1RES1 (0x3) /* Reserved */
#define MASK_RECALIBRATE (0x1 << 2) /* Recalibrate */
#define MASK_SAMPLERATE (0x7 << 3) /* Sample Rate: */
#define MASK_LOOPTHRU (0x1 << 6) /* Loopthrough Enable */
#define MASK_CMUTE (0x1 << 7) /* Output C (Speaker) Mute when 1 */
#define MASK_SPKMUTE MASK_CMUTE
#define MASK_ADDR1RES2 (0x1 << 8) /* Reserved */
#define MASK_AMUTE (0x1 << 9) /* Output A (Headphone) Mute when 1 */
#define MASK_HDMUTE MASK_AMUTE
#define MASK_PAROUT (0x3 << 10) /* Parallel Out (???) */
#define SAMPLERATE_48000 (0x0 << 3) /* 48 or 44.1 kHz */
#define SAMPLERATE_32000 (0x1 << 3) /* 32 or 29.4 kHz */
#define SAMPLERATE_24000 (0x2 << 3) /* 24 or 22.05 kHz */
#define SAMPLERATE_19200 (0x3 << 3) /* 19.2 or 17.64 kHz */
#define SAMPLERATE_16000 (0x4 << 3) /* 16 or 14.7 kHz */
#define SAMPLERATE_12000 (0x5 << 3) /* 12 or 11.025 kHz */
#define SAMPLERATE_9600 (0x6 << 3) /* 9.6 or 8.82 kHz */
#define SAMPLERATE_8000 (0x7 << 3) /* 8 or 7.35 kHz */
/* Address 2 & 4 Bit Masks & Macros */
/* ------- - - - --- ----- - ------ */
#define MASK_OUTVOLRIGHT (0xf) /* Output Right Volume */
#define MASK_ADDR2RES1 (0x2 << 4) /* Reserved */
#define MASK_ADDR4RES1 MASK_ADDR2RES1
#define MASK_OUTVOLLEFT (0xf << 6) /* Output Left Volume */
#define MASK_ADDR2RES2 (0x2 << 10) /* Reserved */
#define MASK_ADDR4RES2 MASK_ADDR2RES2
#define VOLRIGHT(x) (((~(x)) & MASK_OUTVOLRIGHT))
#define VOLLEFT(x) (((~(x)) << 6) & MASK_OUTVOLLEFT)
/* Audio Codec Status Reg Bit Masks */
/* ----- ----- ------ --- --- ----- */
#define MASK_EXTEND (0x1 << 23) /* Extend */
#define MASK_VALID (0x1 << 22) /* Valid Data? */
#define MASK_OFLEFT (0x1 << 21) /* Overflow Left */
#define MASK_OFRIGHT (0x1 << 20) /* Overflow Right */
#define MASK_ERRCODE (0xf << 16) /* Error Code */
#define MASK_REVISION (0xf << 12) /* Revision Number */
#define MASK_MFGID (0xf << 8) /* Mfg. ID */
#define MASK_CODSTATRES (0xf << 4) /* bits 4 - 7 reserved */
#define MASK_INPPORT (0xf) /* Input Port */
#define MASK_HDPCONN 8 /* headphone plugged in */
/* Clipping Count Reg Bit Masks */
/* -------- ----- --- --- ----- */
#define MASK_CLIPLEFT (0xff << 7) /* Clipping Count, Left Channel */
#define MASK_CLIPRIGHT (0xff) /* Clipping Count, Right Channel */
/* DBDMA ChannelStatus Bit Masks */
/* ----- ------------- --- ----- */
#define MASK_CSERR (0x1 << 7) /* Error */
#define MASK_EOI (0x1 << 6) /* End of Input -- only for Input Channel */
#define MASK_CSUNUSED (0x1f << 1) /* bits 1-5 not used */
#define MASK_WAIT (0x1) /* Wait */
/* Various Rates */
/* ------- ----- */
#define RATE_48000 (0x0 << 8) /* 48 kHz */
#define RATE_44100 (0x0 << 8) /* 44.1 kHz */
#define RATE_32000 (0x1 << 8) /* 32 kHz */
#define RATE_29400 (0x1 << 8) /* 29.4 kHz */
#define RATE_24000 (0x2 << 8) /* 24 kHz */
#define RATE_22050 (0x2 << 8) /* 22.05 kHz */
#define RATE_19200 (0x3 << 8) /* 19.2 kHz */
#define RATE_17640 (0x3 << 8) /* 17.64 kHz */
#define RATE_16000 (0x4 << 8) /* 16 kHz */
#define RATE_14700 (0x4 << 8) /* 14.7 kHz */
#define RATE_12000 (0x5 << 8) /* 12 kHz */
#define RATE_11025 (0x5 << 8) /* 11.025 kHz */
#define RATE_9600 (0x6 << 8) /* 9.6 kHz */
#define RATE_8820 (0x6 << 8) /* 8.82 kHz */
#define RATE_8000 (0x7 << 8) /* 8 kHz */
#define RATE_7350 (0x7 << 8) /* 7.35 kHz */
#define RATE_LOW 1 /* HIGH = 48kHz, etc; LOW = 44.1kHz, etc. */
#endif /* _AWACS_DEFS_H_ */
...@@ -72,9 +72,11 @@ if [ "$CONFIG_UFS_FS" != "n" ]; then ...@@ -72,9 +72,11 @@ if [ "$CONFIG_UFS_FS" != "n" ]; then
bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL
bool 'Solaris (x86) partition table support' CONFIG_SOLARIS_X86_PARTITION bool 'Solaris (x86) partition table support' CONFIG_SOLARIS_X86_PARTITION
fi fi
if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
tristate '/dev/pts filesystem for Unix98 PTYs' CONFIG_DEVPTS_FS
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS
tristate '/dev/pts filesystem support (EXPERIMENTAL)' CONFIG_DEVPTS_FS
fi fi
bool 'Macintosh partition map support' CONFIG_MAC_PARTITION bool 'Macintosh partition map support' CONFIG_MAC_PARTITION
endmenu endmenu
...@@ -27,7 +27,8 @@ struct devpts_sb_info { ...@@ -27,7 +27,8 @@ struct devpts_sb_info {
gid_t gid; gid_t gid;
umode_t mode; umode_t mode;
struct inode *inodes[NR_PTYS]; unsigned int max_ptys;
struct inode **inodes;
}; };
#define DEVPTS_SUPER_MAGIC 0x1cd1 #define DEVPTS_SUPER_MAGIC 0x1cd1
......
...@@ -34,7 +34,7 @@ static void devpts_put_super(struct super_block *sb) ...@@ -34,7 +34,7 @@ static void devpts_put_super(struct super_block *sb)
struct inode *inode; struct inode *inode;
int i; int i;
for ( i = 0 ; i < NR_PTYS ; i++ ) { for ( i = 0 ; i < sbi->max_ptys ; i++ ) {
if ( (inode = sbi->inodes[i]) ) { if ( (inode = sbi->inodes[i]) ) {
if ( inode->i_count != 1 ) if ( inode->i_count != 1 )
printk("devpts_put_super: badness: entry %d count %d\n", printk("devpts_put_super: badness: entry %d count %d\n",
...@@ -48,6 +48,7 @@ static void devpts_put_super(struct super_block *sb) ...@@ -48,6 +48,7 @@ static void devpts_put_super(struct super_block *sb)
if ( sbi->next ) if ( sbi->next )
SBI(sbi->next)->back = sbi->back; SBI(sbi->next)->back = sbi->back;
kfree(sbi->inodes);
kfree(sbi); kfree(sbi);
#ifdef MODULE #ifdef MODULE
...@@ -139,7 +140,13 @@ struct super_block *devpts_read_super(struct super_block *s, void *data, ...@@ -139,7 +140,13 @@ struct super_block *devpts_read_super(struct super_block *s, void *data,
goto fail_unlock; goto fail_unlock;
sbi->magic = DEVPTS_SBI_MAGIC; sbi->magic = DEVPTS_SBI_MAGIC;
memset(sbi->inodes, 0, sizeof sbi->inodes); sbi->max_ptys = unix98_max_ptys;
sbi->inodes = kmalloc(sizeof(struct inode *) * sbi->max_ptys, GFP_KERNEL);
if ( !sbi->inodes ) {
kfree(sbi);
goto fail_unlock;
}
memset(sbi->inodes, 0, sizeof(struct inode *) * sbi->max_ptys);
s->u.generic_sbp = (void *) sbi; s->u.generic_sbp = (void *) sbi;
s->s_blocksize = 1024; s->s_blocksize = 1024;
...@@ -252,6 +259,7 @@ static int devpts_statfs(struct super_block *sb, struct statfs *buf, int bufsiz) ...@@ -252,6 +259,7 @@ static int devpts_statfs(struct super_block *sb, struct statfs *buf, int bufsiz)
static void devpts_read_inode(struct inode *inode) static void devpts_read_inode(struct inode *inode)
{ {
ino_t ino = inode->i_ino; ino_t ino = inode->i_ino;
struct devpts_sb_info *sbi = SBI(inode->i_sb);
inode->i_op = NULL; inode->i_op = NULL;
inode->i_mode = 0; inode->i_mode = 0;
...@@ -270,7 +278,7 @@ static void devpts_read_inode(struct inode *inode) ...@@ -270,7 +278,7 @@ static void devpts_read_inode(struct inode *inode)
} }
ino -= 2; ino -= 2;
if ( ino >= NR_PTYS ) if ( ino >= sbi->max_ptys )
return; /* Bogus */ return; /* Bogus */
inode->i_mode = S_IFCHR; inode->i_mode = S_IFCHR;
......
...@@ -98,7 +98,7 @@ static int devpts_root_readdir(struct file *filp, void *dirent, filldir_t filldi ...@@ -98,7 +98,7 @@ static int devpts_root_readdir(struct file *filp, void *dirent, filldir_t filldi
filp->f_pos = ++nr; filp->f_pos = ++nr;
/* fall through */ /* fall through */
default: default:
while ( nr < NR_PTYS+2 ) { while ( nr < sbi->max_ptys ) {
int ptynr = nr - 2; int ptynr = nr - 2;
if ( sbi->inodes[ptynr] ) { if ( sbi->inodes[ptynr] ) {
genptsname(numbuf, ptynr); genptsname(numbuf, ptynr);
......
...@@ -531,15 +531,23 @@ struct dquot *dqget(kdev_t dev, unsigned int id, short type) ...@@ -531,15 +531,23 @@ struct dquot *dqget(kdev_t dev, unsigned int id, short type)
static void add_dquot_ref(kdev_t dev, short type) static void add_dquot_ref(kdev_t dev, short type)
{ {
struct super_block *sb = get_super(dev);
struct file *filp; struct file *filp;
struct inode *inode; struct inode *inode;
if (!sb || !sb->dq_op)
return; /* nothing to do */
for (filp = inuse_filps; filp; filp = filp->f_next) { for (filp = inuse_filps; filp; filp = filp->f_next) {
if (!filp->f_dentry)
continue;
if (filp->f_dentry->d_sb != sb)
continue;
inode = filp->f_dentry->d_inode; inode = filp->f_dentry->d_inode;
if (!inode || inode->i_dev != dev) if (!inode)
continue; continue;
if (filp->f_mode & FMODE_WRITE && inode->i_sb && inode->i_sb->dq_op) { if (filp->f_mode & FMODE_WRITE) {
inode->i_sb->dq_op->initialize(inode, type); sb->dq_op->initialize(inode, type);
inode->i_flags |= S_QUOTA; inode->i_flags |= S_QUOTA;
} }
} }
...@@ -547,16 +555,23 @@ static void add_dquot_ref(kdev_t dev, short type) ...@@ -547,16 +555,23 @@ static void add_dquot_ref(kdev_t dev, short type)
static void reset_dquot_ptrs(kdev_t dev, short type) static void reset_dquot_ptrs(kdev_t dev, short type)
{ {
struct super_block *sb = get_super(dev);
struct file *filp; struct file *filp;
struct inode *inode; struct inode *inode;
if (!sb || !sb->dq_op)
return; /* nothing to do */
for (filp = inuse_filps; filp; filp = filp->f_next) { for (filp = inuse_filps; filp; filp = filp->f_next) {
if (!filp->f_dentry)
continue;
if (filp->f_dentry->d_sb != sb)
continue;
inode = filp->f_dentry->d_inode; inode = filp->f_dentry->d_inode;
if (!inode || inode->i_dev != dev) if (!inode)
continue; continue;
if (IS_QUOTAINIT(inode)) { if (IS_QUOTAINIT(inode)) {
if (inode->i_sb && inode->i_sb->dq_op) sb->dq_op->drop(inode);
inode->i_sb->dq_op->drop(inode);
inode->i_dquot[type] = NODQUOT; inode->i_dquot[type] = NODQUOT;
inode->i_flags &= ~S_QUOTA; inode->i_flags &= ~S_QUOTA;
} }
......
#ifndef __ASM_SMP_H #ifndef __ASM_SMP_H
#define __ASM_SMP_H #define __ASM_SMP_H
#define cpu_logical_map(cpu) (cpu)
#ifdef __SMP__ #ifdef __SMP__
#include <linux/tasks.h> #include <linux/tasks.h>
...@@ -48,6 +46,7 @@ extern __volatile__ int cpu_number_map[NR_CPUS]; ...@@ -48,6 +46,7 @@ extern __volatile__ int cpu_number_map[NR_CPUS];
}) })
#define smp_processor_id() hard_smp_processor_id() #define smp_processor_id() hard_smp_processor_id()
#define cpu_logical_map(cpu) (cpu)
#endif /* __SMP__ */ #endif /* __SMP__ */
......
...@@ -3,10 +3,6 @@ ...@@ -3,10 +3,6 @@
#ifdef __SMP__ #ifdef __SMP__
#error SMP not supported #error SMP not supported
#else
#define cpu_logical_map(cpu) (cpu)
#endif #endif
#endif #endif
...@@ -241,13 +241,5 @@ extern __inline int hard_smp_processor_id(void) ...@@ -241,13 +241,5 @@ extern __inline int hard_smp_processor_id(void)
#define SMP_FROM_INT 1 #define SMP_FROM_INT 1
#define SMP_FROM_SYSCALL 2 #define SMP_FROM_SYSCALL 2
#else
#ifndef ASSEMBLY
extern inline int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif #endif
#endif #endif
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
* *
* Gcc-2.7.x has a nasty bug with empty initializers. * Gcc-2.7.x has a nasty bug with empty initializers.
*/ */
#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8) #if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
typedef struct { } spinlock_t; typedef struct { } spinlock_t;
#define SPIN_LOCK_UNLOCKED { 0 } #define SPIN_LOCK_UNLOCKED { }
#else #else
typedef struct { int gcc_is_buggy; } spinlock_t; typedef struct { int gcc_is_buggy; } spinlock_t;
#define SPIN_LOCK_UNLOCKED { 0 } #define SPIN_LOCK_UNLOCKED { 0 }
......
#ifndef __ASM_MIPS_SMP_H #ifndef __ASM_MIPS_SMP_H
#define __ASM_MIPS_SMP_H #define __ASM_MIPS_SMP_H
#define cpu_logical_map(cpu) (cpu)
#endif /* __ASM_MIPS_SMP_H */ #endif /* __ASM_MIPS_SMP_H */
...@@ -186,13 +186,6 @@ extern __inline__ int hard_smp_processor_id(void) ...@@ -186,13 +186,6 @@ extern __inline__ int hard_smp_processor_id(void)
#define SMP_FROM_SYSCALL 2 #define SMP_FROM_SYSCALL 2
#else /* !(__SMP__) */ #else /* !(__SMP__) */
#ifndef __ASSEMBLY__
extern __inline__ int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF #define NO_PROC_ID 0xFF
......
...@@ -94,13 +94,6 @@ extern void smp_message_pass(int target, int msg, unsigned long data, int wait); ...@@ -94,13 +94,6 @@ extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
#define PROC_CHANGE_PENALTY 20 #define PROC_CHANGE_PENALTY 20
#else /* !(__SMP__) */ #else /* !(__SMP__) */
#ifndef __ASSEMBLY__
extern __inline__ int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF #define NO_PROC_ID 0xFF
......
...@@ -21,23 +21,28 @@ ...@@ -21,23 +21,28 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
#include <linux/tty.h>
#ifdef CONFIG_DEVPTS_FS #ifdef CONFIG_DEVPTS_FS
void devpts_pty_new(int, kdev_t); void devpts_pty_new(int, kdev_t);
void devpts_pty_kill(int); void devpts_pty_kill(int);
#define unix98_max_ptys NR_PTYS * UNIX98_NR_MAJORS;
#elif defined(CONFIG_DEVPTS_FS_MODULE) #elif defined(CONFIG_DEVPTS_FS_MODULE)
#ifdef BUILDING_PTY_C #ifdef BUILDING_PTY_C
void (*devpts_upcall_new)(int,kdev_t) = NULL; void (*devpts_upcall_new)(int,kdev_t) = NULL;
void (*devpts_upcall_kill)(int) = NULL; void (*devpts_upcall_kill)(int) = NULL;
unsigned int unix98_max_ptys = NR_PTYS * UNIX98_NR_MAJORS;
EXPORT_SYMBOL(devpts_upcall_new); EXPORT_SYMBOL(devpts_upcall_new);
EXPORT_SYMBOL(devpts_upcall_kill); EXPORT_SYMBOL(devpts_upcall_kill);
EXPORT_SYMBOL(unix98_max_ptys);
#else #else
extern void (*devpts_upcall_new)(int,kdev_t); extern void (*devpts_upcall_new)(int,kdev_t);
extern void (*devpts_upcall_kill)(int); extern void (*devpts_upcall_kill)(int);
extern unsigned int unix98_max_ptys;
#endif #endif
#ifndef BUILDING_DEVPTS #ifndef BUILDING_DEVPTS
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#define _LINUX_KERNEL_STAT_H #define _LINUX_KERNEL_STAT_H
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/smp.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/tasks.h> #include <linux/tasks.h>
......
...@@ -8,8 +8,12 @@ ...@@ -8,8 +8,12 @@
/* limits */ /* limits */
#define MAX_CHRDEV 128 /*
#define MAX_BLKDEV 128 * Important: Don't change this to 256. Major number 255 is and must be
* reserved for future expansion into a larger dev_t space.
*/
#define MAX_CHRDEV 255
#define MAX_BLKDEV 255
#define UNNAMED_MAJOR 0 #define UNNAMED_MAJOR 0
#define MEM_MAJOR 1 #define MEM_MAJOR 1
...@@ -80,6 +84,10 @@ ...@@ -80,6 +84,10 @@
#define SPECIALIX_NORMAL_MAJOR 75 #define SPECIALIX_NORMAL_MAJOR 75
#define SPECIALIX_CALLOUT_MAJOR 76 #define SPECIALIX_CALLOUT_MAJOR 76
#define UNIX98_PTY_MASTER_MAJOR 128
#define UNIX98_PTY_MAJOR_COUNT 8
#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
/* /*
* Tests for SCSI devices. * Tests for SCSI devices.
*/ */
......
...@@ -64,6 +64,7 @@ extern volatile int smp_msg_id; ...@@ -64,6 +64,7 @@ extern volatile int smp_msg_id;
#define smp_message_pass(t,m,d,w) #define smp_message_pass(t,m,d,w)
#define smp_threads_ready 1 #define smp_threads_ready 1
#define kernel_lock() #define kernel_lock()
#define cpu_logical_map(cpu) 0
#endif #endif
#endif #endif
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
consoles 16 and higher (since it returns a short) */ consoles 16 and higher (since it returns a short) */
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/config.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/major.h>
#include <linux/termios.h> #include <linux/termios.h>
#include <linux/tqueue.h> #include <linux/tqueue.h>
#include <linux/tty_driver.h> #include <linux/tty_driver.h>
...@@ -32,9 +34,25 @@ ...@@ -32,9 +34,25 @@
* (Note: the *_driver.minor_start values 1, 64, 128, 192 are * (Note: the *_driver.minor_start values 1, 64, 128, 192 are
* hardcoded at present.) * hardcoded at present.)
*/ */
#define NR_PTYS 256 #define NR_PTYS 256 /* ptys/major */
#define NR_LDISCS 16 #define NR_LDISCS 16
/*
* Unix98 PTY's can be defined as any multiple of NR_PTYS up to
* UNIX98_PTY_MAJOR_COUNT; this section defines what we need from the
* config options
*/
#ifdef CONFIG_UNIX98_PTYS
# define UNIX98_NR_MAJORS ((CONFIG_UNIX98_PTY_COUNT+NR_PTYS-1)/NR_PTYS)
# if UNIX98_NR_MAJORS <= 0
# undef CONFIG_UNIX98_PTYS
# elif UNIX98_NR_MAJORS > UNIX98_PTY_MAJOR_COUNT
# error Too many Unix98 ptys defined
# undef UNIX98_NR_MAJORS
# define UNIX98_NR_MAJORS UNIX98_PTY_MAJOR_COUNT
# endif
#endif
/* /*
* These are set up by the setup-routine at boot-time: * These are set up by the setup-routine at boot-time:
*/ */
......
...@@ -139,6 +139,7 @@ struct tty_driver { ...@@ -139,6 +139,7 @@ struct tty_driver {
struct tty_struct **table; struct tty_struct **table;
struct termios **termios; struct termios **termios;
struct termios **termios_locked; struct termios **termios_locked;
void *driver_state; /* only used for the PTY driver */
/* /*
* Interface routines from the upper tty layer to the tty * Interface routines from the upper tty layer to the tty
......
...@@ -17,6 +17,7 @@ kconfig.tk: ${TOPDIR}/Makefile ${TOPDIR}/arch/${ARCH}/config.in \ ...@@ -17,6 +17,7 @@ kconfig.tk: ${TOPDIR}/Makefile ${TOPDIR}/arch/${ARCH}/config.in \
cat ${HEADER} >> ./kconfig.tk cat ${HEADER} >> ./kconfig.tk
./tkparse < ../arch/${ARCH}/config.in >> kconfig.tk ./tkparse < ../arch/${ARCH}/config.in >> kconfig.tk
echo "set defaults \"arch/${ARCH}/defconfig\"" >> kconfig.tk echo "set defaults \"arch/${ARCH}/defconfig\"" >> kconfig.tk
echo "set ARCH \"${ARCH}\"" >> kconfig.tk
cat ${TAIL} >> kconfig.tk cat ${TAIL} >> kconfig.tk
chmod 755 kconfig.tk chmod 755 kconfig.tk
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment