summaryrefslogtreecommitdiffstats
path: root/sys/i386/scsi/aic7xxx.h
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1995-03-31 13:54:41 +0000
committergibbs <gibbs@FreeBSD.org>1995-03-31 13:54:41 +0000
commitead8e4d3beaeb057b1148e64b8a9ee444a7ba52a (patch)
tree4b82acb504b592722c1d596cdcdca87a5479af36 /sys/i386/scsi/aic7xxx.h
parentd543732b8ea8b041cc160d0d4a8b1dd8b8cebf33 (diff)
downloadFreeBSD-src-ead8e4d3beaeb057b1148e64b8a9ee444a7ba52a.zip
FreeBSD-src-ead8e4d3beaeb057b1148e64b8a9ee444a7ba52a.tar.gz
Major overhaul of the aic7xxx driver:
- catch the interrupt type (EDGE/LEVEL) before chip reset instead of guessing the right type. - Add pause variable to the ahc struct to better handle the different interrupt types and pausing the sequencer. - CLRINTSTAT -> CLRSCSIINT: This is a documented bit in the CLRINT register in newer Adaptec documentation, so use their name for it. - Report valid residual byte counts. - Don't mess with the target scratch areas > id 8 on single, narrow, channel devices. The BIOS does a checksum of this area and can flip out if we zero it out. - Initialize the sequencer FLAGS scratch ram variable in the single channel devices to 0. This was the cause of the annoying warning where we would get a cmdcmplt the first time we did any type of transfer negotiation with no valid scb. It also fixes the problem that looked like the INTSTAT register wasn't clearing fast enough. This only showed up on 294x cards, not motherboard aic7870s. - Add the AHC_AIC7870 type and use it as the superset of aic7870 based controllers. - clear the sync offset section of the targ scratch area so that we default to asyncronous transfers. This was only a problem for wide controllers because there was a scenario where the offset wouldn't get updated before a data(out/in) phase would occur. This required some change in the sequencer code since we were depending on this field to hold the rate to negotiate. - allow sync and wide negotiated commands to be tagged (the sequencer now handles this properly).
Diffstat (limited to 'sys/i386/scsi/aic7xxx.h')
-rw-r--r--sys/i386/scsi/aic7xxx.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/i386/scsi/aic7xxx.h b/sys/i386/scsi/aic7xxx.h
index 7a9b00f..5183735 100644
--- a/sys/i386/scsi/aic7xxx.h
+++ b/sys/i386/scsi/aic7xxx.h
@@ -20,7 +20,7 @@
* 4. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $Id: aic7xxx.h,v 1.3 1995/02/03 17:15:12 gibbs Exp $
+ * $Id: aic7xxx.h,v 1.4 1995/02/22 01:43:25 gibbs Exp $
*/
#ifndef _AIC7XXX_H_
@@ -46,11 +46,13 @@ struct ahc_dma_seg {
};
typedef u_char ahc_type;
+#define AHC_NONE 0x00
#define AHC_WIDE 0x02 /* Wide Channel */
#define AHC_TWIN 0x08 /* Twin Channel */
#define AHC_274 0x10 /* EISA Based Controller */
#define AHC_284 0x20 /* VL/ISA Based Controller */
-#define AHC_294 0x40 /* PCI Based Controller */
+#define AHC_AIC7870 0x40 /* PCI Based Controller */
+#define AHC_294 0xc0 /* PCI Based Controller */
/*
* The driver keeps up to MAX_SCB scb structures per card in memory. Only the
@@ -135,7 +137,8 @@ struct ahc_data {
u_short tagenable; /* Targets that can handle tagqueing */
int numscbs;
u_char maxscbs;
- int unpause;
+ u_char unpause;
+ u_char pause;
};
extern struct ahc_data *ahcdata[NAHC];
OpenPOWER on IntegriCloud