Commit b6e9c719 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Import 1.3.58

parent ecda87c0
......@@ -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@ix.de
E: hm@seneca.linux.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
......
......@@ -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 that 64MB of RAM: in order for the
says N. Note for machines with more than 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 seleceted 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. Obviously, this is only useful for multi user systems. If
use it. Probably this is only useful for multi user systems. If
unsure, say N.
Standard (minix) fs support
......
......@@ -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)
......@@ -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
......
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 57
SUBLEVEL = 58
ARCH = i386
......
......@@ -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";\
......
......@@ -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
......@@ -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
/*
* 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);
}
......@@ -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
......@@ -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
......
......@@ -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
......
#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);
}
......@@ -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];
......
......@@ -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
......@@ -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
......
......@@ -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
......@@ -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
......
......@@ -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,
......
/*
* linux/drivers/block/cmd640.c Version 0.02 Nov 30, 1995
* linux/drivers/block/cmd640.c Version 0.04 Jan 11, 1996
*
* 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_10ms();
udelay(10000);
}
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);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment