1 /* $NetBSD: mscreg.h,v 1.9 2007/02/22 05:04:12 thorpej Exp $ */ 2 3 /* 4 * Copyright (c) 1982, 1986, 1990 Regents of the University of California. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the University nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * - created by zik 931207 32 * - Fixed break value. 950108 RFH 33 * - Added 6502 field to mscmemory so board can be halted while 34 * it's memory is being reloaded. 950108 RFH 35 * - Ripped out structure guts and replaced with Jukka Marin's stuff for his 36 * freely redistributable version of the 2232 6502c code. Yea!!!!!! 37 * 950916 RFH 38 * - Added Jukka's turbo board detection support and tmpbuf for copys. 950918 39 * - Change to NetBSD style for integration in to the main tree. 950919 40 */ 41 42 /* 43 * Copyright (c) 1993 Zik. 44 * Copyright (c) 1995 Jukka Marin <jmarin@teeri.jmp.fi>. 45 * Copyright (c) 1995 Rob Healey <rhealey@kas.helios.mn.org>. 46 * 47 * Redistribution and use in source and binary forms, with or without 48 * modification, are permitted provided that the following conditions 49 * are met: 50 * 1. Redistributions of source code must retain the above copyright 51 * notice, this list of conditions and the following disclaimer. 52 * 2. Redistributions in binary form must reproduce the above copyright 53 * notice, this list of conditions and the following disclaimer in the 54 * documentation and/or other materials provided with the distribution. 55 * 3. All advertising materials mentioning features or use of this software 56 * must display the following acknowledgement: 57 * This product includes software developed by the University of 58 * California, Berkeley and its contributors. 59 * 4. Neither the name of the University nor the names of its contributors 60 * may be used to endorse or promote products derived from this software 61 * without specific prior written permission. 62 * 63 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 64 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 65 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 66 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 67 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 68 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 69 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 70 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 71 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 72 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 73 * SUCH DAMAGE. 74 * 75 * - created by zik 931207 76 * - Fixed break value. 950108 RFH 77 * - Added 6502 field to mscmemory so board can be halted while 78 * it's memory is being reloaded. 950108 RFH 79 * - Ripped out structure guts and replaced with Jukka Marin's stuff for his 80 * freely redistributable version of the 2232 6502c code. Yea!!!!!! 81 * 950916 RFH 82 * - Added Jukka's turbo board detection support and tmpbuf for copys. 950918 83 * - Change to NetBSD style for integration in to the main tree. 950919 84 */ 85 86 #define NUMLINES 7 /* number of lines per card */ 87 #define IOBUFLEN 256 /* number of bytes per buffer */ 88 #define IOBUFLENMASK 0xff /* mask for maximum number of bytes */ 89 #define IOBUFHIGHWATER 192 /* point at which to enable output */ 90 #define IOBUFLOWWATER 128 /* point at which to wake output */ 91 92 #define MSC_VBL_PRIORITY 1 /* priority of vbl interrupt handler */ 93 94 #define MSC_UNKNOWN 0 /* crystal not known */ 95 #define MSC_NORMAL 1 /* normal A2232 (1.8432 MHz oscillator) */ 96 #define MSC_TURBO 2 /* turbo A2232 (3.6864 MHz oscillator) */ 97 98 99 struct msccommon { 100 char Crystal; /* normal (1) or turbo (2) board? */ 101 u_char Pad_a; 102 u_char TimerH; /* timer value after speed check */ 103 u_char TimerL; 104 u_char CDHead; /* head pointer for CD message queue */ 105 u_char CDTail; /* tail pointer for CD message queue */ 106 u_char CDStatus; 107 u_char Pad_b; 108 }; 109 110 struct mscstatus { 111 u_char InHead; /* input queue head */ 112 u_char InTail; /* input queue tail */ 113 u_char OutDisable; /* disables output */ 114 u_char OutHead; /* output queue head */ 115 u_char OutTail; /* output queue tail */ 116 u_char OutCtrl; /* soft flow control character to send */ 117 u_char OutFlush; /* flushes output buffer */ 118 u_char Setup; /* causes reconfiguration */ 119 u_char Param; /* parameter byte - see MSCPARAM */ 120 u_char Command; /* command byte - see MSCCMD */ 121 u_char SoftFlow; /* enables xon/xoff flow control */ 122 /* private 65C02 fields: */ 123 u_char XonOff; /* stores XON/XOFF enable/disable */ 124 }; 125 126 #define MSC_MEMPAD1 \ 127 (0x0200 - NUMLINES * sizeof(struct mscstatus) - sizeof(struct msccommon)) 128 #define MSC_MEMPAD2 (0x2000 - NUMLINES * IOBUFLEN - IOBUFLEN) 129 130 struct mscmemory { 131 struct mscstatus Status[NUMLINES]; /* 0x0000-0x006f status areas */ 132 struct msccommon Common; /* 0x0070-0x0077 common flags */ 133 u_char Dummy1[MSC_MEMPAD1]; /* 0x00XX-0x01ff */ 134 u_char OutBuf[NUMLINES][IOBUFLEN]; /* 0x0200-0x08ff output bufs */ 135 u_char InBuf[NUMLINES][IOBUFLEN]; /* 0x0900-0x0fff input bufs */ 136 u_char InCtl[NUMLINES][IOBUFLEN]; /* 0x1000-0x16ff control data */ 137 u_char CDBuf[IOBUFLEN]; /* 0x1700-0x17ff CD event buffer */ 138 u_char Dummy2[MSC_MEMPAD2]; /* 0x1800-0x2fff */ 139 u_char Code[0x1000]; /* 0x3000-0x3fff code area */ 140 u_short InterruptAck; /* 0x4000 intr ack */ 141 u_char Dummy3[0x3ffe]; /* 0x4002-0x7fff */ 142 u_short Enable6502Reset; /* 0x8000 Stop board, */ 143 /* 6502 RESET line held low */ 144 u_char Dummy4[0x3ffe]; /* 0x8002-0xbfff */ 145 u_short ResetBoard; /* 0xc000 reset board & run, */ 146 /* 6502 RESET line held high */ 147 }; 148 149 #undef MSC_MEMPAD1 150 #undef MSC_MEMPAD2 151 152 struct mscdevice { 153 volatile struct mscmemory *board; /* where the board is located */ 154 int flags; /* modem control flags */ 155 int openflags; /* flags for device open */ 156 u_char unit; /* which unit (ie. which board) */ 157 u_char port; /* which port on the board (0-6) */ 158 u_char active; /* does this port have hardware? */ 159 u_char closing; /* are we flushing before close? */ 160 char tmpbuf[IOBUFLEN]; /* temp buffer for data transfers */ 161 }; 162 163 #define MSCINCTL_CHAR 0 /* corresponding byte in InBuf is a character */ 164 #define MSCINCTL_EVENT 1 /* corresponding byte in InBuf is an event */ 165 166 #define MSCEVENT_Break 1 /* break set */ 167 #define MSCEVENT_CarrierOn 2 /* carrier raised */ 168 #define MSCEVENT_CarrierOff 3 /* carrier dropped */ 169 170 #define MSCCMD_Enable 0x1 /* enable/DTR bit */ 171 #define MSCCMD_Close 0x2 /* close the device */ 172 #define MSCCMD_Open 0xb /* open the device */ 173 #define MSCCMD_CMask 0xf /* command mask */ 174 #define MSCCMD_RTSOff 0x0 /* turn off RTS */ 175 #define MSCCMD_RTSOn 0x8 /* turn on RTS */ 176 #define MSCCMD_Break 0xd /* transmit a break */ 177 #define MSCCMD_RTSMask 0xc /* mask for RTS stuff */ 178 #define MSCCMD_NoParity 0x00 /* don't use parity */ 179 #define MSCCMD_OddParity 0x20 /* odd parity */ 180 #define MSCCMD_EvenParity 0x60 /* even parity */ 181 #define MSCCMD_ParityMask 0xe0 /* parity mask */ 182 183 #define MSCPARAM_B115200 0x0 /* baud rates */ 184 #define MSCPARAM_B50 0x1 185 #define MSCPARAM_B75 0x2 186 #define MSCPARAM_B110 0x3 187 #define MSCPARAM_B134 0x4 188 #define MSCPARAM_B150 0x5 189 #define MSCPARAM_B300 0x6 190 #define MSCPARAM_B600 0x7 191 #define MSCPARAM_B1200 0x8 192 #define MSCPARAM_B1800 0x9 193 #define MSCPARAM_B2400 0xa 194 #define MSCPARAM_B3600 0xb 195 #define MSCPARAM_B4800 0xc 196 #define MSCPARAM_B7200 0xd 197 #define MSCPARAM_B9600 0xe 198 #define MSCPARAM_B19200 0xf 199 #define MSCPARAM_BaudMask 0xf /* baud rate mask */ 200 #define MSCPARAM_RcvBaud 0x10 /* enable receive baud rate */ 201 #define MSCPARAM_8Bit 0x00 /* numbers of bits */ 202 #define MSCPARAM_7Bit 0x20 203 #define MSCPARAM_6Bit 0x40 204 #define MSCPARAM_5Bit 0x60 205 #define MSCPARAM_BitMask 0x60 /* numbers of bits mask */ 206 207 /* tty number from device */ 208 #define MSCTTY(dev) (minor(dev) & 0x7e) 209 210 /* slot number from device */ 211 #define MSCSLOT(dev) ((minor(dev) & 0x7e)>>1) 212 213 /* dialin mode from device */ 214 #define MSCDIALIN(dev) (minor(dev) & 0x01) 215 216 /* board number from device */ 217 #define MSCBOARD(dev) ((minor(dev))>>4) 218 219 /* line number from device */ 220 #define MSCLINE(dev) (((minor(dev)) & 0xe)>>1) 221 222 /* number of slots */ 223 #define MSCSLOTS ((NMSC-1)*8+7) 224 225 /* number of ttys */ 226 #define MSCTTYS (MSCSLOTS*2) 227 228 /* board number given slot number */ 229 #define MSCUNIT(slot) ((slot)>>3) 230 231 /* slot number given unit and line */ 232 #define MSCSLOTUL(unit,line) (((unit)<<3)+(line)) 233 234 /* tty number given slot */ 235 #define MSCTTYSLOT(slot) ((slot)<<1) 236