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