Home | History | Annotate | Line # | Download | only in ic
siopreg.h revision 1.13
      1  1.13   bouyer /*	$NetBSD: siopreg.h,v 1.13 2002/08/29 16:43:23 bouyer Exp $	*/
      2   1.1   bouyer 
      3   1.1   bouyer /*
      4   1.1   bouyer  * Copyright (c) 2000 Manuel Bouyer.
      5   1.1   bouyer  *
      6   1.1   bouyer  * Redistribution and use in source and binary forms, with or without
      7   1.1   bouyer  * modification, are permitted provided that the following conditions
      8   1.1   bouyer  * are met:
      9   1.1   bouyer  * 1. Redistributions of source code must retain the above copyright
     10   1.1   bouyer  *    notice, this list of conditions and the following disclaimer.
     11   1.1   bouyer  * 2. Redistributions in binary form must reproduce the above copyright
     12   1.1   bouyer  *    notice, this list of conditions and the following disclaimer in the
     13   1.1   bouyer  *    documentation and/or other materials provided with the distribution.
     14   1.1   bouyer  * 3. All advertising materials mentioning features or use of this software
     15   1.1   bouyer  *    must display the following acknowledgement:
     16  1.11   bouyer  *	This product includes software developed by Manuel Bouyer.
     17   1.3   bouyer  * 4. The name of the author may not be used to endorse or promote products
     18   1.3   bouyer  *    derived from this software without specific prior written permission.
     19   1.1   bouyer  *
     20   1.5   bouyer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     21   1.5   bouyer  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     22   1.5   bouyer  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     23   1.5   bouyer  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     24   1.5   bouyer  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     25   1.5   bouyer  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26   1.5   bouyer  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27   1.5   bouyer  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28   1.5   bouyer  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     29   1.5   bouyer  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30   1.1   bouyer  *
     31   1.1   bouyer  */
     32   1.1   bouyer 
     33   1.1   bouyer /*
     34   1.1   bouyer  * Devices definitions for Symbios/NCR M53c8xx PCI-SCSI I/O Processors
     35   1.1   bouyer  * Docs available from http://www.symbios.com/
     36   1.1   bouyer  */
     37   1.1   bouyer 
     38   1.1   bouyer #define SIOP_SCNTL0 	0x00 /* SCSI control 0, R/W */
     39   1.1   bouyer #define SCNTL0_ARB_MASK	0xc0
     40   1.1   bouyer #define SCNTL0_SARB	0x00
     41   1.1   bouyer #define SCNTL0_FARB	0xc0
     42   1.1   bouyer #define SCNTL0_START	0x20
     43   1.1   bouyer #define SCNTL0_WATM	0x10
     44   1.1   bouyer #define SCNTL0_EPC	0x08
     45   1.1   bouyer #define SCNTL0_AAP	0x02
     46   1.1   bouyer #define SCNTL0_TRG	0x01
     47   1.1   bouyer 
     48   1.1   bouyer #define SIOP_SCNTL1 	0x01 /* SCSI control 1, R/W */
     49   1.1   bouyer #define SCNTL1_EXC	0x80
     50   1.1   bouyer #define SCNTL1_ADB	0x40
     51   1.1   bouyer #define SCNTL1_DHP	0x20
     52   1.1   bouyer #define SCNTL1_CON	0x10
     53   1.1   bouyer #define SCNTL1_RST	0x08
     54   1.1   bouyer #define SCNTL1_AESP	0x04
     55   1.1   bouyer #define SCNTL1_IARB	0x02
     56   1.1   bouyer #define SCNTL1_SST	0x01
     57   1.1   bouyer 
     58   1.1   bouyer #define SIOP_SCNTL2 	0x02 /* SCSI control 2, R/W */
     59   1.1   bouyer #define SCNTL2_SDU	0x80
     60   1.1   bouyer #define SCNTL2_CHM	0x40	/* 875 only */
     61   1.1   bouyer #define SCNTL2_SLPMD	0x20	/* 875 only */
     62   1.1   bouyer #define SCNTL2_SLPHBEN	0x10	/* 875 only */
     63   1.1   bouyer #define SCNTL2_WSS	0x08	/* 875 only */
     64   1.1   bouyer #define SCNTL2_VUE0	0x04	/* 875 only */
     65   1.1   bouyer #define SCNTL2_VUE1	0x02	/* 875 only */
     66   1.1   bouyer #define SCNTL2_WSR	0x01	/* 875 only */
     67   1.1   bouyer 
     68   1.1   bouyer #define SIOP_SCNTL3 	0x03 /* SCSI control 3, R/W */
     69   1.1   bouyer #define SCNTL3_ULTRA	0x80	/* 875 only */
     70   1.1   bouyer #define SCNTL3_SCF_SHIFT 4
     71   1.1   bouyer #define SCNTL3_SCF_MASK	0x70
     72   1.4   bouyer #define SCNTL3_EWS	0x08	/* 875 only */
     73   1.1   bouyer #define SCNTL3_CCF_SHIFT 0
     74   1.5   bouyer #define SCNTL3_CCF_MASK	0x07
     75   1.1   bouyer 
     76   1.4   bouyer /* periods for various SCF values, assume transfer period of 4 */
     77   1.4   bouyer struct scf_period {
     78   1.4   bouyer 	int clock; /* clock period (ns * 10) */
     79   1.4   bouyer 	int period; /* scsi period, as set in the SDTR message */
     80   1.4   bouyer 	int scf; /* scf value to use */
     81   1.4   bouyer };
     82   1.4   bouyer 
     83   1.5   bouyer static const struct scf_period scf_period[] __attribute__((__unused__)) = {
     84  1.10   bouyer 	{250, 25, 1}, /* 10.0 Mhz */
     85  1.10   bouyer 	{250, 37, 2}, /* 6.67 Mhz */
     86  1.10   bouyer 	{250, 50, 3},  /* 5.00 Mhz */
     87  1.10   bouyer 	{250, 75, 4},  /* 3.33 Mhz */
     88  1.10   bouyer 	{125, 12, 1},  /* 20.0 Mhz */
     89  1.10   bouyer 	{125, 18, 2},  /* 13.3 Mhz */
     90  1.10   bouyer 	{125, 25, 3},  /* 10.0 Mhz */
     91  1.10   bouyer 	{125, 37, 4},  /* 6.67 Mhz */
     92  1.10   bouyer 	{125, 50, 5},  /* 5.0 Mhz */
     93  1.10   bouyer 	{ 62, 10, 1},  /* 40.0 Mhz */
     94  1.10   bouyer 	{ 62, 12, 3},  /* 20.0 Mhz */
     95  1.10   bouyer 	{ 62, 18, 4},  /* 13.3 Mhz */
     96  1.10   bouyer 	{ 62, 25, 5},  /* 10.0 Mhz */
     97  1.10   bouyer };
     98  1.10   bouyer 
     99  1.10   bouyer static const struct scf_period dt_scf_period[] __attribute__((__unused__)) = {
    100  1.10   bouyer 	{ 62,  9, 1},  /* 80.0 Mhz */
    101  1.10   bouyer 	{ 62, 10, 3},  /* 40.0 Mhz */
    102  1.10   bouyer 	{ 62, 12, 5},  /* 20.0 Mhz */
    103  1.10   bouyer 	{ 62, 18, 6},  /* 13.3 Mhz */
    104  1.10   bouyer 	{ 62, 25, 7},  /* 10.0 Mhz */
    105   1.4   bouyer };
    106   1.4   bouyer 
    107   1.1   bouyer #define SIOP_SCID	0x04 /* SCSI chip ID R/W */
    108   1.1   bouyer #define SCID_RRE	0x40
    109   1.1   bouyer #define SCID_SRE	0x20
    110   1.1   bouyer #define SCID_ENCID_SHIFT 0
    111   1.1   bouyer #define SCID_ENCID_MASK	0x07
    112   1.1   bouyer 
    113   1.7   bouyer #define SIOP_SXFER	0x05 /* SCSI transfer, R/W */
    114   1.7   bouyer #define SXFER_TP_SHIFT	 5
    115   1.7   bouyer #define SXFER_TP_MASK	0xe0
    116   1.7   bouyer #define SXFER_MO_SHIFT  0
    117  1.10   bouyer #define SXFER_MO_MASK  0x3f
    118   1.1   bouyer 
    119   1.1   bouyer #define SIOP_SDID	0x06 /* SCSI destiation ID, R/W */
    120   1.1   bouyer #define SDID_ENCID_SHIFT 0
    121   1.1   bouyer #define SDID_ENCID_MASK	0x07
    122   1.1   bouyer 
    123   1.1   bouyer #define SIOP_GPREG	0x07 /* General purpose, R/W */
    124   1.1   bouyer #define GPREG_GPIO4	0x10	/* 875 only */
    125   1.1   bouyer #define GPREG_GPIO3	0x08	/* 875 only */
    126   1.1   bouyer #define GPREG_GPIO2	0x04	/* 875 only */
    127   1.1   bouyer #define GPREG_GPIO1	0x02
    128   1.1   bouyer #define GPREG_GPIO0	0x01
    129   1.1   bouyer 
    130   1.1   bouyer #define SIOP_SFBR	0x08 /* SCSI first byte received, R/W */
    131   1.1   bouyer 
    132   1.1   bouyer #define SIOP_SOCL	0x09 /* SCSI output control latch, RW */
    133   1.1   bouyer 
    134   1.1   bouyer #define SIOP_SSID	0x0A /* SCSI selector ID, RO */
    135   1.1   bouyer #define SSID_VAL	0x80
    136   1.1   bouyer #define SSID_ENCID_SHIFT 0
    137   1.1   bouyer #define SSID_ENCID_MASK 0x0f
    138   1.1   bouyer 
    139   1.1   bouyer #define SIOP_SBCL	0x0B /* SCSI control line, RO */
    140   1.1   bouyer 
    141   1.1   bouyer #define SIOP_DSTAT	0x0C /* DMA status, RO */
    142   1.1   bouyer #define DSTAT_DFE	0x80
    143   1.1   bouyer #define DSTAT_MDPE	0x40
    144   1.1   bouyer #define DSTAT_BF	0x20
    145   1.1   bouyer #define DSTAT_ABRT	0x10
    146   1.1   bouyer #define DSTAT_SSI	0x08
    147   1.1   bouyer #define DSTAT_SIR	0x04
    148   1.1   bouyer #define DSTAT_IID	0x01
    149   1.1   bouyer 
    150   1.1   bouyer #define SIOP_SSTAT0	0x0D /* STSI status 0, RO */
    151   1.1   bouyer #define SSTAT0_ILF	0x80
    152   1.1   bouyer #define SSTAT0_ORF	0x40
    153   1.1   bouyer #define SSTAT0_OLF	0x20
    154   1.1   bouyer #define SSTAT0_AIP	0x10
    155   1.1   bouyer #define SSTAT0_LOA	0x08
    156   1.1   bouyer #define SSTAT0_WOA	0x04
    157   1.1   bouyer #define SSTAT0_RST	0x02
    158   1.1   bouyer #define SSTAT0_SDP	0x01
    159   1.1   bouyer 
    160   1.1   bouyer #define SIOP_SSTAT1	0x0E /* STSI status 1, RO */
    161   1.1   bouyer #define SSTAT1_FFO_SHIFT 4
    162   1.1   bouyer #define SSTAT1_FFO_MASK 0x80
    163   1.1   bouyer #define SSTAT1_SDPL	0x08
    164   1.1   bouyer #define SSTAT1_MSG	0x04
    165   1.1   bouyer #define SSTAT1_CD	0x02
    166   1.1   bouyer #define SSTAT1_IO	0x01
    167   1.1   bouyer #define SSTAT1_PHASE_MASK (SSTAT1_IO | SSTAT1_CD | SSTAT1_MSG)
    168   1.1   bouyer #define SSTAT1_PHASE_DATAOUT	0
    169   1.1   bouyer #define SSTAT1_PHASE_DATAIN	SSTAT1_IO
    170   1.1   bouyer #define SSTAT1_PHASE_CMD	SSTAT1_CD
    171   1.1   bouyer #define SSTAT1_PHASE_STATUS	(SSTAT1_CD | SSTAT1_IO)
    172   1.1   bouyer #define SSTAT1_PHASE_MSGOUT	(SSTAT1_MSG | SSTAT1_CD)
    173   1.1   bouyer #define SSTAT1_PHASE_MSGIN	(SSTAT1_MSG | SSTAT1_CD | SSTAT1_IO)
    174   1.1   bouyer 
    175   1.1   bouyer #define SIOP_SSTAT2	0x0F /* STSI status 2, RO */
    176   1.1   bouyer #define SSTAT2_ILF1	0x80	/* 875 only */
    177   1.1   bouyer #define SSTAT2_ORF1	0x40	/* 875 only */
    178   1.1   bouyer #define SSTAT2_OLF1	0x20	/* 875 only */
    179   1.1   bouyer #define SSTAT2_FF4	0x10	/* 875 only */
    180   1.1   bouyer #define SSTAT2_SPL1	0x08	/* 875 only */
    181   1.1   bouyer #define SSTAT2_DF	0x04	/* 875 only */
    182   1.1   bouyer #define SSTAT2_LDSC	0x02
    183   1.1   bouyer #define SSTAT2_SDP1	0x01	/* 875 only */
    184   1.1   bouyer 
    185   1.1   bouyer #define SIOP_DSA	0x10 /* data struct addr, R/W */
    186   1.1   bouyer 
    187   1.1   bouyer #define SIOP_ISTAT	0x14 /* IRQ status, R/W */
    188   1.1   bouyer #define ISTAT_ABRT	0x80
    189   1.1   bouyer #define ISTAT_SRST	0x40
    190   1.1   bouyer #define ISTAT_SIGP	0x20
    191   1.1   bouyer #define ISTAT_SEM	0x10
    192   1.1   bouyer #define ISTAT_CON	0x08
    193   1.1   bouyer #define ISTAT_INTF	0x04
    194   1.1   bouyer #define ISTAT_SIP	0x02
    195   1.1   bouyer #define ISTAT_DIP	0x01
    196   1.1   bouyer 
    197   1.1   bouyer #define SIOP_CTEST0	0x18 /* Chip test 0, R/W */
    198   1.1   bouyer 
    199   1.1   bouyer #define SIOP_CTEST1	0x19 /* Chip test 1, R/W */
    200   1.1   bouyer 
    201   1.1   bouyer #define SIOP_CTEST2	0x1A /* Chip test 2, R/W */
    202   1.1   bouyer #define CTEST2_SRTCH	0x04	/* 875 only */
    203   1.1   bouyer 
    204   1.1   bouyer #define SIOP_CTEST3	0x1B /* Chip test 3, R/W */
    205   1.1   bouyer #define CTEST3_FLF	0x08
    206   1.1   bouyer #define CTEST3_CLF	0x04
    207   1.1   bouyer #define CTEST3_FM	0x02
    208   1.1   bouyer #define CTEST3_WRIE	0x01
    209   1.1   bouyer 
    210   1.1   bouyer #define SIOP_TEMP	0x1C /* Temp register (used by CALL/RET), R/W */
    211   1.1   bouyer 
    212   1.1   bouyer #define SIOP_DFIFO	0x20 /* DMA FIFO */
    213   1.1   bouyer 
    214   1.1   bouyer #define SIOP_CTEST4	0x21 /* Chip test 4, R/W */
    215   1.1   bouyer #define CTEST4_BDIS	0x80
    216   1.1   bouyer #define CTEST_ZMOD	0x40
    217   1.1   bouyer #define CTEST_ZSD	0x20
    218   1.1   bouyer #define CTEST_SRTM	0x10
    219   1.1   bouyer #define CTEST_MPEE	0x08
    220   1.1   bouyer 
    221   1.1   bouyer #define SIOP_CTEST5	0x22 /* Chip test 5, R/W */
    222   1.1   bouyer #define CTEST5_ADCK	0x80
    223   1.1   bouyer #define CTEST5_BBCK	0x40
    224   1.5   bouyer #define CTEST5_DFS	0x20
    225   1.1   bouyer #define CTEST5_MASR	0x10
    226   1.1   bouyer #define CTEST5_DDIR	0x08
    227   1.5   bouyer #define CTEST5_BOMASK	0x03
    228   1.1   bouyer 
    229   1.1   bouyer #define SIOP_CTEST6	0x23 /* Chip test 6, R/W */
    230   1.1   bouyer 
    231   1.1   bouyer #define SIOP_DBC	0x24 /* DMA byte counter, R/W */
    232   1.1   bouyer 
    233   1.1   bouyer #define SIOP_DCMD	0x27 /* DMA command, R/W */
    234   1.1   bouyer 
    235   1.1   bouyer #define SIOP_DNAD	0x28 /* DMA next addr, R/W */
    236   1.1   bouyer 
    237   1.1   bouyer #define SIOP_DSP	0x2C /* DMA scripts pointer, R/W */
    238   1.1   bouyer 
    239   1.1   bouyer #define SIOP_DSPS	0x30 /* DMA scripts pointer save, R/W */
    240   1.1   bouyer 
    241   1.1   bouyer #define SIOP_SCRATCHA	0x34 /* scratch register A. R/W */
    242   1.1   bouyer 
    243   1.1   bouyer #define SIOP_DMODE	0x38 /* DMA mode, R/W */
    244   1.1   bouyer #define DMODE_BL_SHIFT   6
    245   1.1   bouyer #define DMODE_BL_MASK	0xC0
    246   1.1   bouyer #define DMODE_SIOM	0x20
    247   1.1   bouyer #define DMODE_DIOM	0x10
    248   1.1   bouyer #define DMODE_ERL	0x08
    249   1.1   bouyer #define DMODE_ERMP	0x04
    250   1.1   bouyer #define DMODE_BOF	0x02
    251   1.1   bouyer #define DMODE_MAN	0x01
    252   1.1   bouyer 
    253   1.1   bouyer #define SIOP_DIEN	0x39 /* DMA interrupt enable, R/W */
    254   1.1   bouyer #define DIEN_MDPE	0x40
    255   1.1   bouyer #define DIEN_BF		0x20
    256   1.1   bouyer #define DIEN_AVRT	0x10
    257   1.1   bouyer #define DIEN_SSI	0x08
    258   1.1   bouyer #define DIEN_SIR	0x04
    259   1.1   bouyer #define DIEN_IID	0x01
    260   1.1   bouyer 
    261   1.1   bouyer #define SIOP_SBR	0x3A /* scratch byte register, R/W */
    262   1.1   bouyer 
    263   1.1   bouyer #define SIOP_DCNTL	0x3B /* DMA control, R/W */
    264   1.1   bouyer #define DCNTL_CLSE	0x80
    265   1.1   bouyer #define DCNTL_PFF	0x40
    266   1.1   bouyer #define DCNTL_PFEN	0x20
    267   1.1   bouyer #define DCNTL_SSM	0x10
    268   1.1   bouyer #define DCNTL_IRQM	0x08
    269   1.1   bouyer #define DCNTL_STD	0x04
    270   1.1   bouyer #define DCNTL_IRQD	0x02
    271   1.1   bouyer #define DCNTL_COM	0x01
    272   1.1   bouyer 
    273   1.1   bouyer #define SIOP_ADDER	0x3C /* adder output sum, RO */
    274   1.1   bouyer 
    275   1.1   bouyer #define SIOP_SIEN0	0x40 /* SCSI interrupt enable 0, R/W */
    276   1.1   bouyer #define SIEN0_MA	0x80
    277   1.1   bouyer #define SIEN0_CMP	0x40
    278   1.1   bouyer #define SIEN0_SEL	0x20
    279   1.1   bouyer #define SIEN0_RSL	0x10
    280   1.1   bouyer #define SIEN0_SGE	0x08
    281   1.1   bouyer #define SIEN0_UDC	0x04
    282   1.1   bouyer #define SIEN0_SRT	0x02
    283   1.1   bouyer #define SIEN0_PAR	0x01
    284   1.1   bouyer 
    285   1.1   bouyer #define SIOP_SIEN1	0x41 /* SCSI interrupt enable 1, R/W */
    286   1.6   bouyer #define SIEN1_SBMC	0x10 /* 895 only */
    287   1.1   bouyer #define SIEN1_STO	0x04
    288   1.1   bouyer #define SIEN1_GEN	0x02
    289   1.1   bouyer #define SIEN1_HTH	0x01
    290   1.1   bouyer 
    291   1.1   bouyer #define SIOP_SIST0	0x42 /* SCSI interrupt status 0, RO */
    292   1.1   bouyer #define SIST0_MA	0x80
    293   1.1   bouyer #define SIST0_CMP	0x40
    294   1.1   bouyer #define SIST0_SEL	0x20
    295   1.1   bouyer #define SIST0_RSL	0x10
    296   1.1   bouyer #define SIST0_SGE	0x08
    297   1.1   bouyer #define SIST0_UDC	0x04
    298   1.1   bouyer #define SIST0_RST	0x02
    299   1.1   bouyer #define SIST0_PAR	0x01
    300   1.1   bouyer 
    301   1.1   bouyer #define SIOP_SIST1	0x43 /* SCSI interrut status 1, RO */
    302   1.6   bouyer #define SIST1_SBMC	0x10 /* 895 only */
    303   1.1   bouyer #define SIST1_STO	0x04
    304   1.1   bouyer #define SIST1_GEN	0x02
    305   1.1   bouyer #define SIST1_HTH	0x01
    306   1.1   bouyer 
    307   1.1   bouyer #define SIOP_SLPAR	0x44 /* scsi longitudinal parity, R/W */
    308   1.1   bouyer 
    309   1.1   bouyer #define SIOP_SWIDE	0x45 /* scsi wide residue, RW, 875 only */
    310   1.1   bouyer 
    311   1.1   bouyer #define SIOP_MACNTL	0x46 /* memory access control, R/W */
    312   1.1   bouyer 
    313   1.1   bouyer #define SIOP_GPCNTL	0x47 /* General Purpose Pin control, R/W */
    314   1.1   bouyer #define GPCNTL_ME	0x80	/* 875 only */
    315   1.1   bouyer #define GPCNTL_FE	0x40	/* 875 only */
    316   1.1   bouyer #define GPCNTL_IN4	0x10	/* 875 only */
    317   1.1   bouyer #define GPCNTL_IN3	0x08	/* 875 only */
    318   1.1   bouyer #define GPCNTL_IN2	0x04	/* 875 only */
    319   1.1   bouyer #define GPCNTL_IN1	0x02
    320   1.1   bouyer #define GPCNTL_IN0	0x01
    321   1.1   bouyer 
    322   1.1   bouyer #define SIOP_STIME0	0x48 /* SCSI timer 0, R/W */
    323   1.1   bouyer #define STIME0_HTH_SHIFT 4
    324   1.1   bouyer #define STIME0_HTH_MASK	0xf0
    325   1.1   bouyer #define STIME0_SEL_SHIFT 0
    326   1.1   bouyer #define STIME0_SEL_MASK	0x0f
    327   1.1   bouyer 
    328   1.1   bouyer #define SIOP_STIME1	0x49 /* SCSI timer 1, R/W */
    329   1.1   bouyer #define STIME1_HTHBA	0x40	/* 875 only */
    330   1.1   bouyer #define STIME1_GENSF	0x20	/* 875 only */
    331   1.1   bouyer #define STIME1_HTHSF	0x10	/* 875 only */
    332   1.1   bouyer #define STIME1_GEN_SHIFT 0
    333   1.1   bouyer #define STIME1_GEN_MASK	0x0f
    334   1.1   bouyer 
    335   1.1   bouyer #define SIOP_RESPID0	0x4A /* response ID, R/W */
    336   1.1   bouyer 
    337   1.1   bouyer #define SIOP_RESPID1	0x4B /* response ID, R/W, 875-only */
    338   1.1   bouyer 
    339   1.1   bouyer #define SIOP_STEST0	0x4C /* SCSI test 0, RO */
    340   1.1   bouyer 
    341   1.1   bouyer #define SIOP_STEST1	0x4D /* SCSI test 1, RO, RW on 875 */
    342  1.12   bouyer #define STEST1_DOGE	0x20	/* 1010 only */
    343  1.12   bouyer #define STEST1_DIGE	0x10	/* 1010 only */
    344   1.1   bouyer #define STEST1_DBLEN	0x08	/* 875-only */
    345   1.1   bouyer #define STEST1_DBLSEL	0x04	/* 875-only */
    346   1.1   bouyer 
    347   1.1   bouyer #define SIOP_STEST2	0x4E /* SCSI test 2, RO, R/W on 875 */
    348   1.1   bouyer #define STEST2_DIF	0x20	/* 875 only */
    349   1.1   bouyer #define STEST2_EXT	0x02
    350   1.1   bouyer 
    351   1.1   bouyer #define SIOP_STEST3	0x4F /* SCSI test 3, RO, RW on 875 */
    352   1.1   bouyer #define STEST3_TE	0x80
    353   1.4   bouyer #define STEST3_HSC	0x20
    354   1.4   bouyer 
    355   1.4   bouyer #define SIOP_STEST4	0x52 /* SCSI test 4, 895 only */
    356   1.4   bouyer #define STEST4_MODE_MASK 0xc0
    357   1.4   bouyer #define STEST4_MODE_DIF	0x40
    358   1.4   bouyer #define STEST4_MODE_SE	0x80
    359   1.4   bouyer #define STEST4_MODE_LVD	0xc0
    360   1.4   bouyer #define STEST4_LOCK	0x20
    361   1.4   bouyer #define STEST4_
    362   1.1   bouyer 
    363   1.1   bouyer #define SIOP_SIDL	0x50 /* SCSI input data latch, RO */
    364   1.1   bouyer 
    365   1.1   bouyer #define SIOP_SODL	0x54 /* SCSI output data latch, R/W */
    366   1.1   bouyer 
    367   1.1   bouyer #define SIOP_SBDL	0x58 /* SCSI bus data lines, RO */
    368   1.1   bouyer 
    369   1.1   bouyer #define SIOP_SCRATCHB	0x5C /* Scratch register B, R/W */
    370   1.1   bouyer 
    371   1.1   bouyer #define SIOP_SCRATCHC	0x60 /* Scratch register C, R/W, 875 only */
    372   1.1   bouyer 
    373   1.1   bouyer #define SIOP_SCRATCHD	0x64 /* Scratch register D, R/W, 875-only */
    374   1.1   bouyer 
    375   1.1   bouyer #define SIOP_SCRATCHE	0x68 /* Scratch register E, R/W, 875-only */
    376   1.1   bouyer 
    377   1.1   bouyer #define SIOP_SCRATCHF	0x6c /* Scratch register F, R/W, 875-only */
    378   1.1   bouyer 
    379   1.1   bouyer #define SIOP_SCRATCHG	0x70 /* Scratch register G, R/W, 875-only */
    380   1.1   bouyer 
    381   1.1   bouyer #define SIOP_SCRATCHH	0x74 /* Scratch register H, R/W, 875-only */
    382   1.1   bouyer 
    383   1.1   bouyer #define SIOP_SCRATCHI	0x78 /* Scratch register I, R/W, 875-only */
    384   1.1   bouyer 
    385   1.1   bouyer #define SIOP_SCRATCHJ	0x7c /* Scratch register J, R/W, 875-only */
    386  1.10   bouyer 
    387  1.10   bouyer #define SIOP_SCNTL4	0xBC /* SCSI control 4, R/W, 1010-only */
    388  1.10   bouyer #define SCNTL4_XCLKS_ST	0x01
    389  1.10   bouyer #define SCNTL4_XCLKS_DT	0x02
    390  1.10   bouyer #define SCNTL4_XCLKH_ST	0x04
    391  1.10   bouyer #define SCNTL4_XCLKH_DT	0x08
    392  1.10   bouyer #define SCNTL4_AIPEN	0x40
    393  1.10   bouyer #define SCNTL4_U3EN	0x80
    394   1.8   bouyer 
    395   1.8   bouyer #define SIOP_DFBC	0xf0 /* DMA fifo byte count, RO */
    396  1.13   bouyer 
    397  1.13   bouyer #define SIOP_AIPCNTL0	0xbe	/* AIP Control 0, 1010-only */
    398  1.13   bouyer #define AIPCNTL0_ERRLIVE 0x04	/* AIP error status, live */
    399  1.13   bouyer #define AIPCNTL0_ERR	0x02	/* AIP error status, latched */
    400  1.13   bouyer #define AIPCNTL0_PARITYERRs 0x01 /* Parity error */
    401  1.13   bouyer 
    402  1.13   bouyer #define SIOP_AIPCNTL1	0xbf	/* AIP Control 1, 1010-only */
    403  1.13   bouyer #define AIPCNTL1_DIS	0x08	/* disable AIP generation, 1010-66 only */
    404  1.13   bouyer #define AIPCNTL1_RSETERR 0x04	/* reset AIP error 1010-66 only */
    405  1.13   bouyer #define AIPCNTL1_FB	0x02	/* force bad AIP value 1010-66 only */
    406  1.13   bouyer #define AIPCNTL1_RSET	0x01	/* reset AIP sequence value 1010-66 only */
    407   1.9  thorpej 
    408   1.9  thorpej /*
    409   1.9  thorpej  * Non-volatile configuration settings stored in the EEPROM.  There
    410   1.9  thorpej  * are at least two known formats: Symbios Logic format and Tekram format.
    411   1.9  thorpej  */
    412   1.9  thorpej 
    413   1.9  thorpej #define	SIOP_NVRAM_SYM_SIZE		368
    414   1.9  thorpej #define	SIOP_NVRAM_SYM_ADDRESS		0x100
    415   1.9  thorpej 
    416   1.9  thorpej struct nvram_symbios {
    417   1.9  thorpej 	/* Header (6 bytes) */
    418   1.9  thorpej 	u_int16_t	type;		/* 0x0000 */
    419   1.9  thorpej 	u_int16_t	byte_count;	/* excluding header/trailer */
    420   1.9  thorpej 	u_int16_t	checksum;
    421   1.9  thorpej 
    422   1.9  thorpej 	/* Adapter configuration (20 bytes) */
    423   1.9  thorpej 	u_int8_t	v_major;
    424   1.9  thorpej 	u_int8_t	v_minor;
    425   1.9  thorpej 	u_int32_t	boot_crc;
    426   1.9  thorpej 	u_int16_t	flags;
    427   1.9  thorpej #define	NVRAM_SYM_F_SCAM_ENABLE		0x0001
    428   1.9  thorpej #define	NVRAM_SYM_F_PARITY_ENABLE	0x0002
    429   1.9  thorpej #define	NVRAM_SYM_F_VERBOSE_MESSAGES	0x0004
    430   1.9  thorpej #define	NVRAM_SYM_F_CHS_MAPPING		0x0008
    431   1.9  thorpej 	u_int16_t	flags1;
    432   1.9  thorpej #define	NVRAM_SYM_F1_SCAN_HI_LO		0x0001
    433   1.9  thorpej 	u_int16_t	term_state;
    434   1.9  thorpej #define	NVRAM_SYM_TERM_CANT_PROGRAM	0
    435   1.9  thorpej #define	NVRAM_SYM_TERM_ENABLED		1
    436   1.9  thorpej #define	NVRAM_SYM_TERM_DISABLED		2
    437   1.9  thorpej 	u_int16_t	rmvbl_flags;
    438   1.9  thorpej #define	NVRAM_SYM_RMVBL_NO_SUPPORT	0
    439   1.9  thorpej #define	NVRAM_SYM_RMVBL_BOOT_DEVICE	1
    440   1.9  thorpej #define	NVRAM_SYM_RMVBL_MEDIA_INSTALLED	2
    441   1.9  thorpej 	u_int8_t	host_id;
    442   1.9  thorpej 	u_int8_t	num_hba;
    443   1.9  thorpej 	u_int8_t	num_devices;
    444   1.9  thorpej 	u_int8_t	max_scam_devices;
    445   1.9  thorpej 	u_int8_t	num_valid_scam_devices;
    446   1.9  thorpej 	u_int8_t	rsvd;
    447   1.9  thorpej 
    448   1.9  thorpej 	/* Boot order (14 bytes x 4) */
    449   1.9  thorpej 	struct nvram_symbios_host {
    450   1.9  thorpej 		u_int16_t	type;		/* 4 - 8xx */
    451   1.9  thorpej 		u_int16_t	device_id;	/* PCI device ID */
    452   1.9  thorpej 		u_int16_t	vendor_id;	/* PCI vendor ID */
    453   1.9  thorpej 		u_int8_t	bus_nr;		/* PCI bus number */
    454   1.9  thorpej 		u_int8_t	device_fn;	/* PCI device/func # << 3 */
    455   1.9  thorpej 		u_int16_t	word8;
    456   1.9  thorpej 		u_int16_t	flags;
    457   1.9  thorpej #define	NVRAM_SYM_HOST_F_SCAN_AT_BOOT	0x0001
    458   1.9  thorpej 		u_int16_t	io_port;	/* PCI I/O address */
    459   1.9  thorpej 	} __attribute__((__packed__)) host[4];
    460   1.9  thorpej 
    461   1.9  thorpej 	/* Targets (8 bytes x 16) */
    462   1.9  thorpej 	struct nvram_symbios_target {
    463   1.9  thorpej 		u_int8_t	flags;
    464   1.9  thorpej #define	NVRAM_SYM_TARG_F_DISCONNECT_EN	0x0001
    465   1.9  thorpej #define	NVRAM_SYM_TARG_F_SCAN_AT_BOOT	0x0002
    466   1.9  thorpej #define	NVRAM_SYM_TARG_F_SCAN_LUNS	0x0004
    467   1.9  thorpej #define	NVRAM_SYM_TARG_F_TQ_EN		0x0008
    468   1.9  thorpej 		u_int8_t	rsvd;
    469   1.9  thorpej 		u_int8_t	bus_width;
    470   1.9  thorpej 		u_int8_t	sync_offset;	/* 8, 16, etc. */
    471   1.9  thorpej 		u_int16_t	sync_period;	/* 4 * factor */
    472   1.9  thorpej 		u_int16_t	timeout;
    473   1.9  thorpej 	} __attribute__((__packed__)) target[16];
    474   1.9  thorpej 
    475   1.9  thorpej 	/* SCAM table (8 bytes x 4) */
    476   1.9  thorpej 	struct nvram_symbios_scam {
    477   1.9  thorpej 		u_int16_t	id;
    478   1.9  thorpej 		u_int16_t	method;
    479   1.9  thorpej #define	NVRAM_SYM_SCAM_DEFAULT_METHOD	0
    480   1.9  thorpej #define	NVRAM_SYM_SCAM_DONT_ASSIGN	1
    481   1.9  thorpej #define	NVRAM_SYM_SCAM_SET_SPECIFIC_ID	2
    482   1.9  thorpej #define	NVRAM_SYM_SCAM_USE_ORDER_GIVEN	3
    483   1.9  thorpej 		u_int16_t	status;
    484   1.9  thorpej #define	NVRAM_SYM_SCAM_UNKNOWN		0
    485   1.9  thorpej #define	NVRAM_SYM_SCAM_DEVICE_NOT_FOUND	1
    486   1.9  thorpej #define	NVRAM_SYM_SCAM_ID_NOT_SET	2
    487   1.9  thorpej #define	NVRAM_SYM_SCAM_ID_VALID		3
    488   1.9  thorpej 		u_int8_t		target_id;
    489   1.9  thorpej 		u_int8_t		rsvd;
    490   1.9  thorpej 	} __attribute__((__packed__)) scam[4];
    491   1.9  thorpej 
    492   1.9  thorpej 	u_int8_t	spare_devices[15 * 8];
    493   1.9  thorpej 	u_int8_t	trailer[6];	/* 0xfe 0xfe 0x00 0x00 0x00 0x00 */
    494   1.9  thorpej } __attribute__((__packed__));
    495   1.9  thorpej 
    496   1.9  thorpej #define	SIOP_NVRAM_TEK_SIZE		64
    497   1.9  thorpej #define	SIOP_NVRAM_TEK_93c46_ADDRESS	0
    498   1.9  thorpej #define	SIOP_NVRAM_TEK_24c16_ADDRESS	0x40
    499   1.9  thorpej 
    500   1.9  thorpej static const u_int8_t tekram_sync_table[16] __attribute__((__unused__)) = {
    501   1.9  thorpej 	25, 31, 37,  43,
    502   1.9  thorpej 	50, 62, 75, 125,
    503   1.9  thorpej 	12, 15, 18,  21,
    504   1.9  thorpej 	 6,  7,  9,  10,
    505   1.9  thorpej };
    506   1.9  thorpej 
    507   1.9  thorpej struct nvram_tekram {
    508   1.9  thorpej 	struct nvram_tekram_target {
    509   1.9  thorpej 		u_int8_t	flags;
    510   1.9  thorpej #define	NVRAM_TEK_TARG_F_PARITY_CHECK	0x01
    511   1.9  thorpej #define	NVRAM_TEK_TARG_F_SYNC_NEGO	0x02
    512   1.9  thorpej #define	NVRAM_TEK_TARG_F_DISCONNECT_EN	0x04
    513   1.9  thorpej #define	NVRAM_TEK_TARG_F_START_CMD	0x08
    514   1.9  thorpej #define	NVRAM_TEK_TARG_F_TQ_EN		0x10
    515   1.9  thorpej #define	NVRAM_TEK_TARG_F_WIDE_NEGO	0x20
    516   1.9  thorpej 		u_int8_t	sync_index;
    517   1.9  thorpej 		u_int16_t	word2;
    518   1.9  thorpej 	} __attribute__((__packed__)) target[16];
    519   1.9  thorpej 	u_int8_t	host_id;
    520   1.9  thorpej 	u_int8_t	flags;
    521   1.9  thorpej #define	NVRAM_TEK_F_MORE_THAN_2_DRIVES	0x01
    522   1.9  thorpej #define	NVRAM_TEK_F_DRIVES_SUP_1G	0x02
    523   1.9  thorpej #define	NVRAM_TEK_F_RESET_ON_POWER_ON	0x04
    524   1.9  thorpej #define	NVRAM_TEK_F_ACTIVE_NEGATION	0x08
    525   1.9  thorpej #define	NVRAM_TEK_F_IMMEDIATE_SEEK	0x10
    526   1.9  thorpej #define	NVRAM_TEK_F_SCAN_LUNS		0x20
    527   1.9  thorpej #define	NVRAM_TEK_F_REMOVABLE_FLAGS	0xc0	/* 0 dis, 1 boot, 2 all */
    528   1.9  thorpej 	u_int8_t	boot_delay_index;
    529   1.9  thorpej 	u_int8_t	max_tags_index;
    530   1.9  thorpej 	u_int16_t	flags1;
    531   1.9  thorpej #define	NVRAM_TEK_F_F2_F6_ENABLED	0x0001
    532   1.9  thorpej 	u_int16_t	spare[29];
    533   1.9  thorpej } __attribute__((__packed__));
    534