clmpccvar.h revision 1.1 1 /* $NetBSD: clmpccvar.h,v 1.1 1999/02/13 17:05:20 scw Exp $ */
2
3 /*-
4 * Copyright (c) 1999 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Steve C. Woodford.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the NetBSD
21 * Foundation, Inc. and its contributors.
22 * 4. Neither the name of The NetBSD Foundation nor the names of its
23 * contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38
39 #ifndef __clmpccvar_h
40 #define __clmpccvar_h
41
42
43 /* Buffer size for character buffer */
44 #define CLMPCC_RING_SIZE 512
45
46 /* How many channels per chip */
47 #define CLMPCC_NUM_CHANS 4
48
49 /* Reasons for calling the MD code's iack hook function */
50 #define CLMPCC_IACK_MODEM 0
51 #define CLMPCC_IACK_RX 1
52 #define CLMPCC_IACK_TX 2
53
54
55 struct clmpcc_softc;
56
57 /*
58 * Each channel is represented by one of the following structures
59 */
60 struct clmpcc_chan {
61 struct tty *ch_tty; /* This channel's tty structure */
62 struct clmpcc_softc *ch_sc; /* Pointer to chip's softc structure */
63 int ch_car; /* Channel number (CD2400_REG_CAR) */
64 u_char ch_openflags; /* Persistant TIOC flags */
65 u_char ch_flags; /* Various channel-specific flags */
66 #define CLMPCC_FLG_IS_CONSOLE 0x01 /* Channel is system console */
67 #define CLMPCC_FLG_CARRIER_CHNG 0x02
68 #define CLMPCC_FLG_START_BREAK 0x04
69 #define CLMPCC_FLG_END_BREAK 0x08
70 #define CLMPCC_FLG_START 0x10
71 #define CLMPCC_FLG_STOP 0x20
72 #define CLMPCC_FLG_SEND_NULL 0x40
73 #define CLMPCC_FLG_FIFO_CLEAR 0x80
74
75 u_char ch_fifo; /* Current Rx Fifo threshold */
76 u_char ch_control;
77
78 u_int8_t *ch_ibuf; /* Start of input ring buffer */
79 u_int8_t *ch_ibuf_end; /* End of input ring buffer */
80 u_int8_t *ch_ibuf_rd; /* Input buffer tail (reader) */
81 u_int8_t *ch_ibuf_wr; /* Input buffer head (writer) */
82 };
83
84
85 struct clmpcc_softc {
86 struct device sc_dev;
87
88 /*
89 * The bus/MD-specific attachment code must initialise the
90 * following four fields before calling 'clmpcc_attach_subr()'.
91 */
92 bus_space_tag_t sc_iot; /* Tag for parent bus */
93 bus_space_handle_t sc_ioh; /* Handle for chip's regs */
94
95 void *sc_data; /* MD-specific data */
96 int sc_clk; /* Clock-rate, in Hz */
97 u_char sc_vector_base; /* Vector base reg, or 0 for auto */
98 u_char sc_rpilr; /* Receive Priority Interupt Level */
99 u_char sc_tpilr; /* Transmit Priority Interupt Level */
100 u_char sc_mpilr; /* Modem Priority Interupt Level */
101 int sc_swaprtsdtr; /* Non-zero if RTS and DTR swapped */
102 u_int sc_byteswap; /* One of the following ... */
103 #define CLMPCC_BYTESWAP_LOW 0x00 /* *byteswap pin is low */
104 #define CLMPCC_BYTESWAP_HIGH 0x03 /* *byteswap pin is high */
105
106 /* Called to request a soft interrupt callback to clmpcc_softintr */
107 void (*sc_softhook) __P((struct clmpcc_softc *));
108
109 /* Called when an interrupt has to be acknowledged in polled mode. */
110 void (*sc_iackhook) __P((struct clmpcc_softc *, int));
111
112 /*
113 * No user-serviceable parts below
114 */
115 int sc_soft_running;
116 struct clmpcc_chan sc_chans[CLMPCC_NUM_CHANS];
117 };
118
119 extern void clmpcc_attach __P((struct clmpcc_softc *));
120 extern int clmpcc_cnattach __P((struct clmpcc_softc *, int, int));
121 extern int clmpcc_rxintr __P((void *));
122 extern int clmpcc_txintr __P((void *));
123 extern int clmpcc_mdintr __P((void *));
124 extern int clmpcc_softintr __P((void *));
125
126 #endif /* __clmpccvar_h */
127