z8530sc.h revision 1.21 1 1.21 perry /* $NetBSD: z8530sc.h,v 1.21 2005/02/04 02:10:37 perry Exp $ */
2 1.1 gwr
3 1.1 gwr /*
4 1.1 gwr * Copyright (c) 1992, 1993
5 1.1 gwr * The Regents of the University of California. All rights reserved.
6 1.19 agc *
7 1.19 agc * This software was developed by the Computer Systems Engineering group
8 1.19 agc * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9 1.19 agc * contributed to Berkeley.
10 1.19 agc *
11 1.19 agc * All advertising materials mentioning features or use of this software
12 1.19 agc * must display the following acknowledgement:
13 1.19 agc * This product includes software developed by the University of
14 1.19 agc * California, Lawrence Berkeley Laboratory.
15 1.19 agc *
16 1.19 agc * Redistribution and use in source and binary forms, with or without
17 1.19 agc * modification, are permitted provided that the following conditions
18 1.19 agc * are met:
19 1.19 agc * 1. Redistributions of source code must retain the above copyright
20 1.19 agc * notice, this list of conditions and the following disclaimer.
21 1.19 agc * 2. Redistributions in binary form must reproduce the above copyright
22 1.19 agc * notice, this list of conditions and the following disclaimer in the
23 1.19 agc * documentation and/or other materials provided with the distribution.
24 1.19 agc * 3. Neither the name of the University nor the names of its contributors
25 1.19 agc * may be used to endorse or promote products derived from this software
26 1.19 agc * without specific prior written permission.
27 1.19 agc *
28 1.19 agc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 1.19 agc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 1.19 agc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 1.19 agc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 1.19 agc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 1.19 agc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 1.19 agc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 1.19 agc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 1.19 agc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 1.19 agc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 1.19 agc * SUCH DAMAGE.
39 1.19 agc *
40 1.19 agc * @(#)zsvar.h 8.1 (Berkeley) 6/11/93
41 1.19 agc */
42 1.19 agc
43 1.19 agc /*
44 1.19 agc * Copyright (c) 1994 Gordon W. Ross
45 1.1 gwr *
46 1.1 gwr * This software was developed by the Computer Systems Engineering group
47 1.1 gwr * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
48 1.1 gwr * contributed to Berkeley.
49 1.1 gwr *
50 1.1 gwr * All advertising materials mentioning features or use of this software
51 1.1 gwr * must display the following acknowledgement:
52 1.1 gwr * This product includes software developed by the University of
53 1.1 gwr * California, Lawrence Berkeley Laboratory.
54 1.1 gwr *
55 1.1 gwr * Redistribution and use in source and binary forms, with or without
56 1.1 gwr * modification, are permitted provided that the following conditions
57 1.1 gwr * are met:
58 1.1 gwr * 1. Redistributions of source code must retain the above copyright
59 1.1 gwr * notice, this list of conditions and the following disclaimer.
60 1.1 gwr * 2. Redistributions in binary form must reproduce the above copyright
61 1.1 gwr * notice, this list of conditions and the following disclaimer in the
62 1.1 gwr * documentation and/or other materials provided with the distribution.
63 1.1 gwr * 3. All advertising materials mentioning features or use of this software
64 1.1 gwr * must display the following acknowledgement:
65 1.1 gwr * This product includes software developed by the University of
66 1.1 gwr * California, Berkeley and its contributors.
67 1.1 gwr * 4. Neither the name of the University nor the names of its contributors
68 1.1 gwr * may be used to endorse or promote products derived from this software
69 1.1 gwr * without specific prior written permission.
70 1.1 gwr *
71 1.1 gwr * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
72 1.1 gwr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
73 1.1 gwr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
74 1.1 gwr * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
75 1.1 gwr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
76 1.1 gwr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
77 1.1 gwr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
78 1.1 gwr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
79 1.1 gwr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
80 1.1 gwr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
81 1.1 gwr * SUCH DAMAGE.
82 1.1 gwr *
83 1.1 gwr * @(#)zsvar.h 8.1 (Berkeley) 6/11/93
84 1.1 gwr */
85 1.1 gwr
86 1.20 thorpej #ifdef _KERNEL_OPT
87 1.20 thorpej #include "locators.h"
88 1.20 thorpej #endif
89 1.1 gwr
90 1.1 gwr /*
91 1.1 gwr * Function vector - per channel
92 1.1 gwr */
93 1.5 gwr struct zs_chanstate;
94 1.1 gwr struct zsops {
95 1.21 perry void (*zsop_rxint)(struct zs_chanstate *);
96 1.11 mycroft /* receive char available */
97 1.21 perry void (*zsop_stint)(struct zs_chanstate *, int);
98 1.11 mycroft /* external/status */
99 1.21 perry void (*zsop_txint)(struct zs_chanstate *);
100 1.11 mycroft /* xmit buffer empty */
101 1.21 perry void (*zsop_softint)(struct zs_chanstate *);
102 1.11 mycroft /* process software interrupt */
103 1.1 gwr };
104 1.1 gwr
105 1.1 gwr extern struct zsops zsops_null;
106 1.1 gwr
107 1.1 gwr
108 1.1 gwr /*
109 1.1 gwr * Software state, per zs channel.
110 1.1 gwr */
111 1.1 gwr struct zs_chanstate {
112 1.1 gwr
113 1.1 gwr /* Pointers to the device registers. */
114 1.1 gwr volatile u_char *cs_reg_csr; /* ctrl, status, and reg. number. */
115 1.1 gwr volatile u_char *cs_reg_data; /* data or numbered register */
116 1.1 gwr
117 1.1 gwr int cs_channel; /* sub-unit number */
118 1.3 gwr void *cs_private; /* sub-driver data pointer */
119 1.1 gwr struct zsops *cs_ops;
120 1.18 pk
121 1.18 pk struct simplelock cs_lock; /* per channel lock */
122 1.1 gwr
123 1.3 gwr int cs_brg_clk; /* BAUD Rate Generator clock
124 1.3 gwr * (usually PCLK / 16) */
125 1.5 gwr int cs_defspeed; /* default baud rate */
126 1.5 gwr int cs_defcflag; /* default cflag */
127 1.1 gwr
128 1.1 gwr /*
129 1.1 gwr * We must keep a copy of the write registers as they are
130 1.1 gwr * mostly write-only and we sometimes need to set and clear
131 1.1 gwr * individual bits (e.g., in WR3). Not all of these are
132 1.1 gwr * needed but 16 bytes is cheap and this makes the addressing
133 1.1 gwr * simpler. Unfortunately, we can only write to some registers
134 1.1 gwr * when the chip is not actually transmitting, so whenever
135 1.1 gwr * we are expecting a `transmit done' interrupt the preg array
136 1.1 gwr * is allowed to `get ahead' of the current values. In a
137 1.1 gwr * few places we must change the current value of a register,
138 1.1 gwr * rather than (or in addition to) the pending value; for these
139 1.1 gwr * cs_creg[] contains the current value.
140 1.1 gwr */
141 1.1 gwr u_char cs_creg[16]; /* current values */
142 1.1 gwr u_char cs_preg[16]; /* pending values */
143 1.5 gwr int cs_heldchange; /* change pending (creg != preg) */
144 1.1 gwr
145 1.1 gwr u_char cs_rr0; /* last rr0 processed */
146 1.4 gwr u_char cs_rr0_delta; /* rr0 changes at status intr. */
147 1.8 mycroft u_char cs_rr0_mask; /* rr0 bits that stop output */
148 1.5 gwr u_char cs_rr0_dcd; /* which bit to read as DCD */
149 1.5 gwr u_char cs_rr0_cts; /* which bit to read as CTS */
150 1.12 wrstuden u_char cs_rr0_pps; /* which bit to use for PPS */
151 1.5 gwr /* the above is set only while CRTSCTS is enabled. */
152 1.5 gwr
153 1.5 gwr u_char cs_wr5_dtr; /* which bit to write as DTR */
154 1.5 gwr u_char cs_wr5_rts; /* which bit to write as RTS */
155 1.5 gwr /* the above is set only while CRTSCTS is enabled. */
156 1.1 gwr
157 1.1 gwr char cs_softreq; /* need soft interrupt call */
158 1.7 gwr char cs_spare1; /* (for skippy :) */
159 1.17 ad
160 1.17 ad /*
161 1.17 ad * For strange systems that have oddly wired serial ports, we
162 1.17 ad * provide a pointer to the channel state of the port that has
163 1.17 ad * our status lines on it.
164 1.17 ad */
165 1.17 ad struct zs_chanstate *cs_ctl_chan;
166 1.13 jdc
167 1.13 jdc /* power management hooks */
168 1.21 perry int (*enable)(struct zs_chanstate *);
169 1.21 perry void (*disable)(struct zs_chanstate *);
170 1.13 jdc int enabled;
171 1.13 jdc
172 1.5 gwr /* MD code might define a larger variant of this. */
173 1.1 gwr };
174 1.1 gwr
175 1.14 pk struct consdev;
176 1.1 gwr struct zsc_attach_args {
177 1.14 pk int channel; /* two serial channels per zsc */
178 1.14 pk int hwflags; /* see definitions below */
179 1.14 pk /* `consdev' is only valid if ZS_HWFLAG_USE_CONSDEV is set */
180 1.14 pk struct consdev *consdev;
181 1.1 gwr };
182 1.20 thorpej
183 1.20 thorpej #define zsccf_channel cf_loc[ZSCCF_CHANNEL]
184 1.20 thorpej
185 1.14 pk /* In case of split console devices, use these: */
186 1.14 pk #define ZS_HWFLAG_CONSOLE_INPUT 1
187 1.14 pk #define ZS_HWFLAG_CONSOLE_OUTPUT 2
188 1.14 pk #define ZS_HWFLAG_CONSOLE \
189 1.14 pk (ZS_HWFLAG_CONSOLE_INPUT | ZS_HWFLAG_CONSOLE_OUTPUT)
190 1.14 pk #define ZS_HWFLAG_NO_DCD 4 /* Ignore the DCD bit */
191 1.14 pk #define ZS_HWFLAG_NO_CTS 8 /* Ignore the CTS bit */
192 1.14 pk #define ZS_HWFLAG_RAW 16 /* advise raw mode */
193 1.14 pk #define ZS_HWFLAG_USE_CONSDEV 32 /* Use console ops from `consdev' */
194 1.15 thorpej #define ZS_HWFLAG_NORESET 64 /* Don't reset at attach time */
195 1.5 gwr
196 1.21 perry int zsc_intr_soft(void *);
197 1.21 perry int zsc_intr_hard(void *);
198 1.5 gwr
199 1.21 perry void zs_abort(struct zs_chanstate *);
200 1.21 perry void zs_break(struct zs_chanstate *, int);
201 1.21 perry void zs_iflush(struct zs_chanstate *);
202 1.21 perry void zs_loadchannelregs(struct zs_chanstate *);
203 1.21 perry int zs_set_speed(struct zs_chanstate *, int);
204 1.21 perry int zs_set_modes(struct zs_chanstate *, int);
205 1.6 gwr
206 1.21 perry int zs_check_kgdb(struct zs_chanstate *, int);
207 1.1 gwr
208