home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC-Online 1996 May
/
PCOnline_05_1996.bin
/
linux
/
source
/
kernel-s
/
v1.2
/
patch-1.006
/
patch-1.2.7
Wrap
Text File
|
1995-04-29
|
41KB
|
1,125 lines
diff -u --recursive --new-file v1.2.6/linux/Makefile linux/Makefile
--- v1.2.6/linux/Makefile Fri Apr 28 11:10:53 1995
+++ linux/Makefile Fri Apr 28 14:05:34 1995
@@ -1,6 +1,6 @@
VERSION = 1
PATCHLEVEL = 2
-SUBLEVEL = 6
+SUBLEVEL = 7
ARCH = i386
diff -u --recursive --new-file v1.2.6/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v1.2.6/linux/arch/alpha/config.in Wed Feb 15 10:50:55 1995
+++ linux/arch/alpha/config.in Fri Apr 28 11:17:56 1995
@@ -43,10 +43,10 @@
comment 'SCSI support type (disk, tape, CDrom)'
-bool 'Scsi disk support' CONFIG_BLK_DEV_SD y
-bool 'Scsi tape support' CONFIG_CHR_DEV_ST n
-bool 'Scsi CDROM support' CONFIG_BLK_DEV_SR n
-bool 'Scsi generic support' CONFIG_CHR_DEV_SG n
+bool 'SCSI disk support' CONFIG_BLK_DEV_SD y
+bool 'SCSI tape support' CONFIG_CHR_DEV_ST n
+bool 'SCSI CDROM support' CONFIG_BLK_DEV_SR n
+bool 'SCSI generic support' CONFIG_CHR_DEV_SG n
comment 'SCSI low-level drivers'
@@ -233,5 +233,5 @@
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
-bool 'Verbose scsi error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
+bool 'Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
diff -u --recursive --new-file v1.2.6/linux/arch/i386/config.in linux/arch/i386/config.in
--- v1.2.6/linux/arch/i386/config.in Fri Apr 28 11:10:53 1995
+++ linux/arch/i386/config.in Fri Apr 28 11:17:56 1995
@@ -69,10 +69,10 @@
comment 'SCSI support type (disk, tape, CDrom)'
-bool 'Scsi disk support' CONFIG_BLK_DEV_SD y
-bool 'Scsi tape support' CONFIG_CHR_DEV_ST n
-bool 'Scsi CDROM support' CONFIG_BLK_DEV_SR n
-bool 'Scsi generic support' CONFIG_CHR_DEV_SG n
+bool 'SCSI disk support' CONFIG_BLK_DEV_SD y
+bool 'SCSI tape support' CONFIG_CHR_DEV_ST n
+bool 'SCSI CDROM support' CONFIG_BLK_DEV_SR n
+bool 'SCSI generic support' CONFIG_CHR_DEV_SG n
comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
@@ -267,5 +267,5 @@
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
-bool 'Verbose scsi error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
+bool 'Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
diff -u --recursive --new-file v1.2.6/linux/arch/i386/kernel/signal.c linux/arch/i386/kernel/signal.c
--- v1.2.6/linux/arch/i386/kernel/signal.c Tue Feb 7 11:56:41 1995
+++ linux/arch/i386/kernel/signal.c Thu Apr 27 14:55:29 1995
@@ -151,10 +151,10 @@
struct sigaction * sa;
while ((signr = current->signal & mask)) {
- __asm__("bsf %2,%1\n\t"
+ __asm__("bsf %3,%1\n\t"
"btrl %1,%0"
:"=m" (current->signal),"=r" (signr)
- :"1" (signr));
+ :"0" (current->signal), "1" (signr));
sa = current->sigaction + signr;
signr++;
if ((current->flags & PF_PTRACED) && signr != SIGKILL) {
diff -u --recursive --new-file v1.2.6/linux/arch/mips/config.in linux/arch/mips/config.in
--- v1.2.6/linux/arch/mips/config.in Wed Feb 15 10:50:55 1995
+++ linux/arch/mips/config.in Fri Apr 28 11:17:56 1995
@@ -63,10 +63,10 @@
comment 'SCSI support type (disk, tape, CDrom)'
-bool 'Scsi disk support' CONFIG_BLK_DEV_SD y
-bool 'Scsi tape support' CONFIG_CHR_DEV_ST y
-bool 'Scsi CDROM support' CONFIG_BLK_DEV_SR y
-bool 'Scsi generic support' CONFIG_CHR_DEV_SG y
+bool 'SCSI disk support' CONFIG_BLK_DEV_SD y
+bool 'SCSI tape support' CONFIG_CHR_DEV_ST y
+bool 'SCSI CDROM support' CONFIG_BLK_DEV_SR y
+bool 'SCSI generic support' CONFIG_CHR_DEV_SG y
comment 'SCSI low-level drivers'
@@ -252,5 +252,5 @@
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
-bool 'Verbose scsi error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
+bool 'Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
diff -u --recursive --new-file v1.2.6/linux/arch/sparc/config.in linux/arch/sparc/config.in
--- v1.2.6/linux/arch/sparc/config.in Sun Feb 26 20:46:20 1995
+++ linux/arch/sparc/config.in Fri Apr 28 11:17:56 1995
@@ -50,10 +50,10 @@
comment 'SCSI support type (disk, tape, CDrom)'
-bool 'Scsi disk support' CONFIG_BLK_DEV_SD y
-bool 'Scsi tape support' CONFIG_CHR_DEV_ST n
-bool 'Scsi CDROM support' CONFIG_BLK_DEV_SR n
-bool 'Scsi generic support' CONFIG_CHR_DEV_SG n
+bool 'SCSI disk support' CONFIG_BLK_DEV_SD y
+bool 'SCSI tape support' CONFIG_CHR_DEV_ST n
+bool 'SCSI CDROM support' CONFIG_BLK_DEV_SR n
+bool 'SCSI generic support' CONFIG_CHR_DEV_SG n
comment 'SCSI low-level drivers'
@@ -242,5 +242,5 @@
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
-bool 'Verbose scsi error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
+bool 'Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
diff -u --recursive --new-file v1.2.6/linux/drivers/block/ide-cd.c linux/drivers/block/ide-cd.c
--- v1.2.6/linux/drivers/block/ide-cd.c Sun Jan 15 00:54:27 1995
+++ linux/drivers/block/ide-cd.c Fri Apr 28 11:17:56 1995
@@ -1,5 +1,5 @@
/*
- * linux/drivers/block/ide-cd.c (BETA)
+ * linux/drivers/block/ide-cd.c
*
* 1.00 Oct 31, 1994 -- Initial version.
* 1.01 Nov 2, 1994 -- Fixed problem with starting request in
@@ -20,10 +20,17 @@
* 2.03 Jan 10, 1995 -- Rewrite block read routines to handle block sizes
* other than 2k and to move multiple sectors in a
* single transaction.
+ * 2.04 Apr 21, 1995 -- Add work-around for Creative Labs CD220E drives.
+ * Thanks to Nick Saw <cwsaw@pts7.pts.mot.com> for
+ * help in figuring this out. Ditto for Acer and
+ * Aztech drives, which seem to have the same problem.
+ *
*
* ATAPI cd-rom driver. To be used with ide.c.
*
* Copyright (C) 1994, 1995 scott snyder <snyder@fnald0.fnal.gov>
+ * May be copied or modified under the terms of the GNU General Public License
+ * (../../COPYING).
*/
#include <linux/cdrom.h>
@@ -88,7 +95,8 @@
unsigned media_changed : 1; /* Driver has noticed a media change. */
unsigned toc_valid : 1; /* Saved TOC information is current. */
- unsigned reserved : 4;
+ unsigned no_lba_toc : 1; /* Drive cannot return TOC info in LBA format */
+ unsigned reserved : 3;
};
#define CDROM_FLAGS(dev) ((struct ide_cd_flags *)&((dev)->bios_sect))
@@ -1094,6 +1102,7 @@
static int
cdrom_read_toc (ide_dev_t *dev)
{
+ int msf_flag;
int stat, ntracks, i;
struct atapi_toc *toc = cdrom_info[dev->hwif][dev->select.b.drive].toc;
@@ -1118,8 +1127,11 @@
if (CDROM_FLAGS (dev)->toc_valid) return 0;
+ /* Some drives can't return TOC data in LBA format. */
+ msf_flag = (CDROM_FLAGS (dev)->no_lba_toc);
+
/* First read just the header, so we know how long the TOC is. */
- stat = cdrom_read_tocentry (dev, 0, 0, (char *)toc,
+ stat = cdrom_read_tocentry (dev, 0, msf_flag, (char *)toc,
sizeof (struct atapi_toc_header) +
sizeof (struct atapi_toc_entry));
if (stat) return stat;
@@ -1129,13 +1141,21 @@
if (ntracks > MAX_TRACKS) ntracks = MAX_TRACKS;
/* Now read the whole schmeer. */
- stat = cdrom_read_tocentry (dev, 0, 0, (char *)toc,
+ stat = cdrom_read_tocentry (dev, 0, msf_flag, (char *)toc,
sizeof (struct atapi_toc_header) +
(ntracks+1) * sizeof (struct atapi_toc_entry));
if (stat) return stat;
byte_swap_word (&toc->hdr.toc_length);
for (i=0; i<=ntracks; i++)
- byte_swap_long (&toc->ent[i].lba);
+ {
+ if (msf_flag)
+ {
+ byte *adr = (byte *)&(toc->ent[i].lba);
+ toc->ent[i].lba = msf_to_lba (adr[1], adr[2], adr[3]);
+ }
+ else
+ byte_swap_long (&toc->ent[i].lba);
+ }
/* Remember that we've read this stuff. */
CDROM_FLAGS (dev)->toc_valid = 1;
@@ -1618,7 +1638,19 @@
CDROM_FLAGS (dev)->toc_valid = 0;
CDROM_FLAGS (dev)->no_playaudio12 = 0;
+ CDROM_FLAGS (dev)->no_lba_toc = 0;
CDROM_FLAGS (dev)->drq_interrupt = ((dev->id->config & 0x0060) == 0x20);
+
+ /* Accommodate some broken drives... */
+ if (strcmp (dev->id->model, "CD220E") == 0) /* Creative Labs */
+ CDROM_FLAGS (dev)->no_lba_toc = 1;
+
+ else if (strcmp (dev->id->model, "TO-ICSLYAL") == 0 || /* Acer CD525E */
+ strcmp (dev->id->model, "OTI-SCYLLA") == 0)
+ CDROM_FLAGS (dev)->no_lba_toc = 1;
+
+ else if (strcmp (dev->id->model, "CDA26803I SE") == 0) /* Aztech */
+ CDROM_FLAGS (dev)->no_lba_toc = 1;
cdrom_info[dev->hwif][dev->select.b.drive].toc = NULL;
cdrom_info[dev->hwif][dev->select.b.drive].sector_buffer = NULL;
diff -u --recursive --new-file v1.2.6/linux/drivers/char/ChangeLog linux/drivers/char/ChangeLog
--- v1.2.6/linux/drivers/char/ChangeLog Fri Apr 28 11:10:53 1995
+++ linux/drivers/char/ChangeLog Fri Apr 28 11:17:57 1995
@@ -1,3 +1,16 @@
+Wed Apr 26 10:23:44 1995 Theodore Y. Ts'o <tytso@localhost>
+
+ * tty_io.c (release_dev): Try to shutdown the line discpline
+ *before* decrementing the tty count variable; this removes
+ a potential race condition which occurs when the line
+ discpline close blocks, and another process then tries
+ open the same serial port.
+
+ * serial.c (rs_hangup): When hanging up, flush the output buffer
+ befure shutting down the UART. Otherwise the line
+ discpline close blocks waiting for the characters to get
+ flushed, which never happens until the serial port gets reused.
+
Wed Apr 12 08:06:16 1995 Theodore Y. Ts'o <tytso@localhost>
* serial.c (do_serial_hangup, do_softint, check_modem_status,
diff -u --recursive --new-file v1.2.6/linux/drivers/char/serial.c linux/drivers/char/serial.c
--- v1.2.6/linux/drivers/char/serial.c Fri Apr 28 11:10:53 1995
+++ linux/drivers/char/serial.c Fri Apr 28 11:17:57 1995
@@ -2090,6 +2090,7 @@
if (serial_paranoia_check(info, tty->device, "rs_hangup"))
return;
+ rs_flush_buffer(tty);
shutdown(info);
info->event = 0;
info->count = 0;
diff -u --recursive --new-file v1.2.6/linux/drivers/char/tty_io.c linux/drivers/char/tty_io.c
--- v1.2.6/linux/drivers/char/tty_io.c Sat Mar 18 12:45:46 1995
+++ linux/drivers/char/tty_io.c Fri Apr 28 11:17:57 1995
@@ -1006,6 +1006,22 @@
tty->link->count = 0;
}
}
+ if (tty->count <= 1) {
+ /*
+ * Shutdown the current line discipline, and reset it
+ * to N_TTY.
+ */
+ if (tty->ldisc.close)
+ (tty->ldisc.close)(tty);
+ tty->ldisc = ldiscs[N_TTY];
+ tty->termios->c_line = N_TTY;
+ if (o_tty && o_tty->count <= 0) {
+ if (o_tty->ldisc.close)
+ (o_tty->ldisc.close)(o_tty);
+ o_tty->ldisc = ldiscs[N_TTY];
+ o_tty->termios->c_line = N_TTY;
+ }
+ }
if (--tty->count < 0) {
printk("release_dev: bad tty->count (%d) for %s\n",
tty->count, tty_name(tty));
@@ -1039,23 +1055,6 @@
(*p)->tty = NULL;
}
- /*
- * Shutdown the current line discipline, and reset it to
- * N_TTY.
- */
- if (tty->ldisc.close)
- (tty->ldisc.close)(tty);
- tty->ldisc = ldiscs[N_TTY];
- tty->termios->c_line = N_TTY;
- if (o_tty) {
- if (o_tty->ldisc.close)
- (o_tty->ldisc.close)(o_tty);
- o_tty->ldisc = ldiscs[N_TTY];
-#if 0 /* No way! We just released the termios struct! */
- o_tty->termios->c_line = N_TTY;
-#endif
- }
-
tty->driver.table[idx] = NULL;
if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
tty->driver.termios[idx] = NULL;
diff -u --recursive --new-file v1.2.6/linux/drivers/net/3c503.c linux/drivers/net/3c503.c
--- v1.2.6/linux/drivers/net/3c503.c Mon Feb 27 11:06:24 1995
+++ linux/drivers/net/3c503.c Fri Apr 28 16:56:52 1995
@@ -317,6 +317,7 @@
outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
NS8390_init(dev, 0);
+ dev->start = 0;
return 0;
}
diff -u --recursive --new-file v1.2.6/linux/drivers/net/8390.c linux/drivers/net/8390.c
--- v1.2.6/linux/drivers/net/8390.c Mon Jan 23 10:38:28 1995
+++ linux/drivers/net/8390.c Sat Apr 29 09:49:58 1995
@@ -15,6 +15,11 @@
This is the chip-specific code for many 8390-based ethernet adaptors.
This is not a complete driver, it must be combined with board-specific
code such as ne.c, wd.c, 3c503.c, etc.
+
+ 13/04/95 -- Don't blindly swallow ENISR_RDC interrupts for non-shared
+ memory cards. We need to follow these closely for neX000 cards.
+ Plus other minor cleanups. -- Paul Gortmaker
+
*/
static char *version =
@@ -83,7 +88,7 @@
#endif
/* Max number of packets received at one Intr.
- Current this may only be examined by a kernel debugger. */
+ Currently this may only be examined by a kernel debugger. */
static int high_water_mark = 0;
/* Index to functions. */
@@ -124,16 +129,18 @@
int e8390_base = dev->base_addr;
struct ei_device *ei_local = (struct ei_device *) dev->priv;
int length, send_length;
+ unsigned long flags;
- /* We normally shouldn't be called if dev->tbusy is set, but the
- existing code does anyway.
- If it has been too long (> 100 or 150ms.) since the last Tx we assume
- the board has died and kick it. */
-
+/*
+ * We normally shouldn't be called if dev->tbusy is set, but the
+ * existing code does anyway. If it has been too long since the
+ * last Tx, we assume the board has died and kick it.
+ */
+
if (dev->tbusy) { /* Do timeouts, just like the 8003 driver. */
int txsr = inb(e8390_base+EN0_TSR), isr;
int tickssofar = jiffies - dev->trans_start;
- if (tickssofar < 10 || (tickssofar < 15 && ! (txsr & ENTSR_PTX))) {
+ if (tickssofar < TX_TIMEOUT || (tickssofar < (TX_TIMEOUT+5) && ! (txsr & ENTSR_PTX))) {
return 1;
}
isr = inb(e8390_base+EN0_ISR);
@@ -170,15 +177,22 @@
if (skb->len <= 0)
return 0;
- /* Block a timer-based transmit from overlapping. */
- if (set_bit(0, (void*)&dev->tbusy) != 0) {
- printk("%s: Transmitter access conflict.\n", dev->name);
- return 1;
- }
+ save_flags(flags);
+ cli();
+
+ /* Block a timer-based transmit from overlapping. */
+ if ((set_bit(0, (void*)&dev->tbusy) != 0) || ei_local->irqlock) {
+ printk("%s: Tx access conflict. irq=%d lock=%d tx1=%d tx2=%d last=%d\n",
+ dev->name, dev->interrupt, ei_local->irqlock, ei_local->tx1,
+ ei_local->tx2, ei_local->lasttx);
+ restore_flags(flags);
+ return 1;
+ }
/* Mask interrupts from the ethercard. */
- outb(0x00, e8390_base + EN0_IMR);
+ outb(0x00, e8390_base + EN0_IMR);
ei_local->irqlock = 1;
+ restore_flags(flags);
send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
@@ -200,28 +214,30 @@
ei_local->txing);
} else { /* We should never get here. */
if (ei_debug)
- printk("%s: No packet buffer space for ping-pong use.\n",
- dev->name);
+ printk("%s: No Tx buffers free. irq=%d tx1=%d tx2=%d last=%d\n",
+ dev->name, dev->interrupt, ei_local->tx1,
+ ei_local->tx2, ei_local->lasttx);
ei_local->irqlock = 0;
dev->tbusy = 1;
- outb_p(ENISR_ALL, e8390_base + EN0_IMR);
+ outb_p(ENISR_ALL, e8390_base + EN0_IMR);
return 1;
}
ei_block_output(dev, length, skb->data, output_page);
if (! ei_local->txing) {
+ ei_local->txing = 1;
NS8390_trigger_send(dev, send_length, output_page);
dev->trans_start = jiffies;
if (output_page == ei_local->tx_start_page)
ei_local->tx1 = -1, ei_local->lasttx = -1;
else
ei_local->tx2 = -1, ei_local->lasttx = -2;
- ei_local->txing = 1;
} else
ei_local->txqueue++;
dev->tbusy = (ei_local->tx1 && ei_local->tx2);
} else { /* No pingpong, just a single Tx buffer. */
ei_block_output(dev, length, skb->data, ei_local->tx_start_page);
+ ei_local->txing = 1;
NS8390_trigger_send(dev, send_length, ei_local->tx_start_page);
dev->trans_start = jiffies;
dev->tbusy = 1;
@@ -242,7 +258,7 @@
{
struct device *dev = (struct device *)(irq2dev_map[irq]);
int e8390_base;
- int interrupts, boguscount = 0;
+ int interrupts, nr_serviced = 0;
struct ei_device *ei_local;
if (dev == NULL) {
@@ -253,7 +269,6 @@
ei_local = (struct ei_device *) dev->priv;
if (dev->interrupt || ei_local->irqlock) {
/* The "irqlock" check is only for testing. */
- sti();
printk(ei_local->irqlock
? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
: "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
@@ -263,7 +278,6 @@
}
dev->interrupt = 1;
- sti(); /* Allow other interrupts. */
/* Change to page 0 and read the intr status reg. */
outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
@@ -273,16 +287,12 @@
/* !!Assumption!! -- we stay in page 0. Don't break this. */
while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
- && ++boguscount < 9) {
+ && ++nr_serviced < MAX_SERVICE) {
if (dev->start == 0) {
printk("%s: interrupt from stopped card\n", dev->name);
interrupts = 0;
break;
}
- if (interrupts & ENISR_RDC) {
- /* Ack meaningless DMA complete. */
- outb_p(ENISR_RDC, e8390_base + EN0_ISR);
- }
if (interrupts & ENISR_OVER) {
ei_rx_overrun(dev);
} else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) {
@@ -303,17 +313,25 @@
if (interrupts & ENISR_TX_ERR) {
outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
}
+
+ if (interrupts & ENISR_RDC) {
+ if (dev->mem_start)
+ outb_p(ENISR_RDC, e8390_base + EN0_ISR);
+ }
+
outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
}
- if (interrupts && ei_debug) {
- if (boguscount == 9)
+ if ((interrupts & ~ENISR_RDC) && ei_debug) {
+ outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
+ if (nr_serviced == MAX_SERVICE) {
printk("%s: Too much work at interrupt, status %#2.2x\n",
dev->name, interrupts);
- else
+ outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
+ } else {
printk("%s: unknown interrupt %#2x\n", dev->name, interrupts);
- outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
- outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
+ outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
+ }
}
dev->interrupt = 0;
return;
@@ -338,9 +356,9 @@
ei_local->tx1 = 0;
dev->tbusy = 0;
if (ei_local->tx2 > 0) {
+ ei_local->txing = 1;
NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
dev->trans_start = jiffies;
- ei_local->txing = 1;
ei_local->tx2 = -1,
ei_local->lasttx = 2;
} else
@@ -352,9 +370,9 @@
ei_local->tx2 = 0;
dev->tbusy = 0;
if (ei_local->tx1 > 0) {
+ ei_local->txing = 1;
NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
dev->trans_start = jiffies;
- ei_local->txing = 1;
ei_local->tx1 = -1;
ei_local->lasttx = 1;
} else
@@ -402,7 +420,7 @@
rxing_page = inb_p(e8390_base + EN1_CURPAG);
outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
- /* Remove one frame from the ring. Boundary is alway a page behind. */
+ /* Remove one frame from the ring. Boundary is always a page behind. */
this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
if (this_frame >= ei_local->stop_page)
this_frame = ei_local->rx_start_page;
@@ -475,12 +493,12 @@
/* This _should_ never happen: it's here for avoiding bad clones. */
if (next_frame >= ei_local->stop_page) {
- printk("%s: next frame inconsistency, %#2x..", dev->name,
+ printk("%s: next frame inconsistency, %#2x\n", dev->name,
next_frame);
next_frame = ei_local->rx_start_page;
}
ei_local->current_page = next_frame;
- outb(next_frame-1, e8390_base+EN0_BOUNDARY);
+ outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
}
/* If any worth-while packets have been received, dev_rint()
has done a mark_bh(NET_BH) for us and will work on them
@@ -539,6 +557,9 @@
short ioaddr = dev->base_addr;
struct ei_device *ei_local = (struct ei_device *) dev->priv;
+ /* If the card is stopped, just return the present stats. */
+ if (dev->start == 0) return &ei_local->stat;
+
/* Read the counter registers, assuming we are in page 0. */
ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
ei_local->stat.rx_crc_errors += inb_p(ioaddr + EN0_COUNTER1);
@@ -610,6 +631,7 @@
struct ei_device *ei_local = (struct ei_device *) dev->priv;
int i;
int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
+ unsigned long flags;
/* Follow National Semi's recommendations for initing the DP83902. */
outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base); /* 0x21 */
@@ -633,6 +655,7 @@
/* Copy the station address into the DS8390 registers,
and set the multicast hash bitmap to receive all multicasts. */
+ save_flags(flags);
cli();
outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base); /* 0x61 */
for(i = 0; i < 6; i++) {
@@ -645,7 +668,7 @@
outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base);
- sti();
+ restore_flags(flags);
dev->tbusy = 0;
dev->interrupt = 0;
ei_local->tx1 = ei_local->tx2 = 0;
@@ -667,7 +690,6 @@
{
int e8390_base = dev->base_addr;
- ei_status.txing = 1;
outb_p(E8390_NODMA+E8390_PAGE0, e8390_base);
if (inb_p(e8390_base) & E8390_TRANS) {
diff -u --recursive --new-file v1.2.6/linux/drivers/net/8390.h linux/drivers/net/8390.h
--- v1.2.6/linux/drivers/net/8390.h Mon Jan 16 07:17:36 1995
+++ linux/drivers/net/8390.h Fri Apr 28 16:56:52 1995
@@ -44,14 +44,13 @@
unsigned open:1;
unsigned word16:1; /* We have the 16-bit (vs 8-bit) version of the card. */
unsigned txing:1; /* Transmit Active */
- unsigned dmaing:2; /* Remote DMA Active */
unsigned irqlock:1; /* 8390's intrs disabled when '1'. */
unsigned pingpong:1; /* Using the ping-pong driver */
unsigned char tx_start_page, rx_start_page, stop_page;
unsigned char current_page; /* Read pointer in buffer */
unsigned char interface_num; /* Net port (AUI, 10bT.) to use. */
unsigned char txqueue; /* Tx Packet buffer queue length. */
- unsigned char in_interrupt;
+ unsigned char dmaing; /* Remote DMA (Tx/Rx/Active) */
short tx1, tx2; /* Packet lengths for ping-pong tx. */
short lasttx; /* Alpha version consistency check. */
unsigned char reg0; /* Register '0' in a WD8013 */
@@ -60,6 +59,12 @@
/* The new statistics table. */
struct enet_statistics stat;
};
+
+/* The maximum number of 8390 interrupt serivce routines called per IRQ. */
+#define MAX_SERVICE 12
+
+/* The maximum number of jiffies waited before assuming a Tx failed. */
+#define TX_TIMEOUT 20
#define ei_status (*(struct ei_device *)(dev->priv))
diff -u --recursive --new-file v1.2.6/linux/drivers/net/Makefile linux/drivers/net/Makefile
--- v1.2.6/linux/drivers/net/Makefile Thu Feb 23 13:51:27 1995
+++ linux/drivers/net/Makefile Tue Apr 25 07:27:16 1995
@@ -11,8 +11,8 @@
MODULES :=
NETDRV_OBJS := Space.o auto_irq.o net_init.o loopback.o
-CFLAGS := $(CFLAGS) -I../../net/inet
-CPP := $(CPP) -I../../net/inet
+override CFLAGS := $(CFLAGS) -I../../net/inet
+override CPP := $(CPP) -I../../net/inet
.c.o:
$(CC) $(CFLAGS) -c $<
diff -u --recursive --new-file v1.2.6/linux/drivers/net/ne.c linux/drivers/net/ne.c
--- v1.2.6/linux/drivers/net/ne.c Fri Apr 28 11:10:53 1995
+++ linux/drivers/net/ne.c Sat Apr 29 09:49:58 1995
@@ -1,4 +1,3 @@
-#define rw_bugfix
/* ne.c: A general non-shared-memory NS8390 ethernet driver for linux. */
/*
Written 1992-94 by Donald Becker.
@@ -14,8 +13,16 @@
Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
This driver should work with many programmed-I/O 8390-based ethernet
- boards. Currently it support the NE1000, NE2000, many clones,
+ boards. Currently it supports the NE1000, NE2000, many clones,
and some Cabletron products.
+
+ 13/04/95 -- Change in philosophy. We now monitor ENISR_RDC for
+ handshaking the Tx PIO xfers. If we don't get a RDC within a
+ reasonable period of time, we know the 8390 has gone south, and we
+ kick the board before it locks the system. Also use set_bit() to
+ create atomic locks on the PIO xfers, and added some defines
+ that the end user can play with to save memory. -- Paul Gortmaker
+
*/
/* Routines for the NatSemi-based designs (NE[12]000). */
@@ -31,6 +38,20 @@
#include <linux/netdevice.h>
#include "8390.h"
+
+/* Some defines that people can play with if so inclined. */
+
+/* Do we support clones that don't adhere to 14,15 of the SAprom ? */
+#define CONFIG_NE_BAD_CLONES
+
+/* Do we perform extra sanity checks on stuff ? */
+/* #define CONFIG_NE_SANITY */
+
+/* Do we implement the read before write bugfix ? */
+/* #define CONFIG_NE_RW_BUGFIX */
+
+/* ---- No user-servicable parts below ---- */
+
extern struct device *init_etherdev(struct device *dev, int sizeof_private,
unsigned long *mem_startp);
@@ -39,6 +60,7 @@
static unsigned int netcard_portlist[] =
{ 0x300, 0x280, 0x320, 0x340, 0x360, 0};
+#ifdef CONFIG_NE_BAD_CLONES
/* A list of bad clones that we none-the-less recognize. */
static struct { char *name8, *name16; unsigned char SAprefix[4];}
bad_clone_list[] = {
@@ -46,8 +68,12 @@
{"DE120", "DE220", {0x00, 0x80, 0xc8,}},
{"DFI1000", "DFI2000", {'D', 'F', 'I',}}, /* Original, eh? */
{"EtherNext UTP8", "EtherNext UTP16", {0x00, 0x00, 0x79}},
+ {"NE1000","NE2000-invalid", {0x00, 0x00, 0xd8}}, /* Ancient real NE1000. */
+ {"NN1000", "NN2000", {0x08, 0x03, 0x08}}, /* Outlaw no-name clone. */
+ {"4-DIM8","4-DIM16", {0x00,0x00,0x4d,}}, /* Outlaw 4-Dimension cards. */
{0,}
};
+#endif
#define NE_BASE (dev->base_addr)
#define NE_CMD 0x00
@@ -60,6 +86,8 @@
#define NESM_START_PG 0x40 /* First page of TX buffer */
#define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */
+#define NE_RDC_TIMEOUT 0x03 /* Max wait in jiffies for Tx RDC */
+
int ne_probe(struct device *dev);
static int ne_probe1(struct device *dev, int ioaddr);
@@ -126,9 +154,9 @@
char *name = NULL;
int start_page, stop_page;
int neX000, ctron;
- int reg0 = inb(ioaddr);
+ int reg0 = inb_p(ioaddr);
- if ( reg0 == 0xFF)
+ if (reg0 == 0xFF)
return ENODEV;
/* Do a preliminary verification that we have a 8390. */
@@ -140,7 +168,7 @@
inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
outb_p(reg0, ioaddr);
- outb(regd, ioaddr + 0x0d); /* Restore the old values. */
+ outb_p(regd, ioaddr + 0x0d); /* Restore the old values. */
return ENODEV;
}
}
@@ -169,6 +197,7 @@
};
for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++)
outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
+
}
for(i = 0; i < 32 /*sizeof(SA_prom)*/; i+=2) {
SA_prom[i] = inb(ioaddr + NE_DATAPORT);
@@ -208,6 +237,7 @@
start_page = 0x01;
stop_page = (wordlength == 2) ? 0x40 : 0x20;
} else {
+#ifdef CONFIG_NE_BAD_CLONES
/* Ack! Well, there might be a *bad* NE*000 clone there.
Check for total bogus addresses. */
for (i = 0; bad_clone_list[i].name8; i++) {
@@ -227,6 +257,11 @@
SA_prom[14], SA_prom[15]);
return ENXIO;
}
+#else
+ printk(" not found.\n");
+ return ENXIO;
+#endif
+
}
@@ -242,7 +277,7 @@
outb_p(0x00, ioaddr + EN0_IMR); /* Mask it again. */
dev->irq = autoirq_report(0);
if (ei_debug > 2)
- printk(" autoirq is %d", dev->irq);
+ printk(" autoirq is %d\n", dev->irq);
} else if (dev->irq == 2)
/* Fixup for users that don't know that IRQ 2 is really IRQ 9,
or don't know which one to set. */
@@ -251,7 +286,7 @@
/* Snarf the interrupt now. There's no point in waiting since we cannot
share and the board will usually be enabled. */
{
- int irqval = request_irq (dev->irq, ei_interrupt, 0, "ne");
+ int irqval = request_irq (dev->irq, ei_interrupt, 0, wordlength==2 ? "ne2000":"ne1000");
if (irqval) {
printk (" unable to get IRQ %d (irqval=%d).\n", dev->irq, irqval);
return EAGAIN;
@@ -260,7 +295,7 @@
dev->base_addr = ioaddr;
- request_region(ioaddr, NE_IO_EXTENT,"ne2000");
+ request_region(ioaddr, NE_IO_EXTENT, wordlength==2 ? "ne2000":"ne1000");
for(i = 0; i < ETHER_ADDR_LEN; i++)
dev->dev_addr[i] = SA_prom[i];
@@ -318,10 +353,13 @@
static int
ne_block_input(struct device *dev, int count, char *buf, int ring_offset)
{
+#ifdef CONFIG_NE_SANITY
int xfer_count = count;
+#endif
int nic_base = dev->base_addr;
- if (ei_status.dmaing) {
+ /* This *shouldn't* happen. If it does, it's the last thing you'll see */
+ if (set_bit(0,(void*)&ei_status.dmaing)) {
if (ei_debug > 0)
printk("%s: DMAing conflict in ne_block_input "
"[DMAstat:%d][irqlock:%d][intr:%d].\n",
@@ -329,7 +367,7 @@
dev->interrupt);
return 0;
}
- ei_status.dmaing |= 0x01;
+ ei_status.dmaing |= 0x02;
outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
outb_p(count & 0xff, nic_base + EN0_RCNTLO);
outb_p(count >> 8, nic_base + EN0_RCNTHI);
@@ -338,14 +376,18 @@
outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
if (ei_status.word16) {
insw(NE_BASE + NE_DATAPORT,buf,count>>1);
- if (count & 0x01)
- buf[count-1] = inb(NE_BASE + NE_DATAPORT), xfer_count++;
+ if (count & 0x01) {
+ buf[count-1] = inb(NE_BASE + NE_DATAPORT);
+#ifdef CONFIG_NE_SANITY
+ xfer_count++;
+#endif
+ }
} else {
insb(NE_BASE + NE_DATAPORT, buf, count);
}
/* This was for the ALPHA version only, but enough people have
- encountering problems that it is still here. If you see
+ been encountering problems so it is still here. If you see
this message you either 1) have a slightly incompatible clone
or 2) have noise/speed problems with your bus. */
#ifdef CONFIG_NE_SANITY
@@ -353,7 +395,7 @@
int addr, tries = 20;
do {
/* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
- -- it's broken! Check the "DMA" address instead. */
+ -- it's broken for Rx on some cards! */
int high = inb_p(nic_base + EN0_RSARHI);
int low = inb_p(nic_base + EN0_RSARLO);
addr = (high << 8) + low;
@@ -366,7 +408,8 @@
dev->name, ring_offset + xfer_count, addr);
}
#endif
- ei_status.dmaing &= ~0x01;
+ outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
+ ei_status.dmaing &= ~0x03;
return ring_offset + count;
}
@@ -374,15 +417,20 @@
ne_block_output(struct device *dev, int count,
const unsigned char *buf, const int start_page)
{
+#ifdef CONFIG_NE_SANITY
int retries = 0;
+#endif
int nic_base = NE_BASE;
+ unsigned long dma_start;
/* Round the count up for word writes. Do we need to do this?
What effect will an odd byte count have on the 8390?
I should check someday. */
if (ei_status.word16 && (count & 0x01))
count++;
- if (ei_status.dmaing) {
+
+ /* This *shouldn't* happen. If it does, it's the last thing you'll see */
+ if (set_bit(0,(void*)&ei_status.dmaing)) {
if (ei_debug > 0)
printk("%s: DMAing conflict in ne_block_output."
"[DMAstat:%d][irqlock:%d][intr:%d]\n",
@@ -390,12 +438,15 @@
dev->interrupt);
return;
}
- ei_status.dmaing |= 0x02;
+ ei_status.dmaing |= 0x04;
/* We should already be in page 0, but to be safe... */
outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
+#ifdef CONFIG_NE_SANITY
retry:
-#if defined(rw_bugfix)
+#endif
+
+#ifdef CONFIG_NE_RW_BUGFIX
/* Handle the read-before-write bug the same way as the
Crynwr packet driver -- the NatSemi method doesn't work.
Actually this doesn't always work either, but if you have
@@ -411,6 +462,9 @@
SLOW_DOWN_IO;
#endif /* rw_bugfix */
+ dma_start = jiffies;
+ outb_p(ENISR_RDC, nic_base + EN0_ISR);
+
/* Now the normal output. */
outb_p(count & 0xff, nic_base + EN0_RCNTLO);
outb_p(count >> 8, nic_base + EN0_RCNTHI);
@@ -426,12 +480,10 @@
#ifdef CONFIG_NE_SANITY
/* This was for the ALPHA version only, but enough people have
- encountering problems that it is still here. */
+ been encountering problems so it is still here. */
if (ei_debug > 1) { /* DMA termination address check... */
int addr, tries = 20;
do {
- /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
- -- it's broken! Check the "DMA" address instead. */
int high = inb_p(nic_base + EN0_RSARHI);
int low = inb_p(nic_base + EN0_RSARLO);
addr = (high << 8) + low;
@@ -447,7 +499,17 @@
}
}
#endif
- ei_status.dmaing &= ~0x02;
+
+ while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
+ if (jiffies - dma_start > NE_RDC_TIMEOUT) {
+ printk("%s: timeout waiting for Tx RDC.\n", dev->name);
+ ne_reset_8390(dev);
+ NS8390_init(dev,1);
+ break;
+ }
+
+ outb_p(ENISR_RDC, nic_base + EN0_ISR); /* Ack intr. */
+ ei_status.dmaing &= ~0x05;
return;
}
diff -u --recursive --new-file v1.2.6/linux/drivers/net/wd.c linux/drivers/net/wd.c
--- v1.2.6/linux/drivers/net/wd.c Mon Jan 9 07:56:29 1995
+++ linux/drivers/net/wd.c Fri Apr 28 16:56:53 1995
@@ -368,6 +368,7 @@
if (ei_debug > 1)
printk("%s: Shutting down ethercard.\n", dev->name);
NS8390_init(dev, 0);
+ dev->start = 0;
/* Change from 16-bit to 8-bit shared memory so reboot works. */
outb(ei_status.reg5, wd_cmdreg + WD_CMDREG5 );
diff -u --recursive --new-file v1.2.6/linux/drivers/scsi/53c7,8xx.c linux/drivers/scsi/53c7,8xx.c
--- v1.2.6/linux/drivers/scsi/53c7,8xx.c Fri Apr 28 11:10:54 1995
+++ linux/drivers/scsi/53c7,8xx.c Fri Apr 28 11:17:57 1995
@@ -740,7 +740,7 @@
So, we stick it past the end of our hostdata structure.
ASSUMPTION :
- Irregardless of how many simultaenous SCSI commands we allow,
+ Regardless of how many simultaneous SCSI commands we allow,
the probe code only executes a _single_ instruction at a time,
so we only need one here, and don't need to allocate NCR53c7x0_cmd
structures for each target until we are no longer in scan_scsis
@@ -2304,8 +2304,8 @@
/*
* Function static struct NCR53c7x0_cmd *create_cmd (Scsi_Cmnd *cmd)
*
- * Purpose : If we have not allready allocated enough NCR53c7x0_cmd
- * structures to satisfy any allowable number of simultaenous
+ * Purpose : If we have not already allocated enough NCR53c7x0_cmd
+ * structures to satisfy any allowable number of simultaneous
* commands for this host; do so (using either scsi_malloc()
* or kmalloc() depending on configuration), and add them to the
* hostdata free list. Take the first structure off the free list,
@@ -2339,9 +2339,9 @@
unsigned long flags;
NCR53c7x0_local_setup(cmd->host);
-/* FIXME : when we start doing multiple simultaenous commands per LUN,
+/* FIXME : when we start doing multiple simultaneous commands per LUN,
we will need to either
- - Do an attach_slave() and detach_slave() the right way (alocate
+ - Do an attach_slave() and detach_slave() the right way (allocate
memory in attach_slave() as we do in scsi_register).
- Make sure this code works
with the former being cleaner. At the same time, we can also go with
@@ -2355,7 +2355,7 @@
!(hostdata->cmd_allocated[cmd->target] & (1 << cmd->lun))) {
for (i = host->hostt->cmd_per_lun - 1; i >= 0 --i) {
#ifdef SCSI_MALLOC
- /* scsi_malloc must allocate with a 512 byte granularity, but allways
+ /* scsi_malloc must allocate with a 512 byte granularity, but always
returns buffers which are aligned on a 512 boundary */
size = (hostdata->max_cmd_size + 511) / 512 * 512;
tmp = (struct NCR53c7x0_cmd *) scsi_malloc (size);
@@ -3815,7 +3815,7 @@
save_flags(flags);
halt (host);
NCR53c7x0_write8(SCNTL1_REG, SCNTL1_RST);
- udelay(25); /* Minimum ammount of time to assert RST */
+ udelay(25); /* Minimum amount of time to assert RST */
NCR53c7x0_write8(SCNTL1_REG, SCNTL1_RST);
for (c = (struct NCR53c7x0_cmd *) hostdata->running_list, found = 0; c;
c = (struct NCR53c7x0_cmd *) c->next) {
@@ -3899,7 +3899,7 @@
* reset.
*/
NCR53c7x0_write8(SCNTL1_REG, SCNTL1_RST);
- udelay(25); /* Minimum ammount of time to assert RST */
+ udelay(25); /* Minimum amount of time to assert RST */
NCR53c7x0_write8(SCNTL1_REG, SCNTL1_RST);
restore_flags (flags);
return 0;
diff -u --recursive --new-file v1.2.6/linux/drivers/scsi/53c7,8xx.h linux/drivers/scsi/53c7,8xx.h
--- v1.2.6/linux/drivers/scsi/53c7,8xx.h Fri Apr 28 11:10:54 1995
+++ linux/drivers/scsi/53c7,8xx.h Fri Apr 28 11:17:57 1995
@@ -59,7 +59,7 @@
#endif
#define NCR53c7xx {NULL, NULL, "NCR53c{7,8}xx (rel 4)", NCR53c7xx_detect, \
- NULL, /* info */ NULL, /* command, depricated */ NULL, \
+ NULL, /* info */ NULL, /* command, deprecated */ NULL, \
NCR53c7xx_queue_command, NCR53c7xx_abort, NCR53c7xx_reset, \
NULL /* slave attach */, scsicam_bios_param, /* can queue */ 1, \
/* id */ 7, 127 /* old SG_ALL */, /* cmd per lun */ 1 , \
diff -u --recursive --new-file v1.2.6/linux/drivers/scsi/ChangeLog linux/drivers/scsi/ChangeLog
--- v1.2.6/linux/drivers/scsi/ChangeLog Fri Apr 28 11:10:55 1995
+++ linux/drivers/scsi/ChangeLog Fri Apr 28 11:17:56 1995
@@ -89,7 +89,7 @@
* 53c7,8xx.c: crash on AEN fixed, SCSI reset is no longer a NOP,
NULL pointer panic on odd UDCs fixed, two bugs in diagnostic output
fixed, should initialize correctly if left running, now loadable,
- new memory allocation, extraneous diagnostic output supressed,
+ new memory allocation, extraneous diagnostic output suppressed,
splx() replaced with save/restore flags. [ Drew ]
* hosts.c, hosts.h, scsi_ioctl.c, sd.c, sd_ioctl.c, sg.c, sr.c,
@@ -111,7 +111,7 @@
* sr.c: More photo-cd hacks to make sure we get the xa stuff right.
* sr.h, sr.c: Change is_xa to xa_flags field.
- * st.c: Diable retries for write operations.
+ * st.c: Disable retries for write operations.
Wed Feb 15 10:52:56 1995 Eric Youngdale (eric@andante)
@@ -181,7 +181,7 @@
* Linux 1.1.89 released.
- * Makefile, u14-34f.c: Modulariz.e
+ * Makefile, u14-34f.c: Modularize.
* Makefile, eata.c: Modularize. Now version 1.14
@@ -202,7 +202,7 @@
* scsi.h: Define QUEUE_FULL condition.
- * sd.c: Do not check for non-existant partition until after
+ * sd.c: Do not check for non-existent partition until after
new media check.
* sg.c: Undo previous change which was wrong.
@@ -281,7 +281,7 @@
* scsi.c: Make RECOVERED_ERROR a SUGGEST_IS_OK.
- * sd.c: Fail if we are opening a non-existant partition.
+ * sd.c: Fail if we are opening a non-existent partition.
* sr.c: Bump SR_TIMEOUT to 15000.
Do not probe for media size at boot time(hard on changers).
diff -u --recursive --new-file v1.2.6/linux/fs/buffer.c linux/fs/buffer.c
--- v1.2.6/linux/fs/buffer.c Thu Mar 9 20:37:35 1995
+++ linux/fs/buffer.c Fri Apr 28 11:30:17 1995
@@ -1849,7 +1849,7 @@
/* If there are still a lot of dirty buffers around, skip the sleep
and flush some more */
- if(nr_buffers_type[BUF_DIRTY] < (nr_buffers - nr_buffers_type[BUF_SHARED]) *
+ if(nr_buffers_type[BUF_DIRTY] <= (nr_buffers - nr_buffers_type[BUF_SHARED]) *
bdf_prm.b_un.nfract/100) {
if (current->signal & (1 << (SIGKILL-1))) {
bdflush_running--;
diff -u --recursive --new-file v1.2.6/linux/include/asm-alpha/byteorder.h linux/include/asm-alpha/byteorder.h
--- v1.2.6/linux/include/asm-alpha/byteorder.h Fri Apr 28 11:10:56 1995
+++ linux/include/asm-alpha/byteorder.h Sat Apr 29 10:20:21 1995
@@ -6,8 +6,13 @@
#undef htonl
#undef htons
+#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN
+#endif
+
+#ifndef LITTLE_ENDIAN_BITFIELD
#define LITTLE_ENDIAN_BITFIELD
+#endif
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);
diff -u --recursive --new-file v1.2.6/linux/include/asm-i386/byteorder.h linux/include/asm-i386/byteorder.h
--- v1.2.6/linux/include/asm-i386/byteorder.h Fri Apr 28 11:10:56 1995
+++ linux/include/asm-i386/byteorder.h Sat Apr 29 10:19:32 1995
@@ -6,8 +6,13 @@
#undef htonl
#undef htons
+#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
+#endif
+
+#ifndef LITTLE_ENDIAN_BITFIELD
#define LITTLE_ENDIAN_BITFIELD
+#endif
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);