diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2001-02-18 17:41:10 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2001-02-18 17:41:10 +0000 |
commit | 1b22c2cc4b5861e25dba142609ff2e253ee21599 (patch) | |
tree | 5e275518f5ff833406335f29c09f16cd4b20a04a /sys/arch | |
parent | 86ce38fde654099562e79e314e9fdd1c4f486918 (diff) |
two siop drivers conflict. rename to ssh -- short for Symbios Scripts Hardware
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/mvme68k/conf/GENERIC | 8 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/MINIROOT | 8 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/MVME147 | 8 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/MVME162 | 8 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/MVME167 | 8 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/MVME177 | 6 | ||||
-rw-r--r-- | sys/arch/mvme68k/conf/files.mvme68k | 10 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/siopreg.h | 337 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/ssh.c (renamed from sys/arch/mvme68k/dev/siop.c) | 748 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/ssh_script.out (renamed from sys/arch/mvme68k/dev/siop_script.out) | 0 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/ssh_script.ss (renamed from sys/arch/mvme68k/dev/siop_script.ss) | 2 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/sshdma.c (renamed from sys/arch/mvme68k/dev/siopdma.c) | 62 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/sshreg.h | 337 | ||||
-rw-r--r-- | sys/arch/mvme68k/dev/sshvar.h (renamed from sys/arch/mvme68k/dev/siopvar.h) | 46 |
14 files changed, 794 insertions, 794 deletions
diff --git a/sys/arch/mvme68k/conf/GENERIC b/sys/arch/mvme68k/conf/GENERIC index e7ac0d448c8..d69ad5e0322 100644 --- a/sys/arch/mvme68k/conf/GENERIC +++ b/sys/arch/mvme68k/conf/GENERIC @@ -1,4 +1,4 @@ -# $OpenBSD: GENERIC,v 1.14 2000/01/27 03:14:28 smurph Exp $ +# $OpenBSD: GENERIC,v 1.15 2001/02/18 17:41:01 deraadt Exp $ machine mvme68k m68k @@ -45,7 +45,7 @@ nvram0 at mc0 offset 0xc0000 zs0 at mc0 offset 0x45000 ipl 4 zs1 at mc0 offset 0x45801 ipl 4 ie0 at mc0 offset 0x46000 ipl 1 -siop0 at mc0 offset 0x47000 ipl 2 +ssh0 at mc0 offset 0x47000 ipl 2 memc0 at mc0 offset 0x43000 memc1 at mc0 offset 0x43100 ipic0 at mc0 offset 0xbc000 @@ -60,7 +60,7 @@ pcctwo0 at mainbus0 addr 0xfff00000 clock0 at pcctwo0 ipl 5 nvram0 at pcctwo0 offset 0xc0000 ie0 at pcctwo0 offset 0x46000 ipl 1 -siop0 at pcctwo0 offset 0x47000 ipl 2 +ssh0 at pcctwo0 offset 0x47000 ipl 2 cl0 at pcctwo0 offset 0x45000 ipl 3 vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -86,7 +86,7 @@ le* at vmes0 addr 0xffff1600 ipl 1 vec 0x76 len 0x100 vmel0 at vme0 scsibus* at wdsc? -scsibus* at siop? +scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/MINIROOT b/sys/arch/mvme68k/conf/MINIROOT index 05861d1e1f5..b317330091b 100644 --- a/sys/arch/mvme68k/conf/MINIROOT +++ b/sys/arch/mvme68k/conf/MINIROOT @@ -1,4 +1,4 @@ -# $OpenBSD: MINIROOT,v 1.6 2000/01/27 03:14:28 smurph Exp $ +# $OpenBSD: MINIROOT,v 1.7 2001/02/18 17:41:01 deraadt Exp $ machine mvme68k m68k @@ -44,7 +44,7 @@ nvram0 at mc0 offset 0xc0000 zs0 at mc0 offset 0x45000 ipl 4 zs1 at mc0 offset 0x45801 ipl 4 ie0 at mc0 offset 0x46000 ipl 1 -siop0 at mc0 offset 0x47000 ipl 2 +ssh0 at mc0 offset 0x47000 ipl 2 memc0 at mc0 offset 0x43000 memc1 at mc0 offset 0x43100 ipic0 at mc0 offset 0xbc000 @@ -59,7 +59,7 @@ pcctwo0 at mainbus0 addr 0xfff00000 clock0 at pcctwo0 ipl 5 nvram0 at pcctwo0 offset 0xc0000 ie0 at pcctwo0 offset 0x46000 ipl 1 -siop0 at pcctwo0 offset 0x47000 ipl 2 +ssh0 at pcctwo0 offset 0x47000 ipl 2 cl0 at pcctwo0 offset 0x45000 ipl 3 vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -85,7 +85,7 @@ le* at vmes0 addr 0xffff1600 ipl 1 vec 0x76 len 0x100 vmel0 at vme0 scsibus* at wdsc? -scsibus* at siop? +scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/MVME147 b/sys/arch/mvme68k/conf/MVME147 index c552040b942..bf9e3fc1a2e 100644 --- a/sys/arch/mvme68k/conf/MVME147 +++ b/sys/arch/mvme68k/conf/MVME147 @@ -1,4 +1,4 @@ -# $OpenBSD: MVME147,v 1.10 1997/03/31 00:23:52 downsj Exp $ +# $OpenBSD: MVME147,v 1.11 2001/02/18 17:41:01 deraadt Exp $ machine mvme68k m68k @@ -67,7 +67,7 @@ vme0 at pcc0 offset 0x2000 #zs0 at mc0 offset 0x45000 ipl 4 #zs1 at mc0 offset 0x45801 ipl 4 #ie0 at mc0 offset 0x46000 ipl 1 -#siop0 at mc0 offset 0x47000 ipl 2 +#ssh0 at mc0 offset 0x47000 ipl 2 #memc0 at mc0 offset 0x43000 #memc1 at mc0 offset 0x41000 #ipic0 at mc0 offset 0xbc000 @@ -82,7 +82,7 @@ vme0 at pcc0 offset 0x2000 #clock0 at pcctwo0 ipl 5 #nvram0 at pcctwo0 offset 0xc0000 #ie0 at pcctwo0 offset 0x46000 ipl 1 -#siop0 at pcctwo0 offset 0x47000 ipl 2 +#ssh0 at pcctwo0 offset 0x47000 ipl 2 #cl0 at pcctwo0 offset 0x45000 ipl 3 #vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -94,7 +94,7 @@ vmes0 at vme0 vmel0 at vme0 scsibus* at wdsc? -#scsibus* at siop? +#scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/MVME162 b/sys/arch/mvme68k/conf/MVME162 index 48733d60983..8cbc1817258 100644 --- a/sys/arch/mvme68k/conf/MVME162 +++ b/sys/arch/mvme68k/conf/MVME162 @@ -1,4 +1,4 @@ -# $OpenBSD: MVME162,v 1.12 2000/01/27 03:14:28 smurph Exp $ +# $OpenBSD: MVME162,v 1.13 2001/02/18 17:41:02 deraadt Exp $ machine mvme68k m68k @@ -67,7 +67,7 @@ nvram0 at mc0 offset 0xc0000 zs0 at mc0 offset 0x45000 ipl 4 zs1 at mc0 offset 0x45801 ipl 4 ie0 at mc0 offset 0x46000 ipl 1 -siop0 at mc0 offset 0x47000 ipl 2 +ssh0 at mc0 offset 0x47000 ipl 2 memc0 at mc0 offset 0x43000 memc1 at mc0 offset 0x41000 ipic0 at mc0 offset 0xbc000 @@ -82,7 +82,7 @@ fooip* at ipic? manu 0x11 prod 0x22 ipl 1 #clock0 at pcctwo0 ipl 5 #nvram0 at pcctwo0 offset 0xc0000 #ie0 at pcctwo0 offset 0x46000 ipl 1 -#siop0 at pcctwo0 offset 0x47000 ipl 2 +#ssh0 at pcctwo0 offset 0x47000 ipl 2 #cl0 at pcctwo0 offset 0x45000 ipl 3 #vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -112,7 +112,7 @@ vmel0 at vme0 #xd* at xdc? target ? #scsibus* at wdsc? -scsibus* at siop? +scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/MVME167 b/sys/arch/mvme68k/conf/MVME167 index 20a3a0e7903..4e84a3f240c 100644 --- a/sys/arch/mvme68k/conf/MVME167 +++ b/sys/arch/mvme68k/conf/MVME167 @@ -1,4 +1,4 @@ -# $OpenBSD: MVME167,v 1.12 2000/01/27 03:14:28 smurph Exp $ +# $OpenBSD: MVME167,v 1.13 2001/02/18 17:41:02 deraadt Exp $ machine mvme68k m68k @@ -67,7 +67,7 @@ mainbus0 at root #zs0 at mc0 offset 0x45000 ipl 4 #zs1 at mc0 offset 0x45801 ipl 4 #ie0 at mc0 offset 0x46000 ipl 1 -#siop0 at mc0 offset 0x47000 ipl 2 +#ssh0 at mc0 offset 0x47000 ipl 2 #memc0 at mc0 offset 0x43000 #memc1 at mc0 offset 0x41000 #ipic0 at mc0 offset 0xbc000 @@ -81,7 +81,7 @@ pcctwo0 at mainbus0 addr 0xfff00000 clock0 at pcctwo0 ipl 5 nvram0 at pcctwo0 offset 0xc0000 ie0 at pcctwo0 offset 0x46000 ipl 1 -siop0 at pcctwo0 offset 0x47000 ipl 2 +ssh0 at pcctwo0 offset 0x47000 ipl 2 cl0 at pcctwo0 offset 0x45000 ipl 3 vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -111,7 +111,7 @@ vmel0 at vme0 #xd* at xdc? target ? #scsibus* at wdsc? -scsibus* at siop? +scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/MVME177 b/sys/arch/mvme68k/conf/MVME177 index f3deda44445..7f0eaf88933 100644 --- a/sys/arch/mvme68k/conf/MVME177 +++ b/sys/arch/mvme68k/conf/MVME177 @@ -1,4 +1,4 @@ -# $OpenBSD: MVME177,v 1.3 2000/01/27 03:14:29 smurph Exp $ +# $OpenBSD: MVME177,v 1.4 2001/02/18 17:41:02 deraadt Exp $ machine mvme68k m68k @@ -33,7 +33,7 @@ pcctwo0 at mainbus0 addr 0xfff00000 clock0 at pcctwo0 ipl 5 nvram0 at pcctwo0 offset 0xc0000 ie0 at pcctwo0 offset 0x46000 ipl 1 -siop0 at pcctwo0 offset 0x47000 ipl 2 +ssh0 at pcctwo0 offset 0x47000 ipl 2 cl0 at pcctwo0 offset 0x45000 ipl 3 vme0 at pcctwo0 offset 0x40000 #lptwo0 at pcctwo0 ipl 1 @@ -58,7 +58,7 @@ le* at vmes0 addr 0xffff1600 ipl 1 vec 0x76 len 0x100 vmel0 at vme0 -scsibus* at siop? +scsibus* at ssh? sd* at scsibus? target ? lun ? st* at scsibus? target ? lun ? diff --git a/sys/arch/mvme68k/conf/files.mvme68k b/sys/arch/mvme68k/conf/files.mvme68k index 8d47f6a8381..8916514b93b 100644 --- a/sys/arch/mvme68k/conf/files.mvme68k +++ b/sys/arch/mvme68k/conf/files.mvme68k @@ -1,4 +1,4 @@ -# $OpenBSD: files.mvme68k,v 1.15 2000/06/10 20:39:20 deraadt Exp $ +# $OpenBSD: files.mvme68k,v 1.16 2001/02/18 17:41:02 deraadt Exp $ # config file for mvme68k @@ -68,10 +68,10 @@ device fooip attach fooip at ipic file arch/mvme68k/dev/fooip.c fooip -device siop: scsi -attach siop at mc, pcctwo -file arch/mvme68k/dev/siopdma.c siop -file arch/mvme68k/dev/siop.c siop +device ssh: scsi +attach ssh at mc, pcctwo +file arch/mvme68k/dev/sshdma.c ssh +file arch/mvme68k/dev/ssh.c ssh device memc attach memc at mc, pcctwo diff --git a/sys/arch/mvme68k/dev/siopreg.h b/sys/arch/mvme68k/dev/siopreg.h deleted file mode 100644 index 59346b7c85d..00000000000 --- a/sys/arch/mvme68k/dev/siopreg.h +++ /dev/null @@ -1,337 +0,0 @@ -/* $OpenBSD: siopreg.h,v 1.3 1996/04/28 11:03:32 deraadt Exp $ */ - -/* - * Copyright (c) 1995 Theo de Raadt - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Van Jacobson of Lawrence Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)siopreg.h 7.3 (Berkeley) 2/5/91 - */ - -/* - * NCR 53C710 SCSI interface hardware description. - * - * From the Mach scsi driver for the 53C700 - */ - -typedef struct { -/*00*/ volatile unsigned char siop_sien; /* rw: SCSI Interrupt Enable */ -/*01*/ volatile unsigned char siop_sdid; /* rw: SCSI Destination ID */ -/*02*/ volatile unsigned char siop_scntl1; /* rw: SCSI control reg 1 */ -/*03*/ volatile unsigned char siop_scntl0; /* rw: SCSI control reg 0 */ -/*04*/ volatile unsigned char siop_socl; /* rw: SCSI Output Control Latch */ -/*05*/ volatile unsigned char siop_sodl; /* rw: SCSI Output Data Latch */ -/*06*/ volatile unsigned char siop_sxfer; /* rw: SCSI Transfer reg */ -/*07*/ volatile unsigned char siop_scid; /* rw: SCSI Chip ID reg */ -/*08*/ volatile unsigned char siop_sbcl; /* ro: SCSI Bus Control Lines */ -/*09*/ volatile unsigned char siop_sbdl; /* ro: SCSI Bus Data Lines */ -/*0a*/ volatile unsigned char siop_sidl; /* ro: SCSI Input Data Latch */ -/*0b*/ volatile unsigned char siop_sfbr; /* ro: SCSI First Byte Received */ -/*0c*/ volatile unsigned char siop_sstat2; /* ro: SCSI status reg 2 */ -/*0d*/ volatile unsigned char siop_sstat1; /* ro: SCSI status reg 1 */ -/*0e*/ volatile unsigned char siop_sstat0; /* ro: SCSI status reg 0 */ -/*0f*/ volatile unsigned char siop_dstat; /* ro: DMA status */ -/*10*/ volatile unsigned long siop_dsa; /* rw: Data Structure Address */ -/*14*/ volatile unsigned char siop_ctest3; /* ro: Chip test register 3 */ -/*15*/ volatile unsigned char siop_ctest2; /* ro: Chip test register 2 */ -/*16*/ volatile unsigned char siop_ctest1; /* ro: Chip test register 1 */ -/*17*/ volatile unsigned char siop_ctest0; /* ro: Chip test register 0 */ -/*18*/ volatile unsigned char siop_ctest7; /* rw: Chip test register 7 */ -/*19*/ volatile unsigned char siop_ctest6; /* rw: Chip test register 6 */ -/*1a*/ volatile unsigned char siop_ctest5; /* rw: Chip test register 5 */ -/*1b*/ volatile unsigned char siop_ctest4; /* rw: Chip test register 4 */ -/*1c*/ volatile unsigned long siop_temp; /* rw: Temporary Stack reg */ -/*20*/ volatile unsigned char siop_lcrc; /* rw: LCRC value */ -/*21*/ volatile unsigned char siop_ctest8; /* rw: Chip test register 8 */ -/*22*/ volatile unsigned char siop_istat; /* rw: Interrupt Status reg */ -/*23*/ volatile unsigned char siop_dfifo; /* rw: DMA FIFO */ -/*24*/ volatile unsigned char siop_dcmd; /* rw: DMA Command Register */ -/*25*/ volatile unsigned char siop_dbc2; /* rw: DMA Byte Counter reg */ -/*26*/ volatile unsigned char siop_dbc1; -/*27*/ volatile unsigned char siop_dbc0; -/*28*/ volatile unsigned long siop_dnad; /* rw: DMA Next Address */ -/*2c*/ volatile unsigned long siop_dsp; /* rw: DMA SCRIPTS Pointer reg */ -/*30*/ volatile unsigned long siop_dsps; /* rw: DMA SCRIPTS Pointer Save reg */ -/*34*/ volatile unsigned long siop_scratch; /* rw: Scratch Register */ -/*38*/ volatile unsigned char siop_dcntl; /* rw: DMA Control reg */ -/*39*/ volatile unsigned char siop_dwt; /* rw: DMA Watchdog Timer */ -/*3a*/ volatile unsigned char siop_dien; /* rw: DMA Interrupt Enable */ -/*3b*/ volatile unsigned char siop_dmode; /* rw: DMA Mode reg */ -/*3c*/ volatile unsigned long siop_adder; - -} siop_regmap_t; -typedef volatile siop_regmap_t *siop_regmap_p; - -/* - * Register defines - */ - -/* Scsi control register 0 (scntl0) */ - -#define SIOP_SCNTL0_ARB 0xc0 /* Arbitration mode */ -# define SIOP_ARB_SIMPLE 0x00 -# define SIOP_ARB_FULL 0xc0 -#define SIOP_SCNTL0_START 0x20 /* Start Sequence */ -#define SIOP_SCNTL0_WATN 0x10 /* (Select) With ATN */ -#define SIOP_SCNTL0_EPC 0x08 /* Enable Parity Checking */ -#define SIOP_SCNTL0_EPG 0x04 /* Enable Parity Generation */ -#define SIOP_SCNTL0_AAP 0x02 /* Assert ATN on Parity Error */ -#define SIOP_SCNTL0_TRG 0x01 /* Target Mode */ - -/* Scsi control register 1 (scntl1) */ - -#define SIOP_SCNTL1_EXC 0x80 /* Extra Clock Cycle of data setup */ -#define SIOP_SCNTL1_ADB 0x40 /* Assert Data Bus */ -#define SIOP_SCNTL1_ESR 0x20 /* Enable Selection/Reselection */ -#define SIOP_SCNTL1_CON 0x10 /* Connected */ -#define SIOP_SCNTL1_RST 0x08 /* Assert RST */ -#define SIOP_SCNTL1_AESP 0x04 /* Assert even SCSI parity */ -#define SIOP_SCNTL1_RES0 0x02 /* Reserved */ -#define SIOP_SCNTL1_RES1 0x01 /* Reserved */ - -/* Scsi interrupt enable register (sien) */ - -#define SIOP_SIEN_M_A 0x80 /* Phase Mismatch or ATN active */ -#define SIOP_SIEN_FCMP 0x40 /* Function Complete */ -#define SIOP_SIEN_STO 0x20 /* (Re)Selection timeout */ -#define SIOP_SIEN_SEL 0x10 /* (Re)Selected */ -#define SIOP_SIEN_SGE 0x08 /* SCSI Gross Error */ -#define SIOP_SIEN_UDC 0x04 /* Unexpected Disconnect */ -#define SIOP_SIEN_RST 0x02 /* RST asserted */ -#define SIOP_SIEN_PAR 0x01 /* Parity Error */ - -/* Scsi chip ID (scid) */ - -#define SIOP_SCID_VALUE(i) (1<<i) - -/* Scsi transfer register (sxfer) */ - -#define SIOP_SXFER_DHP 0x80 /* Disable Halt on Parity error/ ATN asserted */ -#define SIOP_SXFER_TP 0x70 /* Synch Transfer Period */ - /* see specs for formulas: - Period = TCP * (4 + XFERP ) - TCP = 1 + CLK + 1..2; - */ -#define SIOP_SXFER_MO 0x0f /* Synch Max Offset */ -# define SIOP_MAX_OFFSET 8 - -/* Scsi output data latch register (sodl) */ - -/* Scsi output control latch register (socl) */ - -#define SIOP_REQ 0x80 /* SCSI signal <x> asserted */ -#define SIOP_ACK 0x40 -#define SIOP_BSY 0x20 -#define SIOP_SEL 0x10 -#define SIOP_ATN 0x08 -#define SIOP_MSG 0x04 -#define SIOP_CD 0x02 -#define SIOP_IO 0x01 - -#define SIOP_PHASE(socl) SCSI_PHASE(socl) - -/* Scsi first byte received register (sfbr) */ - -/* Scsi input data latch register (sidl) */ - -/* Scsi bus data lines register (sbdl) */ - -/* Scsi bus control lines register (sbcl). Same as socl */ - -/* DMA status register (dstat) */ - -#define SIOP_DSTAT_DFE 0x80 /* DMA FIFO empty */ -#define SIOP_DSTAT_RES 0x40 -#define SIOP_DSTAT_BF 0x20 /* Bus fault */ -#define SIOP_DSTAT_ABRT 0x10 /* Aborted */ -#define SIOP_DSTAT_SSI 0x08 /* SCRIPT Single Step */ -#define SIOP_DSTAT_SIR 0x04 /* SCRIPT Interrupt Instruction */ -#define SIOP_DSTAT_WTD 0x02 /* Watchdog Timeout Detected */ -#define SIOP_DSTAT_IID 0x01 /* Invalid Instruction Detected */ - -/* Scsi status register 0 (sstat0) */ - -#define SIOP_SSTAT0_M_A 0x80 /* Phase Mismatch or ATN active */ -#define SIOP_SSTAT0_FCMP 0x40 /* Function Complete */ -#define SIOP_SSTAT0_STO 0x20 /* (Re)Selection timeout */ -#define SIOP_SSTAT0_SEL 0x10 /* (Re)Selected */ -#define SIOP_SSTAT0_SGE 0x08 /* SCSI Gross Error */ -#define SIOP_SSTAT0_UDC 0x04 /* Unexpected Disconnect */ -#define SIOP_SSTAT0_RST 0x02 /* RST asserted */ -#define SIOP_SSTAT0_PAR 0x01 /* Parity Error */ - -/* Scsi status register 1 (sstat1) */ - -#define SIOP_SSTAT1_ILF 0x80 /* Input latch (sidl) full */ -#define SIOP_SSTAT1_ORF 0x40 /* output reg (sodr) full */ -#define SIOP_SSTAT1_OLF 0x20 /* output latch (sodl) full */ -#define SIOP_SSTAT1_AIP 0x10 /* Arbitration in progress */ -#define SIOP_SSTAT1_LOA 0x08 /* Lost arbitration */ -#define SIOP_SSTAT1_WOA 0x04 /* Won arbitration */ -#define SIOP_SSTAT1_RST 0x02 /* SCSI RST current value */ -#define SIOP_SSTAT1_SDP 0x01 /* SCSI SDP current value */ - -/* Scsi status register 2 (sstat2) */ - -#define SIOP_SSTAT2_FF 0xf0 /* SCSI FIFO flags (bytecount) */ -# define SIOP_SCSI_FIFO_DEEP 8 -#define SIOP_SSTAT2_SDP 0x08 /* Latched (on REQ) SCSI SDP */ -#define SIOP_SSTAT2_MSG 0x04 /* Latched SCSI phase */ -#define SIOP_SSTAT2_CD 0x02 -#define SIOP_SSTAT2_IO 0x01 - -/* Chip test register 0 (ctest0) */ - -#define SIOP_CTEST0_RES0 0x80 -#define SIOP_CTEST0_BTD 0x40 /* Byte-to-byte Timer Disable */ -#define SIOP_CTEST0_GRP 0x20 /* Generate Receive Parity for Passthrough */ -#define SIOP_CTEST0_EAN 0x10 /* Enable Active Negation */ -#define SIOP_CTEST0_HSC 0x08 /* Halt SCSI clock */ -#define SIOP_CTEST0_ERF 0x04 /* Extend REQ/ACK Filtering */ -#define SIOP_CTEST0_RES1 0x02 -#define SIOP_CTEST0_DDIR 0x01 /* Xfer direction (1-> from SCSI bus) */ - -/* Chip test register 1 (ctest1) */ - -#define SIOP_CTEST1_FMT 0xf0 /* Byte empty in DMA FIFO bottom (high->byte3) */ -#define SIOP_CTEST1_FFL 0x0f /* Byte full in DMA FIFO top, same */ - -/* Chip test register 2 (ctest2) */ - -#define SIOP_CTEST2_RES 0x80 -#define SIOP_CTEST2_SIGP 0x40 /* Signal process */ -#define SIOP_CTEST2_SOFF 0x20 /* Synch Offset compare (1-> zero Init, max Tgt */ -#define SIOP_CTEST2_SFP 0x10 /* SCSI FIFO Parity */ -#define SIOP_CTEST2_DFP 0x08 /* DMA FIFO Parity */ -#define SIOP_CTEST2_TEOP 0x04 /* True EOP (a-la 5380) */ -#define SIOP_CTEST2_DREQ 0x02 /* DREQ status */ -#define SIOP_CTEST2_DACK 0x01 /* DACK status */ - -/* Chip test register 3 (ctest3) read-only, top of SCSI FIFO */ - -/* Chip test register 4 (ctest4) */ - -#define SIOP_CTEST4_MUX 0x80 /* Host bus multiplex mode */ -#define SIOP_CTEST4_ZMOD 0x40 /* High-impedance outputs */ -#define SIOP_CTEST4_SZM 0x20 /* ditto, SCSI "outputs" */ -#define SIOP_CTEST4_SLBE 0x10 /* SCSI loobpack enable */ -#define SIOP_CTEST4_SFWR 0x08 /* SCSI FIFO write enable (from sodl) */ -#define SIOP_CTEST4_FBL 0x07 /* DMA FIFO Byte Lane select (from ctest6) - 4->0, .. 7->3 */ - -/* Chip test register 5 (ctest5) */ - -#define SIOP_CTEST5_ADCK 0x80 /* Clock Address Incrementor */ -#define SIOP_CTEST5_BBCK 0x40 /* Clock Byte counter */ -#define SIOP_CTEST5_ROFF 0x20 /* Reset SCSI offset */ -#define SIOP_CTEST5_MASR 0x10 /* Master set/reset pulses (of bits 3-0) */ -#define SIOP_CTEST5_DDIR 0x08 /* (re)set internal DMA direction */ -#define SIOP_CTEST5_EOP 0x04 /* (re)set internal EOP */ -#define SIOP_CTEST5_DREQ 0x02 /* (re)set internal REQ */ -#define SIOP_CTEST5_DACK 0x01 /* (re)set internal ACK */ - -/* Chip test register 6 (ctest6) DMA FIFO access */ - -/* Chip test register 7 (ctest7) */ - -#define SIOP_CTEST7_CDIS 0x80 /* Cache burst disable */ -#define SIOP_CTEST7_SC1 0x40 /* Snoop control 1 */ -#define SIOP_CTEST7_SC0 0x20 /* Snoop contorl 0 */ -#define SIOP_CTEST7_INHIBIT (0 << 5) -#define SIOP_CTEST7_SNOOP (1 << 5) -#define SIOP_CTEST7_INVAL (2 << 5) -#define SIOP_CTEST7_RESV (3 << 5) -#define SIOP_CTEST7_STD 0x10 /* Selection timeout disable */ -#define SIOP_CTEST7_DFP 0x08 /* DMA FIFO parity bit */ -#define SIOP_CTEST7_EVP 0x04 /* Even parity (to host bus) */ -#define SIOP_CTEST7_TT1 0x02 /* Transfer type bit */ -#define SIOP_CTEST7_DIFF 0x01 /* Differential mode */ - -/* DMA FIFO register (dfifo) */ - -#define SIOP_DFIFO_RES 0x80 -#define SIOP_DFIFO_BO 0x7f /* FIFO byte offset counter */ - -/* Interrupt status register (istat) */ - -#define SIOP_ISTAT_ABRT 0x80 /* Abort operation */ -#define SIOP_ISTAT_RST 0x40 /* Software reset */ -#define SIOP_ISTAT_SIGP 0x20 /* Signal process */ -#define SIOP_ISTAT_RES 0x10 -#define SIOP_ISTAT_CON 0x08 /* Connected */ -#define SIOP_ISTAT_RES1 0x04 -#define SIOP_ISTAT_SIP 0x02 /* SCSI Interrupt pending */ -#define SIOP_ISTAT_DIP 0x01 /* DMA Interrupt pending */ - -/* Chip test register 8 (ctest8) - -#define SIOP_CTEST8_V 0xf0 /* Chip revision level */ -#define SIOP_CTEST8_FLF 0x08 /* Flush DMA FIFO */ -#define SIOP_CTEST8_CLF 0x04 /* Clear DMA and SCSI FIFOs */ -#define SIOP_CTEST8_FM 0x02 /* Fetch pin mode */ -#define SIOP_CTEST8_SM 0x01 /* Snoop pins mode */ - -/* DMA Mode register (dmode) */ - -#define SIOP_DMODE_BL_MASK 0xc0 /* 0->1 1->2 2->4 3->8 */ -#define SIOP_DMODE_FC 0x30 /* Function code */ -#define SIOP_DMODE_PD 0x08 /* Program/data */ -#define SIOP_DMODE_FAM 0x04 /* Fixed address mode */ -#define SIOP_DMODE_U0 0x02 /* User programmable transfer type */ -#define SIOP_DMODE_MAN 0x01 /* Manual start mode */ - -/* DMA interrupt enable register (dien) */ - -#define SIOP_DIEN_RES 0xc0 -#define SIOP_DIEN_BF 0x20 /* On Bus Fault */ -#define SIOP_DIEN_ABRT 0x10 /* On Abort */ -#define SIOP_DIEN_SSI 0x08 /* On SCRIPTS sstep */ -#define SIOP_DIEN_SIR 0x04 /* On SCRIPTS intr instruction */ -#define SIOP_DIEN_WTD 0x02 /* On watchdog timeout */ -#define SIOP_DIEN_IID 0x01 /* On illegal instruction detected */ - -/* DMA control register (dcntl) */ - -#define SIOP_DCNTL_CF_MASK 0xc0 /* Clock frequency dividers: - 0 --> 37.51..50.00 Mhz, div=2 - 1 --> 25.01..37.50 Mhz, div=1.5 - 2 --> 16.67..25.00 Mhz, div=1 - 3 --> 50.01..66.67 Mhz, div=3 - */ -#define SIOP_DCNTL_EA 0x20 /* Enable ack */ -#define SIOP_DCNTL_SSM 0x10 /* Single step mode */ -#define SIOP_DCNTL_LLM 0x08 /* Enable SCSI Low-level mode */ -#define SIOP_DCNTL_STD 0x04 /* Start DMA operation */ -#define SIOP_DCNTL_FA 0x02 /* Fast arbitration */ -#define SIOP_DCNTL_COM 0x01 /* 53C700 compatibility */ diff --git a/sys/arch/mvme68k/dev/siop.c b/sys/arch/mvme68k/dev/ssh.c index 338bff43bca..27330ad4df4 100644 --- a/sys/arch/mvme68k/dev/siop.c +++ b/sys/arch/mvme68k/dev/ssh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: siop.c,v 1.8 2000/01/24 05:20:54 smurph Exp $ */ +/* $OpenBSD: ssh.c,v 1.1 2001/02/18 17:41:08 deraadt Exp $ */ /* * Copyright (c) 1994 Michael L. Hitch @@ -36,7 +36,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)siop.c 7.5 (Berkeley) 5/4/91 + * @(#)ssh.c 7.5 (Berkeley) 5/4/91 */ /* @@ -53,8 +53,8 @@ #include <scsi/scsi_all.h> #include <scsi/scsiconf.h> #include <machine/autoconf.h> -#include <mvme68k/dev/siopreg.h> -#include <mvme68k/dev/siopvar.h> +#include <mvme68k/dev/sshreg.h> +#include <mvme68k/dev/sshvar.h> extern u_int kvtop(); @@ -66,69 +66,69 @@ extern u_int kvtop(); #define SCSI_DATA_WAIT 500000 /* wait per data in/out step */ #define SCSI_INIT_WAIT 500000 /* wait per step (both) during init */ -void siop_select __P((struct siop_softc *)); -void siopabort __P((struct siop_softc *, siop_regmap_p, char *)); -void sioperror __P((struct siop_softc *, siop_regmap_p, u_char)); -void siopstart __P((struct siop_softc *)); -void siopreset __P((struct siop_softc *)); -void siopsetdelay __P((int)); -void siop_scsidone __P((struct siop_acb *, int)); -void siop_sched __P((struct siop_softc *)); -int siop_poll __P((struct siop_softc *, struct siop_acb *)); -int siopintr __P((struct siop_softc *)); +void ssh_select __P((struct ssh_softc *)); +void sshabort __P((struct ssh_softc *, ssh_regmap_p, char *)); +void ssherror __P((struct ssh_softc *, ssh_regmap_p, u_char)); +void sshstart __P((struct ssh_softc *)); +void sshreset __P((struct ssh_softc *)); +void sshsetdelay __P((int)); +void ssh_scsidone __P((struct ssh_acb *, int)); +void ssh_sched __P((struct ssh_softc *)); +int ssh_poll __P((struct ssh_softc *, struct ssh_acb *)); +int sshintr __P((struct ssh_softc *)); /* 53C710 script */ const -#include <mvme68k/dev/siop_script.out> +#include <mvme68k/dev/ssh_script.out> /* default to not inhibit sync negotiation on any drive */ -u_char siop_inhibit_sync[8] = { 0, 0, 0, 0, 0, 0, 0}; /* initialize, so patchable */ -u_char siop_allow_disc[8] = { 3, 3, 3, 3, 3, 3, 3, 3}; -int siop_no_dma = 0; +u_char ssh_inhibit_sync[8] = { 0, 0, 0, 0, 0, 0, 0}; /* initialize, so patchable */ +u_char ssh_allow_disc[8] = { 3, 3, 3, 3, 3, 3, 3, 3}; +int ssh_no_dma = 0; -int siop_reset_delay = 250; /* delay after reset, in milleseconds */ +int ssh_reset_delay = 250; /* delay after reset, in milleseconds */ -int siop_cmd_wait = SCSI_CMD_WAIT; -int siop_data_wait = SCSI_DATA_WAIT; -int siop_init_wait = SCSI_INIT_WAIT; +int ssh_cmd_wait = SCSI_CMD_WAIT; +int ssh_data_wait = SCSI_DATA_WAIT; +int ssh_init_wait = SCSI_INIT_WAIT; #ifdef DEBUG /* * 0x01 - full debug * 0x02 - DMA chaining - * 0x04 - siopintr + * 0x04 - sshintr * 0x08 - phase mismatch * 0x10 - <not used> * 0x20 - panic on unhandled exceptions * 0x100 - disconnect/reselect */ -int siop_debug = 0; -int siopsync_debug = 0; -int siopdma_hits = 0; -int siopdma_misses = 0; -int siopchain_ints = 0; -int siopstarts = 0; -int siopints = 0; -int siopphmm = 0; -#define SIOP_TRACE_SIZE 128 -#define SIOP_TRACE(a,b,c,d) \ - siop_trbuf[siop_trix] = (a); \ - siop_trbuf[siop_trix+1] = (b); \ - siop_trbuf[siop_trix+2] = (c); \ - siop_trbuf[siop_trix+3] = (d); \ - siop_trix = (siop_trix + 4) & (SIOP_TRACE_SIZE - 1); -u_char siop_trbuf[SIOP_TRACE_SIZE]; -int siop_trix; +int ssh_debug = 0; +int sshsync_debug = 0; +int sshdma_hits = 0; +int sshdma_misses = 0; +int sshchain_ints = 0; +int sshstarts = 0; +int sshints = 0; +int sshphmm = 0; +#define SSH_TRACE_SIZE 128 +#define SSH_TRACE(a,b,c,d) \ + ssh_trbuf[ssh_trix] = (a); \ + ssh_trbuf[ssh_trix+1] = (b); \ + ssh_trbuf[ssh_trix+2] = (c); \ + ssh_trbuf[ssh_trix+3] = (d); \ + ssh_trix = (ssh_trix + 4) & (SSH_TRACE_SIZE - 1); +u_char ssh_trbuf[SSH_TRACE_SIZE]; +int ssh_trix; #else -#define SIOP_TRACE(a,b,c,d) +#define SSH_TRACE(a,b,c,d) #endif /* - * default minphys routine for siop based controllers + * default minphys routine for ssh based controllers */ void -siop_minphys(bp) +ssh_minphys(bp) struct buf *bp; { @@ -139,15 +139,15 @@ struct buf *bp; } /* - * used by specific siop controller + * used by specific ssh controller * */ int -siop_scsicmd(xs) +ssh_scsicmd(xs) struct scsi_xfer *xs; { - struct siop_acb *acb; - struct siop_softc *sc; + struct ssh_acb *acb; + struct ssh_softc *sc; struct scsi_link *slp; int flags, s, i; @@ -157,11 +157,11 @@ struct scsi_xfer *xs; /* XXXX ?? */ if (flags & SCSI_DATA_UIO) - panic("siop: scsi data uio requested"); + panic("ssh: scsi data uio requested"); /* XXXX ?? */ if (sc->sc_nexus && flags & SCSI_POLL) - panic("siop_scsicmd: busy"); + panic("ssh_scsicmd: busy"); s = splbio(); acb = sc->free_list.tqh_first; @@ -186,21 +186,21 @@ struct scsi_xfer *xs; TAILQ_INSERT_TAIL(&sc->ready_list, acb, chain); if (sc->sc_nexus == NULL) - siop_sched(sc); + ssh_sched(sc); splx(s); - if (flags & SCSI_POLL || siop_no_dma) - return (siop_poll(sc, acb)); + if (flags & SCSI_POLL || ssh_no_dma) + return (ssh_poll(sc, acb)); return (SUCCESSFULLY_QUEUED); } int -siop_poll(sc, acb) -struct siop_softc *sc; -struct siop_acb *acb; +ssh_poll(sc, acb) +struct ssh_softc *sc; +struct ssh_acb *acb; { - siop_regmap_p rp = sc->sc_siopp; + ssh_regmap_p rp = sc->sc_sshp; struct scsi_xfer *xs = acb->xs; int i; int status; @@ -213,43 +213,43 @@ struct siop_acb *acb; s = splbio(); to = xs->timeout / 1000; if (sc->nexus_list.tqh_first) - printf("%s: siop_poll called with disconnected device\n", + printf("%s: ssh_poll called with disconnected device\n", sc->sc_dev.dv_xname); for (;;) { /* use cmd_wait values? */ i = 50000; spl0(); - while (((istat = rp->siop_istat) & - (SIOP_ISTAT_SIP | SIOP_ISTAT_DIP)) == 0) { + while (((istat = rp->ssh_istat) & + (SSH_ISTAT_SIP | SSH_ISTAT_DIP)) == 0) { if (--i <= 0) { #ifdef DEBUG printf ("waiting: tgt %d cmd %02x sbcl %02x dsp %x (+%x) dcmd %x ds %x timeout %d\n", xs->sc_link->target, acb->cmd.opcode, - rp->siop_sbcl, rp->siop_dsp, - rp->siop_dsp - sc->sc_scriptspa, - *((long *)&rp->siop_dcmd), &acb->ds, acb->xs->timeout); + rp->ssh_sbcl, rp->ssh_dsp, + rp->ssh_dsp - sc->sc_scriptspa, + *((long *)&rp->ssh_dcmd), &acb->ds, acb->xs->timeout); #endif i = 50000; --to; if (to <= 0) { - siopreset(sc); + sshreset(sc); return (COMPLETE); } } delay(10); } - sstat0 = rp->siop_sstat0; - dstat = rp->siop_dstat; - if (siop_checkintr(sc, istat, dstat, sstat0, &status)) { + sstat0 = rp->ssh_sstat0; + dstat = rp->ssh_dstat; + if (ssh_checkintr(sc, istat, dstat, sstat0, &status)) { if (acb != sc->sc_nexus) - printf("%s: siop_poll disconnected device completed\n", + printf("%s: ssh_poll disconnected device completed\n", sc->sc_dev.dv_xname); - else if ((sc->sc_flags & SIOP_INTDEFER) == 0) { - sc->sc_flags &= ~SIOP_INTSOFF; - rp->siop_sien = sc->sc_sien; - rp->siop_dien = sc->sc_dien; + else if ((sc->sc_flags & SSH_INTDEFER) == 0) { + sc->sc_flags &= ~SSH_INTSOFF; + rp->ssh_sien = sc->sc_sien; + rp->ssh_dien = sc->sc_dien; } - siop_scsidone(sc->sc_nexus, status); + ssh_scsidone(sc->sc_nexus, status); } if (xs->flags & ITSDONE) break; @@ -262,16 +262,16 @@ struct siop_acb *acb; * start next command that's ready */ void -siop_sched(sc) -struct siop_softc *sc; +ssh_sched(sc) +struct ssh_softc *sc; { struct scsi_link *slp; - struct siop_acb *acb; + struct ssh_acb *acb; int stat, i; #ifdef DEBUG if (sc->sc_nexus) { - printf("%s: siop_sched- nexus %x/%d ready %x/%d\n", + printf("%s: ssh_sched- nexus %x/%d ready %x/%d\n", sc->sc_dev.dv_xname, sc->sc_nexus, sc->sc_nexus->xs->sc_link->target, sc->ready_list.tqh_first, @@ -283,7 +283,7 @@ struct siop_softc *sc; slp = acb->xs->sc_link; i = slp->target; if (!(sc->sc_tinfo[i].lubusy & (1 << slp->lun))) { - struct siop_tinfo *ti = &sc->sc_tinfo[i]; + struct ssh_tinfo *ti = &sc->sc_tinfo[i]; TAILQ_REMOVE(&sc->ready_list, acb, chain); sc->sc_nexus = acb; @@ -296,35 +296,35 @@ struct siop_softc *sc; if (acb == NULL) { #ifdef DEBUGXXX - printf("%s: siop_sched didn't find ready command\n", + printf("%s: ssh_sched didn't find ready command\n", sc->sc_dev.dv_xname); #endif return; } if (acb->xs->flags & SCSI_RESET) - siopreset(sc); + sshreset(sc); #if 0 acb->cmd.bytes[0] |= slp->lun << 5; /* XXXX */ #endif ++sc->sc_active; - siop_select(sc); + ssh_select(sc); } void -siop_scsidone(acb, stat) -struct siop_acb *acb; +ssh_scsidone(acb, stat) +struct ssh_acb *acb; int stat; { struct scsi_xfer *xs = acb->xs; struct scsi_link *slp = xs->sc_link; - struct siop_softc *sc = slp->adapter_softc; + struct ssh_softc *sc = slp->adapter_softc; int s, dosched = 0; #ifdef DIAGNOSTIC if (acb == NULL || xs == NULL) - panic("siop_scsidone"); + panic("ssh_scsidone"); #endif /* * is this right? @@ -349,9 +349,9 @@ int stat; sc->sc_tinfo[slp->target].senses++; if (sc->sc_nexus == acb) { sc->sc_nexus = NULL; - siop_sched(sc); + ssh_sched(sc); } - SIOP_TRACE('d','s',0,0) + SSH_TRACE('d','s',0,0) return; } } @@ -382,12 +382,12 @@ int stat; if (sc->ready_list.tqh_first) dosched = 1; /* start next command */ --sc->sc_active; - SIOP_TRACE('d','a',stat,0) + SSH_TRACE('d','a',stat,0) } else if (sc->ready_list.tqh_last == &acb->chain.tqe_next) { TAILQ_REMOVE(&sc->ready_list, acb, chain); - SIOP_TRACE('d','r',stat,0) + SSH_TRACE('d','r',stat,0) } else { - register struct siop_acb *acb2; + register struct ssh_acb *acb2; for (acb2 = sc->nexus_list.tqh_first; acb2; acb2 = acb2->chain.tqe_next) if (acb2 == acb) { @@ -409,7 +409,7 @@ int stat; /* Debugger(); */ #endif } - SIOP_TRACE('d','n',stat,0); + SSH_TRACE('d','n',stat,0); } /* Put it on the free list. */ acb->flags = ACB_FREE; @@ -420,20 +420,20 @@ int stat; scsi_done(xs); if (dosched && sc->sc_nexus == NULL) - siop_sched(sc); + ssh_sched(sc); } void -siopabort(sc, rp, where) -register struct siop_softc *sc; -siop_regmap_p rp; +sshabort(sc, rp, where) +register struct ssh_softc *sc; +ssh_regmap_p rp; char *where; { int i; printf ("%s: abort %s: dstat %02x, sstat0 %02x sbcl %02x\n", sc->sc_dev.dv_xname, - where, rp->siop_dstat, rp->siop_sstat0, rp->siop_sbcl); + where, rp->ssh_dstat, rp->ssh_sstat0, rp->ssh_sbcl); if (sc->sc_active > 0) { #ifdef TODO @@ -465,7 +465,7 @@ char *where; for (i = 0; i < 2; ++i) { if (sc->sc_iob[i].sc_xs && &sc->sc_iob[i] != sc->sc_cur) { - printf ("siopabort: cleanup!\n"); + printf ("sshabort: cleanup!\n"); sc->sc_iob[i].sc_xs = NULL; } } @@ -475,8 +475,8 @@ char *where; } void -siopinitialize(sc) -struct siop_softc *sc; +sshinitialize(sc) +struct ssh_softc *sc; { /* * Need to check that scripts is on a long word boundary @@ -489,10 +489,10 @@ struct siop_softc *sc; * malloc sc_acb to ensure that DS is on a long word boundary. */ - MALLOC(sc->sc_acb, struct siop_acb *, - sizeof(struct siop_acb) * SIOP_NACB, M_DEVBUF, M_NOWAIT); + MALLOC(sc->sc_acb, struct ssh_acb *, + sizeof(struct ssh_acb) * SSH_NACB, M_DEVBUF, M_NOWAIT); if (sc->sc_acb == NULL) - panic("siopinitialize: ACB malloc failed!"); + panic("sshinitialize: ACB malloc failed!"); sc->sc_tcp[1] = 1000 / sc->sc_clock_freq; sc->sc_tcp[2] = 1500 / sc->sc_clock_freq; @@ -511,22 +511,22 @@ struct siop_softc *sc; sc->sc_tcp[0] = 3000 / sc->sc_clock_freq; #endif - siopreset (sc); + sshreset (sc); } void -siopreset(sc) -struct siop_softc *sc; +sshreset(sc) +struct ssh_softc *sc; { - siop_regmap_p rp; + ssh_regmap_p rp; u_int i, s; u_char dummy; - struct siop_acb *acb; + struct ssh_acb *acb; - rp = sc->sc_siopp; + rp = sc->sc_sshp; - if (sc->sc_flags & SIOP_ALIVE) - siopabort(sc, rp, "reset"); + if (sc->sc_flags & SSH_ALIVE) + sshabort(sc, rp, "reset"); s = splbio(); @@ -534,54 +534,54 @@ struct siop_softc *sc; * Reset the chip * XXX - is this really needed? */ - rp->siop_istat |= SIOP_ISTAT_ABRT; /* abort current script */ - rp->siop_istat |= SIOP_ISTAT_RST; /* reset chip */ - rp->siop_istat &= ~SIOP_ISTAT_RST; + rp->ssh_istat |= SSH_ISTAT_ABRT; /* abort current script */ + rp->ssh_istat |= SSH_ISTAT_RST; /* reset chip */ + rp->ssh_istat &= ~SSH_ISTAT_RST; /* * Reset SCSI bus (do we really want this?) */ - rp->siop_sien = 0; - rp->siop_scntl1 |= SIOP_SCNTL1_RST; + rp->ssh_sien = 0; + rp->ssh_scntl1 |= SSH_SCNTL1_RST; delay(1); - rp->siop_scntl1 &= ~SIOP_SCNTL1_RST; + rp->ssh_scntl1 &= ~SSH_SCNTL1_RST; /* * Set up various chip parameters */ - rp->siop_scntl0 = SIOP_ARB_FULL | SIOP_SCNTL0_EPC | SIOP_SCNTL0_EPG; - rp->siop_scntl1 = SIOP_SCNTL1_ESR; - rp->siop_dcntl = sc->sc_dcntl; - rp->siop_dmode = 0x80; /* burst length = 4 */ - rp->siop_sien = 0x00; /* don't enable interrupts yet */ - rp->siop_dien = 0x00; /* don't enable interrupts yet */ - rp->siop_scid = 1 << sc->sc_link.adapter_target; - rp->siop_dwt = 0x00; - rp->siop_ctest0 |= SIOP_CTEST0_BTD | SIOP_CTEST0_EAN; - rp->siop_ctest7 = sc->sc_ctest7; + rp->ssh_scntl0 = SSH_ARB_FULL | SSH_SCNTL0_EPC | SSH_SCNTL0_EPG; + rp->ssh_scntl1 = SSH_SCNTL1_ESR; + rp->ssh_dcntl = sc->sc_dcntl; + rp->ssh_dmode = 0x80; /* burst length = 4 */ + rp->ssh_sien = 0x00; /* don't enable interrupts yet */ + rp->ssh_dien = 0x00; /* don't enable interrupts yet */ + rp->ssh_scid = 1 << sc->sc_link.adapter_target; + rp->ssh_dwt = 0x00; + rp->ssh_ctest0 |= SSH_CTEST0_BTD | SSH_CTEST0_EAN; + rp->ssh_ctest7 = sc->sc_ctest7; /* will need to re-negotiate sync xfers */ bzero(&sc->sc_sync, sizeof (sc->sc_sync)); - i = rp->siop_istat; - if (i & SIOP_ISTAT_SIP) - dummy = rp->siop_sstat0; - if (i & SIOP_ISTAT_DIP) - dummy = rp->siop_dstat; + i = rp->ssh_istat; + if (i & SSH_ISTAT_SIP) + dummy = rp->ssh_sstat0; + if (i & SSH_ISTAT_DIP) + dummy = rp->ssh_dstat; splx(s); - delay(siop_reset_delay * 1000); - printf(": version %d target %d\n", rp->siop_ctest8 >> 4, + delay(ssh_reset_delay * 1000); + printf(": version %d target %d\n", rp->ssh_ctest8 >> 4, sc->sc_link.adapter_target); - if ((sc->sc_flags & SIOP_ALIVE) == 0) { + if ((sc->sc_flags & SSH_ALIVE) == 0) { TAILQ_INIT(&sc->ready_list); TAILQ_INIT(&sc->nexus_list); TAILQ_INIT(&sc->free_list); sc->sc_nexus = NULL; acb = sc->sc_acb; - bzero(acb, sizeof(struct siop_acb) * SIOP_NACB); - for (i = 0; i < SIOP_NACB; i++) { + bzero(acb, sizeof(struct ssh_acb) * SSH_NACB); + for (i = 0; i < SSH_NACB; i++) { TAILQ_INSERT_TAIL(&sc->free_list, acb, chain); acb++; } @@ -589,23 +589,23 @@ struct siop_softc *sc; } else { if (sc->sc_nexus != NULL) { sc->sc_nexus->xs->error = XS_DRIVER_STUFFUP; - siop_scsidone(sc->sc_nexus, sc->sc_nexus->stat[0]); + ssh_scsidone(sc->sc_nexus, sc->sc_nexus->stat[0]); } while (acb = sc->nexus_list.tqh_first) { acb->xs->error = XS_DRIVER_STUFFUP; - siop_scsidone(acb, acb->stat[0]); + ssh_scsidone(acb, acb->stat[0]); } } - sc->sc_flags |= SIOP_ALIVE; - sc->sc_flags &= ~(SIOP_INTDEFER|SIOP_INTSOFF); + sc->sc_flags |= SSH_ALIVE; + sc->sc_flags &= ~(SSH_INTDEFER|SSH_INTSOFF); /* enable SCSI and DMA interrupts */ - sc->sc_sien = SIOP_SIEN_M_A | SIOP_SIEN_STO | /*SIOP_SIEN_SEL |*/ SIOP_SIEN_SGE | - SIOP_SIEN_UDC | SIOP_SIEN_RST | SIOP_SIEN_PAR; - sc->sc_dien = SIOP_DIEN_BF | SIOP_DIEN_ABRT | SIOP_DIEN_SIR | - /*SIOP_DIEN_WTD |*/ SIOP_DIEN_IID; - rp->siop_sien = sc->sc_sien; - rp->siop_dien = sc->sc_dien; + sc->sc_sien = SSH_SIEN_M_A | SSH_SIEN_STO | /*SSH_SIEN_SEL |*/ SSH_SIEN_SGE | + SSH_SIEN_UDC | SSH_SIEN_RST | SSH_SIEN_PAR; + sc->sc_dien = SSH_DIEN_BF | SSH_DIEN_ABRT | SSH_DIEN_SIR | + /*SSH_DIEN_WTD |*/ SSH_DIEN_IID; + rp->ssh_sien = sc->sc_sien; + rp->ssh_dien = sc->sc_dien; } /* @@ -613,8 +613,8 @@ struct siop_softc *sc; */ void -siop_start (sc, target, lun, cbuf, clen, buf, len) -struct siop_softc *sc; +ssh_start (sc, target, lun, cbuf, clen, buf, len) +struct ssh_softc *sc; int target; int lun; u_char *cbuf; @@ -622,28 +622,28 @@ int clen; u_char *buf; int len; { - siop_regmap_p rp = sc->sc_siopp; + ssh_regmap_p rp = sc->sc_sshp; int i; int nchain; int count, tcount; char *addr, *dmaend; - struct siop_acb *acb = sc->sc_nexus; + struct ssh_acb *acb = sc->sc_nexus; #ifdef DEBUG - if (siop_debug & 0x100 && rp->siop_sbcl & SIOP_BSY) { - printf ("ACK! siop was busy: rp %x script %x dsa %x active %d\n", + if (ssh_debug & 0x100 && rp->ssh_sbcl & SSH_BSY) { + printf ("ACK! ssh was busy: rp %x script %x dsa %x active %d\n", rp, &scripts, &acb->ds, sc->sc_active); printf ("istat %02x sfbr %02x lcrc %02x sien %02x dien %02x\n", - rp->siop_istat, rp->siop_sfbr, rp->siop_lcrc, - rp->siop_sien, rp->siop_dien); + rp->ssh_istat, rp->ssh_sfbr, rp->ssh_lcrc, + rp->ssh_sien, rp->ssh_dien); #ifdef DDB /*Debugger();*/ #endif } #endif acb->msgout[0] = MSG_IDENTIFY | lun; - if (siop_allow_disc[target] & 2 || - (siop_allow_disc[target] && len == 0)) + if (ssh_allow_disc[target] & 2 || + (ssh_allow_disc[target] && len == 0)) acb->msgout[0] = MSG_IDENTIFY_DR | lun; acb->status = 0; acb->stat[0] = -1; @@ -667,12 +667,12 @@ int len; bzero(&acb->ds.chain, sizeof (acb->ds.chain)); if (sc->sc_sync[target].state == SYNC_START) { - if (siop_inhibit_sync[target]) { + if (ssh_inhibit_sync[target]) { sc->sc_sync[target].state = SYNC_DONE; sc->sc_sync[target].sbcl = 0; sc->sc_sync[target].sxfer = 0; #ifdef DEBUG - if (siopsync_debug) + if (sshsync_debug) printf ("Forcing target %d asynchronous\n", target); #endif } else { @@ -685,11 +685,11 @@ int len; #else acb->msgout[4] = sc->sc_minsync; #endif - acb->msgout[5] = SIOP_MAX_OFFSET; + acb->msgout[5] = SSH_MAX_OFFSET; acb->ds.idlen = 6; sc->sc_sync[target].state = SYNC_SENT; #ifdef DEBUG - if (siopsync_debug) + if (sshsync_debug) printf ("Sending sync request to target %d\n", target); #endif } @@ -717,7 +717,7 @@ int len; acb->ds.chain[nchain].datalen = 0; acb->ds.chain[--nchain].datalen += tcount; #ifdef DEBUG - ++siopdma_hits; + ++sshdma_hits; #endif } else { dmaend = acb->ds.chain[nchain].databuf + @@ -725,13 +725,13 @@ int len; acb->ds.chain[nchain].datalen = tcount; #ifdef DEBUG if (nchain) /* Don't count miss on first one */ - ++siopdma_misses; + ++sshdma_misses; #endif } ++nchain; } #ifdef DEBUG - if (nchain != 1 && len != 0 && siop_debug & 3) { + if (nchain != 1 && len != 0 && ssh_debug & 3) { printf ("DMA chaining set: %d\n", nchain); for (i = 0; i < nchain; ++i) { printf (" [%d] %8x %4x\n", i, acb->ds.chain[i].databuf, @@ -741,14 +741,14 @@ int len; #endif /* push data cache for all data the 53c710 needs to access */ - dma_cachectl (acb, sizeof (struct siop_acb)); + dma_cachectl (acb, sizeof (struct ssh_acb)); dma_cachectl (cbuf, clen); if (buf != NULL && len != 0) dma_cachectl (buf, len); #ifdef DEBUG - if (siop_debug & 0x100 && rp->siop_sbcl & SIOP_BSY) { - printf ("ACK! siop was busy at start: rp %x script %x dsa %x active %d\n", + if (ssh_debug & 0x100 && rp->ssh_sbcl & SSH_BSY) { + printf ("ACK! ssh was busy at start: rp %x script %x dsa %x active %d\n", rp, &scripts, &acb->ds, sc->sc_active); #ifdef DDB /*Debugger();*/ @@ -757,87 +757,87 @@ int len; #endif if (sc->nexus_list.tqh_first == NULL) { - if (rp->siop_istat & SIOP_ISTAT_CON) - printf("%s: siop_select while connected?\n", + if (rp->ssh_istat & SSH_ISTAT_CON) + printf("%s: ssh_select while connected?\n", sc->sc_dev.dv_xname); - rp->siop_temp = 0; - rp->siop_sbcl = sc->sc_sync[target].sbcl; - rp->siop_dsa = kvtop(&acb->ds); - rp->siop_dsp = sc->sc_scriptspa; - SIOP_TRACE('s',1,0,0) + rp->ssh_temp = 0; + rp->ssh_sbcl = sc->sc_sync[target].sbcl; + rp->ssh_dsa = kvtop(&acb->ds); + rp->ssh_dsp = sc->sc_scriptspa; + SSH_TRACE('s',1,0,0) } else { - if ((rp->siop_istat & SIOP_ISTAT_CON) == 0) { - rp->siop_istat = SIOP_ISTAT_SIGP; - SIOP_TRACE('s',2,0,0); + if ((rp->ssh_istat & SSH_ISTAT_CON) == 0) { + rp->ssh_istat = SSH_ISTAT_SIGP; + SSH_TRACE('s',2,0,0); } else { - SIOP_TRACE('s',3,rp->siop_istat,0); + SSH_TRACE('s',3,rp->ssh_istat,0); } } #ifdef DEBUG - ++siopstarts; + ++sshstarts; #endif } /* - * Process a DMA or SCSI interrupt from the 53C710 SIOP + * Process a DMA or SCSI interrupt from the 53C710 SSH */ int -siop_checkintr(sc, istat, dstat, sstat0, status) -struct siop_softc *sc; +ssh_checkintr(sc, istat, dstat, sstat0, status) +struct ssh_softc *sc; u_char istat; u_char dstat; u_char sstat0; int *status; { - siop_regmap_p rp = sc->sc_siopp; - struct siop_acb *acb = sc->sc_nexus; + ssh_regmap_p rp = sc->sc_sshp; + struct ssh_acb *acb = sc->sc_nexus; int target; int dfifo, dbc, sstat1; - dfifo = rp->siop_dfifo; - dbc = rp->siop_dbc0; - sstat1 = rp->siop_sstat1; - rp->siop_ctest8 |= SIOP_CTEST8_CLF; - while ((rp->siop_ctest1 & SIOP_CTEST1_FMT) != SIOP_CTEST1_FMT) + dfifo = rp->ssh_dfifo; + dbc = rp->ssh_dbc0; + sstat1 = rp->ssh_sstat1; + rp->ssh_ctest8 |= SSH_CTEST8_CLF; + while ((rp->ssh_ctest1 & SSH_CTEST1_FMT) != SSH_CTEST1_FMT) ; - rp->siop_ctest8 &= ~SIOP_CTEST8_CLF; + rp->ssh_ctest8 &= ~SSH_CTEST8_CLF; #ifdef DEBUG - ++siopints; + ++sshints; #if 0 - if (siop_debug & 0x100) { + if (ssh_debug & 0x100) { DCIAS(&acb->stat[0]); /* XXX */ - printf ("siopchkintr: istat %x dstat %x sstat0 %x dsps %x sbcl %x sts %x msg %x\n", - istat, dstat, sstat0, rp->siop_dsps, rp->siop_sbcl, acb->stat[0], acb->msg[0]); + printf ("sshchkintr: istat %x dstat %x sstat0 %x dsps %x sbcl %x sts %x msg %x\n", + istat, dstat, sstat0, rp->ssh_dsps, rp->ssh_sbcl, acb->stat[0], acb->msg[0]); printf ("sync msg in: %02x %02x %02x %02x %02x %02x\n", acb->msg[0], acb->msg[1], acb->msg[2], acb->msg[3], acb->msg[4], acb->msg[5]); } #endif - if (rp->siop_dsp && (rp->siop_dsp < sc->sc_scriptspa || - rp->siop_dsp >= sc->sc_scriptspa + sizeof(scripts))) { + if (rp->ssh_dsp && (rp->ssh_dsp < sc->sc_scriptspa || + rp->ssh_dsp >= sc->sc_scriptspa + sizeof(scripts))) { printf ("%s: dsp not within script dsp %x scripts %x:%x", - sc->sc_dev.dv_xname, rp->siop_dsp, sc->sc_scriptspa, + sc->sc_dev.dv_xname, rp->ssh_dsp, sc->sc_scriptspa, sc->sc_scriptspa + sizeof(scripts)); printf(" istat %x dstat %x sstat0 %x\n", istat, dstat, sstat0); Debugger(); } #endif - SIOP_TRACE('i',dstat,istat,(istat&SIOP_ISTAT_DIP)?rp->siop_dsps&0xff:sstat0); - if (dstat & SIOP_DSTAT_SIR && rp->siop_dsps == 0xff00) { + SSH_TRACE('i',dstat,istat,(istat&SSH_ISTAT_DIP)?rp->ssh_dsps&0xff:sstat0); + if (dstat & SSH_DSTAT_SIR && rp->ssh_dsps == 0xff00) { /* Normal completion status, or check condition */ #ifdef DEBUG - if (rp->siop_dsa != kvtop(&acb->ds)) { - printf ("siop: invalid dsa: %x %x\n", rp->siop_dsa, + if (rp->ssh_dsa != kvtop(&acb->ds)) { + printf ("ssh: invalid dsa: %x %x\n", rp->ssh_dsa, kvtop(&acb->ds)); - panic("*** siop DSA invalid ***"); + panic("*** ssh DSA invalid ***"); } #endif target = acb->xs->sc_link->target; if (sc->sc_sync[target].state == SYNC_SENT) { #ifdef DEBUG - if (siopsync_debug) + if (sshsync_debug) printf ("sync msg in: %02x %02x %02x %02x %02x %02x\n", acb->msg[0], acb->msg[1], acb->msg[2], acb->msg[3], acb->msg[4], acb->msg[5]); @@ -879,14 +879,14 @@ int *status; printf ("%s: target %d now synchronous, period=%dns, offset=%d\n", sc->sc_dev.dv_xname, target, acb->msg[4] * 4, acb->msg[5]); - scsi_period_to_siop (sc, target); + scsi_period_to_ssh (sc, target); } } dma_cachectl(&acb->stat[0], 1); *status = acb->stat[0]; #ifdef DEBUG - if (rp->siop_sbcl & SIOP_BSY) { - /*printf ("ACK! siop was busy at end: rp %x script %x dsa %x\n", + if (rp->ssh_sbcl & SSH_BSY) { + /*printf ("ACK! ssh was busy at end: rp %x script %x dsa %x\n", rp, &scripts, &acb->ds);*/ #ifdef DDB /*Debugger();*/ @@ -897,12 +897,12 @@ int *status; sc->sc_dev.dv_xname, acb->msg[0]); #endif if (sc->nexus_list.tqh_first) - rp->siop_dcntl |= SIOP_DCNTL_STD; + rp->ssh_dcntl |= SSH_DCNTL_STD; return 1; } - if (sstat0 & SIOP_SSTAT0_M_A) { /* Phase mismatch */ + if (sstat0 & SSH_SSTAT0_M_A) { /* Phase mismatch */ #ifdef DEBUG - ++siopphmm; + ++sshphmm; if (acb == NULL) printf("%s: Phase mismatch with no active command?\n", sc->sc_dev.dv_xname); @@ -910,19 +910,19 @@ int *status; if (acb->iob_len) { int adjust; adjust = ((dfifo - (dbc & 0x7f)) & 0x7f); - if (sstat1 & SIOP_SSTAT1_ORF) + if (sstat1 & SSH_SSTAT1_ORF) ++adjust; - if (sstat1 & SIOP_SSTAT1_OLF) + if (sstat1 & SSH_SSTAT1_OLF) ++adjust; - acb->iob_curlen = *((long *)&rp->siop_dcmd) & 0xffffff; + acb->iob_curlen = *((long *)&rp->ssh_dcmd) & 0xffffff; acb->iob_curlen += adjust; - acb->iob_curbuf = *((long *)&rp->siop_dnad) - adjust; + acb->iob_curbuf = *((long *)&rp->ssh_dnad) - adjust; #ifdef DEBUG - if (siop_debug & 0x100) { + if (ssh_debug & 0x100) { int i; printf ("Phase mismatch: curbuf %x curlen %x dfifo %x dbc %x sstat1 %x adjust %x sbcl %x starts %d acb %x\n", acb->iob_curbuf, acb->iob_curlen, dfifo, - dbc, sstat1, adjust, rp->siop_sbcl, siopstarts, acb); + dbc, sstat1, adjust, rp->ssh_sbcl, sshstarts, acb); if (acb->ds.chain[1].datalen) { for (i = 0; acb->ds.chain[i].datalen; ++i) printf("chain[%d] addr %x len %x\n", @@ -934,54 +934,54 @@ int *status; dma_cachectl (acb, sizeof(*acb)); } #ifdef DEBUG - SIOP_TRACE('m',rp->siop_sbcl,(rp->siop_dsp>>8),rp->siop_dsp); - if (siop_debug & 9) + SSH_TRACE('m',rp->ssh_sbcl,(rp->ssh_dsp>>8),rp->ssh_dsp); + if (ssh_debug & 9) printf ("Phase mismatch: %x dsp +%x dcmd %x\n", - rp->siop_sbcl, - rp->siop_dsp - sc->sc_scriptspa, - *((long *)&rp->siop_dcmd)); + rp->ssh_sbcl, + rp->ssh_dsp - sc->sc_scriptspa, + *((long *)&rp->ssh_dcmd)); #endif - if ((rp->siop_sbcl & SIOP_REQ) == 0) { + if ((rp->ssh_sbcl & SSH_REQ) == 0) { printf ("Phase mismatch: REQ not asserted! %02x dsp %x\n", - rp->siop_sbcl, rp->siop_dsp); + rp->ssh_sbcl, rp->ssh_dsp); #ifdef DEBUG Debugger(); #endif } - switch (rp->siop_sbcl & 7) { + switch (rp->ssh_sbcl & 7) { case 0: /* data out */ case 1: /* data in */ case 2: /* status */ case 3: /* command */ case 6: /* message in */ case 7: /* message out */ - rp->siop_dsp = sc->sc_scriptspa + Ent_switch; + rp->ssh_dsp = sc->sc_scriptspa + Ent_switch; break; default: goto bad_phase; } return 0; } - if (sstat0 & SIOP_SSTAT0_STO) { /* Select timed out */ + if (sstat0 & SSH_SSTAT0_STO) { /* Select timed out */ #ifdef DEBUG if (acb == NULL) printf("%s: Select timeout with no active command?\n", sc->sc_dev.dv_xname); - if (rp->siop_sbcl & SIOP_BSY) { - printf ("ACK! siop was busy at timeout: rp %x script %x dsa %x\n", + if (rp->ssh_sbcl & SSH_BSY) { + printf ("ACK! ssh was busy at timeout: rp %x script %x dsa %x\n", rp, &scripts, &acb->ds); printf(" sbcl %x sdid %x istat %x dstat %x sstat0 %x\n", - rp->siop_sbcl, rp->siop_sdid, istat, dstat, sstat0); - if (!(rp->siop_sbcl & SIOP_BSY)) { + rp->ssh_sbcl, rp->ssh_sdid, istat, dstat, sstat0); + if (!(rp->ssh_sbcl & SSH_BSY)) { printf ("Yikes, it's not busy now!\n"); #if 0 *status = -1; if (sc->nexus_list.tqh_first) - rp->siop_dsp = sc->sc_scriptspa + Ent_wait_reselect; + rp->ssh_dsp = sc->sc_scriptspa + Ent_wait_reselect; return 1; #endif } -/* rp->siop_dcntl |= SIOP_DCNTL_STD;*/ +/* rp->ssh_dcntl |= SSH_DCNTL_STD;*/ return (0); #ifdef DDB Debugger(); @@ -991,14 +991,14 @@ int *status; *status = -1; acb->xs->error = XS_SELTIMEOUT; if (sc->nexus_list.tqh_first) - rp->siop_dsp = sc->sc_scriptspa + Ent_wait_reselect; + rp->ssh_dsp = sc->sc_scriptspa + Ent_wait_reselect; return 1; } if (acb) target = acb->xs->sc_link->target; else target = 7; - if (sstat0 & SIOP_SSTAT0_UDC) { + if (sstat0 & SSH_SSTAT0_UDC) { #ifdef DEBUG if (acb == NULL) printf("%s: Unexpected disconnect with no active command?\n", @@ -1007,22 +1007,22 @@ int *status; sc->sc_dev.dv_xname, target); #endif #if 0 - siopabort (sc, rp, "siopchkintr"); + sshabort (sc, rp, "sshchkintr"); #endif *status = STS_BUSY; if (sc->nexus_list.tqh_first) - rp->siop_dsp = sc->sc_scriptspa + Ent_wait_reselect; + rp->ssh_dsp = sc->sc_scriptspa + Ent_wait_reselect; return 1; } - if (dstat & SIOP_DSTAT_SIR && (rp->siop_dsps == 0xff01 || - rp->siop_dsps == 0xff02)) { + if (dstat & SSH_DSTAT_SIR && (rp->ssh_dsps == 0xff01 || + rp->ssh_dsps == 0xff02)) { #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf ("%s: ID %02x disconnected TEMP %x (+%x) curbuf %x curlen %x buf %x len %x dfifo %x dbc %x sstat1 %x starts %d acb %x\n", - sc->sc_dev.dv_xname, 1 << target, rp->siop_temp, - rp->siop_temp ? rp->siop_temp - sc->sc_scriptspa : 0, + sc->sc_dev.dv_xname, 1 << target, rp->ssh_temp, + rp->ssh_temp ? rp->ssh_temp - sc->sc_scriptspa : 0, acb->iob_curbuf, acb->iob_curlen, - acb->ds.chain[0].databuf, acb->ds.chain[0].datalen, dfifo, dbc, sstat1, siopstarts, acb); + acb->ds.chain[0].databuf, acb->ds.chain[0].datalen, dfifo, dbc, sstat1, sshstarts, acb); #endif if (acb == NULL) { printf("%s: Disconnect with no active command?\n", @@ -1037,8 +1037,8 @@ int *status; * occurs on a DMA block boundary, we have to figure out * which DMA block it was. */ - if (acb->iob_len && rp->siop_temp) { - int n = rp->siop_temp - sc->sc_scriptspa; + if (acb->iob_len && rp->ssh_temp) { + int n = rp->ssh_temp - sc->sc_scriptspa; if (acb->iob_curlen && acb->iob_curlen != acb->ds.chain[0].datalen) printf("%s: iob_curbuf/len already set? n %x iob %x/%x chain[0] %x/%x\n", @@ -1055,7 +1055,7 @@ int *status; acb->iob_curlen = acb->ds.chain[n].datalen; } #ifdef DEBUG - if (siop_debug & 0x100) { + if (ssh_debug & 0x100) { printf("%s: TEMP offset %d", sc->sc_dev.dv_xname, n); printf(" curbuf %x curlen %x\n", acb->iob_curbuf, acb->iob_curlen); @@ -1073,10 +1073,10 @@ int *status; int i, j; #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf ("%s: adjusting DMA chain\n", sc->sc_dev.dv_xname); - if (rp->siop_dsps == 0xff02) + if (rp->ssh_dsps == 0xff02) printf ("%s: ID %02x disconnected without Save Data Pointers\n", sc->sc_dev.dv_xname, 1 << target); #endif @@ -1091,7 +1091,7 @@ int *status; if (i >= DMAMAXIO || acb->ds.chain[i].datalen == 0) printf("couldn't find saved data pointer\n"); #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf(" chain[0]: %x/%x -> %x/%x\n", acb->ds.chain[0].databuf, acb->ds.chain[0].datalen, @@ -1102,7 +1102,7 @@ int *status; acb->ds.chain[0].datalen = acb->iob_curlen; for (j = 1, ++i; i < DMAMAXIO && acb->ds.chain[i].datalen; ++i, ++j) { #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf(" chain[%d]: %x/%x -> %x/%x\n", j, acb->ds.chain[j].databuf, acb->ds.chain[j].datalen, @@ -1122,34 +1122,34 @@ int *status; * clear nexus * try to start another command for another target/lun */ - acb->status = sc->sc_flags & SIOP_INTSOFF; + acb->status = sc->sc_flags & SSH_INTSOFF; TAILQ_INSERT_HEAD(&sc->nexus_list, acb, chain); sc->sc_nexus = NULL; /* no current device */ /* start script to wait for reselect */ if (sc->sc_nexus == NULL) - rp->siop_dsp = sc->sc_scriptspa + Ent_wait_reselect; + rp->ssh_dsp = sc->sc_scriptspa + Ent_wait_reselect; /* XXXX start another command ? */ if (sc->ready_list.tqh_first) - siop_sched(sc); + ssh_sched(sc); return (0); } - if (dstat & SIOP_DSTAT_SIR && rp->siop_dsps == 0xff03) { - int reselid = rp->siop_scratch & 0x7f; - int reselun = rp->siop_sfbr & 0x07; + if (dstat & SSH_DSTAT_SIR && rp->ssh_dsps == 0xff03) { + int reselid = rp->ssh_scratch & 0x7f; + int reselun = rp->ssh_sfbr & 0x07; - sc->sc_sstat1 = rp->siop_sbcl; /* XXXX save current SBCL */ + sc->sc_sstat1 = rp->ssh_sbcl; /* XXXX save current SBCL */ #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf ("%s: target ID %02x reselected dsps %x\n", sc->sc_dev.dv_xname, reselid, - rp->siop_dsps); - if ((rp->siop_sfbr & 0x80) == 0) + rp->ssh_dsps); + if ((rp->ssh_sfbr & 0x80) == 0) printf("%s: Reselect message in was not identify: %x\n", - sc->sc_dev.dv_xname, rp->siop_sfbr); + sc->sc_dev.dv_xname, rp->ssh_sfbr); #endif if (sc->sc_nexus) { #ifdef DEBUG - if (siop_debug & 0x100) + if (ssh_debug & 0x100) printf ("%s: reselect ID %02x w/active\n", sc->sc_dev.dv_xname, reselid); #endif @@ -1172,9 +1172,9 @@ int *status; sc->sc_flags |= acb->status; acb->status = 0; DCIAS(kvtop(&acb->stat[0])); - rp->siop_dsa = kvtop(&acb->ds); - rp->siop_sxfer = sc->sc_sync[acb->xs->sc_link->target].sxfer; - rp->siop_sbcl = sc->sc_sync[acb->xs->sc_link->target].sbcl; + rp->ssh_dsa = kvtop(&acb->ds); + rp->ssh_sxfer = sc->sc_sync[acb->xs->sc_link->target].sxfer; + rp->ssh_sbcl = sc->sc_sync[acb->xs->sc_link->target].sbcl; break; } if (acb == NULL) { @@ -1184,81 +1184,81 @@ int *status; panic("unable to find reselecting device"); } dma_cachectl (acb, sizeof(*acb)); - rp->siop_temp = 0; - rp->siop_dcntl |= SIOP_DCNTL_STD; + rp->ssh_temp = 0; + rp->ssh_dcntl |= SSH_DCNTL_STD; return (0); } - if (dstat & SIOP_DSTAT_SIR && rp->siop_dsps == 0xff04) { - u_short ctest2 = rp->siop_ctest2; + if (dstat & SSH_DSTAT_SIR && rp->ssh_dsps == 0xff04) { + u_short ctest2 = rp->ssh_ctest2; /* reselect was interrupted (by Sig_P or select) */ #ifdef DEBUG - if (siop_debug & 0x100 || - (ctest2 & SIOP_CTEST2_SIGP) == 0) + if (ssh_debug & 0x100 || + (ctest2 & SSH_CTEST2_SIGP) == 0) printf ("%s: reselect interrupted (Sig_P?) scntl1 %x ctest2 %x - sfbr %x istat %x/%x\n", sc->sc_dev.dv_xname, rp->siop_scntl1, - ctest2, rp->siop_sfbr, istat, rp->siop_istat); + sfbr %x istat %x/%x\n", sc->sc_dev.dv_xname, rp->ssh_scntl1, + ctest2, rp->ssh_sfbr, istat, rp->ssh_istat); #endif /* XXX assumes it was not select */ if (sc->sc_nexus == NULL) { printf("%s: reselect interrupted, sc_nexus == NULL\n", sc->sc_dev.dv_xname); #if 0 - siop_dump(sc); + ssh_dump(sc); #ifdef DDB Debugger(); #endif #endif - rp->siop_dcntl |= SIOP_DCNTL_STD; + rp->ssh_dcntl |= SSH_DCNTL_STD; return (0); } target = sc->sc_nexus->xs->sc_link->target; - rp->siop_temp = 0; - rp->siop_dsa = kvtop(&sc->sc_nexus->ds); - rp->siop_sxfer = sc->sc_sync[target].sxfer; - rp->siop_sbcl = sc->sc_sync[target].sbcl; - rp->siop_dsp = sc->sc_scriptspa; + rp->ssh_temp = 0; + rp->ssh_dsa = kvtop(&sc->sc_nexus->ds); + rp->ssh_sxfer = sc->sc_sync[target].sxfer; + rp->ssh_sbcl = sc->sc_sync[target].sbcl; + rp->ssh_dsp = sc->sc_scriptspa; return (0); } - if (dstat & SIOP_DSTAT_SIR && rp->siop_dsps == 0xff06) { + if (dstat & SSH_DSTAT_SIR && rp->ssh_dsps == 0xff06) { if (acb == NULL) printf("%s: Bad message-in with no active command?\n", sc->sc_dev.dv_xname); /* Unrecognized message in byte */ dma_cachectl (&acb->msg[1],1); printf ("%s: Unrecognized message in data sfbr %x msg %x sbcl %x\n", - sc->sc_dev.dv_xname, rp->siop_sfbr, acb->msg[1], rp->siop_sbcl); + sc->sc_dev.dv_xname, rp->ssh_sfbr, acb->msg[1], rp->ssh_sbcl); /* what should be done here? */ DCIAS(kvtop(&acb->msg[1])); - rp->siop_dsp = sc->sc_scriptspa + Ent_switch; + rp->ssh_dsp = sc->sc_scriptspa + Ent_switch; return (0); } - if (dstat & SIOP_DSTAT_SIR && rp->siop_dsps == 0xff0a) { + if (dstat & SSH_DSTAT_SIR && rp->ssh_dsps == 0xff0a) { /* Status phase wasn't followed by message in phase? */ printf ("%s: Status phase not followed by message in phase? sbcl %x sbdl %x\n", - sc->sc_dev.dv_xname, rp->siop_sbcl, rp->siop_sbdl); - if (rp->siop_sbcl == 0xa7) { + sc->sc_dev.dv_xname, rp->ssh_sbcl, rp->ssh_sbdl); + if (rp->ssh_sbcl == 0xa7) { /* It is now, just continue the script? */ - rp->siop_dcntl |= SIOP_DCNTL_STD; + rp->ssh_dcntl |= SSH_DCNTL_STD; return (0); } } - if (sstat0 == 0 && dstat & SIOP_DSTAT_SIR) { + if (sstat0 == 0 && dstat & SSH_DSTAT_SIR) { dma_cachectl (&acb->stat[0], 1); dma_cachectl (&acb->msg[0], 1); - printf ("SIOP interrupt: %x sts %x msg %x %x sbcl %x\n", - rp->siop_dsps, acb->stat[0], acb->msg[0], acb->msg[1], - rp->siop_sbcl); - siopreset (sc); + printf ("SSH interrupt: %x sts %x msg %x %x sbcl %x\n", + rp->ssh_dsps, acb->stat[0], acb->msg[0], acb->msg[1], + rp->ssh_sbcl); + sshreset (sc); *status = -1; - return 0; /* siopreset has cleaned up */ + return 0; /* sshreset has cleaned up */ } - if (sstat0 & SIOP_SSTAT0_SGE) - printf ("SIOP: SCSI Gross Error\n"); - if (sstat0 & SIOP_SSTAT0_PAR) - printf ("SIOP: Parity Error\n"); - if (dstat & SIOP_DSTAT_IID) - printf ("SIOP: Invalid instruction detected\n"); + if (sstat0 & SSH_SSTAT0_SGE) + printf ("SSH: SCSI Gross Error\n"); + if (sstat0 & SSH_SSTAT0_PAR) + printf ("SSH: Parity Error\n"); + if (dstat & SSH_DSTAT_IID) + printf ("SSH: Invalid instruction detected\n"); bad_phase: /* * temporary panic for unhandled conditions @@ -1266,64 +1266,64 @@ int *status; * then panics. * XXXX need to clean this up to print out the info, reset, and continue */ - printf ("siopchkintr: target %x ds %x\n", target, &acb->ds); + printf ("sshchkintr: target %x ds %x\n", target, &acb->ds); printf ("scripts %x ds %x rp %x dsp %x dcmd %x\n", sc->sc_scriptspa, - kvtop(&acb->ds), kvtop(rp), rp->siop_dsp, - *((long *)&rp->siop_dcmd)); - printf ("siopchkintr: istat %x dstat %x sstat0 %x dsps %x " + kvtop(&acb->ds), kvtop(rp), rp->ssh_dsp, + *((long *)&rp->ssh_dcmd)); + printf ("sshchkintr: istat %x dstat %x sstat0 %x dsps %x " "dsa %x sbcl %x sts %x msg %x %x sfbr %x\n", - istat, dstat, sstat0, rp->siop_dsps, rp->siop_dsa, - rp->siop_sbcl, acb->stat[0], acb->msg[0], acb->msg[1], - rp->siop_sfbr); + istat, dstat, sstat0, rp->ssh_dsps, rp->ssh_dsa, + rp->ssh_sbcl, acb->stat[0], acb->msg[0], acb->msg[1], + rp->ssh_sfbr); #ifdef DEBUG - if (siop_debug & 0x20) - panic("siopchkintr: **** temp ****"); + if (ssh_debug & 0x20) + panic("sshchkintr: **** temp ****"); #ifdef DDB /* Debugger(); */ #endif #endif - siopreset (sc); /* hard reset */ + sshreset (sc); /* hard reset */ *status = -1; - return 0; /* siopreset cleaned up */ + return 0; /* sshreset cleaned up */ } void -siop_select(sc) -struct siop_softc *sc; +ssh_select(sc) +struct ssh_softc *sc; { - siop_regmap_p rp; - struct siop_acb *acb = sc->sc_nexus; + ssh_regmap_p rp; + struct ssh_acb *acb = sc->sc_nexus; #ifdef DEBUG - if (siop_debug & 1) + if (ssh_debug & 1) printf ("%s: select ", sc->sc_dev.dv_xname); #endif - rp = sc->sc_siopp; - if (acb->xs->flags & SCSI_POLL || siop_no_dma) { - sc->sc_flags |= SIOP_INTSOFF; - sc->sc_flags &= ~SIOP_INTDEFER; - if ((rp->siop_istat & 0x08) == 0) { - rp->siop_sien = 0; - rp->siop_dien = 0; + rp = sc->sc_sshp; + if (acb->xs->flags & SCSI_POLL || ssh_no_dma) { + sc->sc_flags |= SSH_INTSOFF; + sc->sc_flags &= ~SSH_INTDEFER; + if ((rp->ssh_istat & 0x08) == 0) { + rp->ssh_sien = 0; + rp->ssh_dien = 0; } #if 0 - } else if ((sc->sc_flags & SIOP_INTDEFER) == 0) { - sc->sc_flags &= ~SIOP_INTSOFF; - if ((rp->siop_istat & 0x08) == 0) { - rp->siop_sien = sc->sc_sien; - rp->siop_dien = sc->sc_dien; + } else if ((sc->sc_flags & SSH_INTDEFER) == 0) { + sc->sc_flags &= ~SSH_INTSOFF; + if ((rp->ssh_istat & 0x08) == 0) { + rp->ssh_sien = sc->sc_sien; + rp->ssh_dien = sc->sc_dien; } #endif } #ifdef DEBUG - if (siop_debug & 1) - printf ("siop_select: target %x cmd %02x ds %x\n", + if (ssh_debug & 1) + printf ("ssh_select: target %x cmd %02x ds %x\n", acb->xs->sc_link->target, acb->cmd.opcode, &sc->sc_nexus->ds); #endif - siop_start(sc, acb->xs->sc_link->target, acb->xs->sc_link->lun, + ssh_start(sc, acb->xs->sc_link->target, acb->xs->sc_link->lun, &acb->cmd, acb->clen, acb->daddr, acb->dleft); return; @@ -1334,30 +1334,30 @@ struct siop_softc *sc; */ int -siopintr (sc) -register struct siop_softc *sc; +sshintr (sc) +register struct ssh_softc *sc; { - siop_regmap_p rp; + ssh_regmap_p rp; register u_char istat, dstat, sstat0; int status; int s = splbio(); istat = sc->sc_istat; - if ((istat & (SIOP_ISTAT_SIP | SIOP_ISTAT_DIP)) == 0) { + if ((istat & (SSH_ISTAT_SIP | SSH_ISTAT_DIP)) == 0) { splx(s); return; } /* Got a valid interrupt on this device */ - rp = sc->sc_siopp; + rp = sc->sc_sshp; dstat = sc->sc_dstat; sstat0 = sc->sc_sstat0; - if (dstat & SIOP_DSTAT_SIR) - sc->sc_intcode = rp->siop_dsps; + if (dstat & SSH_DSTAT_SIR) + sc->sc_intcode = rp->ssh_dsps; sc->sc_istat = 0; #ifdef DEBUG - if (siop_debug & 1) + if (ssh_debug & 1) printf ("%s: intr istat %x dstat %x sstat0 %x\n", sc->sc_dev.dv_xname, istat, dstat, sstat0); if (!sc->sc_active) { @@ -1373,36 +1373,36 @@ register struct siop_softc *sc; #endif #ifdef DEBUG - if (siop_debug & 5) { + if (ssh_debug & 5) { DCIAS(kvtop(&sc->sc_nexus->stat[0])); printf ("%s: intr istat %x dstat %x sstat0 %x dsps %x sbcl %x sts %x msg %x\n", sc->sc_dev.dv_xname, istat, dstat, sstat0, - rp->siop_dsps, rp->siop_sbcl, + rp->ssh_dsps, rp->ssh_sbcl, sc->sc_nexus->stat[0], sc->sc_nexus->msg[0]); } #endif - if (sc->sc_flags & SIOP_INTDEFER) { - sc->sc_flags &= ~(SIOP_INTDEFER | SIOP_INTSOFF); - rp->siop_sien = sc->sc_sien; - rp->siop_dien = sc->sc_dien; + if (sc->sc_flags & SSH_INTDEFER) { + sc->sc_flags &= ~(SSH_INTDEFER | SSH_INTSOFF); + rp->ssh_sien = sc->sc_sien; + rp->ssh_dien = sc->sc_dien; } - if (siop_checkintr (sc, istat, dstat, sstat0, &status)) { + if (ssh_checkintr (sc, istat, dstat, sstat0, &status)) { #if 1 if (status == 0xff) - printf ("siopintr: status == 0xff\n"); + printf ("sshintr: status == 0xff\n"); #endif - if ((sc->sc_flags & (SIOP_INTSOFF | SIOP_INTDEFER)) != SIOP_INTSOFF) { + if ((sc->sc_flags & (SSH_INTSOFF | SSH_INTDEFER)) != SSH_INTSOFF) { #if 0 - if (rp->siop_sbcl & SIOP_BSY) { + if (rp->ssh_sbcl & SSH_BSY) { printf ("%s: SCSI bus busy at completion", sc->sc_dev.dv_xname); printf(" targ %d sbcl %02x sfbr %x lcrc %02x dsp +%x\n", sc->sc_nexus->xs->sc_link->target, - rp->siop_sbcl, rp->siop_sfbr, rp->siop_lcrc, - rp->siop_dsp - sc->sc_scriptspa); + rp->ssh_sbcl, rp->ssh_sfbr, rp->ssh_lcrc, + rp->ssh_dsp - sc->sc_scriptspa); } #endif - siop_scsidone(sc->sc_nexus, sc->sc_nexus->stat[0]); + ssh_scsidone(sc->sc_nexus, sc->sc_nexus->stat[0]); } } splx(s); @@ -1413,8 +1413,8 @@ register struct siop_softc *sc; * not be correct for other 53c710 boards. * */ -scsi_period_to_siop (sc, target) -struct siop_softc *sc; +scsi_period_to_ssh (sc, target) +struct ssh_softc *sc; { int period, offset, i, sxfer, sbcl; @@ -1426,49 +1426,49 @@ struct siop_softc *sc; break; } if (sbcl > 3) { - printf("siop_sync: unable to compute sync params for period %dns\n", + printf("ssh_sync: unable to compute sync params for period %dns\n", period * 4); /* * XXX need to pick a value we can do and renegotiate */ sxfer = sbcl = 0; } else - sxfer = (sxfer << 4) | ((offset <= SIOP_MAX_OFFSET) ? - offset : SIOP_MAX_OFFSET); + sxfer = (sxfer << 4) | ((offset <= SSH_MAX_OFFSET) ? + offset : SSH_MAX_OFFSET); sc->sc_sync[target].sxfer = sxfer; sc->sc_sync[target].sbcl = sbcl; #ifdef DEBUG - printf ("siop sync: siop_sxfr %02x, siop_sbcl %02x\n", sxfer, sbcl); + printf ("ssh sync: ssh_sxfr %02x, ssh_sbcl %02x\n", sxfer, sbcl); #endif } #ifdef DEBUG -#if SIOP_TRACE_SIZE +#if SSH_TRACE_SIZE void -siop_dump_trace() +ssh_dump_trace() { int i; - printf("siop trace: next index %d\n", siop_trix); - i = siop_trix; + printf("ssh trace: next index %d\n", ssh_trix); + i = ssh_trix; do { - printf("%3d: '%c' %02x %02x %02x\n", i, siop_trbuf[i], - siop_trbuf[i + 1], siop_trbuf[i + 2], siop_trbuf[i + 3]); - i = (i + 4) & (SIOP_TRACE_SIZE - 1); - } while (i != siop_trix); + printf("%3d: '%c' %02x %02x %02x\n", i, ssh_trbuf[i], + ssh_trbuf[i + 1], ssh_trbuf[i + 2], ssh_trbuf[i + 3]); + i = (i + 4) & (SSH_TRACE_SIZE - 1); + } while (i != ssh_trix); } #endif void -siop_dump_acb(acb) -struct siop_acb *acb; +ssh_dump_acb(acb) +struct ssh_acb *acb; { u_char *b = (u_char *) &acb->cmd; int i; -#if SIOP_TRACE_SIZE - siop_dump_trace(); +#if SSH_TRACE_SIZE + ssh_dump_trace(); #endif printf("acb@%x ", acb); if (acb->xs == NULL) { @@ -1487,41 +1487,41 @@ struct siop_acb *acb; } void -siop_dump(sc) -struct siop_softc *sc; +ssh_dump(sc) +struct ssh_softc *sc; { - struct siop_acb *acb; - siop_regmap_p rp = sc->sc_siopp; + struct ssh_acb *acb; + ssh_regmap_p rp = sc->sc_sshp; int s; int i; s = splbio(); printf("%s@%x regs %x istat %x\n", - sc->sc_dev.dv_xname, sc, rp, rp->siop_istat); + sc->sc_dev.dv_xname, sc, rp, rp->ssh_istat); if (acb = sc->free_list.tqh_first) { printf("Free list:\n"); while (acb) { - siop_dump_acb(acb); + ssh_dump_acb(acb); acb = acb->chain.tqe_next; } } if (acb = sc->ready_list.tqh_first) { printf("Ready list:\n"); while (acb) { - siop_dump_acb(acb); + ssh_dump_acb(acb); acb = acb->chain.tqe_next; } } if (acb = sc->nexus_list.tqh_first) { printf("Nexus list:\n"); while (acb) { - siop_dump_acb(acb); + ssh_dump_acb(acb); acb = acb->chain.tqe_next; } } if (sc->sc_nexus) { printf("Nexus:\n"); - siop_dump_acb(sc->sc_nexus); + ssh_dump_acb(sc->sc_nexus); } for (i = 0; i < 8; ++i) { if (sc->sc_tinfo[i].cmds > 2) { diff --git a/sys/arch/mvme68k/dev/siop_script.out b/sys/arch/mvme68k/dev/ssh_script.out index c6a91178fc8..c6a91178fc8 100644 --- a/sys/arch/mvme68k/dev/siop_script.out +++ b/sys/arch/mvme68k/dev/ssh_script.out diff --git a/sys/arch/mvme68k/dev/siop_script.ss b/sys/arch/mvme68k/dev/ssh_script.ss index c842eb4c8ff..44593363fba 100644 --- a/sys/arch/mvme68k/dev/siop_script.ss +++ b/sys/arch/mvme68k/dev/ssh_script.ss @@ -1,4 +1,4 @@ -; $OpenBSD: siop_script.ss,v 1.3 1996/04/28 11:03:31 deraadt Exp $ +; $OpenBSD: ssh_script.ss,v 1.1 2001/02/18 17:41:09 deraadt Exp $ ; ; Copyright (c) 1995 Michael L. Hitch diff --git a/sys/arch/mvme68k/dev/siopdma.c b/sys/arch/mvme68k/dev/sshdma.c index ddbd0dd6c18..76155df4de8 100644 --- a/sys/arch/mvme68k/dev/siopdma.c +++ b/sys/arch/mvme68k/dev/sshdma.c @@ -1,4 +1,4 @@ -/* $OpenBSD: siopdma.c,v 1.7 2000/01/06 03:21:42 smurph Exp $ */ +/* $OpenBSD: sshdma.c,v 1.1 2001/02/18 17:41:09 deraadt Exp $ */ /* * Copyright (c) 1995 Theo de Raadt @@ -44,8 +44,8 @@ #include <scsi/scsi_all.h> #include <scsi/scsiconf.h> #include <machine/autoconf.h> -#include <mvme68k/dev/siopreg.h> -#include <mvme68k/dev/siopvar.h> +#include <mvme68k/dev/sshreg.h> +#include <mvme68k/dev/sshvar.h> #include "mc.h" #include "pcctwo.h" @@ -60,12 +60,12 @@ int afscmatch __P((struct device *, void *, void *)); void afscattach __P((struct device *, struct device *, void *)); -int siopintr __P((struct siop_softc *)); -int afsc_dmaintr __P((struct siop_softc *)); +int sshintr __P((struct ssh_softc *)); +int afsc_dmaintr __P((struct ssh_softc *)); struct scsi_adapter afsc_scsiswitch = { - siop_scsicmd, - siop_minphys, + ssh_scsicmd, + ssh_minphys, 0, /* no lun support */ 0, /* no lun support */ }; @@ -77,12 +77,12 @@ struct scsi_device afsc_scsidev = { NULL, /* Use default done routine */ }; -struct cfattach siop_ca = { - sizeof(struct siop_softc), afscmatch, afscattach, +struct cfattach ssh_ca = { + sizeof(struct ssh_softc), afscmatch, afscattach, }; -struct cfdriver siop_cd = { - NULL, "siop", DV_DULL, 0 +struct cfdriver ssh_cd = { + NULL, "ssh", DV_DULL, 0 }; int @@ -101,21 +101,21 @@ afscattach(parent, self, auxp) struct device *parent, *self; void *auxp; { - struct siop_softc *sc = (struct siop_softc *)self; + struct ssh_softc *sc = (struct ssh_softc *)self; struct confargs *ca = auxp; - siop_regmap_p rp; + ssh_regmap_p rp; int tmp; extern int cpuspeed; - sc->sc_siopp = rp = ca->ca_vaddr; + sc->sc_sshp = rp = ca->ca_vaddr; /* - * siop uses sc_clock_freq to define the dcntl & ctest7 reg values - * (was 0x0221, but i added SIOP_CTEST7_SC0 for snooping control) + * ssh uses sc_clock_freq to define the dcntl & ctest7 reg values + * (was 0x0221, but i added SSH_CTEST7_SC0 for snooping control) * XXX does the clock frequency change for the 33MHz processors? */ sc->sc_clock_freq = cpuspeed * 2; #ifdef MVME177 - /* MVME177 siop clock documented as fixed 50Mhz in VME177A/HX */ + /* MVME177 ssh clock documented as fixed 50Mhz in VME177A/HX */ if (cputyp == CPU_177) sc->sc_clock_freq = 50; #endif @@ -124,7 +124,7 @@ void *auxp; if (cputyp == CPU_172) sc->sc_clock_freq = 50; #endif - sc->sc_dcntl = SIOP_DCNTL_EA; + sc->sc_dcntl = SSH_DCNTL_EA; /*XXX*/ if (sc->sc_clock_freq <= 25) /*XXX*/ sc->sc_dcntl |= (2 << 6); /*XXX*/ else if (sc->sc_clock_freq <= 37) @@ -136,10 +136,10 @@ void *auxp; #if defined(MVME172) || defined(MVME177) /* No Select timouts on MC68060 */ if (cputyp == CPU_172 || cputyp == CPU_172) - sc->sc_ctest7 = SIOP_CTEST7_SNOOP | SIOP_CTEST7_TT1 | SIOP_CTEST7_STD; + sc->sc_ctest7 = SSH_CTEST7_SNOOP | SSH_CTEST7_TT1 | SSH_CTEST7_STD; else #endif - sc->sc_ctest7 = SIOP_CTEST7_SNOOP | SIOP_CTEST7_TT1; + sc->sc_ctest7 = SSH_CTEST7_SNOOP | SSH_CTEST7_TT1; sc->sc_link.adapter_softc = sc; sc->sc_link.adapter_target = 7; /* XXXX should ask ROM */ @@ -151,7 +151,7 @@ void *auxp; sc->sc_ih.ih_arg = sc; sc->sc_ih.ih_ipl = ca->ca_ipl; - siopinitialize(sc); + sshinitialize(sc); switch (ca->ca_bustype) { #if NMC > 0 @@ -192,16 +192,16 @@ void *auxp; int afsc_dmaintr(sc) -struct siop_softc *sc; +struct ssh_softc *sc; { - siop_regmap_p rp; + ssh_regmap_p rp; u_char istat; - rp = sc->sc_siopp; - istat = rp->siop_istat; - if ((istat & (SIOP_ISTAT_SIP | SIOP_ISTAT_DIP)) == 0) + rp = sc->sc_sshp; + istat = rp->ssh_istat; + if ((istat & (SSH_ISTAT_SIP | SSH_ISTAT_DIP)) == 0) return (0); - if ((rp->siop_sien | rp->siop_dien) == 0) + if ((rp->ssh_sien | rp->ssh_dien) == 0) return (0); /* no interrupts enabled */ /* @@ -209,9 +209,9 @@ struct siop_softc *sc; * (may need to deal with stacked interrupts?) */ sc->sc_istat = istat; - sc->sc_dstat = rp->siop_dstat; - sc->sc_sstat0 = rp->siop_sstat0; - siopintr(sc); + sc->sc_dstat = rp->ssh_dstat; + sc->sc_sstat0 = rp->ssh_sstat0; + sshintr(sc); sc->sc_intrcnt.ev_count++; return (1); } @@ -224,6 +224,6 @@ afsc_dump() for (i = 0; i < afsccd.cd_ndevs; ++i) if (afsccd.cd_devs[i]) - siop_dump(afsccd.cd_devs[i]); + ssh_dump(afsccd.cd_devs[i]); } #endif diff --git a/sys/arch/mvme68k/dev/sshreg.h b/sys/arch/mvme68k/dev/sshreg.h new file mode 100644 index 00000000000..1d8c216c88e --- /dev/null +++ b/sys/arch/mvme68k/dev/sshreg.h @@ -0,0 +1,337 @@ +/* $OpenBSD: sshreg.h,v 1.1 2001/02/18 17:41:09 deraadt Exp $ */ + +/* + * Copyright (c) 1995 Theo de Raadt + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Van Jacobson of Lawrence Berkeley Laboratory. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)sshreg.h 7.3 (Berkeley) 2/5/91 + */ + +/* + * NCR 53C710 SCSI interface hardware description. + * + * From the Mach scsi driver for the 53C700 + */ + +typedef struct { +/*00*/ volatile unsigned char ssh_sien; /* rw: SCSI Interrupt Enable */ +/*01*/ volatile unsigned char ssh_sdid; /* rw: SCSI Destination ID */ +/*02*/ volatile unsigned char ssh_scntl1; /* rw: SCSI control reg 1 */ +/*03*/ volatile unsigned char ssh_scntl0; /* rw: SCSI control reg 0 */ +/*04*/ volatile unsigned char ssh_socl; /* rw: SCSI Output Control Latch */ +/*05*/ volatile unsigned char ssh_sodl; /* rw: SCSI Output Data Latch */ +/*06*/ volatile unsigned char ssh_sxfer; /* rw: SCSI Transfer reg */ +/*07*/ volatile unsigned char ssh_scid; /* rw: SCSI Chip ID reg */ +/*08*/ volatile unsigned char ssh_sbcl; /* ro: SCSI Bus Control Lines */ +/*09*/ volatile unsigned char ssh_sbdl; /* ro: SCSI Bus Data Lines */ +/*0a*/ volatile unsigned char ssh_sidl; /* ro: SCSI Input Data Latch */ +/*0b*/ volatile unsigned char ssh_sfbr; /* ro: SCSI First Byte Received */ +/*0c*/ volatile unsigned char ssh_sstat2; /* ro: SCSI status reg 2 */ +/*0d*/ volatile unsigned char ssh_sstat1; /* ro: SCSI status reg 1 */ +/*0e*/ volatile unsigned char ssh_sstat0; /* ro: SCSI status reg 0 */ +/*0f*/ volatile unsigned char ssh_dstat; /* ro: DMA status */ +/*10*/ volatile unsigned long ssh_dsa; /* rw: Data Structure Address */ +/*14*/ volatile unsigned char ssh_ctest3; /* ro: Chip test register 3 */ +/*15*/ volatile unsigned char ssh_ctest2; /* ro: Chip test register 2 */ +/*16*/ volatile unsigned char ssh_ctest1; /* ro: Chip test register 1 */ +/*17*/ volatile unsigned char ssh_ctest0; /* ro: Chip test register 0 */ +/*18*/ volatile unsigned char ssh_ctest7; /* rw: Chip test register 7 */ +/*19*/ volatile unsigned char ssh_ctest6; /* rw: Chip test register 6 */ +/*1a*/ volatile unsigned char ssh_ctest5; /* rw: Chip test register 5 */ +/*1b*/ volatile unsigned char ssh_ctest4; /* rw: Chip test register 4 */ +/*1c*/ volatile unsigned long ssh_temp; /* rw: Temporary Stack reg */ +/*20*/ volatile unsigned char ssh_lcrc; /* rw: LCRC value */ +/*21*/ volatile unsigned char ssh_ctest8; /* rw: Chip test register 8 */ +/*22*/ volatile unsigned char ssh_istat; /* rw: Interrupt Status reg */ +/*23*/ volatile unsigned char ssh_dfifo; /* rw: DMA FIFO */ +/*24*/ volatile unsigned char ssh_dcmd; /* rw: DMA Command Register */ +/*25*/ volatile unsigned char ssh_dbc2; /* rw: DMA Byte Counter reg */ +/*26*/ volatile unsigned char ssh_dbc1; +/*27*/ volatile unsigned char ssh_dbc0; +/*28*/ volatile unsigned long ssh_dnad; /* rw: DMA Next Address */ +/*2c*/ volatile unsigned long ssh_dsp; /* rw: DMA SCRIPTS Pointer reg */ +/*30*/ volatile unsigned long ssh_dsps; /* rw: DMA SCRIPTS Pointer Save reg */ +/*34*/ volatile unsigned long ssh_scratch; /* rw: Scratch Register */ +/*38*/ volatile unsigned char ssh_dcntl; /* rw: DMA Control reg */ +/*39*/ volatile unsigned char ssh_dwt; /* rw: DMA Watchdog Timer */ +/*3a*/ volatile unsigned char ssh_dien; /* rw: DMA Interrupt Enable */ +/*3b*/ volatile unsigned char ssh_dmode; /* rw: DMA Mode reg */ +/*3c*/ volatile unsigned long ssh_adder; + +} ssh_regmap_t; +typedef volatile ssh_regmap_t *ssh_regmap_p; + +/* + * Register defines + */ + +/* Scsi control register 0 (scntl0) */ + +#define SSH_SCNTL0_ARB 0xc0 /* Arbitration mode */ +# define SSH_ARB_SIMPLE 0x00 +# define SSH_ARB_FULL 0xc0 +#define SSH_SCNTL0_START 0x20 /* Start Sequence */ +#define SSH_SCNTL0_WATN 0x10 /* (Select) With ATN */ +#define SSH_SCNTL0_EPC 0x08 /* Enable Parity Checking */ +#define SSH_SCNTL0_EPG 0x04 /* Enable Parity Generation */ +#define SSH_SCNTL0_AAP 0x02 /* Assert ATN on Parity Error */ +#define SSH_SCNTL0_TRG 0x01 /* Target Mode */ + +/* Scsi control register 1 (scntl1) */ + +#define SSH_SCNTL1_EXC 0x80 /* Extra Clock Cycle of data setup */ +#define SSH_SCNTL1_ADB 0x40 /* Assert Data Bus */ +#define SSH_SCNTL1_ESR 0x20 /* Enable Selection/Reselection */ +#define SSH_SCNTL1_CON 0x10 /* Connected */ +#define SSH_SCNTL1_RST 0x08 /* Assert RST */ +#define SSH_SCNTL1_AESP 0x04 /* Assert even SCSI parity */ +#define SSH_SCNTL1_RES0 0x02 /* Reserved */ +#define SSH_SCNTL1_RES1 0x01 /* Reserved */ + +/* Scsi interrupt enable register (sien) */ + +#define SSH_SIEN_M_A 0x80 /* Phase Mismatch or ATN active */ +#define SSH_SIEN_FCMP 0x40 /* Function Complete */ +#define SSH_SIEN_STO 0x20 /* (Re)Selection timeout */ +#define SSH_SIEN_SEL 0x10 /* (Re)Selected */ +#define SSH_SIEN_SGE 0x08 /* SCSI Gross Error */ +#define SSH_SIEN_UDC 0x04 /* Unexpected Disconnect */ +#define SSH_SIEN_RST 0x02 /* RST asserted */ +#define SSH_SIEN_PAR 0x01 /* Parity Error */ + +/* Scsi chip ID (scid) */ + +#define SSH_SCID_VALUE(i) (1<<i) + +/* Scsi transfer register (sxfer) */ + +#define SSH_SXFER_DHP 0x80 /* Disable Halt on Parity error/ ATN asserted */ +#define SSH_SXFER_TP 0x70 /* Synch Transfer Period */ + /* see specs for formulas: + Period = TCP * (4 + XFERP ) + TCP = 1 + CLK + 1..2; + */ +#define SSH_SXFER_MO 0x0f /* Synch Max Offset */ +# define SSH_MAX_OFFSET 8 + +/* Scsi output data latch register (sodl) */ + +/* Scsi output control latch register (socl) */ + +#define SSH_REQ 0x80 /* SCSI signal <x> asserted */ +#define SSH_ACK 0x40 +#define SSH_BSY 0x20 +#define SSH_SEL 0x10 +#define SSH_ATN 0x08 +#define SSH_MSG 0x04 +#define SSH_CD 0x02 +#define SSH_IO 0x01 + +#define SSH_PHASE(socl) SCSI_PHASE(socl) + +/* Scsi first byte received register (sfbr) */ + +/* Scsi input data latch register (sidl) */ + +/* Scsi bus data lines register (sbdl) */ + +/* Scsi bus control lines register (sbcl). Same as socl */ + +/* DMA status register (dstat) */ + +#define SSH_DSTAT_DFE 0x80 /* DMA FIFO empty */ +#define SSH_DSTAT_RES 0x40 +#define SSH_DSTAT_BF 0x20 /* Bus fault */ +#define SSH_DSTAT_ABRT 0x10 /* Aborted */ +#define SSH_DSTAT_SSI 0x08 /* SCRIPT Single Step */ +#define SSH_DSTAT_SIR 0x04 /* SCRIPT Interrupt Instruction */ +#define SSH_DSTAT_WTD 0x02 /* Watchdog Timeout Detected */ +#define SSH_DSTAT_IID 0x01 /* Invalid Instruction Detected */ + +/* Scsi status register 0 (sstat0) */ + +#define SSH_SSTAT0_M_A 0x80 /* Phase Mismatch or ATN active */ +#define SSH_SSTAT0_FCMP 0x40 /* Function Complete */ +#define SSH_SSTAT0_STO 0x20 /* (Re)Selection timeout */ +#define SSH_SSTAT0_SEL 0x10 /* (Re)Selected */ +#define SSH_SSTAT0_SGE 0x08 /* SCSI Gross Error */ +#define SSH_SSTAT0_UDC 0x04 /* Unexpected Disconnect */ +#define SSH_SSTAT0_RST 0x02 /* RST asserted */ +#define SSH_SSTAT0_PAR 0x01 /* Parity Error */ + +/* Scsi status register 1 (sstat1) */ + +#define SSH_SSTAT1_ILF 0x80 /* Input latch (sidl) full */ +#define SSH_SSTAT1_ORF 0x40 /* output reg (sodr) full */ +#define SSH_SSTAT1_OLF 0x20 /* output latch (sodl) full */ +#define SSH_SSTAT1_AIP 0x10 /* Arbitration in progress */ +#define SSH_SSTAT1_LOA 0x08 /* Lost arbitration */ +#define SSH_SSTAT1_WOA 0x04 /* Won arbitration */ +#define SSH_SSTAT1_RST 0x02 /* SCSI RST current value */ +#define SSH_SSTAT1_SDP 0x01 /* SCSI SDP current value */ + +/* Scsi status register 2 (sstat2) */ + +#define SSH_SSTAT2_FF 0xf0 /* SCSI FIFO flags (bytecount) */ +# define SSH_SCSI_FIFO_DEEP 8 +#define SSH_SSTAT2_SDP 0x08 /* Latched (on REQ) SCSI SDP */ +#define SSH_SSTAT2_MSG 0x04 /* Latched SCSI phase */ +#define SSH_SSTAT2_CD 0x02 +#define SSH_SSTAT2_IO 0x01 + +/* Chip test register 0 (ctest0) */ + +#define SSH_CTEST0_RES0 0x80 +#define SSH_CTEST0_BTD 0x40 /* Byte-to-byte Timer Disable */ +#define SSH_CTEST0_GRP 0x20 /* Generate Receive Parity for Passthrough */ +#define SSH_CTEST0_EAN 0x10 /* Enable Active Negation */ +#define SSH_CTEST0_HSC 0x08 /* Halt SCSI clock */ +#define SSH_CTEST0_ERF 0x04 /* Extend REQ/ACK Filtering */ +#define SSH_CTEST0_RES1 0x02 +#define SSH_CTEST0_DDIR 0x01 /* Xfer direction (1-> from SCSI bus) */ + +/* Chip test register 1 (ctest1) */ + +#define SSH_CTEST1_FMT 0xf0 /* Byte empty in DMA FIFO bottom (high->byte3) */ +#define SSH_CTEST1_FFL 0x0f /* Byte full in DMA FIFO top, same */ + +/* Chip test register 2 (ctest2) */ + +#define SSH_CTEST2_RES 0x80 +#define SSH_CTEST2_SIGP 0x40 /* Signal process */ +#define SSH_CTEST2_SOFF 0x20 /* Synch Offset compare (1-> zero Init, max Tgt */ +#define SSH_CTEST2_SFP 0x10 /* SCSI FIFO Parity */ +#define SSH_CTEST2_DFP 0x08 /* DMA FIFO Parity */ +#define SSH_CTEST2_TEOP 0x04 /* True EOP (a-la 5380) */ +#define SSH_CTEST2_DREQ 0x02 /* DREQ status */ +#define SSH_CTEST2_DACK 0x01 /* DACK status */ + +/* Chip test register 3 (ctest3) read-only, top of SCSI FIFO */ + +/* Chip test register 4 (ctest4) */ + +#define SSH_CTEST4_MUX 0x80 /* Host bus multiplex mode */ +#define SSH_CTEST4_ZMOD 0x40 /* High-impedance outputs */ +#define SSH_CTEST4_SZM 0x20 /* ditto, SCSI "outputs" */ +#define SSH_CTEST4_SLBE 0x10 /* SCSI loobpack enable */ +#define SSH_CTEST4_SFWR 0x08 /* SCSI FIFO write enable (from sodl) */ +#define SSH_CTEST4_FBL 0x07 /* DMA FIFO Byte Lane select (from ctest6) + 4->0, .. 7->3 */ + +/* Chip test register 5 (ctest5) */ + +#define SSH_CTEST5_ADCK 0x80 /* Clock Address Incrementor */ +#define SSH_CTEST5_BBCK 0x40 /* Clock Byte counter */ +#define SSH_CTEST5_ROFF 0x20 /* Reset SCSI offset */ +#define SSH_CTEST5_MASR 0x10 /* Master set/reset pulses (of bits 3-0) */ +#define SSH_CTEST5_DDIR 0x08 /* (re)set internal DMA direction */ +#define SSH_CTEST5_EOP 0x04 /* (re)set internal EOP */ +#define SSH_CTEST5_DREQ 0x02 /* (re)set internal REQ */ +#define SSH_CTEST5_DACK 0x01 /* (re)set internal ACK */ + +/* Chip test register 6 (ctest6) DMA FIFO access */ + +/* Chip test register 7 (ctest7) */ + +#define SSH_CTEST7_CDIS 0x80 /* Cache burst disable */ +#define SSH_CTEST7_SC1 0x40 /* Snoop control 1 */ +#define SSH_CTEST7_SC0 0x20 /* Snoop contorl 0 */ +#define SSH_CTEST7_INHIBIT (0 << 5) +#define SSH_CTEST7_SNOOP (1 << 5) +#define SSH_CTEST7_INVAL (2 << 5) +#define SSH_CTEST7_RESV (3 << 5) +#define SSH_CTEST7_STD 0x10 /* Selection timeout disable */ +#define SSH_CTEST7_DFP 0x08 /* DMA FIFO parity bit */ +#define SSH_CTEST7_EVP 0x04 /* Even parity (to host bus) */ +#define SSH_CTEST7_TT1 0x02 /* Transfer type bit */ +#define SSH_CTEST7_DIFF 0x01 /* Differential mode */ + +/* DMA FIFO register (dfifo) */ + +#define SSH_DFIFO_RES 0x80 +#define SSH_DFIFO_BO 0x7f /* FIFO byte offset counter */ + +/* Interrupt status register (istat) */ + +#define SSH_ISTAT_ABRT 0x80 /* Abort operation */ +#define SSH_ISTAT_RST 0x40 /* Software reset */ +#define SSH_ISTAT_SIGP 0x20 /* Signal process */ +#define SSH_ISTAT_RES 0x10 +#define SSH_ISTAT_CON 0x08 /* Connected */ +#define SSH_ISTAT_RES1 0x04 +#define SSH_ISTAT_SIP 0x02 /* SCSI Interrupt pending */ +#define SSH_ISTAT_DIP 0x01 /* DMA Interrupt pending */ + +/* Chip test register 8 (ctest8) + +#define SSH_CTEST8_V 0xf0 /* Chip revision level */ +#define SSH_CTEST8_FLF 0x08 /* Flush DMA FIFO */ +#define SSH_CTEST8_CLF 0x04 /* Clear DMA and SCSI FIFOs */ +#define SSH_CTEST8_FM 0x02 /* Fetch pin mode */ +#define SSH_CTEST8_SM 0x01 /* Snoop pins mode */ + +/* DMA Mode register (dmode) */ + +#define SSH_DMODE_BL_MASK 0xc0 /* 0->1 1->2 2->4 3->8 */ +#define SSH_DMODE_FC 0x30 /* Function code */ +#define SSH_DMODE_PD 0x08 /* Program/data */ +#define SSH_DMODE_FAM 0x04 /* Fixed address mode */ +#define SSH_DMODE_U0 0x02 /* User programmable transfer type */ +#define SSH_DMODE_MAN 0x01 /* Manual start mode */ + +/* DMA interrupt enable register (dien) */ + +#define SSH_DIEN_RES 0xc0 +#define SSH_DIEN_BF 0x20 /* On Bus Fault */ +#define SSH_DIEN_ABRT 0x10 /* On Abort */ +#define SSH_DIEN_SSI 0x08 /* On SCRIPTS sstep */ +#define SSH_DIEN_SIR 0x04 /* On SCRIPTS intr instruction */ +#define SSH_DIEN_WTD 0x02 /* On watchdog timeout */ +#define SSH_DIEN_IID 0x01 /* On illegal instruction detected */ + +/* DMA control register (dcntl) */ + +#define SSH_DCNTL_CF_MASK 0xc0 /* Clock frequency dividers: + 0 --> 37.51..50.00 Mhz, div=2 + 1 --> 25.01..37.50 Mhz, div=1.5 + 2 --> 16.67..25.00 Mhz, div=1 + 3 --> 50.01..66.67 Mhz, div=3 + */ +#define SSH_DCNTL_EA 0x20 /* Enable ack */ +#define SSH_DCNTL_SSM 0x10 /* Single step mode */ +#define SSH_DCNTL_LLM 0x08 /* Enable SCSI Low-level mode */ +#define SSH_DCNTL_STD 0x04 /* Start DMA operation */ +#define SSH_DCNTL_FA 0x02 /* Fast arbitration */ +#define SSH_DCNTL_COM 0x01 /* 53C700 compatibility */ diff --git a/sys/arch/mvme68k/dev/siopvar.h b/sys/arch/mvme68k/dev/sshvar.h index 69a8ddfaf19..7f4dfac4924 100644 --- a/sys/arch/mvme68k/dev/siopvar.h +++ b/sys/arch/mvme68k/dev/sshvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: siopvar.h,v 1.4 1996/04/28 11:03:33 deraadt Exp $ */ +/* $OpenBSD: sshvar.h,v 1.1 2001/02/18 17:41:09 deraadt Exp $ */ /* * Copyright (c) 1995 Theo de Raadt @@ -36,10 +36,10 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)siopvar.h 7.1 (Berkeley) 5/8/90 + * @(#)sshvar.h 7.1 (Berkeley) 5/8/90 */ -#ifndef _SIOPVAR_H_ -#define _SIOPVAR_H_ +#ifndef _SSHVAR_H_ +#define _SSHVAR_H_ /* * The largest single request will be MAXPHYS bytes which will require @@ -52,7 +52,7 @@ /* * Data Structure for SCRIPTS program */ -struct siop_ds { +struct ssh_ds { /*00*/ long scsi_addr; /* SCSI ID & sync */ /*04*/ long idlen; /* Identify message */ /*08*/ char *idbuf; @@ -82,8 +82,8 @@ struct siop_ds { * We'll generally update: xs->{flags,resid,error,sense,status} and * occasionally xs->retries. */ -struct siop_acb { -/*00*/ TAILQ_ENTRY(siop_acb) chain; +struct ssh_acb { +/*00*/ TAILQ_ENTRY(ssh_acb) chain; /*08*/ struct scsi_xfer *xs; /* SCSI xfer ctrl block from above */ /*0c*/ int flags; /* Status */ #define ACB_FREE 0x00 @@ -91,7 +91,7 @@ struct siop_acb { #define ACB_DONE 0x04 #define ACB_CHKSENSE 0x08 /*10*/ struct scsi_generic cmd; /* SCSI command block */ -/*1c*/ struct siop_ds ds; +/*1c*/ struct ssh_ds ds; /*a0*/ void *iob_buf; /*a4*/ u_long iob_curbuf; /*a8*/ u_long iob_len, iob_curlen; @@ -110,7 +110,7 @@ struct siop_acb { * probably have been a "per target+lunit" structure, but we'll leave it at * this for now. Is there a way to reliably hook it up to sc->fordriver?? */ -struct siop_tinfo { +struct ssh_tinfo { int cmds; /* #commands processed */ int dconns; /* #disconnects */ int touts; /* #timeouts */ @@ -122,7 +122,7 @@ struct siop_tinfo { u_char offset; /* Offset suggestion */ } tinfo_t; -struct siop_softc { +struct ssh_softc { struct device sc_dev; struct intrhand sc_ih; struct evcnt sc_intrcnt; @@ -134,18 +134,18 @@ struct siop_softc { u_long sc_intcode; struct scsi_link sc_link; /* proto for sub devices */ u_long sc_scriptspa; /* physical address of scripts */ - siop_regmap_p sc_siopp; /* the SIOP */ + ssh_regmap_p sc_sshp; /* the SSH */ u_long sc_active; /* number of active I/O's */ /* Lists of command blocks */ - TAILQ_HEAD(acb_list, siop_acb) free_list, + TAILQ_HEAD(acb_list, ssh_acb) free_list, ready_list, nexus_list; - struct siop_acb *sc_nexus; /* current command */ -#define SIOP_NACB 8 - struct siop_acb *sc_acb; /* the real command blocks */ - struct siop_tinfo sc_tinfo[8]; + struct ssh_acb *sc_nexus; /* current command */ +#define SSH_NACB 8 + struct ssh_acb *sc_acb; /* the real command blocks */ + struct ssh_tinfo sc_tinfo[8]; u_short sc_clock_freq; u_char sc_dcntl; @@ -164,10 +164,10 @@ struct siop_softc { }; /* sc_flags */ -#define SIOP_INTSOFF 0x80 /* Interrupts turned off */ -#define SIOP_INTDEFER 0x40 /* Level 6 interrupt has been deferred */ -#define SIOP_ALIVE 0x01 /* controller initialized */ -#define SIOP_SELECTED 0x04 /* bus is in selected state. Needed for +#define SSH_INTSOFF 0x80 /* Interrupts turned off */ +#define SSH_INTDEFER 0x40 /* Level 6 interrupt has been deferred */ +#define SSH_ALIVE 0x01 /* controller initialized */ +#define SSH_SELECTED 0x04 /* bus is in selected state. Needed for correct abort procedure. */ /* sync states */ @@ -197,7 +197,7 @@ struct siop_softc { #define STS_INTERMED 0x10 /* Intermediate status sent */ #define STS_EXT 0x80 /* Extended status valid */ -void siop_minphys __P((struct buf *bp)); -int siop_scsicmd __P((struct scsi_xfer *)); +void ssh_minphys __P((struct buf *bp)); +int ssh_scsicmd __P((struct scsi_xfer *)); -#endif /* _SIOPVAR_H */ +#endif /* _SSHVAR_H */ |