Commit f1bf8612 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.2.6

parent 3793c9b9
......@@ -683,6 +683,10 @@ E: ken@halcyon.com
D: CDROM driver "sonycd535" (Sony CDU-535/531)
S:
N: Frederic Potter
E: Frederic.Potter@masi.ibp.fr
D: Some PCI kernel support
N: Stefan Probst
E: snprobst@immd4.informatik.uni-erlangen.de
D: The Linux Support Team Erlangen
......
VERSION = 1
PATCHLEVEL = 2
SUBLEVEL = 5
SUBLEVEL = 6
ARCH = i386
......
......@@ -74,6 +74,10 @@ 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'
bool 'Probe all LUNs on each SCSI device' CONFIG_SCSI_MULTI_LUN n
comment 'SCSI low-level drivers'
bool 'Adaptec AHA152X support' CONFIG_SCSI_AHA152X n
......
......@@ -4,7 +4,7 @@ Wed Apr 12 08:06:16 1995 Theodore Y. Ts'o <tytso@localhost>
rs_init): Hangups are now scheduled via a separate tqueue
structure in the async_struct structure, tqueue_hangup.
This task is pushed on to the tq_schedule queue, so that
it is processed syncronously by the scheduler.
it is processed synchronously by the scheduler.
Sat Feb 18 12:13:51 1995 Theodore Y. Ts'o (tytso@rt-11)
......
......@@ -733,7 +733,7 @@ static void do_softint(void *private_)
/*
* This routine is called from the scheduler tqueue when the interrupt
* routine has signalled that a hangup has occured. The path of
* routine has signalled that a hangup has occurred. The path of
* hangup processing is:
*
* serial interrupt routine -> (scheduler tqueue) ->
......
This diff is collapsed.
......@@ -376,7 +376,6 @@ ne_block_output(struct device *dev, int count,
{
int retries = 0;
int nic_base = NE_BASE;
unsigned long flags;
/* Round the count up for word writes. Do we need to do this?
What effect will an odd byte count have on the 8390?
......@@ -412,19 +411,7 @@ ne_block_output(struct device *dev, int count,
SLOW_DOWN_IO;
#endif /* rw_bugfix */
/*
Now the normal output. I believe that if we don't lock this, a
race condition will munge the remote byte count values, and then
the ne2k will hang the machine by holding I/O CH RDY because it
expects more data. Hopefully fixes the lockups. -- Paul Gortmaker.
Use save_flags/cli/restore_flags rather than cli/sti to avoid risk
of accidentally enabling interrupts which were disabled when we
were entered. Dave Platt <dplatt@3do.com>
*/
save_flags(flags);
cli();
/* Now the normal output. */
outb_p(count & 0xff, nic_base + EN0_RCNTLO);
outb_p(count >> 8, nic_base + EN0_RCNTHI);
outb_p(0x00, nic_base + EN0_RSARLO);
......@@ -436,7 +423,6 @@ ne_block_output(struct device *dev, int count,
} else {
outsb(NE_BASE + NE_DATAPORT, buf, count);
}
restore_flags(flags);
#ifdef CONFIG_NE_SANITY
/* This was for the ALPHA version only, but enough people have
......
......@@ -98,6 +98,7 @@ static char *version = "NET3 PLIP version 2.0 gniibe@mri.co.jp\n";
#include <linux/ioport.h>
#include <asm/bitops.h>
#include <asm/irq.h>
#include <asm/byteorder.h>
/* Use 0 for production, 1 for verification, >2 for debug */
#ifndef NET_DEBUG
......@@ -165,26 +166,14 @@ struct plip_local {
enum plip_nibble_state nibble;
union {
struct {
#if defined(__i386__)
#if defined(LITTLE_ENDIAN)
unsigned char lsb;
unsigned char msb;
#elif defined(__mc68000__)
#elif defined(BIG_ENDIAN)
unsigned char msb;
unsigned char lsb;
#elif defined(__sparc__)
unsigned char msb;
unsigned char lsb;
#elif defined(__MIPSEL__)
unsigned char lsb;
unsigned char msb;
#elif defined(__MIPSEB__)
unsigned char msb;
unsigned char lsb;
#elif defined(__alpha__)
unsigned char lsb;
unsigned char msb;
#else
#error "Adjust this structure to match your CPU"
#error "Please fix the endianness defines in <asm/byteorder.h>"
#endif
} b;
unsigned short h;
......
This diff is collapsed.
......@@ -46,20 +46,27 @@
* array.
*/
#ifdef HOSTS_C
#if defined(HOSTS_C) || defined(MODULE)
#include <linux/scsicam.h>
extern int NCR53c7xx_abort(Scsi_Cmnd *);
extern int NCR53c7xx_detect(Scsi_Host_Template *tpnt);
extern int NCR53c7xx_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
extern int NCR53c7xx_reset(Scsi_Cmnd *);
#define NCR53c7xx {NULL, NULL, "NCR53c{7,8}xx (rel 3)", NCR53c7xx_detect, \
NULL, NULL, \
NULL, NCR53c7xx_queue_command, NCR53c7xx_abort, NCR53c7xx_reset,\
NULL, scsicam_bios_param, \
/* can queue */ 1, /* id */ 7, 127 /* old SG_ALL */, \
/* cmd per lun */ 1 , 0, 0, DISABLE_CLUSTERING}
#ifdef MODULE
extern int NCR53c7xx_release(struct Scsi_Host *);
#else
#define NCR53c7xx_release NULL
#endif
#define NCR53c7xx {NULL, NULL, "NCR53c{7,8}xx (rel 4)", NCR53c7xx_detect, \
NULL, /* info */ NULL, /* command, depricated */ 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 , \
/* present */ 0, /* unchecked isa dma */ 0, DISABLE_CLUSTERING}
#endif /* defined(HOSTS_C) || defined(MODULE) */
#ifndef HOSTS_C
/* Register addresses, ordered numerically */
......@@ -932,6 +939,9 @@ struct NCR53c7x0_table_indirect {
struct NCR53c7x0_cmd {
void *real; /* Real, unaligned address */
void (* free)(void *); /* Command to deallocate; NULL
for structures allocated with
scsi_register, etc. */
Scsi_Cmnd *cmd; /* Associated Scsi_Cmnd
structure, Scsi_Cmnd points
at NCR53c7x0_cmd using
......@@ -949,7 +959,11 @@ struct NCR53c7x0_cmd {
*/
struct NCR53c7x0_cmd *next, *prev; /* Linux maintained lists */
volatile struct NCR53c7x0_cmd *next, *prev;
/* Linux maintained lists. Note that
hostdata->free is a singly linked
list; the rest are doubly linked */
unsigned long *data_transfer_start; /* Start of data transfer routines */
......@@ -986,10 +1000,12 @@ struct NCR53c7x0_break {
/* Indicates that the NCR is executing other code. */
#define STATE_RUNNING 2
/*
* Indicates that the NCR was being aborted. Only used when running
* NCR53c700 compatible scripts.
* Indicates that the NCR was being aborted.
*/
#define STATE_ABORTING 3
/*
* Indicates that the NCR was successfully aborted. */
#define STATE_ABORTED 4
/*
......@@ -1072,6 +1088,7 @@ struct NCR53c7x0_hostdata {
int (* dstat_sir_intr)(struct Scsi_Host *host, struct NCR53c7x0_cmd *cmd);
long dsa_size; /* Size of DSA structure */
/*
* Location of DSA fields for the SCSI SCRIPT corresponding to this
......@@ -1160,11 +1177,13 @@ struct NCR53c7x0_hostdata {
*breakpoint_current; /* Current breakpoint being stepped
through, NULL if we are running
normally. */
#ifdef NCR_DEBUG
int debug_size; /* Size of debug buffer */
volatile int debug_count; /* Current data count */
volatile char *debug_buf; /* Output ring buffer */
volatile char *debug_write; /* Current write pointer */
volatile char *debug_read; /* Current read pointer */
#endif /* def NCR_DEBUG */
/* XXX - primitive debugging junk, remove when working ? */
int debug_print_limit; /* Number of commands to print
......@@ -1203,6 +1222,21 @@ struct NCR53c7x0_hostdata {
nexus, ONLY valid for
NCR53c700/NCR53c700-66
*/
volatile struct NCR53c7x0_cmd *spare; /* pointer to spare,
allocated at probe time,
which we can use for
initialization */
volatile struct NCR53c7x0_cmd *free;
int max_cmd_size; /* Maximum size of NCR53c7x0_cmd
based on number of
scatter/gather segments, etc.
*/
volatile int num_cmds; /* Number of commands
allocated */
volatile unsigned char cmd_allocated[8]; /* Have we allocated commands
for this target yet? If not,
do so ASAP */
volatile unsigned char busy[8][8]; /* number of commands
executing on each target
*/
......@@ -1226,13 +1260,21 @@ struct NCR53c7x0_hostdata {
volatile unsigned char msg_buf[16]; /* buffer for messages
other than the command
complete message */
volatile struct NCR53c7x0_cmd *reconnect_dsa_head;
volatile unsigned char *reconnect_dsa_head;
/* disconnected commands,
maintained by NCR */
/* Data identifying nexus we are trying to match during reselection */
volatile unsigned char reselected_identify; /* IDENTIFY message */
volatile unsigned char reselected_tag; /* second byte of queue tag
message or 0 */
/* These were static variables before we moved them */
long NCR53c7xx_zero;
long NCR53c7xx_sink;
char NCR53c7xx_msg_reject;
char NCR53c7xx_msg_abort;
char NCR53c7xx_msg_nop;
int script_count; /* Size of script in longs */
unsigned long script[0]; /* Relocated SCSI script */
......
......@@ -221,10 +221,10 @@ ABSOLUTE int_test_1 = 0x04000000 ; Test 1 complete
ABSOLUTE int_test_2 = 0x04010000 ; Test 2 complete
ABSOLUTE int_test_3 = 0x04020000 ; Test 3 complete
EXTERNAL NCR53c7xx_msg_abort ; Pointer to abort message
EXTERNAL NCR53c7xx_msg_reject ; Pointer to reject message
EXTERNAL NCR53c7xx_zero ; long with zero in it, use for source
EXTERNAL NCR53c7xx_sink ; long to dump worthless data in
ABSOLUTE NCR53c7xx_msg_abort = 0 ; Pointer to abort message
ABSOLUTE NCR53c7xx_msg_reject = 0 ; Pointer to reject message
ABSOLUTE NCR53c7xx_zero = 0 ; long with zero in it, use for source
ABSOLUTE NCR53c7xx_sink = 0 ; long to dump worthless data in
; Pointer to final bytes of multi-byte messages
ABSOLUTE msg_buf = 0
......@@ -881,13 +881,23 @@ selected:
wait_reselect_failed:
; Reading CTEST2 clears the SIG_P bit in the ISTAT register.
MOVE CTEST2 & 0x40 TO SFBR
JUMP selected, IF NOT 0x40
JUMP schedule, IF 0x40
MOVE SIST0 & 0x20 TO SFBR
JUMP selected, IF 0x20
; FIXME : Something bogus happened, and we shouldn't fail silently.
JUMP schedule
select_failed:
MOVE ISTAT & 0x20 TO SFBR
JUMP reselected, IF NOT 0x20
MOVE ISTAT & 0xdf TO ISTAT
; If SIGP is set, the user just gave us another command, and
; we should restart or return to the scheduler.
; Reading CTEST2 clears the SIG_P bit in the ISTAT register.
MOVE CTEST2 & 0x40 TO SFBR
JUMP select, IF 0x40
; Otherwise, mask the selected and reselected bits off SIST0
MOVE SIST0 & 0x30 TO SFBR
JUMP selected, IF 0x20
JUMP reselected, IF 0x10
; FIXME : Something bogus happened, and we shouldn't fail silently.
JUMP schedule
;
......@@ -980,7 +990,10 @@ no_source_data:
; If DSP points here, and a phase mismatch is encountered, we need to
; do a bus reset.
;
MOVE SCNTL2 & 0x7f TO SCNTL2
MOVE 1, NCR53c7xx_msg_abort, WHEN MSG_OUT
WAIT DISCONNECT
INT int_norm_aborted
;
......
This diff is collapsed.
#undef A_NCR53c7xx_msg_abort
#undef A_NCR53c7xx_msg_reject
#undef A_NCR53c7xx_sink
#undef A_NCR53c7xx_zero
#undef A_addr_scratch
#undef A_addr_sfbr
#undef A_addr_temp
......
Wed Apr 12 15:25:52 1995 Eric Youngdale (eric@andante)
* Linux 1.2.5 released.
* buslogic.c: Update to version 1.15 (From Dave G, I expect).
Fixed interrupt routine to avoid races when handling multiple
complete commands per interrupt. Seems to come up with faster
cards.
* eata_dma.c: Modularize. Update to 2.3.5r.
* scsi.c: If we get a FMK, EOM, or ILI when attempting to scan
the bus, assume that it was just noise on the bus, and ignore
the device.
* scsi.h: Update and add a bunch of missing commands which we
were never using.
* sd.c: Use restore_flags in do_sd_request - this may result in
latency conditions, but it gets rid of races and crashes.
Do not save flags again when searching for a second command to
queue.
* st.c: Use bytes, not STP->buffer->buffer_size when reading
from tape.
Tue Apr 4 09:42:08 1995 Eric Youngdale (eric@andante)
* Linux 1.2.4 released.
* st.c: Fix typo - restoring wrong flags.
Wed Mar 29 06:55:12 1995 Eric Youngdale (eric@andante)
* Linux 1.2.3 released.
* st.c: Perform some waiting operations with interrupts off.
Is this correct???
Wed Mar 22 10:34:26 1995 Eric Youngdale (eric@andante)
* Linux 1.2.2 released.
* aha152x.c: Modularize. Add support for PCMCIA.
* eata.c: Update to version 2.0. Fixed bug preventing media
detection. If scsi_register_host returns NULL, fail gracefully.
* scsi.c: Detect as NEC (for photo-cd purposes) for the 84
and 25 models as "NEC_OLDCDR".
* scsi.h: Add define for NEC_OLDCDR
* sr.c: Add handling for NEC_OLDCDR. Treat as unknown.
* u14-34f.c: Update to version 2.0. Fixed same bug as in
eata.c.
Mon Mar 6 11:11:20 1995 Eric Youngdale (eric@andante)
* Linux 1.2.0 released. Yeah!!!
* Minor spelling/punctuation changes throughout. Nothing
substantive.
Mon Feb 20 21:33:03 1995 Eric Youngdale (eric@andante)
* Linux 1.1.95 released.
* qlogic.c: Update to version 0.41.
* seagate.c: Change some message to be more descriptive about what
we detected.
* sr.c: spelling/whitespace changes.
Mon Feb 20 21:33:03 1995 Eric Youngdale (eric@andante)
* Linux 1.1.94 released.
Mon Feb 20 08:57:17 1995 Eric Youngdale (eric@andante)
* Linux 1.1.93 released.
* hosts.h: Change io_port to long int from short.
* 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,
splx() replaced with save/restore flags. [ Drew ]
* hosts.c, hosts.h, scsi_ioctl.c, sd.c, sd_ioctl.c, sg.c, sr.c,
sr_ioctl.c: Add special junk at end that Emacs will use for
formatting the file.
* qlogic.c: Update to v0.40a. Improve parity handling.
* scsi.c: Add Hitachi DK312C to blacklist. Change "};" to "}" in
many places. Use scsi_init_malloc to get command block - may
need this to be dma compatible for some host adapters.
Restore interrupts after unregistering a host.
* sd.c: Use sti instead of restore flags - causes latency problems.
* seagate.c: Use controller_type to determine string used when
registering irq.
* 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.
Wed Feb 15 10:52:56 1995 Eric Youngdale (eric@andante)
* Linux 1.1.92 released.
* eata.c: Update to 1.17.
* eata_dma.c: Add more support for /proc/scsi, add HBA_interpret flag.
* hosts.c: If we remove last host registered, reuse host number.
When freeing memory from host being deregistered, free extra_bytes
too.
* scsi.c (scan_scsis): memset(SDpnt, 0) and set SCmd.device to SDpnt.
Change memory allocation to work around bugs in __get_dma_pages.
Do not free host if usage count is not zero (for modules).
* sr_ioctl.c: Increase IOCTL_TIMEOUT to 3000.
* st.c: Allow for ST_EXTRA_DEVS in st data structures.
* u14-34f.c: Update to 1.17.
Thu Feb 9 10:11:16 1995 Eric Youngdale (eric@andante)
* Linux 1.1.91 released.
* eata.c: Update to 1.16. Use wish_block instead of host->block.
* hosts.c: Initialize wish_block to 0.
* hosts.h: Add wish_block.
* scsi.c: Use wish_block as indicator that the host should be added
to block list.
* sg.c: Add SG_EXTRA_DEVS to number of slots.
* u14-34f.c: Use wish_block.
Tue Feb 7 11:46:04 1995 Eric Youngdale (eric@andante)
* Linux 1.1.90 released.
* eata.c: Change naming from eata_* to eata2x_*. Now at vers 1.15.
Update interrupt handler to take pt_regs as arg. Allow blocking
even if loaded as module. Initialize target_time_out array.
Do not put sti(); in timing loop.
* hosts.c: Do not reuse host numbers.
Use scsi_make_blocked_list to generate blocking list.
* script_asm.pl: Beats me. Don't know perl. Something to do with
phase index.
* scsi.c (scsi_make_blocked_list): New function - code copied from
hosts.c.
* scsi.c: Update code to disable photo CD for Toshiba cdroms.
Use just manufacturer name, not model number.
* sr.c: Fix setting density for Toshiba drives.
* u14-34f.c: Clear target_time_out array during reset.
Wed Feb 1 09:20:45 1995 Eric Youngdale (eric@andante)
* Linux 1.1.89 released.
* Makefile, u14-34f.c: Modulariz.e
* Makefile, eata.c: Modularize. Now version 1.14
* NCR5380.c: Update interrupt handler with new arglist. Minor
cleanups.
* eata_dma.c: Modularize. Add hooks for /proc/scsi.
New version 2.3.0a.
* hosts.c: Initialize ->dma_channel and ->io_port when registering
a new host.
* qlogic.c: Modularize and add PCMCIA support.
* scsi.c: Add Hitachi to blacklist.
* scsi.c: Change default to no lun scan (too many problem devices).
* scsi.h: Define QUEUE_FULL condition.
* sd.c: Do not check for non-existant partition until after
new media check.
* sg.c: Undo previous change which was wrong.
* sr_ioctl.c: Increase IOCTL_TIMEOUT to 2000.
* st.c: Patches from Kai - improve filemark handling.
Tue Jan 31 17:32:12 1995 Eric Youngdale (eric@andante)
* Linux 1.1.88 released.
* Throughout - spelling/grammar fixups.
* scsi.c: Make sure that all buffers are 16 byte aligned - some
drivers (buslogic) need this.
* scsi.c (scan_scsis): Remove message printed.
* scsi.c (scsi_init): Move message here.
Mon Jan 30 06:40:25 1995 Eric Youngdale (eric@andante)
* Linux 1.1.87 released.
* sr.c: Photo-cd related changes. (Gerd Knorr??).
* st.c: Changes from Kai related to EOM detection.
Mon Jan 23 23:53:10 1995 Eric Youngdale (eric@andante)
* Linux 1.1.86 released.
* 53c7,8xx.h: Change SG size to 127.
* eata_dma: Update to version 0i.
* scsi.c: Test for Toshiba XM-3401TA and exclude from detection
as toshiba drive - photo cd does not work with this drive.
* sr.c: Update photocd code.
Mon Jan 23 23:53:10 1995 Eric Youngdale (eric@andante)
* Linux 1.1.85 released.
* st.c, st_ioctl.c, sg.c, sd_ioctl.c, scsi_ioctl.c, hosts.c:
include linux/mm.h
* qlogic.c, buslogic.c, aha1542.c: Include linux/module.h.
Sun Jan 22 22:08:46 1995 Eric Youngdale (eric@andante)
* Linux 1.1.84 released.
* Makefile: Support for loadable QLOGIC boards.
* aha152x.c: Update to version 1.8 from Juergen.
* eata_dma.c: Update from Michael Neuffer
* in2000.c: Fix biosparam to support large disks.
* qlogic.c: Minor changes (change sti -> restore_flags).
Wed Jan 18 23:33:09 1995 Eric Youngdale (eric@andante)
* Linux 1.1.83 released.
* aha1542.c(aha1542_intr_handle): Use arguments handed down to find
which irq.
* buslogic.c: Likewise.
* eata_dma.c: Use min of 2 cmd_per_lun for OCS_enabled boards.
* scsi.c: Make RECOVERED_ERROR a SUGGEST_IS_OK.
* sd.c: Fail if we are opening a non-existant partition.
* sr.c: Bump SR_TIMEOUT to 15000.
Do not probe for media size at boot time(hard on changers).
Flag device as needing sector size instead.
* sr_ioctl.c: Remove CDROMMULTISESSION_SYS ioctl.
* ultrastor.c: Fix bug in call to ultrastor_interrupt (wrong #args).
Mon Jan 16 07:18:23 1995 Eric Youngdale (eric@andante)
* Linux 1.1.82 released.
......
......@@ -127,6 +127,8 @@ endif
ifdef CONFIG_SCSI_NCR53C7xx
SCSI_OBJS := $(SCSI_OBJS) 53c7,8xx.o
SCSI_SRCS := $(SCSI_SRCS) 53c7,8xx.c
else
SCSI_MODULE_OBJS := $(SCSI_MODULE_OBJS) 53c7,8xx.o
endif
ifdef CONFIG_SCSI_PAS16
......@@ -190,7 +192,7 @@ seagate.o: seagate.c
53c8xx_d.h 53c8xx_u.h : 53c7,8xx.scr script_asm.pl
ln 53c7,8xx.scr fake.c
$(CPP) -DCHIP=810 fake.c | grep -v ^# | perl script_asm.pl
$(CPP) -traditional -DCHIP=810 fake.c | grep -v '^#' | perl script_asm.pl
mv script.h 53c8xx_d.h
mv scriptu.h 53c8xx_u.h
rm fake.c
......
......@@ -469,10 +469,7 @@ static void buslogic_interrupt(int irq, struct pt_regs * regs)
interrupt_flags = inb(INTERRUPT(base));
if (!(interrupt_flags & INTV))
{
buslogic_printk("interrupt received, but INTV not set\n");
return;
}
/*
Reset the Host Adapter Interrupt Register. It appears to be
......@@ -504,6 +501,16 @@ static void buslogic_interrupt(int irq, struct pt_regs * regs)
while (mb[mbi].status != MBX_NOT_IN_USE && found < BUSLOGIC_MAILBOXES)
{
int mbo = (struct ccb *)mb[mbi].ccbptr - ccb;
sctmp = HOSTDATA(shpnt)->sc[mbo];
/*
If sctmp has become NULL, higher level code must have aborted
this operation and called the necessary completion routine.
*/
if (sctmp != NULL && mb[mbi].status != MBX_COMPLETION_NOT_FOUND)
{
int result = 0;
saved_mbo[found++] = mbo;
......@@ -511,9 +518,10 @@ static void buslogic_interrupt(int irq, struct pt_regs * regs)
if (mb[mbi].status != MBX_COMPLETION_OK)
result = makecode(ccb[mbo].hastat, ccb[mbo].tarstat);
HOSTDATA(shpnt)->sc[mbo]->result = result;
sctmp->result = result;
mb[mbi].status = MBX_NOT_IN_USE;
}
HOSTDATA(shpnt)->last_mbi_used = mbi;
......@@ -535,6 +543,7 @@ static void buslogic_interrupt(int irq, struct pt_regs * regs)
{
int mbo = saved_mbo[i];
sctmp = HOSTDATA(shpnt)->sc[mbo];
if (sctmp == NULL) continue;
/*
First, free any storage allocated for a scatter/gather
data segment list.
......@@ -542,14 +551,15 @@ static void buslogic_interrupt(int irq, struct pt_regs * regs)
if (sctmp->host_scribble)
scsi_free(sctmp->host_scribble, BUSLOGIC_SG_MALLOC);
/*
Next, call the SCSI command completion handler.
Next, mark the SCSI Command as completed so it may be reused
for another command by buslogic_queuecommand. This also signals
to buslogic_reset that the command is no longer active.
*/
sctmp->scsi_done(sctmp);
HOSTDATA(shpnt)->sc[mbo] = NULL;
/*
Finally, mark the SCSI Command as completed so it may be reused
for another command by buslogic_queuecommand.
Finally, call the SCSI command completion handler.
*/
HOSTDATA(shpnt)->sc[mbo] = NULL;
sctmp->scsi_done(sctmp);
}
}
......@@ -1344,7 +1354,7 @@ int buslogic_abort(Scsi_Cmnd *scpnt)
#if 1
static const unsigned char buscmd[] = { CMD_START_SCSI };
struct mailbox *mb;
size_t mbi, mbo;
int mbi, mbo, last_mbi;
unsigned long flags;
unsigned int i;
......@@ -1355,28 +1365,30 @@ int buslogic_abort(Scsi_Cmnd *scpnt)
save_flags(flags);
cli();
mb = HOSTDATA(scpnt->host)->mb;
mbi = HOSTDATA(scpnt->host)->last_mbi_used + 1;
last_mbi = HOSTDATA(scpnt->host)->last_mbi_used;
mbi = last_mbi + 1;
if (mbi >= 2 * BUSLOGIC_MAILBOXES)
mbi = BUSLOGIC_MAILBOXES;
do {
if (mb[mbi].status != MBX_NOT_IN_USE)
break;
last_mbi = mbi;
mbi++;
if (mbi >= 2 * BUSLOGIC_MAILBOXES)
mbi = BUSLOGIC_MAILBOXES;
} while (mbi != HOSTDATA(scpnt->host)->last_mbi_used);
restore_flags(flags);
if (mb[mbi].status != MBX_NOT_IN_USE) {
buslogic_printk("lost interrupt discovered on irq %d"
buslogic_printk("lost interrupt discovered on irq %d, "
" - attempting to recover...\n",
scpnt->host->irq);
{
HOSTDATA(scpnt->host)->last_mbi_used = last_mbi;
buslogic_interrupt(scpnt->host->irq, NULL);
restore_flags(flags);
return SCSI_ABORT_SUCCESS;
}
}
restore_flags(flags);
/* OK, no lost interrupt. Try looking to see how many pending commands we
think we have. */
......
......@@ -710,7 +710,7 @@ int get_conf_PIO(struct eata_register *base, struct get_conf *buf)
while (inb((uint) base + HA_RSTATUS) & HA_SDRQ)
inw((uint) base + HA_RDATA);
if (warning == TRUE)
printk("Warning: HBA with IO on 0x%p dectected,\n"
printk("Warning: HBA with IO on 0x%p detected,\n"
" this IO space is already allocated, probably by the IDE driver.\n"
" This might lead to problems.", base);
return (TRUE);
......
......@@ -123,7 +123,7 @@ static int nfs_file_read(struct inode *inode, struct file *file, char *buf,
if ((cache[i].inode_num == inode->i_ino)
&& (cache[i].file_pos <= pos)
&& (cache[i].file_pos + cache[i].len >= pos + count)
&& (abs(jiffies - cache[i].time) <= EXPIRE_CACHE))
&& (abs(jiffies - cache[i].time) < EXPIRE_CACHE))
break;
if (i < READ_CACHE_SIZE) {
++cache[i].in_use;
......
......@@ -237,11 +237,10 @@ asmlinkage int sys_select( unsigned long *buffer )
}
current->timeout = timeout;
i = do_select(n, &in, &out, &ex, &res_in, &res_out, &res_ex);
if (current->timeout > jiffies)
timeout = current->timeout - jiffies;
else
timeout = 0;
timeout = current->timeout - jiffies - 1;
current->timeout = 0;
if ((long) timeout < 0)
timeout = 0;
if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
put_fs_long(timeout/HZ, (unsigned long *) &tvp->tv_sec);
timeout %= HZ;
......
......@@ -6,6 +6,9 @@
#undef htonl
#undef htons
#define LITTLE_ENDIAN
#define LITTLE_ENDIAN_BITFIELD
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);
extern unsigned long int htonl(unsigned long int);
......
......@@ -6,6 +6,9 @@
#undef htonl
#undef htons
#define LITTLE_ENDIAN 1234
#define LITTLE_ENDIAN_BITFIELD
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);
extern unsigned long int htonl(unsigned long int);
......
......@@ -6,6 +6,16 @@
#undef htonl
#undef htons
#ifdef MIPSEL
#define LITTLE_ENDIAN
#define LITTLE_ENDIAN_BITFIELD
#elif MIPSEB
#define BIG_ENDIAN
#define BIG_ENDIAN_BITFIELD
#else
#error "MIPS but neither MIPSEL nor MIPSEB?"
#endif
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);
extern unsigned long int htonl(unsigned long int);
......
......@@ -6,6 +6,9 @@
#undef htonl
#undef htons
#define BIG_ENDIAN
#define BIG_ENDIAN_BITFIELD
extern unsigned long int ntohl(unsigned long int);
extern unsigned short int ntohs(unsigned short int);
extern unsigned long int htonl(unsigned long int);
......
......@@ -48,5 +48,5 @@ extern int pcibios_write_config_word (unsigned char bus,
unsigned char device_fn, unsigned char where, unsigned short value);
extern pcibios_write_config_dword (unsigned char bus,
unsigned char device_fn, unsigned char where, unsigned long value);
extern char *pcibios_strerror (int error);
#endif /* ndef BIOS32_H */
......@@ -16,7 +16,7 @@
*/
#ifndef _LINUX_IP_H
#define _LINUX_IP_H
#include <asm/byteorder.h>
#define IPOPT_END 0
#define IPOPT_NOOP 1
......@@ -34,26 +34,14 @@ struct timestamp {
__u8 len;
__u8 ptr;
union {
#if defined(__i386__)
__u8 flags:4,
overflow:4;
#elif defined(__mc68000__)
__u8 overflow:4,
flags:4;
#elif defined(__MIPSEL__)
__u8 flags:4,
overflow:4;
#elif defined(__MIPSEB__)
__u8 overflow:4,
flags:4;
#elif defined(__alpha__)
#if defined(LITTLE_ENDIAN_BITFIELD)
__u8 flags:4,
overflow:4;
#elif defined(__sparc__)
#elif defined(BIG_ENDIAN_BITFIELD)
__u8 overflow:4,
flags:4;
#else
#error "Adjust this structure to match your CPU"
#error "Please fix <asm/byteorder.h>"
#endif
__u8 full_char;
} x;
......@@ -84,26 +72,14 @@ struct options {
struct iphdr {
#if defined(__i386__)
__u8 ihl:4,
version:4;
#elif defined (__mc68000__)
__u8 version:4,
ihl:4;
#elif defined(__MIPSEL__)
__u8 ihl:4,
version:4;
#elif defined(__MIPSEB__)
__u8 version:4,
ihl:4;
#elif defined(__alpha__)
#if defined(LITTLE_ENDIAN_BITFIELD)
__u8 ihl:4,
version:4;
#elif defined (__sparc__)
#elif defined (BIG_ENDIAN_BITFIELD)
__u8 version:4,
ihl:4;
#else
#error "Adjust this structure to match your CPU"
#error "Please fix <asm/byteorder.h>"
#endif
__u8 tos;
__u16 tot_len;
......
......@@ -26,7 +26,7 @@ struct tcphdr {
__u16 dest;
__u32 seq;
__u32 ack_seq;
#if defined(__i386__)
#if defined(LITTLE_ENDIAN_BITFIELD)
__u16 res1:4,
doff:4,
fin:1,
......@@ -36,47 +36,7 @@ struct tcphdr {
ack:1,
urg:1,
res2:2;
#elif defined(__mc68000__)
__u16 res2:2,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1,
doff:4,
res1:4;
#elif defined(__MIPSEL__)
__u16 res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
res2:2;
#elif defined(__MIPSEB__)
__u16 res2:2,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1,
doff:4,
res1:4;
#elif defined(__alpha__)
__u16 res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
res2:2;
#elif defined(__sparc__)
#elif defined(BIG_ENDIAN_BITFIELD)
__u16 res2:2,
urg:1,
ack:1,
......@@ -87,7 +47,7 @@ struct tcphdr {
doff:4,
res1:4;
#else
#error "Adjust this structure for your cpu alignment rules"
#error "Adjust your <asm/byteorder.h> defines"
#endif
__u16 window;
__u16 check;
......
......@@ -34,9 +34,10 @@
#include <linux/delay.h>
#include <linux/config.h>
#ifdef CONFIG_INET
#ifdef CONFIG_NET
#include <linux/net.h>
#include <linux/netdevice.h>
#ifdef CONFIG_INET
#include <linux/ip.h>
#include <linux/tcp.h>
#include "../net/inet/protocol.h"
......@@ -45,6 +46,7 @@
#include "../drivers/net/slhc.h"
#endif
#endif
#endif
#ifdef CONFIG_PCI
#include <linux/pci.h>
#endif
......@@ -105,6 +107,7 @@ struct symbol_table symbol_table = {
X(pcibios_read_config_byte),
X(pcibios_read_config_word),
X(pcibios_read_config_dword),
X(pcibios_strerror),
X(pcibios_write_config_byte),
X(pcibios_write_config_word),
X(pcibios_write_config_dword),
......@@ -277,6 +280,7 @@ struct symbol_table symbol_table = {
X(inet_add_protocol),
X(inet_del_protocol),
#if defined(CONFIG_PPP) || defined(CONFIG_SLIP)
/* VJ header compression */
X(slhc_init),
X(slhc_free),
X(slhc_remember),
......@@ -321,6 +325,11 @@ struct symbol_table symbol_table = {
#endif
#ifdef CONFIG_SCSI
/* Supports loadable scsi drivers */
/*
* in_scan_scsis is a hack, and should go away once the new
* memory allocation code is in the NCR driver
*/
X(in_scan_scsis),
X(scsi_register_module),
X(scsi_unregister_module),
X(scsi_free),
......@@ -331,6 +340,8 @@ struct symbol_table symbol_table = {
X(scsi_init_malloc),
X(scsi_init_free),
X(print_command),
X(print_msg),
X(print_status),
#endif
/* Added to make file system as module */
X(set_writetime),
......
......@@ -523,7 +523,7 @@ static int swap_out(unsigned int priority)
int loop, counter;
struct task_struct *p;
counter = 2*nr_tasks >> priority;
counter = 6*nr_tasks >> priority;
for(; counter >= 0; counter--) {
/*
* Check that swap_task is suitable for swapping. If not, look for
......@@ -605,7 +605,7 @@ static int try_to_free_page(int priority)
if (swap_out(i))
return 1;
state = 0;
} while(--i);
} while(i--);
}
return 0;
}
......
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