1 1.9 msaitoh /* $NetBSD: tcdsreg.h,v 1.9 2021/12/05 02:59:50 msaitoh 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.6 perry * 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.6 perry * 15 1.6 perry * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 16 1.6 perry * 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.6 perry * 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.5 perry int tcds_scsi_iserr(struct dma_softc *); 127 1.5 perry int tcds_scsi_isintr(int, int); 128 1.5 perry void tcds_dma_disable(int); 129 1.5 perry void tcds_dma_enable(int); 130 1.5 perry void tcds_dma_init(struct dma_softc *, int); 131 1.5 perry void tcds_scsi_disable(int); 132 1.5 perry void tcds_scsi_enable(int); 133 1.5 perry void tcds_scsi_reset(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.6 perry * 139 1.1 nisimura * The following register is the SCSI control interrupt register. It 140 1.9 msaitoh * starts, stops and resets scsi DMA. It takes over the SCSI functions 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.4 wiz #define SCSI_CIR_53C94_INT1 0x00080000 /* SCSI[1] 53C94 Interrupt */ 163 1.4 wiz #define SCSI_CIR_53C94_INT0 0x00040000 /* SCSI[0] 53C94 Interrupt */ 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.8 msaitoh /* these are the bits that were unaligned 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.8 msaitoh /* these are the bits that were unaligned 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