1 /* $OpenBSD: z8530sc.h,v 1.8 2001/08/18 22:37:40 art Exp $ */ 2 /* $NetBSD: z8530sc.h,v 1.4 1996/10/16 20:34:54 gwr Exp $ */ 3 4 /* 5 * Copyright (c) 1994 Gordon W. Ross 6 * Copyright (c) 1992, 1993 7 * The Regents of the University of California. All rights reserved. 8 * 9 * This software was developed by the Computer Systems Engineering group 10 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 11 * contributed to Berkeley. 12 * 13 * All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by the University of 16 * California, Lawrence Berkeley Laboratory. 17 * 18 * Redistribution and use in source and binary forms, with or without 19 * modification, are permitted provided that the following conditions 20 * are met: 21 * 1. Redistributions of source code must retain the above copyright 22 * notice, this list of conditions and the following disclaimer. 23 * 2. Redistributions in binary form must reproduce the above copyright 24 * notice, this list of conditions and the following disclaimer in the 25 * documentation and/or other materials provided with the distribution. 26 * 3. All advertising materials mentioning features or use of this software 27 * must display the following acknowledgement: 28 * This product includes software developed by the University of 29 * California, Berkeley and its contributors. 30 * 4. Neither the name of the University nor the names of its contributors 31 * may be used to endorse or promote products derived from this software 32 * without specific prior written permission. 33 * 34 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 35 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 36 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 37 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 38 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 39 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 40 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 41 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 42 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 43 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 44 * SUCH DAMAGE. 45 * 46 * @(#)zsvar.h 8.1 (Berkeley) 6/11/93 47 */ 48 49 50 /* 51 * Software state, per zs channel. 52 */ 53 struct zs_chanstate { 54 55 /* Pointers to the device registers. */ 56 volatile u_char *cs_reg_csr; /* ctrl, status, and reg. number. */ 57 volatile u_char *cs_reg_data; /* data or numbered register */ 58 59 int cs_channel; /* sub-unit number */ 60 void *cs_private; /* sub-driver data pointer */ 61 struct zsops *cs_ops; 62 63 int cs_brg_clk; /* BAUD Rate Generator clock 64 * (usually PCLK / 16) */ 65 int cs_defspeed; /* default baud rate (from PROM) */ 66 67 /* 68 * We must keep a copy of the write registers as they are 69 * mostly write-only and we sometimes need to set and clear 70 * individual bits (e.g., in WR3). Not all of these are 71 * needed but 16 bytes is cheap and this makes the addressing 72 * simpler. Unfortunately, we can only write to some registers 73 * when the chip is not actually transmitting, so whenever 74 * we are expecting a `transmit done' interrupt the preg array 75 * is allowed to `get ahead' of the current values. In a 76 * few places we must change the current value of a register, 77 * rather than (or in addition to) the pending value; for these 78 * cs_creg[] contains the current value. 79 */ 80 u_char cs_creg[16]; /* current values */ 81 u_char cs_preg[16]; /* pending values */ 82 83 u_char cs_heldchange; /* change pending (creg != preg) */ 84 u_char cs_rr0; /* last rr0 processed */ 85 u_char cs_rr0_delta; /* rr0 changes at status intr. */ 86 87 char cs_softreq; /* need soft interrupt call */ 88 }; 89 90 /* 91 * Function vector - per channel 92 */ 93 struct zsops { 94 /* receive char available */ 95 void (*zsop_rxint)__P((register struct zs_chanstate *)); 96 97 /* external/status */ 98 void (*zsop_stint)__P((register struct zs_chanstate *)); 99 100 /* xmit buffer empty */ 101 void (*zsop_txint)__P((register struct zs_chanstate *)); 102 103 /* process software interrupt */ 104 void (*zsop_softint)__P((struct zs_chanstate *)); 105 }; 106 107 extern struct zsops zsops_null; 108 109 struct zsc_attach_args { 110 int channel; /* two serial channels per zsc */ 111 int hwflags; 112 }; 113 #define ZS_HWFLAG_CONSOLE 1 114 115 int zsc_intr_hard __P((void *)); 116 int zsc_intr_soft __P((void *)); 117 void zs_break __P((struct zs_chanstate *, int)); 118 int zs_getspeed __P((struct zs_chanstate *)); 119 void zs_iflush __P((struct zs_chanstate *)); 120 void zs_loadchannelregs __P((struct zs_chanstate *)); 121