xref: /freebsd/sys/dev/ic/cd180.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1098ca2bdSWarner Losh /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
4dc02f1c2SAndrey A. Chernov  * Copyright (C) 1995 by Pavel Antonov, Moscow, Russia.
5dc02f1c2SAndrey A. Chernov  * Copyright (C) 1995 by Andrey A. Chernov, Moscow, Russia.
6dc02f1c2SAndrey A. Chernov  * All rights reserved.
7dc02f1c2SAndrey A. Chernov  *
8dc02f1c2SAndrey A. Chernov  * Redistribution and use in source and binary forms, with or without
9dc02f1c2SAndrey A. Chernov  * modification, are permitted provided that the following conditions
10dc02f1c2SAndrey A. Chernov  * are met:
11dc02f1c2SAndrey A. Chernov  * 1. Redistributions of source code must retain the above copyright
12dc02f1c2SAndrey A. Chernov  *    notice, this list of conditions and the following disclaimer.
13dc02f1c2SAndrey A. Chernov  * 2. Redistributions in binary form must reproduce the above copyright
14dc02f1c2SAndrey A. Chernov  *    notice, this list of conditions and the following disclaimer in the
15dc02f1c2SAndrey A. Chernov  *    documentation and/or other materials provided with the distribution.
16dc02f1c2SAndrey A. Chernov  *
17dc02f1c2SAndrey A. Chernov  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
18dc02f1c2SAndrey A. Chernov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19dc02f1c2SAndrey A. Chernov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20dc02f1c2SAndrey A. Chernov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21dc02f1c2SAndrey A. Chernov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22dc02f1c2SAndrey A. Chernov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23dc02f1c2SAndrey A. Chernov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24dc02f1c2SAndrey A. Chernov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25dc02f1c2SAndrey A. Chernov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26dc02f1c2SAndrey A. Chernov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27dc02f1c2SAndrey A. Chernov  * SUCH DAMAGE.
28dc02f1c2SAndrey A. Chernov  */
29dc02f1c2SAndrey A. Chernov 
30dc02f1c2SAndrey A. Chernov /*
31dc02f1c2SAndrey A. Chernov  * Cirrus Logic CD180 registers
32dc02f1c2SAndrey A. Chernov  */
33dc02f1c2SAndrey A. Chernov 
34dc02f1c2SAndrey A. Chernov /* Global registers */
35dc02f1c2SAndrey A. Chernov #define CD180_GIVR      0x40    /* Global Interrupt Verctor Register      */
36dc02f1c2SAndrey A. Chernov #define CD180_GICR      0x41    /* Global Interrupting Channel Register   */
37dc02f1c2SAndrey A. Chernov #define CD180_PILR1     0x61    /* Priority Interrupt Level Register 1    */
38dc02f1c2SAndrey A. Chernov #define CD180_PILR2     0x62    /* Priority Interrupt Level Register 2    */
39dc02f1c2SAndrey A. Chernov #define CD180_PILR3     0x63    /* Priority Interrupt Level Register 3    */
40dc02f1c2SAndrey A. Chernov #define CD180_CAR       0x64    /* Channel Access Register                */
41dc02f1c2SAndrey A. Chernov #define CD180_GFRCR     0x6B    /* Global Firmware Revision Code Register */
42dc02f1c2SAndrey A. Chernov #define CD180_PPRH      0x70    /* Prescaler Period Register MSB          */
43dc02f1c2SAndrey A. Chernov #define CD180_PPRL      0x71    /* Prescaler Period Register LSB          */
44dc02f1c2SAndrey A. Chernov #define CD180_RDR       0x78    /* Receiver Data Register                 */
45dc02f1c2SAndrey A. Chernov #define CD180_RCSR      0x7A    /* Receiver Character Status Register     */
46dc02f1c2SAndrey A. Chernov #define CD180_TDR       0x7B    /* Transmit Data Register                 */
47dc02f1c2SAndrey A. Chernov #define CD180_EOIR      0x7F    /* End of Interrupt Register              */
48dc02f1c2SAndrey A. Chernov 
49dc02f1c2SAndrey A. Chernov /* Channel Registers */
50dc02f1c2SAndrey A. Chernov #define CD180_CCR       0x01    /* Channel Command Register               */
51dc02f1c2SAndrey A. Chernov #define CD180_IER       0x02    /* Interrupt Enable Register              */
52dc02f1c2SAndrey A. Chernov #define CD180_COR1      0x03    /* Channel Option Register 1              */
53dc02f1c2SAndrey A. Chernov #define CD180_COR2      0x04    /* Channel Option Register 1              */
54dc02f1c2SAndrey A. Chernov #define CD180_COR3      0x05    /* Channel Option Register 1              */
55dc02f1c2SAndrey A. Chernov #define CD180_CCSR      0x06    /* Channel Control STatus Register        */
56dc02f1c2SAndrey A. Chernov #define CD180_RDCR      0x07    /* Receive Data Count Register            */
57dc02f1c2SAndrey A. Chernov #define CD180_SCHR1     0x09    /* Special Character Register 1           */
58dc02f1c2SAndrey A. Chernov #define CD180_SCHR2     0x0A    /* Special Character Register 2           */
59dc02f1c2SAndrey A. Chernov #define CD180_SCHR3     0x0B    /* Special Character Register 3           */
60dc02f1c2SAndrey A. Chernov #define CD180_SCHR4     0x0C    /* Special Character Register 4           */
61dc02f1c2SAndrey A. Chernov #define CD180_MCOR1     0x10    /* Modem Change Option 1 Register         */
62dc02f1c2SAndrey A. Chernov #define CD180_MCOR2     0x11    /* Modem Change Option 2 Register         */
63dc02f1c2SAndrey A. Chernov #define CD180_MCR       0x12    /* Modem Change Register                  */
64dc02f1c2SAndrey A. Chernov #define CD180_RTPR      0x18    /* Receive Timeout Period Register        */
65dc02f1c2SAndrey A. Chernov #define CD180_MSVR      0x28    /* Modem Signal Value Register            */
66dc02f1c2SAndrey A. Chernov #define CD180_RBPRH     0x31    /* Receive Baud Rate Period Register MSB  */
67dc02f1c2SAndrey A. Chernov #define CD180_RBPRL     0x32    /* Receive Baud Rate Period Register LSB  */
68dc02f1c2SAndrey A. Chernov #define CD180_TBPRH     0x39    /* Transmit Baud Rate Period Register MSB */
69dc02f1c2SAndrey A. Chernov #define CD180_TBPRL     0x3A    /* Transmit Baud Rate Period Register LSB */
70dc02f1c2SAndrey A. Chernov 
71dc02f1c2SAndrey A. Chernov /** Register descritpions **/
72dc02f1c2SAndrey A. Chernov 
73dc02f1c2SAndrey A. Chernov /* Global Interrupt Vector Register */
74dc02f1c2SAndrey A. Chernov #define GIVR_IT_MSCI    0x01    /* Modem Signal Change Interrupt          */
75dc02f1c2SAndrey A. Chernov #define GIVR_IT_TDI     0x02    /* Transmit Data Interrupt                */
76dc02f1c2SAndrey A. Chernov #define GIVR_IT_RGDI    0x03    /* Receive Good Data Interrupt            */
77dc02f1c2SAndrey A. Chernov #define GIVR_IT_REI     0x07    /* Receive Exception Interrupt            */
78dc02f1c2SAndrey A. Chernov 
79dc02f1c2SAndrey A. Chernov /* Global Interrupt Channel Register */
80dc02f1c2SAndrey A. Chernov #define GICR_CHAN       0x1C    /* Channel Number Mask                    */
81dc02f1c2SAndrey A. Chernov #define GICR_LSH        2       /* Channel Number Shift                   */
82dc02f1c2SAndrey A. Chernov 
83dc02f1c2SAndrey A. Chernov /* Channel Address Register */
84dc02f1c2SAndrey A. Chernov #define CAR_CHAN        0x07    /* Channel Number Mask                    */
85453130d9SPedro F. Giffuni #define	CAR_A7          0x08    /* Address bit 7 (unused)                  */
86dc02f1c2SAndrey A. Chernov 
87dc02f1c2SAndrey A. Chernov /* Receive Character Status Register */
88dc02f1c2SAndrey A. Chernov #define RCSR_OE         0x01    /* Overrun Error                          */
89dc02f1c2SAndrey A. Chernov #define RCSR_FE         0x02    /* Frame Error                            */
90dc02f1c2SAndrey A. Chernov #define RCSR_PE         0x04    /* Parity Error                           */
91ae39e7eeSAndrey A. Chernov #define RCSR_Break      0x08    /* Break detected                         */
92ae39e7eeSAndrey A. Chernov #define RCSR_Timeout    0x80    /* Rx Timeout                             */
93ae39e7eeSAndrey A. Chernov #define RCSR_SCMASK     0x70    /* Special Character Detected Mask        */
94dc02f1c2SAndrey A. Chernov #define RCSR_SC1        0x10    /* Special Char 1 (or 1 & 3 seq matched)  */
95dc02f1c2SAndrey A. Chernov #define RCSR_SC2        0x20    /* Special Char 2 (or 2 & 4 seq matched)  */
96dc02f1c2SAndrey A. Chernov #define RCSR_SC3        0x30    /* Special Char 3                         */
97dc02f1c2SAndrey A. Chernov #define RCSR_SC4        0x40    /* Special Char 4                         */
98dc02f1c2SAndrey A. Chernov 
99dc02f1c2SAndrey A. Chernov /* Channel Command Register */
100ae39e7eeSAndrey A. Chernov #define CCR_ResetChan   0x80    /* Reset Channel                          */
101dc02f1c2SAndrey A. Chernov #define CCR_HWRESET     0x81    /* Hardware Reset (all channels)          */
102dc02f1c2SAndrey A. Chernov #define CCR_CORCHG1     0x42    /* Channel Option Register 1 Changed      */
103dc02f1c2SAndrey A. Chernov #define CCR_CORCHG2     0x44    /* Channel Option Register 2 Changed      */
104dc02f1c2SAndrey A. Chernov #define CCR_CORCHG3     0x48    /* Channel Option Register 3 Changed      */
105ae39e7eeSAndrey A. Chernov #define CCR_SENDSPCH1   0x21    /* Send Special Character 1               */
106ae39e7eeSAndrey A. Chernov #define CCR_SENDSPCH2   0x22    /* Send Special Character 2               */
107ae39e7eeSAndrey A. Chernov #define CCR_SENDSPCH3   0x23    /* Send Special Character 3               */
108ae39e7eeSAndrey A. Chernov #define CCR_SENDSPCH4   0x24    /* Send Special Character 4               */
109ae39e7eeSAndrey A. Chernov #define CCR_RCVRDIS     0x11    /* Receiver Disable                       */
110ae39e7eeSAndrey A. Chernov #define CCR_RCVREN      0x12    /* Receiver Enable                        */
111ae39e7eeSAndrey A. Chernov #define CCR_XMTRDIS     0x14    /* Transmitter Disable                    */
112ae39e7eeSAndrey A. Chernov #define CCR_XMTREN      0x18    /* Transmitter Enable                     */
113dc02f1c2SAndrey A. Chernov 
114dc02f1c2SAndrey A. Chernov /* Interrupt Enable Register */
115dc02f1c2SAndrey A. Chernov #define IER_DSR         0x80    /* Enable interrupt on DSR change         */
116dc02f1c2SAndrey A. Chernov #define IER_CD          0x40    /* Enable interrupt on CD change          */
117dc02f1c2SAndrey A. Chernov #define IER_CTS         0x20    /* Enable interrupt on CTS change         */
118ae39e7eeSAndrey A. Chernov #define IER_RxData      0x10    /* Enable interrupt on Receive Data       */
119ae39e7eeSAndrey A. Chernov #define IER_RxSC        0x08    /* Enable interrupt on Receive Spec. Char */
120ae39e7eeSAndrey A. Chernov #define IER_TxRdy       0x04    /* Enable interrupt on TX FIFO empty      */
121ae39e7eeSAndrey A. Chernov #define IER_TxMpty      0x02    /* Enable interrupt on TX completely empty*/
122dc02f1c2SAndrey A. Chernov #define IER_RET         0x01    /* Enable interrupt on RX Except. Timeout */
123dc02f1c2SAndrey A. Chernov 
124dc02f1c2SAndrey A. Chernov /* Channel Option Register 1 */
125dc02f1c2SAndrey A. Chernov #define COR1_ODDP       0x80    /* Odd Parity                             */
126ae39e7eeSAndrey A. Chernov #define COR1_ParMMASK   0x60    /* Parity Mode mask                       */
127dc02f1c2SAndrey A. Chernov #define COR1_NOPAR      0x02    /* No Parity                              */
128dc02f1c2SAndrey A. Chernov #define COR1_FORCEPAR   0x20    /* Force Parity                           */
129dc02f1c2SAndrey A. Chernov #define COR1_NORMPAR    0x40    /* Normal Parity                          */
130ae39e7eeSAndrey A. Chernov #define COR1_Ignore     0x10    /* Ignore Parity on RX                    */
131ae39e7eeSAndrey A. Chernov #define COR1_StopMASK   0x0C    /* Stop Bits mode mask                    */
132dc02f1c2SAndrey A. Chernov #define COR1_1SB        0x00    /* 1 Stop Bit                             */
133dc02f1c2SAndrey A. Chernov #define COR1_15SB       0x04    /* 1.5 Stop Bits                          */
134dc02f1c2SAndrey A. Chernov #define COR1_2SB        0x08    /* 2 Stop Bits                            */
135dc02f1c2SAndrey A. Chernov #define COR1_CHLMASK    0x03    /* Character Length mask                  */
136dc02f1c2SAndrey A. Chernov #define COR1_5BITS      0x00    /* 5 bits                                 */
137dc02f1c2SAndrey A. Chernov #define COR1_6BITS      0x01    /* 6 bits                                 */
138dc02f1c2SAndrey A. Chernov #define COR1_7BITS      0x02    /* 7 bits                                 */
139dc02f1c2SAndrey A. Chernov #define COR1_8BITS      0x03    /* 8 bits                                 */
140dc02f1c2SAndrey A. Chernov 
141dc02f1c2SAndrey A. Chernov /* Channel Option Register 2 */
142dc02f1c2SAndrey A. Chernov #define COR2_IXM        0x80    /* Implied XON mode                       */
143ae39e7eeSAndrey A. Chernov #define COR2_TxIBE      0x40    /* Enable In-Band XON/XOFF Flow Control   */
144dc02f1c2SAndrey A. Chernov #define COR2_ETC        0x20    /* Embedded Tx Commands Enable            */
145dc02f1c2SAndrey A. Chernov #define COR2_LLM        0x10    /* Local Loopback Mode                    */
146dc02f1c2SAndrey A. Chernov #define COR2_RLM        0x08    /* Remote Loopback Mode                   */
147ae39e7eeSAndrey A. Chernov #define COR2_RtsAO      0x04    /* RTS Automatic Output Enable            */
148ae39e7eeSAndrey A. Chernov #define COR2_CtsAE      0x02    /* CTS Automatic Enable                   */
149ae39e7eeSAndrey A. Chernov #define COR2_DsrAE      0x01    /* DSR Automatic Enable                   */
150dc02f1c2SAndrey A. Chernov 
151dc02f1c2SAndrey A. Chernov /* Channel Option Register 3 */
152ae39e7eeSAndrey A. Chernov #define COR3_XonCH      0x80    /* XON is a double seq (1 & 3)            */
153ae39e7eeSAndrey A. Chernov #define COR3_XoffCH     0x40    /* XOFF is a double seq (1 & 3)           */
154dc02f1c2SAndrey A. Chernov #define COR3_FCT        0x20    /* Flow-Control Transparency Mode         */
155dc02f1c2SAndrey A. Chernov #define COR3_SCDE       0x10    /* Special Character Detection Enable     */
156ae39e7eeSAndrey A. Chernov #define COR3_RxTHMASK   0x0F    /* RX FIFO Threshold value (1-8)          */
157dc02f1c2SAndrey A. Chernov 
158dc02f1c2SAndrey A. Chernov /* Channel Control Status Register */
159ae39e7eeSAndrey A. Chernov #define CCSR_RxEn       0x80    /* Revceiver Enabled                      */
160ae39e7eeSAndrey A. Chernov #define CCSR_RxFloff    0x40    /* Receive Flow Off (XOFF sent)           */
161ae39e7eeSAndrey A. Chernov #define CCSR_RxFlon     0x20    /* Receive Flow On (XON sent)             */
162ae39e7eeSAndrey A. Chernov #define CCSR_TxEn       0x08    /* Transmitter Enabled                    */
163ae39e7eeSAndrey A. Chernov #define CCSR_TxFloff    0x04    /* Transmit Flow Off (got XOFF)           */
164ae39e7eeSAndrey A. Chernov #define CCSR_TxFlon     0x02    /* Transmit Flow On (got XON)             */
165dc02f1c2SAndrey A. Chernov 
166dc02f1c2SAndrey A. Chernov /* Modem Change Option Register 1 */
167ae39e7eeSAndrey A. Chernov #define MCOR1_DSRzd     0x80    /* Detect 0->1 transition of DSR          */
168ae39e7eeSAndrey A. Chernov #define MCOR1_CDzd      0x40    /* Detect 0->1 transition of CD           */
169ae39e7eeSAndrey A. Chernov #define MCOR1_CTSzd     0x20    /* Detect 0->1 transition of CTS          */
170ae39e7eeSAndrey A. Chernov #define MCOR1_DTRthMASK 0x0F    /* Automatic DTR FC Threshold (1-8) chars */
171dc02f1c2SAndrey A. Chernov 
172dc02f1c2SAndrey A. Chernov /* Modem Change Option Register 2 */
173ae39e7eeSAndrey A. Chernov #define MCOR2_DSRod     0x80    /* Detect 1->0 transition of DSR          */
174ae39e7eeSAndrey A. Chernov #define MCOR2_CDod      0x40    /* Detect 1->0 transition of CD           */
175ae39e7eeSAndrey A. Chernov #define MCOR2_CTSod     0x20    /* Detect 1->0 transition of CTS          */
176dc02f1c2SAndrey A. Chernov 
177dc02f1c2SAndrey A. Chernov /* Modem Change Register */
178ae39e7eeSAndrey A. Chernov #define MCR_DSRchg      0x80    /* DSR Changed                            */
179ae39e7eeSAndrey A. Chernov #define MCR_CDchg       0x40    /* CD  Changed                            */
180ae39e7eeSAndrey A. Chernov #define MCR_CTSchg      0x20    /* CTS Changed                            */
181dc02f1c2SAndrey A. Chernov 
182dc02f1c2SAndrey A. Chernov /* Modem Signal Value Register */
183dc02f1c2SAndrey A. Chernov #define MSVR_DSR        0x80    /* Current state of DSR input             */
184dc02f1c2SAndrey A. Chernov #define MSVR_CD         0x40    /* Current state of DSR input             */
185dc02f1c2SAndrey A. Chernov #define MSVR_CTS        0x20    /* Current state of CTS input             */
186dc02f1c2SAndrey A. Chernov #define MSVR_DTR        0x02    /* Current state of DTR output            */
187dc02f1c2SAndrey A. Chernov #define MSVR_RTS        0x01    /* Current state of RTS output            */
188dc02f1c2SAndrey A. Chernov 
189dc02f1c2SAndrey A. Chernov /* Escape characters */
190dc02f1c2SAndrey A. Chernov #define CD180_C_ESC     0x00    /* Escape character                       */
191dc02f1c2SAndrey A. Chernov #define CD180_C_SBRK    0x81    /* Start sending BREAK                    */
192dc02f1c2SAndrey A. Chernov #define CD180_C_DELAY   0x82    /* Delay output                           */
193dc02f1c2SAndrey A. Chernov #define CD180_C_EBRK    0x83    /* Stop sending BREAK                     */
194dc02f1c2SAndrey A. Chernov 
195dc02f1c2SAndrey A. Chernov /* Miscellaneous */
196dc02f1c2SAndrey A. Chernov #define CD180_NCHAN     8       /* 8 channels per chip                    */
197dc02f1c2SAndrey A. Chernov #define CD180_CTICKS    16      /* 16 ticks for character processing      */
198dc02f1c2SAndrey A. Chernov #define CD180_NFIFO     8       /* 8 bytes in FIFO                        */
199