1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
/*
* Device driver for Specialix I/O8+ multiport serial card.
*
* Copyright 2003 Frank Mayhar <frank@exit.com>
*
* Derived from the "si" driver by Peter Wemm <peter@netplex.com.au>, using
* lots of information from the Linux "specialix" driver by Roger Wolff
* <R.E.Wolff@BitWizard.nl> and from the Intel CD1865 "Intelligent Eight-
* Channel Communications Controller" datasheet. Roger was also nice
* enough to answer numerous questions about stuff specific to the I/O8+
* not covered by the CD1865 datasheet.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notices, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notices, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE AUTHORS BE LIABLE.
*
* $FreeBSD$
*/
/* CD1865 chip register definitions. */
/*
* Service Match Register interrupt acknowledgement values.
*
* These values are "obligatory" if you use the register based
* interrupt acknowledgements; the wrong values can cause a lockup.
* See section 8.11.1 of the Intel CD1865 "Intelligent Eight-Channel
* Communications Controller" datasheet.
*/
#define CD1865_ACK_MINT 0x75 /* goes to MSMR */
#define CD1865_ACK_TINT 0x76 /* goes to TSMR */
#define CD1865_ACK_RINT 0x77 /* goes to RSMR */
#define CD1865_NUMCHAN 8 /* Total number of channels. */
#define CD1865_CHARTICK 16 /* Ticks per character. */
#define CD1865_TFIFOSZ 8 /* TX FIFO size. */
#define CD1865_RFIFOSZ 8 /* RX FIFO size. */
/*
* Global registers.
* These registers are not associated with any particular channel;
* some define the general behavior of the card and others are only
* active during service requests.
*/
#define CD1865_GIVR 0x40 /* Global Interrupt Vector Register. */
/* The CD1865 datasheet calls this the */
/* "Global Vector Register" _and_ the */
/* "Global Service Vector Register," GSVR. */
#define CD1865_GSVR CD1865_GIVR
#define CD1865_GICR 0x41 /* Global Interrupting Channel Register. */
/* The CD1865 datasheet calls this the */
/* "Global Channel Register 1," GSCR1. */
#define CD1865_GSCR1 CD1865_GICR
#define CD1865_GSCR2 0x42 /* Global Channel Register 2. */
#define CD1865_GSCR3 0x43 /* Global Channel Register 3. */
#define CD1865_MSMR 0x61 /* Priority Interrupt Level Register 1. */
#define CD1865_TSMR 0x62 /* Priority Interrupt Level Register 2. */
#define CD1865_RSMR 0x63 /* Priority Interrupt Level Register 3. */
#define CD1865_CAR 0x64 /* Channel Access Register. */
#define CD1865_SRSR 0x65 /* Service Request Status Register. */
#define CD1865_SRCR 0x66 /* Service Request Configuration Register. */
#define CD1865_GFRCR 0x6b /* Global Firmware Revision Code Register. */
#define CD1865_PPRH 0x70 /* Prescaler Period Register High. */
#define CD1865_PPRL 0x71 /* Prescaler Period Register Low. */
#define CD1865_RDR 0x78 /* Receiver Data Register. */
#define CD1865_RCSR 0x7a /* Receiver Character Status Register. */
#define CD1865_TDR 0x7b /* Transmit Data Register. */
#define CD1865_EOIR 0x7f /* End of Interrupt Register. */
#define CD1865_MRAR 0x75 /* Modem Request Acknowlege Register. */
#define CD1865_TRAR 0x76 /* Transmit Request Acknowlege Register. */
#define CD1865_RRAR 0x77 /* Receive Request Acknowlege Register. */
/*
* Channel Registers
* These registers control or provide status for individual channels.
* Use the CD1865_CAR register to set up access to the channel before
* using these registers.
*/
#define CD1865_CCR 0x01 /* Channel Command Register. */
#define CD1865_IER 0x02 /* Interrupt Enable Register. */
/* The CD1865 datasheet calls this the */
/* "Service Request Enable Register," SRER. */
#define CD1865_SRER CD1865_IER
#define CD1865_COR1 0x03 /* Channel Option Register 1. */
#define CD1865_COR2 0x04 /* Channel Option Register 2. */
#define CD1865_COR3 0x05 /* Channel Option Register 3. */
#define CD1865_CCSR 0x06 /* Channel Control Status Register. */
#define CD1865_RDCR 0x07 /* Receive Data Count Register. */
#define CD1865_SCHR1 0x09 /* Special Character Register 1. */
#define CD1865_SCHR2 0x0a /* Special Character Register 2. */
#define CD1865_SCHR3 0x0b /* Special Character Register 3. */
#define CD1865_SCHR4 0x0c /* Special Character Register 4. */
#define CD1865_MCOR1 0x10 /* Modem Change Option 1 Register. */
#define CD1865_MCOR2 0x11 /* Modem Change Option 2 Register. */
#define CD1865_MCR 0x12 /* Modem Change Register. */
#define CD1865_RTPR 0x18 /* Receive Timeout Period Register. */
#define CD1865_MSVR 0x28 /* Modem Signal Value Register. */
#define CD1865_MSVRTS 0x29 /* Modem Signal Value Register. */
#define CD1865_MSVDTR 0x2a /* Modem Signal Value Register. */
#define CD1865_RBPRH 0x31 /* Receive Baud Rate Period Register High. */
#define CD1865_RBPRL 0x32 /* Receive Baud Rate Period Register Low. */
#define CD1865_TBPRH 0x39 /* Transmit Baud Rate Period Register High. */
#define CD1865_TBPRL 0x3a /* Transmit Baud Rate Period Register Low. */
/*
* Global Interrupt Vector Register, read/write (0x40).
*/
#define CD1865_GIVR_ITMASK 0x07 /* Interrupt type mask. */
#define CD1865_GIVR_IT_MODEM 0x01 /* Modem Signal Change Interrupt. */
#define CD1865_GIVR_IT_TX 0x02 /* Transmit Data Interrupt. */
#define CD1865_GIVR_IT_RCV 0x03 /* Receive Good Data Interrupt. */
#define CD1865_GIVR_IT_REXC 0x07 /* Receive Exception Interrupt. */
/*
* Global Interrupt Channel Register read/write (0x41)
*/
#define CD1865_GICR_CHAN_MASK 0x1c /* Channel Number Mask. */
#define CD1865_GICR_CHAN_SHIFT 2 /* Channel Number shift. */
/*
* Channel Access Register, read/write (0x64).
*/
#define CD1865_CAR_CHAN_MASK 0x07 /* Channel Number Mask. */
#define CD1865_CAR_A7 0x08 /* A7 Address Extension (unused). */
/*
* Receive Character Status Register, readonly (0x7a).
*/
#define CD1865_RCSR_TOUT 0x80 /* Rx Timeout. */
#define CD1865_RCSR_SCDET 0x70 /* Special Character Detected Mask. */
#define CD1865_RCSR_NO_SC 0x00 /* No Special Characters Detected. */
#define CD1865_RCSR_SC_1 0x10 /* Special Char 1 (or 1 & 3) Detected. */
#define CD1865_RCSR_SC_2 0x20 /* Special Char 2 (or 2 & 4) Detected. */
#define CD1865_RCSR_SC_3 0x30 /* Special Char 3 Detected. */
#define CD1865_RCSR_SC_4 0x40 /* Special Char 4 Detected. */
#define CD1865_RCSR_BREAK 0x08 /* Break detected. */
#define CD1865_RCSR_PE 0x04 /* Parity Error. */
#define CD1865_RCSR_FE 0x02 /* Frame Error. */
#define CD1865_RCSR_OE 0x01 /* Overrun Error. */
/*
* Channel Command Register, read/write (0x01)
* Commands in groups can be OR-ed together.
*/
#define CD1865_CCR_HARDRESET 0x81 /* Reset the CD1865 (like a powercycle). */
#define CD1865_CCR_SOFTRESET 0x80 /* Soft Channel Reset (one channel). */
#define CD1865_CCR_CORCHG1 0x42 /* Channel Option Register 1 Changed. */
#define CD1865_CCR_CORCHG2 0x44 /* Channel Option Register 2 Changed. */
#define CD1865_CCR_CORCHG3 0x48 /* Channel Option Register 3 Changed. */
#define CD1865_CCR_SSCH1 0x21 /* Send Special Character 1. */
#define CD1865_CCR_SSCH2 0x22 /* Send Special Character 2. */
#define CD1865_CCR_SSCH3 0x23 /* Send Special Character 3. */
#define CD1865_CCR_SSCH4 0x24 /* Send Special Character 4. */
#define CD1865_CCR_TXEN 0x18 /* Enable Transmitter. */
#define CD1865_CCR_RXEN 0x12 /* Enable Receiver. */
#define CD1865_CCR_TXDIS 0x14 /* Disable Transmitter. */
#define CD1865_CCR_RXDIS 0x11 /* Disable Receiver. */
/*
* Interrupt Enable Register, read/write (0x02).
* (aka Service Request Enable Register)
*/
#define CD1865_IER_DSR 0x80 /* Enable DSR change interrupt. */
#define CD1865_IER_CD 0x40 /* Enable CD change interrupt. */
#define CD1865_IER_CTS 0x20 /* Enable CTS change interrupt. */
#define CD1865_IER_RXD 0x10 /* Enable Receive Data interrupt. */
#define CD1865_IER_RXSC 0x08 /* Enable Receive Special Character int. */
#define CD1865_IER_TXRDY 0x04 /* Enable Transmit ready interrupt. */
#define CD1865_IER_TXEMPTY 0x02 /* Enable Transmit empty interrupt. */
#define CD1865_IER_NNDT 0x01 /* Enable "No New Data Timeout" int. */
/*
* Channel Option Register 1, read/write (0x03).
*/
#define CD1865_COR1_ODDP 0x80 /* Odd Parity. */
#define CD1865_COR1_PARMODE 0x60 /* Parity enable mask. */
#define CD1865_COR1_NOPAR 0x00 /* No Parity. */
#define CD1865_COR1_FORCEPAR 0x20 /* Force Parity. */
#define CD1865_COR1_NORMPAR 0x40 /* Normal Parity. */
#define CD1865_COR1_IGNORE 0x10 /* Ignore Parity on RX. */
#define CD1865_COR1_STOPBITS 0x0c /* Number of Stop Bits. */
#define CD1865_COR1_1SB 0x00 /* 1 Stop Bit. */
#define CD1865_COR1_15SB 0x04 /* 1.5 Stop Bits. */
#define CD1865_COR1_2SB 0x08 /* 2 Stop Bits. */
#define CD1865_COR1_CHARLEN 0x03 /* Character Length. */
#define CD1865_COR1_5BITS 0x00 /* 5 bits. */
#define CD1865_COR1_6BITS 0x01 /* 6 bits. */
#define CD1865_COR1_7BITS 0x02 /* 7 bits. */
#define CD1865_COR1_8BITS 0x03 /* 8 bits. */
/*
* Channel Option Register 2, read/write (0x04).
*/
#define CD1865_COR2_IXM 0x80 /* Implied XON mode. */
#define CD1865_COR2_TXIBE 0x40 /* Enable In-Band (XON/XOFF) Flow Control*/
#define CD1865_COR2_ETC 0x20 /* Embedded Tx Commands Enable. */
#define CD1865_COR2_LLM 0x10 /* Local Loopback Mode. */
#define CD1865_COR2_RLM 0x08 /* Remote Loopback Mode. */
#define CD1865_COR2_RTSAO 0x04 /* RTS Automatic Output Enable. */
#define CD1865_COR2_CTSAE 0x02 /* CTS Automatic Enable. */
#define CD1865_COR2_DSRAE 0x01 /* DSR Automatic Enable. */
/*
* Channel Option Register 3, read/write (0x05).
*/
#define CD1865_COR3_XONCH 0x80 /* XON is a pair of characters (1 & 3). */
#define CD1865_COR3_XOFFCH 0x40 /* XOFF is a pair of characters (2 & 4). */
#define CD1865_COR3_FCT 0x20 /* Flow-Control Transparency Mode. */
#define CD1865_COR3_SCDE 0x10 /* Special Character Detection Enable. */
#define CD1865_COR3_RXTH 0x0f /* RX FIFO Threshold value (1-8). */
/*
* Channel Control Status Register, readonly (0x06)
*/
#define CD1865_CCSR_RXEN 0x80 /* Receiver Enabled. */
#define CD1865_CCSR_RXFLOFF 0x40 /* Receive Flow Off (XOFF was sent). */
#define CD1865_CCSR_RXFLON 0x20 /* Receive Flow On (XON was sent). */
#define CD1865_CCSR_TXEN 0x08 /* Transmitter Enabled. */
#define CD1865_CCSR_TXFLOFF 0x04 /* Transmit Flow Off (got XOFF). */
#define CD1865_CCSR_TXFLON 0x02 /* Transmit Flow On (got XON). */
/*
* Modem Change Option Register 1, read/write (0x10).
*/
#define CD1865_MCOR1_DSRZD 0x80 /* Detect 0->1 transition of DSR. */
#define CD1865_MCOR1_CDZD 0x40 /* Detect 0->1 transition of CD. */
#define CD1865_MCOR1_CTSZD 0x20 /* Detect 0->1 transition of CTS. */
#define CD1865_MCOR1_DTRTH 0x0f /* Auto DTR flow control Threshold (1-8).*/
#define CD1865_MCOR1_NODTRFC 0x0 /* Automatic DTR flow control disabled. */
/*
* Modem Change Option Register 2, read/write (0x11).
*/
#define CD1865_MCOR2_DSROD 0x80 /* Detect 1->0 transition of DSR. */
#define CD1865_MCOR2_CDOD 0x40 /* Detect 1->0 transition of CD. */
#define CD1865_MCOR2_CTSOD 0x20 /* Detect 1->0 transition of CTS. */
/*
* Modem Change Register, read/write (0x12).
*/
#define CD1865_MCR_DSRCHG 0x80 /* DSR Changed. */
#define CD1865_MCR_CDCHG 0x40 /* CD Changed. */
#define CD1865_MCR_CTSCHG 0x20 /* CTS Changed. */
/*
* Modem Signal Value Register, read/write (0x28)
*
* Note:
* These are inverted with respect to the actual signals! If the
* signal is present, the bit is zero, else the bit is one.
*/
#define CD1865_MSVR_DSR 0x80 /* Current state of DSR input. */
#define CD1865_MSVR_CD 0x40 /* Current state of CD input. */
#define CD1865_MSVR_CTS 0x20 /* Current state of CTS input. */
#define CD1865_MSVR_DTR 0x02 /* Current state of DTR output. */
#define CD1865_MSVR_RTS 0x01 /* Current state of RTS output. */
#define CD1865_MSVR_OFF 0xe3 /* All signals off. */
#define CD1865_MSVR_ON 0x00 /* All signals on. */
/*
* Escape characters. These are sent in-band when embedded commands are
* enabled with CD1865_COR2_ETC.
*/
#define CD1865_C_ESC 0x00 /* Escape character. */
#define CD1865_C_SBRK 0x81 /* Start sending BREAK. */
#define CD1865_C_DELAY 0x82 /* Delay output. */
#define CD1865_C_EBRK 0x83 /* Stop sending BREAK. */
#define CD1865_SRSR_RREQint 0x10 /* Receive request interrupt. */
#define CD1865_SRSR_TREQint 0x04 /* Transmit request interrupt. */
#define CD1865_SRSR_MREQint 0x01 /* Modem signal change request interrupt.*/
#define CD1865_SRSR_REQint 0x15 /* All of the above. */
#define CD1865_SRCR_PKGTYPE 0x80
#define CD1865_SRCR_REGACKEN 0x40
#define CD1865_SRCR_DAISYEN 0x20
#define CD1865_SRCR_GLOBPRI 0x10
#define CD1865_SRCR_UNFAIR 0x08
#define CD1865_SRCR_AUTOPRI 0x02
#define CD1865_SRCR_PRISEL 0x01
|