Commit c7ef1726 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.21

parent f9290a20
......@@ -194,7 +194,7 @@ S: United Kingdom
N: Remy Card
E: Remy.Card@masi.ibp.fr
E: Remy.Card@linux.org
D: Extended file system designer and developer
D: Extended file system [defunct] designer and developer
D: Second extended file system designer and developer
S: Institut Blaise Pascal
S: 4 Place Jussieu
......@@ -394,6 +394,14 @@ D: Author: Future Domain TMC-16x0 SCSI driver
D: Debugging: SCSI code; Cyclades serial driver; APM driver
D: Debugging: XFree86 Mach 32 server, accelerated server code
N: Jnos Farkas
E: chexum@shadow.banki.hu
D: romfs, various (mostly networking) fixes
P: 1024/F81FB2E1 41 B7 E4 E6 3E D4 A6 71 6D 9C F3 9F F2 BF DF 6E
S: Madarsz Viktor utca 25
S: 1131 Budapest
S: Hungary
N: Jrgen Fischer
E: fischer@et-inf.fho-emden.de (=?iso-8859-1?q?J=FCrgen?= Fischer)
D: Author of Adaptec AHA-152x scsi driver
......@@ -1562,7 +1570,7 @@ S: The Netherlands
N: Frank Xia
E: qx@math.columbia.edu
D: Xiafs filesystem
D: Xiafs filesystem [defunct]
S: 542 West 112th Street, 5N
S: New York, New York 10025
S: USA
......
......@@ -19,7 +19,7 @@ you don't need to bother doing so in the form of a diff, as this is
generated by texinfo so a diff is useless anyway (though I can
incorporate one by hand if you insist upon sending it that way ;-).
Last updated: December 13, 1996.
Last updated: January 9, 1997.
Current Author: Chris Ricker (gt1355b@prism.gatech.edu).
Current Minimal Requirements
......@@ -28,7 +28,7 @@ Current Minimal Requirements
Upgrade to at *least* these software revisions before thinking you've
encountered a bug!
- Kernel modules 2.1.13
- Kernel modules modutils-970104
- Gnu C 2.7.2.1
- Binutils 2.7.0.3
- Linux C Library 5.4.17
......@@ -36,7 +36,6 @@ encountered a bug!
- Linux C++ Library 2.7.2.1
- Procps 1.01
- SysVinit 2.69
- Sysklogd 1.3-3
- Mount 2.5p
- Net-tools 1.32-alpha
- Kbd 0.91
......@@ -75,7 +74,7 @@ widely available, so if you need to upgrade, use it.
Modules
=======
You need to upgrade to modules-2.1.13 for kernels 2.1.8 and later.
You need to upgrade to modutils-970104 for kernels 2.1.8 and later.
Gnu C
=====
......@@ -89,9 +88,20 @@ feel free to upgrade if you want the gcc bug fixes).
Networking Changes
==================
Please read Documentation/networking/routing.txt. People wanting to use
all the new routing table features such as OSPF classes should also read
Documentation/networking/policy-routing.txt.
Please read Documentation/networking/routing.txt and
Documentation/networking/policy-routing.txt for more information about
changes in routing code. OSPF classes have been added, and interface
routes are generated automatically.
If for some reason you need to override this automatic default
routing, you have to specify the complete route specification (netmask,
device, etc.) for the kernel to accept it. Consequently, you need to
either remove interface routes from your init scripts or add missing
information to them if you need to replace the automatic routes.
Also note that some routes, such as loopback routes, do not show up
in some standard tools. Check in /proc/net/rt_local to verify their
presence.
SysVinit
========
......@@ -99,6 +109,18 @@ SysVinit
To avoid an oops while shutting down or rebooting the computer,
upgrade to SysVinit 2.69.
RPM
===
If you run RedHat Linux or any other distribution that uses RPM, you
need to upgrade RPM to version 2.2.7 or later.
DOSEMU
======
A new "stable" version of DOSEMU is available for 2.1.x kernels.
Upgrade to 0.64.2 or later.
How to know the version of the installed programs
*************************************************
......@@ -109,11 +131,13 @@ requires that you be logged in as root.
Gnu C: gcc -v or gcc --version
Libc: ls -l /lib/libc.so.*
Libc++: ls -l /usr/lib/libg++.so.*
Ld.so: ldd-v
Binutils: ld -v
modules: insmod -V
procps: ps --version
SysVinit: cat /proc/`cat /var/run/syslog.pid`/environ|strings|awk '$1 ~
SysVinit: cat /proc/`cat /var/run/klogd.pid`/environ|strings|awk '$1 ~
/INIT_VERSION/ {print}'
RPM: rpm --version
Where to get the files
**********************
......@@ -168,9 +192,8 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/ld.so-1.8.5.tar.gz
Modules utilities
=================
The 2.1.13 release:
ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.1/modules-2.1.13.tar.gz
ftp://sunsite.unc.edu/pub/Linux/kernel/v2.1/modules-2.1.13.tar.gz
The 970104 release:
ftp://ftp.redhat.com/pub/alphabits/modutils-970104.tar.gz
Procps utilities
================
......@@ -186,6 +209,26 @@ The 2.69 release (when it gets there):
ftp://tsx-11.mit.edu/pub/linux/sources/sbin/sysvinit-2.69.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/Daemons/init/sysvinit-2.69.tar.gz
RPM utilities
=============
The 2.2.7 release for Intel:
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/i386/rpm-2.2.7-1.i386.rpm
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/i386/rpm-devel-2.2.7-1.i386.rpm
The 2.2.7 release for Alpha:
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/axp/rpm-2.2.7-1.axp.rpm
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/axp/rpm-devel-2.2.7-1.axp.rpm
The 2.2.7 release for SPARC:
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/i386/rpm-2.2.7-1.sparc.rpm
ftp://ftp.redhat.com/pub/redhat/redhat-4.0/updates/i386/rpm-devel-2.2.7-1.sparc.rpm
DOSEMU
======
The 0.64.2 release:
ftp://tsx-11.mit.edu/pub/linux/ALPHA/dosemu/dosemu0.64.2.tgz
ftp://sunsite.unc.edu/pub/Linux/system/Emulators/dosemu0.64.2.tgz
Other Info
==========
......
......@@ -3108,13 +3108,6 @@ CONFIG_MINIX_FS
Documentation/modules.txt. Note that the filesystem of your root
partition cannot be compiled as a module.
Extended fs support
CONFIG_EXT_FS
This is the old Linux filesystem (= method to organize files on a
harddisk partition or a floppy disk) and not in use anymore. It
enlarges your kernel by about 25 kB. Let's all kill this beast. Say
N.
Second extended fs support
CONFIG_EXT2_FS
This is the de facto standard Linux filesystem (= method to organize
......@@ -3138,16 +3131,6 @@ CONFIG_EXT2_FS
sunsite.unc.edu:/pub/Linux/docs/faqs. This option will enlarge your
kernel by about 41 kB. Default is Y.
xiafs filesystem support
CONFIG_XIA_FS
This is an old filesystem (= method to organize files on a harddisk
partition or a floppy disk) and not in use anymore. This option
would enlarge your kernel by about 28 kB. Let's all kill this beast:
say N. If you want to compile this as a module ( = code which can
be inserted in and removed from the running kernel whenever you
want), say M here and read Documentation/modules.txt. Note that the
filesystem of your root partition cannot be compiled as a module.
fat fs support
CONFIG_FAT_FS
If you want to use one of the FAT-based filesystems (the MS-DOS,
......@@ -3450,6 +3433,14 @@ CONFIG_AFFS_FS
module, say M here and read Documentation/modules.txt.
If unsure, say N.
ROMFS filesystem support (EXPERIMENTAL)
CONFIG_ROMFS_FS
This is a special file system intended for installation disks or
otherwise prebuilt medias. It has very low overhead and low memory
requirements. However, it's read-only (one particular reason of the
smallness), so you need extra programs to prepare disks in this
format. If you are not sure, just say N, you don't need it.
Standard/generic serial support
CONFIG_SERIAL
This selects whether you want to include the driver for the standard
......@@ -4587,7 +4578,7 @@ CONFIG_SUN_OPENPROMIO
# LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA
# LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech
# LocalWords: Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs
# LocalWords: LMS OPTCD Sanyo SJCD minix faqs xiafs XIA msdos harddrive mtools
# LocalWords: LMS OPTCD Sanyo SJCD minix faqs msdos harddrive mtools
# LocalWords: std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI
# LocalWords: hpfs SYSV SCO intel iBCS Wyse WordPerfect tsx mit unixes sysv NR
# LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST
......
......@@ -6,6 +6,8 @@ hpfs.txt
- info and mount options for the OS/2 HPFS.
ncpfs.txt
- info on Novell Netware(tm) filesystem using NCP protocol.
romfs.txt
- Description of the ROMFS filesystem.
smbfs.txt
- info on using filesystems with the SMB protocol (Win 3.11, Win NT)
sysv-fs.txt
......
ROMFS - ROM FILE SYSTEM
This is a quite dumb, read only filesystem, mainly for initial ram
disks of installation disks. It has grown up by the need of having
modules linked at boot time. Using this filesystem, you get a very
similar feature, and even the possibility of a small kernel, with a
file system which doesn't take up useful memory from the router
functions in the basement of your office.
For comparison, both the older minix and xiafs filesystems (compiled
as module) need more than 20000 bytes, while romfs is less than a
page, about 4000 bytes (assuming ix86 code). Under the same
conditions, the msdos filesystem would need about 30K (and does not
support device nodes or symlinks), while the nfs module with nfsroot
is about 57K. Furthermore, as a bit unfair comparison, an actual
rescue disk used up 3202 blocks with ext2, while with romfs, it needed
3079 blocks.
To create such a file system, you'll need a user program named
genromfs. It is (or will be shortly) available via ftp on
sunsite.unc.edu and its mirrors, in the /pub/Linux/system/Filesystems/
directory.
As the name suggests, romfs could be also used (space-efficiently) on
various read-only medias, like (E)EPROM disks if someone will have the
motivation.. :)
However, the main purpose of romfs is to have a very small kernel,
which has only this filesystem linked in, and then can load any module
later, with the current module utilities. It can also be used to run
some program to decide if you need SCSI devices, and even IDE or
floppy drives can be loaded later if you use the "initrd" -- initial
ram disk -- feature of the kernel. This would not be really news
flash, but with romfs, you can even spare off your ext2 or minix or
maybe even affs filesystem until you really know that you need it.
For example, a distribution boot disk can contain only the cd disk
drivers (and possibly the SCSI drivers), and the ISO filesystem
module. The kernel can be small enough, since it doesn't have other
filesystems, like the quite large ext2fs module, which can then be
loaded off the CD at a later stage of the installation. Another use
would be for a recovery disk, when you are reinstalling a workstation
from the network, and you will have all the tools/modules available
from a nearby server, so you don't want to carry two disks for this
purpose, just because it won't fit into ext2.
romfs operates on block devices as you can expect, and the underlying
structure is very simple. Every accessible structure begins on 16
byte boundaries for fast access. The minimum space a file will take
is 32 bytes (this is an empty file, with a less than 16 character
name). The maximum overhead for any non-empty file is the header, and
the 16 byte padding for the name and the contents, also 16+14+15 = 45
bytes. This is quite rare however, since most file names are longer
than 3 bytes, and shorter than 15 bytes.
The layout of the filesystem is the following:
offset content
+---+---+---+---+
0 | - | r | o | m | \
+---+---+---+---+ The ASCII representation of those bytes
4 | 1 | f | s | - | / (i.e. "-rom1fs-"
+---+---+---+---+
8 | full size | The number of accessible bytes in this fs.
+---+---+---+---+
12 | checksum | The checksum of the FIRST 512 BYTES.
+---+---+---+---+
16 | volume name | The zero terminated name of the volume,
: : padded to 16 byte boundary.
+---+---+---+---+
xx | file |
: headers :
Every multi byte value (32 bit words, I'll use the longwords term from
now on) must be in big endian order.
The first eight bytes identify the filesystem, even for the casual
reader. After that in the 3rd longword, it contains the number of
bytes accessible from the start of this filesystem. The 4th longword
is the checksum of the first 512 bytes (or the number of bytes
accessible, whichever is smallest). The applied algorithm is the same
as in the AFFS filesystem, namely a simple sum of the longwords
(assuming bigendian quantities again). For details, please consult
the source. This algorithm was chosen because although it's not quite
reliable, it does not require any tables, and it is very simple.
The following bytes are now part of the file system; each file header
must begin on a 16 byte boundary.
offset content
+---+---+---+---+
0 | next filehdr|X| The offset of the next file header
+---+---+---+---+ (zero if no more files)
4 | spec.info | Info for directories/hard links/devices
+---+---+---+---+
8 | size | The size of this file in bytes
+---+---+---+---+
12 | checksum | Covering the meta data, including the file
+---+---+---+---+ name, and padding
16 | file name | The zero terminated name of the file,
: : padded to 16 byte boundary.
+---+---+---+---+
xx | file data |
: :
Since the file headers begin always at a 16 byte boundary, the lowest
4 bits would be always zero in the next filehdr pointer. These four
bits are used for the mode information. Bits 0..2 specify the type of
the file; while bit 4 shows if the file is executable or not. The
permissions are assumed to be world readable, if this bit is not set,
and world executable if it is; except the character and block devices,
they are readable only for the owner. The owner of every file is user
and group 0, this should never be a problem for the intended use. The
mapping of the 8 possible values to file types is the following:
mapping spec.info means
0 hard link link destination [file header]
1 directory first file's header
2 regular file unused, must be zero [MBZ]
3 symbolic link unused, MBZ (file data is the link content)
4 block device 16/16 bits major/minor number
5 char device - " -
6 socket unused, MBZ
7 fifo unused, MBZ
Note that hard links are specifically marked in this filesystem, but
they will behave as you can expect (i.e. share the inode number).
Note also that your responsibility to not create hard link loops, and
creating all the . and .. links for directories. This is normally
done correctly by the genromfs program. Please refrain from using the
executable bits on the socket and fifo special files, they may have
other uses in the future. Additionally, please remember that only
regular files, and symlinks are supposed to have a nonzero size field;
they contain the number of bytes available directly after the (padded)
file name.
Another thing to note is that romfs works on file headers and data
aligned to 16 byte boundaries, but most hardware devices and the block
device drivers are unable to cope with smaller than block-sized data.
To overcome this limitation, the whole size of the file system must be
padded to an 1024 byte boundary.
If you have any problems or suggestions concerning this file system,
please contact me. However, think twice before wanting me to add
features and code, because the primary advantage of this file system
is the small code.
Have fun,
Janos Farkas <chexum@shadow.banki.hu>
......@@ -49,7 +49,7 @@ the official kernel sources, you will certainly like this option...
Here is a sample of the available modules included in the kernel sources:
Most filesystems: minix, xiafs, msdos, umsdos, sysv, isofs, hpfs,
Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs,
smbfs, nfs
Mid-level SCSI support (required by top and low level scsi drivers).
......
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 20
SUBLEVEL = 21
ARCH = i386
......@@ -39,6 +39,7 @@ AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip
MAKE =make
GENKSYMS=/sbin/genksyms
all: do-it-all
......@@ -87,7 +88,7 @@ SVGA_MODE= -DSVGA_MODE=NORMAL_VGA
# standard CFLAGS
#
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
ifdef CONFIG_CPP
CFLAGS := $(CFLAGS) -x c++
......
......@@ -67,7 +67,7 @@ ifneq "$(strip $(ALL_O))" ""
else
$(AR) rcs $@
endif
endif
endif # O_TARGET
#
# Rule to compile a set of .o files into one .a file
......@@ -140,57 +140,59 @@ script:
# Separate the object into "normal" objects and "exporting" objects
# Exporting objects are: all objects that define symbol tables
#
ifdef CONFIG_MODVERSIONS
ifdef CONFIG_MODULES
SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS)
ifdef CONFIG_MODVERSIONS
ifneq "$(strip $(SYMTAB_OBJS))" ""
MODINCL = $(TOPDIR)/include/linux/modules
# The -w option (enable warnings) for /bin/genksyms will return here in 2.1
# The -w option (enable warnings) for genksyms will return here in 2.1
$(MODINCL)/%.ver: %.c
@if [ ! -x /sbin/genksyms ]; then echo "Please read: Documentation/modules.txt"; fi
$(CC) $(CFLAGS) -E -D__GENKSYMS__ $< | /sbin/genksyms $(MODINCL)
$(CC) $(CFLAGS) -E -D__GENKSYMS__ $<\
| $(GENKSYMS) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
mv $@.tmp $@
$(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
$(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver))
@echo updating $(TOPDIR)/include/linux/modversions.h
@(echo "#ifdef MODVERSIONS";\
echo "#undef CONFIG_MODVERSIONS";\
echo "#define CONFIG_MODVERSIONS";\
echo "#ifndef _set_ver";\
echo "#define _set_ver(sym,vers) sym ## _R ## vers";\
echo "#endif";\
cd $(TOPDIR)/include/linux/modules; for f in *.ver;\
do echo "#include <linux/modules/$${f}>"; done; \
echo "#undef CONFIG_MODVERSIONS";\
echo "#endif") \
> $(TOPDIR)/include/linux/modversions.h
$(MX_OBJS): $(TOPDIR)/include/linux/modversions.h
$(CC) $(CFLAGS) -DEXPORT_SYMTAB -c $(@:.o=.c)
$(LX_OBJS) $(OX_OBJS): $(TOPDIR)/include/linux/modversions.h
$(CC) $(CFLAGS) -DMODVERSIONS -DEXPORT_SYMTAB -c $(@:.o=.c)
@(echo "#ifndef _LINUX_MODVERSIONS_H";\
echo "#define _LINUX_MODVERSIONS_H"; \
echo "#include <linux/modsetver.h>"; \
cd $(TOPDIR)/include/linux/modules; \
for f in *.ver; do \
if [ -f $$f ]; then echo "#include <linux/modules/$${f}>"; fi; \
done; \
echo "#endif"; \
) > $@
dep fastdep: $(TOPDIR)/include/linux/modversions.h
endif
endif # SYMTAB_OBJS
$(M_OBJS): $(TOPDIR)/include/linux/modversions.h
ifdef MAKING_MODULES
$(O_OBJS) $(L_OBJS): $(TOPDIR)/include/linux/modversions.h
endif
# This is needed to ensure proper dependency for multipart modules such as
# fs/ext.o. (Otherwise, not all subobjects will be recompiled when
# version information changes.)
else
$(TOPDIR)/include/linux/modversions.h:
@touch $(TOPDIR)/include/linux/modversions.h
@echo "#include <linux/modsetver.h>" > $@
endif # CONFIG_MODVERSIONS
ifneq "$(strip $(SYMTAB_OBJS))" ""
$(SYMTAB_OBJS): $(TOPDIR)/include/linux/modversions.h
$(CC) $(CFLAGS) -DEXPORT_SYMTAB -c $(@:.o=.c)
endif
endif # CONFIG_MODULES
#
# include dependency files they exist
#
......
......@@ -183,9 +183,7 @@ CONFIG_DE4X5=y
#
# CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
......
......@@ -16,7 +16,8 @@ all: kernel.o head.o
O_TARGET := kernel.o
O_OBJS := entry.o traps.o process.o osf_sys.o irq.o signal.o setup.o \
bios32.o ptrace.o time.o apecs.o lca.o cia.o ksyms.o
bios32.o ptrace.o time.o apecs.o lca.o cia.o
OX_OBJS := alpha_ksyms.o
all: kernel.o head.o
......
......@@ -5,7 +5,7 @@
* modules.
*/
#include <linux/string.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/user.h>
......@@ -14,8 +14,12 @@
#include <asm/hwrpb.h>
#include <asm/uaccess.h>
extern void bcopy (const char *src, char *dst, int len);
extern struct hwrpb_struct *hwrpb;
extern long __kernel_thread(unsigned long, int (*)(void *), void *);
extern void dump_thread(struct pt_regs *, struct user *);
extern int dump_fpu(struct pt_regs *, elf_fpregset_t *);
/* these are C runtime functions with special calling conventions: */
extern void __divl (void);
......@@ -27,9 +31,6 @@ extern void __remlu (void);
extern void __divqu (void);
extern void __remqu (void);
extern void dump_thread(struct pt_regs *, struct user *);
extern int dump_fpu(struct pt_regs *, elf_fpregset_t *);
/* platform dependent support */
EXPORT_SYMBOL(_inb);
......@@ -70,6 +71,7 @@ EXPORT_SYMBOL(dump_thread);
EXPORT_SYMBOL(dump_fpu);
EXPORT_SYMBOL(hwrpb);
EXPORT_SYMBOL(wrusp);
EXPORT_SYMBOL(__kernel_thread);
/*
* The following are specially called from the uaccess assembly stubs.
......
......@@ -236,7 +236,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n"
" .gprel32 2b\n"
" lda %2,3b-2b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0));
if (error)
......@@ -257,7 +257,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n"
" .gprel32 2b\n"
" lda %2,3b-2b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0));
if (error)
......@@ -277,7 +277,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n"
" .gprel32 2b\n"
" lda %2,3b-2b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0));
if (error)
......@@ -311,7 +311,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n"
" .gprel32 4b\n"
" lda $31,5b-4b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0));
......@@ -342,7 +342,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n"
" .gprel32 4b\n"
" lda $31,5b-4b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0));
......@@ -372,7 +372,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n"
" .gprel32 4b\n"
" lda $31,5b-4b(%0)\n"
".text"
".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0));
......
......@@ -31,7 +31,7 @@
.section __ex_table,"a"; \
.gprel32 99b; \
lda $31, $exception-99b($31); \
.text
.previous
.set noat
.set noreorder
......
......@@ -33,7 +33,7 @@
.section __ex_table,"a"; \
.gprel32 99b; \
lda $31, $exit-99b($31); \
.text
.previous
.set noat
.align 3
......
......@@ -14,7 +14,7 @@
.section __ex_table,"a"; \
.gprel32 99b; \
lda v0, $exception-99b(zero); \
.text
.previous
.set noreorder
......
......@@ -21,7 +21,7 @@
.section __ex_table,"a"; \
.gprel32 99b; \
lda $31, $exception-99b($0); \
.text
.previous
.set noat
......
......@@ -45,7 +45,7 @@ ZLINKFLAGS =-Ttext $(ZIMAGE_OFFSET) $(ZLDFLAGS)
BZLINKFLAGS =-Ttext $(BZIMAGE_OFFSET) $(ZLDFLAGS)
LINKFLAGS =-Ttext $(IMAGE_OFFSET) $(LDFLAGS)
CFLAGS := $(CFLAGS) -pipe
CFLAGS := $(CFLAGS) -pipe -fno-strength-reduce
ifdef CONFIG_M386
CFLAGS := $(CFLAGS) -m386 -DCPU=386
......
......@@ -136,9 +136,7 @@ CONFIG_EL3=y
#
# CONFIG_QUOTA is not set
CONFIG_MINIX_FS=y
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
......@@ -151,6 +149,7 @@ CONFIG_ISO9660_FS=y
# CONFIG_HPFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_UFS_FS is not set
#
......
......@@ -22,7 +22,8 @@ all: kernel.o head.o
O_TARGET := kernel.o
O_OBJS := process.o signal.o entry.o traps.o irq.o vm86.o bios32.o \
ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o ksyms.o
ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o
OX_OBJS := i386_ksyms.o
ifdef CONFIG_MCA
O_OBJS += mca.o
......
......@@ -284,8 +284,7 @@ void hard_reset_now (void)
if(!reboot_thru_bios) {
sti();
/* rebooting needs to touch the page at absolute addr 0 */
pg0[0] = 7;
*((unsigned short *)0x472) = reboot_mode;
*((unsigned short *)__va(0x472)) = reboot_mode;
for (;;) {
int i;
for (i=0; i<100; i++) {
......
......@@ -9,7 +9,8 @@
O_TARGET := amiga.o
O_OBJS := config.o amikeyb.o amiints.o cia.o \
chipram.o amisound.o amifb.o zorro.o ksyms.o
chipram.o amisound.o amifb.o zorro.o
OX_OBJS := amiga_ksyms.o
ifdef CONFIG_FB_CYBER
O_OBJS := $(O_OBJS) cyberfb.o
......
......@@ -9,6 +9,7 @@
O_TARGET := atari.o
O_OBJS := config.o atakeyb.o ataints.o \
stdma.o atasound.o joystick.o stram.o atafb.o ksyms.o
stdma.o atasound.o joystick.o stram.o atafb.o
OX_OBJS := atari_ksyms.o
include $(TOPDIR)/Rules.make
......@@ -149,9 +149,7 @@ CONFIG_ATARI_SCSI=y
#
# CONFIG_QUOTA is not set
CONFIG_MINIX_FS=y
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
......
......@@ -13,7 +13,8 @@
all: kernel.o head.o
O_TARGET := kernel.o
O_OBJS := entry.o process.o traps.o ints.o signal.o ptrace.o \
setup.o bios32.o sys_m68k.o console.o time.o ksyms.o
setup.o bios32.o sys_m68k.o console.o time.o
OX_OBJS := m68k_ksyms.o
head.o: head.S
......
......@@ -174,7 +174,7 @@ asmlinkage int do_sigreturn(unsigned long __unused)
if (context.sc_usp != fp+fsize)
current->flags &= ~PF_ONSIGSTK;
/* OK. Make room on the supervisor stack for the extra junk,
* if necessary.
*/
......@@ -200,7 +200,7 @@ asmlinkage int do_sigreturn(unsigned long __unused)
" .align 4\n"
" .long 2b,4b\n"
" .long 3b,4b\n"
".text"
".previous"
: /* no outputs, it doesn't ever return */
: "a" (sw), "d" (fsize), "d" (frame_offset/4-1),
"n" (frame_offset), "a" (fp)
......@@ -360,7 +360,7 @@ static inline void setup_frame (struct sigaction * sa, struct pt_regs *regs,
/*
* OK, we're invoking a handler
*/
*/
static inline void handle_signal(unsigned long signr, struct sigaction *sa,
unsigned long oldmask, struct pt_regs *regs)
{
......@@ -482,7 +482,7 @@ asmlinkage int do_signal(unsigned long oldmask, struct pt_regs *regs)
continue;
current->state = TASK_STOPPED;
current->exit_code = signr;
if (!(current->p_pptr->sig->action[SIGCHLD-1].sa_flags &
if (!(current->p_pptr->sig->action[SIGCHLD-1].sa_flags &
SA_NOCLDSTOP))
notify_parent(current);
schedule();
......
......@@ -241,7 +241,7 @@ csum_partial_copy_fromuser(const char *src, char *dst, int len, int sum)
".long 19b,7b\n"
".long 20b,7b\n"
".long 21b,7b\n"
".text"
".previous"
: "=d" (sum), "=d" (len), "=a" (src), "=a" (dst),
"=&d" (tmp1), "=&d" (tmp2)
: "0" (sum), "1" (len), "2" (src), "3" (dst)
......
......@@ -53,9 +53,7 @@ CONFIG_BLK_DEV_FD=y
# Filesystems
#
# CONFIG_MINIX_FS is not set
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
# CONFIG_MSDOS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_ISO9660_FS is not set
......
......@@ -167,9 +167,7 @@ CONFIG_MYRI_SBUS=m
#
CONFIG_QUOTA=y
CONFIG_MINIX_FS=m
CONFIG_EXT_FS=m
CONFIG_EXT2_FS=y
CONFIG_XIA_FS=m
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
......
......@@ -67,10 +67,8 @@ extern void dump_thread(struct pt_regs *, struct user *);
*/
#define EXPORT_SYMBOL_DOT(sym) \
extern int __sparc_dot_ ## sym (int) __asm__("." ## #sym); \
const struct module_symbol __export_dot_##sym \
__attribute__((section("__ksymtab"))) = \
{ (unsigned long) &__sparc_dot_ ## sym, "." ## #sym }
extern int __sparc_dot_ ## sym (int) __asm__("." #sym); \
__EXPORT_SYMBOL(__sparc_dot_ ## sym, "." #sym)
/* used by various drivers */
......
......@@ -779,10 +779,6 @@ sunos_mount(char *type, char *dir, int flags, void *data)
dev_fname = (char *) data;
} else if(strcmp(type, "minix") == 0) {
dev_fname = (char *) data;
} else if(strcmp(type, "ext") == 0) {
dev_fname = (char *) data;
} else if(strcmp(type, "xiafs") == 0) {
dev_fname = (char *) data;
} else if(strcmp(type, "nfs") == 0) {
return sunos_nfs_mount (dir, flags, data);
} else if(strcmp(type, "ufs") == 0) {
......
......@@ -202,11 +202,11 @@ __asm__ __volatile__ ( \
".word 14b, " #errh "\n\t" \
".word 15b, " #errh "\n\t" \
".word 16b, " #errh "\n\n\t" \
".text\n\t" \
".previous\n\t" \
: : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed) \
: "l1", "l2", "g7", "g1"); \
})
#define store_common(dst_addr, size, src_val, errh) ({ \
__asm__ __volatile__ ( \
"ld [%2], %%l1\n" \
......@@ -256,7 +256,7 @@ __asm__ __volatile__ ( \
".word 15b, " #errh "\n\t" \
".word 16b, " #errh "\n\t" \
".word 17b, " #errh "\n\n\t" \
".text\n\t" \
".previous\n\t" \
: : "r" (dst_addr), "r" (size), "r" (src_val) \
: "l1", "l2", "g7", "g1"); \
})
......@@ -307,7 +307,7 @@ void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn)
{
unsigned long g2 = regs->u_regs [UREG_G2];
unsigned long fixup = search_exception_table (regs->pc, &g2);
if (!fixup) {
unsigned long address = compute_effective_address(regs, insn);
if(address < PAGE_SIZE) {
......@@ -336,7 +336,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
printk("Unsupported unaligned load/store trap for kernel at <%08lx>.\n",
regs->pc);
unaligned_panic("Wheee. Kernel does fpu/atomic unaligned load/store.");
__asm__ __volatile__ ("\n"
"kernel_unaligned_trap_fault:\n\t"
"mov %0, %%o0\n\t"
......@@ -344,7 +344,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
" mov %1, %%o1\n\t"
: : "r" (regs), "r" (insn)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", "g1", "g2", "g3", "g4", "g5", "g7");
return;
} else {
unsigned long addr = compute_effective_address(regs, insn);
......@@ -369,7 +369,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)
#if 0 /* unsupported */
case both:
do_atomic(fetch_reg_addr(((insn>>25)&0x1f), regs),
(unsigned long *) addr,
(unsigned long *) addr,
kernel_unaligned_trap_fault);
break;
#endif
......@@ -477,7 +477,7 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
" mov %1, %%o1\n\t"
: : "r" (regs), "r" (insn)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", "g1", "g2", "g3", "g4", "g5", "g7");
return;
}
advance(regs);
......
......@@ -165,9 +165,7 @@ CONFIG_MYRI_SBUS=y
#
CONFIG_QUOTA=y
CONFIG_MINIX_FS=y
CONFIG_EXT_FS=y
CONFIG_EXT2_FS=y
CONFIG_XIA_FS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
......
......@@ -41,6 +41,7 @@
#include <linux/sched.h>
#include <linux/minix_fs.h>
#include <linux/ext2_fs.h>
#include <linux/romfs_fs.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/string.h>
......@@ -328,6 +329,7 @@ void cleanup_module(void)
* We currently check for the following magic numbers:
* minix
* ext2
* romfs
* gzip
*/
int
......@@ -336,6 +338,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
const int size = 512;
struct minix_super_block *minixsb;
struct ext2_super_block *ext2sb;
struct romfs_super_block *romfsb;
int nblocks = -1;
int max_blocks;
unsigned char *buf;
......@@ -346,6 +349,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
minixsb = (struct minix_super_block *) buf;
ext2sb = (struct ext2_super_block *) buf;
romfsb = (struct romfs_super_block *) buf;
memset(buf, 0xe5, size);
/*
......@@ -368,6 +372,16 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
goto done;
}
/* romfs is at block zero too */
if (romfsb->word0 == ROMSB_WORD0 &&
romfsb->word1 == ROMSB_WORD1) {
printk(KERN_NOTICE
"RAMDISK: Romfs filesystem found at block %d\n",
start_block);
nblocks = (ntohl(romfsb->size)+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
goto done;
}
/*
* Read block 1 to test for minix and ext2 superblock
*/
......@@ -396,6 +410,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
nblocks = ext2sb->s_blocks_count;
goto done;
}
printk(KERN_NOTICE
"RAMDISK: Couldn't find valid ramdisk image starting at %d.\n",
start_block);
......
......@@ -25,6 +25,7 @@
* int rs_open(struct tty_struct * tty, struct file * filp)
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/signal.h>
......@@ -35,7 +36,6 @@
#include <linux/tty_flip.h>
#include <linux/serial.h>
#include <linux/serial_reg.h>
#include <linux/config.h>
#include <linux/major.h>
#include <linux/string.h>
#include <linux/fcntl.h>
......@@ -2931,6 +2931,11 @@ static void autoconfig(struct serial_state * state)
}
state->xmit_fifo_size = uart_config[state->type].dfl_xmit_fifo_size;
if (state->type == PORT_UNKNOWN) {
restore_flags(flags);
return;
}
request_region(info->port,8,"serial(auto)");
/*
......@@ -3099,11 +3104,6 @@ int register_serial(struct serial_struct *req)
state->port = req->port;
state->flags = req->flags;
if (check_region(state->port,8)) {
restore_flags(flags);
printk("register_serial(): I/O region in use\n");
return -1; /* Area in use */
}
autoconfig(state);
if (state->type == PORT_UNKNOWN) {
restore_flags(flags);
......
......@@ -35,9 +35,8 @@
/*****************************************************************************/
#include <linux/module.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/net.h>
#include <linux/in.h>
......
......@@ -59,6 +59,7 @@
* released under the GNU General Public License Version 2.
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
......
......@@ -434,8 +434,8 @@ static struct device dev_ultra[MAX_ULTRA_CARDS] = {
static int io[MAX_ULTRA_CARDS] = { 0, };
static int irq[MAX_ULTRA_CARDS] = { 0, };
MODULE_PARM(io, "1-" __MODULE_PARM(MAX_ULTRA_CARDS) "i");
MODULE_PARM(irq, "1-" __MODULE_PARM(MAX_ULTRA_CARDS) "i");
MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ULTRA_CARDS) "i");
MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_ULTRA_CARDS) "i");
/* This is set up so that only a single autoprobe takes place per call.
ISA device autoprobes on a running machine are not recommended. */
......
Sun Jan 12 12:00 1997 Gerard Roudier (groudier@club-internet.fr)
* ncr53c8xx.c - revision 1.16e
- Add support of PCI burst length control from boot setup command.
burst:0 disable burst
burst:255 get burst from initial settings (BIOS settings?)
burst:#x set burst transfers to 1<<#x
- Only check xfer direction for common op-codes.
For all device specific / vendor specific opcodes the driver
now uses the xfer direction decided by the target.
Sun Jan 05 12:00 1997 Gerard Roudier (groudier@club-internet.fr)
* ncr53c8xx.c - revision 1.16d
- The driver is now able to process scsi commands without
knowledge of xfer data direction.
Stefan agreed with this change for Linux. This change is
not needed under FreeBSD since low-level drivers receive
the expected data direction for each scsi request.
- Save ctest5 features bits at start-up and restore them at
module release step.
Avoid side effects when a ncr driver which trusts bios
settings is reloaded (could be the ncr53c8xx itself).
Wed Jan 01 23:30 1997 Gerard Roudier (groudier@club-internet.fr)
* ncr53c8xx.c - revision 1.16c
- Bad decision about 20MHz for 13 ns period factor.
Was wrong, so I restore the previous algorithm.
- Burst length 128 not correctly set in dmode.
Thu Dec 26 22:00 1996 Gerard Roudier (groudier@club-internet.fr)
* ncr53c8xx.c ncr53c8xx.h README.ncr53c8xx - revision 1.16b
- Remove useless code.
......
......@@ -32,6 +32,8 @@ dep_tristate 'EATA-PIO (old DPT PM2001, PM2012A) support' CONFIG_SCSI_EATA_PIO $
dep_tristate 'EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support' CONFIG_SCSI_EATA $CONFIG_SCSI
if [ "$CONFIG_SCSI_EATA" != "n" ]; then
bool ' enable tagged command queueing' CONFIG_SCSI_EATA_TAGGED_QUEUE
bool ' enable linked commands' CONFIG_SCSI_EATA_LINKED_COMMANDS
int ' maximum number of queued commands' CONFIG_SCSI_EATA_MAX_TAGS 16
fi
dep_tristate 'Future Domain 16xx SCSI support' CONFIG_SCSI_FUTURE_DOMAIN $CONFIG_SCSI
dep_tristate 'Generic NCR5380/53c400 SCSI support' CONFIG_SCSI_GENERIC_NCR5380 $CONFIG_SCSI
......@@ -74,6 +76,10 @@ fi
dep_tristate 'Seagate ST-02 and Future Domain TMC-8xx SCSI support' CONFIG_SCSI_SEAGATE $CONFIG_SCSI
dep_tristate 'Trantor T128/T128F/T228 SCSI support' CONFIG_SCSI_T128 $CONFIG_SCSI
dep_tristate 'UltraStor 14F/34F support' CONFIG_SCSI_U14_34F $CONFIG_SCSI
if [ "$CONFIG_SCSI_U14_34F" != "n" ]; then
bool ' enable linked commands' CONFIG_SCSI_U14_34F_LINKED_COMMANDS
int ' maximum number of queued commands' CONFIG_SCSI_U14_34F_MAX_TAGS 8
fi
dep_tristate 'UltraStor SCSI support' CONFIG_SCSI_ULTRASTOR $CONFIG_SCSI
#dep_tristate 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG $CONFIG_SCSI
endmenu
......@@ -30,11 +30,19 @@ TOPDIR = ../..
endif
ifeq ($(CONFIG_SCSI),y)
L_OBJS += hosts.o scsi.o scsi_ioctl.o constants.o scsicam.o
# We must attach scsi_syms.o to scsi.o, as otherwise there is nothing to
# pull the object file from the archive.
SCSI=scsi.o
ifeq ($(CONFIG_MODULES),y)
O_TARGET := scsi_n_syms.o
O_OBJS := scsi.o
OX_OBJS := scsi_syms.o
SCSI := $(O_TARGET)
endif
L_OBJS += $(SCSI) hosts.o scsi_ioctl.o constants.o scsicam.o
ifeq ($(CONFIG_PROC_FS),y)
L_OBJS += scsi_proc.o
endif
LX_OBJS += scsi_syms.o
else
ifeq ($(CONFIG_SCSI),m)
MX_OBJS += scsi_syms.o
......
......@@ -4,7 +4,7 @@ Written by Gerard Roudier <groudier@club-internet.fr>
21 Rue Carnot
95170 DEUIL LA BARRE - FRANCE
29 December 1996
12 January 1997
===============================================================================
1. Introduction
......@@ -62,6 +62,10 @@ through the proc SCSI file system read / write operations.
This driver has been tested OK with linux/i386 and Linux/Alpha.
Latest driver version and patches are available at:
ftp://linux.wauug.org/pub/roudier
I am not a native speaker of English and there are probably lots of
mistakes in this README file. Any help will be welcome.
......@@ -491,8 +495,20 @@ Debug mode
DEBUG_FREEZE 0x800
DEBUG_RESTART 0x1000
You can play safely with DEBUG_NEGO. However, some of these flags may
generate bunches of syslog messages.
You can play safely with DEBUG_NEGO. However, some of these flags may
generate bunches of syslog messages.
Burst max
burst:0 burst disabled
burst:255 get burst length from initial IO register settings.
burst:#x burst enabled (1<<#x burst transfers max)
#x is an integer value which is log base 2 of the burst transfers max.
The NCR53C875 and NCR53C825A support up to 128 burst transfers (#x = 7).
Other chips only support up to 16 (#x = 4).
This is a maximum value. The driver set the burst length according to chip
and revision ids. By default the driver uses the maximum value supported
by the chip.
10.3 Advised boot setup commands
......@@ -508,7 +524,8 @@ My personnal system works flawlessly with the following setup:
The driver prints its actual setup when verbosity level is 2. You can try
"ncr53c8xx=verb:2" to get the "static" setup of the driver, or add "verb:2"
to your boot setup command in order to check the actual setup the drive use.
to your boot setup command in order to check the actual setup the driver is
using.
11. Some constants and flags of the ncr53c8xx.h header file
......
This diff is collapsed.
......@@ -12,7 +12,7 @@ int eata2x_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int eata2x_abort(Scsi_Cmnd *);
int eata2x_reset(Scsi_Cmnd *, unsigned int);
#define EATA_VERSION "2.40.00"
#define EATA_VERSION "2.50.00"
#define EATA { \
......
This diff is collapsed.
......@@ -45,7 +45,7 @@
/*
** Name and revision of the driver
*/
#define SCSI_NCR_DRIVER_NAME "ncr53c8xx - revision 1.16b"
#define SCSI_NCR_DRIVER_NAME "ncr53c8xx - revision 1.16e"
/*
** If SCSI_NCR_SETUP_SPECIAL_FEATURES is defined,
......@@ -292,7 +292,8 @@
1, \
SCSI_NCR_SETUP_DEFAULT_TAGS, \
SCSI_NCR_SETUP_DEFAULT_SYNC, \
0x00 \
0x00, \
7 \
}
......
......@@ -3,8 +3,8 @@
* a module.
*/
#define __NO_VERSION__
#include <linux/module.h>
#include <linux/config.h>
#include <linux/module.h>
#ifdef CONFIG_MODULES
......
......@@ -88,4 +88,8 @@
files and the file number status is retained. */
#define ST_FAST_MTEOM 0
/* If ST_SYSV is non-zero, the tape behaves according to the SYS V semantics.
The default is BSD semantics. */
#define ST_SYSV 0
#endif
This diff is collapsed.
......@@ -11,7 +11,7 @@ int u14_34f_abort(Scsi_Cmnd *);
int u14_34f_reset(Scsi_Cmnd *, unsigned int);
int u14_34f_biosparam(Disk *, kdev_t, int *);
#define U14_34F_VERSION "2.40.00"
#define U14_34F_VERSION "2.50.00"
#define ULTRASTOR_14_34F { \
NULL, /* Ptr for modules */ \
......
......@@ -6,9 +6,7 @@ comment 'Filesystems'
bool 'Quota support' CONFIG_QUOTA
tristate 'Minix fs support' CONFIG_MINIX_FS
tristate 'Extended fs support' CONFIG_EXT_FS
tristate 'Second extended fs support' CONFIG_EXT2_FS
tristate 'xiafs filesystem support' CONFIG_XIA_FS
# msdos filesystems
tristate 'DOS FAT fs support' CONFIG_FAT_FS
......@@ -38,6 +36,7 @@ tristate 'ISO9660 cdrom filesystem support' CONFIG_ISO9660_FS
tristate 'OS/2 HPFS filesystem support (read only)' CONFIG_HPFS_FS
tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS
tristate 'Amiga FFS filesystem support' CONFIG_AFFS_FS
tristate 'ROM filesystem support' CONFIG_ROMFS_FS
if [ "$CONFIG_AFFS_FS" != "n" ]; then
define_bool CONFIG_AMIGA_PARTITION y
fi
......@@ -47,3 +46,4 @@ if [ "$CONFIG_UFS_FS" != "n" ]; then
bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL
fi
endmenu
......@@ -16,8 +16,8 @@ O_OBJS = open.o read_write.o inode.o devices.o file_table.o buffer.o \
dcache.o $(BINFMTS)
MOD_LIST_NAME := FS_MODULES
ALL_SUB_DIRS = minix ext ext2 fat msdos vfat proc isofs nfs xiafs umsdos \
hpfs sysv smbfs ncpfs ufs affs
ALL_SUB_DIRS = minix ext2 fat msdos vfat proc isofs nfs umsdos \
hpfs sysv smbfs ncpfs ufs affs romfs
ifeq ($(CONFIG_QUOTA),y)
O_OBJS += dquot.o
......@@ -33,14 +33,6 @@ else
endif
endif
ifeq ($(CONFIG_EXT_FS),y)
SUB_DIRS += ext
else
ifeq ($(CONFIG_EXT_FS),m)
MOD_SUB_DIRS += ext
endif
endif
ifeq ($(CONFIG_EXT2_FS),y)
SUB_DIRS += ext2
else
......@@ -97,14 +89,6 @@ else
endif
endif
ifeq ($(CONFIG_XIA_FS),y)
SUB_DIRS += xiafs
else
ifeq ($(CONFIG_XIA_FS),m)
MOD_SUB_DIRS += xiafs
endif
endif
ifeq ($(CONFIG_UMSDOS_FS),y)
SUB_DIRS += umsdos
else
......@@ -161,6 +145,14 @@ else
endif
endif
ifeq ($(CONFIG_ROMFS_FS),y)
SUB_DIRS += romfs
else
ifeq ($(CONFIG_ROMFS_FS),m)
MOD_SUB_DIRS += romfs
endif
endif
ifeq ($(CONFIG_BINFMT_ELF),y)
BINFMTS += binfmt_elf.o
else
......
......@@ -1238,9 +1238,9 @@ static int elf_core_dump(long signr, struct pt_regs * regs)
unsigned long addr = vma->vm_start;
unsigned long len = vma->vm_end - vma->vm_start;
i++;
if (!maydump(vma))
continue;
i++;
#ifdef DEBUG
printk("elf_core_dump: writing %08lx %lx\n", addr, len);
#endif
......
......@@ -13,7 +13,6 @@
#include <linux/major.h>
#include <linux/string.h>
#include <linux/sched.h>
#include <linux/ext_fs.h>
#include <linux/stat.h>
#include <linux/fcntl.h>
#include <linux/errno.h>
......
#
# Makefile for the linux ext-filesystem routines.
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definitions are now in the main makefile...
O_TARGET := ext.o
O_OBJS := freelists.o truncate.o namei.o inode.o file.o dir.o \
symlink.o fsync.o
M_OBJS := $(O_TARGET)
include $(TOPDIR)/Rules.make
/*
* linux/fs/ext/dir.c
*
* Copyright (C) 1992 Remy Card (card@masi.ibp.fr)
*
* from
*
* linux/fs/minix/dir.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
*
* ext directory handling functions
*/
#include <asm/uaccess.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/ext_fs.h>
#include <linux/stat.h>
static long ext_dir_read(struct inode * inode, struct file * filp,
char * buf, unsigned long count)
{
return -EISDIR;
}
static int ext_readdir(struct inode *, struct file *, void *, filldir_t);
static struct file_operations ext_dir_operations = {
NULL, /* lseek - default */
ext_dir_read, /* read */
NULL, /* write - bad */
ext_readdir, /* readdir */
NULL, /* select - default */
NULL, /* ioctl - default */
NULL, /* mmap */
NULL, /* no special open code */
NULL, /* no special release code */
file_fsync /* fsync */
};
/*
* directories can handle most operations...
*/
struct inode_operations ext_dir_inode_operations = {
&ext_dir_operations, /* default directory file-ops */
ext_create, /* create */
ext_lookup, /* lookup */
ext_link, /* link */
ext_unlink, /* unlink */
ext_symlink, /* symlink */
ext_mkdir, /* mkdir */
ext_rmdir, /* rmdir */
ext_mknod, /* mknod */
ext_rename, /* rename */
NULL, /* readlink */
NULL, /* follow_link */
NULL, /* readpage */
NULL, /* writepage */
NULL, /* bmap */
ext_truncate, /* truncate */
NULL /* permission */
};
static int ext_readdir(struct inode * inode, struct file * filp,
void * dirent, filldir_t filldir)
{
int error;
unsigned int i;
off_t offset;
struct buffer_head * bh;
struct ext_dir_entry * de;
if (!inode || !S_ISDIR(inode->i_mode))
return -EBADF;
if ((filp->f_pos & 7) != 0)
return -EBADF;
error = 0;
while (!error && filp->f_pos < inode->i_size) {
offset = filp->f_pos & 1023;
bh = ext_bread(inode,(filp->f_pos)>>BLOCK_SIZE_BITS,0);
if (!bh) {
filp->f_pos += 1024-offset;
continue;
}
for (i = 0; i < 1024 && i < offset; ) {
de = (struct ext_dir_entry *) (bh->b_data + i);
if (!de->rec_len)
break;
i += de->rec_len;
}
offset = i;
de = (struct ext_dir_entry *) (offset + bh->b_data);
while (offset < 1024 && filp->f_pos < inode->i_size) {
if (de->rec_len < 8 || de->rec_len % 8 != 0 ||
de->rec_len < de->name_len + 8 ||
(de->rec_len + (off_t) filp->f_pos - 1) / 1024 > ((off_t) filp->f_pos / 1024)) {
printk ("ext_readdir: bad dir entry, skipping\n");
printk ("dev=%s, dir=%ld, "
"offset=%ld, rec_len=%d, name_len=%d\n",
kdevname(inode->i_dev), inode->i_ino,
offset, de->rec_len, de->name_len);
filp->f_pos += 1024-offset;
if (filp->f_pos > inode->i_size)
filp->f_pos = inode->i_size;
continue;
}
if (de->inode) {
error = filldir(dirent, de->name, de->name_len, filp->f_pos, de->inode);
if (error)
break;
}
offset += de->rec_len;
filp->f_pos += de->rec_len;
((char *) de) += de->rec_len;
}
brelse(bh);
}
return 0;
}
/*
* linux/fs/ext/file.c
*
* Copyright (C) 1992 Remy Card (card@masi.ibp.fr)
*
* from
*
* linux/fs/minix/file.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
*
* ext regular file handling primitives
*/
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/sched.h>
#include <linux/ext_fs.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/stat.h>
#include <linux/locks.h>
#include <linux/pagemap.h>
#define NBUF 32
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#include <linux/fs.h>
#include <linux/ext_fs.h>
static long ext_file_read(struct inode *, struct file *, char *, unsigned long);
static long ext_file_write(struct inode *, struct file *, const char *, unsigned long);
/*
* We have mostly NULL's here: the current defaults are ok for
* the ext filesystem.
*/
static struct file_operations ext_file_operations = {
NULL, /* lseek - default */
ext_file_read, /* read */
ext_file_write, /* write */
NULL, /* readdir - bad */
NULL, /* select - default */
NULL, /* ioctl - default */
generic_file_mmap, /* mmap */
NULL, /* no special open is needed */
NULL, /* release */
ext_sync_file /* fsync */
};
struct inode_operations ext_file_inode_operations = {
&ext_file_operations, /* default file operations */
NULL, /* create */
NULL, /* lookup */
NULL, /* link */
NULL, /* unlink */
NULL, /* symlink */
NULL, /* mkdir */
NULL, /* rmdir */
NULL, /* mknod */
NULL, /* rename */
NULL, /* readlink */
NULL, /* follow_link */
generic_readpage, /* readpage */
NULL, /* writepage */
ext_bmap, /* bmap */
ext_truncate, /* truncate */
NULL /* permission */
};
static long ext_file_read(struct inode * inode, struct file * filp,
char * buf, unsigned long count)
{
int read,left,chars;
int block, blocks, offset;
int bhrequest, uptodate;
struct buffer_head ** bhb, ** bhe;
struct buffer_head * bhreq[NBUF];
struct buffer_head * buflist[NBUF];
unsigned int size;
if (!inode) {
printk("ext_file_read: inode = NULL\n");
return -EINVAL;
}
if (!S_ISREG(inode->i_mode)) {
printk("ext_file_read: mode = %07o\n",inode->i_mode);
return -EINVAL;
}
offset = filp->f_pos;
size = inode->i_size;
if (offset > size)
left = 0;
else
left = size - offset;
if (left > count)
left = count;
if (left <= 0)
return 0;
read = 0;
block = offset >> BLOCK_SIZE_BITS;
offset &= BLOCK_SIZE-1;
size = (size + (BLOCK_SIZE-1)) >> BLOCK_SIZE_BITS;
blocks = (left + offset + BLOCK_SIZE - 1) >> BLOCK_SIZE_BITS;
bhb = bhe = buflist;
if (filp->f_reada) {
if(blocks < read_ahead[MAJOR(inode->i_dev)] / (BLOCK_SIZE >> 9))
blocks = read_ahead[MAJOR(inode->i_dev)] / (BLOCK_SIZE >> 9);
if (block + blocks > size)
blocks = size - block;
}
/* We do this in a two stage process. We first try to request
as many blocks as we can, then we wait for the first one to
complete, and then we try to wrap up as many as are actually
done. This routine is rather generic, in that it can be used
in a filesystem by substituting the appropriate function in
for getblk.
This routine is optimized to make maximum use of the various
buffers and caches. */
do {
bhrequest = 0;
uptodate = 1;
while (blocks) {
--blocks;
*bhb = ext_getblk(inode, block++, 0);
if (*bhb && !buffer_uptodate(*bhb)) {
uptodate = 0;
bhreq[bhrequest++] = *bhb;
}
if (++bhb == &buflist[NBUF])
bhb = buflist;
/* If the block we have on hand is uptodate, go ahead
and complete processing. */
if (uptodate)
break;
if (bhb == bhe)
break;
}
/* Now request them all */
if (bhrequest)
ll_rw_block(READ, bhrequest, bhreq);
do { /* Finish off all I/O that has actually completed */
if (*bhe) {
wait_on_buffer(*bhe);
if (!buffer_uptodate(*bhe)) { /* read error? */
brelse(*bhe);
if (++bhe == &buflist[NBUF])
bhe = buflist;
left = 0;
break;
}
}
if (left < BLOCK_SIZE - offset)
chars = left;
else
chars = BLOCK_SIZE - offset;
filp->f_pos += chars;
left -= chars;
read += chars;
if (*bhe) {
copy_to_user(buf,offset+(*bhe)->b_data,chars);
brelse(*bhe);
buf += chars;
} else {
while (chars-->0)
put_user(0,buf++);
}
offset = 0;
if (++bhe == &buflist[NBUF])
bhe = buflist;
} while (left > 0 && bhe != bhb && (!*bhe || !buffer_locked(*bhe)));
} while (left > 0);
/* Release the read-ahead blocks */
while (bhe != bhb) {
brelse(*bhe);
if (++bhe == &buflist[NBUF])
bhe = buflist;
};
if (!read)
return -EIO;
filp->f_reada = 1;
if (!IS_RDONLY(inode)) {
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
}
return read;
}
static long ext_file_write(struct inode * inode, struct file * filp,
const char * buf, unsigned long count)
{
off_t pos;
int written,c;
struct buffer_head * bh;
char * p;
if (!inode) {
printk("ext_file_write: inode = NULL\n");
return -EINVAL;
}
if (!S_ISREG(inode->i_mode)) {
printk("ext_file_write: mode = %07o\n",inode->i_mode);
return -EINVAL;
}
/*
* ok, append may not work when many processes are writing at the same time
* but so what. That way leads to madness anyway.
*/
if (filp->f_flags & O_APPEND)
pos = inode->i_size;
else
pos = filp->f_pos;
written = 0;
while (written<count) {
bh = ext_getblk(inode,pos/BLOCK_SIZE,1);
if (!bh) {
if (!written)
written = -ENOSPC;
break;
}
c = BLOCK_SIZE - (pos % BLOCK_SIZE);
if (c > count-written)
c = count-written;
if (c != BLOCK_SIZE && !buffer_uptodate(bh)) {
ll_rw_block(READ, 1, &bh);
wait_on_buffer(bh);
if (!buffer_uptodate(bh)) {
brelse(bh);
if (!written)
written = -EIO;
break;
}
}
p = (pos % BLOCK_SIZE) + bh->b_data;
copy_from_user(p,buf,c);
update_vm_cache(inode, pos, p, c);
pos += c;
if (pos > inode->i_size) {
inode->i_size = pos;
inode->i_dirt = 1;
}
written += c;
buf += c;
mark_buffer_uptodate(bh, 1);
mark_buffer_dirty(bh, 0);
brelse(bh);
}
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
filp->f_pos = pos;
inode->i_dirt = 1;
return written;
}
This diff is collapsed.
/*
* linux/fs/ext/fsync.c
*
* Copyright (C) 1993 Stephen Tweedie (sct@dcs.ed.ac.uk)
* from
* Copyright (C) 1992 Remy Card (card@masi.ibp.fr)
* from
* linux/fs/minix/truncate.c Copyright (C) 1991, 1992 Linus Torvalds
*
* extfs fsync primitive
*/
#include <asm/uaccess.h>
#include <asm/system.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/stat.h>
#include <linux/fcntl.h>
#include <linux/locks.h>
#include <linux/fs.h>
#include <linux/ext_fs.h>
#define blocksize BLOCK_SIZE
#define addr_per_block 256
static int sync_block (struct inode * inode, unsigned long * block, int wait)
{
struct buffer_head * bh;
int tmp;
if (!*block)
return 0;
tmp = *block;
bh = get_hash_table(inode->i_dev, *block, blocksize);
if (!bh)
return 0;
if (*block != tmp) {
brelse (bh);
return 1;
}
if (wait && buffer_req(bh) && !buffer_uptodate(bh)) {
brelse(bh);
return -1;
}
if (wait || !buffer_uptodate(bh) || !buffer_dirty(bh))
{
brelse(bh);
return 0;
}
ll_rw_block(WRITE, 1, &bh);
bh->b_count--;
return 0;
}
static int sync_iblock (struct inode * inode, unsigned long * iblock,
struct buffer_head **bh, int wait)
{
int rc, tmp;
*bh = NULL;
tmp = *iblock;
if (!tmp)
return 0;
rc = sync_block (inode, iblock, wait);
if (rc)
return rc;
*bh = bread(inode->i_dev, tmp, blocksize);
if (tmp != *iblock) {
brelse(*bh);
*bh = NULL;
return 1;
}
if (!*bh)
return -1;
return 0;
}
static int sync_direct(struct inode *inode, int wait)
{
int i;
int rc, err = 0;
for (i = 0; i < 9; i++) {
rc = sync_block (inode, inode->u.ext_i.i_data + i, wait);
if (rc > 0)
break;
if (rc)
err = rc;
}
return err;
}
static int sync_indirect(struct inode *inode, unsigned long *iblock, int wait)
{
int i;
struct buffer_head * ind_bh;
int rc, err = 0;
rc = sync_iblock (inode, iblock, &ind_bh, wait);
if (rc || !ind_bh)
return rc;
for (i = 0; i < addr_per_block; i++) {
rc = sync_block (inode,
((unsigned long *) ind_bh->b_data) + i,
wait);
if (rc > 0)
break;
if (rc)
err = rc;
}
brelse(ind_bh);
return err;
}
static int sync_dindirect(struct inode *inode, unsigned long *diblock,
int wait)
{
int i;
struct buffer_head * dind_bh;
int rc, err = 0;
rc = sync_iblock (inode, diblock, &dind_bh, wait);
if (rc || !dind_bh)
return rc;
for (i = 0; i < addr_per_block; i++) {
rc = sync_indirect (inode,
((unsigned long *) dind_bh->b_data) + i,
wait);
if (rc > 0)
break;
if (rc)
err = rc;
}
brelse(dind_bh);
return err;
}
static int sync_tindirect(struct inode *inode, unsigned long *tiblock,
int wait)
{
int i;
struct buffer_head * tind_bh;
int rc, err = 0;
rc = sync_iblock (inode, tiblock, &tind_bh, wait);
if (rc || !tind_bh)
return rc;
for (i = 0; i < addr_per_block; i++) {
rc = sync_dindirect (inode,
((unsigned long *) tind_bh->b_data) + i,
wait);
if (rc > 0)
break;
if (rc)
err = rc;
}
brelse(tind_bh);
return err;
}
int ext_sync_file(struct inode * inode, struct file *file)
{
int wait, err = 0;
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
S_ISLNK(inode->i_mode)))
return -EINVAL;
for (wait=0; wait<=1; wait++)
{
err |= sync_direct(inode, wait);
err |= sync_indirect(inode, inode->u.ext_i.i_data+9, wait);
err |= sync_dindirect(inode, inode->u.ext_i.i_data+10, wait);
err |= sync_tindirect(inode, inode->u.ext_i.i_data+11, wait);
}
err |= ext_sync_inode (inode);
return (err < 0) ? -EIO : 0;
}
This diff is collapsed.
This diff is collapsed.
/*
* linux/fs/ext/symlink.c
*
* Copyright (C) 1992 Remy Card (card@masi.ibp.fr)
*
* from
*
* linux/fs/minix/symlink.c
*
* Copyright (C) 1991, 1992 Linus Torvalds
*
* ext symlink handling code
*/
#include <asm/uaccess.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/ext_fs.h>
#include <linux/stat.h>
static int ext_readlink(struct inode *, char *, int);
static int ext_follow_link(struct inode *, struct inode *, int, int, struct inode **);
/*
* symlinks can't do much...
*/
struct inode_operations ext_symlink_inode_operations = {
NULL, /* no file-operations */
NULL, /* create */
NULL, /* lookup */
NULL, /* link */
NULL, /* unlink */
NULL, /* symlink */
NULL, /* mkdir */
NULL, /* rmdir */
NULL, /* mknod */
NULL, /* rename */
ext_readlink, /* readlink */
ext_follow_link, /* follow_link */
NULL, /* readpage */
NULL, /* writepage */
NULL, /* bmap */
NULL, /* truncate */
NULL /* permission */
};
static int ext_follow_link(struct inode * dir, struct inode * inode,
int flag, int mode, struct inode ** res_inode)
{
int error;
struct buffer_head * bh;
*res_inode = NULL;
if (!dir) {
dir = current->fs->root;
dir->i_count++;
}
if (!inode) {
iput(dir);
return -ENOENT;
}
if (!S_ISLNK(inode->i_mode)) {
iput(dir);
*res_inode = inode;
return 0;
}
if (current->link_count > 5) {
iput(dir);
iput(inode);
return -ELOOP;
}
if (!(bh = ext_bread(inode, 0, 0))) {
iput(inode);
iput(dir);
return -EIO;
}
iput(inode);
current->link_count++;
error = open_namei(bh->b_data,flag,mode,res_inode,dir);
current->link_count--;
brelse(bh);
return error;
}
static int ext_readlink(struct inode * inode, char * buffer, int buflen)
{
struct buffer_head * bh;
int i;
char c;
if (!S_ISLNK(inode->i_mode)) {
iput(inode);
return -EINVAL;
}
if (buflen > 1023)
buflen = 1023;
bh = ext_bread(inode, 0, 0);
iput(inode);
if (!bh)
return 0;
i = 0;
while (i<buflen && (c = bh->b_data[i])) {
i++;
put_user(c,buffer++);
}
brelse(bh);
return i;
}
This diff is collapsed.
......@@ -4,6 +4,7 @@
* Exported kernel symbols for the low-level FAT-based fs support.
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/mm.h>
......
......@@ -10,9 +10,7 @@
#include <linux/fs.h>
#include <linux/minix_fs.h>
#include <linux/ext_fs.h>
#include <linux/ext2_fs.h>
#include <linux/xia_fs.h>
#include <linux/msdos_fs.h>
#include <linux/umsdos_fs.h>
#include <linux/proc_fs.h>
......@@ -24,6 +22,7 @@
#include <linux/ncp_fs.h>
#include <linux/affs_fs.h>
#include <linux/ufs_fs.h>
#include <linux/romfs_fs.h>
#include <linux/major.h>
extern void device_setup(void);
......@@ -42,18 +41,10 @@ asmlinkage int sys_setup(void)
binfmt_setup();
#ifdef CONFIG_EXT_FS
init_ext_fs();
#endif
#ifdef CONFIG_EXT2_FS
init_ext2_fs();
#endif
#ifdef CONFIG_XIA_FS
init_xiafs_fs();
#endif
#ifdef CONFIG_MINIX_FS
init_minix_fs();
#endif
......@@ -110,6 +101,11 @@ asmlinkage int sys_setup(void)
init_ufs_fs();
#endif
#ifdef CONFIG_ROMFS_FS
init_romfs_fs();
#endif
mount_root();
return 0;
}
......@@ -8,6 +8,7 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/stat.h>
......
......@@ -5,6 +5,7 @@
* These symbols are used by umsdos.
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/mm.h>
......
......@@ -6,8 +6,8 @@
*
*/
#include <linux/module.h>
#include <linux/config.h>
#include <linux/module.h>
#include <asm/system.h>
#include <asm/uaccess.h>
......
......@@ -13,6 +13,7 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/sched.h>
......
#include <linux/module.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
......
#
# Makefile for the XIAFS filesystem routines.
# Makefile for the linux romfs-filesystem routines.
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
......@@ -7,8 +7,8 @@
#
# Note 2! The CFLAGS definitions are now in the main makefile...
O_TARGET := xiafs.o
O_OBJS := bitmap.o truncate.o namei.o inode.o file.o dir.o symlink.o fsync.o
O_TARGET := romfs.o
O_OBJS := inode.o
M_OBJS := $(O_TARGET)
include $(TOPDIR)/Rules.make
This diff is collapsed.
......@@ -5,6 +5,7 @@
*
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/sched.h>
......
......@@ -20,6 +20,7 @@
* the superblock.
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/sched.h>
......
......@@ -20,6 +20,7 @@
* Gertjan van Wingerde <gertjan@cs.vu.nl>
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment