Commit 0da8dd36 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.3.97

parent aab94e60
...@@ -786,8 +786,8 @@ S: USA ...@@ -786,8 +786,8 @@ S: USA
N: Dirk Melchers N: Dirk Melchers
E: dirk@merlin.nbg.sub.org E: dirk@merlin.nbg.sub.org
D: 8 bit XT hard disk driver for OMTI5520 D: 8 bit XT hard disk driver for OMTI5520
S: Branderweg 4 S: Heidackerstrass 19
S: D-91058 Erlangen S: D-91056 Erlangen
S: Germany S: Germany
N: Michael Meskes N: Michael Meskes
...@@ -1306,7 +1306,7 @@ S: 6525 EZ Nijmegen ...@@ -1306,7 +1306,7 @@ S: 6525 EZ Nijmegen
S: The Netherlands S: The Netherlands
N: Lars Wirzenius N: Lars Wirzenius
E: lars.wirzenius@helsinki.fi E: liw@iki.fi
D: Linux System Administrator's Guide D: Linux System Administrator's Guide
D: Co-moderator, comp.os.linux.announce D: Co-moderator, comp.os.linux.announce
D: Original sprintf in kernel D: Original sprintf in kernel
...@@ -1316,8 +1316,8 @@ D: Linux News (electronic magazine) ...@@ -1316,8 +1316,8 @@ D: Linux News (electronic magazine)
D: Meta-FAQ, originator D: Meta-FAQ, originator
D: INFO-SHEET, former maintainer D: INFO-SHEET, former maintainer
D: Author of the longest-living linux bug D: Author of the longest-living linux bug
S: Ohratie 16 C 198 S: Hernesaarenkatu 15 A 2
S: sf-01370 Vantaa S: Fin-00150 Helsinki
S: Finland S: Finland
N: Roger E. Wolff N: Roger E. Wolff
......
...@@ -2,13 +2,9 @@ This document contains a list of the latest releases of the most ...@@ -2,13 +2,9 @@ This document contains a list of the latest releases of the most
important packages for Linux as well as instructions for newcomers to important packages for Linux as well as instructions for newcomers to
the 1.3.x series of kernels. the 1.3.x series of kernels.
Last updated: Apr 27, 1996. Last updated: Apr 29, 1996.
Author: Chris Ricker (gt1355b@prism.gatech.edu), based on the original by Author: Chris Ricker (gt1355b@prism.gatech.edu), based on the original by
Alessandro Sigala (ssigala@globalnet.it. Alessandro Sigala (ssigala@globalnet.it).
Note: Due to time constraints, Alessandro is getting out of the Changes
business and I'll be picking up the job. Be gentle while I get my feet
wet ;-).
Current Releases Current Releases
**************** ****************
...@@ -18,7 +14,7 @@ Current Releases ...@@ -18,7 +14,7 @@ Current Releases
- Dynamic linker (ld.so) 1.7.14 - Dynamic linker (ld.so) 1.7.14
- GNU CC 2.7.2 - GNU CC 2.7.2
- Binutils 2.6.0.12 - Binutils 2.6.0.12
- Linux C Library Stable: 5.2.18, Exp: 5.3.9, Alpha: 5.3.12 - Linux C Library Stable: 5.2.18, Beta: 5.3.12
- Linux C++ Library 2.7.1.4 - Linux C++ Library 2.7.1.4
- Termcap 2.0.8 - Termcap 2.0.8
- Procps 0.99a - Procps 0.99a
...@@ -75,9 +71,9 @@ to this from 5.0.9 or earlier, be sure to read the `release.libc-5.2.18' ...@@ -75,9 +71,9 @@ to this from 5.0.9 or earlier, be sure to read the `release.libc-5.2.18'
file, since GNU make and a few other fairly important utils can be file, since GNU make and a few other fairly important utils can be
broken by the upgrade. broken by the upgrade.
The current (beta) Linux C Library release is 5.3.9. In this release The current (beta) Linux C Library release is 5.3.12. In this
there are some important changes that may cause troubles to buggy release there are some important changes that may cause troubles to
programs (programs that call free() on a pointer not returned by buggy programs (programs that call free() on a pointer not returned by
malloc() work with previous libc, but not with this release) then read malloc() work with previous libc, but not with this release) then read
the `release.libc-5.3.9' file carefully! In the latest libc releases a the `release.libc-5.3.9' file carefully! In the latest libc releases a
dirent bug, which erroneously defined d->reclen to d->namlen if USE_GNU dirent bug, which erroneously defined d->reclen to d->namlen if USE_GNU
...@@ -88,8 +84,8 @@ and recompile those programs (a patch for make is included in the file ...@@ -88,8 +84,8 @@ and recompile those programs (a patch for make is included in the file
is at the end of this file). is at the end of this file).
Also, the libc-5.3.x line has a known security hole relating to Also, the libc-5.3.x line has a known security hole relating to
rlogin. Unless you really need to upgrade for some reason, just stick rlogin. Libc-5.3.12 fixes this, so if you're going to run an
with 5.2.18 for now. experimental libc, be sure to upgrade to 5.3.12.
If you're getting an error message that is something to the effect of If you're getting an error message that is something to the effect of
...@@ -199,8 +195,18 @@ but I've never noticed any. ...@@ -199,8 +195,18 @@ but I've never noticed any.
The new named pipe behavior also causes problems with Hylafax. If The new named pipe behavior also causes problems with Hylafax. If
you're running the hylafax daemon, it will just keep eating up CPU time you're running the hylafax daemon, it will just keep eating up CPU time
until you have no idle time free. I'm not currently aware of any until you have no idle time free. To fix this, edit port.h included
patches that eliminate this behavior. with the Hylafax distribution and change the line
CONFIG_OPENFIFO="O_RDONLY"
to
CONFIG_OPENFIFO="O_RDWR"
A similar method (finding all named pipes opened read-only and
changing them to read-write) will fix any program that broke because of
this change.
Uugetty Uugetty
======= =======
...@@ -252,8 +258,8 @@ xntpd ...@@ -252,8 +258,8 @@ xntpd
===== =====
Older versions of xntpd will not work with the latest kernels. Older versions of xntpd will not work with the latest kernels.
Upgrade to xntp3.5c.tar.Z, available from Upgrade to xntp3.5f.tar.Z, available from
http://www.eecis.udel.edu/~ntp/. ftp://louie.udel.edu/pub/ntp/xntp3.5f.tar.Z.
Sound driver Sound driver
============ ============
...@@ -315,7 +321,8 @@ Quota ...@@ -315,7 +321,8 @@ Quota
Quota support has also been added. You need to get quotas-1.51 from Quota support has also been added. You need to get quotas-1.51 from
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz. ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz.
This will compile just fine after you copy its mntent.h over to This will compile just fine after you copy its mntent.h over to
/usr/include/mntent.h. /usr/include/mntent.h. I've uploaded this to sunsite as
ftp://sunsite.unc.edu/pub/Linux/system/Admin/quotas-1.51-tar.gz
APM support APM support
=========== ===========
...@@ -376,21 +383,21 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/release.gcc-2.7.2 ...@@ -376,21 +383,21 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/release.gcc-2.7.2
Linux C Library Linux C Library
=============== ===============
The latest 5.3.9 release: The stable 5.2.18 release:
ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.3.9.bin.tar.gz ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.2.18.bin.tar.gz
Installation notes: Installation notes for 5.2.18:
ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.3.9 ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.2.18
The latest 5.3.12 release:
ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.3.12.bin.tar.gz
Installation notes for 5.2.18:
ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.3.12
Patched make sources: Patched make sources:
ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74.patched.tar.gz ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74.patched.tar.gz
Patched make binary: Patched make binary:
ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74-direntfix-elf.tgz ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74-direntfix-elf.tgz
The stable 5.2.18 release:
ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.2.18.bin.tar.gz
Installation notes:
ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.2.18
Linux C++ Library Linux C++ Library
================= =================
......
...@@ -2831,20 +2831,6 @@ CONFIG_SMD_DISKLABEL ...@@ -2831,20 +2831,6 @@ CONFIG_SMD_DISKLABEL
via a removable medium like magneto-optical or ZIP drives. If you via a removable medium like magneto-optical or ZIP drives. If you
don't know what all this is about, say N. don't know what all this is about, say N.
AFFS filesystem support
CONFIG_AFFS_FS
AFFS is the filesystem used on Commodore Amiga computers. People
running Linux on other systems can say N here.
UFS filesystem support (read only)
CONFIG_UFS_FS
UFS (Unix File System) is the way files are organized on Sun Solaris
harddisks and floppies. If you want to be able to read those, say Y
here. Note that this option is generally not needed for floppies,
since a good portable way to transport files and directories between
unixes (and even other operating systems) is given by the tar
program ("man tar").
SMB filesystem support (to mount WfW shares etc..) SMB filesystem support (to mount WfW shares etc..)
CONFIG_SMB_FS CONFIG_SMB_FS
SMB (Server Message Buffer) is the protocol Windows for Workgroups SMB (Server Message Buffer) is the protocol Windows for Workgroups
......
$Id: README.aztcd,v 2.20 1996/03/12 18:31:33 root Exp root $ $Id: README.aztcd,v 2.30 1996/04/26 05:32:23 root Exp root $
Readme-File /usr/src/Documentation/cdrom/aztcd Readme-File /usr/src/Documentation/cdrom/aztcd
for Aztech CD-ROM CDA268-01A, ORCHID CD-3110, for
OKANO/WEARNES CDD110, Conrad TXC AZTECH CD-ROM CDA268-01A, ORCHID CD-3110,
CD-ROM Driver OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540
Version 2.2 and newer CD-ROM Drives
Version 2.3 and newer
(for other drives see 6.-8.) (for other drives see 6.-8.)
NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE
A PROPRIETARY INTERFACE (implemented on a sound card or on an A PROPRIETARY INTERFACE (implemented on a sound card or on an
ISA-AT-bus card). ISA-AT-bus card).
IT WILL DEFINITELY NOT WORK WITH CD-ROM DRIVES WITH *IDE*-INTERFACE, IT WILL DEFINITELY NOT WORK WITH CD-ROM DRIVES WITH *IDE*-INTERFACE,
such as the Aztech CDA269-031SE !!! IF YOU'RE USING A CD-ROM DRIVE such as the Aztech CDA269-031SE !!! (The only known exceptions are
'faked' IDE drives like the CyCDROM CR520ie which work with aztcd
under certain conditions, see 7.). IF YOU'RE USING A CD-ROM DRIVE
WITH IDE-INTERFACE, SOMETIMES ALSO CALLED ATAPI-COMPATIBLE, PLEASE WITH IDE-INTERFACE, SOMETIMES ALSO CALLED ATAPI-COMPATIBLE, PLEASE
USE THE ide-cd.c DRIVER, WRITTEN BY MARK LORD AND SCOTT SNYDER ! USE THE ide-cd.c DRIVER, WRITTEN BY MARK LORD AND SCOTT SNYDER !
THE STANDARD-KERNEL 1.2.x NOW ALSO SUPPORTS IDE-CDROM-DRIVES, SEE THE THE STANDARD-KERNEL 1.2.x NOW ALSO SUPPORTS IDE-CDROM-DRIVES, SEE THE
...@@ -267,9 +270,7 @@ they seem to use the same command codes. So it was quite simple to make the ...@@ -267,9 +270,7 @@ they seem to use the same command codes. So it was quite simple to make the
AZTECH driver work with these drives. AZTECH driver work with these drives.
Unfortunately I do not have any of these drives available, so I couldn't test Unfortunately I do not have any of these drives available, so I couldn't test
it myself. But I've got reports, that it works with ORCHID CDS3110 and Game- it myself. In some installations, it seems necessary to initialize the drive
Wave32 sound cards and also with WEARNES CDD110 and Conrad TXC in some different
combinations. In some installations, it seems necessary to initialize the drive
with the DOS driver before (especially if combined with a sound card) and then with the DOS driver before (especially if combined with a sound card) and then
do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'. do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'.
...@@ -278,6 +279,12 @@ If you do not succeed, read chapter DEBUGGING. Thanks in advance! ...@@ -278,6 +279,12 @@ If you do not succeed, read chapter DEBUGGING. Thanks in advance!
Sorry for the inconvenience, but it is difficult to develop for hardware, Sorry for the inconvenience, but it is difficult to develop for hardware,
which you don't have available for testing. So if you like, please help us. which you don't have available for testing. So if you like, please help us.
If you do have a CyCDROM CR520ie thanks to Hilmar Berger's help your chances
are good, that it will work with aztcd. The CR520ie is sold as an IDE-drive
and really is connected to the IDE interface (primary at 0x1F0 or secondary
at 0x170, configured as slave, not as master). Nevertheless it is not ATAPI
compatible but still uses Aztech's command codes.
8. DEBUGGING : IF YOU DON'T SUCCEED, TRY THE FOLLOWING 8. DEBUGGING : IF YOU DON'T SUCCEED, TRY THE FOLLOWING
-reread the complete README file -reread the complete README file
...@@ -290,9 +297,9 @@ which you don't have available for testing. So if you like, please help us. ...@@ -290,9 +297,9 @@ which you don't have available for testing. So if you like, please help us.
drive. By appropriately configuring the drive and the DOS driver you can drive. By appropriately configuring the drive and the DOS driver you can
check, whether your drive does operate in this mode correctly under DOS. If check, whether your drive does operate in this mode correctly under DOS. If
it does not operate under DOS, it won't under Linux. it does not operate under DOS, it won't under Linux.
If your drive's base address is something like 0x170 or 0x1F0 you most If your drive's base address is something like 0x170 or 0x1F0 (and it is
likely are having a IDE/ATAPI-compatible drive, which is not supported by not a CyCDROM CR520ie or CR 940ie) you most likely are having an IDE/ATAPI-
aztcd.c, use ide-cd.c instead. compatible drive, which is not supported by aztcd.c, use ide-cd.c instead.
Make sure the Base Address is configured correctly in aztcd.h, also make Make sure the Base Address is configured correctly in aztcd.h, also make
sure, that /dev/aztcd0 exists with the correct major number (compare it with sure, that /dev/aztcd0 exists with the correct major number (compare it with
the entry in file /usr/include/linux/major.h for the Aztech drive). the entry in file /usr/include/linux/major.h for the Aztech drive).
...@@ -463,6 +470,8 @@ SoundWave32 soundcards. ...@@ -463,6 +470,8 @@ SoundWave32 soundcards.
Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's
TXC drive. TXC drive.
Hilmar Berger delivered the patches for supporting CyCDROM CR520ie.
Anybody, who is interested in these items should have a look at 'ftp.gwdg.de', Anybody, who is interested in these items should have a look at 'ftp.gwdg.de',
directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'. directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'.
......
Maintainers And Source Submission Procedures List of maintainers and how to submit kernel changes
In order to keep things easy for the maintainers please try to Please try to follow the guidelines below. This will make things
follow the guidelines given. Not all of these guidelines matter for every easier on the maintainers. Not all of these guidelines matter for every
trivial patch so apply some common sense. trivial patch so apply some common sense.
1. Always _test_ your changes however small on at least 4 or 5 people, 1. Always _test_ your changes, however small, on at least 4 or
preferably many more. 5 people, preferably many more.
2. Try and release a few ALPHA test versions to the net. Announce them 2. Try and release a few ALPHA test versions to the net. Announce
onto the kernel channel and await results. This is especially important them onto the kernel channel and await results. This is especially
for device drivers because often thats the only way you will find things important for device drivers, because often thats the only way
like the fact version 3 firmware needs a magic fix you didn't know about, or you will find things like the fact version 3 firmware needs
some clown changed the chips on a board and not its name (Don't laugh look a magic fix you didn't know about, or some clown changed the
at the SMC etherpower for that). chips on a board and not its name. (Don't laugh! Look at the
SMC etherpower for that).
3. Make sure your changes compile correctly in multiple configurations. 3. Make sure your changes compile correctly in multiple
configurations.
4. When you are happy with a change make it generally available for 4. When you are happy with a change make it generally available for
testing and await feedback. testing and await feedback.
5. Make a patch available to the relevant maintainer in the list. Use 5. Make a patch available to the relevant maintainer in the list. Use
'diff -u' to make the patch easy to merge. Be prepared to get your changes 'diff -u' to make the patch easy to merge. Be prepared to get your
sent back with seemingly silly requests about formatting and variable names. changes sent back with seemingly silly requests about formatting
These aren't as silly as they seem, one job the maintainers (and especially and variable names. These aren't as silly as they seem. One
Linus) do is to keep things looking the same. Sometimes this means that job the maintainers (and especially Linus) do is to keep things
the clever hack in your driver to get around a problem actual needs to looking the same. Sometimes this means that the clever hack in
become a generalised kernel feature ready for next time. your driver to get around a problem actual needs to become a
generalised kernel feature ready for next time.
PLEASE try and include any credit lines you want added with the PLEASE try and include any credit lines you want added with the
patch. It avoids people being missed off by mistake and makes it easier to patch. It avoids people being missed off by mistake and makes
know who wants adding and who doesn't. it easier to know who wants adding and who doesn't.
PLEASE Document known bugs. If it doesn't work for everything or
does something very odd once a month document it. PLEASE document known bugs. If it doesn't work for everything
or does something very odd once a month document it.
6. Make sure you have the right to send any changes you make. If you 6. Make sure you have the right to send any changes you make. If you
do changes at work you may find your employer owns the patch not you. do changes at work you may find your employer owns the patch
not you.
7. Happy hacking 7. Happy hacking.
[This file is new: I've just put the existing network contacts in, other [This file is new: I've just put the existing network contacts in, other
...@@ -49,7 +55,8 @@ P: Person ...@@ -49,7 +55,8 @@ P: Person
M: Mail patches to M: Mail patches to
L: Mailing list that is relevant to this area L: Mailing list that is relevant to this area
W: Web-page with status/info W: Web-page with status/info
S: Status S: Status, one of the following:
Supported: Someone is actually paid to look after this (wildly Supported: Someone is actually paid to look after this (wildly
improbable). improbable).
Maintained: Someone actually looks after it. Maintained: Someone actually looks after it.
...@@ -57,9 +64,10 @@ S: Status ...@@ -57,9 +64,10 @@ S: Status
much other than throw the odd patch in. See below.. much other than throw the odd patch in. See below..
Orphan: No current maintainer [but maybe you could take the Orphan: No current maintainer [but maybe you could take the
role as you write your new code]. role as you write your new code].
Obsolete: Ex code. Something tagged obsolete generally means Obsolete: Old code. Something tagged obsolete generally means
its been replaced by a better system and you should its been replaced by a better system and you should
be using that. be using that.
3C501 NETWORK DRIVER 3C501 NETWORK DRIVER
P: Alan Cox P: Alan Cox
M: net-patches@lxorguk.ukuu.org.uk M: net-patches@lxorguk.ukuu.org.uk
......
VERSION = 1 VERSION = 1
PATCHLEVEL = 3 PATCHLEVEL = 3
SUBLEVEL = 96 SUBLEVEL = 97
ARCH = i386 ARCH = i386
......
...@@ -151,6 +151,9 @@ static inline struct _fpstate * save_i387_hard(struct _fpstate * buf) ...@@ -151,6 +151,9 @@ static inline struct _fpstate * save_i387_hard(struct _fpstate * buf)
static struct _fpstate * save_i387(struct _fpstate * buf) static struct _fpstate * save_i387(struct _fpstate * buf)
{ {
if (!current->used_math)
return NULL;
#ifndef CONFIG_MATH_EMULATION #ifndef CONFIG_MATH_EMULATION
return save_i387_hard(buf); return save_i387_hard(buf);
#else #else
......
...@@ -27,7 +27,7 @@ of linux-72: ...@@ -27,7 +27,7 @@ of linux-72:
If you give options both in the lilo config file and on the boot If you give options both in the lilo config file and on the boot
prompt, the option strings of both places are concatenated, the boot prompt, the option strings of both places are concatenated, the boot
prompt options coming last. That's why there are also options to prompt options coming last. That's why there are also options to
restore the default behaviour. restore the default behavior.
If you use the floppy driver as a module, use the following syntax: If you use the floppy driver as a module, use the following syntax:
insmod floppy floppy="<options>" insmod floppy floppy="<options>"
...@@ -49,7 +49,7 @@ available: floppy="daring two_fdc" insmod floppy ...@@ -49,7 +49,7 @@ available: floppy="daring two_fdc" insmod floppy
Obsolete. Use the floppy=<drive>,<type>,cmos option instead Obsolete. Use the floppy=<drive>,<type>,cmos option instead
floppy=asus_pci floppy=asus_pci
Sets the bitmask to allow only units 0 and 1. (The default) Sets the bit mask to allow only units 0 and 1. (The default)
floppy=daring floppy=daring
Tells the floppy driver that you have a well behaved floppy controller. Tells the floppy driver that you have a well behaved floppy controller.
...@@ -81,34 +81,71 @@ available: floppy="daring two_fdc" insmod floppy ...@@ -81,34 +81,71 @@ available: floppy="daring two_fdc" insmod floppy
floppy=nodma floppy=nodma
Tells the floppy driver not to use Dma for data transfers. Tells the floppy driver not to use Dma for data transfers.
This is needed on HP Omnibooks, which don't have a workable This is needed on HP Omnibooks, which don't have a workable
DMA channel for the floppy driver. DMA channel for the floppy driver. This option is also useful
if you frequently get "Unable to allocate DMA memory" messages.
Indeed, dma memory needs to be continuous in physical, and is
thus harder to find, whereas non-dma buffers may be allocated
in virtual memory. However, I advise against this if you have
an FDC without a FIFO (8272A or 82072). 82072A and later are
OK. You also need at least a 486 to use nodma.
If you use nodma mode, I suggest you also set the FIFO
threshold to 10 or lower, in order to limit the number of data
transfer interrupts.
floppy=dma floppy=dma
Tells the floppy driver that a workable DMA channel is available Tells the floppy driver that a workable DMA channel is available
(the default). (the default).
floppy=nofifo
Disables the FIFO entirely. This is needed if you get "Bus
master arbitration error" messages from your ethernet card (or
from other devices) while accessing the foppy.
floppy=fifo
Enables the FIFO (default)
floppy=<threshold>,fifo_depth
Sets the FIFO threshold. This is mostly relevant in DMA
mode. If this is higher, the floppy driver tolerates more
interrupt latency, but it triggers more interrupts (i.e. it
imposes more load on the rest of the system). If this is
lower, the interrupt latency should be lower too (faster
processor). The benefit of a lower threshold is less
interrupts.
To tune the fifo threshold, switch on over/underrun messages
using 'floppycontrol --messages'. Then access a floppy
disk. If you get a huge amount of "Over/Underrun - retrying"
messages, then the fifo threshold is too low. Try with a
higher value, until you only get an occasional Over/Underrun.
It is a good idea to compile the floppy driver as a module
when doing this tuning. Indeed, it allows to try different
fifo values whithout rebooting the machine for each test. Note
that you need to do 'floppycontrol --messages' every time you
re-inseert the module.
Usually, tuning the fifo threshold should not be needed, as
the default (0xa) is reasonable.
floppy=<drive>,<type>,cmos floppy=<drive>,<type>,cmos
Sets the cmos type of <drive> to <type>. This is mandatory if Sets the CMOS type of <drive> to <type>. This is mandatory if
you have more than two floppy drives (only two can be you have more than two floppy drives (only two can be
described in the physical cmos), or if your BIOS uses described in the physical CMOS), or if your BIOS uses
non-standard CMOS types. The CMOS types are: non-standard CMOS types. The CMOS types are:
0 - unknown or not installed 0 - Use the value of the physical CMOS
1 - 5 1/4 DD 1 - 5 1/4 DD
2 - 5 1/4 HD 2 - 5 1/4 HD
3 - 3 1/2 DD 3 - 3 1/2 DD
4 - 3 1/2 HD 4 - 3 1/2 HD
5 - 3 1/2 ED 5 - 3 1/2 ED
6 - 3 1/2 ED 6 - 3 1/2 ED
16 - unknown or not installed
(Note: there are two valid types for ED drives. This is because 5 was (Note: there are two valid types for ED drives. This is because 5 was
initially chosen to represent floppy *tapes*, and 6 for ED drives. initially chosen to represent floppy *tapes*, and 6 for ED drives.
AMI ignored this, and used 5 for ED drives. That's why the floppy AMI ignored this, and used 5 for ED drives. That's why the floppy
driver handles both) driver handles both)
Setting the CMOS to 0 for the first two drives (default) makes the
floppy driver read the physical cmos for those drives.
floppy=unexpected_interrupts floppy=unexpected_interrupts
Print a warning message when an unexpected interrupt is received Print a warning message when an unexpected interrupt is received
(default behaviour) (default behavior)
floppy=no_unexpected_interrupts floppy=no_unexpected_interrupts
floppy=L40SX floppy=L40SX
......
This diff is collapsed.
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#include <linux/mman.h> #include <linux/mman.h>
#include <linux/malloc.h> #include <linux/malloc.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
#include <linux/fd.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/system.h> #include <asm/system.h>
...@@ -90,11 +91,12 @@ static int rd_blocksizes[NUM_RAMDISKS]; ...@@ -90,11 +91,12 @@ static int rd_blocksizes[NUM_RAMDISKS];
* architecture-specific setup routine (from the stored bootsector * architecture-specific setup routine (from the stored bootsector
* information). * information).
*/ */
int rd_size = 4096; /* Size of the ramdisks */
#ifndef MODULE #ifndef MODULE
int rd_doload = 0; /* 1 = load ramdisk, 0 = don't load */ int rd_doload = 0; /* 1 = load ramdisk, 0 = don't load */
int rd_prompt = 1; /* 1 = prompt for ramdisk, 0 = don't prompt */ int rd_prompt = 1; /* 1 = prompt for ramdisk, 0 = don't prompt */
int rd_image_start = 0; /* starting block # of image */ int rd_image_start = 0; /* starting block # of image */
int rd_size = 4096; /* Size of the ramdisks */
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
unsigned long initrd_start,initrd_end; unsigned long initrd_start,initrd_end;
int mount_initrd = 1; /* zero if initrd should not be mounted */ int mount_initrd = 1; /* zero if initrd should not be mounted */
...@@ -489,7 +491,7 @@ static void rd_load_image(kdev_t device,int offset) ...@@ -489,7 +491,7 @@ static void rd_load_image(kdev_t device,int offset)
outfile.f_op->write(outfile.f_inode, &outfile, buf, outfile.f_op->write(outfile.f_inode, &outfile, buf,
BLOCK_SIZE); BLOCK_SIZE);
if (!(i % 16)) { if (!(i % 16)) {
printk(KERN_NOTICE "%c\b", rotator[rotate & 0x3]); printk("%c\b", rotator[rotate & 0x3]);
rotate++; rotate++;
} }
} }
...@@ -515,6 +517,9 @@ void rd_load() ...@@ -515,6 +517,9 @@ void rd_load()
if (MAJOR(ROOT_DEV) != FLOPPY_MAJOR) return; if (MAJOR(ROOT_DEV) != FLOPPY_MAJOR) return;
if (rd_prompt) { if (rd_prompt) {
#ifdef CONFIG_BLK_DEV_FD
floppy_eject();
#endif
printk(KERN_NOTICE printk(KERN_NOTICE
"VFS: Insert root floppy disk to be loaded into ramdisk and press ENTER\n"); "VFS: Insert root floppy disk to be loaded into ramdisk and press ENTER\n");
wait_for_keypress(); wait_for_keypress();
......
...@@ -14,7 +14,7 @@ if [ "$CONFIG_SBPCD" = "y" ]; then ...@@ -14,7 +14,7 @@ if [ "$CONFIG_SBPCD" = "y" ]; then
fi fi
fi fi
fi fi
tristate 'Aztech/Orchid/Okano/Wearnes/TXC (non IDE) CDROM support' CONFIG_AZTCD tristate 'Aztech/Orchid/Okano/Wearnes/TXC/CyDROM CDROM support' CONFIG_AZTCD
tristate 'Sony CDU535 CDROM support' CONFIG_CDU535 tristate 'Sony CDU535 CDROM support' CONFIG_CDU535
tristate 'Goldstar R420 CDROM support' CONFIG_GSCD tristate 'Goldstar R420 CDROM support' CONFIG_GSCD
tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206 tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206
......
#define AZT_VERSION "2.2" #define AZT_VERSION "2.30"
/* $Id: aztcd.c,v 2.20 1996/03/12 18:31:23 root Exp root $ /* $Id: aztcd.c,v 2.30 1996/04/26 05:32:15 root Exp root $
linux/drivers/block/aztcd.c - AztechCD268 CDROM driver linux/drivers/block/aztcd.c - Aztech CD268 CDROM driver
Copyright (C) 1994,95,96 Werner Zimmermann(zimmerma@rz.fht-esslingen.de) Copyright (C) 1994,95,96 Werner Zimmermann(zimmerma@rz.fht-esslingen.de)
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
HISTORY HISTORY
V0.0 Adaption to Adaptec CD268-01A Version 1.3 V0.0 Adaption to Aztech CD268-01A Version 1.3
Version is PRE_ALPHA, unresolved points: Version is PRE_ALPHA, unresolved points:
1. I use busy wait instead of timer wait in STEN_LOW,DTEN_LOW 1. I use busy wait instead of timer wait in STEN_LOW,DTEN_LOW
thus driver causes CPU overhead and is very slow thus driver causes CPU overhead and is very slow
...@@ -143,8 +143,12 @@ ...@@ -143,8 +143,12 @@
V2.10 Started to modify azt_poll to prevent reading beyond end of V2.10 Started to modify azt_poll to prevent reading beyond end of
tracks. tracks.
Werner Zimmermann, December 3, 95 Werner Zimmermann, December 3, 95
NOTE: V2.20 Changed some comments
Points marked with ??? are questionable ! Werner Zimmermann, April 1, 96
V2.30 Implemented support for CyCDROM CR520, CR940, Code for CR520
delivered by H.Berger with preworks by E.Moenkeberg.
Werner Zimmermann, April 29, 96
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -178,6 +182,13 @@ ...@@ -178,6 +182,13 @@
#define RETURN(message) {printk("aztcd: Warning: %s failed\n",message);\ #define RETURN(message) {printk("aztcd: Warning: %s failed\n",message);\
return;} return;}
/* Macros to switch the IDE-interface to the slave device and back to the master*/
#define SWITCH_IDE_SLAVE outb_p(0xa0,azt_port+6); \
outb_p(0x10,azt_port+6); \
outb_p(0x00,azt_port+7); \
outb_p(0x10,azt_port+6);
#define SWITCH_IDE_MASTER outb_p(0xa0,azt_port+6);
static int aztPresent = 0; static int aztPresent = 0;
#if 0 #if 0
...@@ -411,6 +422,10 @@ static int aztSendCmd(int cmd) ...@@ -411,6 +422,10 @@ static int aztSendCmd(int cmd)
#ifdef AZT_DEBUG #ifdef AZT_DEBUG
printk("aztcd: Executing command %x\n",cmd); printk("aztcd: Executing command %x\n",cmd);
#endif #endif
if ((azt_port==0x1f0)||(azt_port==0x170))
SWITCH_IDE_SLAVE; /*switch IDE interface to slave configuration*/
aztCmd=cmd; aztCmd=cmd;
outb(POLLED,MODE_PORT); outb(POLLED,MODE_PORT);
do { if (inb(STATUS_PORT)&AFL_STATUS) break; do { if (inb(STATUS_PORT)&AFL_STATUS) break;
...@@ -778,7 +793,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame); ...@@ -778,7 +793,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
memcpy_fromfs(&entry, (void *) arg, sizeof entry); memcpy_fromfs(&entry, (void *) arg, sizeof entry);
if ((!aztTocUpToDate)||aztDiskChanged) aztUpdateToc(); if ((!aztTocUpToDate)||aztDiskChanged) aztUpdateToc();
if (entry.cdte_track == CDROM_LEADOUT) if (entry.cdte_track == CDROM_LEADOUT)
tocPtr = &Toc[DiskInfo.last + 1]; /* ??? */ tocPtr = &Toc[DiskInfo.last + 1];
else if (entry.cdte_track > DiskInfo.last else if (entry.cdte_track > DiskInfo.last
|| entry.cdte_track < DiskInfo.first) || entry.cdte_track < DiskInfo.first)
{ return -EINVAL; { return -EINVAL;
...@@ -866,7 +881,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame); ...@@ -866,7 +881,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
STEN_LOW_WAIT; STEN_LOW_WAIT;
} }
if (aztSendCmd(ACMD_EJECT)) RETURNM("azt_ioctl 11",-1); if (aztSendCmd(ACMD_EJECT)) RETURNM("azt_ioctl 11",-1);
STEN_LOW_WAIT; /*???*/ STEN_LOW_WAIT;
aztAudioStatus = CDROM_AUDIO_NO_STATUS; aztAudioStatus = CDROM_AUDIO_NO_STATUS;
break; break;
case CDROMEJECT_SW: case CDROMEJECT_SW:
...@@ -1041,7 +1056,7 @@ static void azt_poll(void) ...@@ -1041,7 +1056,7 @@ static void azt_poll(void)
int loop_ctl = 1; int loop_ctl = 1;
int skip = 0; int skip = 0;
if (azt_error) { /* ???*/ if (azt_error) {
if (aztSendCmd(ACMD_GET_ERROR)) RETURN("azt_poll 1"); if (aztSendCmd(ACMD_GET_ERROR)) RETURN("azt_poll 1");
STEN_LOW; STEN_LOW;
azt_error=inb(DATA_PORT)&0xFF; azt_error=inb(DATA_PORT)&0xFF;
...@@ -1128,13 +1143,13 @@ static void azt_poll(void) ...@@ -1128,13 +1143,13 @@ static void azt_poll(void)
end_request(0); end_request(0);
return; return;
} }
/*???*/
/* if (aztSendCmd(ACMD_SET_MODE)) RETURN("azt_poll 3"); /* if (aztSendCmd(ACMD_SET_MODE)) RETURN("azt_poll 3");
outb(0x01, DATA_PORT); outb(0x01, DATA_PORT);
PA_OK; PA_OK;
STEN_LOW; STEN_LOW;
*/ if (aztSendCmd(ACMD_GET_STATUS)) RETURN("azt_poll 4"); */ if (aztSendCmd(ACMD_GET_STATUS)) RETURN("azt_poll 4");
STEN_LOW; /*???*/ STEN_LOW;
azt_mode = 1; azt_mode = 1;
azt_state = AZT_S_READ; azt_state = AZT_S_READ;
AztTimeout = 3000; AztTimeout = 3000;
...@@ -1234,7 +1249,7 @@ static void azt_poll(void) ...@@ -1234,7 +1249,7 @@ static void azt_poll(void)
} }
#endif #endif
st = inb(STATUS_PORT) & AFL_STATUSorDATA; /*???*/ st = inb(STATUS_PORT) & AFL_STATUSorDATA;
switch (st) { switch (st) {
...@@ -1341,7 +1356,7 @@ static void azt_poll(void) ...@@ -1341,7 +1356,7 @@ static void azt_poll(void)
} }
AztTimeout = READ_TIMEOUT; AztTimeout = READ_TIMEOUT;
if (azt_read_count==0) { if (azt_read_count==0) {
azt_state = AZT_S_STOP; /*???*/ azt_state = AZT_S_STOP;
loop_ctl = 1; loop_ctl = 1;
break; break;
} }
...@@ -1357,7 +1372,7 @@ static void azt_poll(void) ...@@ -1357,7 +1372,7 @@ static void azt_poll(void)
printk("AZT_S_STOP\n"); printk("AZT_S_STOP\n");
} }
#endif #endif
if (azt_read_count!=0) printk("aztcd: discard data=%x frames\n",azt_read_count); /*???*/ if (azt_read_count!=0) printk("aztcd: discard data=%x frames\n",azt_read_count);
while (azt_read_count!=0) { while (azt_read_count!=0) {
int i; int i;
if ( !(inb(STATUS_PORT) & AFL_DATA) ) { if ( !(inb(STATUS_PORT) & AFL_DATA) ) {
...@@ -1545,13 +1560,17 @@ int aztcd_init(void) ...@@ -1545,13 +1560,17 @@ int aztcd_init(void)
printk("aztcd: no Aztech CD-ROM Initialization"); printk("aztcd: no Aztech CD-ROM Initialization");
return -EIO; return -EIO;
} }
printk("aztcd: Aztech,Orchid,Okano,Wearnes,Txc CD-ROM Driver (C) 1994,95,96 W.Zimmermann\n"); printk("aztcd: AZTECH, ORCHID, OKANO, WEARNES, TXC, CyDROM CD-ROM Driver\n");
printk("aztcd: (C) 1994-96 W.Zimmermann\n");
printk("aztcd: DriverVersion=%s BaseAddress=0x%x For IDE/ATAPI-drives use ide-cd.c\n",AZT_VERSION,azt_port); printk("aztcd: DriverVersion=%s BaseAddress=0x%x For IDE/ATAPI-drives use ide-cd.c\n",AZT_VERSION,azt_port);
printk("aztcd: If you have problems, read /usr/src/linux/Documentation/cdrom/aztcd\n"); printk("aztcd: If you have problems, read /usr/src/linux/Documentation/cdrom/aztcd\n");
if (check_region(azt_port, 4)) { if ((azt_port==0x1f0)||(azt_port==0x170))
printk("aztcd: conflict, I/O port (%X) already used\n", st = check_region(azt_port, 8); /*IDE-interfaces need 8 bytes*/
azt_port); else
st = check_region(azt_port, 4); /*proprietary interfaces need 4 bytes*/
if (st)
{ printk("aztcd: conflict, I/O port (%X) already used\n",azt_port);
return -EIO; return -EIO;
} }
...@@ -1570,7 +1589,11 @@ int aztcd_init(void) ...@@ -1570,7 +1589,11 @@ int aztcd_init(void)
#endif #endif
/* check for presence of drive */ /* check for presence of drive */
outb(POLLED,MODE_PORT); /*???*/
if ((azt_port==0x1f0)||(azt_port==0x170))
SWITCH_IDE_SLAVE; /*switch IDE interface to slave configuration*/
outb(POLLED,MODE_PORT);
inb(CMD_PORT); inb(CMD_PORT);
inb(CMD_PORT); inb(CMD_PORT);
outb(ACMD_GET_VERSION,CMD_PORT); /*Try to get version info*/ outb(ACMD_GET_VERSION,CMD_PORT); /*Try to get version info*/
...@@ -1600,7 +1623,7 @@ int aztcd_init(void) ...@@ -1600,7 +1623,7 @@ int aztcd_init(void)
{ inb(STATUS_PORT); /*removing all data from earlier tries*/ { inb(STATUS_PORT); /*removing all data from earlier tries*/
inb(DATA_PORT); inb(DATA_PORT);
} }
outb(POLLED,MODE_PORT); /*???*/ outb(POLLED,MODE_PORT);
inb(CMD_PORT); inb(CMD_PORT);
inb(CMD_PORT); inb(CMD_PORT);
getAztStatus(); /*trap errors*/ getAztStatus(); /*trap errors*/
...@@ -1621,7 +1644,7 @@ int aztcd_init(void) ...@@ -1621,7 +1644,7 @@ int aztcd_init(void)
#ifdef AZT_DEBUG #ifdef AZT_DEBUG
printk("aztcd: Status = %x\n",st); printk("aztcd: Status = %x\n",st);
#endif #endif
outb(POLLED,MODE_PORT); /*???*/ outb(POLLED,MODE_PORT);
inb(CMD_PORT); inb(CMD_PORT);
inb(CMD_PORT); inb(CMD_PORT);
outb(ACMD_GET_VERSION,CMD_PORT); /*GetVersion*/ outb(ACMD_GET_VERSION,CMD_PORT); /*GetVersion*/
...@@ -1654,9 +1677,9 @@ int aztcd_init(void) ...@@ -1654,9 +1677,9 @@ int aztcd_init(void)
{ printk("ORCHID or WEARNES drive detected\n"); /*ORCHID or WEARNES*/ { printk("ORCHID or WEARNES drive detected\n"); /*ORCHID or WEARNES*/
} }
else if ((result[1]==0x03)&&(result[2]=='5')) else if ((result[1]==0x03)&&(result[2]=='5'))
{ printk("TXC drive detected\n"); /*Conrad TXC*/ { printk("TXC or CyCDROM drive detected\n"); /*Conrad TXC, CyCDROM*/
} }
else /*OTHERS or none*/ else /*OTHERS or none*/
{ printk("\nunknown drive or firmware version detected\n"); { printk("\nunknown drive or firmware version detected\n");
printk("aztcd may not run stable, if you want to try anyhow,\n"); printk("aztcd may not run stable, if you want to try anyhow,\n");
printk("boot with: aztcd=<BaseAddress>,0x79\n"); printk("boot with: aztcd=<BaseAddress>,0x79\n");
...@@ -1677,8 +1700,11 @@ int aztcd_init(void) ...@@ -1677,8 +1700,11 @@ int aztcd_init(void)
blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
read_ahead[MAJOR_NR] = 4; read_ahead[MAJOR_NR] = 4;
request_region(azt_port, 4, "aztcd"); if ((azt_port==0x1f0)||(azt_port==0x170))
request_region(azt_port, 8, "aztcd"); /*IDE-interface*/
else
request_region(azt_port, 4, "aztcd"); /*proprietary inferface*/
azt_invalidate_buffers(); azt_invalidate_buffers();
aztPresent = 1; aztPresent = 1;
aztCloseDoor(); aztCloseDoor();
...@@ -2038,7 +2064,7 @@ static int aztGetToc(int multi) ...@@ -2038,7 +2064,7 @@ static int aztGetToc(int multi)
if (!multi) if (!multi)
{ azt_mode = 0x05; { azt_mode = 0x05;
if (aztSendCmd(ACMD_SEEK_TO_LEADIN)) RETURNM("aztGetToc 2",-1); /*???*/ if (aztSendCmd(ACMD_SEEK_TO_LEADIN)) RETURNM("aztGetToc 2",-1);
STEN_LOW_WAIT; STEN_LOW_WAIT;
} }
for (limit = 300; limit > 0; limit--) for (limit = 300; limit > 0; limit--)
...@@ -2097,7 +2123,12 @@ void cleanup_module(void) ...@@ -2097,7 +2123,12 @@ void cleanup_module(void)
{ printk("What's that: can't unregister aztcd\n"); { printk("What's that: can't unregister aztcd\n");
return; return;
} }
release_region(azt_port,4); if ((azt_port==0x1f0)||(azt_port==0x170))
printk(KERN_INFO "aztcd module released.\n"); { SWITCH_IDE_MASTER;
release_region(azt_port,8); /*IDE-interface*/
}
else
release_region(azt_port,4); /*proprietary interface*/
printk(KERN_INFO "aztcd module released.\n");
} }
#endif MODULE #endif MODULE
...@@ -2448,7 +2448,7 @@ int rs_open(struct tty_struct *tty, struct file * filp) ...@@ -2448,7 +2448,7 @@ int rs_open(struct tty_struct *tty, struct file * filp)
*/ */
static void show_serial_version(void) static void show_serial_version(void)
{ {
printk("%s version %s with", serial_name, serial_version); printk(KERN_INFO "%s version %s with", serial_name, serial_version);
#ifdef CONFIG_HUB6 #ifdef CONFIG_HUB6
printk(" HUB-6"); printk(" HUB-6");
#define SERIAL_OPT #define SERIAL_OPT
...@@ -2797,7 +2797,7 @@ int rs_init(void) ...@@ -2797,7 +2797,7 @@ int rs_init(void)
autoconfig(info); autoconfig(info);
if (info->type == PORT_UNKNOWN) if (info->type == PORT_UNKNOWN)
continue; continue;
printk("tty%02d%s at 0x%04x (irq = %d)", info->line, printk(KERN_INFO "tty%02d%s at 0x%04x (irq = %d)", info->line,
(info->flags & ASYNC_FOURPORT) ? " FourPort" : "", (info->flags & ASYNC_FOURPORT) ? " FourPort" : "",
info->port, info->irq); info->port, info->irq);
switch (info->type) { switch (info->type) {
...@@ -2867,7 +2867,7 @@ int register_serial(struct serial_struct *req) ...@@ -2867,7 +2867,7 @@ int register_serial(struct serial_struct *req)
printk("register_serial(): autoconfig failed\n"); printk("register_serial(): autoconfig failed\n");
return -1; return -1;
} }
printk("tty%02d at 0x%04x (irq = %d)", info->line, printk(KERN_INFO "tty%02d at 0x%04x (irq = %d)", info->line,
info->port, info->irq); info->port, info->irq);
switch (info->type) { switch (info->type) {
case PORT_8250: case PORT_8250:
...@@ -2895,7 +2895,7 @@ void unregister_serial(int line) ...@@ -2895,7 +2895,7 @@ void unregister_serial(int line)
if (info->tty) if (info->tty)
tty_hangup(info->tty); tty_hangup(info->tty);
info->type = PORT_UNKNOWN; info->type = PORT_UNKNOWN;
printk("tty%02d unloaded\n", info->line); printk(KERN_INFO "tty%02d unloaded\n", info->line);
restore_flags(flags); restore_flags(flags);
} }
...@@ -2909,6 +2909,7 @@ void cleanup_module(void) ...@@ -2909,6 +2909,7 @@ void cleanup_module(void)
{ {
unsigned long flags; unsigned long flags;
int e1, e2; int e1, e2;
int i;
/* printk("Unloading %s: version %s\n", serial_name, serial_version); */ /* printk("Unloading %s: version %s\n", serial_name, serial_version); */
save_flags(flags); save_flags(flags);
...@@ -2923,5 +2924,10 @@ void cleanup_module(void) ...@@ -2923,5 +2924,10 @@ void cleanup_module(void)
printk("SERIAL: failed to unregister callout driver (%d)\n", printk("SERIAL: failed to unregister callout driver (%d)\n",
e2); e2);
restore_flags(flags); restore_flags(flags);
for (i = 0; i < NR_PORTS; i++) {
if (rs_table[i].type != PORT_UNKNOWN)
release_region(rs_table[i].port, 8);
}
} }
#endif /* MODULE */ #endif /* MODULE */
...@@ -713,7 +713,8 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, ...@@ -713,7 +713,8 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
/* the frsig is ignored, so we set it to 0 */ /* the frsig is ignored, so we set it to 0 */
vt_cons[console]->vt_mode.frsig = 0; vt_cons[console]->vt_mode.frsig = 0;
vt_cons[console]->vt_pid = current->pid; vt_cons[console]->vt_pid = current->pid;
vt_cons[console]->vt_newvt = 0; /* no switch is required -- saw@shade.msu.ru */
vt_cons[console]->vt_newvt = -1;
return 0; return 0;
} }
......
...@@ -652,6 +652,7 @@ isac_new_ph(struct IsdnCardState *sp) ...@@ -652,6 +652,7 @@ isac_new_ph(struct IsdnCardState *sp)
break; break;
case (12): case (12):
case (13): case (13):
ph_command(sp, 8);
sp->ph_active = 5; sp->ph_active = 5;
isac_sched_event(sp, ISAC_PHCHANGE); isac_sched_event(sp, ISAC_PHCHANGE);
if (!sp->xmtibh) if (!sp->xmtibh)
......
...@@ -201,11 +201,12 @@ ...@@ -201,11 +201,12 @@
<pchen@woodruffs121.residence.gatech.edu>. <pchen@woodruffs121.residence.gatech.edu>.
Add new multicasting code. Add new multicasting code.
0.421 22-Apr-96 Fix alloc_device() bug <jari@markkus2.fimr.fi> 0.421 22-Apr-96 Fix alloc_device() bug <jari@markkus2.fimr.fi>
0.422 29-Apr-96 Fix depca_hw_init() bug <jari@markkus2.fimr.fi>
========================================================================= =========================================================================
*/ */
static const char *version = "depca.c:v0.421 96/4/22 davies@wanton.lkg.dec.com\n"; static const char *version = "depca.c:v0.422 96/4/29 davies@wanton.lkg.dec.com\n";
#include <linux/module.h> #include <linux/module.h>
...@@ -483,8 +484,8 @@ depca_hw_init(struct device *dev, u_long ioaddr) ...@@ -483,8 +484,8 @@ depca_hw_init(struct device *dev, u_long ioaddr)
if (inw(DEPCA_DATA) == STOP) { if (inw(DEPCA_DATA) == STOP) {
if (mem == 0) { if (mem == 0) {
for (; mem_base[mem_chkd]; mem_chkd++) { while (mem_base[mem_chkd]) {
mem_start = mem_base[mem_chkd]; mem_start = mem_base[mem_chkd++];
DepcaSignature(name, mem_start); DepcaSignature(name, mem_start);
if (*name != '\0') break; if (*name != '\0') break;
} }
......
...@@ -3224,7 +3224,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) { ...@@ -3224,7 +3224,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) {
/* /*
* Function : int NCR5380_reset (Scsi_Cmnd *cmd) * Function : int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int reset_flags)
* *
* Purpose : reset the SCSI bus. * Purpose : reset the SCSI bus.
* *
...@@ -3235,7 +3235,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) { ...@@ -3235,7 +3235,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) {
#ifndef NCR5380_reset #ifndef NCR5380_reset
static static
#endif #endif
int NCR5380_reset (Scsi_Cmnd *cmd) { int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int dummy) {
NCR5380_local_declare(); NCR5380_local_declare();
NCR5380_setup(cmd->host); NCR5380_setup(cmd->host);
......
...@@ -298,7 +298,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd); ...@@ -298,7 +298,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd);
#ifndef NCR5380_reset #ifndef NCR5380_reset
static static
#endif #endif
int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int); int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int reset_flags);
#ifndef NCR5380_queue_command #ifndef NCR5380_queue_command
static static
#endif #endif
......
...@@ -79,7 +79,7 @@ int dtc_abort(Scsi_Cmnd *); ...@@ -79,7 +79,7 @@ int dtc_abort(Scsi_Cmnd *);
int dtc_biosparam(Disk *, kdev_t, int*); int dtc_biosparam(Disk *, kdev_t, int*);
int dtc_detect(Scsi_Host_Template *); int dtc_detect(Scsi_Host_Template *);
int dtc_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int dtc_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int dtc_reset(Scsi_Cmnd *); int dtc_reset(Scsi_Cmnd *, unsigned int reset_flags);
int dtc_proc_info (char *buffer, char **start, off_t offset, int dtc_proc_info (char *buffer, char **start, off_t offset,
int length, int hostno, int inout); int length, int hostno, int inout);
......
...@@ -46,7 +46,7 @@ int generic_NCR5380_abort(Scsi_Cmnd *); ...@@ -46,7 +46,7 @@ int generic_NCR5380_abort(Scsi_Cmnd *);
int generic_NCR5380_detect(Scsi_Host_Template *); int generic_NCR5380_detect(Scsi_Host_Template *);
int generic_NCR5380_release_resources(struct Scsi_Host *); int generic_NCR5380_release_resources(struct Scsi_Host *);
int generic_NCR5380_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int generic_NCR5380_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int generic_NCR5380_reset(Scsi_Cmnd *); int generic_NCR5380_reset(Scsi_Cmnd *, unsigned int);
int notyet_generic_proc_info (char *buffer ,char **start, off_t offset, int notyet_generic_proc_info (char *buffer ,char **start, off_t offset,
int length, int hostno, int inout); int length, int hostno, int inout);
const char* generic_NCR5380_info(struct Scsi_Host *); const char* generic_NCR5380_info(struct Scsi_Host *);
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
UPDATE NEWS: version 1.28 - 27 Apr 96
Tightened up the "interrupts enabled/disabled" discipline
in 'in2000_queuecommand()' and maybe 1 or 2 other places.
I _think_ it may have been a little too lax, causing an
occasional crash during full moon. A fully functional
/proc interface is now in place - if you want to play
with it, start by doing 'cat /proc/scsi/in2000/0'. You
can also use it to change a few run-time parameters on
the fly, but it's mostly for debugging. The curious
should take a good look at 'in2000_proc_info()' in the
in2000.c file to get an understanding of what it's all
about; I figure that people who are really into it will
want to add features suited to their own needs...
Also, sync is now DISABLED by default.
UPDATE NEWS: version 1.27 - 10 Apr 96
Fixed a well-hidden bug in the adapative-disconnect code
that would show up every now and then during extreme
heavy loads involving 2 or more simultaneously active
devices. Thanks to Joe Mack for keeping my nose to the
grindstone on this one.
UPDATE NEWS: version 1.26 - 07 Mar 96
1.25 had a nasty bug that bit people with swap partitions
and tape drives. Also, in my attempt to guess my way
through Intel assembly language, I made an error in the
inline code for IO writes. Made a few other changes and
repairs - this version (fingers crossed) should work well.
UPDATE NEWS: version 1.25 - 05 Mar 96
Kernel 1.3.70 interrupt mods added; old kernels still OK.
Big help from Bill Earnest and David Willmore on speed
testing and optimizing: I think there's a real improvement
in this area.
New! User-friendly command-line interface for LILO and
module loading - the old method is gone, so you'll need
to read the comments for 'setup_strings' near the top
of in2000.c. For people with CDROM's or other devices
that have a tough time with sync negotiation, you can
now selectively disable sync on individual devices -
search for the 'nosync' keyword in the command-line
comments. Some of you disable the BIOS on the card, which
caused the auto-detect function to fail; there is now a
command-line option to force detection of a ROM-less card.
UPDATE NEWS: version 1.24a - 24 Feb 96
There was a bug in the synchronous transfer code. Only
a few people downloaded before I caught it - could have
been worse.
UPDATE NEWS: version 1.24 - 23 Feb 96
Lots of good changes. Advice from Bill Earnest resulted
in much better detection of cards, more efficient usage
of the fifo, and (hopefully) faster data transfers. The
jury is still out on speed - I hope it's improved some.
One nifty new feature is a cool way of doing disconnect/
reselect. The driver defaults to what I'm calling
'adaptive disconnect' - meaning that each command is
evaluated individually as to whether or not it should be
run with the option to disconnect/reselect (if the device
chooses), or as a "SCSI-bus-hog". When several devices
are operating simultaneously, disconnects are usually an
advantage. In a single device system, or if only 1 device
is being accessed, transfers usually go faster if disconnects
are not allowed.
Hackers -> the positions of some of the 'setup_default' flags
have changed, so check your command-line args if
you've been using them with a previous version.
Hi everyone:
A revamped IN2000 SCSI driver is available for download and
testing at my ftp site:
ftp.netcom.com/pub/js/jshiffle
in the 'in2000' directory. It has what I think are a few
improvements over the stock driver, including disconnect/
reselect, synchronous transfer, easier debugging, command-
line arguments for setting run-time parameters and debug
output, and better FIFO handling. Swap partitions work now,
as do tape drives and anything else that used to butt heads
with the old driver's 2k block size limit. See the top
of the 'in2000.c' file for more details.
This is a rewrite of the in2000.[ch] files for Linux. They
are drop-in replacements for the originals in linux/drivers/scsi
- just copy them over the old ones. The driver has been tested
in 1.2.13 with and without ELF, and in the 1.3 series somewhere
up into the 60's. I don't expect any problems with newer kernels.
It is "modular-ised" for those who prefer that route.
------- Hackers take note: ------------------
Anyone who wants to use LILO to pass a command line to this driver
will have to make 2 small changes to the file 'init/main.c'. Find
the area between lines 60-80 where all the 'xxxxx_setup()' extern
declarations are and insert a new one like the following:
extern void in2000_setup(char *str, int *ints);
Then do a search for "bootsetups" - add a new entry to this array
(somewhere in the middle) that looks like this:
#ifdef CONFIG_SCSI_IN2000
{ "in2000=", in2000_setup },
#endif
[You can skip the above if you're only loading the driver as a module
or if the driver defaults are OK.]
The default arguments (you get these when you don't give an 'in2000'
command-line argument, or you give a blank argument) will cause
the driver to do adaptive disconnect, synchronous transfers, and a
minimum of debug messages. If you want to fool with the options,
search for 'setup_strings' near the top of the in2000.c file and
check the 'hostdata->args' section in in2000.h - but be warned! Not
everything is working yet (some things will never work, probably).
I believe that disabling disconnects (DIS_NEVER) will allow you
to choose a LEVEL2 value higher than 'L2_BASIC', but I haven't
spent a lot of time testing this. You might try 'ENABLE_CLUSTERING'
to see what happens: my tests showed little difference either way.
There's also a define called 'DEFAULT_SX_PER'; this sets the data
transfer speed for the asynchronous mode. I've put it at 500 ns
despite the fact that the card could handle settings of 376 or
252, because I'm not really sure if certain devices or maybe bad
cables might have trouble at higher speeds. I couldn't find any
info in my various SCSI references that talk about this in language
I could understand, so decided to compromise with 500. This is still
faster than the old driver was set at (I think). Can someone explain
the significance of the bus transfer speed setting? Do devices on
the bus ever care what it is? Is cable quality a factor here?
Regardless, you can choose your own default through the command-
line with the 'period' keyword.
------------------------------------------------
I have run a LOT of tests on this driver, and it seems very solid,
including with up to 3 simultaneous large copy or tar commands
running between 6 devices at once. Synchronous transfers are
working fine for the devices I have to test, although others have
reported some failures (CDROM drives, mostly). Tape drives work
well (finally!) and so do CD-ROM drives.
I should mention that Drew Eckhardt's 'Generic NCR5380' sources
were my main inspiration, with lots of reference to the IN2000
driver currently distributed in the kernel source. I also owe
much to a driver written by Hamish Mcdonald for Linux-m68k(!).
And to Eric Wright for being an ALPHA guinea pig. And to Bill
Earnest for 2 tons of great input and information. And to David
Willmore for extensive 'bonnie' testing.
Be forewarned that while I've had good luck with it, this
is the first time it's been loose out in the wide world.
It wouldn't suprise me if people uncover problems that
I haven't caught....
Please try the driver out. Test it, beat on it. And PLEASE get back
to me - I really need to hear about bugs, stupid or bad code,
and any ideas for enhancements.
Thanks very much...
John Shifflett jshiffle@netcom.com
...@@ -118,7 +118,7 @@ int pas16_abort(Scsi_Cmnd *); ...@@ -118,7 +118,7 @@ int pas16_abort(Scsi_Cmnd *);
int pas16_biosparam(Disk *, kdev_t, int*); int pas16_biosparam(Disk *, kdev_t, int*);
int pas16_detect(Scsi_Host_Template *); int pas16_detect(Scsi_Host_Template *);
int pas16_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int pas16_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int pas16_reset(Scsi_Cmnd *); int pas16_reset(Scsi_Cmnd *, unsigned int);
int pas16_proc_info (char *buffer ,char **start, off_t offset, int pas16_proc_info (char *buffer ,char **start, off_t offset,
int length, int hostno, int inout); int length, int hostno, int inout);
......
...@@ -95,7 +95,7 @@ int t128_abort(Scsi_Cmnd *); ...@@ -95,7 +95,7 @@ int t128_abort(Scsi_Cmnd *);
int t128_biosparam(Disk *, kdev_t, int*); int t128_biosparam(Disk *, kdev_t, int*);
int t128_detect(Scsi_Host_Template *); int t128_detect(Scsi_Host_Template *);
int t128_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int t128_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int t128_reset(Scsi_Cmnd *); int t128_reset(Scsi_Cmnd *, unsigned int reset_flags);
int t128_proc_info (char *buffer, char **start, off_t offset, int t128_proc_info (char *buffer, char **start, off_t offset,
int length, int hostno, int inout); int length, int hostno, int inout);
......
...@@ -72,28 +72,13 @@ NOTE! DMA buffers are used only by /dev/audio# and /dev/dsp# devices. ...@@ -72,28 +72,13 @@ NOTE! DMA buffers are used only by /dev/audio# and /dev/dsp# devices.
file (sndscape.co[012]) to the card. Using large buffers doesn't file (sndscape.co[012]) to the card. Using large buffers doesn't
increase performance in these cases. increase performance in these cases.
Configuring device parameters when loading the driver
-----------------------------------------------------
The loadable version of the sound driver accepts now the same
sound= parameter that has been available in the LILO command line.
In this way it's possible to change I/O port, IRQ and DMA addresses
and to enable/disable various cards at load time. Normally
the driver uses the configuration parameters entered when compiling
and configuring the driver.
Look at Readme.linux for more info.
NOTE! This method is not normally required. You should use it only when
you have to use different configuration than normally. The sound=
command line parameter is error prone and not recommended.
Debugging and tracing Debugging and tracing
--------------------- ---------------------
Modularized sound driver doesn't display messages during initialization as Modularized sound driver doesn't display messages during initialization as
the kernel compiled one does. This feature can be turned on by adding the kernel compiled one does. This feature can be turned on by adding
init_trace=1 to the insmod command line. trace_init=1 to the insmod command line.
For example: For example:
insmod sound init_trace=1 insmod sound trace_init=1
...@@ -520,10 +520,11 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local) ...@@ -520,10 +520,11 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
case SNDCTL_COPR_SENDMSG: case SNDCTL_COPR_SENDMSG:
{ {
/* send buf->len words from buf->data to DSP */
copr_msg *buf; copr_msg *buf;
unsigned long flags; unsigned long flags;
unsigned short *data; unsigned short *data;
unsigned short tmp;
int i; int i;
buf = (copr_msg *) kmalloc (sizeof (copr_msg), GFP_KERNEL); buf = (copr_msg *) kmalloc (sizeof (copr_msg), GFP_KERNEL);
...@@ -534,19 +535,17 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local) ...@@ -534,19 +535,17 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
data = (unsigned short *) (buf->data); data = (unsigned short *) (buf->data);
/* printk( "SNDCTL_COPR_SENDMSG: data = %d", data ); */
save_flags (flags); save_flags (flags);
cli (); cli ();
for (i = 0; i < buf->len; i++) for (i = 0; i < buf->len; i++)
{ {
tmp = *data++; if (!pss_put_dspword (devc, *data++))
if (!pss_put_dspword (devc, tmp))
{ {
restore_flags (flags); restore_flags (flags);
buf->len = i; /* feed back number of WORDs sent */ /* feed back number of WORDs sent */
memcpy_tofs ((&((char *) arg)[0]), &buf, sizeof (buf)); memcpy_tofs( (char *)(&(((copr_msg *)arg)->len)),
(char *)(&i), sizeof(buf->len));
kfree (buf); kfree (buf);
return -EIO; return -EIO;
} }
...@@ -562,6 +561,7 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local) ...@@ -562,6 +561,7 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
case SNDCTL_COPR_RCVMSG: case SNDCTL_COPR_RCVMSG:
{ {
/* try to read as much words as possible from DSP into buf */
copr_msg *buf; copr_msg *buf;
unsigned long flags; unsigned long flags;
unsigned short *data; unsigned short *data;
...@@ -571,27 +571,31 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local) ...@@ -571,27 +571,31 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
buf = (copr_msg *) kmalloc (sizeof (copr_msg), GFP_KERNEL); buf = (copr_msg *) kmalloc (sizeof (copr_msg), GFP_KERNEL);
if (buf == NULL) if (buf == NULL)
return -ENOSPC; return -ENOSPC;
#if 0
memcpy_fromfs ((char *) buf, &(((char *) arg)[0]), sizeof (*buf)); memcpy_fromfs ((char *) buf, &(((char *) arg)[0]), sizeof (*buf));
#endif
data = (unsigned short *) buf->data; data = (unsigned short *) buf->data;
save_flags (flags); save_flags (flags);
cli (); cli ();
for (i = 0; i < buf->len; i++) for (i = 0; i < sizeof(buf->data); i++)
{ {
if (!pss_get_dspword (devc, data++)) if (!pss_get_dspword (devc, data++))
{ {
buf->len = i; /* feed back number of WORDs read */ buf->len = i; /* feed back number of WORDs read */
err = -EIO; err = (i==0)? -EIO : 0; /* EIO only if no word read */
break; break;
} }
} }
if( i==sizeof(buf->data) )
buf->len = i;
restore_flags (flags); restore_flags (flags);
memcpy_tofs ((&((char *) arg)[0]), &buf, sizeof (buf)); memcpy_tofs ((&((char *) arg)[0]), buf, sizeof (*buf));
kfree (buf); kfree (buf);
return err; return err;
......
...@@ -26,12 +26,16 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, ...@@ -26,12 +26,16 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
switch (cmd) { switch (cmd) {
case EXT2_IOC_GETFLAGS: case EXT2_IOC_GETFLAGS:
if ((err = verify_area (VERIFY_WRITE, (long *) arg, sizeof(long)))) err = verify_area(VERIFY_WRITE, (int *) arg, sizeof(int));
if (err)
return err; return err;
put_fs_long (inode->u.ext2_i.i_flags, (long *) arg); put_user(inode->u.ext2_i.i_flags, (int *) arg);
return 0; return 0;
case EXT2_IOC_SETFLAGS: case EXT2_IOC_SETFLAGS:
flags = get_fs_long ((long *) arg); err = verify_area(VERIFY_READ, (int *) arg, sizeof(int));
if (err)
return err;
flags = get_user((int *) arg);
/* /*
* The IMMUTABLE flag can only be changed by the super user * The IMMUTABLE flag can only be changed by the super user
* when the security level is zero. * when the security level is zero.
...@@ -59,16 +63,20 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, ...@@ -59,16 +63,20 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
inode->i_dirt = 1; inode->i_dirt = 1;
return 0; return 0;
case EXT2_IOC_GETVERSION: case EXT2_IOC_GETVERSION:
if ((err = verify_area (VERIFY_WRITE, (long *) arg, sizeof(long)))) err = verify_area(VERIFY_WRITE, (int *) arg, sizeof(int));
if (err)
return err; return err;
put_fs_long (inode->u.ext2_i.i_version, (long *) arg); put_user(inode->u.ext2_i.i_version, (int *) arg);
return 0; return 0;
case EXT2_IOC_SETVERSION: case EXT2_IOC_SETVERSION:
if ((current->fsuid != inode->i_uid) && !fsuser()) if ((current->fsuid != inode->i_uid) && !fsuser())
return -EPERM; return -EPERM;
if (IS_RDONLY(inode)) if (IS_RDONLY(inode))
return -EROFS; return -EROFS;
inode->u.ext2_i.i_version = get_fs_long ((long *) arg); err = verify_area(VERIFY_READ, (int *) arg, sizeof(int));
if (err)
return err;
inode->u.ext2_i.i_version = get_user((int *) arg);
inode->i_ctime = CURRENT_TIME; inode->i_ctime = CURRENT_TIME;
inode->i_dirt = 1; inode->i_dirt = 1;
return 0; return 0;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/locks.h> #include <linux/locks.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/fd.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/segment.h> #include <asm/segment.h>
...@@ -965,6 +966,7 @@ static void do_mount_root(void) ...@@ -965,6 +966,7 @@ static void do_mount_root(void)
#ifdef CONFIG_BLK_DEV_FD #ifdef CONFIG_BLK_DEV_FD
if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) { if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) {
floppy_eject();
printk(KERN_NOTICE "VFS: Insert root floppy and press ENTER\n"); printk(KERN_NOTICE "VFS: Insert root floppy and press ENTER\n");
wait_for_keypress(); wait_for_keypress();
} }
......
...@@ -104,6 +104,7 @@ ufs_read_super(struct super_block * sb, void * data, int silent) ...@@ -104,6 +104,7 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
* and s_type when we return. * and s_type when we return.
*/ */
MOD_INC_USE_COUNT;
lock_super (sb); lock_super (sb);
/* XXX - make everything read only for testing */ /* XXX - make everything read only for testing */
...@@ -119,7 +120,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent) ...@@ -119,7 +120,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
} }
printk ("ufs_read_super: unable to read superblock\n"); printk ("ufs_read_super: unable to read superblock\n");
return 0; MOD_DEC_USE_COUNT;
return(NULL);
} }
/* XXX - redo this so we can free it later... */ /* XXX - redo this so we can free it later... */
usb = (struct ufs_superblock *)__get_free_page(GFP_KERNEL); usb = (struct ufs_superblock *)__get_free_page(GFP_KERNEL);
...@@ -147,6 +149,7 @@ ufs_read_super(struct super_block * sb, void * data, int silent) ...@@ -147,6 +149,7 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
printk ("ufs_read_super: bad magic number 0x%8.8x on dev %d/%d\n", printk ("ufs_read_super: bad magic number 0x%8.8x on dev %d/%d\n",
usb->fs_magic, MAJOR(sb->s_dev), usb->fs_magic, MAJOR(sb->s_dev),
MINOR(sb->s_dev)); MINOR(sb->s_dev));
MOD_DEC_USE_COUNT;
return(NULL); return(NULL);
} }
...@@ -238,7 +241,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent) ...@@ -238,7 +241,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
ufs_read_super_lose: ufs_read_super_lose:
/* XXX - clean up */ /* XXX - clean up */
return(0); MOD_DEC_USE_COUNT;
return(NULL);
} }
void ufs_put_super (struct super_block * sb) void ufs_put_super (struct super_block * sb)
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
"floppy", NULL) "floppy", NULL)
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL)
#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) #define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA)
#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size)
#define fd_dma_mem_free(addr,size) SW._dma_mem_free(addr,size)
static int virtual_dma_count=0; static int virtual_dma_count=0;
static int virtual_dma_residue=0; static int virtual_dma_residue=0;
...@@ -193,6 +195,25 @@ static int vdma_request_irq(unsigned int irq, ...@@ -193,6 +195,25 @@ static int vdma_request_irq(unsigned int irq,
} }
static unsigned long dma_mem_alloc(unsigned long size)
{
return __get_dma_pages(GFP_KERNEL,__get_order(size));
}
static void dma_mem_free(unsigned long addr, unsigned long size)
{
free_pages(addr, __get_order(size));
}
static unsigned long vdma_mem_alloc(unsigned long size)
{
return (unsigned long) vmalloc(size);
}
static void vdma_mem_free(unsigned long addr, unsigned long size)
{
return vfree((void *)addr);
}
struct fd_routine_l { struct fd_routine_l {
void (*_enable_dma)(unsigned int dummy); void (*_enable_dma)(unsigned int dummy);
...@@ -209,6 +230,8 @@ struct fd_routine_l { ...@@ -209,6 +230,8 @@ struct fd_routine_l {
unsigned long flags, unsigned long flags,
const char *device, const char *device,
void *dev_id); void *dev_id);
unsigned long (*_dma_mem_alloc) (unsigned long size);
void (*_dma_mem_free)(unsigned long addr, unsigned long size);
} fd_routine[] = { } fd_routine[] = {
{ {
enable_dma, enable_dma,
...@@ -221,6 +244,8 @@ struct fd_routine_l { ...@@ -221,6 +244,8 @@ struct fd_routine_l {
set_dma_count, set_dma_count,
get_dma_residue, get_dma_residue,
request_irq, request_irq,
dma_mem_alloc,
dma_mem_free
}, },
{ {
vdma_enable_dma, vdma_enable_dma,
...@@ -232,7 +257,9 @@ struct fd_routine_l { ...@@ -232,7 +257,9 @@ struct fd_routine_l {
vdma_set_dma_addr, vdma_set_dma_addr,
vdma_set_dma_count, vdma_set_dma_count,
vdma_get_dma_residue, vdma_get_dma_residue,
vdma_request_irq vdma_request_irq,
vdma_mem_alloc,
vdma_mem_free
} }
}; };
...@@ -258,6 +285,6 @@ static int FDC2 = -1; ...@@ -258,6 +285,6 @@ static int FDC2 = -1;
* driver otherwise. It doesn't matter much for performance anyway, as most * driver otherwise. It doesn't matter much for performance anyway, as most
* floppy accesses go through the track buffer. * floppy accesses go through the track buffer.
*/ */
#define CROSS_64KB(a,s) ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64) #define CROSS_64KB(a,s) (((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64) && ! (use_virtual_dma & 1))
#endif /* __ASM_I386_FLOPPY_H */ #endif /* __ASM_I386_FLOPPY_H */
...@@ -37,12 +37,33 @@ ...@@ -37,12 +37,33 @@
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL); #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL);
#define MAX_BUFFER_SECTORS 24 #define MAX_BUFFER_SECTORS 24
#define virtual_dma_init() \
if (boot_info.machtype == MACH_ACER_PICA_61 || \ static unsigned long mips_dma_mem_alloc(unsigned long size)
boot_info.machtype == MACH_MIPS_MAGNUM_4000 || \ {
boot_info.machtype == MACH_OLIVETTI_M700) \ int order = __get_order(size);
vdma_alloc(PHYSADDR(floppy_track_buffer), \ unsigned long mem;
512*2*MAX_BUFFER_SECTORS);
mem = __get_dma_pages(GFP_KERNEL,order);
if(!mem)
return 0;
if (boot_info.machtype == MACH_ACER_PICA_61 ||
boot_info.machtype == MACH_MIPS_MAGNUM_4000 ||
boot_info.machtype == MACH_OLIVETTI_M700)
vdma_alloc(PHYSADDR(mem), size);
return mem;
}
static void mips_dma_mem_free(unsigned long addr, unsigned long size)
{
if (boot_info.machtype == MACH_ACER_PICA_61 ||
boot_info.machtype == MACH_MIPS_MAGNUM_4000 ||
boot_info.machtype == MACH_OLIVETTI_M700)
vdma_free(PHYSADDR(addr));
free_pages(addr, __get_order(size));
}
#define fd_dma_mem_alloc(mem,size) mips_dma_mem_alloc(mem,size)
#define fd_dma_mem_free(mem) mips_dma_mem_free(mem)
/* /*
* And on Mips's the CMOS info fails also ... * And on Mips's the CMOS info fails also ...
......
...@@ -344,4 +344,15 @@ static int sun_floppy_init(void) ...@@ -344,4 +344,15 @@ static int sun_floppy_init(void)
return -1; return -1;
} }
static int sparc_eject(void)
{
set_dor(0, ~0, 0x90);
udelay(500);
set_dor(0, ~0x90, 0);
udelay(500);
return 0;
}
#define fd_eject(drive) sparc_eject()
#endif /* !(__ASM_SPARC_FLOPPY_H) */ #endif /* !(__ASM_SPARC_FLOPPY_H) */
/* $Id: aztcd.h,v 2.20 1996/03/12 18:31:30 root Exp root $ /* $Id: aztcd.h,v 2.30 1996/04/26 05:33:56 root Exp root $
* *
* Definitions for a AztechCD268 CD-ROM interface * Definitions for a AztechCD268 CD-ROM interface
* Copyright (C) 1994, 1995 Werner Zimmermann * Copyright (C) 1994, 1995 Werner Zimmermann
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
* October 1994 Email: zimmerma@rz.fht-esslingen.de * October 1994 Email: zimmerma@rz.fht-esslingen.de
*/ */
/* *** change this to set the I/O port address of your CD-ROM drive*/ /* *** change this to set the I/O port address of your CD-ROM drive*/
#define AZT_BASE_ADDR 0x320 #define AZT_BASE_ADDR 0x320
......
...@@ -368,4 +368,10 @@ struct floppy_raw_cmd { ...@@ -368,4 +368,10 @@ struct floppy_raw_cmd {
#define FDEJECT _IO(2, 0x5a) #define FDEJECT _IO(2, 0x5a)
/* eject the disk */ /* eject the disk */
#ifdef __KERNEL__
/* eject the boot floppy (if we need the drive for a different root floppy) */
void floppy_eject(void);
#endif
#endif #endif
...@@ -325,7 +325,7 @@ struct file { ...@@ -325,7 +325,7 @@ struct file {
loff_t f_pos; loff_t f_pos;
unsigned short f_flags; unsigned short f_flags;
unsigned short f_count; unsigned short f_count;
unsigned long f_reada, f_ramax, f_rapos, f_ralen, f_rawin; unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
struct file *f_next, *f_prev; struct file *f_next, *f_prev;
int f_owner; /* pid or -pgrp where SIGIO should be sent */ int f_owner; /* pid or -pgrp where SIGIO should be sent */
struct inode * f_inode; struct inode * f_inode;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/time.h> #include <linux/time.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/types.h>
#define CONFIG_SKB_CHECK 0 #define CONFIG_SKB_CHECK 0
......
...@@ -80,6 +80,7 @@ extern void aic7xxx_setup(char *str, int *ints); ...@@ -80,6 +80,7 @@ extern void aic7xxx_setup(char *str, int *ints);
extern void AM53C974_setup(char *str, int *ints); extern void AM53C974_setup(char *str, int *ints);
extern void BusLogic_Setup(char *str, int *ints); extern void BusLogic_Setup(char *str, int *ints);
extern void fdomain_setup(char *str, int *ints); extern void fdomain_setup(char *str, int *ints);
extern void in2000_setup(char *str, int *ints);
extern void NCR53c406a_setup(char *str, int *ints); extern void NCR53c406a_setup(char *str, int *ints);
extern void ppa_setup(char *str, int *ints); extern void ppa_setup(char *str, int *ints);
extern void scsi_luns_setup(char *str, int *ints); extern void scsi_luns_setup(char *str, int *ints);
...@@ -308,6 +309,9 @@ struct { ...@@ -308,6 +309,9 @@ struct {
#ifdef CONFIG_SCSI_FUTURE_DOMAIN #ifdef CONFIG_SCSI_FUTURE_DOMAIN
{ "fdomain=", fdomain_setup}, { "fdomain=", fdomain_setup},
#endif #endif
#ifdef CONFIG_SCSI_IN2000
{ "in2000=", in2000_setup},
#endif
#ifdef CONFIG_SCSI_PPA #ifdef CONFIG_SCSI_PPA
{ "ppa=", ppa_setup }, { "ppa=", ppa_setup },
#endif #endif
......
...@@ -120,6 +120,7 @@ struct symbol_table symbol_table = { ...@@ -120,6 +120,7 @@ struct symbol_table symbol_table = {
X(do_munmap), X(do_munmap),
X(insert_vm_struct), X(insert_vm_struct),
X(merge_segments), X(merge_segments),
X(exit_mm),
/* internal kernel memory management */ /* internal kernel memory management */
X(__get_free_pages), X(__get_free_pages),
......
This diff is collapsed.
...@@ -21,9 +21,9 @@ fi ...@@ -21,9 +21,9 @@ fi
if [ "$CONFIG_NET_ALIAS" = "y" ]; then if [ "$CONFIG_NET_ALIAS" = "y" ]; then
tristate 'IP: aliasing support' CONFIG_IP_ALIAS tristate 'IP: aliasing support' CONFIG_IP_ALIAS
fi fi
if [ "$CONFIG_KERNELD" = "y" ]; then #if [ "$CONFIG_KERNELD" = "y" ]; then
# bool 'IP: ARP daemon support (experimental)' CONFIG_ARPD # bool 'IP: ARP daemon support (experimental)' CONFIG_ARPD
fi #fi
comment '(it is safe to leave these untouched)' comment '(it is safe to leave these untouched)'
bool 'IP: PC/TCP compatibility mode' CONFIG_INET_PCTCP bool 'IP: PC/TCP compatibility mode' CONFIG_INET_PCTCP
tristate 'IP: Reverse ARP' CONFIG_INET_RARP tristate 'IP: Reverse ARP' CONFIG_INET_RARP
......
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