1 1.26 mrg /* $NetBSD: z8530sc.h,v 1.26 2009/05/22 03:51:30 mrg 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.25 tsutsui volatile uint8_t *cs_reg_csr; /* ctrl, status, and reg. number. */ 115 1.25 tsutsui volatile uint8_t *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.23 ad kmutex_t 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.25 tsutsui uint8_t cs_creg[16]; /* current values */ 142 1.25 tsutsui uint8_t cs_preg[16]; /* pending values */ 143 1.5 gwr int cs_heldchange; /* change pending (creg != preg) */ 144 1.1 gwr 145 1.25 tsutsui uint8_t cs_rr0; /* last rr0 processed */ 146 1.25 tsutsui uint8_t cs_rr0_delta; /* rr0 changes at status intr. */ 147 1.25 tsutsui uint8_t cs_rr0_mask; /* rr0 bits that stop output */ 148 1.25 tsutsui uint8_t cs_rr0_dcd; /* which bit to read as DCD */ 149 1.25 tsutsui uint8_t cs_rr0_cts; /* which bit to read as CTS */ 150 1.25 tsutsui uint8_t 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.25 tsutsui uint8_t cs_wr5_dtr; /* which bit to write as DTR */ 154 1.25 tsutsui uint8_t 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.25 tsutsui volatile uint8_t 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.24 ad void zs_lock_init(struct zs_chanstate *); 206 1.26 mrg void zs_lock_chan(struct zs_chanstate *); 207 1.26 mrg void zs_unlock_chan(struct zs_chanstate *); 208 1.6 gwr 209 1.21 perry int zs_check_kgdb(struct zs_chanstate *, int); 210 1.1 gwr 211