+++ /dev/null
-#
-# Automatically generated make config: don't edit
-#
-
-#
-# General setup
-#
-CONFIG_BLK_DEV_HD = CONFIG_BLK_DEV_HD
-CONFIG_TCPIP = CONFIG_TCPIP
-CONFIG_MAX_16M = CONFIG_MAX_16M
-CONFIG_M486 = CONFIG_M486
-
-#
-# SCSI support
-#
-
-#
-# SCSI support type (disk, tape, CDrom)
-#
-
-#
-# SCSI low-level drivers
-#
-
-#
-# Filesystems
-#
-CONFIG_MINIX_FS = CONFIG_MINIX_FS
-CONFIG_PROC_FS = CONFIG_PROC_FS
-
-#
-# Various character device drivers..
-#
+++ /dev/null
-init/main.o : init/main.c /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h /usr/include/asm/system.h \
- /usr/include/asm/io.h /usr/include/linux/mktime.h /usr/include/linux/types.h \
- /usr/include/linux/fcntl.h /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/linux/unistd.h \
- /usr/include/linux/string.h
all: Version Image
+.EXPORT_ALL_VARIABLES:
+
#
# Make "config" the default target if there is no configuration file or
# "depend" the target if there is no top-level dependency information.
tools/version.h: $(CONFIGURE) Makefile
@./makever.sh
- @echo \#define UTS_RELEASE \"0.99.pl4-`cat .version`\" > tools/version.h
+ @echo \#define UTS_RELEASE \"0.99.pl5-`cat .version`\" > tools/version.h
@echo \#define UTS_VERSION \"`date +%D`\" >> tools/version.h
@echo \#define LINUX_COMPILE_TIME \"`date +%T`\" >> tools/version.h
@echo \#define LINUX_COMPILE_BY \"`whoami`\" >> tools/version.h
l1: inc si
inc di
mov al,(si)
+ test al,al
+ jz l2
seg es
- and al,(di)
- cmp al,(si)
- loope l1
+ cmp al,(di)
+l2: loope l1
cmp cx,#0x00
jne nogen
lea si,dscgenoa
idati: .ascii "761295520"
idcandt: .byte 0xa5
-idgenoa: .byte 0x77, 0x00, 0x66, 0x99
+idgenoa: .byte 0x77, 0x00, 0x99, 0x66
idparadise: .ascii "VGA="
idoakvga: .ascii "OAK VGA "
idf1280: .ascii "Orchid Technology Fahrenheit 1280"
CONFIG_SCSI_AHA1740 y/n y
Future Domain SCSI support
CONFIG_SCSI_FUTURE_DOMAIN y/n y
-Seagate ST-02 SCSI support
+Seagate ST-02 and Future Domain TMC-8xx SCSI support
CONFIG_SCSI_SEAGATE y/n y
UltraStor SCSI support
CONFIG_SCSI_ULTRASTOR y/n y
Extended fs support
CONFIG_EXT_FS y/n n
msdos fs support
-CONFIG_MSDOS_FS y/n n
+CONFIG_MSDOS_FS y/n y
/proc filesystem support
CONFIG_PROC_FS y/n y
NFS filesystem support
+++ /dev/null
-block_dev.o : block_dev.c /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/locks.h /usr/include/asm/segment.h /usr/include/asm/system.h
-buffer.o : buffer.c /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/string.h \
- /usr/include/linux/locks.h /usr/include/asm/system.h /usr/include/asm/io.h
-exec.o : exec.c /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/a.out.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/stat.h /usr/include/linux/fcntl.h \
- /usr/include/linux/ptrace.h /usr/include/linux/user.h /usr/include/asm/segment.h
-fcntl.o : fcntl.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h /usr/include/linux/string.h
-fifo.o : fifo.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h
-file_table.o : file_table.c /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/string.h
-filesystems.o : filesystems.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/minix_fs.h /usr/include/linux/proc_fs.h
-inode.o : inode.c /usr/include/linux/stat.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/string.h \
- /usr/include/asm/system.h
-ioctl.o : ioctl.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/stat.h /usr/include/linux/termios.h \
- /usr/include/linux/fcntl.h
-locks.o : locks.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h
-namei.o : namei.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/string.h /usr/include/linux/fcntl.h /usr/include/linux/stat.h
-open.o : open.c /usr/include/linux/vfs.h /usr/include/linux/types.h /usr/include/linux/utime.h \
- /usr/include/linux/errno.h /usr/include/linux/fcntl.h /usr/include/linux/stat.h \
- /usr/include/linux/string.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h
-pipe.o : pipe.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/fcntl.h /usr/include/linux/termios.h
-read_write.o : read_write.c /usr/include/linux/types.h /usr/include/linux/errno.h \
- /usr/include/linux/stat.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/asm/segment.h
-select.o : select.c /usr/include/linux/types.h /usr/include/linux/time.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/stat.h \
- /usr/include/linux/errno.h /usr/include/asm/segment.h /usr/include/asm/system.h
-stat.o : stat.c /usr/include/linux/errno.h /usr/include/linux/stat.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/asm/segment.h
-super.o : super.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/stat.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/locks.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h
int nr_buffers = 0;
int buffermem = 0;
int nr_buffer_heads = 0;
+static int min_free_pages = 20; /* nr free pages needed before buffer grows */
/*
* Rewrote the wait-routines to use the "new" wait-queue functionality,
{
struct buffer_head * bh, * tmp;
int buffers;
+ static int grow_size = 0;
repeat:
bh = get_hash_table(dev, block, size);
put_last_free(bh);
return bh;
}
-
- if (nr_free_pages > 30 && buffermem < 6*1024*1024)
+ grow_size -= size;
+ if (nr_free_pages > min_free_pages &&
+ buffermem < 6*1024*1024 &&
+ grow_size <= 0) {
grow_buffers(size);
-
+ grow_size = 4096;
+ }
buffers = nr_buffers;
bh = NULL;
} else
bh[i] = NULL;
- if(bhnum)
- ll_rw_block(READ, bhnum, bhr);
+ if (bhnum)
+ ll_rw_block(READ, bhnum, bhr);
for (i=0 ; i<4 ; i++,address += BLOCK_SIZE)
if (bh[i]) {
{
int i;
+ if (high_memory >= 4*1024*1024)
+ min_free_pages = 200;
+ else
+ min_free_pages = 20;
for (i = 0 ; i < NR_HASH ; i++)
hash_table[i] = NULL;
free_list = 0;
+++ /dev/null
-blkdev.o : blkdev.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/stat.h \
- /usr/include/linux/fcntl.h /usr/include/linux/errno.h
-chrdev.o : chrdev.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/stat.h \
- /usr/include/linux/fcntl.h /usr/include/linux/errno.h
-dir.o : dir.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/kernel.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/ext_fs.h /usr/include/linux/stat.h
-fifo.o : fifo.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h
-file.o : file.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/ext_fs.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h
-freelists.o : freelists.c /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h \
- /usr/include/linux/stat.h /usr/include/linux/string.h /usr/include/linux/locks.h
-inode.o : inode.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h
-namei.o : namei.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h /usr/include/linux/errno.h \
- /usr/include/asm/segment.h
-symlink.o : symlink.c /usr/include/asm/segment.h /usr/include/linux/errno.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h /usr/include/linux/stat.h
-truncate.o : truncate.c /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/ext_fs.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h /usr/include/linux/errno.h
struct buffer_head * bh;
struct ext_free_block * efb;
- if (!sb)
- panic("trying to free block on nonexistent device");
+ if (!sb) {
+ printk("trying to free block on non-existent device\n");
+ return;
+ }
lock_super (sb);
if (block < sb->u.ext_sb.s_firstdatazone ||
block >= sb->u.ext_sb.s_nzones) {
struct ext_free_block * efb;
int j;
- if (!sb)
- panic("trying to get new block from nonexistant device");
+ if (!sb) {
+ printk("trying to get new block from non-existent device\n");
+ return 0;
+ }
if (!sb->u.ext_sb.s_firstfreeblock)
return 0;
lock_super (sb);
}
if (j < sb->u.ext_sb.s_firstdatazone || j > sb->u.ext_sb.s_nzones) {
printk ("ext_new_block: blk = %d\n", j);
- panic ("allocating block not in data zone\n");
+ printk("allocating block not in data zone\n");
+ return 0;
}
sb->u.ext_sb.s_freeblockscount --;
sb->s_dirt = 1;
- if (!(bh=getblk(sb->s_dev, j, sb->s_blocksize)))
- panic("new_block: cannot get block");
- if (bh->b_count != 1)
- panic("new block: count is != 1");
+ if (!(bh=getblk(sb->s_dev, j, sb->s_blocksize))) {
+ printk("new_block: cannot get block");
+ return 0;
+ }
clear_block(bh->b_data);
bh->b_uptodate = 1;
bh->b_dirt = 1;
return;
}
if (!inode->i_sb) {
- printk("free_inode: inode on nonexistent device\n");
+ printk("free_inode: inode on non-existent device\n");
return;
}
lock_super (inode->i_sb);
if (inode->i_ino < 1 || inode->i_ino > inode->i_sb->u.ext_sb.s_ninodes) {
- printk("free_inode: inode 0 or nonexistent inode\n");
+ printk("free_inode: inode 0 or non-existent inode\n");
unlock_super (inode->i_sb);
return;
}
* NFS uses this to get the authentication correct. -- jrs
*/
-int notify_change(struct inode * inode)
+int notify_change(int flags, struct inode * inode)
{
if (inode->i_sb && inode->i_sb->s_op &&
inode->i_sb->s_op->notify_change)
- return inode->i_sb->s_op->notify_change(inode);
+ return inode->i_sb->s_op->notify_change(flags, inode);
return 0;
}
put_fs_long(filp->f_inode->i_size - filp->f_pos,
(long *) arg);
return 0;
- default:
- return -EINVAL;
}
+ if (filp->f_op && filp->f_op->ioctl)
+ return filp->f_op->ioctl(filp->f_inode, filp, cmd,arg);
+ return -EINVAL;
}
+++ /dev/null
-blkdev.o : blkdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h
-chrdev.o : chrdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h
-dir.o : dir.c /usr/include/linux/errno.h /usr/include/asm/segment.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/iso_fs.h \
- /usr/include/linux/kernel.h /usr/include/linux/stat.h /usr/include/linux/string.h \
- /usr/include/linux/mm.h
-fifo.o : fifo.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h
-file.o : file.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/iso_fs.h /usr/include/linux/fcntl.h /usr/include/linux/errno.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h
-inode.o : inode.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/stat.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h \
- /usr/include/linux/string.h /usr/include/linux/locks.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h /usr/include/linux/errno.h
-namei.o : namei.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h /usr/include/asm/segment.h \
- /usr/include/linux/errno.h
-rock.o : rock.c /usr/include/linux/config.h /usr/include/linux/autoconf.h /usr/include/linux/stat.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h /usr/include/linux/string.h \
- rock.h
-symlink.o : symlink.c /usr/include/asm/segment.h /usr/include/linux/errno.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/iso_fs.h /usr/include/linux/stat.h
-util.o : util.c
if (*bhe) {/* test for valid buffer */
wait_on_buffer(*bhe);
if (!(*bhe)->b_uptodate) {
- do {
- brelse(*bhe);
- if (++bhe == &buflist[NBUF])
- bhe = buflist;
- } while (bhe != bhb);
+ left = 0;
break;
}
}
return 0;
if (!S_ISREG(filp->f_inode->i_mode))
return 0;
- if (l->l_type != F_UNLCK && l->l_type != F_RDLCK && l->l_type != F_WRLCK)
+ if (l->l_type != F_UNLCK && l->l_type != F_RDLCK && l->l_type != F_WRLCK
+ && l->l_type != F_SHLCK && l->l_type != F_EXLCK)
return 0;
switch (l->l_whence) {
case 0 /*SEEK_SET*/ : start = 0; break;
+++ /dev/null
-bitmap.o : bitmap.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/linux/stat.h \
- /usr/include/linux/string.h
-blkdev.o : blkdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h
-chrdev.o : chrdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h
-dir.o : dir.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/minix_fs.h \
- /usr/include/linux/stat.h
-fifo.o : fifo.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h
-file.o : file.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/minix_fs.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h
-inode.o : inode.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h
-namei.o : namei.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/fcntl.h /usr/include/linux/errno.h \
- /usr/include/asm/segment.h
-symlink.o : symlink.c /usr/include/asm/segment.h /usr/include/linux/errno.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/linux/stat.h
-truncate.o : truncate.c /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/minix_fs.h /usr/include/linux/tty.h /usr/include/linux/termios.h \
- /usr/include/asm/system.h /usr/include/linux/stat.h /usr/include/linux/fcntl.h
int i,j;
if (!sb) {
- printk("trying to get new block from nonexistant device\n");
+ printk("trying to get new block from nonexistent device\n");
return 0;
}
repeat:
printk("new_block: cannot get block");
return 0;
}
- if (bh->b_count != 1) {
- printk("new block: count is != 1");
- return 0;
- }
clear_block(bh->b_data);
bh->b_uptodate = 1;
bh->b_dirt = 1;
+++ /dev/null
-dir.o : dir.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/msdos_fs.h \
- /usr/include/linux/errno.h /usr/include/linux/stat.h
-fat.o : fat.c /usr/include/linux/msdos_fs.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/kernel.h /usr/include/linux/errno.h \
- /usr/include/linux/stat.h
-file.o : file.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/msdos_fs.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h \
- /usr/include/linux/stat.h
-inode.o : inode.c /usr/include/linux/msdos_fs.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/ctype.h /usr/include/linux/stat.h \
- /usr/include/linux/locks.h /usr/include/asm/segment.h
-misc.o : misc.c /usr/include/linux/msdos_fs.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/stat.h
-namei.o : namei.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/msdos_fs.h \
- /usr/include/linux/errno.h /usr/include/linux/string.h /usr/include/linux/stat.h
+++ /dev/null
-blkdev.o : blkdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/nfs_fs.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- /usr/include/linux/socket.h /usr/include/linux/nfs_mount.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/stat.h \
- /usr/include/linux/fcntl.h
-chrdev.o : chrdev.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/nfs_fs.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- /usr/include/linux/socket.h /usr/include/linux/nfs_mount.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/stat.h \
- /usr/include/linux/fcntl.h
-dir.o : dir.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/stat.h \
- /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h /usr/include/features.h \
- /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h /usr/include/linux/fcntl.h /usr/include/linux/string.h \
- /usr/include/asm/segment.h
-fifo.o : fifo.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h
-file.o : file.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/errno.h /usr/include/linux/fcntl.h /usr/include/linux/stat.h \
- /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h /usr/include/features.h \
- /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h
-inode.o : inode.c /usr/include/asm/system.h /usr/include/asm/segment.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h /usr/include/features.h \
- /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h /usr/include/linux/string.h /usr/include/linux/stat.h \
- /usr/include/linux/errno.h /usr/include/linux/locks.h
-proc.o : proc.c /usr/include/linux/param.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h /usr/include/linux/utsname.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h
-sock.o : sock.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h \
- ../../net/kern_sock.h
-symlink.o : symlink.c /usr/include/asm/segment.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/errno.h /usr/include/linux/nfs_fs.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- /usr/include/linux/nfs_mount.h /usr/include/linux/stat.h
error = nfs_proc_rename(NFS_SERVER(old_dir),
NFS_FH(old_dir), old_filename,
NFS_FH(new_dir), new_filename);
- if (!error)
+ if (!error) {
nfs_lookup_cache_remove(old_dir, NULL, old_filename);
+ nfs_lookup_cache_remove(new_dir, NULL, new_filename);
+ }
iput(old_dir);
iput(new_dir);
return error;
int n;
struct nfs_fattr fattr;
char *data;
+ off_t pos;
if (!inode) {
printk("nfs_file_read: inode = NULL\n");
inode->i_mode);
return -EINVAL;
}
+ pos = file->f_pos;
if (file->f_pos + count > inode->i_size)
- count = inode->i_size - file->f_pos;
+ count = inode->i_size - pos;
if (count <= 0)
return 0;
n = NFS_SERVER(inode)->rsize;
if (hunk > n)
hunk = n;
result = nfs_proc_read(NFS_SERVER(inode), NFS_FH(inode),
- file->f_pos, hunk, data, &fattr);
+ pos, hunk, data, &fattr);
if (result < 0) {
kfree_s(data, n);
return result;
}
memcpy_tofs(buf, data, result);
- file->f_pos += result;
+ pos += result;
buf += result;
if (result < n) {
i += result;
break;
}
}
+ file->f_pos = pos;
kfree_s(data, n);
nfs_refresh_inode(inode, &fattr);
return i;
int n;
struct nfs_fattr fattr;
char *data;
+ int pos;
if (!inode) {
printk("nfs_file_write: inode = NULL\n");
}
if (count <= 0)
return 0;
+ pos = file->f_pos;
if (file->f_flags & O_APPEND)
- file->f_pos = inode->i_size;
+ pos = inode->i_size;
n = NFS_SERVER(inode)->wsize;
data = (char *) kmalloc(n, GFP_KERNEL);
for (i = 0; i < count; i += n) {
hunk = n;
memcpy_fromfs(data, buf, hunk);
result = nfs_proc_write(NFS_SERVER(inode), NFS_FH(inode),
- file->f_pos, hunk, data, &fattr);
+ pos, hunk, data, &fattr);
if (result < 0) {
kfree_s(data, n);
return result;
}
- file->f_pos += hunk;
+ pos += hunk;
buf += hunk;
if (hunk < n) {
i += hunk;
break;
}
}
+ file->f_pos = pos;
kfree_s(data, n);
nfs_refresh_inode(inode, &fattr);
return i;
extern int close_fp(struct file *filp);
-static int nfs_notify_change(struct inode *);
+static int nfs_notify_change(int, struct inode *);
static void nfs_put_super(struct super_block *);
static void nfs_statfs(struct super_block *, struct statfs *);
error = nfs_proc_statfs(&sb->u.nfs_sb.s_server, &sb->u.nfs_sb.s_root,
&res);
if (error) {
- if (error != -EINTR)
- printk("nfs_statfs: statfs error = %d\n", -error);
+ printk("nfs_statfs: statfs error = %d\n", -error);
res.bsize = res.blocks = res.bfree = res.bavail = 0;
}
put_fs_long(res.bsize, &buf->f_bsize);
return inode;
}
-int nfs_notify_change(struct inode *inode)
+int nfs_notify_change(int flags, struct inode *inode)
{
struct nfs_sattr sattr;
struct nfs_fattr fattr;
int error;
- sattr.mode = inode->i_mode;
- sattr.uid = inode->i_uid;
- sattr.gid = inode->i_gid;
- sattr.size = S_ISREG(inode->i_mode) ? inode->i_size : -1;
- sattr.mtime.seconds = inode->i_mtime;
- sattr.mtime.useconds = 0;
- sattr.atime.seconds = inode->i_atime;
- sattr.atime.useconds = 0;
+ if (flags & NOTIFY_MODE)
+ sattr.mode = inode->i_mode;
+ else
+ sattr.mode = -1;
+ if (flags & NOTIFY_UIDGID) {
+ sattr.uid = inode->i_uid;
+ sattr.gid = inode->i_gid;
+ }
+ else
+ sattr.uid = sattr.gid = -1;
+ if (flags & NOTIFY_SIZE)
+ sattr.size = S_ISREG(inode->i_mode) ? inode->i_size : -1;
+ else
+ sattr.size = -1;
+ if (flags & NOTIFY_TIME) {
+ sattr.mtime.seconds = inode->i_mtime;
+ sattr.mtime.useconds = 0;
+ sattr.atime.seconds = inode->i_atime;
+ sattr.atime.useconds = 0;
+ }
+ else {
+ sattr.mtime.seconds = sattr.mtime.useconds = -1;
+ sattr.atime.seconds = sattr.atime.useconds = -1;
+ }
error = nfs_proc_setattr(NFS_SERVER(inode), NFS_FH(inode),
&sattr, &fattr);
if (!error)
#include <netinet/in.h>
-static int proc_debug = 0;
-
#ifdef NFS_PROC_DEBUG
+static int proc_debug = 0;
#define PRINTK if (proc_debug) printk
#else
#define PRINTK if (0) printk
return p;
}
-static inline int *xdr_decode_string(int *p, char *string)
+static inline int *xdr_decode_string(int *p, char *string, int maxlen)
{
- int len;
+ unsigned int len;
len = ntohl(*p++);
+ if (len > maxlen)
+ return NULL;
memcpy(string, (char *) p, len);
string[len] = '\0';
p += (len + 3) >> 2;
return p;
}
-static inline int *xdr_decode_data(int *p, char *data, int *lenp)
+static inline int *xdr_decode_data(int *p, char *data, int *lenp, int maxlen)
{
- int len;
+ unsigned int len;
len = *lenp = ntohl(*p++);
+ if (len > maxlen)
+ return NULL;
memcpy(data, (char *) p, len);
data[len] = '\0';
p += (len + 3) >> 2;
static int *xdr_decode_entry(int *p, struct nfs_entry *entry)
{
entry->fileid = ntohl(*p++);
- p = xdr_decode_string(p, entry->name);
+ if (!(p = xdr_decode_string(p, entry->name, NFS_MAXNAMLEN)))
+ return NULL;
entry->cookie = ntohl(*p++);
entry->eof = 0;
return p;
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply getattr\n");
}
+ else
+ PRINTK("NFS reply getattr failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply setattr\n");
}
+ else
+ PRINTK("NFS reply setattr failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply lookup\n");
}
+ else
+ PRINTK("NFS reply lookup failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
if (!(p = nfs_rpc_verify(p0)))
status = NFSERR_IO;
else if ((status = ntohl(*p++)) == NFS_OK) {
- p = xdr_decode_string(p, res);
- PRINTK("NFS reply readlink %s\n", res);
- }
+ if (!(p = xdr_decode_string(p, res, NFS_MAXPATHLEN))) {
+ printk("nfs_proc_readlink: giant pathname\n");
+ status = NFSERR_IO;
+ }
+ else
+ PRINTK("NFS reply readlink %s\n", res);
+ }
+ else
+ PRINTK("NFS reply readlink failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
status = NFSERR_IO;
else if ((status = ntohl(*p++)) == NFS_OK) {
p = xdr_decode_fattr(p, fattr);
- p = xdr_decode_data(p, data, &len);
- PRINTK("NFS reply read %d\n", len);
- }
+ if (!(p = xdr_decode_data(p, data, &len, count))) {
+ printk("nfs_proc_read: giant data size\n");
+ status = NFSERR_IO;
+ }
+ else
+ PRINTK("NFS reply read %d\n", len);
+ }
+ else
+ PRINTK("NFS reply read failed = %d\n", status);
free_page((long) p0);
return (status == NFS_OK) ? len : -nfs_stat_to_errno(status);
}
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply write\n");
}
+ else
+ PRINTK("NFS reply write failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply create\n");
}
+ else
+ PRINTK("NFS reply create failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
else if ((status = ntohl(*p++)) == NFS_OK) {
PRINTK("NFS reply remove\n");
}
+ else
+ PRINTK("NFS reply remove failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
else if ((status = ntohl(*p++)) == NFS_OK) {
PRINTK("NFS reply rename\n");
}
+ else
+ PRINTK("NFS reply rename failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
else if ((status = ntohl(*p++)) == NFS_OK) {
PRINTK("NFS reply link\n");
}
+ else
+ PRINTK("NFS reply link failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
else if ((status = ntohl(*p++)) == NFS_OK) {
PRINTK("NFS reply symlink\n");
}
+ else
+ PRINTK("NFS reply symlink failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
p = xdr_decode_fattr(p, fattr);
PRINTK("NFS reply mkdir\n");
}
+ else
+ PRINTK("NFS reply mkdir failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
else if ((status = ntohl(*p++)) == NFS_OK) {
PRINTK("NFS reply rmdir\n");
}
+ else
+ PRINTK("NFS reply rmdir failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
if (!(p = nfs_rpc_verify(p0)))
status = NFSERR_IO;
else if ((status = ntohl(*p++)) == NFS_OK) {
- for (i = 0; i < count && *p++; i++)
- p = xdr_decode_entry(p, entry++);
- eof = (i == count && !*p++ && *p++) || (i < count && *p++);
- if (eof && i)
- entry[-1].eof = 1;
- PRINTK("NFS reply readdir %d %s\n", i, eof ? "eof" : "");
- }
+ for (i = 0; i < count && *p++; i++) {
+ if (!(p = xdr_decode_entry(p, entry++)))
+ break;
+ }
+ if (!p) {
+ printk("nfs_proc_readdir: giant filename\n");
+ status = NFSERR_IO;
+ }
+ else {
+ eof = (i == count && !*p++ && *p++)
+ || (i < count && *p++);
+ if (eof && i)
+ entry[-1].eof = 1;
+ PRINTK("NFS reply readdir %d %s\n", i,
+ eof ? "eof" : "");
+ }
+ }
+ else
+ PRINTK("NFS reply readdir failed = %d\n", status);
free_page((long) p0);
return (status == NFS_OK) ? i : -nfs_stat_to_errno(status);
}
p = xdr_decode_fsinfo(p, res);
PRINTK("NFS reply statfs\n");
}
+ else
+ PRINTK("NFS reply statfs failed = %d\n", status);
free_page((long) p0);
return -nfs_stat_to_errno(status);
}
static int *nfs_rpc_verify(int *p)
{
- int n;
+ unsigned int n;
p++;
if ((n = ntohl(*p++)) != RPC_REPLY) {
printk("nfs_rpc_verify: not an RPC reply: %d\n", n);
- return 0;
+ return NULL;
}
if ((n = ntohl(*p++)) != RPC_MSG_ACCEPTED) {
printk("nfs_rpc_verify: RPC call rejected: %d\n", n);
- return 0;
+ return NULL;
+ }
+ switch (n = ntohl(*p++)) {
+ case RPC_AUTH_NULL: case RPC_AUTH_UNIX: case RPC_AUTH_SHORT:
+ break;
+ default:
+ printk("nfs_rpc_verify: bad RPC authentication type: %d\n", n);
+ return NULL;
}
- if ((n = ntohl(*p++)) != RPC_AUTH_NULL && n != RPC_AUTH_UNIX) {
- printk("nfs_rpc_verify: bad RPC authentication type: %d\n",
- n);
- return 0;
+ if ((n = ntohl(*p++)) > 400) {
+ printk("nfs_rpc_verify: giant auth size\n");
+ return NULL;
}
- n = ntohl(*p++);
p += (n + 3) >> 2;
if ((n = ntohl(*p++)) != RPC_SUCCESS) {
printk("nfs_rpc_verify: RPC call failed: %d\n", n);
- return 0;
+ return NULL;
}
return p;
}
goto re_select;
#endif
current->timeout = 0;
- result = -EINTR;
+ result = -ERESTARTSYS;
break;
}
if (!current->timeout) {
inode->i_op->truncate(inode);
inode->i_atime = inode->i_mtime = CURRENT_TIME;
inode->i_dirt = 1;
- error = notify_change(inode);
+ error = notify_change(NOTIFY_SIZE, inode);
iput(inode);
return error;
}
inode->i_op->truncate(inode);
inode->i_atime = inode->i_mtime = CURRENT_TIME;
inode->i_dirt = 1;
- return notify_change(inode);
+ return notify_change(NOTIFY_SIZE, inode);
}
/* If times==NULL, set access and modification to current time,
inode->i_mtime = modtime;
inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1;
- error = notify_change(inode);
+ error = notify_change(NOTIFY_TIME, inode);
iput(inode);
return error;
}
inode->i_mode &= ~S_ISGID;
inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1;
- return notify_change(inode);
+ return notify_change(NOTIFY_MODE, inode);
}
int sys_chmod(const char * filename, mode_t mode)
inode->i_mode &= ~S_ISGID;
inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1;
- error = notify_change(inode);
+ error = notify_change(NOTIFY_MODE, inode);
iput(inode);
return error;
}
inode->i_gid = group;
inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1;
- return notify_change(inode);
+ return notify_change(NOTIFY_UIDGID, inode);
}
return -EPERM;
}
inode->i_gid = group;
inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1;
- error = notify_change(inode);
+ error = notify_change(NOTIFY_UIDGID, inode);
iput(inode);
return error;
}
inode->i_size = 0;
if (inode->i_op && inode->i_op->truncate)
inode->i_op->truncate(inode);
- if ((i = notify_change(inode))) {
+ if ((i = notify_change(NOTIFY_SIZE, inode))) {
iput(inode);
current->filp[fd] = NULL;
f->f_count--;
+++ /dev/null
-array.o : array.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/asm/segment.h \
- /usr/include/asm/io.h
-base.o : base.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/proc_fs.h /usr/include/linux/stat.h
-fd.o : fd.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/proc_fs.h /usr/include/linux/stat.h
-inode.o : inode.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/proc_fs.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/locks.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h
-link.o : link.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/minix_fs.h /usr/include/linux/stat.h
-mem.o : mem.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/asm/segment.h \
- /usr/include/asm/io.h
-root.o : root.c /usr/include/asm/segment.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/proc_fs.h /usr/include/linux/stat.h
static int get_uptime(char * buffer)
{
- return sprintf(buffer,"%d\n",(jiffies+jiffies_offset)/HZ);
+ unsigned long uptime;
+ unsigned long idle;
+
+ uptime = jiffies + jiffies_offset;
+ idle = task[0]->utime + task[0]->stime;
+ return sprintf(buffer,"%d.%02d %d.%02d\n",
+ uptime / HZ,
+ uptime % HZ,
+ idle / HZ,
+ idle % HZ);
}
static int get_meminfo(char * buffer)
char * page;
int length;
int end;
- int type, pid;
+ unsigned int type, pid;
if (count < 0)
return -EINVAL;
static int proc_lookupbase(struct inode * dir,const char * name, int len,
struct inode ** result)
{
- unsigned int pid;
- int i, ino;
+ unsigned int pid, ino;
+ int i;
*result = NULL;
if (!dir)
#define FIBMAP 1 /* bmap access */
#define FIGETBSZ 2 /* get the block size used for bmap */
+/* these flags tell notify_change what is being changed */
+
+#define NOTIFY_SIZE 1
+#define NOTIFY_MODE 2
+#define NOTIFY_TIME 4
+#define NOTIFY_UIDGID 8
+
typedef char buffer_block[BLOCK_SIZE];
struct buffer_head {
struct super_operations {
void (*read_inode) (struct inode *);
- int (*notify_change) (struct inode *);
+ int (*notify_change) (int flags, struct inode *);
void (*write_inode) (struct inode *);
void (*put_inode) (struct inode *);
void (*put_super) (struct super_block *);
extern void sync_dev(dev_t dev);
extern void sync_supers(dev_t dev);
extern int bmap(struct inode * inode,int block);
-extern int notify_change(struct inode * inode);
+extern int notify_change(int flags, struct inode * inode);
extern int namei(const char * pathname, struct inode ** res_inode);
extern int lnamei(const char * pathname, struct inode ** res_inode);
extern int permission(struct inode * inode,int mask);
TIMER_BH = 0,
CONSOLE_BH,
SERIAL_BH,
+ TTY_BH,
INET_BH,
KEYBOARD_BH
};
extern int jiffies_offset;
extern int need_resched;
extern int hard_math;
+extern int ignore_irq13;
#define CURRENT_TIME (startup_time+(jiffies+jiffies_offset)/HZ)
int baud_base;
int port;
int irq;
- int flags;
- int type;
+ int flags; /* defined in tty.h */
+ int type; /* UART type */
struct tty_struct *tty;
unsigned long timer;
int timeout;
int x_char; /* xon/xoff characater */
int event;
int line;
+ int count; /* # of fd on device */
+ int blocked_open; /* # of blocked opens */
+ struct wait_queue *open_wait;
struct async_struct *next_port; /* For the linked list */
struct async_struct *prev_port;
-
};
/*
#define RS_EVENT_HUP_PGRP 2
#define RS_EVENT_BREAK_INT 3
#define RS_EVENT_DO_SAK 4
+#define RS_EVENT_OPEN_WAKEUP 5
/*
* These are the UART port assignments, expressed as offsets from the base
unsigned long paddr;
unsigned long router;
unsigned long net;
- unsigned long up:1;
+ unsigned long up:1,destroy:1;
};
+
+#define SIOCSARP 0x2501
+#define SIOCGARP 0x2502
+#define SIOCDARP 0x2503
+
+/*
+ * ARP ioctl request
+ */
+struct arpreq {
+ struct sockaddr arp_pa; /* protocol address */
+ struct sockaddr arp_ha; /* hardware address */
+ int arp_flags; /* flags */
+};
+
+#define ATF_COM 0x02
+#define ATF_PERM 0x04
+#define ATF_PUBL 0x08
+#define ATF_USETRAILERS 0x10
+
#endif
#define TIOCPKT 0x5420
#define FIONBIO 0x5421
#define TIOCNOTTY 0x5422
+#define TIOCSETD 0x5423
+#define TIOCGETD 0x5424
#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
#define FIOCLEX 0x5451
#define FIOASYNC 0x5452
#define TCSADRAIN 1
#define TCSAFLUSH 2
+/* line disciplines */
+#define N_TTY 0
+#define N_SLIP 1
+#define N_MOUSE 2
+
#endif
#include <asm/system.h>
#define NR_CONSOLES 8
+#define NR_LDISCS 16
/*
* These are set up by the setup-routine at boot-time:
#define ASYNC_FLAGS 0x0036 /* Possible legal async flags */
/* Internal flags used only by kernel/chr_drv/serial.c */
-#define ASYNC_NO_IRQ 0x80000000 /* No IRQ was initialized */
+#define ASYNC_INITIALIZED 0x80000000 /* Serial port was initialized */
+#define ASYNC_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */
+#define ASYNC_NORMAL_ACTIVE 0x20000000 /* Normal device is active */
#define IS_A_CONSOLE(min) (((min) & 0xC0) == 0x00)
#define IS_A_SERIAL(min) (((min) & 0xC0) == 0x40)
unsigned char stopped:1, status_changed:1, packet:1;
unsigned char ctrl_status;
short line;
+ int disc;
int flags;
int count;
struct winsize winsize;
int (*ioctl)(struct tty_struct *tty, struct file * file,
unsigned int cmd, unsigned int arg);
void (*throttle)(struct tty_struct * tty, int status);
+ void (*set_termios)(struct tty_struct *tty, struct termios * old);
struct tty_struct *link;
+ unsigned char *write_data_ptr;
+ int write_data_cnt;
+ void (*write_data_callback)(void * data);
+ void * write_data_arg;
struct tty_queue read_q;
struct tty_queue write_q;
struct tty_queue secondary;
};
+struct tty_ldisc {
+ int flags;
+ /*
+ * The following routines are called from above.
+ */
+ int (*open)(struct tty_struct *);
+ void (*close)(struct tty_struct *);
+ int (*read)(struct tty_struct * tty, struct file * file,
+ char * buf, int nr);
+ int (*write)(struct tty_struct * tty, struct file * file,
+ char * buf, int nr);
+ int (*ioctl)(struct tty_struct * tty, struct file * file,
+ unsigned int cmd, unsigned int arg);
+ /*
+ * The following routines are called from below.
+ */
+ void (*handler)(struct tty_struct *);
+};
+
+#define LDISC_FLAG_DEFINED 0x00000001
+
/*
* These are the different types of thottle status which can be sent
* to the low-level tty driver. The tty_io.c layer is responsible for
extern void tty_read_flush(struct tty_struct *);
extern struct tty_struct *tty_table[];
+extern int tty_check_write[];
extern struct tty_struct * redirect;
+extern struct tty_ldisc ldiscs[];
extern int fg_console;
extern unsigned long video_num_columns;
extern unsigned long video_num_lines;
extern void flush_output(struct tty_struct * tty);
extern void wait_until_sent(struct tty_struct * tty);
extern void copy_to_cooked(struct tty_struct * tty);
+extern int tty_register_ldisc(int disc, struct tty_ldisc *new);
extern int tty_ioctl(struct inode *, struct file *, unsigned int, unsigned int);
extern int is_orphaned_pgrp(int pgrp);
extern int kill_pg(int pgrp, int sig, int priv);
extern int kill_sl(int sess, int sig, int priv);
extern void tty_hangup(struct tty_struct * tty);
+extern void tty_unhangup(struct file *filp);
extern void do_SAK(struct tty_struct *tty);
/* tty write functions */
/* serial.c */
extern int rs_open(struct tty_struct * tty, struct file * filp);
-extern void change_speed(unsigned int line);
/* pty.c */
floppy_init();
sock_init();
sti();
+ /*
+ * check if exception 16 works correctly.. This is truly evil
+ * code: it disables the high 8 interrupts to make sure that
+ * the irq13 doesn't happen. But as this will lead to a lockup
+ * if no exception16 arrives, it depends on the fact that the
+ * high 8 interrupts will be re-enabled by the next timer tick.
+ * So the irq13 will happen eventually, but the exception 16
+ * should get there first..
+ */
+ if (hard_math) {
+ unsigned short control_word;
+ __asm__("fninit ; fnstcw %0 ; fwait":"=m" (*&control_word));
+ control_word &= 0xffc0;
+ __asm__("fldcw %0 ; fwait"::"m" (*&control_word));
+ outb_p(inb_p(0x21) | (1 << 2), 0x21);
+ __asm__("fldz ; fld1 ; fdiv %st,%st(1) ; fwait");
+ }
move_to_user_mode();
if (!fork()) /* we count on this going ok */
init();
printf(linux_banner);
execve("/etc/init",argv_init,envp_init);
execve("/bin/init",argv_init,envp_init);
+ execve("/sbin/init",argv_init,envp_init);
/* if this fails, fall through to original stuff */
if (!(pid=fork())) {
+++ /dev/null
-dma.o : dma.c /usr/include/linux/kernel.h /usr/include/linux/errno.h /usr/include/asm/dma.h \
- /usr/include/asm/io.h
-exit.o : exit.c /usr/include/linux/wait.h /usr/include/linux/errno.h /usr/include/linux/signal.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/asm/segment.h
-fork.o : fork.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/stddef.h \
- /usr/include/asm/segment.h /usr/include/asm/system.h
-info.o : info.c /usr/include/asm/segment.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/string.h \
- /usr/include/linux/unistd.h
-ioport.o : ioport.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h
-irq.o : irq.c /usr/include/linux/ptrace.h /usr/include/linux/errno.h /usr/include/linux/signal.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/interrupt.h /usr/include/asm/system.h /usr/include/asm/io.h \
- /usr/include/asm/irq.h
-itimer.o : itimer.c /usr/include/linux/signal.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/asm/segment.h
-mktime.o : mktime.c /usr/include/linux/mktime.h
-panic.o : panic.c /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h
-printk.o : printk.c /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h /usr/include/asm/segment.h \
- /usr/include/asm/system.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h
-ptrace.o : ptrace.c /usr/include/linux/head.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/ptrace.h \
- /usr/include/asm/segment.h /usr/include/asm/system.h
-sched.o : sched.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/signal.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/timer.h /usr/include/linux/sys.h \
- /usr/include/linux/fdreg.h /usr/include/linux/errno.h /usr/include/linux/ptrace.h \
- /usr/include/asm/system.h /usr/include/asm/io.h /usr/include/asm/segment.h
-signal.o : signal.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/ptrace.h \
- /usr/include/asm/segment.h
-sys.o : sys.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h /usr/include/linux/times.h /usr/include/linux/utsname.h \
- /usr/include/linux/string.h /usr/include/linux/ptrace.h /usr/include/asm/segment.h
-traps.o : traps.c /usr/include/linux/head.h /usr/include/linux/sched.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/asm/system.h /usr/include/asm/segment.h /usr/include/asm/io.h
-vsprintf.o : vsprintf.c /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h /usr/include/linux/types.h \
- /usr/include/linux/string.h /usr/include/linux/ctype.h
+++ /dev/null
-errors.o : errors.c /usr/include/linux/signal.h /usr/include/asm/segment.h fpu_system.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- exception.h fpu_emu.h fpu_proto.h status_w.h control_w.h reg_constant.h version.h
-fpu_arith.o : fpu_arith.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h fpu_emu.h fpu_proto.h
-fpu_aux.o : fpu_aux.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h exception.h fpu_emu.h \
- fpu_proto.h status_w.h
-fpu_entry.o : fpu_entry.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/signal.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h
-fpu_etc.o : fpu_etc.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h exception.h fpu_emu.h \
- fpu_proto.h status_w.h reg_constant.h
-fpu_trig.o : fpu_trig.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h exception.h fpu_emu.h \
- fpu_proto.h status_w.h control_w.h reg_constant.h
-get_address.o : get_address.c /usr/include/linux/stddef.h /usr/include/asm/segment.h \
- fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h exception.h fpu_emu.h fpu_proto.h
-load_store.o : load_store.c /usr/include/asm/segment.h fpu_system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- exception.h fpu_emu.h fpu_proto.h status_w.h
-poly_2xm1.o : poly_2xm1.c exception.h fpu_emu.h /usr/include/linux/math_emu.h \
- fpu_proto.h reg_constant.h
-poly_atan.o : poly_atan.c exception.h fpu_emu.h /usr/include/linux/math_emu.h \
- fpu_proto.h reg_constant.h
-poly_l2.o : poly_l2.c exception.h fpu_emu.h /usr/include/linux/math_emu.h fpu_proto.h \
- reg_constant.h
-poly_sin.o : poly_sin.c exception.h fpu_emu.h /usr/include/linux/math_emu.h \
- fpu_proto.h reg_constant.h
-poly_tan.o : poly_tan.c exception.h fpu_emu.h /usr/include/linux/math_emu.h \
- fpu_proto.h reg_constant.h
-reg_add_sub.o : reg_add_sub.c exception.h fpu_emu.h /usr/include/linux/math_emu.h \
- fpu_proto.h reg_constant.h
-reg_compare.o : reg_compare.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h exception.h fpu_emu.h \
- fpu_proto.h status_w.h
-reg_constant.o : reg_constant.c fpu_system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h fpu_emu.h fpu_proto.h \
- status_w.h reg_constant.h
-reg_ld_str.o : reg_ld_str.c /usr/include/asm/segment.h fpu_system.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- exception.h fpu_emu.h fpu_proto.h reg_constant.h control_w.h
-reg_mul.o : reg_mul.c exception.h fpu_emu.h /usr/include/linux/math_emu.h fpu_proto.h \
- reg_constant.h
-div_small.o : div_small.S fpu_asm.h fpu_emu.h
-poly_div.o : poly_div.S fpu_asm.h fpu_emu.h
-poly_mul64.o : poly_mul64.S fpu_asm.h fpu_emu.h
-polynomial.o : polynomial.S fpu_asm.h fpu_emu.h
-reg_div.o : reg_div.S exception.h fpu_emu.h fpu_asm.h
-reg_norm.o : reg_norm.S fpu_asm.h fpu_emu.h
-reg_u_add.o : reg_u_add.S exception.h fpu_emu.h fpu_asm.h
-reg_u_div.o : reg_u_div.S exception.h fpu_emu.h fpu_asm.h
-reg_u_mul.o : reg_u_mul.S exception.h fpu_emu.h fpu_asm.h
-reg_u_sub.o : reg_u_sub.S exception.h fpu_emu.h fpu_asm.h
-wm_shrx.o : wm_shrx.S fpu_asm.h fpu_emu.h
-wm_sqrt.o : wm_sqrt.S exception.h fpu_emu.h fpu_asm.h
+---------------------------------------------------------------------------+
-***NOTE*** THIS SHOULD BE REGARDED AS AN ALPHA TEST VERSION
- (although the beta version may be identical)
-
wm-FPU-emu is an FPU emulator for Linux. It is derived from wm-emu387
which is my 80387 emulator for djgpp (gcc under msdos); wm-emu387 was
--Bill Metzenthen
Oct 1992
+
+[ note: I have advanced the version number from alpha numbers
+ to beta numbers. This is not meant to indicate any major
+ changes but rather the fact that the emulator has been a
+ standard part of the Linux distribution for some months
+ and is currently reasonably stable. WM Jan 1993 ]
+
+
----------------------- Internals of wm-FPU-emu -----------------------
Numeric algorithms:
----------------------- Limitations of wm-FPU-emu -----------------------
There are a number of differences between the current wm-FPU-emu
-(version ALPHA 0.7) and the 80486 FPU (apart from bugs). Some of the
+(version beta 1.0) and the 80486 FPU (apart from bugs). Some of the
more important differences are listed below:
Internal computations do not use de-normal numbers (but External
{
int i, int_type;
- int_type = 0;
+ int_type = 0; /* Needed only to stop compiler warnings */
if ( n & EX_INTERNAL )
{
int_type = n - EX_INTERNAL;
#define __BAD__ Un_impl /* Not implemented */
+#ifndef NO_UNDOC_CODE /* Un-documented FPU op-codes supported by default. */
+
+/* WARNING: These codes are not documented by Intel in their 80486 manual
+ and may not work on FPU clones or later Intel FPUs. */
+
+/* Changes to support the un-doc codes provided by Linus Torvalds. */
+
#define _d9_d8_ fstp_i /* unofficial code (19) */
#define _dc_d0_ fcom_st /* unofficial code (14) */
#define _dc_d8_ fcompst /* unofficial code (1c) */
fdivr_, trig_b, __BAD__, __BAD__, fdiv_i, __BAD__, fdivp_, __BAD__,
};
+#else /* Support only documented FPU op-codes */
+
+static FUNC st_instr_table[64] = {
+ fadd__, fld_i_, __BAD__, __BAD__, fadd_i, ffree_, faddp_, __BAD__,
+ fmul__, fxch_i, __BAD__, __BAD__, fmul_i, __BAD__, fmulp_, __BAD__,
+ fcom_st, fp_nop, __BAD__, __BAD__, __BAD__, fst_i_, __BAD__, __BAD__,
+ fcompst, __BAD__, __BAD__, __BAD__, __BAD__, fstp_i, fcompp, __BAD__,
+ fsub__, fp_etc, __BAD__, finit_, fsubri, fucom_, fsubrp, fstsw_,
+ fsubr_, fconst, fucompp, __BAD__, fsub_i, fucomp, fsubp_, __BAD__,
+ fdiv__, trig_a, __BAD__, __BAD__, fdivri, __BAD__, fdivrp, __BAD__,
+ fdivr_, trig_b, __BAD__, __BAD__, fdiv_i, __BAD__, fdivp_, __BAD__,
+};
+
+#endif NO_UNDOC_CODE
+
+
#define _NONE_ 0 /* Take no special action */
#define _REG0_ 1 /* Need to check for not empty st(0) */
#define _REGI_ 2 /* Need to check for not empty st(0) and st(rm) */
#define _PUSH_ 3 /* Need to check for space to push onto stack */
#define _null_ 4 /* Function illegal or not implemented */
+#ifndef NO_UNDOC_CODE
+
+/* Un-documented FPU op-codes supported by default. (see above) */
+
static unsigned char type_table[64] = {
_REGI_, _NONE_, _null_, _null_, _REGI_, _REGi_, _REGI_, _REGi_,
_REGI_, _REGI_, _null_, _null_, _REGI_, _REGI_, _REGI_, _REGI_,
_REGI_, _NONE_, _null_, _null_, _REGI_, _null_, _REGI_, _null_
};
+#else /* Support only documented FPU op-codes */
+
+static unsigned char type_table[64] = {
+ _REGI_, _NONE_, _null_, _null_, _REGI_, _REGi_, _REGI_, _null_,
+ _REGI_, _REGI_, _null_, _null_, _REGI_, _null_, _REGI_, _null_,
+ _REGI_, _NONE_, _null_, _null_, _null_, _REG0_, _null_, _null_,
+ _REGI_, _null_, _null_, _null_, _null_, _REG0_, _REGI_, _null_,
+ _REGI_, _NONE_, _null_, _NONE_, _REGI_, _REGI_, _REGI_, _NONE_,
+ _REGI_, _NONE_, _REGI_, _null_, _REGI_, _REGI_, _REGI_, _null_,
+ _REGI_, _NONE_, _null_, _null_, _REGI_, _null_, _REGI_, _null_,
+ _REGI_, _NONE_, _null_, _null_, _REGI_, _null_, _REGI_, _null_
+};
+
+#endif NO_UNDOC_CODE
+
/* Be careful when using any of these global variables...
they might change if swapping is triggered */
{
unsigned char mod;
long *cpu_reg_ptr;
- int offset = 0;
+ int offset = 0; /* Initialized just to stop compiler warnings. */
mod = (FPU_modrm >> 6) & 3;
{
FPU_REG *pop_ptr; /* We need a version of FPU_st0_ptr which won't change. */
- pop_ptr = NULL;
+ pop_ptr = NULL; /* Initialized just to stop compiler warnings. */
switch ( type_table[(int) (unsigned) type] )
{
case _NONE_:
movb SIGN(%esi),%cl
cmpb %cl,SIGN(%ebx)
- setneb (%edi) // Set the sign, requires neg=1, pos=0
+ setne (%edi) // Set the sign, requires SIGN_NEG=1, SIGN_POS=0
add $SIGL_OFFSET,%ebx
add $SIGL_OFFSET,%esi
| |
+---------------------------------------------------------------------------*/
-#define FPU_VERSION "wm-FPU-emu version ALPHA 0.8"
+#define FPU_VERSION "wm-FPU-emu version BETA 1.0"
+++ /dev/null
-floppy.o : floppy.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/timer.h /usr/include/linux/fdreg.h \
- /usr/include/linux/fd.h /usr/include/linux/errno.h /usr/include/asm/dma.h /usr/include/asm/io.h \
- /usr/include/asm/system.h /usr/include/asm/segment.h blk.h
-genhd.o : genhd.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/genhd.h /usr/include/linux/kernel.h
-hd.o : hd.c /usr/include/linux/config.h /usr/include/linux/autoconf.h /usr/include/linux/errno.h \
- /usr/include/linux/signal.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/timer.h /usr/include/linux/hdreg.h \
- /usr/include/linux/genhd.h /usr/include/asm/system.h /usr/include/asm/io.h /usr/include/asm/segment.h \
- blk.h
-ll_rw_blk.o : ll_rw_blk.c /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/locks.h /usr/include/asm/system.h blk.h
-ramdisk.o : ramdisk.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/minix_fs.h /usr/include/linux/string.h \
- /usr/include/asm/system.h /usr/include/asm/segment.h blk.h
while (1) {
if ((current_minor & mask) >= (4 + hd->max_p))
return;
- if (!(bh = bread(dev,0,1024))) {
- printk("Unable to read partition table of device %04x\n",dev);
+ if (!(bh = bread(dev,0,1024)))
return;
- }
/*
* This block is from a device that we're about to stomp on.
* So make sure nobody thinks this block is usable.
!(hd->part[current_minor].nr_sects = p->nr_sects))
goto done; /* shouldn't happen */
hd->part[current_minor].start_sect = this_sector + p->start_sect;
- printk(" Logical part %d start %d size %d end %d\n\r",
- mask & current_minor, hd->part[current_minor].start_sect,
- hd->part[current_minor].nr_sects,
- hd->part[current_minor].start_sect +
- hd->part[current_minor].nr_sects - 1);
+ printk(" %s%c%d", hd->major_name,
+ 'a'+(current_minor >> hd->minor_shift),
+ mask & current_minor);
current_minor++;
p++;
/*
static void check_partition(struct gendisk *hd, unsigned int dev)
{
+ static int first_time = 1;
int i, minor = current_minor;
struct buffer_head *bh;
struct partition *p;
unsigned long first_sector;
int mask = (1 << hd->minor_shift) - 1;
+ if (first_time)
+ printk("Partition check:\n");
+ first_time = 0;
first_sector = hd->part[MINOR(dev)].start_sect;
-
if (!(bh = bread(dev,0,1024))) {
- printk("Unable to read partition table of device %04x\n",dev);
+ printk(" unable to read partition table of device %04x\n",dev);
return;
}
- printk("%s%c :\n\r", hd->major_name, 'a'+(minor >> hd->minor_shift));
+ printk(" %s%c:", hd->major_name, 'a'+(minor >> hd->minor_shift));
current_minor += 4; /* first "extra" minor */
if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
p = 0x1BE + (void *)bh->b_data;
if (!(hd->part[minor].nr_sects = p->nr_sects))
continue;
hd->part[minor].start_sect = first_sector + p->start_sect;
- printk(" part %d start %d size %d end %d \n\r", i,
- hd->part[minor].start_sect, hd->part[minor].nr_sects,
- hd->part[minor].start_sect + hd->part[minor].nr_sects - 1);
+ printk(" %s%c%d", hd->major_name,'a'+(minor >> hd->minor_shift), i);
if ((current_minor & 0x3f) >= 60)
continue;
if (p->sys_ind == EXTENDED_PARTITION) {
+ printk(" <");
extended_partition(hd, (hd->major << 8) | minor);
+ printk(" >");
}
}
/*
continue;
hd->part[current_minor].start_sect = p->start_sect;
hd->part[current_minor].nr_sects = p->nr_sects;
- printk(" DM part %d start %d size %d end %d\n\r",
- current_minor & mask,
- hd->part[current_minor].start_sect,
- hd->part[current_minor].nr_sects,
- hd->part[current_minor].start_sect +
- hd->part[current_minor].nr_sects - 1);
+ printk(" %s%c%d", hd->major_name,
+ 'a'+(current_minor >> hd->minor_shift),
+ current_minor & mask);
}
}
} else
- printk("Bad partition table on dev %04x\n",dev);
+ printk(" bad partition table");
+ printk("\n");
brelse(bh);
}
nr += p->nr_real;
}
- if (nr)
- printk("Partition table%s ok.\n\r",(nr>1)?"s":"");
-
if (ramdisk_size)
rd_load();
mount_root();
#define HD_DELAY 0
-/* Max read/write errors/sector */
-#define MAX_ERRORS 7
+#define MAX_ERRORS 16 /* Max read/write errors/sector */
+#define RESET_FREQ 8 /* Reset controller every 8th retry */
+#define RECAL_FREQ 4 /* Recalibrate every 4th retry */
#define MAX_HD 2
static void recal_intr(void);
static struct wait_queue * busy_wait = NULL;
static int reset = 0;
+static int hd_error = 0;
#if (HD_DELAY > 0)
unsigned long last_req, read_timer();
int i=inb_p(HD_STATUS);
if ((i & (BUSY_STAT | READY_STAT | WRERR_STAT | SEEK_STAT | ERR_STAT))
- == (READY_STAT | SEEK_STAT))
+ == (READY_STAT | SEEK_STAT)) {
+ hd_error = 0;
return 0; /* ok */
+ }
printk("HD: win_result: status = 0x%02x\n",i);
if (i&1) {
- i=inb(HD_ERROR);
- printk("HD: win_result: error = 0x%02x\n",i);
+ hd_error = inb(HD_ERROR);
+ printk("HD: win_result: error = 0x%02x\n",hd_error);
}
return 1;
}
outb(hd_info[0].ctl & 0x0f ,HD_CMD);
if (drive_busy())
printk("HD-controller still busy\n\r");
- if ((i = inb(HD_ERROR)) != 1)
- printk("HD-controller reset failed: %02x\n\r",i);
+ if ((hd_error = inb(HD_ERROR)) != 1)
+ printk("HD-controller reset failed: %02x\n\r",hd_error);
}
static void reset_hd(void)
SET_TIMER;
}
+/*
+ * bad_rw_intr() now tries to be a bit smarter and does things
+ * according to the error returned by the controller.
+ * -Mika Liljeberg (liljeber@cs.Helsinki.FI)
+ */
static void bad_rw_intr(void)
{
- int i;
+ int dev;
if (!CURRENT)
return;
- if (++CURRENT->errors >= MAX_ERRORS)
+ dev = MINOR(CURRENT->dev) >> 6;
+ if (++CURRENT->errors >= MAX_ERRORS || (hd_error & BBD_ERR)) {
end_request(0);
- else if (CURRENT->errors > MAX_ERRORS/2)
+ recalibrate[dev] = 1;
+ } else if (CURRENT->errors % RESET_FREQ == 0)
reset = 1;
- else
- for (i=0; i < NR_HD; i++)
- recalibrate[i] = 1;
+ else if ((hd_error & TRK0_ERR) || CURRENT->errors % RECAL_FREQ == 0)
+ recalibrate[dev] = 1;
+ /* Otherwise just retry */
}
static inline int wait_DRQ(void)
sti();
printk("HD: read_intr: status = 0x%02x\n",i);
if (i & ERR_STAT) {
- i = (unsigned) inb(HD_ERROR);
- printk("HD: read_intr: error = 0x%02x\n",i);
+ hd_error = (unsigned) inb(HD_ERROR);
+ printk("HD: read_intr: error = 0x%02x\n",hd_error);
}
bad_rw_intr();
cli();
sti();
printk("HD: write_intr: status = 0x%02x\n",i);
if (i & ERR_STAT) {
- i = (unsigned) inb(HD_ERROR);
- printk("HD: write_intr: error = 0x%02x\n",i);
+ hd_error = (unsigned) inb(HD_ERROR);
+ printk("HD: write_intr: error = 0x%02x\n",hd_error);
}
bad_rw_intr();
cli();
+++ /dev/null
-aha1542.o : aha1542.c /usr/include/linux/kernel.h /usr/include/linux/head.h \
- /usr/include/linux/types.h /usr/include/linux/string.h /usr/include/linux/sched.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/asm/dma.h /usr/include/asm/io.h /usr/include/asm/system.h ../blk.h \
- scsi.h hosts.h aha1542.h
-aha1740.o : aha1740.c /usr/include/linux/kernel.h /usr/include/linux/head.h \
- /usr/include/linux/types.h /usr/include/linux/string.h /usr/include/linux/sched.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/asm/dma.h /usr/include/asm/io.h /usr/include/asm/system.h ../blk.h \
- scsi.h hosts.h aha1740.h
-fdomain.o : fdomain.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/asm/io.h ../blk.h scsi.h hosts.h \
- fdomain.h /usr/include/asm/system.h /usr/include/linux/errno.h
-hosts.o : hosts.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- ../blk.h /usr/include/linux/kernel.h scsi.h hosts.h
-scsi.o : scsi.c /usr/include/asm/system.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/timer.h \
- /usr/include/linux/string.h ../blk.h scsi.h hosts.h
-scsi_debug.o : scsi_debug.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/timer.h \
- /usr/include/linux/string.h /usr/include/linux/genhd.h /usr/include/asm/system.h \
- /usr/include/asm/io.h ../blk.h scsi.h hosts.h scsi_debug.h
-scsi_ioctl.o : scsi_ioctl.c /usr/include/asm/io.h /usr/include/asm/segment.h \
- /usr/include/asm/system.h /usr/include/linux/errno.h /usr/include/linux/kernel.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/string.h ../blk.h scsi.h hosts.h scsi_ioctl.h
-sd.o : sd.c /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/asm/system.h ../blk.h scsi.h hosts.h sd.h /usr/include/linux/genhd.h \
- scsi_ioctl.h
-sd_ioctl.o : sd_ioctl.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/hdreg.h \
- /usr/include/linux/errno.h /usr/include/asm/segment.h ../blk.h scsi.h hosts.h \
- sd.h /usr/include/linux/genhd.h
-seagate.o : seagate.c /usr/include/linux/config.h /usr/include/linux/autoconf.h
-sr.o : sr.c /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/asm/system.h ../blk.h scsi.h hosts.h sr.h scsi_ioctl.h
-sr_ioctl.o : sr_ioctl.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/asm/segment.h \
- /usr/include/linux/errno.h ../blk.h scsi.h sr.h scsi_ioctl.h /usr/include/linux/cdrom.h
-st.o : st.c /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/linux/mtio.h /usr/include/linux/ioctl.h /usr/include/linux/fcntl.h \
- /usr/include/asm/segment.h /usr/include/asm/system.h ../blk.h scsi.h st.h
-ultrastor.o : ultrastor.c /usr/include/linux/stddef.h /usr/include/linux/string.h \
- /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/asm/io.h /usr/include/asm/system.h \
- /usr/include/asm/dma.h ../blk.h scsi.h hosts.h ultrastor.h
-wd7000.o : wd7000.c /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h /usr/include/linux/kernel.h \
- /usr/include/linux/head.h /usr/include/linux/types.h /usr/include/linux/string.h \
- /usr/include/linux/sched.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/asm/system.h /usr/include/asm/dma.h \
- /usr/include/asm/io.h ../blk.h scsi.h hosts.h wd7000.h
((SCmd.sense_buffer[0] & 0x70) >> 4) == 7) {
if (SCmd.sense_buffer[2] &0xe0)
continue; /* No devices here... */
- if((SCmd.sense_buffer[2] & 0xf != NOT_READY) &&
- (SCmd.sense_buffer[2] & 0xf != UNIT_ATTENTION))
+ if(((SCmd.sense_buffer[2] & 0xf) != NOT_READY) &&
+ ((SCmd.sense_buffer[2] & 0xf) != UNIT_ATTENTION))
continue;
}
else
}
-static const char *wd_bases[] = {(char *)0xce000};
+static const char *wd_bases[] = {
+ (char *)0xde000,
+ (char *)0xdc000,
+ (char *)0xda000,
+ (char *)0xd8000,
+ (char *)0xd6000,
+ (char *)0xd4000,
+ (char *)0xd2000,
+ (char *)0xd0000,
+ (char *)0xce000,
+ (char *)0xcc000,
+ (char *)0xca000,
+ (char *)0xc8000,
+ (char *)0xc6000,
+ (char *)0xc4000,
+ (char *)0xc2000,
+ (char *)0xc0000
+ };
typedef struct {
char * signature;
unsigned offset;
* this way, so I think it will work OK.
*/
{
- info[0] = 32;
- info[1] = 64;
+ info[0] = 64;
+ info[1] = 32;
info[2] = (size + 2047) >> 11;
if (info[2] >= 1024) info[2] = 1024;
return 0;
+++ /dev/null
-atixlmouse.o : atixlmouse.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/errno.h \
- /usr/include/asm/io.h /usr/include/asm/segment.h /usr/include/asm/irq.h
-busmouse.o : busmouse.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/busmouse.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/errno.h /usr/include/asm/io.h /usr/include/asm/segment.h \
- /usr/include/asm/irq.h
-console.o : console.c /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/timer.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h /usr/include/linux/string.h /usr/include/linux/errno.h \
- /usr/include/linux/kd.h /usr/include/linux/keyboard.h /usr/include/asm/io.h \
- /usr/include/asm/segment.h vt_kern.h /usr/include/linux/vt.h
-keyboard.o : keyboard.c /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/ctype.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/ptrace.h /usr/include/linux/keyboard.h /usr/include/asm/io.h
-lp.o : lp.c /usr/include/linux/lp.h /usr/include/linux/errno.h /usr/include/linux/kernel.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/asm/io.h /usr/include/asm/segment.h
-mem.o : mem.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/mouse.h \
- /usr/include/linux/soundcard.h /usr/include/linux/user.h /usr/include/linux/ptrace.h \
- /usr/include/linux/a.out.h /usr/include/linux/string.h /usr/include/asm/segment.h \
- /usr/include/asm/io.h
-mouse.o : mouse.c /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/errno.h /usr/include/linux/mouse.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h
-msbusmouse.o : msbusmouse.c /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/busmouse.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/errno.h /usr/include/asm/io.h /usr/include/asm/segment.h \
- /usr/include/asm/irq.h
-psaux.o : psaux.c /usr/include/linux/timer.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/fcntl.h \
- /usr/include/linux/errno.h /usr/include/asm/io.h /usr/include/asm/segment.h \
- /usr/include/asm/system.h
-pty.o : pty.c /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/fcntl.h \
- /usr/include/asm/io.h
-serial.o : serial.c /usr/include/linux/errno.h /usr/include/linux/signal.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/timer.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/serial.h /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/asm/io.h /usr/include/asm/segment.h /usr/include/asm/bitops.h
-tty_io.o : tty_io.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/signal.h \
- /usr/include/linux/fcntl.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/timer.h /usr/include/linux/ctype.h /usr/include/linux/kd.h \
- /usr/include/linux/string.h /usr/include/linux/keyboard.h /usr/include/asm/segment.h \
- /usr/include/asm/bitops.h vt_kern.h /usr/include/linux/vt.h
-tty_ioctl.o : tty_ioctl.c /usr/include/linux/types.h /usr/include/linux/termios.h \
- /usr/include/linux/errno.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/tty.h /usr/include/asm/system.h \
- /usr/include/linux/fcntl.h /usr/include/asm/io.h /usr/include/asm/segment.h
-vt.o : vt.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/tty.h \
- /usr/include/linux/termios.h /usr/include/asm/system.h /usr/include/linux/timer.h \
- /usr/include/linux/keyboard.h /usr/include/linux/kd.h /usr/include/linux/vt.h \
- /usr/include/asm/io.h /usr/include/asm/segment.h vt_kern.h
buttons = inb(MSE_DATA_PORT);
dy |= (buttons & 0xf) << 4;
buttons = ((buttons >> 5) & 0x07);
- mouse.buttons = buttons;
- mouse.latch_buttons |= buttons;
- mouse.dx += dx;
- mouse.dy += dy;
- mouse.ready = 1;
- wake_up_interruptible(&mouse.wait);
+ if (dx != 0 || dy != 0 || buttons != mouse.buttons) {
+ mouse.buttons = buttons;
+ mouse.dx += dx;
+ mouse.dy += dy;
+ mouse.ready = 1;
+ wake_up_interruptible(&mouse.wait);
+ }
MSE_INT_ON();
}
mouse.ready = 0;
mouse.dx = 0;
mouse.dy = 0;
- mouse.buttons = mouse.latch_buttons = 0x80;
+ mouse.buttons = 0x87;
if (request_irq(MOUSE_IRQ, mouse_interrupt)) {
mouse.active = 0;
return -EBUSY;
if (!mouse.ready)
return -EAGAIN;
MSE_INT_OFF();
- put_fs_byte(mouse.latch_buttons | 0x80, buffer);
+ put_fs_byte(mouse.buttons | 0x80, buffer);
if (mouse.dx < -127)
mouse.dx = -127;
if (mouse.dx > 127)
put_fs_byte(0x00, buffer + i);
mouse.dx = 0;
mouse.dy = 0;
- mouse.latch_buttons = mouse.buttons;
mouse.ready = 0;
MSE_INT_ON();
return i;
mouse.present = 1;
mouse.active = 0;
mouse.ready = 0;
- mouse.buttons = mouse.latch_buttons = 0x80;
+ mouse.buttons = 0x87;
mouse.dx = 0;
mouse.dy = 0;
mouse.wait = NULL;
static unsigned short video_port_reg; /* Video register select port */
static unsigned short video_port_val; /* Video register value port */
static int can_do_color = 0;
+static int printable = 0;
static struct {
unsigned short vc_video_erase_char; /* Background erase character */
long con_init(long kmem_start)
{
char *display_desc = "????";
- char *display_ptr;
int currcons = 0;
long base;
int orig_x = ORIG_X;
{
video_type = VIDEO_TYPE_EGAM;
video_mem_term = 0xb8000;
- display_desc = "EGAm";
+ display_desc = "EGA+";
}
else
{
{
video_type = VIDEO_TYPE_EGAC;
video_mem_term = 0xc0000;
- display_desc = "EGAc";
+ display_desc = "EGA+";
}
else
{
}
}
- /* Let the user know what kind of display driver we are using */
-
- display_ptr = ((char *)video_mem_base) + video_size_row - 8;
- while (*display_desc)
- {
- *display_ptr++ = *display_desc++;
- display_ptr++;
- }
-
/* Initialize the variables used for scrolling (mostly EGA/VGA) */
base = (long)vc_scrmembuf;
save_cur(currcons);
gotoxy(currcons,orig_x,orig_y);
update_screen(fg_console);
+ printable = 1;
+ printk("Console: %s %s %dx%d, %d virtual consoles\n",
+ can_do_color?"colour":"mono",
+ display_desc,
+ video_num_columns,video_num_lines,
+ NR_CONSOLES);
return kmem_start;
}
int currcons = fg_console;
char c;
- if (currcons<0 || currcons>=NR_CONSOLES)
- currcons = 0;
+ if (!printable || currcons<0 || currcons>=NR_CONSOLES)
+ return;
while ((c = *(b++)) != 0) {
if (c == 10 || c == 13 || need_wrap) {
if (c != 13)
#include <linux/sched.h>
#include <linux/tty.h>
#include <linux/fcntl.h>
+#include <linux/interrupt.h>
#include <asm/system.h>
-#include <asm/io.h>
+#include <asm/bitops.h>
static void pty_close(struct tty_struct * tty, struct file * filp)
{
- if (!tty)
+ if (!tty || (tty->count > 1))
return;
wake_up_interruptible(&tty->read_q.proc_list);
if (!tty->link)
}
TTY_READ_FLUSH(to);
wake_up_interruptible(&from->write_q.proc_list);
+ if (from->write_data_cnt) {
+ set_bit(from->line, &tty_check_write);
+ mark_bh(TTY_BH);
+ }
}
/*
*
* long rs_init(long);
* int rs_open(struct tty_struct * tty, struct file * filp)
- * void change_speed(unsigned int line)
*/
#include <linux/errno.h>
#include <linux/timer.h>
#include <linux/tty.h>
#include <linux/serial.h>
+#include <linux/interrupt.h>
#include <linux/config.h>
+#include <linux/string.h>
+#include <linux/fcntl.h>
#include <asm/system.h>
#include <asm/io.h>
* Enables support for the Accent Async 4 port serial
* port.
*
- * SOFT_IRQ
- * Not yet ready; requires changes in the rest of the
- * Linux kernel
- *
*/
-#define NEW_INTERRUPT_ROUTINE
-#undef SOFT_IRQ
-#undef FAKE_SOFT_IRQ
-
-#ifdef FAKE_SOFT_IRQ
-#define SOFT_IRQ
-#endif
-
#define WAKEUP_CHARS (3*TTY_BUF_SIZE/4)
/*
* transmitting (and therefore have a
* write timeout pending, in case the
* THRE interrupt gets lost.)
+ *
+ * We assume here that int's are 32 bits, so an array of two gives us
+ * 64 lines, which is the maximum we can support.
*/
-static volatile unsigned long rs_event = 0;
-static unsigned long rs_write_active = 0;
-
-static int doing_softint = 0;
+static int rs_event[2];
+static int rs_write_active[2];
static struct async_struct *IRQ_ports[16];
*/
static int baud_table[] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
- 9600, 19200, 38400, 56700, 115200, 0 };
+ 9600, 19200, 38400, 57600, 115200, 0 };
static void startup(struct async_struct * info);
static void shutdown(struct async_struct * info);
static void rs_throttle(struct tty_struct * tty, int status);
static void restart_port(struct async_struct *info);
-#ifdef FAKE_SOFT_IRQ
-static void do_softint();
-#endif
+static int block_til_ready(struct tty_struct *tty, struct file * filp,
+ struct async_struct *info);
static inline unsigned int serial_in(struct async_struct *info, int offset)
{
int event)
{
info->event |= 1 << event;
- rs_event |= 1 << info->line;
-
-#ifndef SOFT_IRQ
- timer_table[RS_TIMER].expires = 0;
- timer_active |= 1 << RS_TIMER;
-#endif
+ set_bit(info->line, rs_event);
+ mark_bh(SERIAL_BH);
}
}
}
queue->tail = tail;
- if (VLEFT > WAKEUP_CHARS)
+ if (VLEFT > WAKEUP_CHARS) {
rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
+ if (info->tty->write_data_cnt) {
+ set_bit(info->tty->line,
+ &tty_check_write);
+ mark_bh(TTY_BH);
+ }
+ }
info->timer = jiffies + info->timeout;
if (info->timer < timer_table[RS_TIMER].expires)
timer_table[RS_TIMER].expires = info->timer;
-#ifdef i386
- rs_write_active |= 1 << info->line;
-#else
- set_bit(info->line, &rs_write_active);
-#endif
+ set_bit(info->line, rs_write_active);
timer_active |= 1 << RS_TIMER;
#ifdef SERIAL_INT_DEBUG
printk("THRE...");
status = serial_in(info, UART_MSR);
if (!(CFLAG & CLOCAL) && (status & UART_MSR_DDCD)) {
- if (!(status & UART_MSR_DCD))
+ if (status & UART_MSR_DCD) {
+#ifdef SERIAL_INT_DEBUG
+ printk("DCD on...");
+#endif
+ rs_sched_event(info, RS_EVENT_OPEN_WAKEUP);
+ } else {
+#ifdef SERIAL_INT_DEBUG
+ printk("DCD off...");
+#endif
rs_sched_event(info, RS_EVENT_HUP_PGRP);
+ }
}
if (CFLAG & CRTSCTS) {
if (info->tty->stopped) {
done = 1;
}
}
-#ifdef FAKE_SOFT_IRQ
- if (rs_event && !doing_softint) {
- doing_softint = 1;
- sti(); /* Turn on interrupts! */
- do_softint();
- }
-#endif
}
#ifdef CONFIG_AUTO_IRQ
}
#endif
-#ifdef SOFT_IRQ
static void do_softint()
{
- unsigned long mask;
+ int i;
struct async_struct *info;
- while (rs_event) {
- info = rs_table;
- for (mask = 1 ; mask ; info++, mask <<= 1) {
- if (mask > rs_event)
- break;
- if (!info->tty) /* check that we haven't closed it.. */
+ for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
+ if (!clear_bit(i, rs_event)) {
+ if (!info->tty)
continue;
- if (mask & rs_event) {
- rs_event &= ~mask;
- if (!clear_bit(RS_EVENT_READ_PROCESS, &info->event)) {
- TTY_READ_FLUSH(info->tty);
- }
- if (!clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
- wake_up_interruptible(&info->tty->write_q.proc_list);
- }
- if (!clear_bit(RS_EVENT_HUP_PGRP, &info->event))
- tty_hangup(info->tty);
- if (!clear_bit(RS_EVENT_BREAK_INT, &info->event)) {
- flush_input(info->tty);
- flush_output(info->tty);
- if (info->tty->pgrp > 0)
- kill_pg(info->tty->pgrp,SIGINT,1);
- }
- if (!clear_bit(RS_EVENT_DO_SAK, &info->event)) {
- do_SAK(info->tty);
- }
- }
- }
- }
-#ifdef FAKE_SOFT_IRQ
- doing_softint = 0;
-#endif
-}
-#endif
-
-/*
- * This subroutine handles all of the timer functionality required for
- * the serial ports.
- */
-
-#define END_OF_TIME 0xffffffff
-static void rs_timer(void)
-{
- unsigned long mask;
- struct async_struct *info;
- unsigned long next_timeout;
-
-#ifdef FAKE_SOFT_IRQ
- cli();
- if (rs_event && !doing_softint) {
- doing_softint = 1;
- sti(); /* Turn on interrupts! */
- do_softint();
- }
- sti();
-#endif
- info = rs_table;
- next_timeout = END_OF_TIME;
- for (mask = 1 ; mask ; info++, mask <<= 1) {
- if (
-#ifndef SOFT_IRQ
- (mask > rs_event) &&
-#endif
- (mask > rs_write_active))
- break;
- if (!info->tty) { /* check that we haven't closed it.. */
- rs_event &= ~mask;
- rs_write_active &= ~mask;
- continue;
- }
-#ifndef SOFT_IRQ
- if (mask & rs_event) {
if (!clear_bit(RS_EVENT_READ_PROCESS, &info->event)) {
TTY_READ_FLUSH(info->tty);
}
flush_input(info->tty);
flush_output(info->tty);
if (info->tty->pgrp > 0)
- kill_pg(info->tty->pgrp,SIGINT,1);
+ kill_pg(info->tty->pgrp, SIGINT,1);
}
if (!clear_bit(RS_EVENT_DO_SAK, &info->event)) {
do_SAK(info->tty);
}
- cli();
- if (info->event)
- next_timeout = 0;
- else
- rs_event &= ~mask;
- sti();
- }
-#endif
- if (mask & rs_write_active) {
- if (info->timer <= jiffies) {
-#ifdef i386
- rs_write_active &= ~mask;
-#else
- clear_bit(info->line, &rs_write_active);
-#endif
- rs_write(info->tty);
+ if (!clear_bit(RS_EVENT_OPEN_WAKEUP, &info->event)) {
+ wake_up_interruptible(&info->open_wait);
}
- if ((mask & rs_write_active) &&
- (info->timer < next_timeout))
- next_timeout = info->timer;
}
}
- if (next_timeout != END_OF_TIME) {
- timer_table[RS_TIMER].expires = next_timeout;
-#ifdef i386
- /*
- * This must compile to a single, atomic instruction.
- * It does using 386 with GCC; if you're not sure, use
- * the set_bit function, which is supposed to be atomic.
- */
- timer_active |= 1 << RS_TIMER;
-#else
- set_bit(RS_TIMER, &timer_active);
-#endif
+}
+
+/*
+ * This subroutine handles all of the timer functionality required for
+ * the serial ports.
+ */
+
+static void rs_timer(void)
+{
+ int i;
+ struct async_struct *info;
+
+ for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
+ if (test_bit(i, rs_write_active) && (info->timer <= jiffies)) {
+ clear_bit(i, rs_write_active);
+ rs_write(info->tty);
+ }
}
}
line = DEV_TO_SL(tty->line);
if ((line < 0) || (line >= NR_PORTS))
return;
- tty->stopped = 0; /* Force flush to succeed */
- wait_until_sent(tty);
info = rs_table + line;
- if (!info->port)
- return;
- shutdown(info);
-#ifdef i386
- rs_write_active &= ~(1 << line);
- rs_event &= ~(1 << line);
-#else
- clear_bit(line, &rs_write_active);
- clear_bit(line, &rs_event);
+#ifdef SERIAL_DEBUG_OPEN
+ printk("rs_close ttys%d, count = %d\n", info->line, info->count);
#endif
+ if (--info->count > 0)
+ return;
+ tty->stopped = 0; /* Force flush to succeed */
+ wait_until_sent(tty);
+ clear_bit(line, rs_write_active);
+ clear_bit(line, rs_event);
info->event = 0;
- info->tty = 0;
- if (info->flags & ASYNC_NO_IRQ)
- info->flags &= ~ASYNC_NO_IRQ;
- else {
+ info->count = 0;
+ info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
+ if (info->blocked_open) {
+ shutdown(info);
+ startup(info);
+ wake_up_interruptible(&info->open_wait);
+ return;
+ }
+ if (info->flags & ASYNC_INITIALIZED) {
+ shutdown(info);
irq = info->irq;
if (irq == 2)
irq = 9;
- if (info->next_port)
- info->next_port->prev_port = info->prev_port;
- if (info->prev_port)
- info->prev_port->next_port = info->next_port;
- else
- IRQ_ports[irq] = info->next_port;
- if (!IRQ_ports[irq])
- free_irq(irq);
+ if (irq) {
+ if (info->next_port)
+ info->next_port->prev_port = info->prev_port;
+ if (info->prev_port)
+ info->prev_port->next_port = info->next_port;
+ else
+ IRQ_ports[irq] = info->next_port;
+ if (!IRQ_ports[irq])
+ free_irq(irq);
+ }
}
+ info->tty = 0;
}
static void startup(struct async_struct * info)
{
unsigned short ICP;
+ unsigned long flags;
+
+ __asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
/*
* First, clear the FIFO buffers and disable them
(void)serial_inp(info, UART_RX);
(void)serial_inp(info, UART_IIR);
(void)serial_inp(info, UART_MSR);
+
+ info->flags |= ASYNC_INITIALIZED;
+ if (info->tty)
+ clear_bit(TTY_IO_ERROR, &info->tty->flags);
+ __asm__ __volatile__("pushl %0 ; popfl"::"r" (flags));
}
static void shutdown(struct async_struct * info)
{
+ unsigned long flags;
+
+ __asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
serial_outp(info, UART_IER, 0x00); /* disable all intrs */
if (info->tty && !(info->tty->termios->c_cflag & HUPCL))
serial_outp(info, UART_MCR, UART_MCR_DTR);
serial_outp(info, UART_MCR, 0x00);
serial_outp(info, UART_FCR, UART_FCR_CLEAR_CMD); /* disable FIFO's */
(void)serial_in(info, UART_RX); /* read data port to reset things */
+ info->flags &= ~ASYNC_INITIALIZED;
+ if (info->tty)
+ set_bit(TTY_IO_ERROR, &info->tty->flags);
+ __asm__ __volatile__("pushl %0 ; popfl"::"r" (flags));
}
-void change_speed(unsigned int line)
+static void change_speed(unsigned int line)
{
struct async_struct * info;
unsigned short port;
static int set_serial_info(struct async_struct * info,
struct serial_struct * new_info)
{
- struct serial_struct tmp;
- unsigned int new_port;
- unsigned int irq,new_irq;
+ struct serial_struct new;
+ unsigned int irq,check_irq;
int retval;
struct sigaction sa;
struct async_struct old_info;
- if (!suser())
- return -EPERM;
if (!new_info)
return -EFAULT;
- memcpy_fromfs(&tmp,new_info,sizeof(tmp));
+ memcpy_fromfs(&new,new_info,sizeof(new));
+ check_irq = 0;
old_info = *info;
- info->baud_base = tmp.baud_base;
- info->flags = tmp.flags & ASYNC_FLAGS;
- info->custom_divisor = tmp.custom_divisor;
+ if (!suser()) {
+ info->flags = ((info->flags & ~ASYNC_SPD_MASK) |
+ (new.flags & ASYNC_SPD_MASK));
+ info->custom_divisor = new.custom_divisor;
+ new.port = 0; /* Prevent initialization below */
+ goto check_and_exit;
+ }
- if ((tmp.type >= PORT_UNKNOWN) && (tmp.type <= PORT_MAX))
- info->type = tmp.type;
-
- new_port = tmp.port;
- new_irq = tmp.irq;
- if (new_irq > 15 || new_port > 0xffff) {
- *info = old_info;
+ if ((new.irq > 15) || (new.port > 0xffff) ||
+ (new.type < PORT_UNKNOWN) || (new.type > PORT_MAX)) {
return -EINVAL;
}
- if (new_irq == 2)
- new_irq = 9;
+
+ info->baud_base = new.baud_base;
+ info->flags = new.flags & ASYNC_FLAGS;
+ info->custom_divisor = new.custom_divisor;
+ info->type = new.type;
+
+ if (new.irq == 2)
+ new.irq = 9;
irq = info->irq;
if (irq == 2)
irq = 9;
- if (irq != new_irq) {
- /*
- * We need to change the IRQ for this board. OK, if
- * necessary, first we try to grab the new IRQ for
- * serial interrupts.
- */
- if (!IRQ_ports[new_irq]) {
+
+ /*
+ * If necessary, first we try to grab the new IRQ for serial
+ * interrupts. (We have to do this early, since we may get an
+ * error trying to do this.)
+ */
+ if (new.port && new.irq && info->type &&
+ ((irq != new.irq) || !(info->flags & ASYNC_INITIALIZED))) {
+ if (!IRQ_ports[new.irq]) {
sa.sa_handler = rs_interrupt;
sa.sa_flags = (SA_INTERRUPT);
sa.sa_mask = 0;
sa.sa_restorer = NULL;
- retval = irqaction(new_irq,&sa);
+ retval = irqaction(new.irq,&sa);
if (retval) {
*info = old_info;
return retval;
}
}
+ }
+ if ((new.irq != irq) ||
+ (new.port != info->port)) {
/*
- * If the new IRQ is OK, now we unlink the async structure from
- * the existing interrupt chain.
+ * We need to shutdown the serial port at the old
+ * port/irq combination.
*/
- if (info->next_port)
- info->next_port->prev_port = info->prev_port;
- if (info->prev_port)
- info->prev_port->next_port = info->next_port;
- else
- IRQ_ports[irq] = info->next_port;
- if (!IRQ_ports[irq])
- free_irq(irq);
-
+ if (info->flags & ASYNC_INITIALIZED) {
+ shutdown(info);
+ if (info->next_port)
+ info->next_port->prev_port = info->prev_port;
+ if (info->prev_port)
+ info->prev_port->next_port = info->next_port;
+ else
+ IRQ_ports[irq] = info->next_port;
+ check_irq = irq; /* Check later if we need to */
+ /* free the IRQ */
+ }
+ info->irq = new.irq;
+ info->port = new.port;
+ }
+
+check_and_exit:
+ if (new.port && new.irq && info->type &&
+ !(info->flags & ASYNC_INITIALIZED)) {
/*
- * Now link in the interrupt to the new interrupt chain.
+ * Link the port into the new interrupt chain.
*/
info->prev_port = 0;
- info->next_port = IRQ_ports[new_irq];
+ info->next_port = IRQ_ports[info->irq];
if (info->next_port)
info->next_port->prev_port = info;
- IRQ_ports[new_irq] = info;
- info->irq = new_irq;
- }
- cli();
- if (new_port != info->port) {
- shutdown(info);
- info->port = new_port;
+ IRQ_ports[info->irq] = info;
startup(info);
change_speed(info->line);
- old_info = *info; /* To avoid second change_speed */
- }
- sti();
-
- if (((old_info.flags & ASYNC_SPD_MASK) != (info->flags & ASYNC_SPD_MASK)) ||
- (old_info.custom_divisor != info->custom_divisor))
+ } else if (((old_info.flags & ASYNC_SPD_MASK) !=
+ (info->flags & ASYNC_SPD_MASK)) ||
+ (old_info.custom_divisor != info->custom_divisor))
change_speed(info->line);
+
+ if (check_irq && !IRQ_ports[check_irq])
+ free_irq(check_irq);
+
return 0;
}
return -EINVAL;
}
return 0;
-}
+}
+
+static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
+{
+ if (tty->termios->c_cflag == old_termios->c_cflag)
+ return;
+
+ change_speed(DEV_TO_SL(tty->line));
+
+ if ((old_termios->c_cflag & CRTSCTS) &&
+ !(tty->termios->c_cflag & CRTSCTS)) {
+ tty->stopped = 0;
+ rs_write(tty);
+ }
+
+ if (!(old_termios->c_cflag & CLOCAL) &&
+ (tty->termios->c_cflag & CLOCAL))
+ wake_up_interruptible(&rs_table[DEV_TO_SL(tty->line)].open_wait);
+}
/*
* This routine is called whenever a serial port is opened. It
int irq, retval, line;
struct sigaction sa;
- if (!tty)
- return -ENODEV;
- if (tty->count > 1)
- return 0; /* We've already been initialized */
line = DEV_TO_SL(tty->line);
if ((line < 0) || (line >= NR_PORTS))
return -ENODEV;
info = rs_table + line;
- if (!info->port || !info->irq || !info->type) {
-#ifdef TTY_IO_ERROR
- set_bit(TTY_IO_ERROR, &tty->flags);
- info->flags |= ASYNC_NO_IRQ;
- info->tty = tty;
- tty->close = rs_close;
- tty->ioctl = rs_ioctl;
- return 0;
-#else
- return -ENODEV;
+#ifdef SERIAL_DEBUG_OPEN
+ printk("rs_open ttys%d, count = %d\n", info->line, info->count);
#endif
- } else
- info->flags &= ~ASYNC_NO_IRQ;
+ info->count++;
info->tty = tty;
+
tty->write = rs_write;
tty->close = rs_close;
tty->ioctl = rs_ioctl;
tty->throttle = rs_throttle;
- irq = info->irq;
- if (irq == 2)
- irq = 9;
- if (!IRQ_ports[irq]) {
- sa.sa_handler = rs_interrupt;
- sa.sa_flags = (SA_INTERRUPT);
- sa.sa_mask = 0;
- sa.sa_restorer = NULL;
- retval = irqaction(irq,&sa);
- if (retval)
- return retval;
+ tty->set_termios = rs_set_termios;
+
+ if (!(info->flags & ASYNC_INITIALIZED)) {
+ if (!info->port || !info->irq || !info->type) {
+ set_bit(TTY_IO_ERROR, &tty->flags);
+ return 0;
+ }
+ irq = info->irq;
+ if (irq == 2)
+ irq = 9;
+ if (!IRQ_ports[irq]) {
+ sa.sa_handler = rs_interrupt;
+ sa.sa_flags = (SA_INTERRUPT);
+ sa.sa_mask = 0;
+ sa.sa_restorer = NULL;
+ retval = irqaction(irq,&sa);
+ if (retval)
+ return retval;
+ }
+ /*
+ * Link in port to IRQ chain
+ */
+ info->prev_port = 0;
+ info->next_port = IRQ_ports[irq];
+ if (info->next_port)
+ info->next_port->prev_port = info;
+ IRQ_ports[irq] = info;
+
+ startup(info);
+ change_speed(info->line);
+ }
+
+ retval = block_til_ready(tty, filp, info);
+ if (retval)
+ return retval;
+
+ return 0;
+
+}
+
+static int block_til_ready(struct tty_struct *tty, struct file * filp,
+ struct async_struct *info)
+{
+ struct wait_queue wait = { current, NULL };
+ int retval;
+
+ /*
+ * If this is a callout device, then just make sure the normal
+ * device isn't being used.
+ */
+ if (MAJOR(filp->f_rdev) == 5) {
+ if (info->flags & ASYNC_NORMAL_ACTIVE)
+ return -EBUSY;
+ info->flags |= ASYNC_CALLOUT_ACTIVE;
+ return 0;
}
+
/*
- * Link in port to IRQ chain
+ * If non-blocking mode is set, then make the check up front
+ * and then exit.
*/
- info->prev_port = 0;
- info->next_port = IRQ_ports[irq];
- if (info->next_port)
- info->next_port->prev_port = info;
- IRQ_ports[irq] = info;
- startup(info);
- change_speed(info->line);
+ if (filp->f_flags & O_NONBLOCK) {
+ if (info->flags & ASYNC_CALLOUT_ACTIVE)
+ return -EBUSY;
+ info->flags |= ASYNC_NORMAL_ACTIVE;
+ return 0;
+ }
+
+ /*
+ * Block waiting for the carrier detect and the line to become
+ * free (i.e., not in use by the callout). While we are in
+ * this loop, info->count is dropped by one, so that
+ * rs_close() knows when to free things. We restore it upon
+ * exit, either normal or abnormal.
+ */
+ retval = 0;
+ add_wait_queue(&info->open_wait, &wait);
+#ifdef SERIAL_DEBUG_OPEN
+ printk("block_til_ready before block: ttys%d, count = %d\n",
+ info->line, info->count);
+#endif
+ info->count--;
+ info->blocked_open++;
+ while (1) {
+ serial_out(info, UART_MCR,
+ serial_inp(info, UART_MCR) | UART_MCR_DTR);
+ current->state = TASK_INTERRUPTIBLE;
+ if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
+ ((tty->termios->c_cflag & CLOCAL) ||
+ (serial_in(info, UART_MSR) & UART_MSR_DCD)))
+ break;
+ if (current->signal & ~current->blocked) {
+ retval = -ERESTARTSYS;
+ break;
+ }
+#ifdef SERIAL_DEBUG_OPEN
+ printk("block_til_ready blocking: ttys%d, count = %d\n",
+ info->line, info->count);
+#endif
+ schedule();
+ }
+ current->state = TASK_RUNNING;
+ remove_wait_queue(&info->open_wait, &wait);
+ info->count++;
+ info->blocked_open--;
+#ifdef SERIAL_DEBUG_OPEN
+ printk("block_til_ready after blocking: ttys%d, count = %d\n",
+ info->line, info->count);
+#endif
+ if (retval)
+ return retval;
+ info->flags |= ASYNC_NORMAL_ACTIVE;
+ tty_unhangup(filp); /* To make sure fops is OK */
return 0;
-}
+}
+
static void show_serial_version()
{
- printk("Serial driver version 3.8 with");
+ printk("Serial driver version 3.91 with");
#ifdef CONFIG_AST_FOURPORT
printk(" AST_FOURPORT");
#define SERIAL_OPT
#undef SERIAL_OPT
}
-
-static void init(struct async_struct * info)
-{
#ifdef CONFIG_AUTO_IRQ
- unsigned char status1, status2, scratch, save_ICP=0;
+static int get_auto_irq(struct async_struct *info)
+{
+ unsigned char save_MCR, save_IER, save_ICP=0;
unsigned short ICP=0, port = info->port;
unsigned long timeout;
-
+
/*
* Enable interrupts and see who answers
*/
rs_irq_triggered = 0;
- scratch = serial_inp(info, UART_IER);
- status1 = serial_inp(info, UART_MCR);
+ save_IER = serial_inp(info, UART_IER);
+ save_MCR = serial_inp(info, UART_MCR);
if (info->flags & ASYNC_FOURPORT) {
serial_outp(info, UART_MCR, UART_MCR_DTR | UART_MCR_RTS);
serial_outp(info, UART_IER, 0x0f); /* enable all intrs */
ICP = (port & 0xFE0) | 0x01F;
save_ICP = inb_p(ICP);
outb_p(0x80, ICP);
- (void) inb(ICP);
+ (void) inb_p(ICP);
} else {
serial_outp(info, UART_MCR,
UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
/*
* Now check to see if we got any business, and clean up.
*/
- if (rs_irq_triggered) {
- serial_outp(info, UART_IER, 0);
- info->irq = rs_irq_triggered;
- } else {
- serial_outp(info, UART_IER, scratch);
- serial_outp(info, UART_MCR, status1);
- if (info->flags & ASYNC_FOURPORT)
- outb_p(save_ICP, ICP);
+ serial_outp(info, UART_IER, save_IER);
+ serial_outp(info, UART_MCR, save_MCR);
+ if (info->flags & ASYNC_FOURPORT)
+ outb_p(save_ICP, ICP);
+ return(rs_irq_triggered);
+}
+#endif
+
+
+static void init(struct async_struct * info)
+{
+ unsigned char status1, status2, scratch, scratch2;
+ unsigned port = info->port;
+#ifdef CONFIG_AUTO_IRQ
+ int retries;
+
+ if (!port)
+ return;
+
+ scratch2 = 0;
+ for (retries = 0; retries < 5; retries++) {
+ if (!scratch)
+ scratch = get_auto_irq(info);
+ if (!scratch2)
+ scratch2 = get_auto_irq(info);
+ if (scratch && scratch2) {
+ if (scratch == scratch2)
+ break;
+ scratch = scratch2 = 0;
+ }
+ }
+ if (scratch && (scratch == scratch2))
+ info->irq = scratch;
+ else {
info->type = PORT_UNKNOWN;
return;
}
+
#else /* CONFIG_AUTO_IRQ */
- unsigned char status1, status2, scratch, scratch2;
- unsigned short port = info->port;
+ if (!port)
+ return;
+
/*
* Check to see if a UART is really there.
*/
#endif
show_serial_version();
for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
- if (!info->port)
- continue;
info->line = i;
info->tty = 0;
info->type = PORT_UNKNOWN;
info->custom_divisor = 0;
info->x_char = 0;
info->event = 0;
+ info->count = 0;
+ info->blocked_open = 0;
+ info->open_wait = 0;
info->next_port = 0;
info->prev_port = 0;
init(info);
if (info->type == PORT_UNKNOWN)
continue;
- printk("ttys%d%s at 0x%04x (irq = %d)", info->line,
+ printk("ttyS%d%s at 0x%04x (irq = %d)", info->line,
(info->flags & ASYNC_FOURPORT) ? " FourPort" : "",
info->port, info->irq);
switch (info->type) {
free_irq(i);
}
#endif
+ bh_base[SERIAL_BH].routine = do_softint;
+ memset(&rs_event, 0, sizeof(rs_event));
+ memset(&rs_write_active, 0, sizeof(rs_write_active));
return kmem_start;
}
+++ /dev/null
-sound_stub.o : sound_stub.c
* between the high-level tty routines (tty_io.c and tty_ioctl.c) and
* the low-level tty routines (serial.c, pty.c, console.c). This
* makes for cleaner and more compact code. -TYT, 9/17/92
+ *
+ * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
+ * which can be dynamically activated and de-activated by the line
+ * discipline handling modules (like SLIP).
+ *
+ * NOTE: pay no attention to the line discpline code (yet); its
+ * interface is still subject to change in this version...
+ * -- TYT, 1/31/92
*/
#include <linux/types.h>
#include "vt_kern.h"
-struct tty_struct *tty_table[256];
-struct termios *tty_termios[256]; /* We need to keep the termios state */
+#define MAX_TTYS 256
+
+struct tty_struct *tty_table[MAX_TTYS];
+struct termios *tty_termios[MAX_TTYS]; /* We need to keep the termios state */
/* around, even when a tty is closed */
+struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */
+int tty_check_write[MAX_TTYS/32]; /* bitfield for the bh handler */
/*
* fg_console is the current virtual console,
static int tty_open(struct inode *, struct file *);
static void tty_release(struct inode *, struct file *);
+int tty_register_ldisc(int disc, struct tty_ldisc *new)
+{
+ if (disc < N_TTY || disc >= NR_LDISCS)
+ return -EINVAL;
+
+ if (new) {
+ ldiscs[disc] = *new;
+ ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
+ } else
+ memset(&ldiscs[disc], 0, sizeof(struct tty_ldisc));
+
+ return 0;
+}
+
void put_tty_queue(char c, struct tty_queue * queue)
{
int head;
return result;
}
+/*
+ * This routine copies out a maximum of buflen characters from the
+ * read_q; it is a convenience for line disciplins so they can grab a
+ * large block of data without calling get_tty_char directly. It
+ * returns the number of characters actually read.
+ */
+int tty_read_raw_data(struct tty_struct *tty, unsigned char *bufp, int buflen)
+{
+ int result = 0;
+ unsigned char *p = bufp;
+ unsigned long flags;
+ int head, tail;
+
+ __asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
+ tail = tty->read_q.tail;
+ head = tty->read_q.head;
+ while ((result < buflen) && (tail!=head)) {
+ *p++ = tty->read_q.buf[tail++];
+ tail &= TTY_BUF_SIZE-1;
+ result++;
+ }
+ tty->read_q.tail = tail;
+ __asm__ __volatile__("pushl %0 ; popfl"::"r" (flags));
+ return result;
+}
+
+
void tty_write_flush(struct tty_struct * tty)
{
if (!tty->write || EMPTY(&tty->write_q))
return;
if (set_bit(TTY_READ_BUSY, &tty->flags))
return;
- copy_to_cooked(tty);
+ ldiscs[tty->disc].handler(tty);
if (clear_bit(TTY_READ_BUSY, &tty->flags))
printk("tty_read_flush: bit already cleared\n");
}
kill_sl(tty->session,SIGHUP,1);
}
+void tty_unhangup(struct file *filp)
+{
+ filp->f_op = &tty_fops;
+}
+
static inline int hung_up(struct file * filp)
{
return filp->f_op == &hung_up_tty_fops;
void wait_for_keypress(void)
{
- interruptible_sleep_on(&keypress_wait);
+ sleep_on(&keypress_wait);
}
void copy_to_cooked(struct tty_struct * tty)
dev = file->f_rdev;
if (MAJOR(dev) != 4) {
- printk("tty_read: pseudo-major != 4\n");
+ printk("tty_read: bad pseudo-major nr #%d\n", MAJOR(dev));
return -EINVAL;
}
dev = MINOR(dev);
(void) kill_pg(current->pgrp, SIGTTIN, 1);
return -ERESTARTSYS;
}
- i = read_chan(tty,file,buf,count);
+ if (ldiscs[tty->disc].read)
+ i = (ldiscs[tty->disc].read)(tty,file,buf,count);
+ else
+ i = -EIO;
if (i > 0)
inode->i_atime = CURRENT_TIME;
return i;
return -ERESTARTSYS;
}
}
- i = write_chan(tty,file,buf,count);
+ if (ldiscs[tty->disc].write)
+ i = (ldiscs[tty->disc].write)(tty,file,buf,count);
+ else
+ i = -EIO;
if (i > 0)
inode->i_mtime = CURRENT_TIME;
return i;
return;
}
}
- if (tty->count < 2 && tty->close)
+ tty->write_data_cnt = 0; /* Clear out pending trash */
+ if (tty->close)
tty->close(tty, filp);
if (IS_A_PTY_MASTER(dev)) {
if (--tty->link->count < 0) {
}
if (tty->count)
return;
+
+ if (ldiscs[tty->disc].close != NULL)
+ ldiscs[tty->disc].close(tty);
+
if (o_tty) {
if (o_tty->count)
return;
*
* Open-counting is needed for pty masters, as well as for keeping
* track of serial lines: DTR is dropped when the last close happens.
+ * (This is not done solely through tty->count, now. - Ted 1/27/92)
*
* The termios state of a pty is reset on first open so that
* settings don't persist across reuse.
static int tty_open(struct inode * inode, struct file * filp)
{
struct tty_struct *tty;
- int dev, retval;
-
- dev = inode->i_rdev;
- if (MAJOR(dev) == 5)
- dev = current->tty;
- else
- dev = MINOR(dev);
- if (dev < 0)
+ int major, minor;
+ int noctty, retval;
+
+ minor = MINOR(inode->i_rdev);
+ major = MAJOR(inode->i_rdev);
+ noctty = filp->f_flags & O_NOCTTY;
+ if (major == 5) {
+ if (!minor) {
+ major = 4;
+ minor = current->tty;
+ }
+ noctty = 1;
+ } else if (major == 4) {
+ if (!minor) {
+ minor = fg_console + 1;
+ noctty = 1;
+ }
+ } else {
+ printk("Bad major #%d in tty_open\n", MAJOR(inode->i_rdev));
+ return -ENODEV;
+ }
+ if (minor <= 0)
return -ENXIO;
- if (!dev)
- dev = fg_console + 1;
- filp->f_rdev = 0x0400 | dev;
- retval = init_dev(dev);
+ if (IS_A_PTY_MASTER(minor))
+ noctty = 1;
+ filp->f_rdev = (major << 8) | minor;
+ retval = init_dev(minor);
if (retval)
return retval;
- tty = tty_table[dev];
+ tty = tty_table[minor];
+
/* clean up the packet stuff. */
+ /*
+ * Why is this not done in init_dev? Right here, if another
+ * process opens up a tty in packet mode, all the packet
+ * variables get cleared. Come to think of it, is anything
+ * using the packet mode at all??? - Ted, 1/27/93
+ */
tty->status_changed = 0;
tty->ctrl_status = 0;
tty->packet = 0;
retval = -ENODEV;
}
if (retval) {
- release_dev(dev, filp);
+ release_dev(minor, filp);
return retval;
}
- if (!(filp->f_flags & O_NOCTTY) &&
+ if (!noctty &&
current->leader &&
current->tty<0 &&
tty->session==0) {
- current->tty = dev;
+ current->tty = minor;
tty->session = current->session;
tty->pgrp = current->pgrp;
}
+ filp->f_rdev = 0x0400 | minor; /* Set it to something normal */
return 0;
}
}
}
+/*
+ * This routine allows a kernel routine to send a large chunk of data
+ * to a particular tty; if all of the data can be queued up for ouput
+ * immediately, tty_write_data() will return 0. If, however, not all
+ * of the data can be immediately queued for delivery, the number of
+ * bytes left to be queued up will be returned, and the rest of the
+ * data will be queued up when there is room. The callback function
+ * will be called (with the argument callarg) when the last of the
+ * data is finally in the queue.
+ *
+ * Note that the callback routine will _not_ be called if all of the
+ * data could be queued immediately. This is to avoid a problem with
+ * the kernel stack getting too deep, which might happen if the
+ * callback routine calls tty_write_data with itself as an argument.
+ */
+int tty_write_data(struct tty_struct *tty, char *bufp, int buflen,
+ void (*callback)(void * data), void * callarg)
+{
+ int head, tail, count;
+ unsigned long flags;
+ char *p;
+
+#define VLEFT ((tail-head-1)&(TTY_BUF_SIZE-1))
+
+ __asm__ __volatile__("pushfl ; popl %0 ; cli":"=r" (flags));
+ if (tty->write_data_cnt) {
+ __asm__ __volatile__("pushl %0 ; popfl"::"r" (flags));
+ return -EBUSY;
+ }
+
+ head = tty->write_q.head;
+ tail = tty->write_q.tail;
+ count = buflen;
+ p = bufp;
+
+ while (count && VLEFT > 0) {
+ tty->write_q.buf[head++] = *p++;
+ head &= TTY_BUF_SIZE-1;
+ }
+ tty->write_q.head = head;
+ if (count) {
+ tty->write_data_cnt = count;
+ tty->write_data_ptr = p;
+ tty->write_data_callback = callback;
+ tty->write_data_arg = callarg;
+ }
+ __asm__ __volatile__("pushl %0 ; popfl"::"r" (flags));
+ return count;
+}
+
+/*
+ * This routine routine is called after an interrupt has drained a
+ * tty's write queue, so that there is more space for data waiting to
+ * be sent in tty->write_data_ptr.
+ *
+ * tty_check_write[8] is a bitstring which indicates which ttys
+ * needs to be processed.
+ */
+void tty_bh_routine()
+{
+ int i, j, line, mask;
+ int head, tail, count;
+ unsigned char * p;
+ struct tty_struct * tty;
+
+ for (i = 0, line = 0; i < MAX_TTYS / 32; i++) {
+ if (!tty_check_write[i]) {
+ line += 32;
+ continue;
+ }
+ for (j=0, mask=0; j < 32; j++, line++, mask <<= 1) {
+ if (!clear_bit(j, &tty_check_write[i])) {
+ tty = tty_table[line];
+ if (!tty || !tty->write_data_cnt)
+ continue;
+ cli();
+ head = tty->write_q.head;
+ tail = tty->write_q.tail;
+ count = tty->write_data_cnt;
+ p = tty->write_data_ptr;
+
+ while (count && VLEFT > 0) {
+ tty->write_q.buf[head++] = *p++;
+ head &= TTY_BUF_SIZE-1;
+ }
+ tty->write_q.head = head;
+ tty->write_data_ptr = p;
+ tty->write_data_cnt = count;
+ sti();
+ if (!count)
+ (tty->write_data_callback)
+ (tty->write_data_arg);
+ }
+ }
+ }
+
+}
+
/*
* This subroutine initializes a tty structure. We have to set up
* things correctly for each different type of tty.
{
memset(tty, 0, sizeof(struct tty_struct));
tty->line = line;
+ tty->disc = N_TTY;
tty->pgrp = -1;
tty->winsize.ws_row = 24;
tty->winsize.ws_col = 80;
tp->c_lflag = ISIG | ICANON | ECHO |
ECHOCTL | ECHOKE;
} else if (IS_A_SERIAL(line)) {
- tp->c_cflag = B2400 | CS8 | CREAD | HUPCL;
+ tp->c_cflag = B2400 | CS8 | CREAD | HUPCL | CLOCAL;
} else if (IS_A_PTY_MASTER(line)) {
tp->c_cflag = B9600 | CS8 | CREAD;
} else if (IS_A_PTY_SLAVE(line)) {
ECHOCTL | ECHOKE;
}
}
+
+static struct tty_ldisc tty_ldisc_N_TTY = {
+ 0, /* flags */
+ NULL, /* open */
+ NULL, /* close */
+ read_chan, /* read */
+ write_chan, /* write */
+ NULL, /* ioctl */
+ copy_to_cooked /* handler */
+};
+
long tty_init(long kmem_start)
{
int i;
+ if (sizeof(struct tty_struct) > 4096)
+ panic("size of tty structure > 4096!");
+
chrdev_fops[4] = &tty_fops;
chrdev_fops[5] = &tty_fops;
- for (i=0 ; i<256 ; i++) {
+ for (i=0 ; i< MAX_TTYS ; i++) {
tty_table[i] = 0;
tty_termios[i] = 0;
}
+ memset(tty_check_write, 0, sizeof(tty_check_write));
+ bh_base[TTY_BH].routine = tty_bh_routine;
+
+ /* Setup the default TTY line discipline. */
+ memset(ldiscs, 0, sizeof(ldiscs));
+ (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
+
kmem_start = kbd_init(kmem_start);
kmem_start = con_init(kmem_start);
kmem_start = rs_init(kmem_start);
- printk("%d virtual consoles\n\r",NR_CONSOLES);
return kmem_start;
}
* linux/kernel/chr_drv/tty_ioctl.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
+ *
+ * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
+ * which can be dynamically activated and de-activated by the line
+ * discipline handling modules (like SLIP).
*/
#include <linux/types.h>
#include <asm/segment.h>
#include <asm/system.h>
+#undef DEBUG
+#ifdef DEBUG
+# define PRINTK(x) printk (x)
+#else
+# define PRINTK(x) /**/
+#endif
+
extern int session_of_pgrp(int pgrp);
extern int do_screendump(int arg);
extern int kill_pg(int pgrp, int sig, int priv);
return 0;
}
+static int check_change(struct tty_struct * tty, int channel)
+{
+ /* If we try to set the state of terminal and we're not in the
+ foreground, send a SIGTTOU. If the signal is blocked or
+ ignored, go ahead and perform the operation. POSIX 7.2) */
+ if (current->tty != channel)
+ return 0;
+ if (tty->pgrp <= 0 || tty->pgrp == current->pgrp)
+ return 0;
+ if (is_orphaned_pgrp(current->pgrp))
+ return -EIO;
+ if (is_ignored(SIGTTOU))
+ return 0;
+ (void) kill_pg(current->pgrp,SIGTTOU,1);
+ return -ERESTARTSYS;
+}
+
static int set_termios(struct tty_struct * tty, struct termios * termios,
int channel)
{
int i;
- unsigned short old_cflag = tty->termios->c_cflag;
+ struct termios old_termios = *tty->termios;
- /* If we try to set the state of terminal and we're not in the
- foreground, send a SIGTTOU. If the signal is blocked or
- ignored, go ahead and perform the operation. POSIX 7.2) */
- if ((current->tty == channel) &&
- (tty->pgrp != current->pgrp)) {
- if (is_orphaned_pgrp(current->pgrp))
- return -EIO;
- if (!is_ignored(SIGTTOU)) {
- (void) kill_pg(current->pgrp,SIGTTOU,1);
- return -ERESTARTSYS;
- }
- }
+ i = check_change(tty, channel);
+ if (i)
+ return i;
for (i=0 ; i< (sizeof (*termios)) ; i++)
((char *)tty->termios)[i]=get_fs_byte(i+(char *)termios);
- if (IS_A_SERIAL(channel) && tty->termios->c_cflag != old_cflag)
- change_speed(channel-64);
/* puting mpty's into echo mode is very bad, and I think under
some situations can cause the kernel to do nothing but
copy characters back and forth. -RAB */
if (IS_A_PTY_MASTER(channel)) tty->termios->c_lflag &= ~ECHO;
+ if (tty->set_termios)
+ (*tty->set_termios)(tty, &old_termios);
+
return 0;
}
{
int i;
struct termio tmp_termio;
- unsigned short old_cflag = tty->termios->c_cflag;
-
- if ((current->tty == channel) &&
- (tty->pgrp > 0) &&
- (tty->pgrp != current->pgrp)) {
- if (is_orphaned_pgrp(current->pgrp))
- return -EIO;
- if (!is_ignored(SIGTTOU)) {
- (void) kill_pg(current->pgrp,SIGTTOU,1);
- return -ERESTARTSYS;
- }
- }
+ struct termios old_termios = *tty->termios;
+
+ i = check_change(tty, channel);
+ if (i)
+ return i;
for (i=0 ; i< (sizeof (*termio)) ; i++)
((char *)&tmp_termio)[i]=get_fs_byte(i+(char *)termio);
tty->termios->c_line = tmp_termio.c_line;
for(i=0 ; i < NCC ; i++)
tty->termios->c_cc[i] = tmp_termio.c_cc[i];
- if (IS_A_SERIAL(channel) && tty->termios->c_cflag != old_cflag)
- change_speed(channel-64);
+
+ if (tty->set_termios)
+ (*tty->set_termios)(tty, &old_termios);
+
return 0;
}
return 0;
}
+/* Set the discipline of a tty line. */
+static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
+{
+ if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS) ||
+ !(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED))
+ return -EINVAL;
+
+ if (tty->disc == ldisc)
+ return 0; /* We are already in the desired discipline */
+
+ /* Shutdown the current discipline. */
+ wait_until_sent(tty);
+ flush_input(tty);
+ if (ldiscs[tty->disc].close)
+ ldiscs[tty->disc].close(tty);
+
+ /* Now set up the new line discipline. */
+ tty->disc = ldisc;
+ if (ldiscs[tty->disc].open)
+ return(ldiscs[tty->disc].open(tty));
+ else
+ return 0;
+}
+
+
int tty_ioctl(struct inode * inode, struct file * file,
unsigned int cmd, unsigned int arg)
{
int pgrp;
int dev;
int termios_dev;
+ int retval;
if (MAJOR(file->f_rdev) != 4) {
printk("tty_ioctl: tty pseudo-major != 4\n");
tty->session = 0;
}
return 0;
-
+ case TIOCGETD:
+ verify_area((void *) arg,4);
+ put_fs_long(tty->disc, (unsigned long *) arg);
+ return 0;
+ case TIOCSETD:
+ arg = get_fs_long((unsigned long *) arg);
+ return tty_set_ldisc(tty, arg);
case TIOCPKT:
{
int on;
}
default:
- if (tty->ioctl)
- return (tty->ioctl)(tty, file, cmd, arg);
- else
- return -EINVAL;
+ if (tty->ioctl) {
+ retval = (tty->ioctl)(tty, file, cmd, arg);
+ if (retval != -EINVAL)
+ return retval;
+ }
+ if (ldiscs[tty->disc].ioctl) {
+ retval = (ldiscs[tty->disc].ioctl)
+ (tty, file, cmd, arg);
+ return retval;
+ }
+ return -EINVAL;
}
}
#include <asm/segment.h>
#include <asm/system.h>
-#define MAX_TASKS_PER_USER ((NR_TASKS/4)*3)
+#define MAX_TASKS_PER_USER (NR_TASKS/2)
long last_pid=0;
static int find_empty_process(void)
{
int i, task_nr;
- int this_user_tasks = 0;
+ int this_user_tasks;
repeat:
- if ((++last_pid) & 0xffff0000)
+ if ((++last_pid) & 0xffff8000)
last_pid=1;
+ this_user_tasks = 0;
for(i=0 ; i < NR_TASKS ; i++) {
if (!task[i])
continue;
restore_flags(flags);
}
-extern void do_coprocessor_error(long,long);
-
/*
* Note that on a 486, we don't want to do a SIGFPE on a irq13
* as the irq is unreliable, and exception 16 works correctly
static void math_error_irq(int cpl)
{
outb(0,0xF0);
- do_coprocessor_error(0,0);
-}
-
-static void math_error_irq_486(int cpl)
-{
- outb(0,0xF0); /* even this is probably not needed.. */
+ if (ignore_irq13)
+ return;
+ send_sig(SIGFPE, last_task_used_math, 1);
+ __asm__("fninit");
}
static void no_action(int cpl) { }
void init_IRQ(void)
{
int i;
- unsigned long cr0;
for (i = 0; i < 16 ; i++)
set_intr_gate(0x20+i,bad_interrupt[i]);
if (irqaction(2,&ignore_IRQ))
printk("Unable to get IRQ2 for cascade\n");
- __asm__("movl %%cr0,%%eax":"=a" (cr0));
- if (cr0 & CR0_NE)
- i = request_irq(13,math_error_irq_486);
- else
- i = request_irq(13,math_error_irq);
- if (i)
+ if (request_irq(13,math_error_irq))
printk("Unable to get IRQ13 for math-error handler\n");
/* intialize the bottom half routines. */
int need_resched = 0;
int hard_math = 0; /* set by boot/head.S */
+int ignore_irq13 = 0; /* set if exception 16 works */
unsigned long * prof_buffer = NULL;
unsigned long prof_len = 0;
void add_timer(long jiffies, void (*fn)(void))
{
struct timer_list * p;
+ unsigned long flags;
if (!fn)
return;
+ save_flags(flags);
cli();
if (jiffies <= 0)
(fn)();
p->next->jiffies = jiffies;
p = p->next;
}
+ if (p->next)
+ p->next->jiffies -= p->jiffies;
}
- sti();
+ restore_flags(flags);
}
unsigned long timer_active = 0;
int sys_brk(unsigned long end_data_seg)
{
+ unsigned long rlim;
+
+ rlim = current->rlim[RLIMIT_DATA].rlim_cur;
+ if (rlim >= RLIM_INFINITY)
+ rlim = 0xffffffff;
if (end_data_seg >= current->end_code &&
+ end_data_seg-current->end_code <= rlim &&
end_data_seg < current->start_stack - 16384)
current->brk = end_data_seg;
return current->brk;
int sys_gettimeofday(struct timeval *tv, struct timezone *tz)
{
if (tv) {
+ unsigned long nowtime = jiffies+jiffies_offset;
verify_area(tv, sizeof *tv);
- put_fs_long(startup_time + CT_TO_SECS(jiffies+jiffies_offset),
+ put_fs_long(startup_time + CT_TO_SECS(nowtime),
(unsigned long *) tv);
- put_fs_long(CT_TO_USECS(jiffies+jiffies_offset),
+ put_fs_long(CT_TO_USECS(nowtime),
((unsigned long *) tv)+1);
}
if (tz) {
void do_coprocessor_error(long esp, long error_code)
{
+ ignore_irq13 = 1;
send_sig(SIGFPE, last_task_used_math, 1);
__asm__("fninit");
}
+++ /dev/null
-_exit.o : _exit.c /usr/include/linux/unistd.h
-close.o : close.c /usr/include/linux/unistd.h
-ctype.o : ctype.c /usr/include/linux/ctype.h
-dup.o : dup.c /usr/include/linux/unistd.h
-errno.o : errno.c
-execve.o : execve.c /usr/include/linux/unistd.h
-malloc.o : malloc.c /usr/include/linux/kernel.h /usr/include/linux/mm.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/string.h \
- /usr/include/asm/system.h
-open.o : open.c /usr/include/linux/unistd.h /usr/lib/gcc-lib/i386-linux/2.3.2/include/stdarg.h
-setsid.o : setsid.c /usr/include/linux/types.h /usr/include/linux/unistd.h
-string.o : string.c /usr/include/linux/types.h /usr/include/linux/string.h
-wait.o : wait.c /usr/include/linux/unistd.h /usr/include/linux/types.h
-write.o : write.c /usr/include/linux/unistd.h /usr/include/linux/types.h
+++ /dev/null
-memory.o : memory.c /usr/include/asm/system.h /usr/include/linux/signal.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/string.h
-mmap.o : mmap.c /usr/include/linux/stat.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/errno.h \
- /usr/include/linux/mman.h /usr/include/linux/string.h /usr/include/asm/segment.h \
- /usr/include/asm/system.h
-swap.o : swap.c /usr/include/linux/mm.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/asm/system.h
}
for (pc = pcnt; pc--; page_table++) {
if ((page = *page_table) != 0) {
- --current->rss;
*page_table = 0;
- if (1 & page)
+ if (1 & page) {
+ --current->rss;
free_page(0xfffff000 & page);
- else
+ } else
swap_free(page >> 1);
}
}
return 0;
}
page_table = (unsigned long *) (tsk->tss.cr3 + ((address>>20) & 0xffc));
- if ((*page_table)&1)
+ if ((*page_table) & PAGE_PRESENT)
page_table = (unsigned long *) (0xfffff000 & *page_table);
else {
- tmp = get_free_page(GFP_KERNEL);
- if (!tmp) {
- oom(tsk);
- tmp = BAD_PAGETABLE;
- }
- *page_table = tmp | PAGE_ACCESSED | 7;
+ printk("put_page: bad page directory entry\n");
+ oom(tsk);
+ *page_table = BAD_PAGETABLE | PAGE_ACCESSED | 7;
return 0;
}
page_table += (address >> PAGE_SHIFT) & 0x3ff;
{
unsigned long address;
unsigned long user_esp = 0;
+ unsigned long stack_limit;
unsigned int bit;
extern void die_if_kernel();
do_wp_page(error_code, address, current, user_esp);
else
do_no_page(error_code, address, current, user_esp);
+ if (!user_esp)
+ return;
+ stack_limit = current->rlim[RLIMIT_STACK].rlim_cur;
+ if (stack_limit >= RLIM_INFINITY)
+ return;
+ if (stack_limit >= current->start_stack)
+ return;
+ stack_limit = current->start_stack - stack_limit;
+ if (user_esp < stack_limit)
+ send_sig(SIGSEGV, current, 1);
return;
}
printk("Unable to handle kernel paging request at address %08x\n",address);
+++ /dev/null
-socket.o : socket.c /usr/include/linux/signal.h /usr/include/linux/errno.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/types.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/kernel.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/stat.h \
- /usr/include/linux/socket.h /usr/include/linux/fcntl.h /usr/include/linux/termios.h \
- /usr/include/linux/config.h /usr/include/linux/autoconf.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h kern_sock.h socketcall.h
-unix.o : unix.c /usr/include/linux/signal.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/kernel.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/errno.h /usr/include/linux/string.h \
- /usr/include/linux/stat.h /usr/include/linux/socket.h /usr/include/linux/un.h \
- /usr/include/linux/fcntl.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h kern_sock.h
void *dummy;
};
+#define SOCK_INODE(S) ((struct inode *)(S)->dummy)
+extern struct socket sockets[NSOCKETS];
+#define last_socket (sockets + NSOCKETS - 1)
+
struct proto_ops {
int (*init)(void);
int (*create)(struct socket *sock, int protocol);
int (*getsockopt)(struct socket *sock, int level, int optname,
char *optval, int *optlen);
int (*fcntl) (struct socket *sock, unsigned int cmd,
- unsigned long arg);
+ unsigned long arg);
};
extern int sock_awaitconn(struct socket *mysock, struct socket *servsock);
sock_close
};
-#define SOCK_INODE(S) ((struct inode *)(S)->dummy)
-
-static struct socket sockets[NSOCKETS];
-#define last_socket (sockets + NSOCKETS - 1)
+struct socket sockets[NSOCKETS];
static struct wait_queue *socket_wait_free = NULL;
/*
return NULL;
}
SOCK_INODE(sock)->i_mode = S_IFSOCK;
+ SOCK_INODE(sock)->i_uid = current->euid;
+ SOCK_INODE(sock)->i_gid = current->egid;
+
sock->wait = &SOCK_INODE(sock)->i_wait;
- PRINTK(("sock_alloc: socket 0x%x, inode 0x%x\n",
+ PRINTK(("sock_alloc: socket 0x%x,inode 0x%x\n",
sock, SOCK_INODE(sock)));
return sock;
}
for (sock = sockets; sock <= last_socket; ++sock)
sock->state = SS_FREE;
for (i = ok = 0; i < NPROTO; ++i) {
- printk("sock_init: initializing family %d (%s)\n",
- proto_table[i].family, proto_table[i].name);
if ((*proto_table[i].ops->init)() < 0) {
- printk("sock_init: init failed.\n",
- proto_table[i].family);
+ printk("sock_init: init failed family %d (%s)\n",
+ proto_table[i].family,
+ proto_table[i].name);
proto_table[i].family = -1;
}
else
+++ /dev/null
-Space.o : Space.c dev.h /usr/include/linux/stddef.h
-arp.o : arp.c /usr/include/linux/types.h /usr/include/linux/string.h /usr/include/linux/kernel.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h /usr/include/linux/socket.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h /usr/include/asm/system.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h arp.h
-dev.o : dev.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/config.h \
- /usr/include/linux/autoconf.h /usr/include/linux/types.h /usr/include/linux/kernel.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/dirent.h \
- /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h \
- /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h \
- /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h \
- /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h \
- /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h /usr/include/linux/signal.h \
- /usr/include/linux/time.h /usr/include/linux/param.h /usr/include/linux/resource.h \
- /usr/include/linux/vm86.h /usr/include/linux/math_emu.h /usr/include/linux/string.h \
- /usr/include/linux/socket.h /usr/include/netinet/in.h /usr/include/features.h \
- /usr/include/sys/cdefs.h /usr/include/sys/socket.h dev.h eth.h timer.h ip.h \
- /usr/include/linux/sock_ioctl.h tcp.h sock.h /usr/include/linux/errno.h /usr/include/linux/interrupt.h \
- arp.h
-eth.o : eth.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/types.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/string.h /usr/include/linux/socket.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h dev.h \
- eth.h timer.h ip.h /usr/include/linux/sock_ioctl.h tcp.h sock.h /usr/include/linux/errno.h \
- arp.h
-icmp.o : icmp.c /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/fcntl.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h /usr/include/linux/errno.h \
- /usr/include/linux/timer.h /usr/include/asm/system.h /usr/include/asm/segment.h \
- icmp.h
-ip.o : ip.c /usr/include/asm/segment.h /usr/include/asm/system.h /usr/include/linux/types.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/string.h /usr/include/linux/socket.h /usr/include/netinet/in.h \
- /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h timer.h \
- ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h /usr/include/linux/errno.h \
- arp.h icmp.h
-loopback.o : loopback.c /usr/include/linux/config.h /usr/include/linux/autoconf.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/types.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/tty.h /usr/include/linux/termios.h \
- /usr/include/asm/system.h /usr/include/linux/ptrace.h /usr/include/linux/string.h \
- /usr/include/asm/segment.h /usr/include/asm/io.h /usr/include/errno.h /usr/include/features.h \
- /usr/include/sys/cdefs.h /usr/include/linux/errno.h /usr/include/linux/fcntl.h \
- /usr/include/netinet/in.h /usr/include/sys/socket.h /usr/include/linux/socket.h \
- dev.h eth.h timer.h ip.h /usr/include/linux/sock_ioctl.h tcp.h sock.h arp.h
-pack_type.o : pack_type.c /usr/include/linux/stddef.h dev.h eth.h
-packet.o : packet.c /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/fcntl.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h /usr/include/linux/errno.h \
- /usr/include/linux/timer.h /usr/include/asm/system.h /usr/include/asm/segment.h \
- ../kern_sock.h
-protocols.o : protocols.c /usr/include/asm/segment.h /usr/include/asm/system.h \
- /usr/include/linux/types.h /usr/include/linux/kernel.h /usr/include/linux/sched.h \
- /usr/include/linux/head.h /usr/include/linux/fs.h /usr/include/linux/limits.h \
- /usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \
- /usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h \
- /usr/include/linux/msdos_fs_i.h /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h \
- /usr/include/linux/nfs.h /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h \
- /usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h \
- /usr/include/linux/mm.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h icmp.h
-raw.o : raw.c /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/fcntl.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h /usr/include/linux/errno.h \
- /usr/include/linux/timer.h /usr/include/asm/system.h /usr/include/asm/segment.h \
- icmp.h
-sock.o : sock.c /usr/include/linux/errno.h /usr/include/linux/types.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/timer.h /usr/include/linux/string.h /usr/include/linux/sock_ioctl.h \
- ../kern_sock.h timer.h ip.h dev.h eth.h tcp.h udp.h sock.h arp.h /usr/include/asm/segment.h \
- /usr/include/asm/system.h /usr/include/linux/fcntl.h /usr/include/linux/interrupt.h
-tcp.o : tcp.c /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/string.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- /usr/include/linux/fcntl.h timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h \
- eth.h icmp.h tcp.h sock.h arp.h /usr/include/linux/errno.h /usr/include/linux/timer.h \
- /usr/include/asm/system.h /usr/include/asm/segment.h /usr/include/linux/termios.h
-timer.o : timer.c /usr/include/linux/types.h /usr/include/linux/errno.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- /usr/include/linux/kernel.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/timer.h /usr/include/asm/system.h timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h \
- eth.h tcp.h sock.h arp.h
-udp.o : udp.c /usr/include/linux/types.h /usr/include/linux/sched.h /usr/include/linux/head.h \
- /usr/include/linux/fs.h /usr/include/linux/limits.h /usr/include/linux/wait.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/kernel.h /usr/include/linux/signal.h /usr/include/linux/time.h \
- /usr/include/linux/param.h /usr/include/linux/resource.h /usr/include/linux/vm86.h \
- /usr/include/linux/math_emu.h /usr/include/linux/fcntl.h /usr/include/linux/socket.h \
- /usr/include/netinet/in.h /usr/include/features.h /usr/include/sys/cdefs.h /usr/include/sys/socket.h \
- timer.h ip.h dev.h /usr/include/linux/sock_ioctl.h eth.h tcp.h sock.h /usr/include/linux/errno.h \
- /usr/include/linux/timer.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/asm/segment.h ../kern_sock.h udp.h icmp.h
-we.o : we.c /usr/include/linux/config.h /usr/include/linux/autoconf.h /usr/include/linux/kernel.h \
- /usr/include/linux/sched.h /usr/include/linux/head.h /usr/include/linux/fs.h \
- /usr/include/linux/limits.h /usr/include/linux/wait.h /usr/include/linux/types.h \
- /usr/include/linux/dirent.h /usr/include/linux/vfs.h /usr/include/linux/pipe_fs_i.h \
- /usr/include/linux/minix_fs_i.h /usr/include/linux/ext_fs_i.h /usr/include/linux/msdos_fs_i.h \
- /usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \
- /usr/include/linux/minix_fs_sb.h /usr/include/linux/ext_fs_sb.h /usr/include/linux/msdos_fs_sb.h \
- /usr/include/linux/iso_fs_sb.h /usr/include/linux/nfs_fs_sb.h /usr/include/linux/mm.h \
- /usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \
- /usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \
- /usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/asm/system.h \
- /usr/include/linux/ptrace.h /usr/include/linux/string.h /usr/include/asm/segment.h \
- /usr/include/asm/io.h /usr/include/errno.h /usr/include/features.h /usr/include/sys/cdefs.h \
- /usr/include/linux/errno.h /usr/include/linux/fcntl.h /usr/include/netinet/in.h \
- /usr/include/sys/socket.h /usr/include/linux/socket.h dev.h eth.h timer.h ip.h \
- /usr/include/linux/sock_ioctl.h tcp.h sock.h arp.h wereg.h
/* Space.c */
/* Holds initial configuration information for devices. */
-/* $Id: Space.c,v 0.8.4.5 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: Space.c,v 0.8.4.7 1993/01/22 23:21:38 bir7 Exp $ */
/* $Log: Space.c,v $
+ * Revision 0.8.4.7 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.6 1993/01/22 22:58:08 bir7
+ * *** empty log message ***
+ *
* Revision 0.8.4.5 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: arp.c,v 0.8.4.5 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: arp.c,v 0.8.4.8 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: arp.c,v $
+ * Revision 0.8.4.8 1993/01/23 18:00:11 bir7
+ * Added ioctls as supplied by R.P. Bellis <rpb@psy.ox.ac.uk>
+ *
+ * Revision 0.8.4.7 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.5 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
#include <linux/socket.h>
#include <netinet/in.h>
+#include <linux/sock_ioctl.h>
+#include <linux/errno.h>
+#include <asm/segment.h>
#include <asm/system.h>
#include "timer.h"
#define PRINTK(x) /**/
#endif
-static struct arp_table *arp_table[ARP_TABLE_SIZE] ={NULL, };
-struct sk_buff *arp_q=NULL;
+static volatile struct arp_table *arp_table[ARP_TABLE_SIZE] ={NULL, };
+volatile struct sk_buff *arp_q=NULL;
/* this will try to retransmit everything on the queue. */
static void
struct sk_buff *next;
cli();
- next = arp_q;
+ next = (struct sk_buff *)arp_q;
arp_q = NULL;
sti();
while ((skb = next) != NULL) {
}
/* first remove skb from the queue. */
- next = skb->next;
+ next = (struct sk_buff *)skb->next;
if (next == skb)
{
next = NULL;
if (my_ip_addr(paddr)) return (NULL);
hash = net32(paddr) & (ARP_TABLE_SIZE - 1);
cli();
- for (apt = arp_table[hash]; apt != NULL; apt = apt->next)
+ for (apt = (struct arp_table *)arp_table[hash];
+ apt != NULL;
+ apt = (struct arp_table *)apt->next)
{
if (apt->ip == paddr)
{
/* check the first one. */
if (arp_table[hash]->ip == paddr)
{
- apt = arp_table[hash];
+ apt = (struct arp_table *)arp_table[hash];
arp_table[hash] = arp_table[hash]->next;
arp_free (apt, sizeof (*apt));
sti();
}
/* now deal with it any where else in the chain. */
- lapt = arp_table[hash];
- for (apt = arp_table[hash]->next; apt != NULL; apt = apt->next)
+ lapt = (struct arp_table *)arp_table[hash];
+ for (apt = (struct arp_table *)arp_table[hash]->next;
+ apt != NULL;
+ apt = (struct arp_table *)apt->next)
{
if (apt->ip == paddr)
{
skb->magic = ARP_QUEUE_MAGIC;
sti();
}
+
+static int arpreq_check(struct arpreq *req)
+{
+ /* Check protocol familys */
+ if (req->arp_pa.sa_family != AF_INET) return -1;
+
+ if (req->arp_ha.sa_family != AF_UNSPEC) return -1;
+
+ return 0;
+}
+
+int arp_ioctl_set(struct arpreq *req)
+{
+ struct arpreq r;
+ struct arp_table *apt;
+
+ memcpy_fromfs(&r, req, sizeof(r));
+ if (arpreq_check(&r) != 0) return -EPFNOSUPPORT;
+
+ apt = arp_lookup(*(unsigned long *)r.arp_pa.sa_data);
+ if (apt) {
+ apt->last_used = timer_seq;
+ memcpy(apt->hard, r.arp_ha.sa_data , 6);
+ } else {
+ if (!create_arp(*(unsigned long *)r.arp_pa.sa_data,
+ r.arp_ha.sa_data, 6)) {
+ return -ENOMEM;
+ }
+ }
+
+ return 0;
+}
+
+int arp_ioctl_get(struct arpreq *req)
+{
+ struct arpreq r;
+ struct arp_table *apt;
+
+ memcpy_fromfs(&r, req, sizeof(r));
+ if (arpreq_check(&r) != 0) return -EPFNOSUPPORT;
+ apt = arp_lookup(*(unsigned long *)r.arp_pa.sa_data);
+ if (apt) {
+ memcpy(r.arp_ha.sa_data, apt->hard, apt->hlen);
+ } else {
+ return -ENXIO;
+ }
+
+ /* Copy the information back */
+ memcpy_tofs(req, &r, sizeof(r));
+ return 0;
+}
+
+int arp_ioctl_del(struct arpreq *req)
+{
+ struct arpreq r;
+
+ memcpy_fromfs(&r, req, sizeof(r));
+ if (arpreq_check(&r) != 0) return -EPFNOSUPPORT;
+
+ arp_destroy(*(unsigned long *)r.arp_pa.sa_data);
+
+ return 0;
+}
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: arp.h,v 0.8.4.3 1992/12/03 19:54:12 bir7 Exp $ */
+/* $Id: arp.h,v 0.8.4.4 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: arp.h,v $
+ * Revision 0.8.4.4 1993/01/23 18:00:11 bir7
+ * Added ioctls as supplied by R.P. Bellis <rpb@psy.ox.ac.uk>
+ *
* Revision 0.8.4.3 1992/12/03 19:54:12 bir7
* Added paranoid queue checking.
*
*
* Revision 0.8.3.2 1992/11/10 00:14:47 bir7
* Changed malloc to kmalloc and added $i\bId$ and $Log: arp.h,v $
+ * Revision 0.8.4.4 1993/01/23 18:00:11 bir7
+ * Added ioctls as supplied by R.P. Bellis <rpb@psy.ox.ac.uk>
+ *
* Revision 0.8.4.3 1992/12/03 19:54:12 bir7
* Added paranoid queue checking.
*
struct arp_table
{
- struct arp_table *next;
- unsigned long last_used;
+ volatile struct arp_table *next;
+ volatile unsigned long last_used;
unsigned long ip;
unsigned char hlen;
unsigned char hard[MAX_ADDR_LEN];
};
-struct sk_buff *arp_q;
+volatile struct sk_buff *arp_q;
int arp_rcv(struct sk_buff *, struct device *, struct packet_type *);
void arp_snd (unsigned long, struct device *, unsigned long);
void arp_add (unsigned long addr, unsigned char *haddr, struct device *dev);
void arp_queue (struct sk_buff *skb);
+int arp_ioctl_set(struct arpreq *req);
+int arp_ioctl_get(struct arpreq *req);
+int arp_ioctl_del(struct arpreq *req);
+
#define ARP_TABLE_SIZE 16
#define ARP_IP_PROT ETHERTYPE_IP
#define ARP_REQUEST 1
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: dev.c,v 0.8.4.10 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: dev.c,v 0.8.4.13 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: dev.c,v $
+ * Revision 0.8.4.13 1993/01/23 18:00:11 bir7
+ * Fixed problems from merging.
+ *
+ * Revision 0.8.4.12 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.11 1993/01/22 22:58:08 bir7
+ * Changed so transmitting takes place in bottom half of interrupt routine.
+ *
* Revision 0.8.4.10 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
dev_queue_xmit (struct sk_buff *skb, struct device *dev, int pri)
{
struct sk_buff *skb2;
+ int where=0; /* used to say if the packet should go at the
+ front or the back of the queue. */
+
PRINTK (("dev_queue_xmit (skb=%X, dev=%X, pri = %d)\n", skb, dev, pri));
if (dev == NULL)
return;
}
- if (pri < 0 || pri >= DEV_NUMBUFFS)
+ if (pri < 0)
+ {
+ pri = -pri-1;
+ where = 1;
+ }
+
+ if ( pri >= DEV_NUMBUFFS)
{
printk ("bad priority in dev_queue_xmit.\n");
pri = 1;
}
else
{
- skb2=dev->buffs[pri];
- skb->next = skb2;
- skb->prev = skb2->prev;
- skb->next->prev = skb;
- skb->prev->next = skb;
+ if (where)
+ {
+ skb->next = (struct sk_buff *)dev->buffs[pri];
+ skb->prev = (struct sk_buff *)dev->buffs[pri]->prev;
+ skb->prev->next = skb;
+ skb->next->prev = skb;
+ dev->buffs[pri] = skb;
+ }
+ else
+ {
+ skb2= (struct sk_buff *)dev->buffs[pri];
+ skb->next = skb2;
+ skb->prev = skb2->prev;
+ skb->next->prev = skb;
+ skb->prev->next = skb;
+ }
}
skb->magic = DEV_QUEUE_MAGIC;
sti();
dev_rint(unsigned char *buff, long len, int flags,
struct device * dev)
{
- volatile struct sk_buff *skb=NULL;
+ struct sk_buff *skb=NULL;
unsigned char *to;
int amount;
cli();
if (backlog == NULL)
{
- skb->prev = (struct sk_buff *)skb;
- skb->next = (struct sk_buff *)skb;
+ skb->prev = skb;
+ skb->next = skb;
backlog = skb;
}
else
{
- skb->prev = backlog->prev;
+ skb->prev = (struct sk_buff *)backlog->prev;
skb->next = (struct sk_buff *)backlog;
- skb->next->prev = (struct sk_buff *)skb;
- skb->prev->next = (struct sk_buff *)skb;
+ skb->next->prev = skb;
+ skb->prev->next = skb;
}
sti();
return (0);
}
+void
+dev_transmit(void)
+{
+ struct device *dev;
+
+ for (dev = dev_base; dev != NULL; dev=dev->next)
+ {
+ if (!dev->tbusy)
+ {
+ dev_tint (dev);
+ }
+ }
+}
+
void
inet_bh(void *tmp)
{
- volatile struct sk_buff *skb;
+ struct sk_buff *skb;
struct packet_type *ptype;
unsigned short type;
unsigned char flag =0;
return;
}
in_bh=1;
-
+ sti();
+
+ dev_transmit();
/* anything left to process? */
+ cli();
while (backlog != NULL)
{
- cli();
- skb= backlog;
+ skb= (struct sk_buff *)backlog;
if (skb->next == skb)
{
backlog = NULL;
{
skb2 = kmalloc (skb->mem_len, GFP_ATOMIC);
if (skb2 == NULL) continue;
- memcpy (skb2, skb, skb->mem_len);
+ memcpy (skb2, (const void *) skb, skb->mem_len);
skb2->mem_addr = skb2;
skb2->lock = 0;
skb2->h.raw = (void *)((unsigned long)skb2
PRINTK (("discarding packet type = %X\n", type));
kfree_skb ((struct sk_buff *)skb, FREE_READ);
}
+ dev_transmit();
+ cli();
}
in_bh = 0;
sti();
length of zero is interrpreted to mean the transmit buffers
are empty, and the transmitter should be shut down. */
-unsigned long
-dev_tint(unsigned char *buff, struct device *dev)
+/* now the packet is passed on via the other call. */
+
+void
+dev_tint( struct device *dev)
{
int i;
- int tmp;
struct sk_buff *skb;
for (i=0; i < DEV_NUMBUFFS; i++)
{
while (dev->buffs[i]!=NULL)
{
cli();
- skb=dev->buffs[i];
+ skb=(struct sk_buff *)dev->buffs[i];
if (skb->magic != DEV_QUEUE_MAGIC)
{
printk ("dev.c skb with bad magic-%X: squashing queue\n",
}
skb->next = NULL;
skb->prev = NULL;
-
- if (!skb->arp)
- {
- if (dev->rebuild_header (skb+1, dev))
- {
- skb->dev = dev;
- sti();
- arp_queue (skb);
- continue;
- }
- }
-
- tmp = skb->len;
- if (tmp <= dev->mtu)
- {
- if (dev->send_packet != NULL)
- {
- dev->send_packet(skb, dev);
- }
- if (buff != NULL)
- memcpy (buff, skb + 1, tmp);
-
- PRINTK ((">>\n"));
- print_eth ((struct enet_header *)(skb+1));
- }
- else
- {
- printk ("dev.c:**** bug len bigger than mtu, "
- "squashing queue. \n");
- cli();
- dev->buffs[i] = NULL;
- continue;
-
- }
sti();
- if (skb->free)
- {
- kfree_skb(skb, FREE_WRITE);
- }
-
- if (tmp != 0)
- return (tmp);
+ /* this will send it through the process again. */
+ dev->queue_xmit (skb, dev, -i-1);
}
}
- PRINTK (("dev_tint returning 0 \n"));
- return (0);
}
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: dev.h,v 0.8.4.5 1992/12/08 20:49:15 bir7 Exp $ */
+/* $Id: dev.h,v 0.8.4.7 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: dev.h,v $
+ * Revision 0.8.4.7 1993/01/23 18:00:11 bir7
+ * Fixed problems from merging.
+ *
+ * Revision 0.8.4.6 1993/01/22 22:58:08 bir7
+ * Changed so transmitting takes place in bottom half of interrupt routine.
+ *
* Revision 0.8.4.5 1992/12/08 20:49:15 bir7
* Edited ctrl-h's out of log messages.
*
unsigned long mem_start;
unsigned short base_addr;
unsigned char irq;
- unsigned char start:1,
- tbusy:1,
- loopback:1,
- interrupt:1,
- up:1;
+ volatile unsigned char start:1,
+ tbusy:1,
+ loopback:1,
+ interrupt:1,
+ up:1;
struct device *next;
int (*init)(struct device *dev);
unsigned long trans_start;
- struct sk_buff *buffs[DEV_NUMBUFFS];
+ volatile struct sk_buff * volatile buffs[DEV_NUMBUFFS];
struct sk_buff *backlog; /* no longer used. */
int (*open)(struct device *dev);
int (*stop)(struct device *dev);
void (*queue_xmit)(struct sk_buff *skb, struct device *dev, int pri);
int (*rebuild_header)(void *eth, struct device *dev);
unsigned short (*type_trans) (struct sk_buff *skb, struct device *dev);
- void (*send_packet)(struct sk_buff *skb, struct device *dev);
+ void (*send_packet)(struct sk_buff *skb, struct device *dev); /* no longer
+ used */
void *private;
unsigned short type;
extern struct packet_type *ptype_base;
void dev_queue_xmit (struct sk_buff *skb, struct device *dev, int pri);
int dev_rint (unsigned char *buff, long len, int flags, struct device *dev);
-unsigned long dev_tint (unsigned char *buff, struct device *dev);
+void dev_tint ( struct device *dev);
void dev_add_pack (struct packet_type *pt);
void dev_remove_pack (struct packet_type *pt);
struct device *get_dev (char *name);
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: eth.c,v 0.8.4.3 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: eth.c,v 0.8.4.4 1993/01/22 23:21:38 bir7 Exp $ */
/* $Log: eth.c,v $
+ * Revision 0.8.4.4 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.3 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
The author of this file may be reached at rth@sparta.com or Sparta, Inc.
7926 Jones Branch Dr. Suite 900, McLean Va 22102.
*/
-/* $Id: icmp.c,v 0.8.4.7 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: icmp.c,v 0.8.4.9 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: icmp.c,v $
+ * Revision 0.8.4.9 1993/01/23 18:00:11 bir7
+ * added volatile keyword to many variables.
+ *
+ * Revision 0.8.4.8 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.7 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
hash = iph->protocol & (MAX_IP_PROTOS -1 );
/* this can change while we are doing it. */
- for (ipprot = ip_protos[hash]; ipprot != NULL; )
+ for (ipprot = (struct ip_protocol *)ip_protos[hash];
+ ipprot != NULL; )
{
struct ip_protocol *nextip;
- nextip = ipprot->next;
+ nextip = (struct ip_protocol *)ipprot->next;
/* pass it off to everyone who wants it. */
if (iph->protocol == ipprot->protocol && ipprot->err_handler)
ipprot->err_handler (err, (unsigned char *)(icmph+1),
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: ip.c,v 0.8.4.8 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: ip.c,v 0.8.4.10 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: ip.c,v $
+ * Revision 0.8.4.10 1993/01/23 18:00:11 bir7
+ * added volatile keyword to many variables.
+ *
+ * Revision 0.8.4.9 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.8 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
unsigned long ip_addr[MAX_IP_ADDRES]={0,0,0};
+#ifdef PRINTK
+#undef PRINTK
+#endif
+
#undef IP_DEBUG
#ifdef IP_DEBUG
-#define PRINTK(X) printk X
+#define PRINTK(x) printk x
#else
-#define PRINTK(X) /**/
+#define PRINTK(x) /**/
#endif
static struct rtable *rt_base=NULL; /* used to base all the routing data. */
-struct ip_protocol *ip_protos[MAX_IP_PROTOS] = { NULL, };
+volatile struct ip_protocol *ip_protos[MAX_IP_PROTOS] = { NULL, };
+int ip_ads = 0;
+
+static char *in_ntoa(unsigned long addr)
+{
+ static char buf[100];
+
+ sprintf(buf,"%d.%d.%d.%d",
+ (addr & 0xff),
+ ((addr >> 8) & 0xff),
+ ((addr >> 16) & 0xff),
+ ((addr >> 24) & 0xff));
+ return buf;
+}
#if 0
static struct ip_protocol *
ip_protos[hash] = prot;
prot->copy = 0;
/* set the copy bit if we need to. */
- for (p2 = prot->next; p2 != NULL; p2=p2->next)
+ for (p2 = (struct ip_protocol *)prot->next;
+ p2 != NULL;
+ p2= (struct ip_protocol *)p2->next)
{
if (p2->protocol == prot->protocol)
{
hash = prot->protocol & (MAX_IP_PROTOS -1);
if (prot == ip_protos[hash])
{
- ip_protos[hash]=ip_protos[hash]->next;
+ ip_protos[hash]=(struct ip_protocol *)ip_protos[hash]->next;
return (0);
}
- for (p = ip_protos[hash]; p != NULL; p = p->next)
+ for (p = (struct ip_protocol *)ip_protos[hash];
+ p != NULL;
+ p = (struct ip_protocol *) p->next)
{
/* we have to worry if the protocol being deleted is the
last one on the list, then we may need to reset someones
void
print_rt(struct rtable *rt)
{
- PRINTK (("net = %08X router = %08X\n",rt->net, rt->router));
- PRINTK (("dev = %X, next = %X\n",rt->dev, rt->next));
+#ifdef IP_DEBUG
+ printk("RT: %06lx NXT=%06lx DEV=%06lx(%s) NET=%s ",
+ (long) rt, (long) rt->next, (long) rt->dev,
+ rt->dev->name, in_ntoa(rt->net));
+ printk("ROUTER=%s\n", in_ntoa(rt->router));
+#endif
}
void
return (NULL);
};
+/* Remove all routing table entries for a device. */
+void
+del_devroute (struct device *dev)
+{
+ struct rtable *r, *x, *p;
+
+ if ((r = rt_base) == NULL) return; /* nothing to remove! */
+ PRINTK (("IFACE DOWN: clearing routing table for dev 0x%08lx (%s)\n",
+ (long) dev, dev->name));
+ p = NULL;
+ while(r != NULL)
+ {
+ PRINTK ((">> R=%06lx N=%06lx P=%06lx DEV=%06lx(%s) A=%s\n",
+ (long) r, (long) r->next, (long) p, (long) r->dev,
+ r->dev->name, in_ntoa(r->net)));
+ if (r->dev == dev)
+ {
+ PRINTK ((">>> MATCH: removing rt=%08lx\n", (long) r));
+ if (p == NULL) rt_base = r->next;
+ else p->next = r->next;
+ x = r->next;
+ kfree_s(r, sizeof(*r));
+ r = x;
+ }
+ else
+ {
+ p = r;
+ r = r->next;
+ }
+ }
+}
+
void
add_route (struct rtable *rt)
{
int mask;
struct rtable *r;
struct rtable *r1;
- PRINTK (("add_route (rt=%X):\n",rt));
+
print_rt(rt);
if (rt_base == NULL)
struct rtable *rt;
struct device *dev;
struct ip_config ipc;
- static int ip_ads = 0;
- if (ip_ads >= MAX_IP_ADDRES) return (-EINVAL);
+
/* verify_area (u_ipc, sizeof (ipc));*/
memcpy_fromfs(&ipc, u_ipc, sizeof (ipc));
ipc.name[MAX_IP_NAME-1] = 0;
dev = get_dev (ipc.name);
+#if 1 /* making this a 0 will let you remove an ip address from
+ the list, which is useful under SLIP. But it may not
+ be compatible with older configs. */
+ ipc.destroy = 0;
+#endif
+
if (dev == NULL) return (-EINVAL);
+ if (ip_ads >= MAX_IP_ADDRES && !ipc.destroy && ipc.paddr != -1)
+ return (-EINVAL);
/* see if we need to add a broadcast address. */
if (ipc.net != -1)
add_route (rt);
}
+ if (ipc.destroy)
+ {
+ int i;
+ for (i = 0; i <MAX_IP_ADDRES; i++)
+ {
+ if (ip_addr[i] == ipc.paddr)
+ {
+ break;
+ }
+ }
+ if (i != MAX_IP_ADDRES)
+ {
+ PRINTK (("ip.c: Destroying Identity %8X, entry %d\n", ipc.paddr, i));
+ i++;
+ ip_ads--;
+ while (i < MAX_IP_ADDRES)
+ {
+ ip_addr[i-1] = ip_addr[i];
+ i++;
+ }
+ ip_addr[MAX_IP_ADDRES-1] = 0;
+ }
+ }
- if (!my_ip_addr (ipc.paddr))
+ /* FIX per FvK 92/11/15 */
+ /* When "downing" an interface, this must be done with paddr = -1L. */
+ if (ipc.paddr != -1L && !ipc.destroy)
{
- PRINTK (("new identity: %08X\n", ipc.paddr));
- ip_addr[ip_ads++] = ipc.paddr;
+ if (!my_ip_addr (ipc.paddr))
+ {
+ PRINTK (("new identity: %08X\n", ipc.paddr));
+ ip_addr[ip_ads++] = ipc.paddr;
+ }
}
dev->up = ipc.up;
{
if (dev->stop)
dev->stop(dev);
+ del_devroute(dev); /* clear routing table for dev */
}
return (0);
/* for now we will only deal with packets meant for us. */
if (!my_ip_addr(iph->daddr))
{
- PRINTK (("packet meant for someone else.\n"));
+ PRINTK(("\nIP: *** datagram routing not yet implemented ***\n"));
+ PRINTK((" SRC = %s ", in_ntoa(iph->saddr)));
+ PRINTK((" DST = %s (ignored)\n", in_ntoa(iph->daddr)));
+ icmp_reply (skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, dev);
+
skb->sk = NULL;
kfree_skb(skb, 0);
return (0);
/* deal with fragments. or don't for now.*/
if ((iph->frag_off & 32) || (net16(iph->frag_off)&0x1fff))
- {
- printk ("packet fragmented. \n");
+ { /* FIXME: this ^^^ used to be 64, as per bugfix */
+ printk("\nIP: *** datagram fragmentation not yet implemented ***\n");
+ printk(" SRC = %s ", in_ntoa(iph->saddr));
+ printk(" DST = %s (ignored)\n", in_ntoa(iph->daddr));
+ icmp_reply (skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, dev);
skb->sk = NULL;
kfree_skb(skb, 0);
return(0);
skb->h.raw += iph->ihl*4;
hash = iph->protocol & (MAX_IP_PROTOS -1);
- for (ipprot = ip_protos[hash]; ipprot != NULL; ipprot=ipprot->next)
+ for (ipprot = (struct ip_protocol *)ip_protos[hash];
+ ipprot != NULL;
+ ipprot=(struct ip_protocol *)ipprot->next)
{
struct sk_buff *skb2;
if (ipprot->protocol != iph->protocol) continue;
if (dev->rebuild_header ((struct enet_header *)(skb+1),dev))
{
if (!all) break;
- skb=skb->link3;
+ skb=(struct sk_buff *)skb->link3;
continue;
}
}
/* this should cut it off before we send too
many packets. */
if (sk->retransmits > sk->cong_window) break;
- skb=skb->link3;
+ skb=(struct sk_buff *)skb->link3;
}
/* double the rtt time every time we retransmit.
This will cause exponential back off on how
PRINTK ((" frag_off=%d\n", ip->frag_off));
PRINTK ((" saddr = %X, daddr = %X\n",ip->saddr, ip->daddr));
}
-
-#if 0
-int
-ip_handoff (volatile struct sock *sk)
-{
- struct ip_protocol *p;
- struct sk_buff *skb;
- p = get_protocol (sk->protocol);
-
- if (p == NULL)
- {
- /* this can never happen. */
- printk ("sock_ioctl: protocol not found. \n");
- /* what else can I do, I suppose I could send a sigkill. */
- return (-EIO);
- }
-
- while (p->handler != sk->prot->rcv)
- {
- p=p->next;
- if (p == NULL)
- {
- /* this can never happen. */
- printk ("sock_ioctl: protocol not found. \n");
- /* what else can I do, I suppose I could send a sigkill. */
- return (-EIO);
- }
- }
- p = p-> next;
- sk->inuse = 1;
-
- /* now we have to remove the top sock buff. If there are none, then
- we return. */
- if (sk->rqueue == NULL) return (0);
- skb = sk->rqueue;
- if (skb->next == skb)
- {
- sk->rqueue = NULL;
- }
- else
- {
- sk->rqueue = skb->next;
- skb->next->prev = skb->prev;
- skb->prev->next = skb->next;
- }
- if (p != NULL)
- {
- p->handler ((unsigned char *)(skb+1), skb->dev, NULL, skb->saddr,
- skb->len, skb->daddr, p->protocol, 0);
- }
- kfree_skb (skb, FREE_READ);
- release_sock (sk);
- return (0);
-}
-
-#endif
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: ip.h,v 0.8.4.1 1992/11/10 00:17:18 bir7 Exp $ */
+/* $Id: ip.h,v 0.8.4.2 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: ip.h,v $
+ * Revision 0.8.4.2 1993/01/23 18:00:11 bir7
+ * added volatile keyword to many variables.
+ *
* Revision 0.8.4.1 1992/11/10 00:17:18 bir7
* version change only.
*
* Revision 0.8.3.2 1992/11/10 00:14:47 bir7
* Changed malloc to kmalloc and added $i\bId$ and $Log: ip.h,v $
+ * Revision 0.8.4.2 1993/01/23 18:00:11 bir7
+ * added volatile keyword to many variables.
+ *
* Revision 0.8.4.1 1992/11/10 00:17:18 bir7
* version change only.
*.
int redo, struct ip_protocol *protocol);
void (*err_handler) (int err, unsigned char *buff, unsigned long daddr,
unsigned long saddr, struct ip_protocol *ipprot);
- struct ip_protocol *next;
+ volatile struct ip_protocol *next;
unsigned char protocol;
unsigned char copy:1;
void *data;
};
extern struct ip_protocol *ip_protocol_base;
-extern struct ip_protocol *ip_protos[MAX_IP_PROTOS];
+extern volatile struct ip_protocol *ip_protos[MAX_IP_PROTOS];
#define MAX_IP_ADDRES 5
extern unsigned long ip_addr[MAX_IP_ADDRES];
-#define MY_IP_ADDR ip_addr[0];
+extern int ip_ads;
+#define MY_IP_ADDR ip_addr[0]
int my_ip_addr(unsigned long);
#include "eth.h"
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: loopback.c,v 0.8.4.5 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: loopback.c,v 0.8.4.8 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: loopback.c,v $
+ * Revision 0.8.4.8 1993/01/23 18:00:11 bir7
+ * Fixed problems introduced by merge.
+ *
+ * Revision 0.8.4.7 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.6 1993/01/22 22:58:08 bir7
+ * Changed so transmitting takes place in bottom half of interrupt routine.
+ *
* Revision 0.8.4.5 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
static int
loopback_xmit(struct sk_buff *skb, struct device *dev)
{
- static int inuse=0;
- struct enet_header *eth;
- int i;
int done;
- static unsigned char buff[2048];
- unsigned char *tmp;
-
PRINTK (("loopback_xmit (dev = %X)\n", dev));
cli();
- if (inuse)
+ if (dev->tbusy != 0)
{
sti();
return (1);
}
- inuse = 1;
+ dev->tbusy = 1;
sti();
- done = -1;
- while (done == -1)
- done = dev_rint ((unsigned char *)(skb+1), skb->len, 0, dev);
+ done = dev_rint ((unsigned char *)(skb+1), skb->len, 0, dev);
if (skb->free)
kfree_skb (skb, FREE_WRITE);
- tmp = NULL;
- i = 0;
while (done != 1)
{
- if (done != -1 && (i = dev_tint (buff,dev)) != 0)
- {
- /* print out the buffer. */
- PRINTK (("loopback xmit: \n"));
- eth = (struct enet_header *)buff;
- print_eth (eth);
- tmp = buff;
- done = dev_rint (buff, i, 0, dev);
- if (done != -1)
- {
- tmp = NULL;
- i = 0;
- }
- }
- else
- {
- if (i == 0) tmp = NULL;
- done = dev_rint (tmp, i, 0, dev);
- }
-
+ done = dev_rint (NULL, 0, 0, dev);
}
- inuse = 0;
+
+ dev->tbusy = 0;
+
return (0);
}
printk ("Loopback device init\n");
/* initialize the rest of the device structure. */
dev->mtu = 2000; /* mtu */
+ dev->tbusy = 0;
dev->hard_start_xmit = loopback_xmit;
dev->open = NULL;
dev->hard_header = eth_hard_header;
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: packet.c,v 0.8.4.5 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: packet.c,v 0.8.4.7 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: packet.c,v $
+ * Revision 0.8.4.7 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.6 1993/01/23 18:00:11 bir7
+ * Added volatile keyword
+ *
* Revision 0.8.4.5 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
else
return (-EINVAL);
- skb = sk->prot->wmalloc (sk, len+sizeof (*skb) + sk->prot->max_header, 0,
- GFP_KERNEL);
+ skb = sk->prot->wmalloc (sk, len+sizeof (*skb), 0, GFP_KERNEL);
+
/* this shouldn't happen, but it could. */
if (skb == NULL)
{
PRINTK ("packet_sendto: write buffer full?\n");
- print_sk (sk);
return (-EAGAIN);
}
skb->lock = 0;
skb->mem_addr = skb;
- skb->mem_len = len + sizeof (*skb) +sk->prot->max_header;
+ skb->mem_len = len + sizeof (*skb);
skb->sk = sk;
skb->free = 1;
saddr.sa_data[13] = 0;
sk->state = TCP_CLOSE;
dev_remove_pack ((struct packet_type *)sk->pair);
kfree_s ((void *)sk->pair, sizeof (struct packet_type));
+ sk->pair = NULL;
release_sock (sk);
}
return (-ERESTARTSYS);
}
}
+ sk->inuse = 1;
sti();
}
skb = sk->rqueue;
}
else
{
- sk->rqueue = sk->rqueue ->next;
+ sk->rqueue = (struct sk_buff *)sk->rqueue ->next;
skb->prev->next = skb->next;
skb->next->prev = skb->prev;
}
NULL,
128,
0,
- {NULL,}
+ {NULL,},
+ "PACKET"
};
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: raw.c,v 0.8.4.9 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: raw.c,v 0.8.4.12 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: raw.c,v $
+ * Revision 0.8.4.12 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.11 1993/01/23 18:00:11 bir7
+ * Added volatile keyword
+ *
+ * Revision 0.8.4.10 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.9 1992/12/12 19:25:04 bir7
* Cleaned up Log messages.
*
{
int tmp;
PRINTK (("raw_sendto: write buffer full?\n"));
- print_sk (sk);
if (noblock) return (-EAGAIN);
tmp = sk->wmem_alloc;
release_sock (sk);
}
else
{
- sk->rqueue = sk->rqueue ->next;
+ sk->rqueue = (struct sk_buff *)sk->rqueue ->next;
skb->prev->next = skb->next;
skb->next->prev = skb->prev;
}
NULL,
128,
0,
- {NULL,}
+ {NULL,},
+ "RAW"
};
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: sock.c,v 0.8.4.12 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: sock.c,v 0.8.4.16 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: sock.c,v $
+ * Revision 0.8.4.16 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.15 1993/01/23 18:00:11 bir7
+ * Added volatile keyword
+ *
+ * Revision 0.8.4.14 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.13 1993/01/22 22:58:08 bir7
+ * *** empty log message ***
+ *
* Revision 0.8.4.12 1992/12/12 19:25:04 bir7
* Made memory leak checking more leanent.
*
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/string.h>
+#include <linux/config.h>
#include <linux/sock_ioctl.h>
#include "../kern_sock.h"
#include "timer.h"
static int ip_proto_fcntl (struct socket *sock, unsigned int cmd,
unsigned long arg);
-
struct proto_ops inet_proto_ops =
{
ip_proto_init,
ip_proto_shutdown,
ip_proto_setsockopt,
ip_proto_getsockopt,
- ip_proto_fcntl
+ ip_proto_fcntl,
};
void
print_sk (volatile struct sock *sk)
{
if (!sk) {
- PRINTK ((" print_sk(NULL)\n"));
+ printk (" print_sk(NULL)\n");
return;
}
- PRINTK ((" wmem_alloc = %d\n", sk->wmem_alloc));
- PRINTK ((" rmem_alloc = %d\n", sk->rmem_alloc));
- PRINTK ((" send_head = %X\n", sk->send_head));
- PRINTK ((" state = %d\n",sk->state));
- PRINTK ((" wback = %X, rqueue = %X\n", sk->wback, sk->rqueue));
- PRINTK ((" wfront = %X\n", sk->wfront));
- PRINTK ((" daddr = %X, saddr = %X\n", sk->daddr,sk->saddr));
- PRINTK ((" num = %d", sk->num));
- PRINTK ((" next = %X\n", sk->next));
- PRINTK ((" send_seq = %d, acked_seq = %d, copied_seq = %d\n",
- sk->send_seq, sk->acked_seq, sk->copied_seq));
- PRINTK ((" rcv_ack_seq = %d, window_seq = %d, fin_seq = %d\n",
- sk->rcv_ack_seq, sk->window_seq, sk->fin_seq));
- PRINTK ((" prot = %X\n", sk->prot));
- PRINTK ((" pair = %X, back_log = %X\n", sk->pair,sk->back_log));
- PRINTK ((" inuse = %d , blog = %d\n", sk->inuse, sk->blog));
- PRINTK ((" dead = %d delay_acks=%d\n", sk->dead, sk->delay_acks));
- PRINTK ((" retransmits = %d, timeout = %d\n", sk->retransmits, sk->timeout));
- PRINTK ((" cong_window = %d, packets_out = %d\n", sk->cong_window,
- sk->packets_out));
+ printk (" wmem_alloc = %d\n", sk->wmem_alloc);
+ printk (" rmem_alloc = %d\n", sk->rmem_alloc);
+ printk (" send_head = %X\n", sk->send_head);
+ printk (" state = %d\n",sk->state);
+ printk (" wback = %X, rqueue = %X\n", sk->wback, sk->rqueue);
+ printk (" wfront = %X\n", sk->wfront);
+ printk (" daddr = %X, saddr = %X\n", sk->daddr,sk->saddr);
+ printk (" num = %d", sk->num);
+ printk (" next = %X\n", sk->next);
+ printk (" send_seq = %d, acked_seq = %d, copied_seq = %d\n",
+ sk->send_seq, sk->acked_seq, sk->copied_seq);
+ printk (" rcv_ack_seq = %d, window_seq = %d, fin_seq = %d\n",
+ sk->rcv_ack_seq, sk->window_seq, sk->fin_seq);
+ printk (" prot = %X\n", sk->prot);
+ printk (" pair = %X, back_log = %X\n", sk->pair,sk->back_log);
+ printk (" inuse = %d , blog = %d\n", sk->inuse, sk->blog);
+ printk (" dead = %d delay_acks=%d\n", sk->dead, sk->delay_acks);
+ printk (" retransmits = %d, timeout = %d\n", sk->retransmits, sk->timeout);
+ printk (" cong_window = %d, packets_out = %d\n", sk->cong_window,
+ sk->packets_out);
+ printk (" urg = %d shutdown=%d\n", sk->urg, sk->shutdown);
}
void
print_skb(struct sk_buff *skb)
{
if (!skb) {
- PRINTK ((" print_skb(NULL)\n"));
+ printk (" print_skb(NULL)\n");
return;
}
- PRINTK ((" prev = %X, next = %X\n", skb->prev, skb->next));
- PRINTK ((" sk = %X link3 = %X\n", skb->sk, skb->link3));
- PRINTK ((" mem_addr = %X, mem_len = %d\n", skb->mem_addr, skb->mem_len));
- PRINTK ((" used = %d free = %d\n", skb->used,skb->free));
+ printk (" prev = %X, next = %X\n", skb->prev, skb->next);
+ printk (" sk = %X link3 = %X\n", skb->sk, skb->link3);
+ printk (" mem_addr = %X, mem_len = %d\n", skb->mem_addr, skb->mem_len);
+ printk (" used = %d free = %d\n", skb->used,skb->free);
}
/* just used to reference some pointers to keep gcc from over optimizing
for (skb = sk->wfront; skb != NULL; )
{
struct sk_buff *skb2;
- skb2=skb->next;
+ skb2=(struct sk_buff *)skb->next;
if (skb->magic != TCP_WRITE_QUEUE_MAGIC)
{
printk ("sock.c:destroy_sock write queue with bad magic (%X)\n",
skb = sk->rqueue;
do {
struct sk_buff *skb2;
- skb2=skb->next;
+ skb2=(struct sk_buff *)skb->next;
/* this will take care of closing sockets that were
listening and didn't accept everything. */
if (skb->next != NULL)
{
- extern struct sk_buff *arp_q;
+ extern volatile struct sk_buff *arp_q;
int i;
if (skb->next != skb)
{
}
skb->dev = NULL;
sti();
- skb2=skb->link3;
+ skb2=(struct sk_buff *)skb->link3;
kfree_skb(skb, FREE_WRITE);
skb=skb2;
}
/* this should never happen. */
printk ("cleaning back_log. \n");
cli();
- skb = sk->back_log;
+ skb = (struct sk_buff *)sk->back_log;
do {
struct sk_buff *skb2;
- skb2=skb->next;
+ skb2=(struct sk_buff *)skb->next;
kfree_skb(skb, FREE_READ);
skb=skb2;
} while (skb != sk->back_log);
/* this should never happen. */
/* actually it can if an ack has just been sent. */
PRINTK (("possible memory leak in socket = %X\n", sk));
- print_sk (sk);
sk->destroy = 1;
sk->ack_backlog = 0;
sk->inuse = 0;
sk->timeout = TIME_DESTROY;
reset_timer ((struct timer *)&sk->time_wait);
}
-
PRINTK (("leaving destroy_sock\n"));
-
}
ip_proto_fcntl (struct socket *sock, unsigned int cmd, unsigned long arg)
{
volatile struct sock *sk;
+
sk=sock->data;
if (sk == NULL)
{
switch (cmd)
{
case F_SETOWN:
- sk->proc = arg;
- return (0);
+
+ /* this is a little restrictive, but it's the only way to make
+ sure that you can't send a sigurg to another process. */
+ if (!suser() && current->pgrp != -arg && current->pid != arg)
+ return (-EPERM);
+
+ sk->proc = arg;
+ return (0);
+
+
+
+ sk->proc = arg;
+ return (0);
case F_GETOWN:
return (sk->proc);
{
struct ip_protocol *tmp;
/* add all the protocols. */
- tmp = p->next;
+ tmp = (struct ip_protocol *) p->next;
add_ip_protocol (p);
p = tmp;
}
sk->urginline = 0;
sk->intr = 0;
sk->linger = 0;
+ sk->rtt = 0;
sk->destroy = 0;
sk->reuse = 0;
sk->priority = 1;
/* verify_area (uaddr, addr_len);*/
memcpy_fromfs (&addr, uaddr, min (sizeof (addr), addr_len));
+
+#if 0
if (addr.sin_family && addr.sin_family != AF_INET)
- return (-EINVAL); /* this needs to be changed. */
+ {
+ /* this is really a bug in BSD which we need to emulate because
+ ftp expects it. */
+ return (-EINVAL);
+ }
+#endif
snum = net16(addr.sin_port);
PRINTK (("bind sk =%X to port = %d\n", sk, snum));
- print_sk (sk);
sk = sock->data;
/* we can't just leave the socket bound wherever it is, it might be bound
PRINTK (("sock_array[%d] = %X:\n", snum & (SOCK_ARRAY_SIZE -1),
sk->prot->sock_array[snum & (SOCK_ARRAY_SIZE -1)]));
- print_sk (sk->prot->sock_array[snum & (SOCK_ARRAY_SIZE -1)]);
/* make sure we are allowed to bind here. */
for (sk2 = sk->prot->sock_array[snum & (SOCK_ARRAY_SIZE -1)];
if (sk->prot->connect == NULL)
return (-EOPNOTSUPP);
- if (sk->intr == 0)
- {
- err = sk->prot->connect (sk, (struct sockaddr_in *)uaddr, addr_len);
- if (err < 0) return (err);
- }
+ err = sk->prot->connect (sk, (struct sockaddr_in *)uaddr, addr_len);
+ if (err < 0) return (err);
sock->state = SS_CONNECTING;
if (sk->state != TCP_ESTABLISHED && (flags & O_NONBLOCK))
if (current->signal & ~current->blocked)
{
sti();
- sk->intr = 1;
- sock->state = SS_UNCONNECTED;
return (-ERESTARTSYS);
}
}
sti();
sock->state = SS_CONNECTED;
- sk->intr = 0;
+
if (sk->state != TCP_ESTABLISHED && sk->err)
{
sock->state = SS_UNCONNECTED;
/* we've been passed an extra socket. We need to free it up because
the tcp module creates it's own when it accepts one. */
+
if (newsock->data)
kfree_s (newsock->data, sizeof (struct sock));
else
{
sin.sin_port = sk->dummy_th.source;
- sin.sin_addr.s_addr = sk->saddr;
+ if (sk->saddr == 0)
+ sin.sin_addr.s_addr = MY_IP_ADDR;
+ else
+ sin.sin_addr.s_addr = sk->saddr;
}
len = sizeof (sin);
verify_area (uaddr, len);
return (-EPERM);
return (ip_set_dev((struct ip_config *)arg));
+ case SIOCSARP:
+ if (!suser())
+ return (-EPERM);
+ return (arp_ioctl_set((struct arpreq *)arg));
+
+ case SIOCGARP:
+ return (arp_ioctl_get((struct arpreq *)arg));
+
+ case SIOCDARP:
+ if (!suser())
+ return (-EPERM);
+ return (arp_ioctl_del((struct arpreq *)arg));
+
case FIOSETOWN:
case SIOCSPGRP:
{
{
struct sk_buff *skb;
sk->blog = 1;
- skb = sk->back_log;
+ skb = (struct sk_buff *)sk->back_log;
PRINTK (("release_sock: skb = %X:\n",skb));
- print_skb(skb);
if (skb->next != skb)
{
sk->back_log = skb->next;
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: sock.h,v 0.8.4.5 1992/12/12 01:50:49 bir7 Exp $ */
+/* $Id: sock.h,v 0.8.4.7 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: sock.h,v $
+ * Revision 0.8.4.7 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.6 1993/01/23 18:00:11 bir7
+ * Added volatile keyword
+ *
* Revision 0.8.4.5 1992/12/12 01:50:49 bir7
* Fixed support for half duplex connections.
*
struct sock
{
struct options *opt;
- unsigned long wmem_alloc;
- unsigned long rmem_alloc;
+ volatile unsigned long wmem_alloc;
+ volatile unsigned long rmem_alloc;
unsigned long send_seq;
unsigned long acked_seq;
unsigned long copied_seq;
unsigned long rcv_ack_seq;
unsigned long window_seq;
unsigned long fin_seq;
- unsigned long inuse:1, dead:1, urginline:1,
+ /* not all are volatile, but some are, so we might as
+ well say they all are. */
+ volatile unsigned long inuse:1, dead:1, urginline:1,
intr:1, blog:1, done:1, reuse:1, keepopen:1, linger:1,
delay_acks:1, timeout:3, destroy:1, ack_timed:1, no_check:1,
exp_growth:1;
volatile struct sock *pair;
struct sk_buff *send_tail;
struct sk_buff *send_head;
- struct sk_buff *back_log;
+ volatile struct sk_buff * volatile back_log;
struct sk_buff *send_tmp;
long retransmits;
struct sk_buff *wback, *wfront, *rqueue;
unsigned short bytes_rcv;
unsigned short mtu;
unsigned short num;
- unsigned short cong_window;
- unsigned short packets_out;
- unsigned short urg;
- unsigned short shutdown;
+ volatile unsigned short cong_window;
+ volatile unsigned short packets_out;
+ volatile unsigned short urg;
+ volatile unsigned short shutdown;
unsigned short mss;
- short rtt;
- short err;
+ volatile short rtt;
+ volatile short err;
unsigned char protocol;
- unsigned char state;
- unsigned char ack_backlog;
+ volatile unsigned char state;
+ volatile unsigned char ack_backlog;
unsigned char max_ack_backlog;
unsigned char priority;
struct tcp_header dummy_th; /* I may be able to get rid of this. */
- struct timer time_wait;
+ volatile struct timer time_wait;
};
struct proto
unsigned short max_header;
unsigned long retransmits;
volatile struct sock *sock_array[SOCK_ARRAY_SIZE];
+ char name[80];
};
#define TIME_WRITE 1
struct sk_buff
{
- struct sk_buff *next;
- struct sk_buff *prev;
- struct sk_buff *link3;
+ volatile struct sk_buff *next;
+ volatile struct sk_buff *prev;
+ volatile struct sk_buff *link3;
volatile struct sock *sk;
- unsigned long when; /* used to compute rtt's. */
+ volatile unsigned long when; /* used to compute rtt's. */
struct device *dev;
void *mem_addr;
union
unsigned long saddr;
unsigned long daddr;
int magic;
- unsigned long acked:1,used:1,free:1,arp:1, urg_used:1, lock:1;
+ volatile unsigned long acked:1,used:1,free:1,arp:1, urg_used:1, lock:1;
};
#define PROT_SOCK 1024
Tim MacKenzie (tym@dibbler.cs.moansh.edu.au)
*/
-/* $Id: tcp.c,v 0.8.4.12 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: tcp.c,v 0.8.4.16 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: tcp.c,v $
+ * Revision 0.8.4.16 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.15 1993/01/23 18:00:11 bir7
+ * added volatile keyword and fixed infinite loop in tcp_write.
+ *
+ * Revision 0.8.4.14 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.13 1993/01/22 22:58:08 bir7
+ * Check in for merge with previous .99 pl 4.
+ *
* Revision 0.8.4.12 1992/12/12 19:25:04 bir7
* Fixed anti-memory Leak in shutdown.
*
struct sk_buff *skb;
skb = sk->rqueue;
if (skb == NULL) return (NULL);
- sk->rqueue = skb->next;
+ sk->rqueue = (struct sk_buff *)skb->next;
if (sk->rqueue == skb)
{
sk->rqueue = NULL;
return;
}
- printk ("tcp.c: icmp_err got error\n");
+ PRINTK (("tcp.c: icmp_err got error\n"));
sk->err = icmp_err_convert[err & 0xff].errno;
+ /* if we've already connected we will keep trying
+ until we time out, or the user gives up. */
if (icmp_err_convert[err & 0xff].fatal)
{
- if (sk->state != TCP_ESTABLISHED)
+ if (sk->state == TCP_SYN_SENT)
{
sk->state = TCP_CLOSE;
+ sk->prot->close(sk, 0);
}
- sk->prot->close(sk, 0);
}
return;
int count=0;
int sum;
+ PRINTK (("tcp_readable (sk=%X)\n", sk));
+
if (sk == NULL || sk->rqueue == NULL) return (0);
- counted = sk->copied_seq;
+ counted = sk->copied_seq+1;
amount = 0;
- skb = sk->rqueue->next;
+ skb = (struct sk_buff *)sk->rqueue->next;
/* go until a push or until we are out of data. */
do {
count ++;
if (count > 20)
{
- printk ("tcp_readable, more than 20 packets without a psh\n");
- printk ("possible read_queue corruption.\n");
+ PRINTK (("tcp_readable, more than 20 packets without a psh\n"));
+ PRINTK (("possible read_queue corruption.\n"));
return (amount);
}
- if (before (counted+1, skb->h.th->seq)) break;
+ if (before (counted, skb->h.th->seq)) break;
sum = skb->len - ( counted - skb->h.th->seq);
if (skb->h.th->syn) sum ++;
+ if (skb->h.th->urg)
+ {
+ sum -= net16(skb->h.th->urg_ptr);
+ }
if (sum >= 0)
{
amount += sum;
if (skb->h.th->syn) amount --;
counted += sum;
- if (skb->h.th->psh) break;
}
- skb = skb->next;
+ if (amount && skb->h.th->psh) break;
+ skb = (struct sk_buff *)skb->next;
} while (skb != sk->rqueue->next);
+ PRINTK (("tcp readable returning %d bytes\n", amount));
return (amount);
}
tcp_select (volatile struct sock *sk, int sel_type, select_table *wait)
{
sk->inuse = 1;
+ PRINTK (("tcp_select (sk=%X, sel_type = %d, wait = %X)\n",
+ sk, sel_type, wait));
switch (sel_type)
{
case SEL_IN:
if (sk->shutdown & SEND_SHUTDOWN)
{
+ PRINTK (("write select on shutdown socket.\n"));
+ /* should this return an error? */
release_sock (sk);
return (0);
}
+
/* hack so it will probably be able to write something
if it says it's ok to write. */
- if (sk->prot->wspace(sk) >= MIN_WRITE_SPACE)
+ if (sk->prot->wspace(sk) >= sk->mtu)
{
release_sock (sk);
+ /* This should cause connect to work ok. */
+ if (sk->state == TCP_SYN_RECV || sk->state == TCP_SYN_SENT)
+ return (0);
return (1);
}
+
+ PRINTK (("tcp_select: sleeping on write sk->wmem_alloc = %d, "
+ "sk->packets_out = %d\n"
+ "sk->wback = %X, sk->wfront = %X\n"
+ "sk->send_seq = %u, sk->window_seq=%u\n",
+ sk->wmem_alloc, sk->packets_out,
+ sk->wback, sk->wfront,
+ sk->send_seq, sk->window_seq));
+
release_sock (sk);
return (0);
sk->inuse = 1;
if (sk->rqueue != NULL)
{
- skb = sk->rqueue->next;
+ skb = (struct sk_buff *)sk->rqueue->next;
if (sk->copied_seq+1 == skb->h.th->seq && skb->h.th->urg)
answ = 1;
}
PRINTK (("tcp_write (sk=%X, from=%X, len=%d, nonblock=%d, flags=%X)\n",
sk, from, len, nonblock, flags));
- print_sk (sk);
-
prot = sk->prot;
while (len > 0)
{
+
+ if (sk->err)
+ {
+ if (copied) return (copied);
+ tmp = -sk->err;
+ sk->err = 0;
+ return (tmp);
+ }
+
/* first thing we do is make sure that we are established. */
sk->inuse = 1; /* no one else will use this socket. */
+ if (sk->shutdown & SEND_SHUTDOWN)
+ {
+ release_sock (sk);
+ sk->err = EPIPE;
+ if (copied) return (copied);
+ sk->err = 0;
+ return (-EPIPE);
+ }
+
while (sk->state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT)
{
+
+ if (sk->err)
+ {
+ if (copied) return (copied);
+ tmp = -sk->err;
+ sk->err = 0;
+ return (tmp);
+ }
+
if (sk->state != TCP_SYN_SENT &&
sk->state != TCP_SYN_RECV)
{
return (-EPIPE);
}
- if (nonblock)
+ if (nonblock || copied)
{
release_sock (sk);
PRINTK (("tcp_write: return 2\n"));
/* if we didn't get any memory, we need to sleep. */
if (skb == NULL)
{
- if (nonblock)
+ if (nonblock || copied)
{
release_sock (sk);
PRINTK (("tcp_write: return 4\n"));
if (flags & MSG_OOB)
{
((struct tcp_header *)buff)->urg = 1;
- ((struct tcp_header *)buff)->urg_ptr = copy;
+ ((struct tcp_header *)buff)->urg_ptr = net16(copy);
}
skb->len += tmp;
memcpy_fromfs (buff+tmp, from, copy);
static void
cleanup_rbuf (volatile struct sock *sk)
{
-/* PRINTK (("cleaning rbuf for sk=%X\n",sk));*/
+ PRINTK (("cleaning rbuf for sk=%X\n",sk));
/* we have to loop through all the buffer headers, and
try to free up all the space we can. */
while (sk->rqueue != NULL )
{
struct sk_buff *skb;
- skb=sk->rqueue->next;
+ skb=(struct sk_buff *)sk->rqueue->next;
if (!skb->used) break;
if (sk->rqueue == skb)
{
/* at this point we should send an ack if the difference in
the window, and the amount of space is bigger than
TCP_WINDOW_DIFF */
+
PRINTK (("sk->window left = %d, sk->prot->rspace(sk)=%d\n",
sk->window - sk->bytes_rcv, sk->prot->rspace(sk)));
+ /* this area has caused the most trouble. The current strategy
+ is to simply do nothing if the other end has room to send atleast
+ 3 full packets, because the ack from those will automatically
+ update the window. If the other end doesn't think we have much
+ space left, but we have room for atleast 1 more complete packet
+ than it thinks we do, we will send an ack immediatedly. Otherwise
+ we will wait up to .5 seconds in case the user reads some more. */
+
+ sk->ack_backlog ++;
if ((sk->prot->rspace(sk) >
- (sk->window - sk->bytes_rcv + TCP_WINDOW_DIFF)))
+ (sk->window - sk->bytes_rcv + sk->mtu)))
{
- sk->ack_backlog++;
- if (sk->ack_backlog > sk->max_ack_backlog)
- {
- tcp_read_wakeup (sk);
- }
- else
+ /* send an ack right now. */
+ tcp_read_wakeup (sk);
+ }
+ else
+ {
+ /* force it to send an ack soon. */
+ if ( before (jiffies + TCP_ACK_TIME, sk->time_wait.when))
{
- /* force it to send an ack soon. */
- if ( before (jiffies + TCP_ACK_TIME, sk->time_wait.when))
- {
- sk->time_wait.len = TCP_ACK_TIME;
- sk->timeout = TIME_WRITE;
- reset_timer ((struct timer *)&sk->time_wait);
- }
+ sk->time_wait.len = TCP_ACK_TIME;
+ sk->timeout = TIME_WRITE;
+ reset_timer ((struct timer *)&sk->time_wait);
}
}
-
-}
+}
/* handle reading urgent data. */
static int
unsigned char *to, int len, unsigned flags)
{
int copied = 0;
+
struct sk_buff *skb;
PRINTK (("tcp_read_urg(sk=%X, to=%X, len=%d, flags=%X)\n",
sk, to, len, flags));
- print_sk(sk);
+
while (len > 0)
{
sk->inuse = 1;
return (tmp);
}
- if (sk->state == TCP_CLOSE)
+ if (sk->state == TCP_CLOSE || sk->done)
{
release_sock (sk);
if (copied) return (copied);
return (copied);
}
- if (nonblock)
+ if (nonblock || copied)
{
release_sock (sk);
if (copied) return (copied);
sti();
sk->inuse = 1;
}
- /* now we have some urgent data, we must find it.*/
- for (skb = sk->rqueue->next; skb->next != sk->rqueue;
- skb = skb->next)
- {
- int offset;
+
+ skb = (struct sk_buff *)sk->rqueue->next;
+ do {
int amt;
- if (!skb->h.th->urg) continue;
- offset = 0;
- amt = min(skb->h.th->urg_ptr,len);
- verify_area (to, amt);
- memcpy_tofs (to, (unsigned char *)(skb->h.th) +
- skb->h.th->doff*4
- + offset, amt);
-
- if (!(flags & MSG_PEEK))
+ if (skb->h.th->urg && !skb->urg_used)
{
- skb->urg_used = 1;
- sk->urg --;
+ if (skb->h.th->urg_ptr == 0)
+ {
+ skb->h.th->urg_ptr = net16(skb->len);
+ }
+ amt = min(net16(skb->h.th->urg_ptr),len);
+ verify_area (to, amt);
+ memcpy_tofs (to, (unsigned char *)(skb->h.th) +
+ skb->h.th->doff*4, amt);
+
+ if (!(flags & MSG_PEEK))
+ {
+ skb->urg_used = 1;
+ sk->urg --;
+ }
+ release_sock (sk);
+ copied += amt;
+ return (copied);
}
- release_sock (sk);
- copied += amt;
- return (copied);
- }
+ skb = (struct sk_buff *)skb->next;
+ } while (skb != sk->rqueue->next);
}
+ sk->urg = 0;
+ release_sock(sk);
return (0);
}
/* so no-one else will use this socket. */
sk->inuse = 1;
if (sk->rqueue != NULL)
- skb=sk->rqueue->next;
+ skb=(struct sk_buff *)sk->rqueue->next;
else
skb = NULL;
{
PRINTK(("skb = %X:\n",skb));
- print_skb(skb);
- print_sk (sk);
cleanup_rbuf(sk);
{
int tmp;
release_sock (sk);
- if (copied) return (copied);
+ if (copied)
+ {
+ PRINTK (("tcp_read: returing %d\n", copied));
+ return (copied);
+ }
tmp = -sk->err;
sk->err = 0;
return (tmp);
if (sk->state == TCP_CLOSE)
{
release_sock (sk);
- if (copied) return (copied);
+ if (copied)
+ {
+ PRINTK (("tcp_read: returing %d\n", copied));
+ return (copied);
+ }
if (!sk->done)
{
sk->done = 1;
{
release_sock (sk);
if (copied == 0) sk->done = 1;
+ PRINTK (("tcp_read: returing %d\n", copied));
return (copied);
}
-
- if (nonblock)
+ if (nonblock || copied)
{
release_sock (sk);
- if (copied) return (copied);
+ if (copied)
+ {
+ PRINTK (("tcp_read: returing %d\n", copied));
+ return (copied);
+ }
return (-EAGAIN);
}
if ((flags & MSG_PEEK) && copied != 0)
{
release_sock (sk);
+ PRINTK (("tcp_read: returing %d\n", copied));
return (copied);
}
if (current->signal & ~current->blocked)
{
sti ();
- if (copied) return (copied);
+ if (copied)
+ {
+ PRINTK (("tcp_read: returing %d\n", copied));
+ return (copied);
+ }
+
return (-ERESTARTSYS);
}
}
sk->inuse = 1;
if (sk->rqueue != NULL)
- skb=sk->rqueue->next;
+ skb=(struct sk_buff *)sk->rqueue->next;
else
skb = NULL;
{
if (skb->urg_used)
{
- if (flags & MSG_PEEK) break;
- sk->copied_seq += skb->h.th->urg_ptr;
- offset += skb->h.th->urg_ptr;
- if (offset > skb->len)
+ sk->copied_seq += net16(skb->h.th->urg_ptr);
+ offset += net16(skb->h.th->urg_ptr);
+ if (offset >= skb->len)
{
skb->used = 1;
- skb=skb->next;
+ skb = (struct sk_buff *)skb->next;
continue;
}
}
else
{
- break;
+ release_sock (sk);
+ if (copied) return (copied);
+ return (-EIO);
}
}
used = min(skb->len - offset, len);
{
skb->used = 1;
}
- skb=skb->next;
+ skb=(struct sk_buff *)skb->next;
}
cleanup_rbuf (sk);
release_sock (sk);
+ PRINTK (("tcp_read: returing %d\n", copied));
if (copied == 0 && nonblock) return (-EAGAIN);
- PRINTK (("tcp_read returning %d\n", copied));
return (copied);
}
* Most of this is guesswork, so maybe it will work...
*/
+ /* if we've already sent a fin, return. */
+ if (sk->state == TCP_FIN_WAIT1 ||
+ sk->state == TCP_FIN_WAIT2)
+ return;
+
if (!(how & SEND_SHUTDOWN)) return;
sk->inuse = 1;
}
}
- print_sk (newsk);
buff=newsk->prot->wmalloc(newsk,MAX_SYN_SIZE,1, GFP_ATOMIC);
if (buff == NULL)
{
struct device *dev=NULL;
int tmp;
PRINTK (("tcp_close ((struct sock *)%X, %d)\n",sk, timeout));
- print_sk (sk);
sk->inuse = 1;
sk->keepopen = 1;
sk->shutdown = SHUTDOWN_MASK;
if (!sk->dead)
wake_up (sk->sleep);
-
/* we need to flush the recv. buffs. */
if (sk->rqueue != NULL)
struct sk_buff *skb2;
skb = sk->rqueue;
do {
- skb2=skb->next;
+ skb2=(struct sk_buff *)skb->next;
/* if there is some real unread data, send a reset. */
if (skb->len > 0 &&
after (skb->h.th->seq + skb->len + 1, sk->copied_seq))
sk->packets_out < sk->cong_window)
{
skb = sk->wfront;
- sk->wfront = skb->next;
+ sk->wfront = (struct sk_buff *)skb->next;
if (sk->wfront == NULL)
sk->wback = NULL;
skb->next = NULL;
sk->window_seq = ack + net16(th->window);
cli();
- for (skb = sk->send_head; skb != NULL; skb=skb->link3)
+ for (skb = sk->send_head; skb != NULL; skb= (struct sk_buff *)skb->link3)
{
if (after( skb->h.seq, sk->window_seq))
{
/* remove it from the send queue. */
if (skb2 == NULL)
{
- sk->send_head = skb->link3;
+ sk->send_head = (struct sk_buff *)skb->link3;
}
else
{
/* estimate the rtt. */
sk->rtt += ((jiffies - oskb->when) - sk->rtt)/2;
if (sk->rtt < 30) sk->rtt = 30;
- sk->send_head = oskb->link3;
+ sk->send_head = (struct sk_buff *)oskb->link3;
if (sk->send_head == NULL)
{
sk->send_tail = NULL;
if (oskb == oskb->next)
arp_q = NULL;
else
- arp_q = oskb->next;
+ arp_q = (struct sk_buff *)oskb->next;
}
}
oskb->magic = 0;
if (!sk->dead)
wake_up (sk->sleep);
- /* Lets send a probe once in a while. */
- sk->time_wait.len = TCP_PROBEWAIT_LEN;
- sk->timeout = TIME_KEEPOPEN;
- reset_timer((struct timer *)&sk->time_wait);
+ delete_timer((struct timer *)&sk->time_wait);
sk->timeout = 0;
}
else
{
+ if (sk->state != sk->keepopen)
+ {
+ sk->timeout = TIME_WRITE;
+ sk->time_wait.len = sk->rtt*2;
+ reset_timer ((struct timer *)&sk->time_wait);
+ }
if (sk->state == TCP_TIME_WAIT)
{
sk->time_wait.len = TCP_TIMEWAIT_LEN;
+ reset_timer ((struct timer *)&sk->time_wait);
sk->timeout = TIME_CLOSE;
}
- sk->timeout = TIME_WRITE;
- sk->time_wait.len = sk->rtt*2;
- reset_timer ((struct timer *)&sk->time_wait);
}
}
else
{
PRINTK (("tcp_ack closing socket - %X\n", sk));
- print_sk (sk);
tcp_send_ack (sk->send_seq, sk->acked_seq, sk, th, sk->daddr);
sk->shutdown = SHUTDOWN_MASK;
sk->state = TCP_CLOSE;
skb->len = len - (th->doff*4);
PRINTK(("tcp_data len = %d sk = %X:\n",skb->len, sk));
- print_sk(sk);
sk->bytes_rcv += skb->len;
sk->err = EPIPE;
sk->shutdown = SHUTDOWN_MASK;
PRINTK (("tcp_data: closing socket - %X\n", sk));
- print_sk (sk);
kfree_skb (skb, FREE_READ);
if (!sk->dead) wake_up (sk->sleep);
return (0);
in order, there will be no performance loss, and if they come
out of order we will be able to fit things in nicely. */
+ /* this should start at the last one, and then go around forwards. */
if (sk->rqueue == NULL)
{
PRINTK (("tcp_data: skb = %X:\n",skb));
- print_skb (skb);
sk->rqueue = skb;
skb->next = skb;
else
{
PRINTK (("tcp_data adding to chain sk = %X:\n",sk));
- print_sk (sk);
- for (skb1=sk->rqueue; ; skb1=skb1->prev)
+ for (skb1=sk->rqueue; ; skb1=(struct sk_buff *)skb1->prev)
{
PRINTK (("skb1=%X\n",skb1));
- print_skb(skb1);
PRINTK (("skb1->h.th->seq = %d\n", skb1->h.th->seq));
if (after ( th->seq+1, skb1->h.th->seq))
{
}
PRINTK (("skb = %X:\n",skb));
- print_skb (skb);
- PRINTK (("sk now equals:\n"));
- print_sk (sk);
}
sk->shutdown |= RCV_SHUTDOWN;
}
- for (skb2=skb->next; skb2 != sk->rqueue->next; skb2=skb2->next)
+ for (skb2=(struct sk_buff *)skb->next;
+ skb2 !=(struct sk_buff *) sk->rqueue->next;
+ skb2=(struct sk_buff *)skb2->next)
{
if (before(skb2->h.th->seq, sk->acked_seq+1))
{
&& sk->rcv_ack_seq == sk->send_seq)
{
PRINTK (("tcp_data: entering last_ack state sk = %X\n", sk));
- print_sk (sk);
+
tcp_send_ack (sk->send_seq, sk->acked_seq, sk, th, saddr);
sk->shutdown = SHUTDOWN_MASK;
sk->state = TCP_LAST_ACK;
return (0);
}
- sk->urg++;
-
if (!sk->urg)
{
/* so if we get more urgent data, we don't
signal the user again. */
- if (sk->proc == 0) return (0);
- if (sk->proc > 0)
+ if (sk->proc != 0)
{
- kill_proc (sk->proc, SIGURG, 1);
- }
- else
- {
- kill_pg (-sk->proc, SIGURG, 1);
+ if (sk->proc > 0)
+ {
+ kill_proc (sk->proc, SIGURG, 1);
+ }
+ else
+ {
+ kill_pg (-sk->proc, SIGURG, 1);
+ }
}
- }
+ }
+ sk->urg++;
return (0);
}
case TCP_ESTABLISHED:
sk->fin_seq = th->seq+1; /* Contains the one that needs to be acked */
sk->state = TCP_CLOSE_WAIT;
+ if (th->rst) sk->shutdown = SHUTDOWN_MASK;
break;
case TCP_CLOSE_WAIT:
struct sk_buff *skb;
PRINTK (("tcp_accept(sk=%X, flags=%X)\n", sk, flags));
- print_sk(sk);
/* we need to make sure that this socket is listening, and that
it has something pending. */
sk->prot->queue_xmit(sk, dev, buff, 0);
sk->time_wait.len = TCP_CONNECT_TIME;
+ sk->rtt = TCP_CONNECT_TIME;
reset_timer ((struct timer *)&sk->time_wait);
sk->retransmits = TCP_RETR2 - TCP_SYN_RETRIES;
release_sock (sk);
if (sk)
{
PRINTK (("sk = %X:\n",sk));
- print_sk (sk);
}
if (!redo)
return (0);
}
}
+#if 0
if (opt && (opt->security != 0 || opt->compartment != 0 || th->syn))
{
sk->err = ECONNRESET;
release_sock(sk);
return (0);
}
-
+#endif
if (th->ack)
{
if(!tcp_ack (sk, th, saddr))
release_sock(sk);
return (0);
}
-/* if (opt->security != 0 || opt->compartment != 0 )
+#if 0
+ if (opt->security != 0 || opt->compartment != 0 )
{
sk->err = ECONNRESET;
sk->state = TCP_CLOSE;
+ sk->shutdown = SHUTDOWN_MASK;
tcp_reset (daddr, saddr, th, sk->prot, opt, dev);
if (!sk->dead)
{
release_sock(sk);
return (0);
} */
-
+#endif
if (!th->ack)
{
if (th->syn)
tcp_shutdown,
128,
0,
- {NULL,}
+ {NULL,},
+ "TCP"
};
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: tcp.h,v 0.8.4.6 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: tcp.h,v 0.8.4.7 1993/01/22 22:58:08 bir7 Exp $ */
/* $Log: tcp.h,v $
+ * Revision 0.8.4.7 1993/01/22 22:58:08 bir7
+ * Check in for merge with previous .99 pl 4.
+ *
* Revision 0.8.4.6 1992/12/12 19:25:04 bir7
* Fixed anti-memory Leak in shutdown.
*
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: timer.c,v 0.8.4.5 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: timer.c,v 0.8.4.8 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: timer.c,v $
+ * Revision 0.8.4.8 1993/01/23 18:00:11 bir7
+ * added volatile keyword.
+ *
+ * Revision 0.8.4.7 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
+ * Revision 0.8.4.6 1993/01/22 22:58:08 bir7
+ * Check in for merge with previous .99 pl 4.
+ *
* Revision 0.8.4.5 1992/12/12 19:25:04 bir7
* cleaned up Log messages.
*
#define PRINTK(x) /**/
#endif
-static struct timer *timer_base=NULL;
+static volatile struct timer *timer_base=NULL;
unsigned long seq_offset;
void
sti();
return;
}
- for (tm = timer_base;tm->next != NULL ;tm=tm->next)
+ for (tm = (struct timer *)timer_base;
+ tm->next != NULL ;
+ tm=(struct timer *)tm->next)
{
if (tm->next == t)
{
sti();
return;
}
- for (tm = timer_base; ; tm=tm->next)
+ for (tm = (struct timer *)timer_base; ; tm=(struct timer *)tm->next)
{
if (tm->next == NULL || before (t->when,tm->next->when))
{
{
sk->time_wait.len = TCP_TIMEOUT_LEN;
sk->timeout = TIME_KEEPOPEN;
- reset_timer (timer_base);
+ reset_timer ((struct timer *)timer_base);
}
else
{
sk->timeout = 0;
- delete_timer(timer_base);
+ delete_timer((struct timer *)timer_base);
}
/* always see if we need to send an ack. */
socket to be freed. We need to
print an error message. */
PRINTK (("possible memory leak. sk = %X\n", sk));
- print_sk (sk);
reset_timer ((struct timer *)&sk->time_wait);
sk->inuse = 0;
break;
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: timer.h,v 0.8.4.1 1992/11/10 00:17:18 bir7 Exp $ */
+/* $Id: timer.h,v 0.8.4.2 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: timer.h,v $
+ * Revision 0.8.4.2 1993/01/23 18:00:11 bir7
+ * added volatile keyword.
+ *
* Revision 0.8.4.1 1992/11/10 00:17:18 bir7
* version change only.
*
* Revision 0.8.3.2 1992/11/10 00:14:47 bir7
* Changed malloc to kmalloc and added $i\bId$ and $Log: timer.h,v $
+ * Revision 0.8.4.2 1993/01/23 18:00:11 bir7
+ * added volatile keyword.
+ *
* Revision 0.8.4.1 1992/11/10 00:17:18 bir7
* version change only.
*.
unsigned long len;
volatile struct sock *sk;
unsigned long when;
- struct timer *next;
+ volatile struct timer *next;
};
The Author may be reached as bir7@leland.stanford.edu or
C/O Department of Mathematics; Stanford University; Stanford, CA 94305
*/
-/* $Id: udp.c,v 0.8.4.9 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: udp.c,v 0.8.4.12 1993/01/26 22:04:00 bir7 Exp $ */
/* $Log: udp.c,v $
+ * Revision 0.8.4.12 1993/01/26 22:04:00 bir7
+ * Added support for proc fs.
+ *
+ * Revision 0.8.4.11 1993/01/23 18:00:11 bir7
+ * added volatile keyword.
+ *
+ * Revision 0.8.4.10 1993/01/22 23:21:38 bir7
+ * Merged with 99 pl4
+ *
* Revision 0.8.4.9 1992/12/12 19:25:04 bir7
* cleaned up Log messages.
*
if (skb == NULL)
{
- printk ("udp_sendto: write buffer full?\n");
- print_sk(sk);
tmp = sk->wmem_alloc;
release_sock (sk);
if (copied) return (copied);
return (-ERESTARTSYS);
}
}
+ sk->inuse = 1;
sti();
}
skb = sk->rqueue;
}
else
{
- sk->rqueue = sk->rqueue ->next;
+ sk->rqueue = (struct sk_buff *)sk->rqueue ->next;
skb->prev->next = skb->next;
skb->next->prev = skb->prev;
}
/* At this point we should print the thing out. */
PRINTK (("<< \n"));
- print_sk (sk);
/* now add it to the data chain and wake things up. */
if (sk->rqueue == NULL)
NULL,
128,
0,
- {NULL,}
+ {NULL,},
+ "UDP"
};
/* Note: My driver was full of bugs. Basically if it works, credit
Bob Harris. If it's broken blame me. -RAB */
-/* $Id: we.c,v 0.8.4.8 1992/12/12 19:25:04 bir7 Exp $ */
+/* $Id: we.c,v 0.8.4.10 1993/01/23 18:00:11 bir7 Exp $ */
/* $Log: we.c,v $
+ * Revision 0.8.4.10 1993/01/23 18:00:11 bir7
+ * Added volatile keyword and converted entry points.
+ *
+ * Revision 0.8.4.9 1993/01/22 22:58:08 bir7
+ * Check in for merge with previous .99 pl 4.
+ *
* Revision 0.8.4.8 1992/12/12 19:25:04 bir7
* cleaned up Log messages.
*
#include <errno.h>
#include <linux/fcntl.h>
#include <netinet/in.h>
+#include <linux/interrupt.h>
#include "dev.h"
#include "eth.h"
#include "wereg.h"
static unsigned char interrupt_mask;
-/* format of status byte.
- bit
- 0 start
- 1 open
- 2 transmitter in use */
-
-#define START 1
-#define OPEN 2
-#define TRS_BUSY 0x400
-#define IN_INT 8
-
-/* We need to get rid of all these statics and move them into the
- device structure that way we can have more than one wd8003 board
- in the system at once. */
-
-static volatile unsigned int status;
static struct enet_statistics stats; /* Statistics collection */
static unsigned char max_pages; /* Board memory/256 */
outb_p(cmd, WD_COMM);
outb_p(interrupt_mask,WD_IMR);
sti();
- status |= START;
+ dev->start = 1;
}
int
cmd|= 4<<CRDMA_SHIFT;
outb_p(cmd, WD_COMM);
outb_p(WD_RCONFIG,WD_RCC);
- status = OPEN;
wd_start(dev);
return (0);
}
int len;
cli();
- if (status & TRS_BUSY)
+ if (dev->tbusy)
{
/* put in a time out. */
if (jiffies - dev->trans_start < 30)
printk ("wd8003 transmit timed out. \n");
}
- status |= TRS_BUSY;
+ dev->tbusy = 1;
if (skb == NULL)
{
arp_queue (skb);
}
cli (); /* arp_queue turns them back on. */
- status &= ~TRS_BUSY;
+ dev->tbusy = 0;
sti();
return (0);
}
outb_p(cmd, WD_COMM);
interrupt_mask |= TRANS_MASK;
- if (!(status & IN_INT))
+ if (!(dev->interrupt))
outb (interrupt_mask, WD_IMR);
outb_p(len&0xff,WD_TB0);
stats.rx_packets++; /* count all receives */
done = wdget( ring, dev ); /* get the packet */
- /* see if we need to process this packet again. */
- if (done == -1) continue;
-
/* Calculate next packet location */
pkt = ring->next;
static void
wd_trs( struct device *dev )
{
- unsigned char cmd, errors;
- int len;
+ unsigned char errors;
if( wd_debug )
printk("\nwd_trs() - TX complete, status = x%x", inb_p(TSR));
stats.tx_packets++;
tx_aborted = 0;
}
+ dev->tbusy = 0;
+ mark_bh (INET_BH);
+#if 0
/* attempt to start a new transmission. */
len = dev_tint( (unsigned char *)dev->mem_start, dev );
if( len != 0 ){
}
else
{
- status &= ~TRS_BUSY;
+ dev->tbusy = 0
interrupt_mask &= ~TRANS_MASK;
return;
}
- }
+#endif
+ }
else{ /* TX error occurred! - H/W will reschedule */
if( errors & CRS ){
stats.tx_carrier_errors++;
if (wd_debug)
printk("\nwd8013 - interrupt isr = x%x", inb_p( ISR ) );
- status |= IN_INT;
+ dev->interrupt = 1;
do{ /* find out who called */
sti();
cli();
} while( inb_p( ISR ) != 0 );
- status &= ~IN_INT;
+ dev->interrupt = 0;
}
printk ("Warning WD8013 board not found at i/o = %X.\n",dev->base_addr);
/* make sure no one can attempt to open the device. */
- status = OPEN;
return (1);
}
printk("wd8013");
if( (i - dev->mem_start) > 4096 )
break;
else
- status = OPEN;
+ return (1);
}
}
/* Calculate how many pages of memory on board */
((char *)&stats)[i] = 0;
printk ("\n");
- status = 0;
+ dev->tbusy = 0;
+ dev->interrupt = 0;
if (irqaction (dev->irq, &wd8003_sigaction))
{
#include <linux/un.h>
#include <linux/fcntl.h>
#include <linux/termios.h>
-
+#include <linux/mm.h>
+#include <linux/config.h>
#include <asm/system.h>
#include <asm/segment.h>
unix_proto_shutdown,
unix_proto_setsockopt,
unix_proto_getsockopt,
- NULL /* unix_proto_fcntl. */
+ NULL, /* unix_proto_fcntl. */
};
+static inline int
+min (int a, int b)
+{
+ if (a < b) return (a);
+ return (b);
+}
+
#ifdef SOCK_DEBUG
void
sockaddr_un_printk(struct sockaddr_un *sockun, int sockaddr_len)
sockaddr_len + UN_PATH_OFFSET);
}
}
-#endif
+#endif /* SOCK_DEBUG */
/* don't have to do anything. */
static int