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
S: D-64295
S: Germany
N: Andi Kleen
E: ak@muc.de
D: network hacker, syncookies
S: Schwalbenstr. 96
S: 85551 Ottobrunn
S: Germany
N: Ian Kluft
E: ikluft@thunder.sbay.org
W: http://www.kluft.com/~ikluft/
......@@ -934,13 +941,6 @@ N: Andreas Koensgen
E: ajk@iehk.rwth-aachen.de
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
E: willy@xos.nl
W: http://www.xos.nl/
......
......@@ -1170,6 +1170,26 @@ CONFIG_HUB6
Say Y here to enable support in the dumb serial driver to support
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
CONFIG_TGA_CONSOLE
Many Alpha systems (e.g the Multia) are shipped with a graphics card
......@@ -6515,10 +6535,7 @@ CONFIG_DEVPTS_FS
/dev/pts/2, for example. The GNU C library glibc 2.1 contains the
requisite support for this mode of operation.
This code is also available as a module called devpts.o ( = code
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.
Say Y here if you have enabled support for Unix98 PTYs.
Macintosh partition map support
CONFIG_MAC_PARTITION
......
This diff is collapsed.
This diff is collapsed.
......@@ -248,12 +248,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi
endmenu
source drivers/char/Config.in
source fs/Config.in
source fs/nls/Config.in
source drivers/char/Config.in
if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment
comment 'Console drivers'
......
......@@ -196,6 +196,7 @@ CONFIG_DE4X5=y
# CONFIG_DGRS 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_FDDI is not set
# CONFIG_DLCI is not set
......@@ -222,36 +223,6 @@ CONFIG_DE4X5=y
#
# 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
#
......@@ -261,6 +232,8 @@ 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=y
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
......@@ -276,13 +249,43 @@ CONFIG_PSMOUSE=y
# 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
#
# 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
#
......
......@@ -30,6 +30,7 @@
#include <linux/mman.h>
#include <linux/shm.h>
#include <linux/poll.h>
#include <linux/file.h>
#include <asm/fpu.h>
#include <asm/io.h>
......@@ -137,13 +138,11 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
{
int error;
struct file *file;
struct inode *inode;
struct osf_dirent_callback buf;
error = -EBADF;
if (fd >= NR_OPEN)
goto out;
file = current->files->fd[fd];
file = fget(fd);
if (!file)
goto out;
......@@ -154,17 +153,25 @@ asmlinkage int osf_getdirentries(unsigned int fd, struct osf_dirent *dirent,
error = -ENOTDIR;
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);
up(&inode->i_sem);
if (error < 0)
goto out;
goto out_putf;
error = buf.error;
if (count == buf.count)
goto out;
if (count != buf.count)
error = count - buf.count;
error = count - buf.count;
out_putf:
fput(file);
out:
return error;
}
......@@ -248,13 +255,17 @@ asmlinkage unsigned long osf_mmap(unsigned long addr, unsigned long len,
lock_kernel();
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 (fd >= NR_OPEN || !(file = current->files->fd[fd]))
file = fget(fd);
if (!file)
goto out;
}
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
ret = do_mmap(file, addr, len, prot, flags, off);
if (file)
fput(file);
out:
unlock_kernel();
return ret;
......@@ -340,11 +351,13 @@ asmlinkage int osf_fstatfs(unsigned long fd, struct osf_statfs *buffer, unsigned
lock_kernel();
retval = -EBADF;
if (fd >= NR_OPEN || !(file = current->files->fd[fd]))
file = fget(fd);
if (!file)
goto out;
dentry = file->f_dentry;
if (dentry)
retval = do_osf_statfs(dentry, buffer, bufsiz);
fput(file);
out:
unlock_kernel();
return retval;
......@@ -390,38 +403,41 @@ static int getdev(const char *name, int rdonly, struct dentry **dp)
if (IS_ERR(dentry))
return retval;
retval = -ENOTBLK;
inode = dentry->d_inode;
if (!S_ISBLK(inode->i_mode)) {
dput(dentry);
return -ENOTBLK;
}
if (IS_NODEV(inode)) {
dput(dentry);
return -EACCES;
}
if (!S_ISBLK(inode->i_mode))
goto out_dput;
retval = -EACCES;
if (IS_NODEV(inode))
goto out_dput;
retval = -ENXIO;
dev = inode->i_rdev;
if (MAJOR(dev) >= MAX_BLKDEV) {
dput(dentry);
return -ENXIO;
}
if (MAJOR(dev) >= MAX_BLKDEV)
goto out_dput;
retval = -ENODEV;
fops = get_blkfops(MAJOR(dev));
if (!fops) {
dput(dentry);
return -ENODEV;
}
if (!fops)
goto out_dput;
if (fops->open) {
struct file dummy;
memset(&dummy, 0, sizeof(dummy));
dummy.f_dentry = dentry;
dummy.f_mode = rdonly ? 1 : 3;
retval = fops->open(inode, &dummy);
if (retval) {
dput(dentry);
return retval;
}
if (retval)
goto out_dput;
}
*dp = dentry;
return 0;
retval = 0;
out:
return retval;
out_dput:
dput(dentry);
goto out;
}
static void putdev(struct dentry *dentry)
......@@ -444,17 +460,19 @@ static int osf_ufs_mount(char *dirname, struct ufs_args *args, int flags)
struct dentry *dentry;
struct cdfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args));
if (retval)
return retval;
copy_from_user(&tmp, args, sizeof(tmp));
retval = -EFAULT;
if (copy_from_user(&tmp, args, sizeof(tmp)))
goto out;
retval = getdev(tmp.devname, 0, &dentry);
if (retval)
return retval;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname, "ext2", flags, NULL);
goto out;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname,
"ext2", flags, NULL);
if (retval)
putdev(dentry);
dput(dentry);
out:
return retval;
}
......@@ -464,17 +482,19 @@ static int osf_cdfs_mount(char *dirname, struct cdfs_args *args, int flags)
struct dentry * dentry;
struct cdfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args));
if (retval)
return retval;
copy_from_user(&tmp, args, sizeof(tmp));
retval = -EFAULT;
if (copy_from_user(&tmp, args, sizeof(tmp)))
goto out;
retval = getdev(tmp.devname, 1, &dentry);
if (retval)
return retval;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname, "iso9660", flags, NULL);
goto out;
retval = do_mount(dentry->d_inode->i_rdev, tmp.devname, dirname,
"iso9660", flags, NULL);
if (retval)
putdev(dentry);
dput(dentry);
out:
return retval;
}
......@@ -484,10 +504,8 @@ static int osf_procfs_mount(char *dirname, struct procfs_args *args, int flags)
int retval;
struct procfs_args tmp;
retval = verify_area(VERIFY_READ, args, sizeof(*args));
if (retval)
return retval;
copy_from_user(&tmp, args, sizeof(tmp));
if (copy_from_user(&tmp, args, sizeof(tmp)))
return -EFAULT;
dev = get_unnamed_dev();
if (!dev)
return -ENODEV;
......@@ -533,21 +551,22 @@ asmlinkage int osf_utsname(char *name)
{
int error;
lock_kernel();
error = verify_area(VERIFY_WRITE, name, 5 * 32);
if (error)
goto out;
down(&uts_sem);
copy_to_user(name + 0, system_utsname.sysname, 32);
copy_to_user(name + 32, system_utsname.nodename, 32);
copy_to_user(name + 64, system_utsname.release, 32);
copy_to_user(name + 96, system_utsname.version, 32);
copy_to_user(name + 128, system_utsname.machine, 32);
up(&uts_sem);
error = -EFAULT;
if (copy_to_user(name + 0, system_utsname.sysname, 32))
goto out;
if (copy_to_user(name + 32, system_utsname.nodename, 32))
goto out;
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:
unlock_kernel();
up(&uts_sem);
return error;
}
......
......@@ -115,12 +115,12 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi
endmenu
source drivers/char/Config.in
source fs/Config.in
source fs/nls/Config.in
source drivers/char/Config.in
if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment
comment 'Console drivers'
......
......@@ -217,36 +217,6 @@ CONFIG_EEXPRESS_PRO100=y
#
# 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
#
......@@ -256,6 +226,8 @@ 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=y
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
......@@ -277,6 +249,37 @@ CONFIG_82C710_MOUSE=y
#
# 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
#
......
......@@ -240,15 +240,6 @@ endmenu
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
comment 'Character devices'
......@@ -343,6 +334,14 @@ if [ "$CONFIG_ATARI" = "y" ]; then
fi
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
comment 'Sound support'
......
......@@ -183,12 +183,12 @@ if [ "$CONFIG_SGI" != "y" ]; then
endmenu
fi
source drivers/char/Config.in
source fs/Config.in
source fs/nls/Config.in
source drivers/char/Config.in
mainmenu_option next_comment
comment 'Sound'
......
......@@ -51,7 +51,7 @@ CONFIG_SYSCTL=y
# CONFIG_MODULES is not set
#
# Floppy, IDE, and other block devices
# Block devices
#
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_IDE=y
......@@ -74,6 +74,7 @@ CONFIG_BLK_DEV_IDECD=y
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
......@@ -94,7 +95,6 @@ CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_IP_ACCT is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
......@@ -157,12 +157,11 @@ CONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
CONFIG_SCSI_NCR53C8XX=y
# CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT is not set
# CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4
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_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
......@@ -174,7 +173,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=5
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
CONFIG_JAZZ_ESP=y
# CONFIG_JAZZ_ESP is not set
#
# Network device support
......@@ -196,9 +195,10 @@ CONFIG_PCNET32=y
# CONFIG_CS89x0 is not set
# CONFIG_DE4X5 is not set
# CONFIG_DEC_ELCP is not set
# CONFIG_DEC_ELCP is not set
# CONFIG_DGRS 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_FDDI is not set
# CONFIG_DLCI is not set
......@@ -221,6 +221,7 @@ CONFIG_PCNET32=y
# CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not set
# CONFIG_BAYCOM_PAR is not set
# CONFIG_BAYCOM_EPP is not set
# CONFIG_SOUNDMODEM is not set
#
......@@ -233,6 +234,31 @@ CONFIG_PCNET32=y
#
# 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
#
......@@ -260,6 +286,7 @@ CONFIG_LOCKD=y
# 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=y
......@@ -293,30 +320,6 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_9 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
#
......
......@@ -168,10 +168,6 @@ if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
fi
endmenu
source fs/Config.in
source fs/nls/Config.in
mainmenu_option next_comment
comment 'Console drivers'
source drivers/video/Config.in
......@@ -179,6 +175,10 @@ endmenu
source drivers/char/Config.in
source fs/Config.in
source fs/nls/Config.in
mainmenu_option next_comment
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
#
# CONFIG_BLK_DEV_FD is not set
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_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
......@@ -67,6 +71,10 @@ CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDEPCI is not set
# CONFIG_BLK_DEV_SL82C105 is not set
# CONFIG_IDE_CHIPSETS is not set
#
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
......@@ -98,10 +106,18 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
# CONFIG_SYN_COOKIES is not set
#
# (it is safe to leave these untouched)
#
CONFIG_INET_RARP=y
CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
#
#
#
# CONFIG_IPX is not set
CONFIG_ATALK=m
# CONFIG_X25 is not set
......@@ -119,11 +135,19 @@ CONFIG_ATALK=m
# SCSI support
#
CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
# 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_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set
......@@ -209,6 +233,10 @@ CONFIG_DEC_ELCP=m
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
CONFIG_PPP=m
#
# CCP compressors for PPP are only built as modules.
#
# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
# CONFIG_TR is not set
......@@ -229,6 +257,35 @@ CONFIG_PPP=m
#
# 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
#
......@@ -256,8 +313,8 @@ CONFIG_HFS_FS=m
# CONFIG_ROMFS_FS is not set
CONFIG_AUTOFS_FS=y
# CONFIG_UFS_FS is not set
# CONFIG_ADFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_ADFS_FS is not set
CONFIG_MAC_PARTITION=y
CONFIG_NLS=y
......@@ -291,33 +348,6 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_ISO8859_9 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
#
......
......@@ -187,3 +187,4 @@ comment 'Kernel hacking'
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
endmenu
......@@ -40,6 +40,10 @@ if [ "$CONFIG_SERIAL_NONSTANDARD" = "y" ]; then
fi
tristate 'Hayes ESP serial port support' CONFIG_ESPSERIAL
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
dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PRINTER" != "n" ]; then
......
......@@ -11,6 +11,7 @@
* Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
* Added decr/incr_console, dynamic keymaps, Unicode support,
* dynamic function/string keys, led setting, Sept 1994
*
* `Sticky' modifier keys, 951006.
* 11-11-96: SAK should now work in the raw mode (Martin Mares)
*
......@@ -19,7 +20,7 @@
* parts by Geert Uytterhoeven, May 1997
*
* 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>
......@@ -102,12 +103,13 @@ typedef void (k_handfn)(unsigned char value, char up_flag);
static k_handfn
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] = {
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_ignore, do_ignore
do_meta, do_ascii, do_lock, do_lowercase, do_slock, do_dead2,
do_ignore, do_ignore
};
/* Key types processed even in raw modes */
......@@ -136,7 +138,7 @@ const int max_vals[] = {
255, SIZE(func_table) - 1, SIZE(spec_fn_table) - 1, NR_PAD - 1,
NR_DEAD - 1, 255, 3, NR_SHIFT - 1,
255, NR_ASCII - 1, NR_LOCK - 1, 255,
NR_LOCK - 1
NR_LOCK - 1, 255
};
const int NR_TYPES = SIZE(max_vals);
......@@ -345,6 +347,10 @@ static void applkey(int key, char mode)
static void enter(void)
{
if (diacr) {
put_queue(diacr);
diacr = 0;
}
put_queue(13);
if (vc_kbd_mode(kbd,VC_CRLF))
put_queue(10);
......@@ -541,42 +547,49 @@ static void do_self(unsigned char value, char up_flag)
static unsigned char ret_diacr[NR_DEAD] =
{A_GRAVE, A_ACUTE, A_CFLEX, A_TILDE, A_DIAER, A_CEDIL };
/* If a dead key pressed twice, output a character corresponding to it, */
/* unless overriden in accent_table; otherwise just remember the dead key. */
/* Obsolete - for backwards compatibility only */
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)
return;
value = ret_diacr[value];
if (diacr == value) { /* pressed twice */
put_queue(handle_diacr(value));
return;
}
diacr = value;
diacr = (diacr ? handle_diacr(value) : 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)
{
int d = diacr;
int i;
diacr = 0;
if (ch == ' ')
return d;
for (i = 0; i < accent_table_size; i++) {
if (accent_table[i].diacr == d && accent_table[i].base == ch)
return accent_table[i].result;
}
if (ch != d) /* dead key pressed twice, put once */
put_queue(d);
if (ch == ' ' || ch == d)
return d;
return ch;
}
......
......@@ -35,9 +35,9 @@ struct pty_struct {
#define PTY_MAGIC 0x5001
static struct tty_driver pty_driver, pty_slave_driver;
static struct tty_driver old_pty_driver, old_pty_slave_driver;
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 termios *pty_termios[NR_PTYS];
static struct termios *pty_termios_locked[NR_PTYS];
......@@ -46,6 +46,20 @@ static struct termios *ttyp_termios[NR_PTYS];
static struct termios *ttyp_termios_locked[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))
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)
line = MINOR(tty->device) - tty->driver.minor_start;
if ((line < 0) || (line >= NR_PTYS))
goto out;
pty = pty_state + line;
pty = (struct pty_struct *)(tty->driver.driver_state) + line;
tty->driver_data = pty;
retval = -EIO;
......@@ -294,6 +308,10 @@ static void pty_set_termios(struct tty_struct *tty, struct termios *old_termios)
__initfunc(int pty_init(void))
{
int i;
/* Traditional BSD devices */
memset(&pty_state, 0, sizeof(pty_state));
memset(&pty_driver, 0, sizeof(struct tty_driver));
pty_driver.magic = TTY_DRIVER_MAGIC;
......@@ -314,6 +332,7 @@ __initfunc(int pty_init(void))
pty_driver.table = pty_table;
pty_driver.termios = pty_termios;
pty_driver.termios_locked = pty_termios_locked;
pty_driver.driver_state = pty_state;
pty_driver.other = &pty_slave_driver;
pty_driver.open = pty_open;
......@@ -337,37 +356,58 @@ __initfunc(int pty_init(void))
pty_slave_driver.table = ttyp_table;
pty_slave_driver.termios = ttyp_termios;
pty_slave_driver.termios_locked = ttyp_termios_locked;
pty_slave_driver.driver_state = pty_state;
pty_slave_driver.other = &pty_driver;
old_pty_driver = pty_driver;
old_pty_driver.driver_name = "compat_pty_master";
old_pty_driver.proc_entry = 0;
old_pty_driver.major = TTY_MAJOR;
old_pty_driver.minor_start = 128;
old_pty_driver.num = (NR_PTYS > 64) ? 64 : NR_PTYS;
old_pty_driver.other = &old_pty_slave_driver;
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
if (tty_register_driver(&pty_driver))
panic("Couldn't register pty driver");
if (tty_register_driver(&pty_slave_driver))
panic("Couldn't register pty slave driver");
/*
* only the master pty gets this ioctl (which is why we
* assign it here, instead of up with the rest of the
* pty_driver initialization. <cananian@alumni.princeton.edu>
*/
pty_driver.ioctl = pty_ioctl;
if (tty_register_driver(&pty_driver))
panic("Couldn't register pty driver");
if (tty_register_driver(&pty_slave_driver))
panic("Couldn't register pty slave driver");
if (tty_register_driver(&old_pty_driver))
panic("Couldn't register compat pty driver");
if (tty_register_driver(&old_pty_slave_driver))
panic("Couldn't register compat pty slave driver");
/* Unix98 devices */
#ifdef CONFIG_UNIX98_PTYS
printk("pty: %d Unix98 ptys configured\n", UNIX98_NR_MAJORS*NR_PTYS);
for ( i = 0 ; i < UNIX98_NR_MAJORS ; i++ ) {
ptm_driver[i] = pty_driver;
ptm_driver[i].name = "ptm";
ptm_driver[i].proc_entry = 0;
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;
}
......@@ -65,6 +65,7 @@
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/devpts_fs.h>
#include <linux/file.h>
......@@ -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_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
* is redirected to if asked by TIOCCONS.
......@@ -1230,34 +1235,33 @@ static int tty_open(struct inode * inode, struct file * filp)
device = c->device(c);
noctty = 1;
}
#ifdef CONFIG_UNIX98_PTYS
if (device == PTMX_DEV) {
/* find a free pty. */
struct tty_driver *driver = tty_drivers;
int minor, line;
/* 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. */
for (minor=driver->minor_start;
minor<driver->minor_start+driver->num;
minor++) {
device = MKDEV(driver->major, minor);
retval = init_dev(device, &tty);
if (retval==0) break; /* success! */
int major, minor, line;
struct tty_driver *driver;
/* find a device that is not in use. */
retval = -1;
for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
driver = &ptm_driver[major];
for (minor = driver->minor_start ;
minor < driver->minor_start + driver->num ;
minor++) {
device = MKDEV(driver->major, minor);
if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
}
}
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 */
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;
goto init_dev_done;
}
#endif
retval = init_dev(device, &tty);
if (retval)
......
......@@ -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
------------------------------
"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
reverse of the normal order. This may help those people who have more
than one PCI Adaptec controller force the correct controller to be
......
......@@ -209,7 +209,7 @@ struct proc_dir_entry proc_scsi_aic7xxx = {
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 MIN(a,b) (((a) < (b)) ? (a) : (b))
......@@ -1051,6 +1051,7 @@ static int aic7xxx_7895_irq_hack = -1; /* This enables a hack to fix
* 1 == Use the Channel B IRQ
*/
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; /*
* -1 use board setting
* 0 use edge triggered
......@@ -1222,6 +1223,7 @@ aic7xxx_setup(char *s, int *dummy)
unsigned int *flag;
} options[] = {
{ "extended", &aic7xxx_extended },
{ "no_reset", &aic7xxx_no_reset },
{ "irq_trigger", &aic7xxx_irq_trigger },
{ "verbose", &aic7xxx_verbose },
{ "reverse_scan",&aic7xxx_reverse_scan },
......@@ -2292,7 +2294,9 @@ aic7xxx_done(struct aic7xxx_host *p, struct aic7xxx_scb *scb)
}
#define WIDE_INQUIRY_BITS 0x60
#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_copy |= (1<<tindex);
......@@ -3166,17 +3170,17 @@ aic7xxx_reset_current_bus(struct aic7xxx_host *p)
scsiseq = aic_inb(p, SCSISEQ);
aic_outb(p, scsiseq | SCSIRSTO, SCSISEQ);
mdelay(1);
mdelay(5);
/* Turn off the bus reset. */
aic_outb(p, scsiseq & ~SCSIRSTO, SCSISEQ);
aic7xxx_clear_intstat(p);
mdelay(2);
aic7xxx_clear_intstat(p);
/* Re-enable reset interrupts. */
aic_outb(p, aic_inb(p, SIMODE1) | ENSCSIRST, SIMODE1);
mdelay(1);
}
/*+F*************************************************************************
......@@ -4803,17 +4807,8 @@ aic7xxx_handle_scsiint(struct aic7xxx_host *p, unsigned char intstat)
Scsi_Cmnd *cmd;
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);
scb_index = aic_inb(p, SCB_TAG);
}
aic_outb(p, scbptr, SCBPTR);
scb_index = aic_inb(p, SCB_TAG);
scb = NULL;
if (scb_index < p->scb_data->numscbs)
......@@ -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
* are allowed to reselect in.
*/
aic_outb(p, 0, SCSISEQ);
aic_outb(p, aic_inb(p, SIMODE1) & ~ENREQINIT, SIMODE1);
p->flags &= ~AHC_HANDLING_REQINITS;
aic_outb(p, CLRSELTIMEO | CLRBUSFREE | CLRREQINIT, CLRSINT1);
......@@ -6407,7 +6403,7 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
scsi_conf |= p->scsi_id_b;
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. */
if (aic7xxx_verbose & VERBOSE_PROBE)
......@@ -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. */
if (aic7xxx_verbose & VERBOSE_PROBE)
......@@ -6543,7 +6539,12 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
}
}
aic_outb(p, target_settings, TARG_SCRATCH + i);
/*
* 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);
if (p->needsdtr_copy & (0x01 << i))
{
short sxfr, j;
......@@ -6581,8 +6582,16 @@ aic7xxx_register(Scsi_Host_Template *template, struct aic7xxx_host *p,
}
p->needsdtr = p->needsdtr_copy;
p->needwdtr = p->needwdtr_copy;
aic_outb(p, 0, ULTRA_ENB);
aic_outb(p, 0, ULTRA_ENB + 1);
/*
* 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 + 1);
}
/*
* Allocate enough hardware scbs to handle the maximum number of
......@@ -7024,7 +7033,12 @@ load_seeprom (struct aic7xxx_host *p, unsigned char *sxfrctl1)
target_settings &= ~0x70;
p->ultraenb &= ~(0x01 << i);
}
aic_outb(p, target_settings, TARG_SCRATCH + 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, ~(p->discenable & 0xFF), DISC_DSB);
aic_outb(p, ~((p->discenable >> 8) & 0xFF), DISC_DSB + 1);
......@@ -9346,6 +9360,7 @@ aic7xxx_release(struct Scsi_Host *host)
if(p->irq)
free_irq(p->irq, p);
release_region(p->base, MAXREG - MINREG);
#ifdef MMAPIO
if(p->maddr)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
......@@ -9354,6 +9369,7 @@ aic7xxx_release(struct Scsi_Host *host)
iounmap((void *) (((unsigned long) p->maddr) & PAGE_MASK));
#endif
}
#endif /* MMAPIO */
prev = NULL;
next = first_aic7xxx;
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
bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL
bool 'Solaris (x86) partition table support' CONFIG_SOLARIS_X86_PARTITION
fi
if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
tristate '/dev/pts filesystem for Unix98 PTYs' CONFIG_DEVPTS_FS
fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS
tristate '/dev/pts filesystem support (EXPERIMENTAL)' CONFIG_DEVPTS_FS
fi
bool 'Macintosh partition map support' CONFIG_MAC_PARTITION
endmenu
......@@ -27,7 +27,8 @@ struct devpts_sb_info {
gid_t gid;
umode_t mode;
struct inode *inodes[NR_PTYS];
unsigned int max_ptys;
struct inode **inodes;
};
#define DEVPTS_SUPER_MAGIC 0x1cd1
......
......@@ -34,7 +34,7 @@ static void devpts_put_super(struct super_block *sb)
struct inode *inode;
int i;
for ( i = 0 ; i < NR_PTYS ; i++ ) {
for ( i = 0 ; i < sbi->max_ptys ; i++ ) {
if ( (inode = sbi->inodes[i]) ) {
if ( inode->i_count != 1 )
printk("devpts_put_super: badness: entry %d count %d\n",
......@@ -48,6 +48,7 @@ static void devpts_put_super(struct super_block *sb)
if ( sbi->next )
SBI(sbi->next)->back = sbi->back;
kfree(sbi->inodes);
kfree(sbi);
#ifdef MODULE
......@@ -138,8 +139,14 @@ struct super_block *devpts_read_super(struct super_block *s, void *data,
if ( !sbi )
goto fail_unlock;
sbi->magic = DEVPTS_SBI_MAGIC;
memset(sbi->inodes, 0, sizeof sbi->inodes);
sbi->magic = DEVPTS_SBI_MAGIC;
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->s_blocksize = 1024;
......@@ -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)
{
ino_t ino = inode->i_ino;
struct devpts_sb_info *sbi = SBI(inode->i_sb);
inode->i_op = NULL;
inode->i_mode = 0;
......@@ -270,7 +278,7 @@ static void devpts_read_inode(struct inode *inode)
}
ino -= 2;
if ( ino >= NR_PTYS )
if ( ino >= sbi->max_ptys )
return; /* Bogus */
inode->i_mode = S_IFCHR;
......
......@@ -98,7 +98,7 @@ static int devpts_root_readdir(struct file *filp, void *dirent, filldir_t filldi
filp->f_pos = ++nr;
/* fall through */
default:
while ( nr < NR_PTYS+2 ) {
while ( nr < sbi->max_ptys ) {
int ptynr = nr - 2;
if ( sbi->inodes[ptynr] ) {
genptsname(numbuf, ptynr);
......
......@@ -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)
{
struct super_block *sb = get_super(dev);
struct file *filp;
struct inode *inode;
if (!sb || !sb->dq_op)
return; /* nothing to do */
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;
if (!inode || inode->i_dev != dev)
if (!inode)
continue;
if (filp->f_mode & FMODE_WRITE && inode->i_sb && inode->i_sb->dq_op) {
inode->i_sb->dq_op->initialize(inode, type);
if (filp->f_mode & FMODE_WRITE) {
sb->dq_op->initialize(inode, type);
inode->i_flags |= S_QUOTA;
}
}
......@@ -547,16 +555,23 @@ static void add_dquot_ref(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 inode *inode;
if (!sb || !sb->dq_op)
return; /* nothing to do */
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;
if (!inode || inode->i_dev != dev)
if (!inode)
continue;
if (IS_QUOTAINIT(inode)) {
if (inode->i_sb && inode->i_sb->dq_op)
inode->i_sb->dq_op->drop(inode);
sb->dq_op->drop(inode);
inode->i_dquot[type] = NODQUOT;
inode->i_flags &= ~S_QUOTA;
}
......
#ifndef __ASM_SMP_H
#define __ASM_SMP_H
#define cpu_logical_map(cpu) (cpu)
#ifdef __SMP__
#include <linux/tasks.h>
......@@ -47,7 +45,8 @@ extern __volatile__ int cpu_number_map[NR_CPUS];
__r0; \
})
#define smp_processor_id() hard_smp_processor_id()
#define smp_processor_id() hard_smp_processor_id()
#define cpu_logical_map(cpu) (cpu)
#endif /* __SMP__ */
......
......@@ -3,10 +3,6 @@
#ifdef __SMP__
#error SMP not supported
#else
#define cpu_logical_map(cpu) (cpu)
#endif
#endif
......@@ -241,13 +241,5 @@ extern __inline int hard_smp_processor_id(void)
#define SMP_FROM_INT 1
#define SMP_FROM_SYSCALL 2
#else
#ifndef ASSEMBLY
extern inline int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif
#endif
......@@ -12,9 +12,9 @@
*
* 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;
#define SPIN_LOCK_UNLOCKED { 0 }
#define SPIN_LOCK_UNLOCKED { }
#else
typedef struct { int gcc_is_buggy; } spinlock_t;
#define SPIN_LOCK_UNLOCKED { 0 }
......
#ifndef __ASM_MIPS_SMP_H
#define __ASM_MIPS_SMP_H
#define cpu_logical_map(cpu) (cpu)
#endif /* __ASM_MIPS_SMP_H */
......@@ -186,13 +186,6 @@ extern __inline__ int hard_smp_processor_id(void)
#define SMP_FROM_SYSCALL 2
#else /* !(__SMP__) */
#ifndef __ASSEMBLY__
extern __inline__ int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF
......
......@@ -94,13 +94,6 @@ extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
#define PROC_CHANGE_PENALTY 20
#else /* !(__SMP__) */
#ifndef __ASSEMBLY__
extern __inline__ int cpu_logical_map(int cpu)
{
return cpu;
}
#endif
#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF
......
......@@ -21,23 +21,28 @@
#include <linux/config.h>
#include <linux/kdev_t.h>
#include <linux/tty.h>
#ifdef CONFIG_DEVPTS_FS
void devpts_pty_new(int, kdev_t);
void devpts_pty_kill(int);
#define unix98_max_ptys NR_PTYS * UNIX98_NR_MAJORS;
#elif defined(CONFIG_DEVPTS_FS_MODULE)
#ifdef BUILDING_PTY_C
void (*devpts_upcall_new)(int,kdev_t) = 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_kill);
EXPORT_SYMBOL(unix98_max_ptys);
#else
extern void (*devpts_upcall_new)(int,kdev_t);
extern void (*devpts_upcall_kill)(int);
extern unsigned int unix98_max_ptys;
#endif
#ifndef BUILDING_DEVPTS
......
......@@ -2,7 +2,6 @@
#define _LINUX_KERNEL_STAT_H
#include <asm/irq.h>
#include <asm/smp.h>
#include <linux/smp.h>
#include <linux/tasks.h>
......
......@@ -8,8 +8,12 @@
/* 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 MEM_MAJOR 1
......@@ -80,6 +84,10 @@
#define SPECIALIX_NORMAL_MAJOR 75
#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.
*/
......
......@@ -64,6 +64,7 @@ extern volatile int smp_msg_id;
#define smp_message_pass(t,m,d,w)
#define smp_threads_ready 1
#define kernel_lock()
#define cpu_logical_map(cpu) 0
#endif
#endif
......@@ -16,7 +16,9 @@
consoles 16 and higher (since it returns a short) */
#ifdef __KERNEL__
#include <linux/config.h>
#include <linux/fs.h>
#include <linux/major.h>
#include <linux/termios.h>
#include <linux/tqueue.h>
#include <linux/tty_driver.h>
......@@ -32,9 +34,25 @@
* (Note: the *_driver.minor_start values 1, 64, 128, 192 are
* hardcoded at present.)
*/
#define NR_PTYS 256
#define NR_PTYS 256 /* ptys/major */
#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:
*/
......
......@@ -139,6 +139,7 @@ struct tty_driver {
struct tty_struct **table;
struct termios **termios;
struct termios **termios_locked;
void *driver_state; /* only used for the PTY driver */
/*
* Interface routines from the upper tty layer to the tty
......
......@@ -17,6 +17,7 @@ kconfig.tk: ${TOPDIR}/Makefile ${TOPDIR}/arch/${ARCH}/config.in \
cat ${HEADER} >> ./kconfig.tk
./tkparse < ../arch/${ARCH}/config.in >> kconfig.tk
echo "set defaults \"arch/${ARCH}/defconfig\"" >> kconfig.tk
echo "set ARCH \"${ARCH}\"" >> kconfig.tk
cat ${TAIL} >> 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