Commit d0d4e162 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.3.80

parent 26265657
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 79
SUBLEVEL = 80
ARCH = i386
......@@ -68,16 +68,6 @@ endif
ROOT_DEV = CURRENT
#
# NFS_ROOT_NAME specifies the default name of the directory to mount
# as root via NFS, if the kernel does not get the "root=" option from
# the boot loader. The "%s" will be replaced by the IP-number of the
# local system. Use empty string for default root path provided by BOOTP.
#
#NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""
NFS_ROOT = -DNFS_ROOT="\"\""
#
# INSTALL_PATH specifies where to place the updated kernel and system map
# images. Uncomment if you want to place them anywhere other than root.
......@@ -242,7 +232,7 @@ init/version.o: init/version.c include/linux/compile.h
$(CC) $(CFLAGS) -DUTS_MACHINE='"$(ARCH)"' -c -o init/version.o init/version.c
init/main.o: init/main.c
$(CC) $(CFLAGS) $(PROFILING) $(NFS_ROOT) -c -o $*.o $<
$(CC) $(CFLAGS) $(PROFILING) -c -o $*.o $<
fs: dummy
$(MAKE) linuxsubdirs SUBDIRS=fs
......
......@@ -114,6 +114,11 @@ start_of_setup:
mov dl,#0x81
int 0x13
! Reset the disk controller.
mov ax,#0x0000
mov dl,#0x80
int 0x13
! set DS=CS, we know that SETUPSEG == CS at this point
mov ax,cs ! aka #SETUPSEG
mov ds,ax
......
......@@ -270,11 +270,8 @@ ENTRY(lcall7)
ALIGN
handle_bottom_half:
pushfl
incl SYMBOL_NAME(intr_count)
sti
call SYMBOL_NAME(do_bottom_half)
popfl
decl SYMBOL_NAME(intr_count)
jmp 9f
ALIGN
......
......@@ -237,7 +237,7 @@ Summary of ide driver parameters for kernel "command line":
except the cmd640.
"idex=serialize" : do not overlap operations on idex and ide(x^1)
The following two are valid ONLY on ide0,
The following are valid ONLY on ide0,
and the defaults for the base,ctl ports must not be altered.
"ide0=dtc2278" : probe/support DTC2278 interface
......
/*
* linux/drivers/block/cmd640.c Version 0.08 Mar 15, 1996
* linux/drivers/block/cmd640.c Version 0.09 Mar 19, 1996
*
* Copyright (C) 1995-1996 Linus Torvalds & authors (see below)
*/
......@@ -43,6 +43,7 @@
* Version 0.08 Added autotune/noautotune support. -ml
*
* Version 0.09 Try to be smarter about 2nd port enabling. -ml
* Version 0.10 Be nice and don't reset 2nd port. -ml
*
*/
......@@ -149,7 +150,7 @@ static byte get_cmd640_reg_pci1(int reg_no)
}
/* PCI method 2 access (from CMD datasheet) */
static void put_cmd640_reg_pci2(int reg_no, int val)
{
unsigned long flags;
......@@ -272,12 +273,12 @@ static int probe_for_cmd640_vlb(void) {
return 1;
}
#if 0
/*
* 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;
......@@ -294,12 +295,8 @@ static void cmd640_reset_controller(int iface_no)
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
}
#endif /* 0 */
/*
* Returns 1 if an IDE interface/drive exists at 0x170,
......@@ -344,14 +341,13 @@ int ide_probe_for_cmd640x(void)
ide_hwifs[0].serialized = 1; /* ensure this *always* gets set */
ide_hwifs[1].serialized = 1; /* ensure this *always* gets set */
#if 0
/* Dump initial state of chip registers */
for (b = 0; b != 0xff; b++) {
printk(" %2x%c", get_cmd640_reg(b),
((b&0xf) == 0xf) ? '\n' : ',');
}
#endif
/*
......@@ -394,7 +390,6 @@ int ide_probe_for_cmd640x(void)
*/
b = get_cmd640_reg(CNTRL);
if (!secondary_port_responding()) {
b ^= CNTRL_ENA_2ND; /* toggle the bit */
second_port_toggled = 1;
......@@ -428,38 +423,46 @@ int ide_probe_for_cmd640x(void)
ide_hwifs[1].drives[0].autotune = 1;
if (ide_hwifs[1].drives[1].autotune == 0)
ide_hwifs[1].drives[1].autotune = 1;
/* We reset timings, and disable read-ahead */
/* disable read-ahead for drives 2 & 3 */
put_cmd640_reg(ARTTIM23, (DIS_RA2 | DIS_RA3));
put_cmd640_reg(DRWTIM23, 0);
if (second_port_toggled) {
/* reset PIO timings for drives 2 & 3 */
put_cmd640_reg(DRWTIM23, 0);
}
#if 0
/* reset the secondary interface */
cmd640_reset_controller(1);
#endif
}
printk("ide: buggy CMD640%c interface at ",
printk("ide: buggy CMD640%c interface on ",
'A' - 1 + cmd640_chip_version);
switch (bus_type) {
case vlb :
printk("local bus, port 0x%x", cmd640_key);
printk("vlb (0x%x)", cmd640_key);
break;
case pci1:
printk("pci, (0x%x)", cmd640_key);
printk("pci (0x%x)", cmd640_key);
break;
case pci2:
printk("pci,(access method 2) (0x%x)", cmd640_key);
printk("pci (access method 2) (0x%x)", cmd640_key);
break;
}
/*
* Reset interface timings
*/
#if 0
/* reset PIO timings for drives 1 & 2 */
put_cmd640_reg(CMDTIM, 0);
#endif /* 0 */
/*
* Tell everyone what we did to their system
*/
printk("\n ... serialized, secondary port %s\n", second_port_toggled ? "toggled" : "untouched");
printk("; serialized, secondary port %s\n", second_port_toggled ? "toggled" : "untouched");
return 1;
}
#if 0 /* not used anywhere */
int cmd640_off(void) {
static int a = 0;
byte b;
......@@ -472,6 +475,7 @@ int cmd640_off(void) {
put_cmd640_reg(CNTRL, b);
return 1;
}
#endif /* 0 */
/*
* Sets readahead mode for specific drive
......
/*
* linux/drivers/block/ht6580.c Version 0.03 Feb 09, 1996
* linux/drivers/block/ht6580.c Version 0.04 Mar 19, 1996
*
* Copyright (C) 1995-1996 Linus Torvalds & author (see below)
*/
......@@ -44,9 +44,6 @@
* If I have booted to dos sometime after power on, I can get smaller
* timing values working. Perhaps I could soft-ice the initialization.
*
* OS/2 driver seems to use some kind of DMA. But that code is really
* messy to me to found out how.
*
* -=- malafoss@snakemail.hut.fi -=- searching the marvels of universe -=-
*/
......@@ -71,6 +68,7 @@
* silly sequence (below) whenever we switch between primary and secondary.
*
* This stuff is courtesy of malafoss@snakemail.hut.fi
* (or maf@nemesis.tky.hut.fi)
*
* At least one user has reported that this code can confuse the floppy
* controller and/or driver -- perhaps this should be changed to use
......@@ -152,9 +150,12 @@ static void ht6560b_selectproc (ide_drive_t *drive)
*/
outb (timing, IDE_SELECT_REG);
(void) inb (IDE_STATUS_REG);
OUT_BYTE(drive->select.all,IDE_SELECT_REG);
restore_flags (flags);
#ifdef DEBUG
printk("ht6560b: %s: select=%#x timing=%#x\n", drive->name, t, timing);
#endif
}
OUT_BYTE(drive->select.all,IDE_SELECT_REG);
}
/*
......@@ -229,6 +230,6 @@ void init_ht6560b (void)
ide_hwifs[0].serialized = 1;
ide_hwifs[1].serialized = 1;
} else
printk("ht6560b: not found\n");
printk("\nht6560b: not found\n");
}
}
/*
* linux/drivers/block/ide.c Version 5.34 Mar 16, 1996
* linux/drivers/block/ide.c Version 5.35 Mar 23, 1996
*
* Copyright (C) 1994-1996 Linus Torvalds & authors (see below)
*/
......@@ -221,6 +221,8 @@
* Version 5.33 improve handling of HDIO_DRIVE_CMDs that read data
* Version 5.34 fix irq-sharing problem from 5.33
* fix cdrom ioctl problem from 5.33
* Version 5.35 cosmetic changes
* fix cli() problem in try_to_identify()
*
* Some additional driver compile-time options are in ide.h
*
......@@ -1573,7 +1575,7 @@ static void timer_expiry (unsigned long data)
* This routine assumes cli() is in effect when called.
*
* If an unexpected interrupt happens on irq15 while we are handling irq14
* and if the two interfaces are "serialized" (CMD640B), then it looks like
* and if the two interfaces are "serialized" (CMD640), then it looks like
* we could screw up by interfering with a new request being set up for irq15.
*
* In reality, this is a non-issue. The new command is not sent unless the
......@@ -2371,6 +2373,8 @@ static int try_to_identify (ide_drive_t *drive, byte cmd)
delay_10ms(); /* wait for IRQ and DRQ_STAT */
if (OK_STAT(GET_STAT(),DRQ_STAT,BAD_R_STAT)) {
unsigned long flags;
save_flags(flags);
cli(); /* some systems need this */
do_identify(drive, cmd); /* drive returned ID */
if (drive->present && drive->media != ide_tape) {
......@@ -2379,6 +2383,8 @@ static int try_to_identify (ide_drive_t *drive, byte cmd)
tuneproc(drive, 255); /* auto-tune PIO mode */
}
rc = 0; /* drive responded with ID */
(void) GET_STAT(); /* clear drive IRQ */
restore_flags(flags);
} else
rc = 2; /* drive refused ID */
if (!HWIF(drive)->irq) {
......@@ -2638,7 +2644,7 @@ static int match_parm (char *s, const char *keywords[], int vals[], int max_vals
* except the cmd640.
* "idex=serialize" : do not overlap operations on idex and ide(x^1)
*
* The following two are valid ONLY on ide0,
* The following are valid ONLY on ide0,
* and the defaults for the base,ctl ports must not be altered.
*
* "ide0=dtc2278" : probe/support DTC2278 interface
......
......@@ -41,7 +41,7 @@ static struct ide_pio_info {
{ "WDC AC2120", 0 },
{ "WDC AC2850", 3 },
{ "WDC AC1270", 3 },
{ "WDC AC1170", 3 },
{ "WDC AC1170", 1 },
{ "WDC AC1210", 1 },
{ "WDC AC280", 0 },
/* { "WDC AC21000", 4 }, */
......
......@@ -96,20 +96,12 @@ static void unplug_device(void * data)
* force the transfer to start only after we have put all the requests
* on the list.
*
* Note! We can do the check without interrupts off, because interrupts
* will never add a new request to the queue, only take requests off..
* This is called with interrupts off and no requests on the queue.
*/
static inline void plug_device(struct blk_dev_struct * dev)
{
if (!dev->current_request) {
unsigned long flags;
save_flags(flags);
cli();
dev->current_request = &dev->plug;
queue_task_irq_off(&dev->plug_tq, &tq_scheduler);
restore_flags(flags);
}
dev->current_request = &dev->plug;
queue_task_irq_off(&dev->plug_tq, &tq_scheduler);
}
/*
......@@ -340,63 +332,67 @@ static void make_request(int major,int rw, struct buffer_head * bh)
/* look for a free request. */
down (&request_lock);
cli();
/* The scsi disk and cdrom drivers completely remove the request
* from the queue when they start processing an entry. For this reason
* it is safe to continue to add links to the top entry for those devices.
*/
if (( major == IDE0_MAJOR /* same as HD_MAJOR */
|| major == IDE1_MAJOR
|| major == MD_MAJOR
|| major == FLOPPY_MAJOR
|| major == SCSI_DISK_MAJOR
|| major == SCSI_CDROM_MAJOR
|| major == IDE2_MAJOR
|| major == IDE3_MAJOR)
&& (req = blk_dev[major].current_request))
{
if (major != SCSI_DISK_MAJOR &&
major != SCSI_CDROM_MAJOR &&
major != MD_MAJOR)
req = req->next;
while (req) {
if (req->rq_dev == bh->b_dev &&
!req->sem &&
req->cmd == rw &&
req->sector + req->nr_sectors == sector &&
req->nr_sectors < 244)
{
/*
* Try to coalesce the new request with old requests
*/
cli();
req = blk_dev[major].current_request;
if (!req) {
plug_device(blk_dev + major);
} else switch (major) {
case IDE0_MAJOR: /* same as HD_MAJOR */
case IDE1_MAJOR:
case FLOPPY_MAJOR:
case IDE2_MAJOR:
case IDE3_MAJOR:
/*
* The scsi disk and cdrom drivers completely remove the request
* from the queue when they start processing an entry. For this
* reason it is safe to continue to add links to the top entry for
* those devices.
*
* All other drivers need to jump over the first entry, as that
* entry may be busy being processed and we thus can't change it.
*/
req = req->next;
if (!req)
break;
/* fall through */
case SCSI_DISK_MAJOR:
case SCSI_CDROM_MAJOR:
case MD_MAJOR:
do {
if (req->sem)
continue;
if (req->cmd != rw)
continue;
if (req->nr_sectors >= 244)
continue;
if (req->rq_dev != bh->b_dev)
continue;
/* Can we add it to the end of this request? */
if (req->sector + req->nr_sectors == sector) {
req->bhtail->b_reqnext = bh;
req->bhtail = bh;
req->nr_sectors += count;
mark_buffer_clean(bh);
up (&request_lock);
sti();
return;
}
if (req->rq_dev == bh->b_dev &&
!req->sem &&
req->cmd == rw &&
req->sector - count == sector &&
req->nr_sectors < 244)
{
req->nr_sectors += count;
/* or to the beginning? */
} else if (req->sector - count == sector) {
bh->b_reqnext = req->bh;
req->bh = bh;
req->buffer = bh->b_data;
req->current_nr_sectors = count;
req->sector = sector;
mark_buffer_clean(bh);
req->bh = bh;
up (&request_lock);
sti();
return;
}
req = req->next;
}
} else
continue;
req->nr_sectors += count;
mark_buffer_clean(bh);
up (&request_lock);
sti();
return;
} while ((req = req->next) != NULL);
}
up (&request_lock);
......@@ -524,12 +520,6 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bh[])
goto sorry;
}
/* If there are no pending requests for this device, then we insert
a dummy request for that device. This will prevent the request
from starting until we have shoved all of the blocks into the
queue, and then we let it rip. */
plug_device(dev);
for (i = 0; i < nr; i++) {
if (bh[i]) {
set_bit(BH_Req, &bh[i]->b_state);
......
/*
* linux/drivers/block/rz1000.c Version 0.02 Feb 08, 1996
* linux/drivers/block/rz1000.c Version 0.03 Mar 20, 1996
*
* Copyright (C) 1995-1996 Linus Torvalds & author (see below)
*/
......@@ -36,7 +36,7 @@ void init_rz1000 (byte bus, byte fn)
int rc;
unsigned short reg;
printk("ide: buggy RZ1000 interface: ");
printk("ide0: buggy RZ1000 interface: ");
if ((rc = pcibios_read_config_word (bus, fn, PCI_COMMAND, &reg))) {
ide_pci_access_error (rc);
} else if (!(reg & 1)) {
......
......@@ -196,8 +196,8 @@ static const char *version =
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/if_arp.h>
#include <linux/netdevice.h>
#include <linux/if_arp.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
......
......@@ -154,6 +154,8 @@ struct pci_dev_info dev_info[] = {
DEVICE( AL, AL_M1513, "M1513"),
DEVICE( AL, AL_M4803, "M4803"),
DEVICE( ASP, ASP_ABP940, "ABP940"),
DEVICE( CERN, CERN_SPSB_PMC, "STAR/RD24 SCI-PCI (PMC)"),
DEVICE( CERN, CERN_SPSB_PCI, "STAR/RD24 SCI-PCI (PMC)"),
DEVICE( IMS, IMS_8849, "8849"),
DEVICE( TEKRAM2, TEKRAM2_690c, "DC690c"),
DEVICE( AMCC, AMCC_MYRINET, "Myrinet PCI (M2-PCI-32)"),
......@@ -475,6 +477,7 @@ const char *pci_strvendor(unsigned int vendor)
case PCI_VENDOR_ID_3COM: return "3Com";
case PCI_VENDOR_ID_AL: return "Acer Labs";
case PCI_VENDOR_ID_ASP: return "Advanced System Products";
case PCI_VENDOR_ID_CERN: return "CERN";
case PCI_VENDOR_ID_IMS: return "IMS";
case PCI_VENDOR_ID_TEKRAM2: return "Tekram";
case PCI_VENDOR_ID_AMCC: return "AMCC";
......
This diff is collapsed.
......@@ -128,6 +128,7 @@ extern int nfs_mmap(struct inode * inode, struct file * file, struct vm_area_str
/* NFS root */
#define NFS_ROOT "/tftpboot/%s"
#define NFS_ROOT_NAME_LEN 256
#define NFS_ROOT_ADDRS_LEN 128
......
......@@ -422,6 +422,10 @@
#define PCI_VENDOR_ID_ASP 0x10cd
#define PCI_DEVICE_ID_ASP_ABP940 0x1200
#define PCI_VENDOR_ID_CERN 0x10dc
#define PCI_DEVICE_ID_CERN_SPSB_PMC 0x0001
#define PCI_DEVICE_ID_CERN_SPSB_PCI 0x0002
#define PCI_VENDOR_ID_IMS 0x10e0
#define PCI_DEVICE_ID_IMS_8849 0x8849
......
......@@ -165,7 +165,7 @@ int root_mountflags = MS_RDONLY;
char *execute_command = 0;
#ifdef CONFIG_ROOT_NFS
char nfs_root_name[NFS_ROOT_NAME_LEN] = { NFS_ROOT };
char nfs_root_name[NFS_ROOT_NAME_LEN] = { "default" };
char nfs_root_addrs[NFS_ROOT_ADDRS_LEN] = { "" };
#endif
......
......@@ -923,9 +923,8 @@ static void update_process_times(unsigned long ticks, unsigned long system)
p->counter = 0;
need_resched = 1;
}
update_one_process(p, ticks, ticks-system, system);
}
update_one_process(p, ticks, ticks-system, system);
#else
int cpu,j;
cpu = smp_processor_id();
......
......@@ -39,6 +39,7 @@ asmlinkage void do_bottom_half(void)
unsigned long mask, left;
void (**bh)(void);
sti();
bh = bh_base;
active = bh_active & bh_mask;
for (mask = 1, left = ~0 ; left & active ; bh++,mask += mask,left += left) {
......
......@@ -295,7 +295,7 @@ void __wait_on_page(struct page *page)
* This is really ugly. But the goto's actually try to clarify some
* of the logic when it comes to error handling etc.
*/
#define MAX_READAHEAD (PAGE_SIZE*4)
#define MAX_READAHEAD (PAGE_SIZE*8)
int generic_file_read(struct inode * inode, struct file * filp, char * buf, int count)
{
int error, read;
......
......@@ -96,6 +96,8 @@ static struct symbol_table net_syms = {
X(ip_options_compile),
X(ip_rt_put),
X(arp_send),
X(ip_id_count),
X(ip_send_check),
#ifdef CONFIG_IP_FORWARD
X(ip_forward),
#endif
......@@ -166,6 +168,8 @@ static struct symbol_table net_syms = {
X(kill_fasync),
#ifdef CONFIG_FIREWALL
X(call_in_firewall),
X(call_out_firewall),
X(call_fw_firewall),
#endif
#endif /* CONFIG_INET */
......
......@@ -1097,7 +1097,7 @@ then
# Activate the Linux compatible sound configuration.
# This may not work for all sound cards. (See sound docs)
#
make -C drivers/sound mkscript >>.menuconfig.log 2>&1
make -C drivers/sound mkscript kernelconfig >>.menuconfig.log 2>&1
echo "# $kernel_version" >.menuconfig
fi
......
......@@ -205,7 +205,7 @@ proc write_tristate { file1 file2 varname variable dep } {
elseif { $variable == 2 || ($dep == 2 && $variable == 1) } \
then { puts $file1 "$varname=m"; \
puts $file2 "#undef $varname"; \
puts $file2 "#define $varname_MODULE 1" } \
puts $file2 "#define ${varname}_MODULE 1" } \
elseif { $variable == 1 && $dep != 2 } \
then { puts $file1 "$varname=y"; \
puts $file2 "#define $varname 1" } \
......
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