Commit c7ef1726 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.21

parent f9290a20
...@@ -194,7 +194,7 @@ S: United Kingdom ...@@ -194,7 +194,7 @@ S: United Kingdom
N: Remy Card N: Remy Card
E: Remy.Card@masi.ibp.fr E: Remy.Card@masi.ibp.fr
E: Remy.Card@linux.org 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 D: Second extended file system designer and developer
S: Institut Blaise Pascal S: Institut Blaise Pascal
S: 4 Place Jussieu S: 4 Place Jussieu
...@@ -394,6 +394,14 @@ D: Author: Future Domain TMC-16x0 SCSI driver ...@@ -394,6 +394,14 @@ D: Author: Future Domain TMC-16x0 SCSI driver
D: Debugging: SCSI code; Cyclades serial driver; APM driver D: Debugging: SCSI code; Cyclades serial driver; APM driver
D: Debugging: XFree86 Mach 32 server, accelerated server code 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 N: Jrgen Fischer
E: fischer@et-inf.fho-emden.de (=?iso-8859-1?q?J=FCrgen?= Fischer) E: fischer@et-inf.fho-emden.de (=?iso-8859-1?q?J=FCrgen?= Fischer)
D: Author of Adaptec AHA-152x scsi driver D: Author of Adaptec AHA-152x scsi driver
...@@ -1562,7 +1570,7 @@ S: The Netherlands ...@@ -1562,7 +1570,7 @@ S: The Netherlands
N: Frank Xia N: Frank Xia
E: qx@math.columbia.edu E: qx@math.columbia.edu
D: Xiafs filesystem D: Xiafs filesystem [defunct]
S: 542 West 112th Street, 5N S: 542 West 112th Street, 5N
S: New York, New York 10025 S: New York, New York 10025
S: USA S: USA
......
...@@ -19,7 +19,7 @@ you don't need to bother doing so in the form of a diff, as this is ...@@ -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 generated by texinfo so a diff is useless anyway (though I can
incorporate one by hand if you insist upon sending it that way ;-). 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 Author: Chris Ricker (gt1355b@prism.gatech.edu).
Current Minimal Requirements Current Minimal Requirements
...@@ -28,7 +28,7 @@ Current Minimal Requirements ...@@ -28,7 +28,7 @@ Current Minimal Requirements
Upgrade to at *least* these software revisions before thinking you've Upgrade to at *least* these software revisions before thinking you've
encountered a bug! encountered a bug!
- Kernel modules 2.1.13 - Kernel modules modutils-970104
- Gnu C 2.7.2.1 - Gnu C 2.7.2.1
- Binutils 2.7.0.3 - Binutils 2.7.0.3
- Linux C Library 5.4.17 - Linux C Library 5.4.17
...@@ -36,7 +36,6 @@ encountered a bug! ...@@ -36,7 +36,6 @@ encountered a bug!
- Linux C++ Library 2.7.2.1 - Linux C++ Library 2.7.2.1
- Procps 1.01 - Procps 1.01
- SysVinit 2.69 - SysVinit 2.69
- Sysklogd 1.3-3
- Mount 2.5p - Mount 2.5p
- Net-tools 1.32-alpha - Net-tools 1.32-alpha
- Kbd 0.91 - Kbd 0.91
...@@ -75,7 +74,7 @@ widely available, so if you need to upgrade, use it. ...@@ -75,7 +74,7 @@ widely available, so if you need to upgrade, use it.
Modules 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 Gnu C
===== =====
...@@ -89,9 +88,20 @@ feel free to upgrade if you want the gcc bug fixes). ...@@ -89,9 +88,20 @@ feel free to upgrade if you want the gcc bug fixes).
Networking Changes Networking Changes
================== ==================
Please read Documentation/networking/routing.txt. People wanting to use Please read Documentation/networking/routing.txt and
all the new routing table features such as OSPF classes should also read Documentation/networking/policy-routing.txt for more information about
Documentation/networking/policy-routing.txt. 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 SysVinit
======== ========
...@@ -99,6 +109,18 @@ SysVinit ...@@ -99,6 +109,18 @@ SysVinit
To avoid an oops while shutting down or rebooting the computer, To avoid an oops while shutting down or rebooting the computer,
upgrade to SysVinit 2.69. 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 How to know the version of the installed programs
************************************************* *************************************************
...@@ -109,11 +131,13 @@ requires that you be logged in as root. ...@@ -109,11 +131,13 @@ requires that you be logged in as root.
Gnu C: gcc -v or gcc --version Gnu C: gcc -v or gcc --version
Libc: ls -l /lib/libc.so.* Libc: ls -l /lib/libc.so.*
Libc++: ls -l /usr/lib/libg++.so.* Libc++: ls -l /usr/lib/libg++.so.*
Ld.so: ldd-v
Binutils: ld -v Binutils: ld -v
modules: insmod -V modules: insmod -V
procps: ps --version 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}' /INIT_VERSION/ {print}'
RPM: rpm --version
Where to get the files Where to get the files
********************** **********************
...@@ -168,9 +192,8 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/ld.so-1.8.5.tar.gz ...@@ -168,9 +192,8 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/ld.so-1.8.5.tar.gz
Modules utilities Modules utilities
================= =================
The 2.1.13 release: The 970104 release:
ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.1/modules-2.1.13.tar.gz ftp://ftp.redhat.com/pub/alphabits/modutils-970104.tar.gz
ftp://sunsite.unc.edu/pub/Linux/kernel/v2.1/modules-2.1.13.tar.gz
Procps utilities Procps utilities
================ ================
...@@ -186,6 +209,26 @@ The 2.69 release (when it gets there): ...@@ -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://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 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 Other Info
========== ==========
......
...@@ -3108,13 +3108,6 @@ CONFIG_MINIX_FS ...@@ -3108,13 +3108,6 @@ CONFIG_MINIX_FS
Documentation/modules.txt. Note that the filesystem of your root Documentation/modules.txt. Note that the filesystem of your root
partition cannot be compiled as a module. 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 Second extended fs support
CONFIG_EXT2_FS CONFIG_EXT2_FS
This is the de facto standard Linux filesystem (= method to organize This is the de facto standard Linux filesystem (= method to organize
...@@ -3138,16 +3131,6 @@ CONFIG_EXT2_FS ...@@ -3138,16 +3131,6 @@ CONFIG_EXT2_FS
sunsite.unc.edu:/pub/Linux/docs/faqs. This option will enlarge your sunsite.unc.edu:/pub/Linux/docs/faqs. This option will enlarge your
kernel by about 41 kB. Default is Y. 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 fat fs support
CONFIG_FAT_FS CONFIG_FAT_FS
If you want to use one of the FAT-based filesystems (the MS-DOS, If you want to use one of the FAT-based filesystems (the MS-DOS,
...@@ -3450,6 +3433,14 @@ CONFIG_AFFS_FS ...@@ -3450,6 +3433,14 @@ CONFIG_AFFS_FS
module, say M here and read Documentation/modules.txt. module, say M here and read Documentation/modules.txt.
If unsure, say N. 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 Standard/generic serial support
CONFIG_SERIAL CONFIG_SERIAL
This selects whether you want to include the driver for the standard This selects whether you want to include the driver for the standard
...@@ -4587,7 +4578,7 @@ CONFIG_SUN_OPENPROMIO ...@@ -4587,7 +4578,7 @@ CONFIG_SUN_OPENPROMIO
# LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA # LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA
# LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech # LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech
# LocalWords: Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs # 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: std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI
# LocalWords: hpfs SYSV SCO intel iBCS Wyse WordPerfect tsx mit unixes sysv NR # LocalWords: hpfs SYSV SCO intel iBCS Wyse WordPerfect tsx mit unixes sysv NR
# LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST # LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST
......
...@@ -6,6 +6,8 @@ hpfs.txt ...@@ -6,6 +6,8 @@ hpfs.txt
- info and mount options for the OS/2 HPFS. - info and mount options for the OS/2 HPFS.
ncpfs.txt ncpfs.txt
- info on Novell Netware(tm) filesystem using NCP protocol. - info on Novell Netware(tm) filesystem using NCP protocol.
romfs.txt
- Description of the ROMFS filesystem.
smbfs.txt smbfs.txt
- info on using filesystems with the SMB protocol (Win 3.11, Win NT) - info on using filesystems with the SMB protocol (Win 3.11, Win NT)
sysv-fs.txt 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... ...@@ -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: 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 smbfs, nfs
Mid-level SCSI support (required by top and low level scsi drivers). Mid-level SCSI support (required by top and low level scsi drivers).
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 1 PATCHLEVEL = 1
SUBLEVEL = 20 SUBLEVEL = 21
ARCH = i386 ARCH = i386
...@@ -39,6 +39,7 @@ AR =$(CROSS_COMPILE)ar ...@@ -39,6 +39,7 @@ AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip STRIP =$(CROSS_COMPILE)strip
MAKE =make MAKE =make
GENKSYMS=/sbin/genksyms
all: do-it-all all: do-it-all
...@@ -87,7 +88,7 @@ SVGA_MODE= -DSVGA_MODE=NORMAL_VGA ...@@ -87,7 +88,7 @@ SVGA_MODE= -DSVGA_MODE=NORMAL_VGA
# standard CFLAGS # standard CFLAGS
# #
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
ifdef CONFIG_CPP ifdef CONFIG_CPP
CFLAGS := $(CFLAGS) -x c++ CFLAGS := $(CFLAGS) -x c++
......
...@@ -67,7 +67,7 @@ ifneq "$(strip $(ALL_O))" "" ...@@ -67,7 +67,7 @@ ifneq "$(strip $(ALL_O))" ""
else else
$(AR) rcs $@ $(AR) rcs $@
endif endif
endif endif # O_TARGET
# #
# Rule to compile a set of .o files into one .a file # Rule to compile a set of .o files into one .a file
...@@ -140,57 +140,59 @@ script: ...@@ -140,57 +140,59 @@ script:
# Separate the object into "normal" objects and "exporting" objects # Separate the object into "normal" objects and "exporting" objects
# Exporting objects are: all objects that define symbol tables # Exporting objects are: all objects that define symbol tables
# #
ifdef CONFIG_MODVERSIONS ifdef CONFIG_MODULES
SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS) SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS)
ifdef CONFIG_MODVERSIONS
ifneq "$(strip $(SYMTAB_OBJS))" "" ifneq "$(strip $(SYMTAB_OBJS))" ""
MODINCL = $(TOPDIR)/include/linux/modules 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 $(MODINCL)/%.ver: %.c
@if [ ! -x /sbin/genksyms ]; then echo "Please read: Documentation/modules.txt"; fi $(CC) $(CFLAGS) -E -D__GENKSYMS__ $<\
$(CC) $(CFLAGS) -E -D__GENKSYMS__ $< | /sbin/genksyms $(MODINCL) | $(GENKSYMS) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
mv $@.tmp $@
$(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
$(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)) $(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver))
@echo updating $(TOPDIR)/include/linux/modversions.h @echo updating $(TOPDIR)/include/linux/modversions.h
@(echo "#ifdef MODVERSIONS";\ @(echo "#ifndef _LINUX_MODVERSIONS_H";\
echo "#undef CONFIG_MODVERSIONS";\ echo "#define _LINUX_MODVERSIONS_H"; \
echo "#define CONFIG_MODVERSIONS";\ echo "#include <linux/modsetver.h>"; \
echo "#ifndef _set_ver";\ cd $(TOPDIR)/include/linux/modules; \
echo "#define _set_ver(sym,vers) sym ## _R ## vers";\ for f in *.ver; do \
echo "#endif";\ if [ -f $$f ]; then echo "#include <linux/modules/$${f}>"; fi; \
cd $(TOPDIR)/include/linux/modules; for f in *.ver;\ done; \
do echo "#include <linux/modules/$${f}>"; done; \ echo "#endif"; \
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)
dep fastdep: $(TOPDIR)/include/linux/modversions.h dep fastdep: $(TOPDIR)/include/linux/modversions.h
endif endif # SYMTAB_OBJS
$(M_OBJS): $(TOPDIR)/include/linux/modversions.h $(M_OBJS): $(TOPDIR)/include/linux/modversions.h
ifdef MAKING_MODULES ifdef MAKING_MODULES
$(O_OBJS) $(L_OBJS): $(TOPDIR)/include/linux/modversions.h $(O_OBJS) $(L_OBJS): $(TOPDIR)/include/linux/modversions.h
endif 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 else
$(TOPDIR)/include/linux/modversions.h: $(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
endif # CONFIG_MODULES
# #
# include dependency files they exist # include dependency files they exist
# #
......
...@@ -183,9 +183,7 @@ CONFIG_DE4X5=y ...@@ -183,9 +183,7 @@ CONFIG_DE4X5=y
# #
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set # CONFIG_VFAT_FS is not set
......
...@@ -16,7 +16,8 @@ all: kernel.o head.o ...@@ -16,7 +16,8 @@ all: kernel.o head.o
O_TARGET := kernel.o O_TARGET := kernel.o
O_OBJS := entry.o traps.o process.o osf_sys.o irq.o signal.o setup.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 all: kernel.o head.o
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* modules. * modules.
*/ */
#include <linux/string.h> #include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/user.h> #include <linux/user.h>
...@@ -14,8 +14,12 @@ ...@@ -14,8 +14,12 @@
#include <asm/hwrpb.h> #include <asm/hwrpb.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
extern void bcopy (const char *src, char *dst, int len); extern void bcopy (const char *src, char *dst, int len);
extern struct hwrpb_struct *hwrpb; 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: */ /* these are C runtime functions with special calling conventions: */
extern void __divl (void); extern void __divl (void);
...@@ -27,9 +31,6 @@ extern void __remlu (void); ...@@ -27,9 +31,6 @@ extern void __remlu (void);
extern void __divqu (void); extern void __divqu (void);
extern void __remqu (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 */ /* platform dependent support */
EXPORT_SYMBOL(_inb); EXPORT_SYMBOL(_inb);
...@@ -70,6 +71,7 @@ EXPORT_SYMBOL(dump_thread); ...@@ -70,6 +71,7 @@ EXPORT_SYMBOL(dump_thread);
EXPORT_SYMBOL(dump_fpu); EXPORT_SYMBOL(dump_fpu);
EXPORT_SYMBOL(hwrpb); EXPORT_SYMBOL(hwrpb);
EXPORT_SYMBOL(wrusp); EXPORT_SYMBOL(wrusp);
EXPORT_SYMBOL(__kernel_thread);
/* /*
* The following are specially called from the uaccess assembly stubs. * 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, ...@@ -236,7 +236,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n" " lda %1,3b-1b(%0)\n"
" .gprel32 2b\n" " .gprel32 2b\n"
" lda %2,3b-2b(%0)\n" " lda %2,3b-2b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2) : "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0)); : "r"(va), "0"(0));
if (error) if (error)
...@@ -257,7 +257,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -257,7 +257,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n" " lda %1,3b-1b(%0)\n"
" .gprel32 2b\n" " .gprel32 2b\n"
" lda %2,3b-2b(%0)\n" " lda %2,3b-2b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2) : "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0)); : "r"(va), "0"(0));
if (error) if (error)
...@@ -277,7 +277,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -277,7 +277,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda %1,3b-1b(%0)\n" " lda %1,3b-1b(%0)\n"
" .gprel32 2b\n" " .gprel32 2b\n"
" lda %2,3b-2b(%0)\n" " lda %2,3b-2b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2) : "=r"(error), "=&r"(tmp1), "=&r"(tmp2)
: "r"(va), "0"(0)); : "r"(va), "0"(0));
if (error) if (error)
...@@ -311,7 +311,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -311,7 +311,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n" " lda $31,5b-3b(%0)\n"
" .gprel32 4b\n" " .gprel32 4b\n"
" lda $31,5b-4b(%0)\n" " lda $31,5b-4b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2), : "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4) "=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0)); : "r"(va), "r"(una_reg(reg)), "0"(0));
...@@ -342,7 +342,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -342,7 +342,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n" " lda $31,5b-3b(%0)\n"
" .gprel32 4b\n" " .gprel32 4b\n"
" lda $31,5b-4b(%0)\n" " lda $31,5b-4b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2), : "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4) "=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0)); : "r"(va), "r"(una_reg(reg)), "0"(0));
...@@ -372,7 +372,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -372,7 +372,7 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
" lda $31,5b-3b(%0)\n" " lda $31,5b-3b(%0)\n"
" .gprel32 4b\n" " .gprel32 4b\n"
" lda $31,5b-4b(%0)\n" " lda $31,5b-4b(%0)\n"
".text" ".previous"
: "=r"(error), "=&r"(tmp1), "=&r"(tmp2), : "=r"(error), "=&r"(tmp1), "=&r"(tmp2),
"=&r"(tmp3), "=&r"(tmp4) "=&r"(tmp3), "=&r"(tmp4)
: "r"(va), "r"(una_reg(reg)), "0"(0)); : "r"(va), "r"(una_reg(reg)), "0"(0));
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
.section __ex_table,"a"; \ .section __ex_table,"a"; \
.gprel32 99b; \ .gprel32 99b; \
lda $31, $exception-99b($31); \ lda $31, $exception-99b($31); \
.text .previous
.set noat .set noat
.set noreorder .set noreorder
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
.section __ex_table,"a"; \ .section __ex_table,"a"; \
.gprel32 99b; \ .gprel32 99b; \
lda $31, $exit-99b($31); \ lda $31, $exit-99b($31); \
.text .previous
.set noat .set noat
.align 3 .align 3
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
.section __ex_table,"a"; \ .section __ex_table,"a"; \
.gprel32 99b; \ .gprel32 99b; \
lda v0, $exception-99b(zero); \ lda v0, $exception-99b(zero); \
.text .previous
.set noreorder .set noreorder
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
.section __ex_table,"a"; \ .section __ex_table,"a"; \
.gprel32 99b; \ .gprel32 99b; \
lda $31, $exception-99b($0); \ lda $31, $exception-99b($0); \
.text .previous
.set noat .set noat
......
...@@ -45,7 +45,7 @@ ZLINKFLAGS =-Ttext $(ZIMAGE_OFFSET) $(ZLDFLAGS) ...@@ -45,7 +45,7 @@ ZLINKFLAGS =-Ttext $(ZIMAGE_OFFSET) $(ZLDFLAGS)
BZLINKFLAGS =-Ttext $(BZIMAGE_OFFSET) $(ZLDFLAGS) BZLINKFLAGS =-Ttext $(BZIMAGE_OFFSET) $(ZLDFLAGS)
LINKFLAGS =-Ttext $(IMAGE_OFFSET) $(LDFLAGS) LINKFLAGS =-Ttext $(IMAGE_OFFSET) $(LDFLAGS)
CFLAGS := $(CFLAGS) -pipe CFLAGS := $(CFLAGS) -pipe -fno-strength-reduce
ifdef CONFIG_M386 ifdef CONFIG_M386
CFLAGS := $(CFLAGS) -m386 -DCPU=386 CFLAGS := $(CFLAGS) -m386 -DCPU=386
......
...@@ -136,9 +136,7 @@ CONFIG_EL3=y ...@@ -136,9 +136,7 @@ CONFIG_EL3=y
# #
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_MINIX_FS=y CONFIG_MINIX_FS=y
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set # CONFIG_VFAT_FS is not set
...@@ -151,6 +149,7 @@ CONFIG_ISO9660_FS=y ...@@ -151,6 +149,7 @@ CONFIG_ISO9660_FS=y
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# #
......
...@@ -22,7 +22,8 @@ all: kernel.o head.o ...@@ -22,7 +22,8 @@ all: kernel.o head.o
O_TARGET := kernel.o O_TARGET := kernel.o
O_OBJS := process.o signal.o entry.o traps.o irq.o vm86.o bios32.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 ifdef CONFIG_MCA
O_OBJS += mca.o O_OBJS += mca.o
......
...@@ -284,8 +284,7 @@ void hard_reset_now (void) ...@@ -284,8 +284,7 @@ void hard_reset_now (void)
if(!reboot_thru_bios) { if(!reboot_thru_bios) {
sti(); sti();
/* rebooting needs to touch the page at absolute addr 0 */ /* rebooting needs to touch the page at absolute addr 0 */
pg0[0] = 7; *((unsigned short *)__va(0x472)) = reboot_mode;
*((unsigned short *)0x472) = reboot_mode;
for (;;) { for (;;) {
int i; int i;
for (i=0; i<100; i++) { for (i=0; i<100; i++) {
......
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
O_TARGET := amiga.o O_TARGET := amiga.o
O_OBJS := config.o amikeyb.o amiints.o cia.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 ifdef CONFIG_FB_CYBER
O_OBJS := $(O_OBJS) cyberfb.o O_OBJS := $(O_OBJS) cyberfb.o
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
O_TARGET := atari.o O_TARGET := atari.o
O_OBJS := config.o atakeyb.o ataints.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 include $(TOPDIR)/Rules.make
...@@ -149,9 +149,7 @@ CONFIG_ATARI_SCSI=y ...@@ -149,9 +149,7 @@ CONFIG_ATARI_SCSI=y
# #
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_MINIX_FS=y CONFIG_MINIX_FS=y
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set # CONFIG_VFAT_FS is not set
......
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
all: kernel.o head.o all: kernel.o head.o
O_TARGET := kernel.o O_TARGET := kernel.o
O_OBJS := entry.o process.o traps.o ints.o signal.o ptrace.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 head.o: head.S
......
...@@ -200,7 +200,7 @@ asmlinkage int do_sigreturn(unsigned long __unused) ...@@ -200,7 +200,7 @@ asmlinkage int do_sigreturn(unsigned long __unused)
" .align 4\n" " .align 4\n"
" .long 2b,4b\n" " .long 2b,4b\n"
" .long 3b,4b\n" " .long 3b,4b\n"
".text" ".previous"
: /* no outputs, it doesn't ever return */ : /* no outputs, it doesn't ever return */
: "a" (sw), "d" (fsize), "d" (frame_offset/4-1), : "a" (sw), "d" (fsize), "d" (frame_offset/4-1),
"n" (frame_offset), "a" (fp) "n" (frame_offset), "a" (fp)
......
...@@ -241,7 +241,7 @@ csum_partial_copy_fromuser(const char *src, char *dst, int len, int sum) ...@@ -241,7 +241,7 @@ csum_partial_copy_fromuser(const char *src, char *dst, int len, int sum)
".long 19b,7b\n" ".long 19b,7b\n"
".long 20b,7b\n" ".long 20b,7b\n"
".long 21b,7b\n" ".long 21b,7b\n"
".text" ".previous"
: "=d" (sum), "=d" (len), "=a" (src), "=a" (dst), : "=d" (sum), "=d" (len), "=a" (src), "=a" (dst),
"=&d" (tmp1), "=&d" (tmp2) "=&d" (tmp1), "=&d" (tmp2)
: "0" (sum), "1" (len), "2" (src), "3" (dst) : "0" (sum), "1" (len), "2" (src), "3" (dst)
......
...@@ -53,9 +53,7 @@ CONFIG_BLK_DEV_FD=y ...@@ -53,9 +53,7 @@ CONFIG_BLK_DEV_FD=y
# Filesystems # Filesystems
# #
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_EXT_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_XIA_FS is not set
# CONFIG_MSDOS_FS is not set # CONFIG_MSDOS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
# CONFIG_ISO9660_FS is not set # CONFIG_ISO9660_FS is not set
......
...@@ -167,9 +167,7 @@ CONFIG_MYRI_SBUS=m ...@@ -167,9 +167,7 @@ CONFIG_MYRI_SBUS=m
# #
CONFIG_QUOTA=y CONFIG_QUOTA=y
CONFIG_MINIX_FS=m CONFIG_MINIX_FS=m
CONFIG_EXT_FS=m
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_XIA_FS=m
CONFIG_FAT_FS=m CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m CONFIG_VFAT_FS=m
......
...@@ -67,10 +67,8 @@ extern void dump_thread(struct pt_regs *, struct user *); ...@@ -67,10 +67,8 @@ extern void dump_thread(struct pt_regs *, struct user *);
*/ */
#define EXPORT_SYMBOL_DOT(sym) \ #define EXPORT_SYMBOL_DOT(sym) \
extern int __sparc_dot_ ## sym (int) __asm__("." ## #sym); \ extern int __sparc_dot_ ## sym (int) __asm__("." #sym); \
const struct module_symbol __export_dot_##sym \ __EXPORT_SYMBOL(__sparc_dot_ ## sym, "." #sym)
__attribute__((section("__ksymtab"))) = \
{ (unsigned long) &__sparc_dot_ ## sym, "." ## #sym }
/* used by various drivers */ /* used by various drivers */
......
...@@ -779,10 +779,6 @@ sunos_mount(char *type, char *dir, int flags, void *data) ...@@ -779,10 +779,6 @@ sunos_mount(char *type, char *dir, int flags, void *data)
dev_fname = (char *) data; dev_fname = (char *) data;
} else if(strcmp(type, "minix") == 0) { } else if(strcmp(type, "minix") == 0) {
dev_fname = (char *) data; 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) { } else if(strcmp(type, "nfs") == 0) {
return sunos_nfs_mount (dir, flags, data); return sunos_nfs_mount (dir, flags, data);
} else if(strcmp(type, "ufs") == 0) { } else if(strcmp(type, "ufs") == 0) {
......
...@@ -202,7 +202,7 @@ __asm__ __volatile__ ( \ ...@@ -202,7 +202,7 @@ __asm__ __volatile__ ( \
".word 14b, " #errh "\n\t" \ ".word 14b, " #errh "\n\t" \
".word 15b, " #errh "\n\t" \ ".word 15b, " #errh "\n\t" \
".word 16b, " #errh "\n\n\t" \ ".word 16b, " #errh "\n\n\t" \
".text\n\t" \ ".previous\n\t" \
: : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed) \ : : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed) \
: "l1", "l2", "g7", "g1"); \ : "l1", "l2", "g7", "g1"); \
}) })
...@@ -256,7 +256,7 @@ __asm__ __volatile__ ( \ ...@@ -256,7 +256,7 @@ __asm__ __volatile__ ( \
".word 15b, " #errh "\n\t" \ ".word 15b, " #errh "\n\t" \
".word 16b, " #errh "\n\t" \ ".word 16b, " #errh "\n\t" \
".word 17b, " #errh "\n\n\t" \ ".word 17b, " #errh "\n\n\t" \
".text\n\t" \ ".previous\n\t" \
: : "r" (dst_addr), "r" (size), "r" (src_val) \ : : "r" (dst_addr), "r" (size), "r" (src_val) \
: "l1", "l2", "g7", "g1"); \ : "l1", "l2", "g7", "g1"); \
}) })
......
...@@ -165,9 +165,7 @@ CONFIG_MYRI_SBUS=y ...@@ -165,9 +165,7 @@ CONFIG_MYRI_SBUS=y
# #
CONFIG_QUOTA=y CONFIG_QUOTA=y
CONFIG_MINIX_FS=y CONFIG_MINIX_FS=y
CONFIG_EXT_FS=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_XIA_FS=y
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y CONFIG_VFAT_FS=y
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/minix_fs.h> #include <linux/minix_fs.h>
#include <linux/ext2_fs.h> #include <linux/ext2_fs.h>
#include <linux/romfs_fs.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -328,6 +329,7 @@ void cleanup_module(void) ...@@ -328,6 +329,7 @@ void cleanup_module(void)
* We currently check for the following magic numbers: * We currently check for the following magic numbers:
* minix * minix
* ext2 * ext2
* romfs
* gzip * gzip
*/ */
int int
...@@ -336,6 +338,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block) ...@@ -336,6 +338,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
const int size = 512; const int size = 512;
struct minix_super_block *minixsb; struct minix_super_block *minixsb;
struct ext2_super_block *ext2sb; struct ext2_super_block *ext2sb;
struct romfs_super_block *romfsb;
int nblocks = -1; int nblocks = -1;
int max_blocks; int max_blocks;
unsigned char *buf; unsigned char *buf;
...@@ -346,6 +349,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block) ...@@ -346,6 +349,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
minixsb = (struct minix_super_block *) buf; minixsb = (struct minix_super_block *) buf;
ext2sb = (struct ext2_super_block *) buf; ext2sb = (struct ext2_super_block *) buf;
romfsb = (struct romfs_super_block *) buf;
memset(buf, 0xe5, size); memset(buf, 0xe5, size);
/* /*
...@@ -368,6 +372,16 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block) ...@@ -368,6 +372,16 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
goto done; 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 * 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) ...@@ -396,6 +410,7 @@ identify_ramdisk_image(kdev_t device, struct file *fp, int start_block)
nblocks = ext2sb->s_blocks_count; nblocks = ext2sb->s_blocks_count;
goto done; goto done;
} }
printk(KERN_NOTICE printk(KERN_NOTICE
"RAMDISK: Couldn't find valid ramdisk image starting at %d.\n", "RAMDISK: Couldn't find valid ramdisk image starting at %d.\n",
start_block); start_block);
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
* int rs_open(struct tty_struct * tty, struct file * filp) * int rs_open(struct tty_struct * tty, struct file * filp)
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/signal.h> #include <linux/signal.h>
...@@ -35,7 +36,6 @@ ...@@ -35,7 +36,6 @@
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <linux/config.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/fcntl.h> #include <linux/fcntl.h>
...@@ -2931,6 +2931,11 @@ static void autoconfig(struct serial_state * state) ...@@ -2931,6 +2931,11 @@ static void autoconfig(struct serial_state * state)
} }
state->xmit_fifo_size = uart_config[state->type].dfl_xmit_fifo_size; 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)"); request_region(info->port,8,"serial(auto)");
/* /*
...@@ -3099,11 +3104,6 @@ int register_serial(struct serial_struct *req) ...@@ -3099,11 +3104,6 @@ int register_serial(struct serial_struct *req)
state->port = req->port; state->port = req->port;
state->flags = req->flags; 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); autoconfig(state);
if (state->type == PORT_UNKNOWN) { if (state->type == PORT_UNKNOWN) {
restore_flags(flags); restore_flags(flags);
......
...@@ -35,9 +35,8 @@ ...@@ -35,9 +35,8 @@
/*****************************************************************************/ /*****************************************************************************/
#include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/net.h> #include <linux/net.h>
#include <linux/in.h> #include <linux/in.h>
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
* released under the GNU General Public License Version 2. * released under the GNU General Public License Version 2.
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
......
...@@ -434,8 +434,8 @@ static struct device dev_ultra[MAX_ULTRA_CARDS] = { ...@@ -434,8 +434,8 @@ static struct device dev_ultra[MAX_ULTRA_CARDS] = {
static int io[MAX_ULTRA_CARDS] = { 0, }; static int io[MAX_ULTRA_CARDS] = { 0, };
static int irq[MAX_ULTRA_CARDS] = { 0, }; static int irq[MAX_ULTRA_CARDS] = { 0, };
MODULE_PARM(io, "1-" __MODULE_PARM(MAX_ULTRA_CARDS) "i"); MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ULTRA_CARDS) "i");
MODULE_PARM(irq, "1-" __MODULE_PARM(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. /* This is set up so that only a single autoprobe takes place per call.
ISA device autoprobes on a running machine are not recommended. */ 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) Thu Dec 26 22:00 1996 Gerard Roudier (groudier@club-internet.fr)
* ncr53c8xx.c ncr53c8xx.h README.ncr53c8xx - revision 1.16b * ncr53c8xx.c ncr53c8xx.h README.ncr53c8xx - revision 1.16b
- Remove useless code. - Remove useless code.
......
...@@ -32,6 +32,8 @@ dep_tristate 'EATA-PIO (old DPT PM2001, PM2012A) support' CONFIG_SCSI_EATA_PIO $ ...@@ -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 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 if [ "$CONFIG_SCSI_EATA" != "n" ]; then
bool ' enable tagged command queueing' CONFIG_SCSI_EATA_TAGGED_QUEUE 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 fi
dep_tristate 'Future Domain 16xx SCSI support' CONFIG_SCSI_FUTURE_DOMAIN $CONFIG_SCSI 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 dep_tristate 'Generic NCR5380/53c400 SCSI support' CONFIG_SCSI_GENERIC_NCR5380 $CONFIG_SCSI
...@@ -74,6 +76,10 @@ fi ...@@ -74,6 +76,10 @@ fi
dep_tristate 'Seagate ST-02 and Future Domain TMC-8xx SCSI support' CONFIG_SCSI_SEAGATE $CONFIG_SCSI 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 'Trantor T128/T128F/T228 SCSI support' CONFIG_SCSI_T128 $CONFIG_SCSI
dep_tristate 'UltraStor 14F/34F support' CONFIG_SCSI_U14_34F $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 'UltraStor SCSI support' CONFIG_SCSI_ULTRASTOR $CONFIG_SCSI
#dep_tristate 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG $CONFIG_SCSI #dep_tristate 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG $CONFIG_SCSI
endmenu endmenu
...@@ -30,11 +30,19 @@ TOPDIR = ../.. ...@@ -30,11 +30,19 @@ TOPDIR = ../..
endif endif
ifeq ($(CONFIG_SCSI),y) 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) ifeq ($(CONFIG_PROC_FS),y)
L_OBJS += scsi_proc.o L_OBJS += scsi_proc.o
endif endif
LX_OBJS += scsi_syms.o
else else
ifeq ($(CONFIG_SCSI),m) ifeq ($(CONFIG_SCSI),m)
MX_OBJS += scsi_syms.o MX_OBJS += scsi_syms.o
......
...@@ -4,7 +4,7 @@ Written by Gerard Roudier <groudier@club-internet.fr> ...@@ -4,7 +4,7 @@ Written by Gerard Roudier <groudier@club-internet.fr>
21 Rue Carnot 21 Rue Carnot
95170 DEUIL LA BARRE - FRANCE 95170 DEUIL LA BARRE - FRANCE
29 December 1996 12 January 1997
=============================================================================== ===============================================================================
1. Introduction 1. Introduction
...@@ -62,6 +62,10 @@ through the proc SCSI file system read / write operations. ...@@ -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. 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 I am not a native speaker of English and there are probably lots of
mistakes in this README file. Any help will be welcome. mistakes in this README file. Any help will be welcome.
...@@ -491,8 +495,20 @@ Debug mode ...@@ -491,8 +495,20 @@ Debug mode
DEBUG_FREEZE 0x800 DEBUG_FREEZE 0x800
DEBUG_RESTART 0x1000 DEBUG_RESTART 0x1000
You can play safely with DEBUG_NEGO. However, some of these flags may You can play safely with DEBUG_NEGO. However, some of these flags may
generate bunches of syslog messages. 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 10.3 Advised boot setup commands
...@@ -508,7 +524,8 @@ My personnal system works flawlessly with the following setup: ...@@ -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 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" "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 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 *)); ...@@ -12,7 +12,7 @@ int eata2x_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int eata2x_abort(Scsi_Cmnd *); int eata2x_abort(Scsi_Cmnd *);
int eata2x_reset(Scsi_Cmnd *, unsigned int); int eata2x_reset(Scsi_Cmnd *, unsigned int);
#define EATA_VERSION "2.40.00" #define EATA_VERSION "2.50.00"
#define EATA { \ #define EATA { \
......
This diff is collapsed.
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
/* /*
** Name and revision of the driver ** 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, ** If SCSI_NCR_SETUP_SPECIAL_FEATURES is defined,
...@@ -292,7 +292,8 @@ ...@@ -292,7 +292,8 @@
1, \ 1, \
SCSI_NCR_SETUP_DEFAULT_TAGS, \ SCSI_NCR_SETUP_DEFAULT_TAGS, \
SCSI_NCR_SETUP_DEFAULT_SYNC, \ SCSI_NCR_SETUP_DEFAULT_SYNC, \
0x00 \ 0x00, \
7 \
} }
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
* a module. * a module.
*/ */
#define __NO_VERSION__ #define __NO_VERSION__
#include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#ifdef CONFIG_MODULES #ifdef CONFIG_MODULES
......
...@@ -88,4 +88,8 @@ ...@@ -88,4 +88,8 @@
files and the file number status is retained. */ files and the file number status is retained. */
#define ST_FAST_MTEOM 0 #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 #endif
This diff is collapsed.
...@@ -11,7 +11,7 @@ int u14_34f_abort(Scsi_Cmnd *); ...@@ -11,7 +11,7 @@ int u14_34f_abort(Scsi_Cmnd *);
int u14_34f_reset(Scsi_Cmnd *, unsigned int); int u14_34f_reset(Scsi_Cmnd *, unsigned int);
int u14_34f_biosparam(Disk *, kdev_t, 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 { \ #define ULTRASTOR_14_34F { \
NULL, /* Ptr for modules */ \ NULL, /* Ptr for modules */ \
......
...@@ -6,9 +6,7 @@ comment 'Filesystems' ...@@ -6,9 +6,7 @@ comment 'Filesystems'
bool 'Quota support' CONFIG_QUOTA bool 'Quota support' CONFIG_QUOTA
tristate 'Minix fs support' CONFIG_MINIX_FS tristate 'Minix fs support' CONFIG_MINIX_FS
tristate 'Extended fs support' CONFIG_EXT_FS
tristate 'Second extended fs support' CONFIG_EXT2_FS tristate 'Second extended fs support' CONFIG_EXT2_FS
tristate 'xiafs filesystem support' CONFIG_XIA_FS
# msdos filesystems # msdos filesystems
tristate 'DOS FAT fs support' CONFIG_FAT_FS tristate 'DOS FAT fs support' CONFIG_FAT_FS
...@@ -38,6 +36,7 @@ tristate 'ISO9660 cdrom filesystem support' CONFIG_ISO9660_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 'OS/2 HPFS filesystem support (read only)' CONFIG_HPFS_FS
tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS
tristate 'Amiga FFS filesystem support' CONFIG_AFFS_FS tristate 'Amiga FFS filesystem support' CONFIG_AFFS_FS
tristate 'ROM filesystem support' CONFIG_ROMFS_FS
if [ "$CONFIG_AFFS_FS" != "n" ]; then if [ "$CONFIG_AFFS_FS" != "n" ]; then
define_bool CONFIG_AMIGA_PARTITION y define_bool CONFIG_AMIGA_PARTITION y
fi fi
...@@ -47,3 +46,4 @@ if [ "$CONFIG_UFS_FS" != "n" ]; then ...@@ -47,3 +46,4 @@ if [ "$CONFIG_UFS_FS" != "n" ]; then
bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL
fi fi
endmenu endmenu
...@@ -16,8 +16,8 @@ O_OBJS = open.o read_write.o inode.o devices.o file_table.o buffer.o \ ...@@ -16,8 +16,8 @@ O_OBJS = open.o read_write.o inode.o devices.o file_table.o buffer.o \
dcache.o $(BINFMTS) dcache.o $(BINFMTS)
MOD_LIST_NAME := FS_MODULES MOD_LIST_NAME := FS_MODULES
ALL_SUB_DIRS = minix ext ext2 fat msdos vfat proc isofs nfs xiafs umsdos \ ALL_SUB_DIRS = minix ext2 fat msdos vfat proc isofs nfs umsdos \
hpfs sysv smbfs ncpfs ufs affs hpfs sysv smbfs ncpfs ufs affs romfs
ifeq ($(CONFIG_QUOTA),y) ifeq ($(CONFIG_QUOTA),y)
O_OBJS += dquot.o O_OBJS += dquot.o
...@@ -33,14 +33,6 @@ else ...@@ -33,14 +33,6 @@ else
endif endif
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) ifeq ($(CONFIG_EXT2_FS),y)
SUB_DIRS += ext2 SUB_DIRS += ext2
else else
...@@ -97,14 +89,6 @@ else ...@@ -97,14 +89,6 @@ else
endif endif
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) ifeq ($(CONFIG_UMSDOS_FS),y)
SUB_DIRS += umsdos SUB_DIRS += umsdos
else else
...@@ -161,6 +145,14 @@ else ...@@ -161,6 +145,14 @@ else
endif endif
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) ifeq ($(CONFIG_BINFMT_ELF),y)
BINFMTS += binfmt_elf.o BINFMTS += binfmt_elf.o
else else
......
...@@ -1238,9 +1238,9 @@ static int elf_core_dump(long signr, struct pt_regs * regs) ...@@ -1238,9 +1238,9 @@ static int elf_core_dump(long signr, struct pt_regs * regs)
unsigned long addr = vma->vm_start; unsigned long addr = vma->vm_start;
unsigned long len = vma->vm_end - vma->vm_start; unsigned long len = vma->vm_end - vma->vm_start;
i++;
if (!maydump(vma)) if (!maydump(vma))
continue; continue;
i++;
#ifdef DEBUG #ifdef DEBUG
printk("elf_core_dump: writing %08lx %lx\n", addr, len); printk("elf_core_dump: writing %08lx %lx\n", addr, len);
#endif #endif
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/ext_fs.h>
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/fcntl.h> #include <linux/fcntl.h>
#include <linux/errno.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 @@ ...@@ -4,6 +4,7 @@
* Exported kernel symbols for the low-level FAT-based fs support. * Exported kernel symbols for the low-level FAT-based fs support.
* *
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mm.h> #include <linux/mm.h>
......
...@@ -10,9 +10,7 @@ ...@@ -10,9 +10,7 @@
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/minix_fs.h> #include <linux/minix_fs.h>
#include <linux/ext_fs.h>
#include <linux/ext2_fs.h> #include <linux/ext2_fs.h>
#include <linux/xia_fs.h>
#include <linux/msdos_fs.h> #include <linux/msdos_fs.h>
#include <linux/umsdos_fs.h> #include <linux/umsdos_fs.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
...@@ -24,6 +22,7 @@ ...@@ -24,6 +22,7 @@
#include <linux/ncp_fs.h> #include <linux/ncp_fs.h>
#include <linux/affs_fs.h> #include <linux/affs_fs.h>
#include <linux/ufs_fs.h> #include <linux/ufs_fs.h>
#include <linux/romfs_fs.h>
#include <linux/major.h> #include <linux/major.h>
extern void device_setup(void); extern void device_setup(void);
...@@ -42,18 +41,10 @@ asmlinkage int sys_setup(void) ...@@ -42,18 +41,10 @@ asmlinkage int sys_setup(void)
binfmt_setup(); binfmt_setup();
#ifdef CONFIG_EXT_FS
init_ext_fs();
#endif
#ifdef CONFIG_EXT2_FS #ifdef CONFIG_EXT2_FS
init_ext2_fs(); init_ext2_fs();
#endif #endif
#ifdef CONFIG_XIA_FS
init_xiafs_fs();
#endif
#ifdef CONFIG_MINIX_FS #ifdef CONFIG_MINIX_FS
init_minix_fs(); init_minix_fs();
#endif #endif
...@@ -110,6 +101,11 @@ asmlinkage int sys_setup(void) ...@@ -110,6 +101,11 @@ asmlinkage int sys_setup(void)
init_ufs_fs(); init_ufs_fs();
#endif #endif
#ifdef CONFIG_ROMFS_FS
init_romfs_fs();
#endif
mount_root(); mount_root();
return 0; return 0;
} }
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* *
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/stat.h> #include <linux/stat.h>
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* These symbols are used by umsdos. * These symbols are used by umsdos.
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mm.h> #include <linux/mm.h>
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
* *
*/ */
#include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
* *
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
......
#include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/proc_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 # Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here # removes any old dependencies. DON'T put your own dependencies here
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
# #
# Note 2! The CFLAGS definitions are now in the main makefile... # Note 2! The CFLAGS definitions are now in the main makefile...
O_TARGET := xiafs.o O_TARGET := romfs.o
O_OBJS := bitmap.o truncate.o namei.o inode.o file.o dir.o symlink.o fsync.o O_OBJS := inode.o
M_OBJS := $(O_TARGET) M_OBJS := $(O_TARGET)
include $(TOPDIR)/Rules.make include $(TOPDIR)/Rules.make
This diff is collapsed.
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* *
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
* the superblock. * the superblock.
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
* Gertjan van Wingerde <gertjan@cs.vu.nl> * Gertjan van Wingerde <gertjan@cs.vu.nl>
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
* the problem, send a script that demonstrates it. * the problem, send a script that demonstrates it.
*/ */
#include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.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.
/*
* linux/fs/xiafs/xiafs_mac.h
*
* Copyright (C) Q. Frank Xia, 1993.
*/
extern char internal_error_message[];
#define INTERN_ERR internal_error_message, __FILE__, __LINE__
#define WHERE_ERR __FILE__, __LINE__
#define XIAFS_ZSHIFT(sp) ((sp)->u.xiafs_sb.s_zone_shift)
#define XIAFS_ZSIZE(sp) (BLOCK_SIZE << XIAFS_ZSHIFT(sp))
#define XIAFS_ZSIZE_BITS(sp) (BLOCK_SIZE_BITS + XIAFS_ZSHIFT(sp))
#define XIAFS_ADDRS_PER_Z(sp) (BLOCK_SIZE >> (2 - XIAFS_ZSHIFT(sp)))
#define XIAFS_ADDRS_PER_Z_BITS(sp) (BLOCK_SIZE_BITS - 2 + XIAFS_ZSHIFT(sp))
#define XIAFS_BITS_PER_Z(sp) (BLOCK_SIZE << (3 + XIAFS_ZSHIFT(sp)))
#define XIAFS_BITS_PER_Z_BITS(sp) (BLOCK_SIZE_BITS + 3 + XIAFS_ZSHIFT(sp))
#define XIAFS_INODES_PER_Z(sp) (_XIAFS_INODES_PER_BLOCK << XIAFS_ZSHIFT(sp))
/* Use the most significant bytes of zone pointers to store block counter. */
/* This is ugly, but it works. Note, We have another 7 bytes for "expansion". */
#define XIAFS_GET_BLOCKS(row_ip, blocks) \
blocks=((((row_ip)->i_zone[0] >> 24) & 0xff )|\
(((row_ip)->i_zone[1] >> 16) & 0xff00 )|\
(((row_ip)->i_zone[2] >> 8) & 0xff0000 ) )
/* XIAFS_PUT_BLOCKS should be called before saving zone pointers */
#define XIAFS_PUT_BLOCKS(row_ip, blocks) \
(row_ip)->i_zone[2]=((blocks)<< 8) & 0xff000000;\
(row_ip)->i_zone[1]=((blocks)<<16) & 0xff000000;\
(row_ip)->i_zone[0]=((blocks)<<24) & 0xff000000
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -163,11 +163,12 @@ __asm__ __volatile__( \ ...@@ -163,11 +163,12 @@ __asm__ __volatile__( \
".align 4\n" \ ".align 4\n" \
"3:\n\t" \ "3:\n\t" \
"b 2b\n\t" \ "b 2b\n\t" \
" mov %3, %0\n\n\t" \ " mov %3, %0\n\t" \
".previous\n\n\t" \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b, 3b\n\t" \ ".word 1b, 3b\n\t" \
".text\n\n\t" \ ".previous\n\n\t" \
: "=&r" (ret) : "r" (x), "r" (__m(addr)), \ : "=&r" (ret) : "r" (x), "r" (__m(addr)), \
"i" (-EFAULT)) "i" (-EFAULT))
...@@ -179,7 +180,7 @@ __asm__ __volatile__( \ ...@@ -179,7 +180,7 @@ __asm__ __volatile__( \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b, __ret_efault\n\n\t" \ ".word 1b, __ret_efault\n\n\t" \
".text\n\n\t" \ ".previous\n\n\t" \
: "=r" (foo) : "r" (x), "r" (__m(addr))); \ : "=r" (foo) : "r" (x), "r" (__m(addr))); \
else \ else \
__asm__ __volatile( \ __asm__ __volatile( \
...@@ -189,11 +190,12 @@ __asm__ __volatile( \ ...@@ -189,11 +190,12 @@ __asm__ __volatile( \
".align 4\n" \ ".align 4\n" \
"3:\n\t" \ "3:\n\t" \
"ret\n\t" \ "ret\n\t" \
" restore %%g0, %3, %%o0\n\n\t" \ " restore %%g0, %3, %%o0\n\t" \
".previous\n\n\t" \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b, 3b\n\n\t" \ ".word 1b, 3b\n\n\t" \
".text\n\n\t" \ ".previous\n\n\t" \
: "=r" (foo) : "r" (x), "r" (__m(addr)), "i" (ret)) : "=r" (foo) : "r" (x), "r" (__m(addr)), "i" (ret))
extern int __put_user_bad(void); extern int __put_user_bad(void);
...@@ -250,10 +252,11 @@ __asm__ __volatile__( \ ...@@ -250,10 +252,11 @@ __asm__ __volatile__( \
"clr %1\n\t" \ "clr %1\n\t" \
"b 2b\n\t" \ "b 2b\n\t" \
" mov %3, %0\n\n\t" \ " mov %3, %0\n\n\t" \
".previous\n\t" \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b, 3b\n\n\t" \ ".word 1b, 3b\n\n\t" \
".text\n\t" \ ".previous\n\t" \
: "=&r" (ret), "=&r" (x) : "r" (__m(addr)), \ : "=&r" (ret), "=&r" (x) : "r" (__m(addr)), \
"i" (-EFAULT)) "i" (-EFAULT))
...@@ -265,7 +268,7 @@ __asm__ __volatile__( \ ...@@ -265,7 +268,7 @@ __asm__ __volatile__( \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b,__ret_efault\n\n\t" \ ".word 1b,__ret_efault\n\n\t" \
".text\n\t" \ ".previous\n\t" \
: "=&r" (x) : "r" (__m(addr))); \ : "=&r" (x) : "r" (__m(addr))); \
else \ else \
__asm__ __volatile__( \ __asm__ __volatile__( \
...@@ -276,10 +279,11 @@ __asm__ __volatile__( \ ...@@ -276,10 +279,11 @@ __asm__ __volatile__( \
"3:\n\t" \ "3:\n\t" \
"ret\n\t" \ "ret\n\t" \
" restore %%g0, %2, %%o0\n\n\t" \ " restore %%g0, %2, %%o0\n\n\t" \
".previous\n\t" \
".section __ex_table,#alloc\n\t" \ ".section __ex_table,#alloc\n\t" \
".align 4\n\t" \ ".align 4\n\t" \
".word 1b, 3b\n\n\t" \ ".word 1b, 3b\n\n\t" \
".text\n\t" \ ".previous\n\t" \
: "=&r" (x) : "r" (__m(addr)), "i" (retval)) : "=&r" (x) : "r" (__m(addr)), "i" (retval))
extern int __get_user_bad(void); extern int __get_user_bad(void);
......
This diff is collapsed.
This diff is collapsed.
#ifndef _EXT_FS_I
#define _EXT_FS_I
/*
* extended file system inode data in memory
*/
struct ext_inode_info {
unsigned long i_data[16];
};
#endif
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