patch-2.4.22 linux-2.4.22/drivers/scsi/aic7xxx/aic7770.c
Next file: linux-2.4.22/drivers/scsi/aic7xxx/aic7770_osm.c
Previous file: linux-2.4.22/drivers/scsi/aic7xxx/README.aic7xxx
Back to the patch index
Back to the overall index
- Lines: 140
- Date:
2003-08-25 04:44:42.000000000 -0700
- Orig file:
linux-2.4.21/drivers/scsi/aic7xxx/aic7770.c
- Orig date:
2002-11-28 15:53:14.000000000 -0800
diff -urN linux-2.4.21/drivers/scsi/aic7xxx/aic7770.c linux-2.4.22/drivers/scsi/aic7xxx/aic7770.c
@@ -37,9 +37,9 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
- * $Id: //depot/aic7xxx/aic7xxx/aic7770.c#21 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7770.c#32 $
*
- * $FreeBSD: src/sys/dev/aic7xxx/aic7770.c,v 1.1 2000/09/16 20:02:27 gibbs Exp $
+ * $FreeBSD$
*/
#ifdef __linux__
@@ -56,14 +56,18 @@
#define ID_AHA_274x 0x04907771
#define ID_AHA_284xB 0x04907756 /* BIOS enabled */
#define ID_AHA_284x 0x04907757 /* BIOS disabled*/
+#define ID_OLV_274x 0x04907782 /* Olivetti OEM */
+#define ID_OLV_274xD 0x04907783 /* Olivetti OEM (Differential) */
+static int aic7770_chip_init(struct ahc_softc *ahc);
+static int aic7770_suspend(struct ahc_softc *ahc);
+static int aic7770_resume(struct ahc_softc *ahc);
static int aha2840_load_seeprom(struct ahc_softc *ahc);
static ahc_device_setup_t ahc_aic7770_VL_setup;
static ahc_device_setup_t ahc_aic7770_EISA_setup;;
static ahc_device_setup_t ahc_aic7770_setup;
-
-struct aic7770_identity aic7770_ident_table [] =
+struct aic7770_identity aic7770_ident_table[] =
{
{
ID_AHA_274x,
@@ -77,6 +81,24 @@
"Adaptec 284X SCSI adapter",
ahc_aic7770_VL_setup
},
+ {
+ ID_AHA_284x,
+ 0xFFFFFFFE,
+ "Adaptec 284X SCSI adapter (BIOS Disabled)",
+ ahc_aic7770_VL_setup
+ },
+ {
+ ID_OLV_274x,
+ 0xFFFFFFFF,
+ "Adaptec (Olivetti OEM) 274X SCSI adapter",
+ ahc_aic7770_EISA_setup
+ },
+ {
+ ID_OLV_274xD,
+ 0xFFFFFFFF,
+ "Adaptec (Olivetti OEM) 274X Differential SCSI adapter",
+ ahc_aic7770_EISA_setup
+ },
/* Generic chip probes for devices we don't know 'exactly' */
{
ID_AIC7770,
@@ -105,7 +127,6 @@
aic7770_config(struct ahc_softc *ahc, struct aic7770_identity *entry, u_int io)
{
u_long l;
- u_long s;
int error;
int have_seeprom;
u_int hostconf;
@@ -131,8 +152,14 @@
ahc->description = entry->name;
error = ahc_softc_init(ahc);
+ if (error != 0)
+ return (error);
- error = ahc_reset(ahc);
+ ahc->bus_chip_init = aic7770_chip_init;
+ ahc->bus_suspend = aic7770_suspend;
+ ahc->bus_resume = aic7770_resume;
+
+ error = ahc_reset(ahc, /*reinit*/FALSE);
if (error != 0)
return (error);
@@ -213,6 +240,9 @@
ahc_outb(ahc, BUSSPD, hostconf & DFTHRSH);
ahc_outb(ahc, BUSTIME, (hostconf << 2) & BOFF);
+ ahc->bus_softc.aic7770_softc.busspd = hostconf & DFTHRSH;
+ ahc->bus_softc.aic7770_softc.bustime = (hostconf << 2) & BOFF;
+
/*
* Generic aic7xxx initialization.
*/
@@ -235,18 +265,33 @@
*/
ahc_outb(ahc, BCTL, ENABLE);
- /*
- * Allow interrupts.
- */
- ahc_lock(ahc, &s);
- ahc_intr_enable(ahc, TRUE);
- ahc_unlock(ahc, &s);
-
ahc_list_unlock(&l);
return (0);
}
+static int
+aic7770_chip_init(struct ahc_softc *ahc)
+{
+ ahc_outb(ahc, BUSSPD, ahc->bus_softc.aic7770_softc.busspd);
+ ahc_outb(ahc, BUSTIME, ahc->bus_softc.aic7770_softc.bustime);
+ ahc_outb(ahc, SBLKCTL, ahc_inb(ahc, SBLKCTL) & ~AUTOFLUSHDIS);
+ ahc_outb(ahc, BCTL, ENABLE);
+ return (ahc_chip_init(ahc));
+}
+
+static int
+aic7770_suspend(struct ahc_softc *ahc)
+{
+ return (ahc_suspend(ahc));
+}
+
+static int
+aic7770_resume(struct ahc_softc *ahc)
+{
+ return (ahc_resume(ahc));
+}
+
/*
* Read the 284x SEEPROM.
*/
@@ -365,5 +410,6 @@
ahc->features = AHC_AIC7770_FE;
ahc->bugs |= AHC_TMODE_WIDEODD_BUG;
ahc->flags |= AHC_PAGESCBS;
+ ahc->instruction_ram_size = 448;
return (0);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)