Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Kirill Smelkov
linux
Commits
b6e9c719
Commit
b6e9c719
authored
17 years ago
by
Linus Torvalds
Browse files
Options
Download
Email Patches
Plain Diff
Import 1.3.58
parent
ecda87c0
Changes
185
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
275 additions
and
42 deletions
+275
-42
CREDITS
CREDITS
+5
-4
Documentation/Configure.help
Documentation/Configure.help
+3
-3
Documentation/cdrom/optcd
Documentation/cdrom/optcd
+4
-0
MAGIC
MAGIC
+1
-1
Makefile
Makefile
+1
-1
Rules.make
Rules.make
+1
-1
arch/alpha/config.in
arch/alpha/config.in
+7
-0
arch/alpha/kernel/Makefile
arch/alpha/kernel/Makefile
+5
-8
arch/alpha/kernel/ksyms.c
arch/alpha/kernel/ksyms.c
+55
-0
arch/i386/config.in
arch/i386/config.in
+7
-0
arch/i386/defconfig
arch/i386/defconfig
+2
-2
arch/i386/kernel/Makefile
arch/i386/kernel/Makefile
+1
-1
arch/i386/kernel/ksyms.c
arch/i386/kernel/ksyms.c
+17
-0
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+1
-1
arch/mips/config.in
arch/mips/config.in
+7
-0
arch/sparc/config.in
arch/sparc/config.in
+3
-0
drivers/block/Config.in
drivers/block/Config.in
+4
-5
drivers/block/Makefile
drivers/block/Makefile
+4
-0
drivers/block/README.ide
drivers/block/README.ide
+8
-2
drivers/block/cmd640.c
drivers/block/cmd640.c
+139
-13
No files found.
CREDITS
View file @
b6e9c719
...
...
@@ -149,7 +149,7 @@ S: USA
N: Andries Brouwer
E: aeb@cwi.nl
D:
International character handling for keyboard and console
D:
random Linux hacker
S: Bessemerstraat 21
S: Amsterdam
S: The Netherlands
...
...
@@ -601,7 +601,7 @@ S: Boulder, Colorado 80303
S: USA
N: H.J. Lu
E: hjl@
nynexst.com
E: hjl@
gnu.ai.mit.edu
D: GCC + libraries hacker
N: Tuomas J. Lukka
...
...
@@ -722,7 +722,7 @@ S: Muskego, Wisconsin 53150
S: USA
N: Harald Milz
E: hm@
i
x.de
E: hm@
seneca.linu
x.de
D: Linux Projects Map, Linux Commercial-HOWTO
D: general Linux publicity in Germany, vacation port
D: UUCP and CNEWS binary packages for LST
...
...
@@ -894,7 +894,8 @@ S: B2240 Zandhoven
S: Belgium
N: Martin Schulze
E: joey@infodrom.north.de
E: joey@linux.de
W: http://home.pages.de/~joey/
D: Random Linux Hacker, Linux Promoter
D: CD-List, Books-List, Ex-FAQ
D: Linux-Support, -Mailbox, -Stammtisch
...
...
This diff is collapsed.
Click to expand it.
Documentation/Configure.help
View file @
b6e9c719
...
...
@@ -221,7 +221,7 @@ CONFIG_MAX_16M
This is for some buggy motherboards which cannot properly deal with
the memory above 16MB. If you have more than 16MB of RAM and
experience weird problems, you might want to try Y, everyone else
says N. Note for machines with more tha
t
64MB of RAM: in order for the
says N. Note for machines with more tha
n
64MB of RAM: in order for the
kernel to be able to use the memory above 64MB, pass the command
line option "mem=XXXM" (where XXX is the memory size in
megabytes) to your kernel. See the documentation of your boot loader
...
...
@@ -379,7 +379,7 @@ CONFIG_MODVERSIONS
Kernel daemon support
CONFIG_KERNELD
Normally when you have selec
e
ted some drivers and/or filesystems
Normally when you have selected some drivers and/or filesystems
to be created as loadable modules, you also have the responsibility
to load the corresponding module (via insmod/modprobe) before you
use it. If you select Y here, the kernel will take care of this
...
...
@@ -1861,7 +1861,7 @@ CONFIG_QUOTA
ext2 filesystem; you need the software available via ftp (user:
anonymous) from
sunsite.unc.edu:/pub/Linux/systm/Admin/quota_acct.tar.gz in order to
use it.
Obvious
ly
,
this is only useful for multi user systems. If
use it.
Probab
ly this is only useful for multi user systems. If
unsure, say N.
Standard (minix) fs support
...
...
This diff is collapsed.
Click to expand it.
Documentation/cdrom/optcd
View file @
b6e9c719
...
...
@@ -43,4 +43,8 @@ try recompiling the driver with some strategically chosen #undef DEBUG_...'s
changed into #defines (you'll find them in .../include/linux/optcd.h) and
include the messages generated in your bug report. Good luck.
I have inserted code to support multisession. It works for me, although
it is very slow during disk detection. At this time multisession support
is to be considered experimental. Please mail me your experiences.
Leo Spiekman (spiekman@dutette.et.tudelft.nl)
This diff is collapsed.
Click to expand it.
MAGIC
View file @
b6e9c719
...
...
@@ -74,6 +74,7 @@ Ioctl Include File Comments
0x06 linux/lp.h
0x12 linux/fs.h
0x20 linux/cm206.h
0x22 linux/scc.h
'A' linux/apm_bios.h
'C' linux/soundcard.h
'K' linux/kd.h
...
...
@@ -83,7 +84,6 @@ Ioctl Include File Comments
'S' linux/cdrom.h conflict!
'S' linux/scsi.h conflict!
'T' linux/soundcard.h conflict!
'T' linux/scc.h conflict!
'T' asm/termios.h conflict!
'V' linux/vt.h
'Y' linux/cyclades.h codes in 0x004359NN
...
...
This diff is collapsed.
Click to expand it.
Makefile
View file @
b6e9c719
VERSION
=
1
PATCHLEVEL
=
3
SUBLEVEL
=
5
7
SUBLEVEL
=
5
8
ARCH
=
i386
...
...
This diff is collapsed.
Click to expand it.
Rules.make
View file @
b6e9c719
...
...
@@ -146,7 +146,7 @@ $(MODINCL)/%.ver: %.c
$(SYMTAB_OBJS
:
.o=.ver): $(TOPDIR)/include/linux/autoconf.h
$(TOPDIR)/include/linux/modversions.h
:
$(
join
$(MODINCL)/
,
$(SYMTAB_OBJS:.o=.ver))
$(TOPDIR)/include/linux/modversions.h
:
$(
addprefix
$(MODINCL)/
,
$(SYMTAB_OBJS:.o=.ver))
@
echo
updating
$(TOPDIR)
/include/linux/modversions.h
@
(
echo
"#ifdef MODVERSIONS"
;
\
echo
"#undef CONFIG_MODVERSIONS"
;
\
...
...
This diff is collapsed.
Click to expand it.
arch/alpha/config.in
View file @
b6e9c719
...
...
@@ -16,6 +16,7 @@ if [ "$CONFIG_MODULES" = "y" ]; then
MODULES=y
bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS
fi
endmenu
mainmenu_option next_comment
comment 'General setup'
...
...
@@ -57,6 +58,7 @@ fi
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
endmenu
source drivers/block/Config.in
...
...
@@ -72,6 +74,7 @@ tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
source drivers/scsi/Config.in
fi
endmenu
if [ "$CONFIG_NET" = "y" ]; then
mainmenu_option next_comment
...
...
@@ -81,6 +84,7 @@ if [ "$CONFIG_NET" = "y" ]; then
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
fi
endmenu
fi
mainmenu_option next_comment
...
...
@@ -90,6 +94,7 @@ bool 'Support non-SCSI/IDE/ATAPI drives' CONFIG_CD_NO_IDESCSI
if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
source drivers/cdrom/Config.in
fi
endmenu
source fs/Config.in
...
...
@@ -102,6 +107,7 @@ tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
source drivers/sound/Config.in
fi
endmenu
mainmenu_option next_comment
comment 'Kernel hacking'
...
...
@@ -111,3 +117,4 @@ bool 'Kernel profiling support' CONFIG_PROFILE
if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
endmenu
This diff is collapsed.
Click to expand it.
arch/alpha/kernel/Makefile
View file @
b6e9c719
...
...
@@ -12,8 +12,11 @@
.S.o
:
$(CC)
-D__ASSEMBLY__
-traditional
-c
$<
-o
$*
.o
OBJS
=
entry.o traps.o process.o osf_sys.o irq.o signal.o setup.o
\
bios32.o ptrace.o time.o apecs.o lca.o
all
:
kernel.o head.o
O_TARGET
:=
kernel.o
O_OBJS
:=
entry.o traps.o process.o osf_sys.o irq.o signal.o setup.o
\
bios32.o ptrace.o time.o apecs.o lca.o ksyms.c
all
:
kernel.o head.o
...
...
@@ -22,10 +25,4 @@ head.o: head.s
head.s
:
head.S $(TOPDIR)/include/asm-alpha/system.h
$(CPP)
-traditional
-o
$*
.s
$<
kernel.o
:
$(OBJS)
$(LD)
-r
-o
kernel.o
$(OBJS)
dep
:
$(CPP)
-M
*
.c
>
.depend
include
$(TOPDIR)/Rules.make
This diff is collapsed.
Click to expand it.
arch/alpha/kernel/ksyms.c
0 → 100644
View file @
b6e9c719
/*
* linux/arch/alpha/kernel/ksyms.c
*
* Export the alpha-specific functions that are needed for loadable
* modules.
*/
#include <linux/config.h>
#include <linux/module.h>
# include <asm/io.h>
# include <asm/hwrpb.h>
extern
void
bcopy
(
const
char
*
src
,
char
*
dst
,
int
len
);
extern
struct
hwrpb_struct
*
hwrpb
;
/* these are C runtime functions with special calling conventions: */
extern
void
__divl
(
void
);
extern
void
__reml
(
void
);
extern
void
__divq
(
void
);
extern
void
__remq
(
void
);
extern
void
__divlu
(
void
);
extern
void
__remlu
(
void
);
extern
void
__divqu
(
void
);
extern
void
__remqu
(
void
);
static
struct
symbol_table
arch_symbol_table
=
{
#include <linux/symtab_begin.h>
/* platform dependent support */
X
(
_inb
),
X
(
_inw
),
X
(
_inl
),
X
(
_outb
),
X
(
_outw
),
X
(
_outl
),
X
(
bcopy
),
/* generated by gcc-2.7.0 for string assignments */
X
(
hwrpb
),
X
(
__divl
),
X
(
__reml
),
X
(
__divq
),
X
(
__remq
),
X
(
__divlu
),
X
(
__remlu
),
X
(
__divqu
),
X
(
__remqu
),
X
(
strlen
),
/* used by ftape */
X
(
memcmp
),
X
(
memmove
),
X
(
__constant_c_memset
),
#include <linux/symtab_end.h>
};
void
arch_syms_export
(
void
)
{
register_symtab
(
&
arch_symbol_table
);
}
This diff is collapsed.
Click to expand it.
arch/i386/config.in
View file @
b6e9c719
...
...
@@ -12,6 +12,7 @@ if [ "$CONFIG_MODULES" = "y" ]; then
bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS
bool 'Kernel daemon support (e.g. autoload of modules)' CONFIG_KERNELD
fi
endmenu
mainmenu_option next_comment
comment 'General setup'
...
...
@@ -32,6 +33,7 @@ choice 'Processor type' \
"386 CONFIG_M386 \
486 CONFIG_M486 \
Pentium CONFIG_M586" Pentium
endmenu
source drivers/block/Config.in
...
...
@@ -47,6 +49,7 @@ tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
source drivers/scsi/Config.in
fi
endmenu
if [ "$CONFIG_NET" = "y" ]; then
mainmenu_option next_comment
...
...
@@ -56,6 +59,7 @@ if [ "$CONFIG_NET" = "y" ]; then
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
fi
endmenu
fi
mainmenu_option next_comment
...
...
@@ -65,6 +69,7 @@ bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
source drivers/cdrom/Config.in
fi
endmenu
source fs/Config.in
...
...
@@ -77,6 +82,7 @@ tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
source drivers/sound/Config.in
fi
endmenu
mainmenu_option next_comment
comment 'Kernel hacking'
...
...
@@ -86,3 +92,4 @@ bool 'Kernel profiling support' CONFIG_PROFILE
if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
endmenu
This diff is collapsed.
Click to expand it.
arch/i386/defconfig
View file @
b6e9c719
...
...
@@ -6,7 +6,7 @@
# Loadable module support
#
CONFIG_MODULES=y
#
CONFIG_MODVERSIONS
is not set
CONFIG_MODVERSIONS
=y
# CONFIG_KERNELD is not set
#
...
...
@@ -36,9 +36,9 @@ CONFIG_ST506=y
#
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEATAPI=y
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_CMD640=y
# CONFIG_BLK_DEV_TRITON is not set
# CONFIG_BLK_DEV_XD is not set
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/Makefile
View file @
b6e9c719
...
...
@@ -28,7 +28,7 @@ all: kernel.o head.o
O_TARGET
:=
kernel.o
O_OBJS
:=
process.o signal.o entry.o traps.o irq.o vm86.o bios32.o
\
ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o
ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o
ksyms.o
ifdef
SMP
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/ksyms.c
0 → 100644
View file @
b6e9c719
#include <linux/module.h>
#include <linux/smp.h>
static
struct
symbol_table
arch_symbol_table
=
{
#include <linux/symtab_begin.h>
/* platform dependent support */
#ifdef __SMP__
X
(
apic_reg
),
/* Needed internally for the I386 inlines */
#endif
#include <linux/symtab_end.h>
};
void
arch_syms_export
(
void
)
{
register_symtab
(
&
arch_symbol_table
);
}
This diff is collapsed.
Click to expand it.
arch/i386/kernel/setup.c
View file @
b6e9c719
...
...
@@ -196,7 +196,7 @@ static const char * i486model(unsigned int nr)
static
const
char
*
i586model
(
unsigned
int
nr
)
{
static
const
char
*
model
[]
=
{
"0"
,
"Pentium 60/66"
,
"Pentium 75+"
"0"
,
"Pentium 60/66"
,
"Pentium 75+"
,
"OverDrive PODP5V83"
};
if
(
nr
<
sizeof
(
model
)
/
sizeof
(
char
*
))
return
model
[
nr
];
...
...
This diff is collapsed.
Click to expand it.
arch/mips/config.in
View file @
b6e9c719
...
...
@@ -47,10 +47,12 @@ bool 'Networking support' CONFIG_NET
# bool ' PCI bridge optimization (experimental)' CONFIG_PCI_OPTIMIZE
#fi
bool 'System V IPC' CONFIG_SYSVIPC
endmenu
mainmenu_option next_comment
comment 'Loadable module support'
bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS
endmenu
source drivers/block/Config.in
...
...
@@ -66,6 +68,7 @@ tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
source drivers/scsi/Config.in
fi
endmenu
if [ "$CONFIG_NET" = "y" ]; then
mainmenu_option next_comment
...
...
@@ -75,6 +78,7 @@ if [ "$CONFIG_NET" = "y" ]; then
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
fi
endmenu
fi
mainmenu_option next_comment
...
...
@@ -84,6 +88,7 @@ bool 'Support non-SCSI/IDE/ATAPI drives' CONFIG_CD_NO_IDESCSI
if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
source drivers/cdrom/Config.in
fi
endmenu
source fs/Config.in
...
...
@@ -97,6 +102,7 @@ tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
source drivers/sound/Config.in
fi
endmenu
mainmenu_option next_comment
comment 'Kernel hacking'
...
...
@@ -106,3 +112,4 @@ bool 'Kernel profiling support' CONFIG_PROFILE
if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
endmenu
This diff is collapsed.
Click to expand it.
arch/sparc/config.in
View file @
b6e9c719
...
...
@@ -17,6 +17,7 @@ define_bool CONFIG_SUN_CONSOLE y
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
endmenu
source drivers/block/Config.in
...
...
@@ -32,6 +33,7 @@ tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
source drivers/scsi/Config.in
fi
endmenu
if [ "$CONFIG_NET" = "y" ]; then
mainmenu_option next_comment
...
...
@@ -41,6 +43,7 @@ if [ "$CONFIG_NET" = "y" ]; then
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
fi
endmenu
fi
source fs/Config.in
...
...
This diff is collapsed.
Click to expand it.
drivers/block/Config.in
View file @
b6e9c719
...
...
@@ -16,11 +16,9 @@ if [ "$CONFIG_ST506" = "y" ]; then
bool ' Use new IDE driver for primary/secondary i/f' CONFIG_BLK_DEV_IDE
fi
if [ "$CONFIG_BLK_DEV_IDE" = "y" ]; then
bool ' Include support for IDE/ATAPI CDROM or TAPE' CONFIG_BLK_DEV_IDEATAPI
if [ "$CONFIG_BLK_DEV_IDEATAPI" = "y" ]; then
bool ' Include support for IDE/ATAPI CDROM' CONFIG_BLK_DEV_IDECD
bool ' Include ALPHA support for IDE/ATAPI TAPE' CONFIG_BLK_DEV_IDETAPE
fi
bool ' Include IDE/ATAPI CDROM support' CONFIG_BLK_DEV_IDECD
bool ' Include (ALPHA) IDE/ATAPI TAPE support' CONFIG_BLK_DEV_IDETAPE
bool ' Special CMD640 chipset support' CONFIG_BLK_DEV_CMD640
if [ "$CONFIG_PCI" = "y" ]; then
bool ' PCI Triton IDE Bus Master DMA support' CONFIG_BLK_DEV_TRITON
fi
...
...
@@ -28,3 +26,4 @@ if [ "$CONFIG_ST506" = "y" ]; then
fi
bool 'XT harddisk support' CONFIG_BLK_DEV_XD
endmenu
This diff is collapsed.
Click to expand it.
drivers/block/Makefile
View file @
b6e9c719
...
...
@@ -48,6 +48,10 @@ ifeq ($(CONFIG_BLK_DEV_TRITON),y)
L_OBJS
+=
triton.o
endif
ifeq
($(CONFIG_BLK_DEV_CMD640),y)
L_OBJS
+=
cmd640.o
endif
ifeq
($(CONFIG_BLK_DEV_IDECD),y)
L_OBJS
+=
ide-cd.o
endif
...
...
This diff is collapsed.
Click to expand it.
drivers/block/README.ide
View file @
b6e9c719
...
...
@@ -350,13 +350,19 @@ then use the kernel command line parameters to pass the *logical* geometry,
as in: hda=525,64,63
If the BIOS does not support this form of drive translation, then several
options remain, listed below in
inverse
order of popularity:
options remain, listed below in order of popularity:
- boot from a floppy disk instead of the hard drive (takes 10 seconds).
- use a partition below the 1024 cyl boundary to hold the linux
boot files (kernel images and /boot directory), and place the rest
of linux anywhere else on the drive. These files can reside in a DOS
partition, or in a tailor-made linux boot partition.
- use DiskManager software from OnTrack, supplied free with
many new hard drive purchases.
- use EZ-Drive software (similar to DiskManager). Note though,
that LILO must *not* use the MBR when EZ-Drive is present.
Instead, install LILO on the first sector of your linux partition,
and mark it as "active" or "bootable" with fdisk.
- boot from a floppy disk instead of the hard drive (takes 10 seconds).
If you cannot use drive translation, *and* your BIOS also restricts you to
entering no more than 1024 cylinders in the geometry field in the CMOS setup,
...
...
This diff is collapsed.
Click to expand it.
drivers/block/cmd640.c
View file @
b6e9c719
/*
* linux/drivers/block/cmd640.c Version 0.0
2
Nov 30
, 199
5
* linux/drivers/block/cmd640.c Version 0.0
4
Jan 11
, 199
6
*
* Copyright (C) 1995 Linus Torvalds & author (see below)
* Copyright (C) 1995
-1996
Linus Torvalds & author (see below)
*/
/*
...
...
@@ -18,8 +18,49 @@
* read-ahead for versions 'B' and 'C' of chip by
* default, some code cleanup.
*
* Version 0.03 Added reset of secondary interface,
* and black list for devices which are not compatible
* with read ahead mode. Separate function for setting
* readahead is added, possibly it will be called some
* day from ioctl processing code.
*
* Version 0.04 Now configs/compiles separate from ide.c -ml
*/
/*
* There is a known problem with current version of this driver.
* If the only device on secondary interface is CD-ROM, at some
* computers it is not recognized. In all reported cases CD-ROM
* was 2x or 4x speed Mitsumi drive.
*
* The following workarounds could work:
*
* 1. put CD-ROM as slave on primary interface
*
* 2. or define symbol at next line as 0
*
*/
#define CMD640_NORMAL_INIT 1
#undef REALLY_SLOW_IO
/* most systems can safely undef this */
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/mm.h>
#include <linux/ioport.h>
#include <linux/blkdev.h>
#include <linux/hdreg.h>
#include <asm/io.h>
#include "ide.h"
extern
ide_hwif_t
ide_hwifs
[];
int
cmd640_vlb
=
0
;
/*
* CMD640 specific registers definition.
*/
...
...
@@ -76,7 +117,7 @@ static int bus_speed; /* MHz */
/*
* For some unknown reasons pcibios functions which read and write registers
* do not work with cmd640. We use direct io instead.
* do not
always
work with cmd640. We use direct io instead.
*/
/* PCI method 1 access */
...
...
@@ -229,6 +270,35 @@ static int probe_for_cmd640_vlb(void) {
return
1
;
}
/*
* Low level reset for controller, actually it has nothing specific for
* CMD640, but I don't know how to use standard reset routine before
* we recognized any drives.
*/
static
void
cmd640_reset_controller
(
int
iface_no
)
{
int
retry_count
=
600
;
int
base_port
=
iface_no
?
0x170
:
0x1f0
;
outb_p
(
4
,
base_port
+
7
);
udelay
(
5
);
outb_p
(
0
,
base_port
+
7
);
do
{
udelay
(
5
);
retry_count
-=
1
;
}
while
((
inb_p
(
base_port
+
7
)
&
0x80
)
&&
retry_count
);
if
(
retry_count
==
0
)
printk
(
"cmd640: failed to reset controller %d
\n
"
,
iface_no
);
#if 0
else
printk("cmd640: controller %d reset [%d]\n",
iface_no, retry_count);
#endif
}
/*
* Probe for Cmd640x and initialize it if found
*/
...
...
@@ -282,31 +352,34 @@ int ide_probe_for_cmd640x(void)
/*
* Set the maximum allowed bus speed (it is safest until we
* find how detect bus speed)
* find how
to
detect bus speed)
* Normally PCI bus runs at 33MHz, but often works overclocked to 40
*/
bus_speed
=
(
bus_type
==
vlb
)
?
50
:
40
;
#if 1
/* don't know if this is reliable yet */
/*
* Enable readahead for versions above 'A'
*/
cmd_read_ahead
=
(
cmd640_chip_version
>
1
);
#else
cmd_read_ahead
=
0
;
#endif
/*
* Setup Control Register
*/
b
=
get_cmd640_reg
(
cmd640_key
,
CNTRL
);
#if CMD640_NORMAL_INIT
if
(
second_port
)
b
|=
CNTRL_ENA_2ND
;
else
b
&=
~
CNTRL_ENA_2ND
;
#endif
if
(
cmd_read_ahead
)
b
&=
~
(
CNTRL_DIS_RA0
|
CNTRL_DIS_RA1
);
else
b
|=
(
CNTRL_DIS_RA0
|
CNTRL_DIS_RA1
);
put_cmd640_reg
(
cmd640_key
,
CNTRL
,
b
);
/*
...
...
@@ -317,9 +390,11 @@ int ide_probe_for_cmd640x(void)
b
=
cmd_read_ahead
?
0
:
(
DIS_RA2
|
DIS_RA3
);
put_cmd640_reg
(
cmd640_key
,
ARTTIM23
,
b
);
put_cmd640_reg
(
cmd640_key
,
DRWTIM23
,
0
);
cmd640_reset_controller
(
1
);
}
serialized
=
1
;
ide_hwifs
[
0
].
serialized
=
1
;
printk
(
"ide: buggy CMD640%c interface at "
,
'A'
-
1
+
cmd640_chip_version
);
...
...
@@ -359,6 +434,48 @@ static int as_clocks(int a) {
}
}
/*
* Sets readahead mode for specific drive
* in the future it could be called from ioctl
*/
static
void
set_readahead_mode
(
int
mode
,
int
if_num
,
int
dr_num
)
{
static
int
masks
[
2
][
2
]
=
{
{
CNTRL_DIS_RA0
,
CNTRL_DIS_RA1
},
{
DIS_RA2
,
DIS_RA3
}
};
int
port
=
(
if_num
==
0
)
?
CNTRL
:
ARTTIM23
;
int
mask
=
masks
[
if_num
][
dr_num
];
byte
b
;
b
=
get_cmd640_reg
(
cmd640_key
,
port
);
if
(
mode
)
b
&=
mask
;
/* Enable readahead for specific drive */
else
b
|=
mask
;
/* Disable readahed for specific drive */
put_cmd640_reg
(
cmd640_key
,
port
,
b
);
}
static
struct
readahead_black_list
{
const
char
*
name
;
int
mode
;
}
drives_ra
[]
=
{
{
"ST3655A"
,
0
},
{
NULL
,
0
}
};
static
int
known_drive_readahead
(
char
*
name
)
{
int
i
;
for
(
i
=
0
;
drives_ra
[
i
].
name
!=
NULL
;
i
++
)
if
(
strcmp
(
name
,
drives_ra
[
i
].
name
)
==
0
)
return
drives_ra
[
i
].
mode
;
return
-
1
;
}
/*
* Tuning of drive parameters
*/
...
...
@@ -400,7 +517,7 @@ static void cmd640_set_timing(int if_num, int dr_num, int r1, int r2) {
}
}
struct
pio_timing
{
static
struct
pio_timing
{
int
mc_time
;
/* Minimal cycle time (ns) */
int
av_time
;
/* Address valid to DIOR-/DIOW- setup (ns) */
int
ds_time
;
/* DIOR data setup (ns) */
...
...
@@ -413,7 +530,7 @@ struct pio_timing {
{
20
,
50
,
100
}
/* PIO Mode ? */
};
struct
drive_pio_info
{
static
struct
drive_pio_info
{
const
char
*
name
;
int
pio
;
}
drive_pios
[]
=
{
...
...
@@ -426,6 +543,7 @@ struct drive_pio_info {
{
"QUANTUM LPS240A"
,
0
},
{
"QUANTUM LPS270A"
,
3
},
{
"QUANTUM LPS540A"
,
3
},
{
"QUANTUM FIREBALL1080A"
,
3
},
{
NULL
,
0
}
};
...
...
@@ -480,7 +598,7 @@ static void set_pio_mode(int if_num, int drv_num, int mode_num) {
outb_p
((
drv_num
|
0xa
)
<<
4
,
p_base
+
6
);
outb_p
(
0xef
,
p_base
+
7
);
for
(
i
=
0
;
(
i
<
100
)
&&
(
inb
(
p_base
+
7
)
&
0x80
);
i
++
)
delay
_
10
ms
(
);
u
delay
(
10
000
);
}
void
cmd640_tune_drive
(
ide_drive_t
*
drive
)
{
...
...
@@ -491,6 +609,7 @@ void cmd640_tune_drive(ide_drive_t* drive) {
int
mc_time
,
av_time
,
ds_time
;
struct
hd_driveid
*
id
;
int
r1
,
r2
;
int
mode
;
/*
* Determine if drive is under cmd640 control
...
...
@@ -530,6 +649,13 @@ void cmd640_tune_drive(ide_drive_t* drive) {
&
r1
,
&
r2
);
set_pio_mode
(
interface_number
,
drive_number
,
max_pio
);
cmd640_set_timing
(
interface_number
,
drive_number
,
r1
,
r2
);
/*
* Disable (or set) readahead mode for known drive
*/
if
((
mode
=
known_drive_readahead
(
id
->
model
))
!=
-
1
)
{
set_readahead_mode
(
mode
,
interface_number
,
drive_number
);
printk
(
"Readahead %s,"
,
mode
?
"enabled"
:
"disabled"
);
}
printk
(
"Mode and Timing set to PIO%d (0x%x 0x%x)
\n
"
,
max_pio
,
r1
,
r2
);
}
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
5
…
10
Next
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