1 /* $NetBSD: mscreg.h,v 1.8 2005/12/11 12:16:28 christos Exp $ */
4 * Copyright (c) 1982, 1986, 1990 Regents of the University of California.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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.
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
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!!!!!!
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
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>.
47 * Redistribution and use in source and binary forms, with or without
48 * modification, are permitted provided that the following conditions
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.
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
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!!!!!!
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
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 */
92 #define MSC_VBL_PRIORITY 1 /* priority of vbl interrupt handler */
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) */
100 char Crystal
; /* normal (1) or turbo (2) board? */
102 u_char TimerH
; /* timer value after speed check */
104 u_char CDHead
; /* head pointer for CD message queue */
105 u_char CDTail
; /* tail pointer for CD message queue */
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 */
126 #define MSC_MEMPAD1 \
127 (0x0200 - NUMLINES * sizeof(struct mscstatus) - sizeof(struct msccommon))
128 #define MSC_MEMPAD2 (0x2000 - NUMLINES * IOBUFLEN - IOBUFLEN)
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 */
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 */
163 #define MSCINCTL_CHAR 0 /* corresponding byte in InBuf is a character */
164 #define MSCINCTL_EVENT 1 /* corresponding byte in InBuf is an event */
166 #define MSCEVENT_Break 1 /* break set */
167 #define MSCEVENT_CarrierOn 2 /* carrier raised */
168 #define MSCEVENT_CarrierOff 3 /* carrier dropped */
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 */
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 */
207 /* tty number from device */
208 #define MSCTTY(dev) (minor(dev) & 0x7e)
210 /* slot number from device */
211 #define MSCSLOT(dev) ((minor(dev) & 0x7e)>>1)
213 /* dialin mode from device */
214 #define MSCDIALIN(dev) (minor(dev) & 0x01)
216 /* board number from device */
217 #define MSCBOARD(dev) ((minor(dev))>>4)
219 /* line number from device */
220 #define MSCLINE(dev) (((minor(dev)) & 0xe)>>1)
222 /* number of slots */
223 #define MSCSLOTS ((NMSC-1)*8+7)
226 #define MSCTTYS (MSCSLOTS*2)
228 /* board number given slot number */
229 #define MSCUNIT(slot) ((slot)>>3)
231 /* slot number given unit and line */
232 #define MSCSLOTUL(unit,line) (((unit)<<3)+(line))
234 /* tty number given slot */
235 #define MSCTTYSLOT(slot) ((slot)<<1)