Home | History | Annotate | Line # | Download | only in tc
tcdsreg.h revision 1.3
      1  1.3       wiz /* $NetBSD: tcdsreg.h,v 1.3 2003/05/03 18:11:41 wiz Exp $ */
      2  1.1  nisimura 
      3  1.1  nisimura /*
      4  1.1  nisimura  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
      5  1.1  nisimura  * All rights reserved.
      6  1.1  nisimura  *
      7  1.1  nisimura  * Authors: Keith Bostic, Chris G. Demetriou
      8  1.1  nisimura  *
      9  1.1  nisimura  * Permission to use, copy, modify and distribute this software and
     10  1.1  nisimura  * its documentation is hereby granted, provided that both the copyright
     11  1.1  nisimura  * notice and this permission notice appear in all copies of the
     12  1.1  nisimura  * software, derivative works or modified versions, and any portions
     13  1.1  nisimura  * thereof, and that both notices appear in supporting documentation.
     14  1.1  nisimura  *
     15  1.1  nisimura  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
     16  1.1  nisimura  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
     17  1.1  nisimura  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     18  1.1  nisimura  *
     19  1.1  nisimura  * Carnegie Mellon requests users of this software to return to
     20  1.1  nisimura  *
     21  1.1  nisimura  *  Software Distribution Coordinator  or  Software.Distribution (at) CS.CMU.EDU
     22  1.1  nisimura  *  School of Computer Science
     23  1.1  nisimura  *  Carnegie Mellon University
     24  1.1  nisimura  *  Pittsburgh PA 15213-3890
     25  1.1  nisimura  *
     26  1.1  nisimura  * any improvements or extensions that they make and grant Carnegie the
     27  1.1  nisimura  * rights to redistribute these changes.
     28  1.1  nisimura  */
     29  1.1  nisimura 
     30  1.1  nisimura /*
     31  1.1  nisimura  * Offsets to the SCSI chips
     32  1.1  nisimura  */
     33  1.1  nisimura #define	TCDS_SCSI0_OFFSET	0x080000
     34  1.1  nisimura #define	TCDS_SCSI1_OFFSET	0x080100
     35  1.1  nisimura 
     36  1.1  nisimura /*
     37  1.1  nisimura  * TCDS register offsets, bit masks.
     38  1.1  nisimura  */
     39  1.1  nisimura #define	TCDS_EEPROM		  0x000000	/* EEPROM offset */
     40  1.1  nisimura #define	TCDS_EEPROM_IDS		  0x000008	/* SCSI IDs offset in EEPROM */
     41  1.1  nisimura 
     42  1.1  nisimura #define	TCDS_CIR		  0x040000	/* CIR offset */
     43  1.1  nisimura 
     44  1.1  nisimura /*
     45  1.1  nisimura  * TCDS CIR control bits.
     46  1.1  nisimura  */
     47  1.1  nisimura #define	TCDS_CIR_GPO_0		0x00000001	/* Not used */
     48  1.1  nisimura #define	TCDS_CIR_GPO_1		0x00000002	/* Not used */
     49  1.1  nisimura #define	TCDS_CIR_GPO_2		0x00000004	/* Not used */
     50  1.1  nisimura #define	TCDS_CIR_STD		0x00000008	/* Serial transmit disable */
     51  1.1  nisimura #define	TCDS_CIR_GPI_0		0x00000010	/* Not used */
     52  1.1  nisimura #define	TCDS_CIR_GPI_1		0x00000020	/* Not used */
     53  1.1  nisimura #define	TCDS_CIR_GPI_2		0x00000040	/* 1 = 25MHz, 0 = 40MHz */
     54  1.1  nisimura #define	TCDS_CIR_GPI_3		0x00000080	/* Not used */
     55  1.1  nisimura #define TCDS_CIR_SCSI0_DMAENA	0x00000100	/* SCSI 0 DMA enable */
     56  1.1  nisimura #define TCDS_CIR_SCSI1_DMAENA	0x00000200	/* SCSI 1 DMA enable */
     57  1.1  nisimura #define	TCDS_CIR_SCSI0_RESET	0x00000400	/* SCSI 0 reset */
     58  1.1  nisimura #define	TCDS_CIR_SCSI1_RESET	0x00000800	/* SCSI 1 reset */
     59  1.1  nisimura #define	TCDS_CIR_SCSI0_DMA_TEST	0x00001000	/* SCSI 0 DMA buf parity test */
     60  1.1  nisimura #define	TCDS_CIR_SCSI1_DMA_TEST	0x00002000	/* SCSI 1 DMA buf parity test */
     61  1.1  nisimura #define	TCDS_CIR_DB_PAR		0x00004000	/* DB parity test mode */
     62  1.1  nisimura #define	TCDS_CIR_TC_PAR		0x00008000	/* TC parity test mode */
     63  1.1  nisimura #define	TCDS_CIR_ALLCONTROL	0x0000ffff	/* all control bits */
     64  1.1  nisimura 
     65  1.1  nisimura /* TCDS CIR interrupt bits. */
     66  1.1  nisimura #define	TCDS_CIR_SCSI0_DREQ	0x00010000	/* SCSI 0 DREQ */
     67  1.1  nisimura #define	TCDS_CIR_SCSI1_DREQ	0x00020000	/* SCSI 1 DREQ */
     68  1.1  nisimura #define	TCDS_CIR_SCSI0_INT	0x00040000	/* SCSI 0 interrupt */
     69  1.1  nisimura #define	TCDS_CIR_SCSI1_INT	0x00080000	/* SCSI 1 interrupt */
     70  1.1  nisimura #define	TCDS_CIR_SCSI0_PREFETCH	0x00100000	/* SCSI 0 prefetch */
     71  1.1  nisimura #define	TCDS_CIR_SCSI1_PREFETCH	0x00200000	/* SCSI 1 prefetch */
     72  1.1  nisimura #define	TCDS_CIR_SCSI0_DMA	0x00400000	/* SCSI 0 DMA error */
     73  1.1  nisimura #define	TCDS_CIR_SCSI1_DMA	0x00800000	/* SCSI 1 DMA error */
     74  1.1  nisimura #define	TCDS_CIR_SCSI0_DB	0x01000000	/* SCSI 0 DB parity */
     75  1.1  nisimura #define	TCDS_CIR_SCSI1_DB	0x02000000	/* SCSI 1 DB parity */
     76  1.1  nisimura #define	TCDS_CIR_SCSI0_DMAB_PAR	0x04000000	/* SCSI 0 DMA buffer parity */
     77  1.1  nisimura #define	TCDS_CIR_SCSI1_DMAB_PAR	0x08000000	/* SCSI 1 DMA buffer parity */
     78  1.1  nisimura #define	TCDS_CIR_SCSI0_DMAR_PAR	0x10000000	/* SCSI 0 DMA read parity */
     79  1.1  nisimura #define	TCDS_CIR_SCSI1_DMAR_PAR	0x20000000	/* SCSI 1 DMA read parity */
     80  1.1  nisimura #define	TCDS_CIR_TCIOW_PAR	0x40000000	/* TC I/O write parity */
     81  1.1  nisimura #define	TCDS_CIR_TCIOA_PAR	0x80000000	/* TC I/O address parity */
     82  1.1  nisimura #define	TCDS_CIR_ALLINTR	0xffff0000	/* all interrupt bits */
     83  1.1  nisimura 
     84  1.1  nisimura #define TCDS_CIR_CLR(c, b)	c = ((c | TCDS_CIR_ALLINTR) & ~b)
     85  1.1  nisimura #define TCDS_CIR_SET(c, b)	c = ((c | TCDS_CIR_ALLINTR) | b)
     86  1.1  nisimura 
     87  1.1  nisimura /* TCDS IMER masks and enables, for interrupts in the CIR. */
     88  1.1  nisimura #define	TCDS_IMER_SCSI0_MASK	      0x04	/* SCSI 0 intr/enable mask */
     89  1.1  nisimura #define	TCDS_IMER_SCSI1_MASK	      0x08	/* SCSI 1 intr/enable mask */
     90  1.1  nisimura #define	TCDS_IMER_SCSI0_ENB	(TCDS_IMER_SCSI0_MASK << 16)
     91  1.1  nisimura #define	TCDS_IMER_SCSI1_ENB	(TCDS_IMER_SCSI1_MASK << 16)
     92  1.1  nisimura #define	TCDS_IMER		  0x040004	/* IMER offset */
     93  1.1  nisimura 
     94  1.1  nisimura #define	TCDS_SCSI0_DMA_ADDR	  0x041000	/* DMA address */
     95  1.1  nisimura #define	TCDS_SCSI0_DMA_INTR	  0x041004	/* DMA interrupt control */
     96  1.1  nisimura #define	TCDS_SCSI0_DMA_DUD0	  0x041008	/* DMA unaligned data[0] */
     97  1.1  nisimura #define	TCDS_SCSI0_DMA_DUD1	  0x04100c	/* DMA unaligned data[1] */
     98  1.1  nisimura 
     99  1.1  nisimura #define	TCDS_SCSI1_DMA_ADDR	  0x041100	/* DMA address */
    100  1.1  nisimura #define	TCDS_SCSI1_DMA_INTR	  0x041104	/* DMA interrupt control */
    101  1.1  nisimura #define	TCDS_SCSI1_DMA_DUD0	  0x041108	/* DMA unaligned data[0] */
    102  1.1  nisimura #define	TCDS_SCSI1_DMA_DUD1	  0x04110c	/* DMA unaligned data[1] */
    103  1.1  nisimura 
    104  1.1  nisimura #define	TCDS_DIC_ADDRMASK	      0x03	/* DMA address bits <1:0> */
    105  1.1  nisimura #define	TCDS_DIC_READ_PREFETCH	      0x40	/* DMA read prefetch enable */
    106  1.1  nisimura #define	TCDS_DIC_WRITE		      0x80	/* DMA write */
    107  1.1  nisimura 
    108  1.1  nisimura #define	TCDS_DUD0_VALID00	0x00000001	/* byte 00 valid mask (zero) */
    109  1.1  nisimura #define	TCDS_DUD0_VALID01	0x00000002	/* byte 01 valid mask */
    110  1.1  nisimura #define	TCDS_DUD0_VALID10	0x00000004	/* byte 10 valid mask */
    111  1.1  nisimura #define	TCDS_DUD0_VALID11	0x00000008	/* byte 11 valid mask */
    112  1.1  nisimura #define	TCDS_DUD0_VALIDBITS	0x0000000f	/* bits that show valid bytes */
    113  1.1  nisimura 
    114  1.1  nisimura #define	TCDS_DUD1_VALID00	0x01000000	/* byte 00 valid mask */
    115  1.1  nisimura #define	TCDS_DUD1_VALID01	0x02000000	/* byte 01 valid mask */
    116  1.1  nisimura #define	TCDS_DUD1_VALID10	0x04000000	/* byte 10 valid mask */
    117  1.1  nisimura #define	TCDS_DUD1_VALID11	0x08000000	/* byte 11 valid mask (zero) */
    118  1.1  nisimura #define	TCDS_DUD1_VALIDBITS	0x0f000000	/* bits that show valid bytes */
    119  1.1  nisimura 
    120  1.1  nisimura #define	TCDS_DUD_BYTE00		0x000000ff	/* byte 00 mask */
    121  1.1  nisimura #define	TCDS_DUD_BYTE01		0x0000ff00	/* byte 01 mask */
    122  1.1  nisimura #define	TCDS_DUD_BYTE10		0x00ff0000	/* byte 10 mask */
    123  1.1  nisimura #define	TCDS_DUD_BYTE11		0xff000000	/* byte 11 mask */
    124  1.1  nisimura 
    125  1.1  nisimura #if 0
    126  1.1  nisimura int  tcds_scsi_iserr __P((struct dma_softc *));
    127  1.1  nisimura int  tcds_scsi_isintr __P((int, int));
    128  1.1  nisimura void tcds_dma_disable __P((int));
    129  1.1  nisimura void tcds_dma_enable __P((int));
    130  1.1  nisimura void tcds_dma_init __P((struct dma_softc *, int));
    131  1.1  nisimura void tcds_scsi_disable __P((int));
    132  1.1  nisimura void tcds_scsi_enable __P((int));
    133  1.1  nisimura void tcds_scsi_reset __P((int));
    134  1.1  nisimura 
    135  1.1  nisimura /*
    136  1.1  nisimura  * XXX
    137  1.1  nisimura  * Start of MACH #defines, minimal changes to port to NetBSD.
    138  1.1  nisimura  *
    139  1.1  nisimura  * The following register is the SCSI control interrupt register.  It
    140  1.1  nisimura  * starts, stops and resets scsi DMA.  It takes over the SCSI funtions
    141  1.1  nisimura  * that were handled by the ASIC on the 3min.
    142  1.1  nisimura  */
    143  1.1  nisimura #define KN15AA_SYS_SCSI		0x1d0000000
    144  1.1  nisimura #define KN15AA_REG_SCSI_CIR	(KN15AA_SYS_SCSI + 0x80000)
    145  1.1  nisimura #define SCSI_CIR_AIOPAR		0x80000000 /* TC IO Address parity error */
    146  1.1  nisimura #define SCSI_CIR_WDIOPAR	0x40000000 /* TC IO  write data parity error */
    147  1.1  nisimura #define SCSI_CIR_DMARPAR1	0x20000000 /* SCSI[1] TC DMA read data parity */
    148  1.1  nisimura #define SCSI_CIR_DMARPAR0	0x10000000 /* SCSI[0] TC DMA read data parity */
    149  1.1  nisimura #define SCSI_CIR_DMABUFPAR1	0x08000000 /* SCSI[1] DMA buffer parity error */
    150  1.1  nisimura #define SCSI_CIR_DMABUFPAR0	0x04000000 /* SCSI[0] DMA buffer parity error */
    151  1.1  nisimura #define SCSI_CIR_DBPAR1		0x02000000 /* SCSI[1] DB parity error */
    152  1.1  nisimura #define SCSI_CIR_DBPAR0		0x01000000 /* SCSI[0] DB parity error */
    153  1.1  nisimura #define SCSI_CIR_DMAERR1	0x00800000 /* SCSI[1] DMA error */
    154  1.1  nisimura #define SCSI_CIR_DMAERR0	0x00400000 /* SCSI[0] DMA error */
    155  1.1  nisimura #if fmm50
    156  1.1  nisimura #define SCSI_CIR_xxx0		0x00200000 /* RESERVED */
    157  1.1  nisimura #define SCSI_CIR_xxx1		0x00100000 /* RESERVED */
    158  1.1  nisimura #else
    159  1.2       wiz #define SCSI_CIR_PREF1		0x00200000 /* 53C94 prefetch interrupt */
    160  1.2       wiz #define SCSI_CIR_PREF0		0x00100000 /* 53C94 prefetch interrupt */
    161  1.1  nisimura #endif
    162  1.1  nisimura #define SCSI_CIR_53C94_INT1	0x00080000 /* SCSI[1] 53C94 Interupt */
    163  1.1  nisimura #define SCSI_CIR_53C94_INT0	0x00040000 /* SCSI[0] 53C94 Interupt */
    164  1.1  nisimura #define SCSI_CIR_53C94_DREQ1	0x00020000 /* SCSI[1] 53C94 DREQ */
    165  1.1  nisimura #define SCSI_CIR_53C94_DREQ0	0x00010000 /* SCSI[0] 53C94 DREQ */
    166  1.1  nisimura #define SCSI_CIR_TC_PAR_TEST	0x00008000 /* TC parity test mode */
    167  1.1  nisimura #define SCSI_CIR_DB_PAR_TEST	0x00004000 /* DB parity test mode */
    168  1.1  nisimura #define SCSI_CIR_DBUF_PAR_TEST1	0x00002000 /* SCSI[1] DMA buffer parity test */
    169  1.1  nisimura #define SCSI_CIR_DBUF_PAR_TEST0	0x00001000 /* SCSI[0] DMA buffer parity test */
    170  1.1  nisimura #define SCSI_CIR_RESET1		0x00000800 /* SCSI[1] ~Reset,enable(0)/disable(1) */
    171  1.1  nisimura #define SCSI_CIR_RESET0		0x00000400 /* SCSI[0] ~Reset,enable(0)/disable(1) */
    172  1.1  nisimura #define SCSI_CIR_DMAENA1	0x00000200 /* SCSI[1] DMA enable */
    173  1.1  nisimura #define SCSI_CIR_DMAENA0	0x00000100 /* SCSI[1] DMA enable */
    174  1.1  nisimura #define SCSI_CIR_GPI3		0x00000080 /* General purpose input <3> */
    175  1.1  nisimura #define SCSI_CIR_GPI2		0x00000040 /* General purpose input <2> */
    176  1.1  nisimura #define SCSI_CIR_GPI1		0x00000020 /* General purpose input <1> */
    177  1.1  nisimura #define SCSI_CIR_GPI0		0x00000010 /* General purpose input <0> */
    178  1.1  nisimura #define SCSI_CIR_TXDIS		0x00000008 /* TXDIS- serial transmit disable */
    179  1.1  nisimura #define SCSI_CIR_GPO2		0x00000004 /* General purpose output <2> */
    180  1.1  nisimura #define SCSI_CIR_GPO1		0x00000002 /* General purpose output <1> */
    181  1.1  nisimura #define SCSI_CIR_GPO0		0x00000001 /* General purpose output <0> */
    182  1.1  nisimura #define SCSI_CIR_ERROR (SCSI_CIR_AIOPAR | SCSI_CIR_WDIOPAR | SCSI_CIR_DMARPAR1 | SCSI_CIR_DMARPAR0 | SCSI_CIR_DMABUFPAR1 | SCSI_CIR_DMABUFPAR0 | SCSI_CIR_DBPAR1 |SCSI_CIR_DBPAR0 | SCSI_CIR_DMAERR1 | SCSI_CIR_DMAERR0 )
    183  1.1  nisimura 
    184  1.1  nisimura #define KN15AA_REG_SCSI_DMAPTR0 (KN15AA_SYS_SCSI + 0x82000)
    185  1.1  nisimura #define KN15AA_REG_SCSI_DMAPTR1 (KN15AA_SYS_SCSI + 0x82200)
    186  1.1  nisimura 
    187  1.1  nisimura #define KN15AA_REG_SCSI_DIC0 (KN15AA_SYS_SCSI + 0x82008)
    188  1.1  nisimura #define KN15AA_REG_SCSI_DIC1 (KN15AA_SYS_SCSI + 0x82208)
    189  1.1  nisimura #define SCSI_DIC_DMADIR		0x00000080 /* DMA direction read(0)/write(1) */
    190  1.1  nisimura #define SCSI_DIC_PREFENA	0x00000040 /* DMA read prefetch dis(0)/ena(1) */
    191  1.1  nisimura #define SCSI_DIC_DMAADDR1	0x00000002 /* DMA address <1> */
    192  1.1  nisimura #define SCSI_DIC_DMAADDR0	0x00000001 /* DMA address <0> */
    193  1.1  nisimura #define SCSI_DIC_ADDR_MASK	(SCSI_DIC_DMAADDR0 |SCSI_DIC_DMAADDR1)
    194  1.1  nisimura 
    195  1.1  nisimura #define KN15AA_REG_SCSI_94REG0	(KN15AA_SYS_SCSI + 0x100000)
    196  1.1  nisimura #define KN15AA_REG_SCSI_94REG1	(KN15AA_SYS_SCSI + 0x100200)
    197  1.1  nisimura 
    198  1.1  nisimura #define KN15AA_REG_SCSI_IMER	(KN15AA_SYS_SCSI + 0x80008)
    199  1.1  nisimura 
    200  1.3       wiz /* these are the bits that were unalligned at the beginning of the DMA */
    201  1.1  nisimura #define KN15AA_REG_SCSI_DUDB0	(KN15AA_SYS_SCSI + 0x82010)
    202  1.1  nisimura #define KN15AA_REG_SCSI_DUDB1	(KN15AA_SYS_SCSI + 0x82210)
    203  1.1  nisimura #	define SCSI_DUDB_MASK01	0x00000001 /* Mask bit for byte[01] */
    204  1.1  nisimura #	define SCSI_DUDB_MASK10	0x00000002 /* Mask bit for byte[10] */
    205  1.1  nisimura #	define SCSI_DUDB_MASK11	0x00000004 /* Mask bit for byte[11] */
    206  1.1  nisimura 
    207  1.3       wiz /* these are the bits that were unalligned at the end of the DMA */
    208  1.1  nisimura #define KN15AA_REG_SCSI_DUDE0	(KN15AA_SYS_SCSI + 0x82018)
    209  1.1  nisimura #define KN15AA_REG_SCSI_DUDE1	(KN15AA_SYS_SCSI + 0x82218)
    210  1.1  nisimura #	define SCSI_DUDE_MASK00	0x1000000 /* Mask bit for byte[00] */
    211  1.1  nisimura #	define SCSI_DUDE_MASK01	0x2000000 /* Mask bit for byte[01] */
    212  1.1  nisimura #	define SCSI_DUDE_MASK10	0x4000000 /* Mask bit for byte[10] */
    213  1.1  nisimura 
    214  1.1  nisimura #define	SCSI_CIR	ALPHA_PHYS_TO_K0SEG(KN15AA_REG_SCSI_CIR)
    215  1.1  nisimura #define	SCSI_IMER	ALPHA_PHYS_TO_K0SEG(KN15AA_REG_SCSI_IMER)
    216  1.1  nisimura 
    217  1.1  nisimura #endif
    218