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
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
|
/* $OpenBSD: umcs.h,v 1.6 2023/04/11 00:45:09 jsg Exp $ */
/* $NetBSD: umcs.h,v 1.1 2014/03/16 09:34:45 martin Exp $ */
/*-
* Copyright (c) 2010 Lev Serebryakov <lev@FreeBSD.org>.
* All rights reserved.
*
* 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
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _UMCS_H_
#define _UMCS_H_
#define UMCS_MAX_PORTS 4
#define UMCS_READ_LENGTH 1 /* bytes */
/* Read/Write registers vendor commands */
#define UMCS_READ 0x0d
#define UMCS_WRITE 0x0e
#define UMCS_CONFIG_NO 0
#define UMCS_IFACE_NO 0
/* Read/Write EEPROM values */
#define UMCS_EEPROM_RW_WVALUE 0x0900
/*
* All these registers are documented only in full datasheet, which
* can be requested from MosChip tech support.
*/
#define UMCS_SP1 0x00 /* Option bits for UART 1, R/W */
#define UMCS_CTRL1 0x01 /* Control bits for UART 1, R/W */
#define UMCS_PINPONGHIGH 0x02 /* High bits of ping-pong reg, R/W */
#define UMCS_PINPONGLOW 0x03 /* Low bits of ping-pong reg, R/W */
/* DCRx_1 Registers goes here (see below, they are documented) */
#define UMCS_GPIO 0x07 /* GPIO_0 and GPIO_1 bits, R/W */
#define UMCS_SP2 0x08 /* Option bits for UART 2, R/W */
#define UMCS_CTRL2 0x09 /* Control bits for UART 2, R/W */
#define UMCS_SP3 0x0a /* Option bits for UART 3, R/W */
#define UMCS_CTRL3 0x0b /* Control bits for UART 3, R/W */
#define UMCS_SP4 0x0c /* Option bits for UART 4, R/W */
#define UMCS_CTRL4 0x0d /* Control bits for UART 4, R/W */
#define UMCS_PLL_DIV_M 0x0e /* Pre-divider for PLL, R/W */
#define UMCS_UNKNOWN1 0x0f /* NOT MENTIONED AND NOT USED */
#define UMCS_PLL_DIV_N 0x10 /* Loop divider for PLL, R/W */
#define UMCS_CLK_MUX 0x12 /* PLL clock & Int. ep ctrl, R/W */
#define UMCS_UNKNOWN2 0x11 /* NOT MENTIONED AND NOT USED */
#define UMCS_CLK_SELECT12 0x13 /* Clock source for ports 1 & 2, R/W */
#define UMCS_CLK_SELECT34 0x14 /* Clock source for ports 3 & 4, R/W */
#define UMCS_UNKNOWN3 0x15 /* NOT MENTIONED AND NOT USED */
/* DCRx_2-DCRx_4 Registers goes here (see below, they are documented) */
#define UMCS_UNKNOWN4 0x1f /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWN5 0x20 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWN6 0x21 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWN7 0x22 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWN8 0x23 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWN9 0x24 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWNA 0x25 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWNB 0x26 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWNC 0x27 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWND 0x28 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWNE 0x29 /* NOT MENTIONED AND NOT USED */
#define UMCS_UNKNOWNF 0x2a /* NOT MENTIONED AND NOT USED */
#define UMCS_MODE 0x2b /* Hardware configuration, R */
#define UMCS_SP1_ICG 0x2c /* Inter char gap config, port 1, R/W */
#define UMCS_SP2_ICG 0x2d /* Inter char gap config, port 2, R/W */
#define UMCS_SP3_ICG 0x2e /* Inter char gap config, port 3, R/W */
#define UMCS_SP4_ICG 0x2f /* Inter char gap config, port 4, R/W */
#define UMCS_RX_SAMPLING12 0x30 /* RX sampling for ports 1 & 2, R/W */
#define UMCS_RX_SAMPLING34 0x31 /* RX sampling for ports 3 & 4, R/W */
#define UMCS_BI_FIFO_STAT1 0x32 /* Bulk-In FIFO Stat for Port 1, R */
#define UMCS_BO_FIFO_STAT1 0x33 /* Bulk-out FIFO Stat for Port 1, R */
#define UMCS_BI_FIFO_STAT2 0x34 /* Bulk-In FIFO Stat for Port 2, R */
#define UMCS_BO_FIFO_STAT2 0x35 /* Bulk-out FIFO Stat for Port 2, R */
#define UMCS_BI_FIFO_STAT3 0x36 /* Bulk-In FIFO Stat for Port 3, R */
#define UMCS_BO_FIFO_STAT3 0x37 /* Bulk-out FIFO Stat for Port 3, R */
#define UMCS_BI_FIFO_STAT4 0x38 /* Bulk-In FIFO Stat for Port 4, R */
#define UMCS_BO_FIFO_STAT4 0x39 /* Bulk-out FIFO Stat for Port 4, R */
#define UMCS_ZERO_PERIOD1 0x3a /* Period btw frames for Port 1, R/W */
#define UMCS_ZERO_PERIOD2 0x3b /* Period btw frames for Port 2 R/W */
#define UMCS_ZERO_PERIOD3 0x3c /* Period btw frames for Port 3, R/W */
#define UMCS_ZERO_PERIOD4 0x3d /* Period btw frames for Port 4, R/W */
#define UMCS_ZERO_ENABLE 0x3e /* Enable zero-out frames, R/W */
/* Low 8 bits and high 1 bit of threshold values for Bulk-Out ports 1-4 */
#define UMCS_THR_VAL_LOW1 0x3f
#define UMCS_THR_VAL_HIGH1 0x40
#define UMCS_THR_VAL_LOW2 0x41
#define UMCS_THR_VAL_HIGH2 0x42
#define UMCS_THR_VAL_LOW3 0x43
#define UMCS_THR_VAL_HIGH3 0x44
#define UMCS_THR_VAL_LOW4 0x45
#define UMCS_THR_VAL_HIGH4 0x46
/* Bits for SPx registers */
#define UMCS_SPx_LOOP_PIPES 0x01 /* Loop Out FIFO to In FIFO */
#define UMCS_SPx_SKIP_ERR_DATA 0x02 /* Drop data received with errors */
#define UMCS_SPx_RESET_OUT_FIFO 0x04 /* Reset Bulk-Out FIFO */
#define UMCS_SPx_RESET_IN_FIFO 0x08 /* Reset Bulk-In FIFO */
#define UMCS_SPx_CLK_MASK 0x70 /* Mask to extract Baud CLK source */
#define UMCS_SPx_CLK_X1 0x00 /* Max speed = 115200 bps, default */
#define UMCS_SPx_CLK_X2 0x10 /* Max speed = 230400 bps */
#define UMCS_SPx_CLK_X35 0x20 /* Max speed = 403200 bps */
#define UMCS_SPx_CLK_X4 0x30 /* Max speed = 460800 bps */
#define UMCS_SPx_CLK_X7 0x40 /* Max speed = 806400 bps */
#define UMCS_SPx_CLK_X8 0x50 /* Max speed = 921600 bps */
#define UMCS_SPx_CLK_24MHZ 0x60 /* Max speed = 1.5Mbps */
#define UMCS_SPx_CLK_48MHZ 0x70 /* Max speed = 3.0 Mbps */
#define UMCS_SPx_CLK_SHIFT 4 /* Shift to get clock value */
#define UMCS_SPx_UART_RESET 0x80 /* Reset UART */
/* Bits for CTRL registers */
#define UMCS_CTRL_HWFC 0x01 /* Enable hardware flow control */
#define UMCS_CTRL_UNUSED1 0x02 /* Reserved */
#define UMCS_CTRL_CTS_ENABLE 0x04 /* CTS changes are translated to MSR */
#define UMCS_CTRL_UNUSED2 0x08 /* Reserved for ports 2,3,4 */
#define UMCS_CTRL1_DRIVER_DONE 0x08 /* Memory can be use as FIFO */
#define UMCS_CTRL_RX_NEGATE 0x10 /* Negate RX input */
#define UMCS_CTRL_RX_DISABLE 0x20 /* Disable RX logic */
#define UMCS_CTRL_FSM_CONTROL 0x40 /* Disable RX FSM when TX is active */
#define UMCS_CTRL_UNUSED3 0x80 /* Reserved */
/*
* Bits for PINPONGx registers. These registers control how often two
* input buffers for Bulk-In FIFOs are swapped. One of buffers is used
* for USB transfer, other for receiving data from UART. Exact meaning
* of 15 bit value in these registers is unknown
*/
#define UMCS_PINPONGHIGH_MULT 128 /* Only 7 bits in PINPONGLOW register */
#define UMCS_PINPONGLOW_BITS 7 /* Only 7 bits in PINPONGLOW register */
/*
* THIS ONE IS UNDOCUMENTED IN FULL DATASHEET, but email from tech support
* confirms, that it is register for GPIO_0 and GPIO_1 data input/output.
* Chips has 2 GPIO, but first one (lower bit) MUST be used by device
* authors as "number of port" indicator, grounded (0) for two-port
* devices and pulled-up to 1 for 4-port devices.
*/
#define UMCS_GPIO_4PORTS 0x01 /* Device has 4 ports configured */
#define UMCS_GPIO_GPIO_0 0x01 /* The same as above */
#define UMCS_GPIO_GPIO_1 0x02 /* GPIO_1 data */
/*
* Constants for PLL dividers. Output frequency of PLL is:
* Fout = (N/M) * Fin.
* Default PLL input frequency Fin is 12Mhz (on-chip).
*/
#define UMCS_PLL_DIV_M_BITS 6 /* Number of bits for M divider */
#define UMCS_PLL_DIV_M_MASK 0x3f /* Mask for M divider */
#define UMCS_PLL_DIV_M_MIN 1 /* Minimum value for M, (0 forbidden) */
#define UMCS_PLL_DIV_M_DEF 1 /* Default value for M */
#define UMCS_PLL_DIV_M_MAX 63 /* Maximum value for M */
#define UMCS_PLL_DIV_N_BITS 6 /* Number of bits for N divider */
#define UMCS_PLL_DIV_N_MASK 0x3f /* Mask for N divider */
#define UMCS_PLL_DIV_N_MIN 1 /* Minimum value for N, (0 forbidden) */
#define UMCS_PLL_DIV_N_DEF 8 /* Default value for N */
#define UMCS_PLL_DIV_N_MAX 63 /* Maximum value for N */
/* Bits for CLK_MUX register */
#define UMCS_CLK_MUX_INMASK 0x03 /* Mask to extract PLL clock input */
#define UMCS_CLK_MUX_IN12MHZ 0x00 /* 12Mhz PLL input, default */
#define UMCS_CLK_MUX_INEXTRN 0x01 /* External PLL input */
#define UMCS_CLK_MUX_INRSV1 0x02 /* Reserved */
#define UMCS_CLK_MUX_INRSV2 0x03 /* Reserved */
#define UMCS_CLK_MUX_PLLHIGH 0x04 /* 20MHz-100MHz or 100MHz-300MHz range*/
#define UMCS_CLK_MUX_INTRFIFOS 0x08 /* Enable FIFOs status (+8 bytes) */
#define UMCS_CLK_MUX_RESERVED1 0x10 /* Unused */
#define UMCS_CLK_MUX_RESERVED2 0x20 /* Unused */
#define UMCS_CLK_MUX_RESERVED3 0x40 /* Unused */
#define UMCS_CLK_MUX_RESERVED4 0x80 /* Unused */
/* Bits for CLK_SELECTxx registers */
#define UMCS_CLK_SELECT1_MASK 0x07 /* Bits for port 1 in CLK_SELECT12 */
#define UMCS_CLK_SELECT1_SHIFT 0 /* Shift for port 1in CLK_SELECT12 */
#define UMCS_CLK_SELECT2_MASK 0x38 /* Bits for port 2 in CLK_SELECT12 */
#define UMCS_CLK_SELECT2_SHIFT 3 /* Shift for port 2 in CLK_SELECT12 */
#define UMCS_CLK_SELECT3_MASK 0x07 /* Bits for port 3 in CLK_SELECT23 */
#define UMCS_CLK_SELECT3_SHIFT 0 /* Shift for port 3 in CLK_SELECT23 */
#define UMCS_CLK_SELECT4_MASK 0x38 /* Bits for port 4 in CLK_SELECT23 */
#define UMCS_CLK_SELECT4_SHIFT 3 /* Shift for port 4 in CLK_SELECT23 */
#define UMCS_CLK_SELECT_STD 0x00 /* STANDARD rate derived from 96Mhz */
#define UMCS_CLK_SELECT_30MHZ 0x01 /* 30Mhz */
#define UMCS_CLK_SELECT_96MHZ 0x02 /* 96Mhz direct */
#define UMCS_CLK_SELECT_120MHZ 0x03 /* 120Mhz */
#define UMCS_CLK_SELECT_PLL 0x04 /* PLL output */
#define UMCS_CLK_SELECT_EXT 0x05 /* External clock input */
#define UMCS_CLK_SELECT_RES1 0x06 /* Unused */
#define UMCS_CLK_SELECT_RES2 0x07 /* Unused */
/* Bits for MODE register */
#define UMCS_MODE_RESERVED1 0x01 /* Unused */
#define UMCS_MODE_RESET 0x02 /* RESET = Active High (default) */
#define UMCS_MODE_SER_PRSNT 0x04 /* Reserved (default) */
#define UMCS_MODE_PLLBYPASS 0x08 /* PLL output is bypassed */
#define UMCS_MODE_PORBYPASS 0x10 /* Power-On Reset is bypassed */
#define UMCS_MODE_SELECT24S 0x20 /* 4 or 2 Serial Ports / IrDA active */
#define UMCS_MODE_EEPROMWR 0x40 /* EEPROM write is enabled (default) */
#define UMCS_MODE_IRDA 0x80 /* IrDA mode is activated (default) */
/* All 8 bits is used as number of BAUD clocks of pause */
#define UMCS_SPx_ICG_DEF 0x24
/*
* Bits for RX_SAMPLINGxx registers. These registers control when
* bit value will be sampled within the baud period.
* 0 is very beginning of period, 15 is very end, 7 is the middle.
*/
#define UMCS_RX_SAMPLING1_MASK 0x0f /* Bits for port 1 in RX_SAMPLING12 */
#define UMCS_RX_SAMPLING1_SHIFT 0 /* Shift for port 1in RX_SAMPLING12 */
#define UMCS_RX_SAMPLING2_MASK 0xf0 /* Bits for port 2 in RX_SAMPLING12 */
#define UMCS_RX_SAMPLING2_SHIFT 4 /* Shift for port 2 in RX_SAMPLING12 */
#define UMCS_RX_SAMPLING3_MASK 0x0f /* Bits for port 3 in RX_SAMPLING23 */
#define UMCS_RX_SAMPLING3_SHIFT 0 /* Shift for port 3 in RX_SAMPLING23 */
#define UMCS_RX_SAMPLING4_MASK 0xf0 /* Bits for port 4 in RX_SAMPLING23 */
#define UMCS_RX_SAMPLING4_SHIFT 4 /* Shift for port 4 in RX_SAMPLING23 */
#define UMCS_RX_SAMPLINGx_MIN 0 /* Max for any RX Sampling */
#define UMCS_RX_SAMPLINGx_DEF 7 /* Default for any RX Sampling */
#define UMCS_RX_SAMPLINGx_MAX 15 /* Min for any RX Sampling */
/* Number of Bulk-in requests before sending zero-sized reply */
#define UMCS_ZERO_PERIODx_DEF 20
/* Bits to enable sending zero-sized replies, per port, (default is on) */
#define UMCS_ZERO_ENABLE_PORT1 0x01
#define UMCS_ZERO_ENABLE_PORT2 0x02
#define UMCS_ZERO_ENABLE_PORT3 0x04
#define UMCS_ZERO_ENABLE_PORT4 0x08
/* Bits for THR_VAL_HIx */
#define UMCS_THR_VAL_HIMASK 0x01 /* Only one bit is used */
#define UMCS_THR_VAL_HIMUL 256 /* This one bit is means "256" */
#define UMCS_THR_VAL_HISHIFT 8 /* This one bit is means "256" */
#define UMCS_THR_VAL_HIENABLE 0x80 /* Enable threshold */
/* These are documented in "public" datasheet */
#define UMCS_DCR0_1 0x04 /* Device ctrl reg 0 for Port 1, R/W */
#define UMCS_DCR1_1 0x05 /* Device ctrl reg 1 for Port 1, R/W */
#define UMCS_DCR2_1 0x06 /* Device ctrl reg 2 for Port 1, R/W */
#define UMCS_DCR0_2 0x16 /* Device ctrl reg 0 for Port 2, R/W */
#define UMCS_DCR1_2 0x17 /* Device ctrl reg 1 for Port 2, R/W */
#define UMCS_DCR2_2 0x18 /* Device ctrl reg 2 for Port 2, R/W */
#define UMCS_DCR0_3 0x19 /* Device ctrl reg 0 for Port 3, R/W */
#define UMCS_DCR1_3 0x1a /* Device ctrl reg 1 for Port 3, R/W */
#define UMCS_DCR2_3 0x1b /* Device ctrl reg 2 for Port 3, R/W */
#define UMCS_DCR0_4 0x1c /* Device ctrl reg 0 for Port 4, R/W */
#define UMCS_DCR1_4 0x1d /* Device ctrl reg 1 for Port 4, R/W */
#define UMCS_DCR2_4 0x1e /* Device ctrl reg 2 for Port 4, R/W */
/* Bits of DCR0 registers, documented in datasheet */
#define UMCS_DCR0_PWRSAVE 0x01 /* Transceiver off when USB Suspended */
#define UMCS_DCR0_RESERVED1 0x02 /* Unused */
#define UMCS_DCR0_GPIO_MASK 0x0c /* GPIO Mode bits */
#define UMCS_DCR0_GPIO_IN 0x00 /* GPIO Mode - Input (0b00) */
#define UMCS_DCR0_GPIO_OUT 0x08 /* GPIO Mode - Input (0b10) */
#define UMCS_DCR0_RTS_ACTHI 0x10 /* RTS Active is High, (default low) */
#define UMCS_DCR0_RTS_AUTO 0x20 /* Control by state TX buffer or MCR */
#define UMCS_DCR0_IRDA 0x40 /* IrDA mode */
#define UMCS_DCR0_RESERVED2 0x80 /* Unused */
/* Bits of DCR1 registers, documented in datasheet, work only for port 1. */
#define UMCS_DCR1_GPIO_CURRENT_MASK 0x03 /* Mask to get GPIO value */
#define UMCS_DCR1_GPIO_CURRENT_6MA 0x00 /* GPIO output current 6mA */
#define UMCS_DCR1_GPIO_CURRENT_8MA 0x01 /* GPIO output current 8mA */
#define UMCS_DCR1_GPIO_CURRENT_10MA 0x02 /* GPIO output current 10mA */
#define UMCS_DCR1_GPIO_CURRENT_12MA 0x03 /* GPIO output current 12mA */
#define UMCS_DCR1_UART_CURRENT_MASK 0x0c /* Mask to get UART value */
#define UMCS_DCR1_UART_CURRENT_6MA 0x00 /* Output current 6mA */
#define UMCS_DCR1_UART_CURRENT_8MA 0x04 /* Output current 8mA default */
#define UMCS_DCR1_UART_CURRENT_10MA 0x08 /* UART output current 10mA */
#define UMCS_DCR1_UART_CURRENT_12MA 0x0c /* UART output current 12mA */
#define UMCS_DCR1_WAKEUP_DISABLE 0x10 /* Disable Remote USB Wakeup */
#define UMCS_DCR1_PLLPWRDOWN_DISABLE 0x20 /* Disable PLL power down */
#define UMCS_DCR1_LONG_INTERRUPT 0x40 /* Enable FIFO statistics */
#define UMCS_DCR1_RESERVED1 0x80 /* Unused */
/*
* Bits of DCR2 registers, documented in datasheet
* Wakeup will work only if DCR0_IRDA = 0 (RS-xxx mode) and
* DCR1_WAKEUP_DISABLE = 0 (wakeup enabled).
*/
#define UMCS_DCR2_WAKEUP_CTS 0x01 /* Wakeup on CTS change, default = 0 */
#define UMCS_DCR2_WAKEUP_DCD 0x02 /* Wakeup on DCD change, default = 0 */
#define UMCS_DCR2_WAKEUP_RI 0x04 /* Wakeup on RI change, default = 1 */
#define UMCS_DCR2_WAKEUP_DSR 0x08 /* Wakeup on DSR change, default = 0 */
#define UMCS_DCR2_WAKEUP_RXD 0x10 /* Wakeup on RX Data change, dflt = 0 */
#define UMCS_DCR2_WAKEUP_RESUME 0x20 /* Wakeup issues RESUME signal,
* DISCONNECT otherwise, default = 1 */
#define UMCS_DCR2_RESERVED1 0x40 /* Unused */
#define UMCS_DCR2_SHDN_POLARITY 0x80 /* 0: Pin 12 Active Low, 1: Pin 12
* Active High, default = 0 */
/* Documented UART registers (fully compatible with 16550 UART) */
#define UMCS_REG_THR 0x00 /* Transmitter Holding Register W */
#define UMCS_REG_RHR 0x00 /* Receiver Holding Register R */
#define UMCS_REG_IER 0x01 /* Interrupt enable register - R/W */
#define UMCS_REG_FCR 0x02 /* FIFO Control register - W */
#define UMCS_REG_ISR 0x02 /* Interrupt Status Register R */
#define UMCS_REG_LCR 0x03 /* Line control register R/W */
#define UMCS_REG_MCR 0x04 /* Modem control register R/W */
#define UMCS_REG_LSR 0x05 /* Line status register R */
#define UMCS_REG_MSR 0x06 /* Modem status register R */
#define UMCS_REG_SCRATCHPAD 0x07 /* Scratch pad register */
#define UMCS_REG_DLL 0x00 /* Low bits of BAUD divider */
#define UMCS_REG_DLM 0x01 /* High bits of BAUD divider */
/* IER bits */
#define UMCS_IER_RXREADY 0x01 /* RX Ready interrupt mask */
#define UMCS_IER_TXREADY 0x02 /* TX Ready interrupt mask */
#define UMCS_IER_RXSTAT 0x04 /* RX Status interrupt mask */
#define UMCS_IER_MODEM 0x08 /* Modem status change interrupt mask */
#define UMCS_IER_SLEEP 0x10 /* SLEEP enable */
/* FCR bits */
#define UMCS_FCR_ENABLE 0x01 /* Enable FIFO */
#define UMCS_FCR_FLUSHRHR 0x02 /* Flush RHR and FIFO */
#define UMCS_FCR_FLUSHTHR 0x04 /* Flush THR and FIFO */
#define UMCS_FCR_RTLMASK 0xa0 /* Select RHR Interrupt Trigger level */
#define UMCS_FCR_RTL_1_1 0x00 /* L1 = 1, L2 = 1 */
#define UMCS_FCR_RTL_1_4 0x40 /* L1 = 1, L2 = 4 */
#define UMCS_FCR_RTL_1_8 0x80 /* L1 = 1, L2 = 8 */
#define UMCS_FCR_RTL_1_14 0xa0 /* L1 = 1, L2 = 14 */
/* ISR bits */
#define UMCS_ISR_NOPENDING 0x01 /* No interrupt pending */
#define UMCS_ISR_INTMASK 0x3f /* Mask to select interrupt source */
#define UMCS_ISR_RXERR 0x06 /* Receiver error */
#define UMCS_ISR_RXHASDATA 0x04 /* Receiver has data */
#define UMCS_ISR_RXTIMEOUT 0x0c /* Receiver timeout */
#define UMCS_ISR_TXEMPTY 0x02 /* Transmitter empty */
#define UMCS_ISR_MSCHANGE 0x00 /* Modem status change */
/* LCR bits */
#define UMCS_LCR_DATALENMASK 0x03 /* Mask for data length */
#define UMCS_LCR_DATALEN5 0x00 /* 5 data bits */
#define UMCS_LCR_DATALEN6 0x01 /* 6 data bits */
#define UMCS_LCR_DATALEN7 0x02 /* 7 data bits */
#define UMCS_LCR_DATALEN8 0x03 /* 8 data bits */
#define UMCS_LCR_STOPBMASK 0x04 /* Mask for stop bits */
#define UMCS_LCR_STOPB1 0x00 /* 1 stop bit in any case */
#define UMCS_LCR_STOPB2 0x04 /* 1.5-2 stop bits depends on data len*/
#define UMCS_LCR_PARITYMASK 0x38 /* Mask for all parity data */
#define UMCS_LCR_PARITYON 0x08 /* Parity ON/OFF - ON */
#define UMCS_LCR_PARITYODD 0x00 /* Parity Odd */
#define UMCS_LCR_PARITYEVEN 0x10 /* Parity Even */
#define UMCS_LCR_PARITYODD 0x00 /* Parity Odd */
#define UMCS_LCR_PARITYFORCE 0x20 /* Force parity odd/even */
#define UMCS_LCR_BREAK 0x40 /* Send BREAK */
#define UMCS_LCR_DIVISORS 0x80 /* Map DLL/DLM instead of xHR/IER */
/* LSR bits */
#define UMCS_LSR_RHRAVAIL 0x01 /* Data available for read */
#define UMCS_LSR_RHROVERRUN 0x02 /* Data FIFO/register overflow */
#define UMCS_LSR_PARITYERR 0x04 /* Parity error */
#define UMCS_LSR_FRAMEERR 0x10 /* Framing error */
#define UMCS_LSR_BREAKERR 0x20 /* BREAK signal received */
#define UMCS_LSR_THREMPTY 0x40 /* THR register is empty, ready for
* transmit */
#define UMCS_LSR_HASERR 0x80 /* Has error in receiver FIFO */
/* MCR bits */
#define UMCS_MCR_DTR 0x01 /* Force DTR to be active (low) */
#define UMCS_MCR_RTS 0x02 /* Force RTS to be active (low) */
#define UMCS_MCR_IE 0x04 /* Enable interrupts (not documented) */
#define UMCS_MCR_LOOPBACK 0x10 /* Enable local loopback test mode */
#define UMCS_MCR_CTSRTS 0x20 /* Enable CTS/RTS in 550 (FIFO) mode */
#define UMCS_MCR_DTRDSR 0x40 /* Enable DTR/DSR in 550 (FIFO) mode */
#define UMCS_MCR_DCD 0x80 /* Enable DCD in 550 (FIFO) mode */
/* MSR bits */
#define UMCS_MSR_DELTACTS 0x01 /* CTS was changed since last read */
#define UMCS_MSR_DELTADSR 0x02 /* DSR was changed since last read */
#define UMCS_MSR_DELTARI 0x04 /* RI was changed since last read */
#define UMCS_MSR_DELTADCD 0x08 /* DCD was changed since last read */
#define UMCS_MSR_NEGCTS 0x10 /* Negated CTS signal */
#define UMCS_MSR_NEGDSR 0x20 /* Negated DSR signal */
#define UMCS_MSR_NEGRI 0x40 /* Negated RI signal */
#define UMCS_MSR_NEGDCD 0x80 /* Negated DCD signal */
/* SCRATCHPAD bits */
#define UMCS_SCRATCHPAD_RS232 0x00 /* RS-485 disabled */
#define UMCS_SCRATCHPAD_RS485_DTRRX 0x80 /* RS-485 mode, DTR High = RX */
#define UMCS_SCRATCHPAD_RS485_DTRTX 0xc0 /* RS-485 mode, DTR High = TX */
#endif /* _UMCS_H_ */
|