summaryrefslogtreecommitdiffstats
path: root/sys/i386/scsi
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1995-03-07 08:59:28 +0000
committergibbs <gibbs@FreeBSD.org>1995-03-07 08:59:28 +0000
commit920849e38f40422d94115a4b47b90e3076cf787c (patch)
treec37174d16b5fbd13af85b0aca1b2996e0e8ebbcc /sys/i386/scsi
parentd6d2d98089687d89cfe83c6442473e7b03fb5205 (diff)
downloadFreeBSD-src-920849e38f40422d94115a4b47b90e3076cf787c.zip
FreeBSD-src-920849e38f40422d94115a4b47b90e3076cf787c.tar.gz
Compile cleanly -Wall. Remove some code that was an attempt to make
the 294x probe more stable, but since the guess was wrong, go back to the clearer aproach I used the first time around.
Diffstat (limited to 'sys/i386/scsi')
-rw-r--r--sys/i386/scsi/aic7xxx.c105
1 files changed, 46 insertions, 59 deletions
diff --git a/sys/i386/scsi/aic7xxx.c b/sys/i386/scsi/aic7xxx.c
index 444fb00..631f60a 100644
--- a/sys/i386/scsi/aic7xxx.c
+++ b/sys/i386/scsi/aic7xxx.c
@@ -24,7 +24,7 @@
*
* commenced: Sun Sep 27 18:14:01 PDT 1992
*
- * $Id: aic7xxx.c,v 1.14 1995/02/03 17:15:11 gibbs Exp $
+ * $Id: aic7xxx.c,v 1.15 1995/02/22 01:43:24 gibbs Exp $
*/
/*
* TODO:
@@ -46,7 +46,7 @@
#include <sys/user.h>
#include <scsi/scsi_all.h>
#include <scsi/scsiconf.h>
-#include <machine/cpufunc.h>
+#include <machine/clock.h>
#include <i386/scsi/aic7xxx.h>
#define PAGESIZ 4096
@@ -68,6 +68,7 @@ void ahc_free_scb();
void ahc_abort_scb __P((int unit, struct ahc_data *ahc, struct scb *scb));
void ahcminphys();
struct scb *ahc_scb_phys_kv();
+int ahc_poll __P((int unit, int wait));
u_int32 ahc_adapter_info();
int ahc_unit = 0;
@@ -360,7 +361,7 @@ struct scsi_device ahc_dev =
#define SCSIINT 0x04
#define CMDCMPLT 0x02
#define SEQINT 0x01
-#define INT_PEND SEQINT | SCSIINT | CMDCMPLT /* For polling */
+#define INT_PEND (SEQINT | SCSIINT | CMDCMPLT) /* For polling */
/*
* Hard Error (p. 3-53)
@@ -558,10 +559,10 @@ static struct {
u_char errno;
char *errmesg;
} hard_error[] = {
- ILLHADDR, "Illegal Host Access",
- ILLSADDR, "Illegal Sequencer Address referrenced",
- ILLOPCODE, "Illegal Opcode in sequencer program",
- PARERR, "Sequencer Ram Parity Error",
+ { ILLHADDR, "Illegal Host Access" },
+ { ILLSADDR, "Illegal Sequencer Address referrenced" },
+ { ILLOPCODE, "Illegal Opcode in sequencer program" },
+ { PARERR, "Sequencer Ram Parity Error" }
};
@@ -575,14 +576,14 @@ static struct {
short period; /* in ns */
char *rate;
} ahc_syncrates[] = {
- 0x00, 100, "10.0",
- 0x10, 125, "8.0",
- 0x20, 150, "6.67",
- 0x30, 175, "5.7",
- 0x40, 200, "5.0",
- 0x50, 225, "4.4",
- 0x60, 250, "4.0",
- 0x70, 275, "3.6"
+ { 0x00, 100, "10.0" },
+ { 0x10, 125, "8.0" },
+ { 0x20, 150, "6.67" },
+ { 0x30, 175, "5.7" },
+ { 0x40, 200, "5.0" },
+ { 0x50, 225, "4.4" },
+ { 0x60, 250, "4.0" },
+ { 0x70, 275, "3.6" }
};
static int ahc_num_syncrates =
@@ -686,7 +687,6 @@ ahc_attach(unit)
int unit;
{
struct ahc_data *ahc = ahcdata[unit];
- u_char flags;
/*
* fill in the prototype scsi_link.
@@ -720,7 +720,6 @@ ahc_send_scb( ahc, scb )
struct ahc_data *ahc;
struct scb *scb;
{
- int old_scbptr;
u_long iobase = ahc->baseport;
PAUSE_SEQUENCER(ahc);
@@ -834,7 +833,6 @@ ahcintr(unit)
}
case MSG_SDTR:
{
- int loc;
u_char scsi_id, offset, rate, targ_scratch;
/*
* Help the sequencer to translate the
@@ -881,7 +879,6 @@ ahcintr(unit)
}
case MSG_WDTR:
{
- int loc;
u_char scsi_id, scratch, bus_width;
bus_width = inb(ACCUM + iobase);
@@ -999,8 +996,7 @@ ahcintr(unit)
}
case BAD_STATUS:
{
- int scb_index, saved_scb_index;
- u_short seqaddr;
+ int scb_index;
/* The sequencer will notify us when a command
* has an error that would be of interest to
@@ -1052,7 +1048,6 @@ ahcintr(unit)
struct scsi_sense *sc = &(scb->sense_cmd);
u_char control = scb->control;
u_char tcl = scb->target_channel_lun;
- int i, active;
#ifdef AHC_DEBUG
printf("ahc%d: target %d, lun %d "
"(%s%d) Sending Sense\n", unit
@@ -1233,7 +1228,7 @@ clear:
}
cmdcomplete:
if (intstat & CMDCMPLT) {
- int scb_index, saved_scb_index;
+ int scb_index;
do {
scb_index = inb(QOUTFIFO + iobase);
@@ -1333,7 +1328,6 @@ ahc_init(unit)
printf("ahc%d: reading board settings\n", unit);
outb(HCNTRL + iobase, CHIPRST);
- DELAY(100);
switch( ahc->type ) {
case AHC_274:
printf("ahc%d: 274x ", unit);
@@ -1346,21 +1340,16 @@ ahc_init(unit)
ahc->maxscbs = 0x4;
break;
case AHC_294:
- {
- #define DFTHRESH 0xc0
- u_char threshold;
- printf("ahc%d: 294x ", unit);
- ahc->unpause = UNPAUSE_274X;
- ahc->maxscbs = 0x10;
- threshold = inb(DSPCISTATUS + iobase);
- threshold |= DFTHRESH ;
- outb(DSPCISTATUS + iobase, threshold);
- /* XXX Hard coded SCSI ID for now */
- outb(HA_SCSICONF + iobase, 0x07 | DFTHRESH);
- /* In case we are a wide card */
- outb(HA_SCSICONF + 1 + iobase, 0x07);
- break;
- }
+ printf("ahc%d: 294x ", unit);
+ ahc->unpause = UNPAUSE_274X;
+ ahc->maxscbs = 0x10;
+ #define DFTHRESH 3
+ outb(DSPCISTATUS + iobase, DFTHRESH << 6);
+ /* XXX Hard coded SCSI ID for now */
+ outb(HA_SCSICONF + iobase, 0x07 | (DFTHRESH << 6));
+ /* In case we are a wide card */
+ outb(HA_SCSICONF + 1 + iobase, 0x07);
+ break;
default:
};
@@ -1396,7 +1385,7 @@ ahc_init(unit)
* Number of SCBs that will be used. Rev E aic7770s and
* aic7870s have 16. The rest have 4.
*/
- if(ahc->type & AHC_274 || ahc->type & AHC_284)
+ if(!(ahc->type & AHC_294))
{
/*
* See if we have a Rev E or higher
@@ -1457,19 +1446,6 @@ ahc_init(unit)
}
}
- /*
- * Load the Sequencer program and Enable the adapter.
- * Place the aic7770 in fastmode which makes a big
- * difference when doing many small block transfers.
- */
-
- printf("ahc%d: Downloading Sequencer Program...", unit);
- ahc_loadseq(iobase);
- printf("Done\n");
- outb(SEQCTL + iobase, FASTMODE);
- if (!(ahc->type & AHC_294))
- outb(BCTL + iobase, ENABLE);
-
/* Set the SCSI Id, SXFRCTL1, and SIMODE1, for both channes */
if( ahc->type & AHC_TWIN)
{
@@ -1527,7 +1503,7 @@ ahc_init(unit)
*/
if(!(ahc->type & AHC_WIDE))
ahc->needwdtr_orig = 0;
- ahc->needsdtr = ahc->needsdtr_orig;
+ ahc->needsdtr = ahc->needsdtr_orig;
ahc->needwdtr = ahc->needwdtr_orig;
ahc->sdtrpending = 0;
ahc->wdtrpending = 0;
@@ -1541,6 +1517,20 @@ ahc_init(unit)
outb( HA_ACTIVE0 + iobase, 0 );
outb( HA_ACTIVE1 + iobase, 0 );
+ /*
+ * Load the Sequencer program and Enable the adapter.
+ * Place the aic7770 in fastmode which makes a big
+ * difference when doing many small block transfers.
+ */
+
+ printf("ahc%d: Downloading Sequencer Program...", unit);
+ ahc_loadseq(iobase);
+ printf("Done\n");
+
+ outb(SEQCTL + iobase, FASTMODE);
+ if (!(ahc->type & AHC_294))
+ outb(BCTL + iobase, ENABLE);
+
/* Reset the bus */
outb(SCSISEQ + iobase, SCSIRSTO);
DELAY(500);
@@ -1648,7 +1638,7 @@ ahc_scsi_cmd(xs)
scb->control |= SCB_TE;
scb->target_channel_lun = ((xs->sc_link->target << 4) & 0xF0) |
((u_long)xs->sc_link->fordriver & 0x08) |
- xs->sc_link->lun & 0x07;
+ (xs->sc_link->lun & 0x07);
scb->cmdlen = xs->cmdlen;
scb->cmdpointer = KVTOPHYS(xs->cmd);
if (xs->datalen) { /* should use S/G only if not zero length */
@@ -1910,7 +1900,6 @@ ahc_poll(int unit, int wait)
u_long iobase = ahc->baseport;
u_long stport = INTSTAT + iobase;
- retry:
while (--wait) {
if (inb(stport) & INT_PEND)
break;
@@ -1986,8 +1975,6 @@ ahc_abort_scb( unit, ahc, scb )
* If there's a message in progress,
* reset the bus and have all devices renegotiate.
*/
- int i;
- u_char flags;
if(scb->target_channel_lun & 0x08){
ahc->needsdtr |= (ahc->needsdtr_orig & 0xff00);
ahc->sdtrpending &= 0x00ff;
@@ -2035,7 +2022,7 @@ void
ahc_timeout(void *arg1)
{
struct scb *scb = (struct scb *)arg1;
- int unit, cur_scb_offset;
+ int unit;
struct ahc_data *ahc;
int s = splbio();
OpenPOWER on IntegriCloud