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 #ifndef _DEV_IC_CYREG_H_
36 #define _DEV_IC_CYREG_H_
37
38 #include <sys/timeout.h>
39
40
41
42
43
44 #define CY8_SVCACKR 0x100
45 #define CY8_SVCACKT 0x200
46 #define CY8_SVCACKM 0x300
47
48
49 #define CY_CD1400_MEMSPACING 0x400
50
51
52 #define CY32_ADDR_FIX 0xe00
53
54 #define CY16_RESET 0x1400
55 #define CY_CLEAR_INTR 0x1800
56
57 #define CY_MAX_CD1400s 8
58
59
60 #define CY_PCI_INTENA 0x68
61 #define CY_PCI_INTENA_9050 0x4c
62
63
64 #define CY_PLX_VER 0x3400
65 #define CY_PLX_9050 0x0b
66 #define CY_PLX_9060 0x0c
67 #define CY_PLX_9080 0x0d
68
69 #define CY_CLOCK 25000000
70 #define CY_CLOCK_60 60000000
71
72
73
74
75
76
77 #define CY_BUSTYPE_ISA 0
78 #define CY_BUSTYPE_PCI 1
79
80 #define RX_FIFO_THRESHOLD 6
81
82
83
84
85 #define RX_DTR_THRESHOLD 9
86
87
88
89
90 #define CY_MAX_PORTS (CD1400_NO_OF_CHANNELS * CY_MAX_CD1400s)
91
92
93
94
95
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
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
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
128
129
130 #define IBUF_SIZE (2*512)
131
132
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;
145
146
147 u_char cy_carrier_stat;
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
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
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;
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