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