Annotation of sys/dev/ic/cyreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: cyreg.h,v 1.8 2002/09/14 15:00:02 art Exp $ */
2: /* $FreeBSD: cyreg.h,v 1.1 1995/07/05 12:15:51 bde Exp $ */
3:
4: /*-
5: * Copyright (c) 1995 Bruce Evans.
6: * All rights reserved.
7: *
8: * Modified by Timo Rossi, 1996
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: * 3. Neither the name of the author nor the names of contributors
19: * may be used to endorse or promote products derived from this software
20: * without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32: * SUCH DAMAGE.
33: */
34:
35: #ifndef _DEV_IC_CYREG_H_
36: #define _DEV_IC_CYREG_H_
37:
38: #include <sys/timeout.h>
39:
40: /*
41: * Definitions for Cyclades Cyclom-Y serial boards.
42: */
43:
44: #define CY8_SVCACKR 0x100
45: #define CY8_SVCACKT 0x200
46: #define CY8_SVCACKM 0x300
47:
48: /* twice this in PCI mode (shifed BUSTYPE bits left) */
49: #define CY_CD1400_MEMSPACING 0x400
50:
51: /* adjustment value for accessing the last 4 cd1400s on Cyclom-32 */
52: #define CY32_ADDR_FIX 0xe00
53:
54: #define CY16_RESET 0x1400
55: #define CY_CLEAR_INTR 0x1800 /* intr ack address */
56:
57: #define CY_MAX_CD1400s 8 /* for Cyclom-32 */
58:
59: /* I/O location for enabling interrupts on PCI Cyclom cards */
60: #define CY_PCI_INTENA 0x68
61: #define CY_PCI_INTENA_9050 0x4c
62:
63: /* Cyclom-Y Custom Register for PLX ID (PCI only) */
64: #define CY_PLX_VER 0x3400 /* PLX version */
65: #define CY_PLX_9050 0x0b
66: #define CY_PLX_9060 0x0c
67: #define CY_PLX_9080 0x0d
68:
69: #define CY_CLOCK 25000000 /* baud rate clock */
70: #define CY_CLOCK_60 60000000 /* baud rate clock for newer cd1400s */
71:
72: /*
73: * bustype is actually the shift count for the offset
74: * ISA card addresses are multiplied by 2 (shifted 1 bit)
75: * and PCI addresses multiplied by 4 (shifted 2 bits)
76: */
77: #define CY_BUSTYPE_ISA 0
78: #define CY_BUSTYPE_PCI 1
79:
80: #define RX_FIFO_THRESHOLD 6
81:
82: /* Automatic RTS (or actually DTR, the RTS and DTR lines need to be exchanged)
83: * handshake threshold used if CY_HW_RTS is defined
84: */
85: #define RX_DTR_THRESHOLD 9
86:
87: /*
88: * Maximum number of ports per card
89: */
90: #define CY_MAX_PORTS (CD1400_NO_OF_CHANNELS * CY_MAX_CD1400s)
91:
92: /*
93: * Port number on card encoded in low 5 bits
94: * card number in next 2 bits (only space for 4 cards)
95: * high bit reserved for dialout flag
96: */
97: #define CY_PORT(x) (minor(x) & 0xf)
98: #define CY_CARD(x) ((minor(x) >> 5) & 3)
99: #define CY_DIALOUT(x) ((minor(x) & 0x80) != 0)
100: #define CY_DIALIN(x) (!CY_DIALOUT(x))
101:
102: /*
103: * read/write cd1400 registers (when cy_port-structure is available)
104: */
105: #define cd_read_reg(cy,reg) bus_space_read_1(cy->cy_memt, cy->cy_memh, \
106: cy->cy_chip_offs+(((reg<<1))<<cy->cy_bustype))
107:
108: #define cd_write_reg(cy,reg,val) bus_space_write_1(cy->cy_memt, cy->cy_memh, \
109: cy->cy_chip_offs+(((reg<<1))<<cy->cy_bustype), \
110: (val))
111:
112: /*
113: * read/write cd1400 registers (when sc_softc-structure is available)
114: */
115: #define cd_read_reg_sc(sc,chip,reg) bus_space_read_1(sc->sc_memt, \
116: sc->sc_memh, \
117: sc->sc_cd1400_offs[chip]+\
118: (((reg<<1))<<sc->sc_bustype))
119:
120: #define cd_write_reg_sc(sc,chip,reg,val) bus_space_write_1(sc->sc_memt, \
121: sc->sc_memh, \
122: sc->sc_cd1400_offs[chip]+\
123: (((reg<<1))<<sc->sc_bustype), \
124: (val))
125:
126: /*
127: * ibuf is a simple ring buffer. It is always used two
128: * bytes at a time (status and data)
129: */
130: #define IBUF_SIZE (2*512)
131:
132: /* software state for one port */
133: struct cy_port {
134: int cy_port_num;
135: bus_space_tag_t cy_memt;
136: bus_space_handle_t cy_memh;
137: int cy_chip_offs;
138: int cy_bustype;
139: int cy_clock;
140: struct tty *cy_tty;
141: int cy_openflags;
142: int cy_fifo_overruns;
143: int cy_ibuf_overruns;
144: u_char cy_channel_control; /* last CCR channel
145: * control command
146: * bits */
147: u_char cy_carrier_stat; /* copied from MSVR2 */
148: u_char cy_flags;
149: u_char *cy_ibuf, *cy_ibuf_end;
150: u_char *cy_ibuf_rd_ptr, *cy_ibuf_wr_ptr;
151: #ifdef CY_DEBUG1
152: int cy_rx_int_count;
153: int cy_tx_int_count;
154: int cy_modem_int_count;
155: int cy_start_count;
156: #endif /* CY_DEBUG1 */
157: };
158:
159: #define CYF_CARRIER_CHANGED 0x01
160: #define CYF_START_BREAK 0x02
161: #define CYF_END_BREAK 0x04
162: #define CYF_STOP 0x08
163: #define CYF_SEND_NUL 0x10
164: #define CYF_START 0x20
165:
166: /* software state for one card */
167: struct cy_softc {
168: struct device sc_dev;
169: struct timeout sc_poll_to;
170: int sc_events;
171: void *sc_ih;
172: bus_space_tag_t sc_memt;
173: bus_space_handle_t sc_memh;
174: int sc_bustype;
175: int sc_nports; /* number of ports on this card */
176: int sc_cd1400_offs[CY_MAX_CD1400s];
177: struct cy_port sc_ports[CY_MAX_PORTS];
178: int sc_nr_cd1400s;
179: #ifdef CY_DEBUG1
180: int sc_poll_count1;
181: int sc_poll_count2;
182: #endif
183: };
184:
185: int cy_probe_common(bus_space_tag_t, bus_space_handle_t, int);
186: void cy_attach(struct device *, struct device *);
187: int cy_intr(void *);
188:
189: #endif /* _DEV_IC_CYREG_H_ */
CVSweb