Commit d43cc577 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.2.7

parent f1bf8612
VERSION = 1
PATCHLEVEL = 2
SUBLEVEL = 6
SUBLEVEL = 7
ARCH = i386
......
......@@ -43,10 +43,10 @@ else
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 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
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
......@@ -69,10 +69,10 @@ else
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 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
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
......@@ -151,10 +151,10 @@ asmlinkage int do_signal(unsigned long oldmask, struct pt_regs * regs)
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) {
......
......@@ -63,10 +63,10 @@ else
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 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
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
......@@ -50,10 +50,10 @@ else
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 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
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
/*
* 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 @@ struct ide_cd_flags {
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 @@ cdrom_read_tocentry (ide_dev_t *dev, int trackno, int msf_flag,
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 @@ cdrom_read_toc (ide_dev_t *dev)
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 @@ cdrom_read_toc (ide_dev_t *dev)
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++)
{
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,8 +1638,20 @@ static void cdrom_setup (ide_dev_t *dev)
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;
cdrom_info[dev->hwif][dev->select.b.drive].sector_buffered = 0;
......
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,
......
......@@ -2090,6 +2090,7 @@ void rs_hangup(struct tty_struct *tty)
if (serial_paranoia_check(info, tty->device, "rs_hangup"))
return;
rs_flush_buffer(tty);
shutdown(info);
info->event = 0;
info->count = 0;
......
......@@ -1006,6 +1006,22 @@ static void release_dev(struct file * filp)
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 @@ static void release_dev(struct file * filp)
(*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;
......
......@@ -317,6 +317,7 @@ el2_close(struct device *dev)
outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
NS8390_init(dev, 0);
dev->start = 0;
return 0;
}
......
......@@ -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 @@ int ei_debug = 1;
#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 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
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 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
if (skb->len <= 0)
return 0;
save_flags(flags);
cli();
/* Block a timer-based transmit from overlapping. */
if (set_bit(0, (void*)&dev->tbusy) != 0) {
printk("%s: Transmitter access conflict.\n", dev->name);
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);
ei_local->irqlock = 1;
restore_flags(flags);
send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
......@@ -200,8 +214,9 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
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);
......@@ -209,19 +224,20 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
}
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 @@ void ei_interrupt(int irq, struct pt_regs * regs)
{
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 @@ void ei_interrupt(int irq, struct pt_regs * regs)
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 @@ void ei_interrupt(int irq, struct pt_regs * regs)
}
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 @@ void ei_interrupt(int irq, struct pt_regs * regs)
/* !!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,18 +313,26 @@ void ei_interrupt(int irq, struct pt_regs * regs)
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. */
}
}
dev->interrupt = 0;
return;
}
......@@ -338,9 +356,9 @@ static void ei_tx_intr(struct device *dev)
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 @@ static void ei_tx_intr(struct device *dev)
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 @@ static void ei_receive(struct device *dev)
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 @@ static void ei_receive(struct device *dev)
/* 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 @@ static struct enet_statistics *get_stats(struct device *dev)
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 @@ void NS8390_init(struct device *dev, int startp)
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 @@ void NS8390_init(struct device *dev, int startp)
/* 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 @@ void NS8390_init(struct device *dev, int startp)
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 @@ static void NS8390_trigger_send(struct device *dev, unsigned int length,
{
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) {
......
......@@ -44,14 +44,13 @@ struct ei_device {
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 */
......@@ -61,6 +60,12 @@ struct ei_device {
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))
/* Some generic ethernet register configurations. */
......
......@@ -11,8 +11,8 @@ include CONFIG
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 $<
......
This diff is collapsed.
......@@ -368,6 +368,7 @@ wd_close_card(struct device *dev)
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 );
......
......@@ -740,7 +740,7 @@ static int normal_init (Scsi_Host_Template *tpnt, int board, int chip,
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 @@ NCR53c8x0_soft_reset (struct Scsi_Host *host) {
/*
* 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 @@ create_cmd (Scsi_Cmnd *cmd) {
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 @@ create_cmd (Scsi_Cmnd *cmd) {
!(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 @@ NCR53c7xx_reset (Scsi_Cmnd *cmd) {
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 @@ shutdown (struct Scsi_Host *host) {
* 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;
......
......@@ -59,7 +59,7 @@ extern int NCR53c7xx_release(struct Scsi_Host *);
#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 , \
......
......@@ -89,7 +89,7 @@ Mon Feb 20 08:57:17 1995 Eric Youngdale (eric@andante)
* 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 @@ Mon Feb 20 08:57:17 1995 Eric Youngdale (eric@andante)
* 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 @@ Wed Feb 1 09:20:45 1995 Eric Youngdale (eric@andante)
* 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 @@ Wed Feb 1 09:20:45 1995 Eric Youngdale (eric@andante)
* 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 @@ Wed Jan 18 23:33:09 1995 Eric Youngdale (eric@andante)
* 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).
......
......@@ -1849,7 +1849,7 @@ asmlinkage int sys_bdflush(int func, long data)
/* 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--;
......
......@@ -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);
......
......@@ -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);
......
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