xref: /openbsd/sys/dev/ic/z8530sc.h (revision 78b63d65)
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