Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
0da8dd36
Commit
0da8dd36
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 1.3.97
parent
aab94e60
Changes
41
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
3393 additions
and
1099 deletions
+3393
-1099
CREDITS
CREDITS
+5
-5
Documentation/Changes
Documentation/Changes
+33
-26
Documentation/Configure.help
Documentation/Configure.help
+0
-14
Documentation/cdrom/aztcd
Documentation/cdrom/aztcd
+21
-12
MAINTAINERS
MAINTAINERS
+35
-27
Makefile
Makefile
+1
-1
arch/i386/kernel/signal.c
arch/i386/kernel/signal.c
+3
-0
drivers/block/README.fd
drivers/block/README.fd
+47
-10
drivers/block/floppy.c
drivers/block/floppy.c
+81
-58
drivers/block/rd.c
drivers/block/rd.c
+7
-2
drivers/cdrom/Config.in
drivers/cdrom/Config.in
+1
-1
drivers/cdrom/aztcd.c
drivers/cdrom/aztcd.c
+59
-28
drivers/char/serial.c
drivers/char/serial.c
+10
-4
drivers/char/vt.c
drivers/char/vt.c
+2
-1
drivers/isdn/teles/card.c
drivers/isdn/teles/card.c
+1
-0
drivers/net/depca.c
drivers/net/depca.c
+4
-3
drivers/scsi/NCR5380.c
drivers/scsi/NCR5380.c
+2
-2
drivers/scsi/NCR5380.h
drivers/scsi/NCR5380.h
+1
-1
drivers/scsi/dtc.h
drivers/scsi/dtc.h
+1
-1
drivers/scsi/g_NCR5380.h
drivers/scsi/g_NCR5380.h
+1
-1
drivers/scsi/in2000.c
drivers/scsi/in2000.c
+2294
-650
drivers/scsi/in2000.h
drivers/scsi/in2000.h
+382
-108
drivers/scsi/in2000.readme
drivers/scsi/in2000.readme
+171
-0
drivers/scsi/pas16.h
drivers/scsi/pas16.h
+1
-1
drivers/scsi/t128.h
drivers/scsi/t128.h
+1
-1
drivers/sound/Readme.modules
drivers/sound/Readme.modules
+2
-17
drivers/sound/pss.c
drivers/sound/pss.c
+15
-11
fs/ext2/ioctl.c
fs/ext2/ioctl.c
+14
-6
fs/super.c
fs/super.c
+2
-0
fs/ufs/ufs_super.c
fs/ufs/ufs_super.c
+6
-2
include/asm-i386/floppy.h
include/asm-i386/floppy.h
+29
-2
include/asm-mips/floppy.h
include/asm-mips/floppy.h
+27
-6
include/asm-sparc/floppy.h
include/asm-sparc/floppy.h
+11
-0
include/linux/aztcd.h
include/linux/aztcd.h
+1
-2
include/linux/fd.h
include/linux/fd.h
+6
-0
include/linux/fs.h
include/linux/fs.h
+1
-1
include/linux/skbuff.h
include/linux/skbuff.h
+1
-0
init/main.c
init/main.c
+4
-0
kernel/ksyms.c
kernel/ksyms.c
+1
-0
mm/filemap.c
mm/filemap.c
+107
-93
net/ipv4/Config.in
net/ipv4/Config.in
+2
-2
No files found.
CREDITS
View file @
0da8dd36
...
...
@@ -786,8 +786,8 @@ S: USA
N: Dirk Melchers
E: dirk@merlin.nbg.sub.org
D: 8 bit XT hard disk driver for OMTI5520
S:
Branderweg 4
S: D-9105
8
Erlangen
S:
Heidackerstrass 19
S: D-9105
6
Erlangen
S: Germany
N: Michael Meskes
...
...
@@ -1306,7 +1306,7 @@ S: 6525 EZ Nijmegen
S: The Netherlands
N: Lars Wirzenius
E: l
ars.wirzenius@helsin
ki.fi
E: l
iw@i
ki.fi
D: Linux System Administrator's Guide
D: Co-moderator, comp.os.linux.announce
D: Original sprintf in kernel
...
...
@@ -1316,8 +1316,8 @@ D: Linux News (electronic magazine)
D: Meta-FAQ, originator
D: INFO-SHEET, former maintainer
D: Author of the longest-living linux bug
S:
Ohratie 16 C 198
S:
sf-01370 Vantaa
S:
Hernesaarenkatu 15 A 2
S:
Fin-00150 Helsinki
S: Finland
N: Roger E. Wolff
...
...
Documentation/Changes
View file @
0da8dd36
...
...
@@ -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
the 1.3.x series of kernels.
Last updated: Apr 2
7
, 1996.
Last updated: Apr 2
9
, 1996.
Author: Chris Ricker (gt1355b@prism.gatech.edu), based on the original by
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 ;-).
Alessandro Sigala (ssigala@globalnet.it).
Current Releases
****************
...
...
@@ -18,7 +14,7 @@ Current Releases
- Dynamic linker (ld.so) 1.7.14
- GNU CC 2.7.2
- Binutils 2.6.0.12
- Linux C Library Stable: 5.2.18,
Exp: 5.3.9, Alph
a: 5.3.12
- Linux C Library Stable: 5.2.18,
Bet
a: 5.3.12
- Linux C++ Library 2.7.1.4
- Termcap 2.0.8
- 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'
file, since GNU make and a few other fairly important utils can be
broken by the upgrade.
The current (beta) Linux C Library release is 5.3.
9. In this release
there are some important changes that may cause troubles to buggy
programs (programs that call free() on a pointer not returned by
The current (beta) Linux C Library release is 5.3.
12. In this
release there are some important changes that may cause troubles to
buggy
programs (programs that call free() on a pointer not returned by
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
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
is at the end of this file).
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
with 5.2.18 for now
.
rlogin.
Libc-5.3.12 fixes this, so if you're going to run an
experimental libc, be sure to upgrade to 5.3.12
.
If you're getting an error message that is something to the effect of
...
...
@@ -199,8 +195,18 @@ but I've never noticed any.
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
until you have no idle time free. I'm not currently aware of any
patches that eliminate this behavior.
until you have no idle time free. To fix this, edit port.h included
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
=======
...
...
@@ -252,8 +258,8 @@ xntpd
=====
Older versions of xntpd will not work with the latest kernels.
Upgrade to xntp3.5
c
.tar.Z, available from
http://www.eecis.udel.edu/~ntp/
.
Upgrade to xntp3.5
f
.tar.Z, available from
ftp://louie.udel.edu/pub/ntp/xntp3.5f.tar.Z
.
Sound driver
============
...
...
@@ -315,7 +321,8 @@ Quota
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.
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
===========
...
...
@@ -376,21 +383,21 @@ ftp://sunsite.unc.edu/pub/Linux/GCC/release.gcc-2.7.2
Linux C Library
===============
The latest 5.3.9 release:
ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.3.9.bin.tar.gz
Installation notes:
ftp://sunsite.unc.edu/pub/Linux/GCC/release.libc-5.3.9
The stable 5.2.18 release:
ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.2.18.bin.tar.gz
Installation notes for 5.2.18:
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:
ftp://sunsite.unc.edu/pub/Linux/devel/make/make-3.74.patched.tar.gz
Patched make binary:
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
=================
...
...
Documentation/Configure.help
View file @
0da8dd36
...
...
@@ -2831,20 +2831,6 @@ CONFIG_SMD_DISKLABEL
via a removable medium like magneto-optical or ZIP drives. If you
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..)
CONFIG_SMB_FS
SMB (Server Message Buffer) is the protocol Windows for Workgroups
...
...
Documentation/cdrom/aztcd
View file @
0da8dd36
$Id: README.aztcd,v 2.
20 1996/03/12 18:31:3
3 root Exp root $
$Id: README.aztcd,v 2.
30 1996/04/26 05:32:2
3 root Exp root $
Readme-File /usr/src/Documentation/cdrom/aztcd
for Aztech CD-ROM CDA268-01A, ORCHID CD-3110,
OKANO/WEARNES CDD110, Conrad TXC
CD-ROM Driver
Version 2.2 and newer
for
AZTECH CD-ROM CDA268-01A, ORCHID CD-3110,
OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540
CD-ROM Drives
Version 2.3 and newer
(for other drives see 6.-8.)
NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE
A PROPRIETARY INTERFACE (implemented on a sound card or on an
ISA-AT-bus card).
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
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
...
...
@@ -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.
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-
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
it myself. In some installations, it seems necessary to initialize the drive
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'.
...
...
@@ -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,
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
-reread the complete README file
...
...
@@ -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
check, whether your drive does operate in this mode correctly under DOS. If
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
likely are having a IDE/ATAPI-compatible drive, which is not supported by
aztcd.c, use ide-cd.c instead.
If your drive's base address is something like 0x170 or 0x1F0
(and it is
not a CyCDROM CR520ie or CR 940ie) you most likely are having an IDE/ATAPI-
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
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).
...
...
@@ -463,6 +470,8 @@ SoundWave32 soundcards.
Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's
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',
directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'.
...
...
MAINTAINERS
View file @
0da8dd36
Maintainers And Source Submission Procedur
es
List of maintainers and how to submit kernel chang
es
In order to keep things easy for the maintainers please try to
follow the guidelines given.
Not all of these guidelines matter for every
Please try to follow the guidelines below. This will make things
easier on the maintainers.
Not all of these guidelines matter for every
trivial patch so apply some common sense.
1. Always _test_ your changes
however small on at least 4 or 5 people,
preferably many more.
1. Always _test_ your changes
, however small, on at least 4 or
5 people,
preferably many more.
2. Try and release a few ALPHA test versions to the net. Announce them
onto the kernel channel and await results. This is especially important
for device drivers because often thats the only way you will find things
like the fact version 3 firmware needs a magic fix you didn't know about, or
some clown changed the chips on a board and not its name (Don't laugh look
at the SMC etherpower for that).
2. Try and release a few ALPHA test versions to the net. Announce
them onto the kernel channel and await results. This is especially
important for device drivers, because often thats the only way
you will find things like the fact version 3 firmware needs
a magic fix you didn't know about, or some clown changed the
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
testing and await feedback.
testing and await feedback.
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
sent back with seemingly silly requests about formatting and variable names.
These aren't as silly as they seem, one job the maintainers (and especially
Linus) do is to keep things looking the same. Sometimes this means that
the clever hack in your driver to get around a problem actual needs to
become a generalised kernel feature ready for next time.
'diff -u' to make the patch easy to merge. Be prepared to get your
changes sent back with seemingly silly requests about formatting
and variable names. These aren't as silly as they seem. One
job the maintainers (and especially Linus) do is to keep things
looking the same. Sometimes this means that the clever hack in
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
patch. It avoids people being missed off by mistake and makes 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.
patch. It avoids people being missed off by mistake and makes
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.
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
...
...
@@ -49,7 +55,8 @@ P: Person
M: Mail patches to
L: Mailing list that is relevant to this area
W: Web-page with status/info
S: Status
S: Status, one of the following:
Supported: Someone is actually paid to look after this (wildly
improbable).
Maintained: Someone actually looks after it.
...
...
@@ -57,9 +64,10 @@ S: Status
much other than throw the odd patch in. See below..
Orphan: No current maintainer [but maybe you could take the
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
be using that.
3C501 NETWORK DRIVER
P: Alan Cox
M: net-patches@lxorguk.ukuu.org.uk
...
...
Makefile
View file @
0da8dd36
VERSION
=
1
PATCHLEVEL
=
3
SUBLEVEL
=
9
6
SUBLEVEL
=
9
7
ARCH
=
i386
...
...
arch/i386/kernel/signal.c
View file @
0da8dd36
...
...
@@ -151,6 +151,9 @@ static inline struct _fpstate * save_i387_hard(struct _fpstate * buf)
static
struct
_fpstate
*
save_i387
(
struct
_fpstate
*
buf
)
{
if
(
!
current
->
used_math
)
return
NULL
;
#ifndef CONFIG_MATH_EMULATION
return
save_i387_hard
(
buf
);
#else
...
...
drivers/block/README.fd
View file @
0da8dd36
...
...
@@ -27,7 +27,7 @@ of linux-72:
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 options coming last. That's why there are also options to
restore the default behavio
u
r.
restore the default behavior.
If you use the floppy driver as a module, use the following syntax:
insmod floppy floppy="<options>"
...
...
@@ -49,7 +49,7 @@ available: floppy="daring two_fdc" insmod floppy
Obsolete. Use the floppy=<drive>,<type>,cmos option instead
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
Tells the floppy driver that you have a well behaved floppy controller.
...
...
@@ -81,34 +81,71 @@ available: floppy="daring two_fdc" insmod floppy
floppy=nodma
Tells the floppy driver not to use Dma for data transfers.
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
Tells the floppy driver that a workable DMA channel is available
(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
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
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:
0 -
unknown or not installed
0 -
Use the value of the physical CMOS
1 - 5 1/4 DD
2 - 5 1/4 HD
3 - 3 1/2 DD
4 - 3 1/2 HD
5 - 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
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
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
Print a warning message when an unexpected interrupt is received
(default behavio
u
r)
(default behavior)
floppy=no_unexpected_interrupts
floppy=L40SX
...
...
drivers/block/floppy.c
View file @
0da8dd36
...
...
@@ -50,7 +50,7 @@
/* 1992/9/20
* Modifications for ``Sector Shifting'' by Rob Hooft (hooft@chem.ruu.nl)
* model
led after the freeware MS/
DOS program fdformat/88 V1.8 by
* model
ed after the freeware MS-
DOS program fdformat/88 V1.8 by
* Christoph H. Hochst\"atter.
* I have fixed the shift values to the ones I always use. Maybe a new
* ioctl() should be created to be able to modify them.
...
...
@@ -132,7 +132,7 @@ static int allowed_drive_mask = 0x33;
#include <linux/fd.h>
#define OLDFDRAWCMD 0x020d
/* send a raw command to the
fdc
*/
#define OLDFDRAWCMD 0x020d
/* send a raw command to the
FDC
*/
struct
old_floppy_raw_cmd
{
void
*
data
;
...
...
@@ -164,8 +164,9 @@ struct old_floppy_raw_cmd {
static
int
use_virtual_dma
=
0
;
/* virtual DMA for Intel */
static
unsigned
short
virtual_dma_port
=
0x3f0
;
static
void
floppy_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
void
floppy_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
int
set_dor
(
int
fdc
,
char
mask
,
char
data
);
static
inline
int
__get_order
(
unsigned
long
size
);
#include <asm/floppy.h>
...
...
@@ -179,10 +180,6 @@ static int set_dor(int fdc, char mask, char data);
#define FLOPPY_MOTOR_MASK 0xf0
#endif
#ifndef fd_eject
#define fd_eject(x) -EINVAL
#endif
#ifndef fd_get_dma_residue
#define fd_get_dma_residue() get_dma_residue(FLOPPY_DMA)
#endif
...
...
@@ -203,12 +200,13 @@ static inline int __get_order(unsigned long size)
return
order
;
}
static
unsigned
long
dma_mem_alloc
(
int
size
)
{
int
order
=
__get_order
(
size
);
#ifndef fd_dma_mem_free
#define fd_dma_mem_free(addr, size) free_pages(addr, __get_order(size))
#endif
return
__get_dma_pages
(
GFP_KERNEL
,
order
);
}
#ifndef fd_dma_mem_alloc
#define fd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,__get_order(size))
#endif
/* End dma memory related stuff */
...
...
@@ -532,6 +530,22 @@ static unsigned char current_drive = 0;
static
long
current_count_sectors
=
0
;
static
unsigned
char
sector_t
;
/* sector in track */
#ifndef fd_eject
#ifdef __sparc__
static
int
fd_eject
(
int
drive
)
{
set_dor
(
0
,
~
0
,
0x90
);
udelay
(
500
);
set_dor
(
0
,
~
0x80
,
0
);
udelay
(
500
);
}
#else
#define fd_eject(x) -EINVAL
#endif
#endif
#ifdef DEBUGT
static
long
unsigned
debugtimer
;
#endif
...
...
@@ -1163,7 +1177,8 @@ static inline void perpendicular_mode(void)
}
}
/* perpendicular_mode */
static
int
fifo
=
0xa
;
static
int
fifo_depth
=
0xa
;
static
int
no_fifo
=
0
;
static
int
fdc_configure
(
void
)
{
...
...
@@ -1176,10 +1191,9 @@ static int fdc_configure(void)
if
(
need_more_output
()
!=
MORE_OUTPUT
)
return
0
;
output_byte
(
0
);
output_byte
(
0x10
|
(
fifo
&
0xf
));
/* FIFO on, polling off,
10 byte threshold */
output_byte
(
0x10
|
(
no_fifo
&
0x20
)
|
(
fifo_depth
&
0xf
));
#endif
output_byte
(
0
);
/* precompensation from track
output_byte
(
0
);
/* pre
-
compensation from track
0 upwards */
return
1
;
}
...
...
@@ -1214,7 +1228,7 @@ static void fdc_specify(void)
int
hlt_max_code
=
0x7f
;
int
hut_max_code
=
0xf
;
if
(
FDCS
->
need_configure
&&
FDCS
->
has_fifo
)
{
if
(
FDCS
->
need_configure
&&
FDCS
->
version
>=
FDC_82072A
)
{
fdc_configure
();
FDCS
->
need_configure
=
0
;
/*DPRINT("FIFO enabled\n");*/
...
...
@@ -1313,7 +1327,7 @@ static void tell_sector(void)
/*
* O
k
, this error interpreting routine is called after a
* O
K
, this error interpreting routine is called after a
* DMA read/write has succeeded
* or failed, so we check the results, and copy any buffers.
* hhb: Added better error reporting.
...
...
@@ -1392,7 +1406,7 @@ static int interpret_errors(void)
/*
* This routine is called when everything should be correctly set up
* for the transfer (i
e
floppy motor is on, the correct floppy is
* for the transfer (i
.e.
floppy motor is on, the correct floppy is
* selected, and the head is sitting on the right track).
*/
static
void
setup_rw_floppy
(
void
)
...
...
@@ -1648,6 +1662,7 @@ static void unexpected_floppy_interrupt(void)
for
(
i
=
0
;
i
<
inr
;
i
++
)
printk
(
"%d %x
\n
"
,
i
,
reply_buffer
[
i
]);
}
FDCS
->
reset
=
0
;
/* Allow SENSEI to be sent. */
while
(
1
){
output_byte
(
FD_SENSEI
);
inr
=
result
();
...
...
@@ -1666,7 +1681,7 @@ static struct tq_struct floppy_tq =
{
0
,
0
,
(
void
*
)
(
void
*
)
unexpected_floppy_interrupt
,
0
};
/* interrupt handler */
static
void
floppy_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
void
floppy_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
void
(
*
handler
)(
void
)
=
DEVICE_INTR
;
...
...
@@ -1718,6 +1733,9 @@ static void reset_interrupt(void)
{
#ifdef DEBUGT
debugt
(
"reset interrupt:"
);
#endif
#ifdef __sparc__
fdc_specify
();
/* P3: It gives us "sector not found" without this. */
#endif
result
();
/* get the status ready for set_fdc */
if
(
FDCS
->
reset
)
{
...
...
@@ -1728,8 +1746,8 @@ static void reset_interrupt(void)
}
/*
* reset is done by pulling bit 2 of DOR low for a while (old FDC
'
s),
* or by setting the self clearing bit 7 of STATUS (newer FDC
'
s)
* reset is done by pulling bit 2 of DOR low for a while (old FDCs),
* or by setting the self clearing bit 7 of STATUS (newer FDCs)
*/
static
void
reset_fdc
(
void
)
{
...
...
@@ -1901,7 +1919,7 @@ static void floppy_start(void)
* here ends the bottom half. Exported routines are:
* floppy_start, floppy_off, floppy_ready, lock_fdc, unlock_fdc, set_fdc,
* start_motor, reset_fdc, reset_fdc_info, interpret_errors.
* Initiali
s
ation also uses output_byte, result, set_dor, floppy_interrupt
* Initiali
z
ation also uses output_byte, result, set_dor, floppy_interrupt
* and set_dor.
* ========================================================================
*/
...
...
@@ -2970,8 +2988,8 @@ static void raw_cmd_free(struct floppy_raw_cmd **ptr)
*
ptr
=
0
;
while
(
this
)
{
if
(
this
->
buffer_length
)
{
f
ree_pages
((
unsigned
long
)
this
->
kernel_data
,
__get_order
(
this
->
buffer_length
)
);
f
d_dma_mem_free
((
unsigned
long
)
this
->
kernel_data
,
this
->
buffer_length
);
this
->
buffer_length
=
0
;
}
next
=
this
->
next
;
...
...
@@ -3036,7 +3054,7 @@ static inline int raw_cmd_copyin(int cmd, char *param,
if
(
ptr
->
flags
&
(
FD_RAW_READ
|
FD_RAW_WRITE
))
{
if
(
ptr
->
length
<=
0
)
return
-
EINVAL
;
ptr
->
kernel_data
=
(
char
*
)
dma_mem_alloc
(
ptr
->
length
);
ptr
->
kernel_data
=
(
char
*
)
fd_
dma_mem_alloc
(
ptr
->
length
);
if
(
!
ptr
->
kernel_data
)
return
-
ENOMEM
;
ptr
->
buffer_length
=
ptr
->
length
;
...
...
@@ -3292,7 +3310,7 @@ static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
/* convert compatibility eject ioctls into floppy eject ioctl.
* We do this in order to provide a means to eject floppy disks before
* installing the new fdutils package */
if
(
cmd
==
CDROMEJECT
||
/* CD-R
om
eject */
if
(
cmd
==
CDROMEJECT
||
/* CD-R
OM
eject */
cmd
==
0x6470
/* SunOS floppy eject */
)
{
DPRINT
(
"obsolete eject ioctl
\n
"
);
DPRINT
(
"please use floppycontrol --eject
\n
"
);
...
...
@@ -3330,12 +3348,7 @@ static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
/* do the actual eject. Fails on
* non-Sparc architectures */
ret
=
fd_eject
(
UNIT
(
drive
));
/* switch the motor off, in order to make the
* cached DOR status match the hard DOS status
*/
motor_off_callback
(
drive
);
ret
=
fd_eject
(
UNIT
(
drive
));
USETF
(
FD_DISK_CHANGED
);
USETF
(
FD_VERIFY
);
...
...
@@ -3452,7 +3465,7 @@ static void config_types(void)
int
first
=
1
;
int
drive
;
/* read drive info out of physical
cmos
*/
/* read drive info out of physical
CMOS
*/
drive
=
0
;
if
(
!
UDP
->
cmos
)
UDP
->
cmos
=
FLOPPY0_TYPE
;
...
...
@@ -3464,6 +3477,8 @@ static void config_types(void)
/* additional physical CMOS drive detection should go here */
for
(
drive
=
0
;
drive
<
N_DRIVE
;
drive
++
){
if
(
UDP
->
cmos
>=
16
)
UDP
->
cmos
=
0
;
if
(
UDP
->
cmos
>=
0
&&
UDP
->
cmos
<=
NUMBER
(
default_drive_params
))
memcpy
((
char
*
)
UDP
,
(
char
*
)
(
&
default_drive_params
[(
int
)
UDP
->
cmos
].
params
),
...
...
@@ -3594,19 +3609,19 @@ static int floppy_open(struct inode * inode, struct file * filp)
else
try
=
32
;
/* Only 24 actually useful */
tmp
=
(
char
*
)
dma_mem_alloc
(
1024
*
try
);
tmp
=
(
char
*
)
fd_
dma_mem_alloc
(
1024
*
try
);
if
(
!
tmp
)
{
try
>>=
1
;
/* buffer only one side */
INFBOUND
(
try
,
16
);
tmp
=
(
char
*
)
dma_mem_alloc
(
1024
*
try
);
tmp
=
(
char
*
)
fd_
dma_mem_alloc
(
1024
*
try
);
}
if
(
!
tmp
)
{
DPRINT
(
"Unable to allocate DMA memory
\n
"
);
RETERR
(
ENXIO
);
}
if
(
floppy_track_buffer
)
{
f
ree_pages
((
unsigned
long
)
tmp
,
__get_order
(
try
*
1024
)
);
}
else
{
if
(
floppy_track_buffer
)
f
d_dma_mem_free
((
unsigned
long
)
tmp
,
try
*
1024
);
else
{
buffer_min
=
buffer_max
=
-
1
;
floppy_track_buffer
=
tmp
;
max_buffer_sectors
=
try
;
...
...
@@ -3741,7 +3756,7 @@ static struct file_operations floppy_fops = {
};
/*
* Floppy Driver initiali
s
ation
* Floppy Driver initiali
z
ation
* =============================
*/
...
...
@@ -3751,7 +3766,6 @@ static char get_fdc_version(void)
{
int
r
;
FDCS
->
has_fifo
=
0
;
output_byte
(
FD_DUMPREGS
);
/* 82072 and better know DUMPREGS */
if
(
FDCS
->
reset
)
return
FDC_NONE
;
...
...
@@ -3766,18 +3780,12 @@ static char get_fdc_version(void)
fdc
,
r
);
return
FDC_UNKNOWN
;
}
output_byte
(
FD_VERSION
);
r
=
result
();
if
((
r
==
1
)
&&
(
reply_buffer
[
0
]
==
0x80
)){
if
(
!
fdc_configure
())
{
printk
(
KERN_INFO
"FDC %d is an 82072
\n
"
,
fdc
);
return
FDC_82072
;
/* 82072 doesn't know VERSION */
}
if
((
r
!=
1
)
||
(
reply_buffer
[
0
]
!=
0x90
))
{
printk
(
"FDC %d init: VERSION: unexpected return of %d bytes.
\n
"
,
fdc
,
r
);
return
FDC_UNKNOWN
;
return
FDC_82072
;
/* 82072 doesn't know CONFIGURE */
}
FDCS
->
has_fifo
=
fdc_configure
();
output_byte
(
FD_PERPENDICULAR
);
if
(
need_more_output
()
==
MORE_OUTPUT
)
{
output_byte
(
0
);
...
...
@@ -3889,7 +3897,8 @@ static void set_cmos(int *ints, int dummy)
}
if
(
current_drive
>=
4
&&
!
FDC2
)
FDC2
=
0x370
;
if
(
ints
[
2
]
<=
0
||
ints
[
2
]
>=
NUMBER
(
default_drive_params
)){
if
(
ints
[
2
]
<=
0
||
(
ints
[
2
]
>=
NUMBER
(
default_drive_params
)
&&
ints
[
2
]
!=
16
)){
DPRINT1
(
"bad cmos code %d
\n
"
,
ints
[
2
]);
return
;
}
...
...
@@ -3918,7 +3927,9 @@ static struct param_table {
{
"omnibook"
,
0
,
&
use_virtual_dma
,
1
},
{
"dma"
,
0
,
&
use_virtual_dma
,
0
},
{
"fifo"
,
0
,
&
fifo
,
0xa
},
{
"fifo_depth"
,
0
,
&
fifo_depth
,
0xa
},
{
"nofifo"
,
0
,
&
no_fifo
,
0x20
},
{
"usefifo"
,
0
,
&
no_fifo
,
0
},
{
"cmos"
,
set_cmos
,
0
,
0
},
...
...
@@ -4054,8 +4065,7 @@ int floppy_init(void)
if
(
have_no_fdc
)
{
DPRINT
(
"no floppy controllers found
\n
"
);
unregister_blkdev
(
MAJOR_NR
,
"fd"
);
}
else
virtual_dma_init
();
}
return
have_no_fdc
;
}
...
...
@@ -4103,7 +4113,7 @@ static void floppy_release_irq_and_dma(void)
int
drive
;
#endif
long
tmpsize
;
void
*
tmpaddr
;
unsigned
long
tmpaddr
;
cli
();
if
(
--
usage_count
){
...
...
@@ -4125,11 +4135,11 @@ static void floppy_release_irq_and_dma(void)
if
(
floppy_track_buffer
&&
max_buffer_sectors
)
{
tmpsize
=
max_buffer_sectors
*
1024
;
tmpaddr
=
(
void
*
)
floppy_track_buffer
;
tmpaddr
=
(
unsigned
long
)
floppy_track_buffer
;
floppy_track_buffer
=
0
;
max_buffer_sectors
=
0
;
buffer_min
=
buffer_max
=
-
1
;
f
ree_pages
((
unsigned
long
)
tmpaddr
,
__get_order
(
tmpsize
)
);
f
d_dma_mem_free
(
tmpaddr
,
tmpsize
);
}
#ifdef FLOPPY_SANITY_CHECK
...
...
@@ -4248,4 +4258,17 @@ void cleanup_module(void)
}
#endif
#else
/* eject the boot floppy (if we need the drive for a different root floppy) */
/* This should only be called at boot time when we're sure that there's no
* resource contention. */
void
floppy_eject
(
void
)
{
int
dummy
;
floppy_grab_irq_and_dma
();
lock_fdc
(
0
,
0
);
dummy
=
fd_eject
(
0
);
process_fd_request
();
floppy_release_irq_and_dma
();
}
#endif
drivers/block/rd.c
View file @
0da8dd36
...
...
@@ -48,6 +48,7 @@
#include <linux/mman.h>
#include <linux/malloc.h>
#include <linux/ioctl.h>
#include <linux/fd.h>
#include <linux/module.h>
#include <asm/system.h>
...
...
@@ -90,11 +91,12 @@ static int rd_blocksizes[NUM_RAMDISKS];
* architecture-specific setup routine (from the stored bootsector
* information).
*/
int
rd_size
=
4096
;
/* Size of the ramdisks */
#ifndef MODULE
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_image_start
=
0
;
/* starting block # of image */
int
rd_size
=
4096
;
/* Size of the ramdisks */
#ifdef CONFIG_BLK_DEV_INITRD
unsigned
long
initrd_start
,
initrd_end
;
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)
outfile
.
f_op
->
write
(
outfile
.
f_inode
,
&
outfile
,
buf
,
BLOCK_SIZE
);
if
(
!
(
i
%
16
))
{
printk
(
KERN_NOTICE
"%c
\b
"
,
rotator
[
rotate
&
0x3
]);
printk
(
"%c
\b
"
,
rotator
[
rotate
&
0x3
]);
rotate
++
;
}
}
...
...
@@ -515,6 +517,9 @@ void rd_load()
if
(
MAJOR
(
ROOT_DEV
)
!=
FLOPPY_MAJOR
)
return
;
if
(
rd_prompt
)
{
#ifdef CONFIG_BLK_DEV_FD
floppy_eject
();
#endif
printk
(
KERN_NOTICE
"VFS: Insert root floppy disk to be loaded into ramdisk and press ENTER
\n
"
);
wait_for_keypress
();
...
...
drivers/cdrom/Config.in
View file @
0da8dd36
...
...
@@ -14,7 +14,7 @@ if [ "$CONFIG_SBPCD" = "y" ]; then
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 'Goldstar R420 CDROM support' CONFIG_GSCD
tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206
...
...
drivers/cdrom/aztcd.c
View file @
0da8dd36
#define AZT_VERSION "2.
2
"
/* $Id: aztcd.c,v 2.
20 1996/03/12 18:31:23
root Exp root $
linux/drivers/block/aztcd.c - AztechCD268 CDROM driver
#define AZT_VERSION "2.
30
"
/* $Id: aztcd.c,v 2.
30 1996/04/26 05:32:15
root Exp root $
linux/drivers/block/aztcd.c - Aztech
CD268 CDROM driver
Copyright (C) 1994,95,96 Werner Zimmermann(zimmerma@rz.fht-esslingen.de)
...
...
@@ -23,7 +23,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
HISTORY
V0.0 Adaption to A
daptec
CD268-01A Version 1.3
V0.0 Adaption to A
ztech
CD268-01A Version 1.3
Version is PRE_ALPHA, unresolved points:
1. I use busy wait instead of timer wait in STEN_LOW,DTEN_LOW
thus driver causes CPU overhead and is very slow
...
...
@@ -143,8 +143,12 @@
V2.10 Started to modify azt_poll to prevent reading beyond end of
tracks.
Werner Zimmermann, December 3, 95
NOTE:
Points marked with ??? are questionable !
V2.20 Changed some comments
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/errno.h>
...
...
@@ -178,6 +182,13 @@
#define RETURN(message) {printk("aztcd: Warning: %s failed\n",message);\
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
;
#if 0
...
...
@@ -411,6 +422,10 @@ static int aztSendCmd(int cmd)
#ifdef AZT_DEBUG
printk
(
"aztcd: Executing command %x
\n
"
,
cmd
);
#endif
if
((
azt_port
==
0x1f0
)
||
(
azt_port
==
0x170
))
SWITCH_IDE_SLAVE
;
/*switch IDE interface to slave configuration*/
aztCmd
=
cmd
;
outb
(
POLLED
,
MODE_PORT
);
do
{
if
(
inb
(
STATUS_PORT
)
&
AFL_STATUS
)
break
;
...
...
@@ -778,7 +793,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
memcpy_fromfs
(
&
entry
,
(
void
*
)
arg
,
sizeof
entry
);
if
((
!
aztTocUpToDate
)
||
aztDiskChanged
)
aztUpdateToc
();
if
(
entry
.
cdte_track
==
CDROM_LEADOUT
)
tocPtr
=
&
Toc
[
DiskInfo
.
last
+
1
];
/* ??? */
tocPtr
=
&
Toc
[
DiskInfo
.
last
+
1
];
else
if
(
entry
.
cdte_track
>
DiskInfo
.
last
||
entry
.
cdte_track
<
DiskInfo
.
first
)
{
return
-
EINVAL
;
...
...
@@ -866,7 +881,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
STEN_LOW_WAIT
;
}
if
(
aztSendCmd
(
ACMD_EJECT
))
RETURNM
(
"azt_ioctl 11"
,
-
1
);
STEN_LOW_WAIT
;
/*???*/
STEN_LOW_WAIT
;
aztAudioStatus
=
CDROM_AUDIO_NO_STATUS
;
break
;
case
CDROMEJECT_SW
:
...
...
@@ -1041,7 +1056,7 @@ static void azt_poll(void)
int
loop_ctl
=
1
;
int
skip
=
0
;
if
(
azt_error
)
{
/* ???*/
if
(
azt_error
)
{
if
(
aztSendCmd
(
ACMD_GET_ERROR
))
RETURN
(
"azt_poll 1"
);
STEN_LOW
;
azt_error
=
inb
(
DATA_PORT
)
&
0xFF
;
...
...
@@ -1128,13 +1143,13 @@ static void azt_poll(void)
end_request
(
0
);
return
;
}
/*???*/
/* if (aztSendCmd(ACMD_SET_MODE)) RETURN("azt_poll 3");
outb(0x01, DATA_PORT);
PA_OK;
STEN_LOW;
*/
if
(
aztSendCmd
(
ACMD_GET_STATUS
))
RETURN
(
"azt_poll 4"
);
STEN_LOW
;
/*???*/
STEN_LOW
;
azt_mode
=
1
;
azt_state
=
AZT_S_READ
;
AztTimeout
=
3000
;
...
...
@@ -1234,7 +1249,7 @@ static void azt_poll(void)
}
#endif
st
=
inb
(
STATUS_PORT
)
&
AFL_STATUSorDATA
;
/*???*/
st
=
inb
(
STATUS_PORT
)
&
AFL_STATUSorDATA
;
switch
(
st
)
{
...
...
@@ -1341,7 +1356,7 @@ static void azt_poll(void)
}
AztTimeout
=
READ_TIMEOUT
;
if
(
azt_read_count
==
0
)
{
azt_state
=
AZT_S_STOP
;
/*???*/
azt_state
=
AZT_S_STOP
;
loop_ctl
=
1
;
break
;
}
...
...
@@ -1357,7 +1372,7 @@ static void azt_poll(void)
printk
(
"AZT_S_STOP
\n
"
);
}
#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
)
{
int
i
;
if
(
!
(
inb
(
STATUS_PORT
)
&
AFL_DATA
)
)
{
...
...
@@ -1545,13 +1560,17 @@ int aztcd_init(void)
printk
(
"aztcd: no Aztech CD-ROM Initialization"
);
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: If you have problems, read /usr/src/linux/Documentation/cdrom/aztcd
\n
"
);
if
(
check_region
(
azt_port
,
4
))
{
printk
(
"aztcd: conflict, I/O port (%X) already used
\n
"
,
azt_port
);
if
((
azt_port
==
0x1f0
)
||
(
azt_port
==
0x170
))
st
=
check_region
(
azt_port
,
8
);
/*IDE-interfaces need 8 bytes*/
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
;
}
...
...
@@ -1570,7 +1589,11 @@ int aztcd_init(void)
#endif
/* 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
);
outb
(
ACMD_GET_VERSION
,
CMD_PORT
);
/*Try to get version info*/
...
...
@@ -1600,7 +1623,7 @@ int aztcd_init(void)
{
inb
(
STATUS_PORT
);
/*removing all data from earlier tries*/
inb
(
DATA_PORT
);
}
outb
(
POLLED
,
MODE_PORT
);
/*???*/
outb
(
POLLED
,
MODE_PORT
);
inb
(
CMD_PORT
);
inb
(
CMD_PORT
);
getAztStatus
();
/*trap errors*/
...
...
@@ -1621,7 +1644,7 @@ int aztcd_init(void)
#ifdef AZT_DEBUG
printk
(
"aztcd: Status = %x
\n
"
,
st
);
#endif
outb
(
POLLED
,
MODE_PORT
);
/*???*/
outb
(
POLLED
,
MODE_PORT
);
inb
(
CMD_PORT
);
inb
(
CMD_PORT
);
outb
(
ACMD_GET_VERSION
,
CMD_PORT
);
/*GetVersion*/
...
...
@@ -1654,9 +1677,9 @@ int aztcd_init(void)
{
printk
(
"ORCHID or WEARNES drive detected
\n
"
);
/*ORCHID or WEARNES*/
}
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
(
"
\n
unknown drive or firmware version detected
\n
"
);
printk
(
"aztcd may not run stable, if you want to try anyhow,
\n
"
);
printk
(
"boot with: aztcd=<BaseAddress>,0x79
\n
"
);
...
...
@@ -1677,8 +1700,11 @@ int aztcd_init(void)
blk_dev
[
MAJOR_NR
].
request_fn
=
DEVICE_REQUEST
;
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
();
aztPresent
=
1
;
aztCloseDoor
();
...
...
@@ -2038,7 +2064,7 @@ static int aztGetToc(int multi)
if
(
!
multi
)
{
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
;
}
for
(
limit
=
300
;
limit
>
0
;
limit
--
)
...
...
@@ -2097,7 +2123,12 @@ void cleanup_module(void)
{
printk
(
"What's that: can't unregister aztcd
\n
"
);
return
;
}
release_region
(
azt_port
,
4
);
printk
(
KERN_INFO
"aztcd module released.
\n
"
);
if
((
azt_port
==
0x1f0
)
||
(
azt_port
==
0x170
))
{
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
drivers/char/serial.c
View file @
0da8dd36
...
...
@@ -2448,7 +2448,7 @@ int rs_open(struct tty_struct *tty, struct file * filp)
*/
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
printk
(
" HUB-6"
);
#define SERIAL_OPT
...
...
@@ -2797,7 +2797,7 @@ int rs_init(void)
autoconfig
(
info
);
if
(
info
->
type
==
PORT_UNKNOWN
)
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
->
port
,
info
->
irq
);
switch
(
info
->
type
)
{
...
...
@@ -2867,7 +2867,7 @@ int register_serial(struct serial_struct *req)
printk
(
"register_serial(): autoconfig failed
\n
"
);
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
);
switch
(
info
->
type
)
{
case
PORT_8250
:
...
...
@@ -2895,7 +2895,7 @@ void unregister_serial(int line)
if
(
info
->
tty
)
tty_hangup
(
info
->
tty
);
info
->
type
=
PORT_UNKNOWN
;
printk
(
"tty%02d unloaded
\n
"
,
info
->
line
);
printk
(
KERN_INFO
"tty%02d unloaded
\n
"
,
info
->
line
);
restore_flags
(
flags
);
}
...
...
@@ -2909,6 +2909,7 @@ void cleanup_module(void)
{
unsigned
long
flags
;
int
e1
,
e2
;
int
i
;
/* printk("Unloading %s: version %s\n", serial_name, serial_version); */
save_flags
(
flags
);
...
...
@@ -2923,5 +2924,10 @@ void cleanup_module(void)
printk
(
"SERIAL: failed to unregister callout driver (%d)
\n
"
,
e2
);
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 */
drivers/char/vt.c
View file @
0da8dd36
...
...
@@ -713,7 +713,8 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
/* the frsig is ignored, so we set it to 0 */
vt_cons
[
console
]
->
vt_mode
.
frsig
=
0
;
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
;
}
...
...
drivers/isdn/teles/card.c
View file @
0da8dd36
...
...
@@ -652,6 +652,7 @@ isac_new_ph(struct IsdnCardState *sp)
break
;
case
(
12
):
case
(
13
):
ph_command
(
sp
,
8
);
sp
->
ph_active
=
5
;
isac_sched_event
(
sp
,
ISAC_PHCHANGE
);
if
(
!
sp
->
xmtibh
)
...
...
drivers/net/depca.c
View file @
0da8dd36
...
...
@@ -201,11 +201,12 @@
<pchen@woodruffs121.residence.gatech.edu>.
Add new multicasting code.
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.42
1 96/4/22
davies@wanton.lkg.dec.com
\n
"
;
static
const
char
*
version
=
"depca.c:v0.42
2 96/4/29
davies@wanton.lkg.dec.com
\n
"
;
#include <linux/module.h>
...
...
@@ -483,8 +484,8 @@ depca_hw_init(struct device *dev, u_long ioaddr)
if
(
inw
(
DEPCA_DATA
)
==
STOP
)
{
if
(
mem
==
0
)
{
for
(;
mem_base
[
mem_chkd
];
mem_chkd
++
)
{
mem_start
=
mem_base
[
mem_chkd
];
while
(
mem_base
[
mem_chkd
]
)
{
mem_start
=
mem_base
[
mem_chkd
++
];
DepcaSignature
(
name
,
mem_start
);
if
(
*
name
!=
'\0'
)
break
;
}
...
...
drivers/scsi/NCR5380.c
View file @
0da8dd36
...
...
@@ -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.
*
...
...
@@ -3235,7 +3235,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd) {
#ifndef NCR5380_reset
static
#endif
int
NCR5380_reset
(
Scsi_Cmnd
*
cmd
)
{
int
NCR5380_reset
(
Scsi_Cmnd
*
cmd
,
unsigned
int
dummy
)
{
NCR5380_local_declare
();
NCR5380_setup
(
cmd
->
host
);
...
...
drivers/scsi/NCR5380.h
View file @
0da8dd36
...
...
@@ -298,7 +298,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd);
#ifndef NCR5380_reset
static
#endif
int
NCR5380_reset
(
Scsi_Cmnd
*
cmd
,
unsigned
int
);
int
NCR5380_reset
(
Scsi_Cmnd
*
cmd
,
unsigned
int
reset_flags
);
#ifndef NCR5380_queue_command
static
#endif
...
...
drivers/scsi/dtc.h
View file @
0da8dd36
...
...
@@ -79,7 +79,7 @@ int dtc_abort(Scsi_Cmnd *);
int
dtc_biosparam
(
Disk
*
,
kdev_t
,
int
*
);
int
dtc_detect
(
Scsi_Host_Template
*
);
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
length
,
int
hostno
,
int
inout
);
...
...
drivers/scsi/g_NCR5380.h
View file @
0da8dd36
...
...
@@ -46,7 +46,7 @@ int generic_NCR5380_abort(Scsi_Cmnd *);
int
generic_NCR5380_detect
(
Scsi_Host_Template
*
);
int
generic_NCR5380_release_resources
(
struct
Scsi_Host
*
);
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
length
,
int
hostno
,
int
inout
);
const
char
*
generic_NCR5380_info
(
struct
Scsi_Host
*
);
...
...
drivers/scsi/in2000.c
View file @
0da8dd36
This source diff could not be displayed because it is too large. You can
view the blob
instead.
drivers/scsi/in2000.h
View file @
0da8dd36
#ifndef _IN2000_H
/* $Id: in2000.h,v 1.2 1994/08/25 06:27:38 root Exp root $
/*
* in2000.h - Linux device driver definitions for the
* Always IN2000 ISA SCSI card.
*
* IMPORTANT: This file is for version 1.28 - 27/Apr/1996
*
* Copyright (c) 1996 John Shifflett, GeoLog Consulting
* john@geolog.com
* jshiffle@netcom.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* Header file for the Always IN 2000 driver for Linux
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/types.h>
#include <linux/ioport.h>
/* The IN-2000 is based on a WD33C93 */
#define INSTAT (base + 0x0)
/* R: Auxiliary Status; W: register select */
#define INDATA (base + 0x1)
/* R/W: Data port */
#define INFIFO (base + 0x2)
/* R/W FIFO, Word access only */
#define INREST (base + 0x3)
/* W: Reset everything */
#define INFCNT (base + 0x4)
/* R: FIFO byte count */
#define INFRST (base + 0x5)
/* W: Reset Fifo count and to write */
#define INFWRT (base + 0x7)
/* W: Set FIFO to read */
#define INFLED (base + 0x8)
/* W: Set LED; R: Dip Switch settings */
#define INNLED (base + 0x9)
/* W: reset LED */
#define INVERS (base + 0xa)
/* R: Read hw version, end-reset */
#define ININTR (base + 0xc)
/* W: Interrupt Mask Port */
#define G2CNTRL_HRDY 0x20
/* Sets HOST ready */
/* WD33C93 defines */
#define OWNID 0
#undef CONTROL
#define CONTROL 1
#define TIMEOUT 2
#define TOTSECT 3
#define TOTHEAD 4
#define TOTCYLH 5
#define TOTCYLL 6
#define LADRSHH 7
#define LADRSHL 8
#define LADRSLH 9
#define LADRSLL 10
#define SECTNUM 11
#define HEADNUM 12
#define CYLNUMH 13
#define CYLNUML 14
#define TARGETU 15
#define CMDPHAS 16
#define SYNCTXR 17
#define TXCNTH 18
#define TXCNTM 19
#define TXCNTL 20
#define DESTID 21
#define SRCID 22
#define SCSIST 23
#define COMMAND 24
#define WDDATA 25
#define AUXSTAT 31
/* OWNID Register Bits */
#define OWN_EAF 0x08
#define OWN_EHP 0x10
#define OWN_FS0 0x40
#define OWN_FS1 0x80
/* AUX Register Bits */
#define AUX_DBR 0
#define AUX_PE 1
#define AUX_CIP 0x10
#define AUX_BSY 0x20
#define AUX_LCI 0x40
#define AUX_INT 0x80
/* Select timeout const, 1 count = 8ms */
#define IN2000_TMOUT 0x1f
/* These belong in scsi.h also */
#undef any2scsi
#define any2scsi(up, p) \
(up)[0] = (((unsigned long)(p)) >> 16); \
(up)[1] = (((unsigned long)(p)) >> 8); \
(up)[2] = ((unsigned long)(p));
#undef scsi2int
#define scsi2int(up) ( ((((long)*(up))&0x1f) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) )
#undef xany2scsi
#define xany2scsi(up, p) \
(up)[0] = ((long)(p)) >> 24; \
(up)[1] = ((long)(p)) >> 16; \
(up)[2] = ((long)(p)) >> 8; \
(up)[3] = ((long)(p));
#define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \
+ (((long)(up)[2]) << 8) + ((long)(up)[3]) )
#define MAX_CDB 12
#define MAX_SENSE 14
#define MAX_STATUS 32
#ifndef IN2000_H
#define IN2000_H
#include <asm/io.h>
/* We include version.h to get 'LINUX_VERSION_CODE' - a define used here
* and there in the source to get around various compatibility problems:
* - pre-1.3.xx kernels didn't have 'kdev_t' or proc, and their
* <blk.h> was in a different place.
* - 1.3.70 introduced an additional argument for interrupt functions
* - 1.3.89 added an argument to in2000_reset(), which we don't really
* use at the moment. But for completeness...
*/
#include <linux/version.h>
#define uchar unsigned char
/* IN2000 io_port offsets */
#define IO_WD_ASR 0x00
/* R - 3393 auxstat reg */
#define ASR_INT 0x80
#define ASR_LCI 0x40
#define ASR_BSY 0x20
#define ASR_CIP 0x10
#define ASR_PE 0x02
#define ASR_DBR 0x01
#define IO_WD_ADDR 0x00
/* W - 3393 address reg */
#define IO_WD_DATA 0x01
/* R/W - rest of 3393 regs */
#define IO_FIFO 0x02
/* R/W - in2000 dual-port fifo (16 bits) */
#define IN2000_FIFO_SIZE 2048
/* fifo capacity in bytes */
#define IO_CARD_RESET 0x03
/* W - in2000 start master reset */
#define IO_FIFO_COUNT 0x04
/* R - in2000 fifo counter */
#define IO_FIFO_WRITE 0x05
/* W - clear fifo counter, start write */
#define IO_FIFO_READ 0x07
/* W - start fifo read */
#define IO_LED_OFF 0x08
/* W - turn off in2000 activity LED */
#define IO_SWITCHES 0x08
/* R - read in2000 dip switch */
#define SW_ADDR0 0x01
/* bit 0 = bit 0 of index to io addr */
#define SW_ADDR1 0x02
/* bit 1 = bit 1 of index io addr */
#define SW_DISINT 0x04
/* bit 2 true if ints disabled */
#define SW_INT0 0x08
/* bit 3 = bit 0 of index to interrupt */
#define SW_INT1 0x10
/* bit 4 = bit 1 of index to interrupt */
#define SW_INT_SHIFT 3
/* shift right this amount to right justify int bits */
#define SW_SYNC_DOS5 0x20
/* bit 5 used by Always BIOS */
#define SW_FLOPPY 0x40
/* bit 6 true if floppy enabled */
#define SW_BIT7 0x80
/* bit 7 hardwired true (ground) */
#define IO_LED_ON 0x09
/* W - turn on in2000 activity LED */
#define IO_HARDWARE 0x0a
/* R - read in2000 hardware rev, stop reset */
#define IO_INTR_MASK 0x0c
/* W - in2000 interrupt mask reg */
#define IMASK_WD 0x01
/* WD33c93 interrupt mask */
#define IMASK_FIFO 0x02
/* FIFO interrupt mask */
/* wd register names */
#define WD_OWN_ID 0x00
#define WD_CONTROL 0x01
#define WD_TIMEOUT_PERIOD 0x02
#define WD_CDB_1 0x03
#define WD_CDB_2 0x04
#define WD_CDB_3 0x05
#define WD_CDB_4 0x06
#define WD_CDB_5 0x07
#define WD_CDB_6 0x08
#define WD_CDB_7 0x09
#define WD_CDB_8 0x0a
#define WD_CDB_9 0x0b
#define WD_CDB_10 0x0c
#define WD_CDB_11 0x0d
#define WD_CDB_12 0x0e
#define WD_TARGET_LUN 0x0f
#define WD_COMMAND_PHASE 0x10
#define WD_SYNCHRONOUS_TRANSFER 0x11
#define WD_TRANSFER_COUNT_MSB 0x12
#define WD_TRANSFER_COUNT 0x13
#define WD_TRANSFER_COUNT_LSB 0x14
#define WD_DESTINATION_ID 0x15
#define WD_SOURCE_ID 0x16
#define WD_SCSI_STATUS 0x17
#define WD_COMMAND 0x18
#define WD_DATA 0x19
#define WD_QUEUE_TAG 0x1a
#define WD_AUXILIARY_STATUS 0x1f
/* WD commands */
#define WD_CMD_RESET 0x00
#define WD_CMD_ABORT 0x01
#define WD_CMD_ASSERT_ATN 0x02
#define WD_CMD_NEGATE_ACK 0x03
#define WD_CMD_DISCONNECT 0x04
#define WD_CMD_RESELECT 0x05
#define WD_CMD_SEL_ATN 0x06
#define WD_CMD_SEL 0x07
#define WD_CMD_SEL_ATN_XFER 0x08
#define WD_CMD_SEL_XFER 0x09
#define WD_CMD_RESEL_RECEIVE 0x0a
#define WD_CMD_RESEL_SEND 0x0b
#define WD_CMD_WAIT_SEL_RECEIVE 0x0c
#define WD_CMD_TRANS_ADDR 0x18
#define WD_CMD_TRANS_INFO 0x20
#define WD_CMD_TRANSFER_PAD 0x21
#define WD_CMD_SBT_MODE 0x80
/* SCSI Bus Phases */
#define PHS_DATA_OUT 0x00
#define PHS_DATA_IN 0x01
#define PHS_COMMAND 0x02
#define PHS_STATUS 0x03
#define PHS_MESS_OUT 0x06
#define PHS_MESS_IN 0x07
/* Command Status Register definitions */
/* reset state interrupts */
#define CSR_RESET 0x00
#define CSR_RESET_AF 0x01
/* successful completion interrupts */
#define CSR_RESELECT 0x10
#define CSR_SELECT 0x11
#define CSR_SEL_XFER_DONE 0x16
#define CSR_XFER_DONE 0x18
/* paused or aborted interrupts */
#define CSR_MSGIN 0x20
#define CSR_SDP 0x21
#define CSR_SEL_ABORT 0x22
#define CSR_RESEL_ABORT 0x25
#define CSR_RESEL_ABORT_AM 0x27
#define CSR_ABORT 0x28
/* terminated interrupts */
#define CSR_INVALID 0x40
#define CSR_UNEXP_DISC 0x41
#define CSR_TIMEOUT 0x42
#define CSR_PARITY 0x43
#define CSR_PARITY_ATN 0x44
#define CSR_BAD_STATUS 0x45
#define CSR_UNEXP 0x48
/* service required interrupts */
#define CSR_RESEL 0x80
#define CSR_RESEL_AM 0x81
#define CSR_DISC 0x85
#define CSR_SRV_REQ 0x88
/* Own ID/CDB Size register */
#define OWNID_EAF 0x08
#define OWNID_EHP 0x10
#define OWNID_RAF 0x20
#define OWNID_FS_8 0x00
#define OWNID_FS_12 0x40
#define OWNID_FS_16 0x80
/* Control register */
#define CTRL_HSP 0x01
#define CTRL_HA 0x02
#define CTRL_IDI 0x04
#define CTRL_EDI 0x08
#define CTRL_HHP 0x10
#define CTRL_POLLED 0x00
#define CTRL_BURST 0x20
#define CTRL_BUS 0x40
#define CTRL_DMA 0x80
/* Timeout Period register */
#define TIMEOUT_PERIOD_VALUE 20
/* results in 200 ms. */
/* Synchronous Transfer Register */
#define STR_FSS 0x80
/* Destination ID register */
#define DSTID_DPD 0x40
#define DATA_OUT_DIR 0
#define DATA_IN_DIR 1
#define DSTID_SCC 0x80
/* Source ID register */
#define SRCID_MASK 0x07
#define SRCID_SIV 0x08
#define SRCID_DSP 0x20
#define SRCID_ES 0x40
#define SRCID_ER 0x80
#define DEFAULT_SX_PER 500
/* (ns) fairly safe */
#define DEFAULT_SX_OFF 0
/* aka async */
#define OPTIMUM_SX_PER 252
/* (ns) best we can do (mult-of-4) */
#define OPTIMUM_SX_OFF 12
/* size of in2000 fifo */
struct
sx_period
{
unsigned
int
period_ns
;
uchar
reg_value
;
};
struct
IN2000_hostdata
{
struct
Scsi_Host
*
next
;
uchar
chip
;
/* what kind of wd33c93 chip? */
uchar
microcode
;
/* microcode rev if 'B' */
unsigned
short
io_base
;
/* IO port base */
unsigned
int
dip_switch
;
/* dip switch settings */
unsigned
int
hrev
;
/* hardware revision of card */
volatile
uchar
busy
[
8
];
/* index = target, bit = lun */
volatile
Scsi_Cmnd
*
input_Q
;
/* commands waiting to be started */
volatile
Scsi_Cmnd
*
selecting
;
/* trying to select this command */
volatile
Scsi_Cmnd
*
connected
;
/* currently connected command */
volatile
Scsi_Cmnd
*
disconnected_Q
;
/* commands waiting for reconnect */
uchar
state
;
/* what we are currently doing */
uchar
fifo
;
/* what the FIFO is up to */
uchar
level2
;
/* extent to which Level-2 commands are used */
uchar
disconnect
;
/* disconnect/reselect policy */
unsigned
int
args
;
/* set from command-line argument */
uchar
incoming_msg
[
8
];
/* filled during message_in phase */
int
incoming_ptr
;
/* mainly used with EXTENDED messages */
uchar
outgoing_msg
[
8
];
/* send this during next message_out */
int
outgoing_len
;
/* length of outgoing message */
unsigned
int
default_sx_per
;
/* default transfer period for SCSI bus */
uchar
sync_xfer
[
8
];
/* sync_xfer reg settings per target */
uchar
sync_stat
[
8
];
/* status of sync negotiation per target */
uchar
sync_off
;
/* bit mask: don't use sync with these targets */
uchar
proc
;
/* bit mask: what's in proc output */
};
/* defines for hostdata->chip */
#define C_WD33C93 0
#define C_WD33C93A 1
#define C_WD33C93B 2
#define C_UNKNOWN_CHIP 100
/* defines for hostdata->state */
#define S_UNCONNECTED 0
#define S_SELECTING 1
#define S_RUNNING_LEVEL2 2
#define S_CONNECTED 3
#define S_PRE_TMP_DISC 4
#define S_PRE_CMP_DISC 5
/* defines for hostdata->fifo */
#define FI_FIFO_UNUSED 0
#define FI_FIFO_READING 1
#define FI_FIFO_WRITING 2
/* defines for hostdata->level2 */
/* NOTE: only the first 3 are trustworthy at this point -
* having trouble when more than 1 device is reading/writing
* at the same time...
*/
#define L2_NONE 0
/* no combination commands - we get lots of ints */
#define L2_SELECT 1
/* start with SEL_ATN_XFER, but never resume it */
#define L2_BASIC 2
/* resume after STATUS ints & RDP messages */
#define L2_DATA 3
/* resume after DATA_IN/OUT ints */
#define L2_MOST 4
/* resume after anything except a RESELECT int */
#define L2_RESELECT 5
/* resume after everything, including RESELECT ints */
#define L2_ALL 6
/* always resume */
/* defines for hostdata->disconnect */
#define DIS_NEVER 0
#define DIS_ADAPTIVE 1
#define DIS_ALWAYS 2
/* defines for hostdata->args */
#define DB_TEST 1<<0
#define DB_FIFO 1<<1
#define DB_QUEUE_COMMAND 1<<2
#define DB_EXECUTE 1<<3
#define DB_INTR 1<<4
#define DB_TRANSFER 1<<5
#define DB_MASK 0x3f
#define A_NO_SCSI_RESET 1<<15
/* defines for hostdata->sync_xfer[] */
#define SS_UNSET 0
#define SS_FIRST 1
#define SS_WAITING 2
#define SS_SET 3
/* defines for hostdata->proc */
#define PR_VERSION 1<<0
#define PR_INFO 1<<1
#define PR_TOTALS 1<<2
#define PR_CONNECTED 1<<3
#define PR_INPUTQ 1<<4
#define PR_DISCQ 1<<5
#define PR_TEST 1<<6
#define PR_STOP 1<<7
int
in2000_detect
(
Scsi_Host_Template
*
);
int
in2000_command
(
Scsi_Cmnd
*
);
int
in2000_queuecommand
(
Scsi_Cmnd
*
,
void
(
*
done
)(
Scsi_Cmnd
*
));
int
in2000_abort
(
Scsi_Cmnd
*
);
int
in2000_reset
(
Scsi_Cmnd
*
);
int
in2000_biosparam
(
Disk
*
,
kdev_t
,
int
*
);
void
in2000_setup
(
char
*
,
int
*
);
int
in2000_proc_info
(
char
*
,
char
**
,
off_t
,
int
,
int
,
int
);
struct
proc_dir_entry
proc_scsi_in2000
;
#ifndef NULL
#define NULL 0
#if LINUX_VERSION_CODE >= 0x010300
int
in2000_biosparam
(
struct
scsi_disk
*
,
kdev_t
,
int
*
);
#else
int
in2000_biosparam
(
Disk
*
,
int
,
int
*
);
#endif
#if LINUX_VERSION_CODE >= 0x010359
/* 1.3.89 */
int
in2000_reset
(
Scsi_Cmnd
*
,
unsigned
int
);
#else
int
in2000_reset
(
Scsi_Cmnd
*
);
#endif
/* next may be "SG_NONE" or "SG_ALL" or nr. of (1k) blocks per R/W Cmd. */
#define IN2000_SG SG_ALL
#define IN2000 {NULL, NULL, \
NULL, NULL, \
"Always IN2000", in2000_detect, NULL, \
NULL, in2000_command, \
in2000_queuecommand, \
in2000_abort, \
in2000_reset, \
NULL, \
in2000_biosparam, \
1, 7, IN2000_SG, 1, 0, 0}
#define IN2000_CAN_Q 16
#define IN2000_SG SG_ALL
#define IN2000_CPL 2
#define IN2000_HOST_ID 7
#if LINUX_VERSION_CODE >= 0x010300
#define IN2000 { NULL,
/* link pointer for modules */
\
NULL,
/* usage_count for modules */
\
&proc_scsi_in2000,
/* pointer to /proc/scsi directory entry */
\
in2000_proc_info,
/* pointer to proc info function */
\
"Always IN2000",
/* device name */
\
in2000_detect,
/* returns number of in2000's found */
\
NULL,
/* optional unload function for modules */
\
NULL,
/* optional misc info function */
\
NULL,
/* send scsi command, wait for completion */
\
in2000_queuecommand,
/* queue scsi command, don't wait */
\
in2000_abort,
/* abort current command */
\
in2000_reset,
/* reset scsi bus */
\
NULL,
/* slave_attach - unused */
\
in2000_biosparam,
/* figures out BIOS parameters for lilo, etc */
\
IN2000_CAN_Q,
/* max commands we can queue up */
\
IN2000_HOST_ID,
/* host-adapter scsi id */
\
IN2000_SG,
/* scatter-gather table size */
\
IN2000_CPL,
/* commands per lun */
\
0,
/* board counter */
\
0,
/* unchecked dma */
\
DISABLE_CLUSTERING \
}
#else
#define IN2000 { NULL,
/* link pointer for modules */
\
NULL,
/* usage_count for modules */
\
/* NULL,*/
/* pointer to /proc/scsi directory entry */
\
/* NULL,*/
/* pointer to proc info function */
\
"Always IN2000",
/* device name */
\
in2000_detect,
/* returns number of in2000's found */
\
NULL,
/* optional unload function for modules */
\
NULL,
/* optional misc info function */
\
NULL,
/* send scsi command, wait for completion */
\
in2000_queuecommand,
/* queue scsi command, don't wait */
\
in2000_abort,
/* abort current command */
\
in2000_reset,
/* reset scsi bus */
\
NULL,
/* slave_attach - unused */
\
in2000_biosparam,
/* figures out BIOS parameters for lilo, etc */
\
IN2000_CAN_Q,
/* max commands we can queue up */
\
IN2000_HOST_ID,
/* host-adapter scsi id */
\
IN2000_SG,
/* scatter-gather table size */
\
IN2000_CPL,
/* commands per lun */
\
0,
/* board counter */
\
0,
/* unchecked dma */
\
DISABLE_CLUSTERING \
}
#endif
#endif
/* IN2000_H */
drivers/scsi/in2000.readme
0 → 100644
View file @
0da8dd36
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
drivers/scsi/pas16.h
View file @
0da8dd36
...
...
@@ -118,7 +118,7 @@ int pas16_abort(Scsi_Cmnd *);
int
pas16_biosparam
(
Disk
*
,
kdev_t
,
int
*
);
int
pas16_detect
(
Scsi_Host_Template
*
);
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
length
,
int
hostno
,
int
inout
);
...
...
drivers/scsi/t128.h
View file @
0da8dd36
...
...
@@ -95,7 +95,7 @@ int t128_abort(Scsi_Cmnd *);
int
t128_biosparam
(
Disk
*
,
kdev_t
,
int
*
);
int
t128_detect
(
Scsi_Host_Template
*
);
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
length
,
int
hostno
,
int
inout
);
...
...
drivers/sound/Readme.modules
View file @
0da8dd36
...
...
@@ -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
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
---------------------
Modularized sound driver doesn't display messages during initialization as
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:
insmod sound
init_trace
=1
insmod sound
trace_init
=1
drivers/sound/pss.c
View file @
0da8dd36
...
...
@@ -520,10 +520,11 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
case
SNDCTL_COPR_SENDMSG
:
{
/* send buf->len words from buf->data to DSP */
copr_msg
*
buf
;
unsigned
long
flags
;
unsigned
short
*
data
;
unsigned
short
tmp
;
int
i
;
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)
data
=
(
unsigned
short
*
)
(
buf
->
data
);
/* printk( "SNDCTL_COPR_SENDMSG: data = %d", data ); */
save_flags
(
flags
);
cli
();
for
(
i
=
0
;
i
<
buf
->
len
;
i
++
)
{
tmp
=
*
data
++
;
if
(
!
pss_put_dspword
(
devc
,
tmp
))
if
(
!
pss_put_dspword
(
devc
,
*
data
++
))
{
restore_flags
(
flags
);
buf
->
len
=
i
;
/* feed back number of WORDs sent */
memcpy_tofs
((
&
((
char
*
)
arg
)[
0
]),
&
buf
,
sizeof
(
buf
));
/* feed back number of WORDs sent */
memcpy_tofs
(
(
char
*
)(
&
(((
copr_msg
*
)
arg
)
->
len
)),
(
char
*
)(
&
i
),
sizeof
(
buf
->
len
));
kfree
(
buf
);
return
-
EIO
;
}
...
...
@@ -562,6 +561,7 @@ pss_coproc_ioctl (void *dev_info, unsigned int cmd, caddr_t arg, int local)
case
SNDCTL_COPR_RCVMSG
:
{
/* try to read as much words as possible from DSP into buf */
copr_msg
*
buf
;
unsigned
long
flags
;
unsigned
short
*
data
;
...
...
@@ -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
);
if
(
buf
==
NULL
)
return
-
ENOSPC
;
#if 0
memcpy_fromfs ((char *) buf, &(((char *) arg)[0]), sizeof (*buf));
#endif
data
=
(
unsigned
short
*
)
buf
->
data
;
save_flags
(
flags
);
cli
();
for
(
i
=
0
;
i
<
buf
->
len
;
i
++
)
for
(
i
=
0
;
i
<
sizeof
(
buf
->
data
)
;
i
++
)
{
if
(
!
pss_get_dspword
(
devc
,
data
++
))
{
buf
->
len
=
i
;
/* feed back number of WORDs read */
err
=
-
EIO
;
err
=
(
i
==
0
)
?
-
EIO
:
0
;
/* EIO only if no word read */
break
;
}
}
if
(
i
==
sizeof
(
buf
->
data
)
)
buf
->
len
=
i
;
restore_flags
(
flags
);
memcpy_tofs
((
&
((
char
*
)
arg
)[
0
]),
&
buf
,
sizeof
(
buf
));
memcpy_tofs
((
&
((
char
*
)
arg
)[
0
]),
buf
,
sizeof
(
*
buf
));
kfree
(
buf
);
return
err
;
...
...
fs/ext2/ioctl.c
View file @
0da8dd36
...
...
@@ -26,12 +26,16 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
switch
(
cmd
)
{
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
;
put_
fs_long
(
inode
->
u
.
ext2_i
.
i_flags
,
(
long
*
)
arg
);
put_
user
(
inode
->
u
.
ext2_i
.
i_flags
,
(
int
*
)
arg
);
return
0
;
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
* when the security level is zero.
...
...
@@ -59,16 +63,20 @@ int ext2_ioctl (struct inode * inode, struct file * filp, unsigned int cmd,
inode
->
i_dirt
=
1
;
return
0
;
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
;
put_
fs_long
(
inode
->
u
.
ext2_i
.
i_version
,
(
long
*
)
arg
);
put_
user
(
inode
->
u
.
ext2_i
.
i_version
,
(
int
*
)
arg
);
return
0
;
case
EXT2_IOC_SETVERSION
:
if
((
current
->
fsuid
!=
inode
->
i_uid
)
&&
!
fsuser
())
return
-
EPERM
;
if
(
IS_RDONLY
(
inode
))
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_dirt
=
1
;
return
0
;
...
...
fs/super.c
View file @
0da8dd36
...
...
@@ -30,6 +30,7 @@
#include <linux/string.h>
#include <linux/locks.h>
#include <linux/mm.h>
#include <linux/fd.h>
#include <asm/system.h>
#include <asm/segment.h>
...
...
@@ -965,6 +966,7 @@ static void do_mount_root(void)
#ifdef CONFIG_BLK_DEV_FD
if
(
MAJOR
(
ROOT_DEV
)
==
FLOPPY_MAJOR
)
{
floppy_eject
();
printk
(
KERN_NOTICE
"VFS: Insert root floppy and press ENTER
\n
"
);
wait_for_keypress
();
}
...
...
fs/ufs/ufs_super.c
View file @
0da8dd36
...
...
@@ -104,6 +104,7 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
* and s_type when we return.
*/
MOD_INC_USE_COUNT
;
lock_super
(
sb
);
/* XXX - make everything read only for testing */
...
...
@@ -119,7 +120,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
}
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... */
usb
=
(
struct
ufs_superblock
*
)
__get_free_page
(
GFP_KERNEL
);
...
...
@@ -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
"
,
usb
->
fs_magic
,
MAJOR
(
sb
->
s_dev
),
MINOR
(
sb
->
s_dev
));
MOD_DEC_USE_COUNT
;
return
(
NULL
);
}
...
...
@@ -238,7 +241,8 @@ ufs_read_super(struct super_block * sb, void * data, int silent)
ufs_read_super_lose:
/* XXX - clean up */
return
(
0
);
MOD_DEC_USE_COUNT
;
return
(
NULL
);
}
void
ufs_put_super
(
struct
super_block
*
sb
)
...
...
include/asm-i386/floppy.h
View file @
0da8dd36
...
...
@@ -33,6 +33,8 @@
"floppy", NULL)
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL)
#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_residue
=
0
;
...
...
@@ -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
{
void
(
*
_enable_dma
)(
unsigned
int
dummy
);
...
...
@@ -209,6 +230,8 @@ struct fd_routine_l {
unsigned
long
flags
,
const
char
*
device
,
void
*
dev_id
);
unsigned
long
(
*
_dma_mem_alloc
)
(
unsigned
long
size
);
void
(
*
_dma_mem_free
)(
unsigned
long
addr
,
unsigned
long
size
);
}
fd_routine
[]
=
{
{
enable_dma
,
...
...
@@ -221,6 +244,8 @@ struct fd_routine_l {
set_dma_count
,
get_dma_residue
,
request_irq
,
dma_mem_alloc
,
dma_mem_free
},
{
vdma_enable_dma
,
...
...
@@ -232,7 +257,9 @@ struct fd_routine_l {
vdma_set_dma_addr
,
vdma_set_dma_count
,
vdma_get_dma_residue
,
vdma_request_irq
vdma_request_irq
,
vdma_mem_alloc
,
vdma_mem_free
}
};
...
...
@@ -258,6 +285,6 @@ static int FDC2 = -1;
* driver otherwise. It doesn't matter much for performance anyway, as most
* 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 */
include/asm-mips/floppy.h
View file @
0da8dd36
...
...
@@ -37,12 +37,33 @@
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL);
#define MAX_BUFFER_SECTORS 24
#define virtual_dma_init() \
if (boot_info.machtype == MACH_ACER_PICA_61 || \
boot_info.machtype == MACH_MIPS_MAGNUM_4000 || \
boot_info.machtype == MACH_OLIVETTI_M700) \
vdma_alloc(PHYSADDR(floppy_track_buffer), \
512*2*MAX_BUFFER_SECTORS);
static
unsigned
long
mips_dma_mem_alloc
(
unsigned
long
size
)
{
int
order
=
__get_order
(
size
);
unsigned
long
mem
;
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 ...
...
...
include/asm-sparc/floppy.h
View file @
0da8dd36
...
...
@@ -344,4 +344,15 @@ static int sun_floppy_init(void)
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) */
include/linux/aztcd.h
View file @
0da8dd36
/* $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
* Copyright (C) 1994, 1995 Werner Zimmermann
...
...
@@ -23,7 +23,6 @@
* October 1994 Email: zimmerma@rz.fht-esslingen.de
*/
/* *** change this to set the I/O port address of your CD-ROM drive*/
#define AZT_BASE_ADDR 0x320
...
...
include/linux/fd.h
View file @
0da8dd36
...
...
@@ -368,4 +368,10 @@ struct floppy_raw_cmd {
#define FDEJECT _IO(2, 0x5a)
/* 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
include/linux/fs.h
View file @
0da8dd36
...
...
@@ -325,7 +325,7 @@ struct file {
loff_t
f_pos
;
unsigned
short
f_flags
;
unsigned
short
f_count
;
unsigned
long
f_reada
,
f_ramax
,
f_ra
pos
,
f_ralen
,
f_rawin
;
unsigned
long
f_reada
,
f_ramax
,
f_ra
end
,
f_ralen
,
f_rawin
;
struct
file
*
f_next
,
*
f_prev
;
int
f_owner
;
/* pid or -pgrp where SIGIO should be sent */
struct
inode
*
f_inode
;
...
...
include/linux/skbuff.h
View file @
0da8dd36
...
...
@@ -18,6 +18,7 @@
#include <linux/time.h>
#include <asm/atomic.h>
#include <asm/types.h>
#define CONFIG_SKB_CHECK 0
...
...
init/main.c
View file @
0da8dd36
...
...
@@ -80,6 +80,7 @@ extern void aic7xxx_setup(char *str, int *ints);
extern
void
AM53C974_setup
(
char
*
str
,
int
*
ints
);
extern
void
BusLogic_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
ppa_setup
(
char
*
str
,
int
*
ints
);
extern
void
scsi_luns_setup
(
char
*
str
,
int
*
ints
);
...
...
@@ -308,6 +309,9 @@ struct {
#ifdef CONFIG_SCSI_FUTURE_DOMAIN
{
"fdomain="
,
fdomain_setup
},
#endif
#ifdef CONFIG_SCSI_IN2000
{
"in2000="
,
in2000_setup
},
#endif
#ifdef CONFIG_SCSI_PPA
{
"ppa="
,
ppa_setup
},
#endif
...
...
kernel/ksyms.c
View file @
0da8dd36
...
...
@@ -120,6 +120,7 @@ struct symbol_table symbol_table = {
X
(
do_munmap
),
X
(
insert_vm_struct
),
X
(
merge_segments
),
X
(
exit_mm
),
/* internal kernel memory management */
X
(
__get_free_pages
),
...
...
mm/filemap.c
View file @
0da8dd36
...
...
@@ -356,8 +356,8 @@ static void profile_readahead(int async, struct file *filp)
total_rawin
/
total_reada
,
(
total_async
*
100
)
/
total_reada
);
#ifdef DEBUG_READAHEAD
printk
(
"Readahead snapshot: max=%ld, len=%ld, win=%ld, ra
pos
=%ld
\n
"
,
filp
->
f_ramax
,
filp
->
f_ralen
,
filp
->
f_rawin
,
filp
->
f_ra
pos
);
printk
(
"Readahead snapshot: max=%ld, len=%ld, win=%ld, ra
end
=%ld
\n
"
,
filp
->
f_ramax
,
filp
->
f_ralen
,
filp
->
f_rawin
,
filp
->
f_ra
end
);
#endif
total_reada
=
0
;
...
...
@@ -375,7 +375,7 @@ static void profile_readahead(int async, struct file *filp)
* Read-ahead context:
* -------------------
* The read ahead context fields of the "struct file" are the following:
* - f_ra
pos
: position of the first byte after the last page we tried to
* - f_ra
end
: position of the first byte after the last page we tried to
* read ahead.
* - f_ramax : current read-ahead maximum size.
* - f_ralen : length of the current IO read block we tried to read-ahead.
...
...
@@ -389,14 +389,15 @@ static void profile_readahead(int async, struct file *filp)
* ------------------
* MIN_READAHEAD : minimum read-ahead size when read-ahead.
* MAX_READAHEAD : maximum read-ahead size when read-ahead.
* MAX_READWINDOW : maximum read window length.
*
* Synchronous read-ahead benefits:
* --------------------------------
* Using reasonable IO xfer length from peripheral devices increase system
* performances.
* Reasonable means, in this context, not too large but not too small.
* The actual maximum value is MAX_READAHEAD + PAGE_SIZE = 32k
* The actual maximum value is:
* MAX_READAHEAD + PAGE_SIZE = 76k is CONFIG_READA_SMALL is undefined
* and 32K if defined.
*
* Asynchronous read-ahead benefits:
* ---------------------------------
...
...
@@ -421,110 +422,117 @@ static void profile_readahead(int async, struct file *filp)
* - The number of effective pending IO read requests.
* ONE seems to be the only reasonable value.
* - The total memory pool usage for the file access stream.
* We try to have a limit of MAX_READWINDOW = 48K.
* This maximum memory usage is implicitely 2 IO read chunks:
* 2*(MAX_READAHEAD + PAGE_SIZE) = 156K if CONFIG_READA_SMALL is undefined,
* 64k if defined.
*/
#
define MAX_READWINDOW (PAGE_SIZE*12)
#
if 0 /* small readahead */
#define MAX_READAHEAD (PAGE_SIZE*7)
#define MIN_READAHEAD (PAGE_SIZE)
#define MIN_READAHEAD (PAGE_SIZE*2)
#else
#define MAX_READAHEAD (PAGE_SIZE*18)
#define MIN_READAHEAD (PAGE_SIZE*3)
#endif
static
inline
unsigned
long
generic_file_readahead
(
struct
file
*
filp
,
struct
inode
*
inode
,
int
try_async
,
unsigned
long
pos
,
struct
page
*
page
,
static
inline
unsigned
long
generic_file_readahead
(
int
reada_ok
,
struct
file
*
filp
,
struct
inode
*
inode
,
unsigned
long
pos
,
struct
page
*
page
,
unsigned
long
page_cache
)
{
unsigned
long
max_ahead
,
ahead
;
unsigned
long
ra
pos
,
ppos
;
unsigned
long
ra
end
,
ppos
;
ppos
=
pos
&
PAGE_MASK
;
ra
pos
=
filp
->
f_rapos
&
PAGE_MASK
;
ra
end
=
filp
->
f_raend
&
PAGE_MASK
;
max_ahead
=
0
;
/*
* If the current page is locked, and if the current position is outside the
* previous read IO request, try some synchronous read-ahead in order
* to avoid too small IO requests.
* The current page is locked.
* If the current position is inside the previous read IO request, do not
* try to reread previously read ahead pages.
* Otherwise decide or not to read ahead some pages synchronously.
* If we are not going to read ahead, set the read ahead context for this
* page only.
*/
if
(
PageLocked
(
page
))
{
if
(
!
rapos
||
ppos
>=
rapos
||
ppos
+
filp
->
f_ralen
<
rapos
)
{
ra
pos
=
ppos
;
if
(
ra
pos
<
inode
->
i_size
)
if
(
!
filp
->
f_ralen
||
ppos
>=
raend
||
ppos
+
filp
->
f_ralen
<
raend
)
{
ra
end
=
ppos
;
if
(
ra
end
<
inode
->
i_size
)
max_ahead
=
filp
->
f_ramax
;
filp
->
f_rawin
=
0
;
filp
->
f_ralen
=
PAGE_SIZE
;
if
(
!
max_ahead
)
{
filp
->
f_raend
=
ppos
+
filp
->
f_ralen
;
filp
->
f_rawin
+=
filp
->
f_ralen
;
}
}
}
/*
* The current page is not locked
* If the current position is inside the last read-ahead IO request,
* it is the moment to try asynchronous read-ahead.
* try_async = 2 means that we have to force unplug of the device in
* order to force read IO asynchronously.
* The current page is not locked.
* If we were reading ahead and,
* if the current max read ahead size is not zero and,
* if the current position is inside the last read-ahead IO request,
* it is the moment to try to read ahead asynchronously.
* We will later force unplug device in order to force asynchronous read IO.
*/
else
if
(
try_async
==
1
&&
rapos
>=
PAGE_SIZE
&&
ppos
<=
ra
pos
&&
ppos
+
filp
->
f_ralen
>=
rapos
)
{
else
if
(
reada_ok
&&
filp
->
f_ramax
&&
raend
>=
PAGE_SIZE
&&
ppos
<=
ra
end
&&
ppos
+
filp
->
f_ralen
>=
raend
)
{
/*
* Add ONE page to max_ahead in order to try to have about the same IO max size
* as synchronous read-ahead (MAX_READAHEAD + 1)*PAGE_SIZE.
* Compute the position of the last page we have tried to read.
* Compute the position of the last page we have tried to read in order to
* begin to read ahead just at the next page.
*/
ra
pos
-=
PAGE_SIZE
;
if
(
ra
pos
<
inode
->
i_size
)
ra
end
-=
PAGE_SIZE
;
if
(
ra
end
<
inode
->
i_size
)
max_ahead
=
filp
->
f_ramax
+
PAGE_SIZE
;
if
(
max_ahead
)
{
filp
->
f_rawin
=
filp
->
f_ralen
;
filp
->
f_ralen
=
0
;
try_async
=
2
;
reada_ok
=
2
;
}
}
/*
* Try to read pages.
* We hope that ll_rw_blk() plug/unplug, coalescence
and sort will work fin
e
*
enough
to avoid too bad actuals IO requests.
* Try to read
ahead
pages.
* We hope that ll_rw_blk() plug/unplug, coalescence
, requests sort and th
e
*
scheduler, will work enough for us
to avoid too bad actuals IO requests.
*/
ahead
=
0
;
while
(
ahead
<
max_ahead
)
{
ahead
+=
PAGE_SIZE
;
page_cache
=
try_to_read_ahead
(
inode
,
ra
pos
+
ahead
,
page_cache
);
page_cache
=
try_to_read_ahead
(
inode
,
ra
end
+
ahead
,
page_cache
);
}
/*
* If we tried to read some pages,
* If we tried to read ahead some pages,
* If we tried to read ahead asynchronously,
* Try to force unplug of the device in order to start an asynchronous
* read IO request.
* Update the read-ahead context.
* Store the length of the current read-ahead window.
*
Add PAGE_SIZE to the max read ahead size each time we have read-ahead
* That
recipe
avoid to do some large IO for files that are not really
*
Double the current max read ahead size.
* That
heuristic
avoid to do some large IO for files that are not really
* accessed sequentially.
* Do that only if the read ahead window is lower that MAX_READWINDOW
* in order to limit the amount of pages used for this file access context.
* If asynchronous,
* Try to force unplug of the device in order to start an asynchronous
* read IO request.
*/
if
(
ahead
)
{
if
(
reada_ok
==
2
)
{
run_task_queue
(
&
tq_disk
);
}
filp
->
f_ralen
+=
ahead
;
filp
->
f_rawin
+=
filp
->
f_ralen
;
filp
->
f_ra
pos
=
rapos
+
ahead
+
PAGE_SIZE
;
filp
->
f_ra
end
=
raend
+
ahead
+
PAGE_SIZE
;
if
(
filp
->
f_rawin
<
MAX_READWINDOW
)
filp
->
f_ramax
+=
PAGE_SIZE
;
else
if
(
filp
->
f_rawin
>
MAX_READWINDOW
&&
filp
->
f_ramax
>
PAGE_SIZE
)
filp
->
f_ramax
-=
PAGE_SIZE
;
filp
->
f_ramax
+=
filp
->
f_ramax
;
if
(
filp
->
f_ramax
>
MAX_READAHEAD
)
filp
->
f_ramax
=
MAX_READAHEAD
;
#ifdef PROFILE_READAHEAD
profile_readahead
((
try_async
==
2
),
filp
);
profile_readahead
((
reada_ok
==
2
),
filp
);
#endif
if
(
try_async
==
2
)
{
run_task_queue
(
&
tq_disk
);
}
}
/*
* Wait on the page if necessary
*/
if
(
PageLocked
(
page
))
{
__wait_on_page
(
page
);
}
return
page_cache
;
}
...
...
@@ -542,7 +550,7 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
{
int
error
,
read
;
unsigned
long
pos
,
ppos
,
page_cache
;
int
try_async
;
int
reada_ok
;
if
(
count
<=
0
)
return
0
;
...
...
@@ -554,47 +562,41 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
pos
=
filp
->
f_pos
;
ppos
=
pos
&
PAGE_MASK
;
/*
* Check if the current position is inside the previous read-ahead window.
* If that's true, We assume that the file accesses are sequential enough to
* continue asynchronous read-ahead.
* Do minimum read-ahead at the beginning of the file since some tools
* only read the beginning of files.
* Break read-ahead if the file position is outside the previous read ahead
* window or if read-ahead position is 0.
* If the current position is outside the previous read-ahead window,
* we reset the current read-ahead context and set read ahead max to zero
* (will be set to just needed value later),
* otherwise, we assume that the file accesses are sequential enough to
* continue read-ahead.
*/
/*
* Will not try asynchronous read-ahead.
* Reset to zero, read-ahead context.
*/
if
(
pos
+
count
<
MIN_READAHEAD
||
!
filp
->
f_rapos
||
ppos
>
filp
->
f_rapos
||
ppos
+
filp
->
f_rawin
<
filp
->
f_rapos
)
{
try_async
=
0
;
filp
->
f_rapos
=
0
;
if
(
ppos
>
filp
->
f_raend
||
ppos
+
filp
->
f_rawin
<
filp
->
f_raend
)
{
reada_ok
=
0
;
filp
->
f_raend
=
0
;
filp
->
f_ralen
=
0
;
filp
->
f_ramax
=
0
;
filp
->
f_rawin
=
0
;
/*
* Will try asynchronous read-ahead.
*/
}
else
{
try_async
=
1
;
reada_ok
=
1
;
}
/*
* Adjust the current value of read-ahead max.
* If the read operation stay in the first half page, force no readahead.
* Otherwise try first some value near count.
* do at least MIN_READAHEAD and at most MAX_READAHEAD.
* Otherwise try to increase read ahead max just enough to do the read request.
* Then, at least MIN_READAHEAD if read ahead is ok,
* and at most MAX_READAHEAD in all cases.
*/
if
(
pos
+
count
<=
(
PAGE_SIZE
>>
1
))
{
try_async
=
0
;
filp
->
f_ramax
=
0
;
}
else
{
if
(
filp
->
f_ramax
<
count
)
filp
->
f_ramax
=
count
&
PAGE_MASK
;
unsigned
long
needed
;
if
(
filp
->
f_ramax
<
MIN_READAHEAD
)
filp
->
f_ramax
=
MIN_READAHEAD
;
else
if
(
filp
->
f_ramax
>
MAX_READAHEAD
)
needed
=
((
pos
+
count
)
&
PAGE_MASK
)
-
(
pos
&
PAGE_MASK
);
if
(
filp
->
f_ramax
<
needed
)
filp
->
f_ramax
=
needed
;
if
(
reada_ok
&&
filp
->
f_ramax
<
MIN_READAHEAD
)
filp
->
f_ramax
=
MIN_READAHEAD
;
if
(
filp
->
f_ramax
>
MAX_READAHEAD
)
filp
->
f_ramax
=
MAX_READAHEAD
;
}
...
...
@@ -640,17 +642,19 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
if
(
nr
>
count
)
nr
=
count
;
/*
* Do not try to readahead if the current page is not filled or being filled.
* If our goal was to try asynchronous read-ahead, we were quite wrong.
* Set max readahead to some shorter value in order to fix a little
* this mistake.
* Try to read ahead only if the current page is filled or being filled.
* Otherwise, if we were reading ahead, decrease max read ahead size to
* the minimum value.
* In this context, that seems to may happen only on some read error or if
* the page has been rewritten.
*/
if
(
PageUptodate
(
page
)
||
PageLocked
(
page
))
page_cache
=
generic_file_readahead
(
filp
,
inode
,
try_async
,
pos
,
page
,
page_cache
);
else
if
(
try_async
)
{
if
(
filp
->
f_ramax
>
MIN_READAHEAD
)
filp
->
f_ramax
-=
PAGE_SIZE
;
}
page_cache
=
generic_file_readahead
(
reada_ok
,
filp
,
inode
,
pos
,
page
,
page_cache
);
else
if
(
reada_ok
&&
filp
->
f_ramax
>
MIN_READAHEAD
)
filp
->
f_ramax
=
MIN_READAHEAD
;
if
(
PageLocked
(
page
))
__wait_on_page
(
page
);
if
(
!
PageUptodate
(
page
))
goto
read_page
;
...
...
@@ -685,6 +689,16 @@ int generic_file_read(struct inode * inode, struct file * filp, char * buf, int
* page or not..
*/
read_page:
/*
* We have to read the page.
* If we were reading ahead, we had previously tried to read this page,
* That means that the page has probably been removed from the cache before
* the application process needs it, or has been rewritten.
* Decrease max readahead size to the minimum value in that situation.
*/
if
(
reada_ok
&&
filp
->
f_ramax
>
MIN_READAHEAD
)
filp
->
f_ramax
=
MIN_READAHEAD
;
error
=
inode
->
i_op
->
readpage
(
inode
,
page
);
if
(
!
error
)
{
if
(
!
PageError
(
page
))
...
...
net/ipv4/Config.in
View file @
0da8dd36
...
...
@@ -21,9 +21,9 @@ fi
if [ "$CONFIG_NET_ALIAS" = "y" ]; then
tristate 'IP: aliasing support' CONFIG_IP_ALIAS
fi
if [ "$CONFIG_KERNELD" = "y" ]; then
#
if [ "$CONFIG_KERNELD" = "y" ]; then
# bool 'IP: ARP daemon support (experimental)' CONFIG_ARPD
fi
#
fi
comment '(it is safe to leave these untouched)'
bool 'IP: PC/TCP compatibility mode' CONFIG_INET_PCTCP
tristate 'IP: Reverse ARP' CONFIG_INET_RARP
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment