hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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
/* SPDX-License-Identifier: GPL-2.0+ */
/************************************************************************
 *
 *    16654.H        Definitions for 16C654 UART used on EdgePorts
 *
 *    Copyright (C) 1998 Inside Out Networks, Inc.
 *
 ************************************************************************/
 
#if !defined(_16654_H)
#define    _16654_H
 
/************************************************************************
 *
 *            D e f i n e s   /   T y p e d e f s
 *
 ************************************************************************/
 
   //
   // UART register numbers
   // Numbers 0-7 are passed to the Edgeport directly. Numbers 8 and
   // above are used internally to indicate that we must enable access
   // to them via LCR bit 0x80 or LCR = 0xBF.
   // The register number sent to the Edgeport is then (x & 0x7).
   //
   // Driver must not access registers that affect operation of the
   // the EdgePort firmware -- that includes THR, RHR, IER, FCR.
 
 
#define THR            0    // ! Transmit Holding Register (Write)
#define RDR            0    // ! Receive Holding Register (Read)
#define IER            1    // ! Interrupt Enable Register
#define FCR            2    // ! Fifo Control Register (Write)
#define ISR            2    // Interrupt Status Register (Read)
#define LCR            3    // Line Control Register
#define MCR            4    // Modem Control Register
#define LSR            5    // Line Status Register
#define MSR            6    // Modem Status Register
#define SPR            7    // ScratchPad Register
#define DLL            8    // Bank2[ 0 ] Divisor Latch LSB
#define DLM            9    // Bank2[ 1 ] Divisor Latch MSB
#define EFR            10    // Bank2[ 2 ] Extended Function Register
//efine unused            11    // Bank2[ 3 ]
#define XON1            12    // Bank2[ 4 ] Xon-1
#define XON2            13    // Bank2[ 5 ] Xon-2
#define XOFF1            14    // Bank2[ 6 ] Xoff-1
#define XOFF2            15    // Bank2[ 7 ] Xoff-2
 
#define    NUM_16654_REGS        16
 
#define IS_REG_2ND_BANK(x)    ((x) >= 8)
 
   //
   // Bit definitions for each register
   //
 
#define IER_RX            0x01    // Enable receive interrupt
#define IER_TX            0x02    // Enable transmit interrupt
#define IER_RXS            0x04    // Enable receive status interrupt
#define IER_MDM            0x08    // Enable modem status interrupt
#define IER_SLEEP        0x10    // Enable sleep mode
#define IER_XOFF        0x20    // Enable s/w flow control (XOFF) interrupt
#define IER_RTS            0x40    // Enable RTS interrupt
#define IER_CTS            0x80    // Enable CTS interrupt
#define IER_ENABLE_ALL        0xFF    // Enable all ints
 
 
#define FCR_FIFO_EN        0x01    // Enable FIFOs
#define FCR_RXCLR        0x02    // Reset Rx FIFO
#define FCR_TXCLR        0x04    // Reset Tx FIFO
#define FCR_DMA_BLK        0x08    // Enable DMA block mode
#define FCR_TX_LEVEL_MASK    0x30    // Mask for Tx FIFO Level
#define FCR_TX_LEVEL_8        0x00    // Tx FIFO Level =  8 bytes
#define FCR_TX_LEVEL_16        0x10    // Tx FIFO Level = 16 bytes
#define FCR_TX_LEVEL_32        0x20    // Tx FIFO Level = 32 bytes
#define FCR_TX_LEVEL_56        0x30    // Tx FIFO Level = 56 bytes
#define FCR_RX_LEVEL_MASK    0xC0    // Mask for Rx FIFO Level
#define FCR_RX_LEVEL_8        0x00    // Rx FIFO Level =  8 bytes
#define FCR_RX_LEVEL_16        0x40    // Rx FIFO Level = 16 bytes
#define FCR_RX_LEVEL_56        0x80    // Rx FIFO Level = 56 bytes
#define FCR_RX_LEVEL_60        0xC0    // Rx FIFO Level = 60 bytes
 
 
#define ISR_INT_MDM_STATUS    0x00    // Modem status int pending
#define ISR_INT_NONE        0x01    // No interrupt pending
#define ISR_INT_TXRDY        0x02    // Tx ready int pending
#define ISR_INT_RXRDY        0x04    // Rx ready int pending
#define ISR_INT_LINE_STATUS    0x06    // Line status int pending
#define ISR_INT_RX_TIMEOUT    0x0C    // Rx timeout int pending
#define ISR_INT_RX_XOFF        0x10    // Rx Xoff int pending
#define ISR_INT_RTS_CTS        0x20    // RTS/CTS change int pending
#define ISR_FIFO_ENABLED    0xC0    // Bits set if FIFOs enabled
#define ISR_INT_BITS_MASK    0x3E    // Mask to isolate valid int causes
 
 
#define LCR_BITS_5        0x00    // 5 bits/char
#define LCR_BITS_6        0x01    // 6 bits/char
#define LCR_BITS_7        0x02    // 7 bits/char
#define LCR_BITS_8        0x03    // 8 bits/char
#define LCR_BITS_MASK        0x03    // Mask for bits/char field
 
#define LCR_STOP_1        0x00    // 1 stop bit
#define LCR_STOP_1_5        0x04    // 1.5 stop bits (if 5   bits/char)
#define LCR_STOP_2        0x04    // 2 stop bits   (if 6-8 bits/char)
#define LCR_STOP_MASK        0x04    // Mask for stop bits field
 
#define LCR_PAR_NONE        0x00    // No parity
#define LCR_PAR_ODD        0x08    // Odd parity
#define LCR_PAR_EVEN        0x18    // Even parity
#define LCR_PAR_MARK        0x28    // Force parity bit to 1
#define LCR_PAR_SPACE        0x38    // Force parity bit to 0
#define LCR_PAR_MASK        0x38    // Mask for parity field
 
#define LCR_SET_BREAK        0x40    // Set Break condition
#define LCR_DL_ENABLE        0x80    // Enable access to divisor latch
 
#define LCR_ACCESS_EFR        0xBF    // Load this value to access DLL,DLM,
                   // and also the '654-only registers
                   // EFR, XON1, XON2, XOFF1, XOFF2
 
 
#define MCR_DTR            0x01    // Assert DTR
#define MCR_RTS            0x02    // Assert RTS
#define MCR_OUT1        0x04    // Loopback only: Sets state of RI
#define MCR_MASTER_IE        0x08    // Enable interrupt outputs
#define MCR_LOOPBACK        0x10    // Set internal (digital) loopback mode
#define MCR_XON_ANY        0x20    // Enable any char to exit XOFF mode
#define MCR_IR_ENABLE        0x40    // Enable IrDA functions
#define MCR_BRG_DIV_4        0x80    // Divide baud rate clk by /4 instead of /1
 
 
#define LSR_RX_AVAIL        0x01    // Rx data available
#define LSR_OVER_ERR        0x02    // Rx overrun
#define LSR_PAR_ERR        0x04    // Rx parity error
#define LSR_FRM_ERR        0x08    // Rx framing error
#define LSR_BREAK        0x10    // Rx break condition detected
#define LSR_TX_EMPTY        0x20    // Tx Fifo empty
#define LSR_TX_ALL_EMPTY    0x40    // Tx Fifo and shift register empty
#define LSR_FIFO_ERR        0x80    // Rx Fifo contains at least 1 erred char
 
 
#define EDGEPORT_MSR_DELTA_CTS    0x01    // CTS changed from last read
#define EDGEPORT_MSR_DELTA_DSR    0x02    // DSR changed from last read
#define EDGEPORT_MSR_DELTA_RI    0x04    // RI  changed from 0 -> 1
#define EDGEPORT_MSR_DELTA_CD    0x08    // CD  changed from last read
#define EDGEPORT_MSR_CTS    0x10    // Current state of CTS
#define EDGEPORT_MSR_DSR    0x20    // Current state of DSR
#define EDGEPORT_MSR_RI        0x40    // Current state of RI
#define EDGEPORT_MSR_CD        0x80    // Current state of CD
 
 
 
                   //    Tx        Rx
                   //-------------------------------
#define EFR_SWFC_NONE        0x00    //    None        None
#define EFR_SWFC_RX1        0x02     //    None        XOFF1
#define EFR_SWFC_RX2        0x01     //    None        XOFF2
#define EFR_SWFC_RX12        0x03     //    None        XOFF1 & XOFF2
#define EFR_SWFC_TX1        0x08     //    XOFF1        None
#define EFR_SWFC_TX1_RX1    0x0a     //    XOFF1        XOFF1
#define EFR_SWFC_TX1_RX2    0x09     //    XOFF1        XOFF2
#define EFR_SWFC_TX1_RX12    0x0b     //    XOFF1        XOFF1 & XOFF2
#define EFR_SWFC_TX2        0x04     //    XOFF2        None
#define EFR_SWFC_TX2_RX1    0x06     //    XOFF2        XOFF1
#define EFR_SWFC_TX2_RX2    0x05     //    XOFF2        XOFF2
#define EFR_SWFC_TX2_RX12    0x07     //    XOFF2        XOFF1 & XOFF2
#define EFR_SWFC_TX12        0x0c     //    XOFF1 & XOFF2    None
#define EFR_SWFC_TX12_RX1    0x0e     //    XOFF1 & XOFF2    XOFF1
#define EFR_SWFC_TX12_RX2    0x0d     //    XOFF1 & XOFF2    XOFF2
#define EFR_SWFC_TX12_RX12    0x0f     //    XOFF1 & XOFF2    XOFF1 & XOFF2
 
#define EFR_TX_FC_MASK        0x0c    // Mask to isolate Rx flow control
#define EFR_TX_FC_NONE        0x00    // No Tx Xon/Xoff flow control
#define EFR_TX_FC_X1        0x08    // Transmit Xon1/Xoff1
#define EFR_TX_FC_X2        0x04    // Transmit Xon2/Xoff2
#define EFR_TX_FC_X1_2        0x0c    // Transmit Xon1&2/Xoff1&2
 
#define EFR_RX_FC_MASK        0x03    // Mask to isolate Rx flow control
#define EFR_RX_FC_NONE        0x00    // No Rx Xon/Xoff flow control
#define EFR_RX_FC_X1        0x02    // Receiver compares Xon1/Xoff1
#define EFR_RX_FC_X2        0x01    // Receiver compares Xon2/Xoff2
#define EFR_RX_FC_X1_2        0x03    // Receiver compares Xon1&2/Xoff1&2
 
 
#define EFR_SWFC_MASK        0x0F    // Mask for software flow control field
#define EFR_ENABLE_16654    0x10    // Enable 16C654 features
#define EFR_SPEC_DETECT        0x20    // Enable special character detect interrupt
#define EFR_AUTO_RTS        0x40    // Use RTS for Rx flow control
#define EFR_AUTO_CTS        0x80    // Use CTS for Tx flow control
 
#endif    // if !defined(_16654_H)