1 1.20 christos /* $NetBSD: magmareg.h,v 1.20 2018/07/09 14:07:37 christos Exp $ */ 2 1.13 plunky 3 1.13 plunky /*- 4 1.1 pk * Copyright (c) 1998 Iain Hibbert 5 1.1 pk * All rights reserved. 6 1.1 pk * 7 1.1 pk * Redistribution and use in source and binary forms, with or without 8 1.1 pk * modification, are permitted provided that the following conditions 9 1.1 pk * are met: 10 1.1 pk * 1. Redistributions of source code must retain the above copyright 11 1.1 pk * notice, this list of conditions and the following disclaimer. 12 1.1 pk * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 pk * notice, this list of conditions and the following disclaimer in the 14 1.1 pk * documentation and/or other materials provided with the distribution. 15 1.1 pk * 16 1.1 pk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 pk * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 pk * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 pk * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 pk * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 pk * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 pk * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 pk * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 pk * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 pk * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 pk */ 27 1.1 pk 28 1.1 pk #ifdef MAGMA_DEBUG 29 1.1 pk #define dprintf(x) printf x 30 1.1 pk #else 31 1.1 pk #define dprintf(x) 32 1.1 pk #endif 33 1.1 pk 34 1.1 pk /* The mapping of minor device number -> card and port is done as 35 1.1 pk * follows by default: 36 1.1 pk * 37 1.1 pk * +---+---+---+---+---+---+---+---+ 38 1.1 pk * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 39 1.1 pk * +---+---+---+---+---+---+---+---+ 40 1.1 pk * | | | | | | | | 41 1.1 pk * | | | | +---+---+---+---> port number 42 1.1 pk * | | | | 43 1.18 christos * | | | +-------------------> unused 44 1.1 pk * | | | 45 1.1 pk * | | +-----------------------> unused 46 1.1 pk * | | 47 1.1 pk * +---+---------------------------> card number 48 1.1 pk * 49 1.1 pk */ 50 1.1 pk 51 1.1 pk #define MAGMA_MAX_CARDS 4 52 1.1 pk #define MAGMA_MAX_TTY 16 53 1.1 pk #define MAGMA_MAX_BPP 2 54 1.1 pk #define MAGMA_MAX_CD1400 4 55 1.1 pk #define MAGMA_MAX_CD1190 2 56 1.1 pk 57 1.18 christos #define MAGMA_CARD(x) ((TTUNIT(x) >> 6) & 0x03) 58 1.18 christos #define MAGMA_PORT(x) (TTUNIT(x) & 0x0f) 59 1.1 pk 60 1.18 christos #define MTTY_DIALOUT(x) TTDIALOUT(x) 61 1.1 pk 62 1.1 pk /* 63 1.1 pk * Supported Card Types 64 1.1 pk */ 65 1.1 pk struct magma_board_info { 66 1.4 pk const char *mb_sbusname; /* sbus_attach_args.sa_name */ 67 1.4 pk const char *mb_name; /* cardname to match against */ 68 1.4 pk const char *mb_realname; /* english card name */ 69 1.1 pk int mb_nser; /* number of serial ports */ 70 1.1 pk int mb_npar; /* number of parallel ports */ 71 1.1 pk int mb_ncd1400; /* number of CD1400 chips */ 72 1.1 pk int mb_svcackr; /* svcackr offset */ 73 1.1 pk int mb_svcackt; /* svcackt offset */ 74 1.1 pk int mb_svcackm; /* svcackm offset */ 75 1.1 pk int mb_cd1400[MAGMA_MAX_CD1400];/* cd1400 chip register offsets */ 76 1.1 pk int mb_ncd1190; /* number of CD1190 chips */ 77 1.1 pk int mb_cd1190[MAGMA_MAX_CD1190];/* cd1190 chip register offsets */ 78 1.1 pk }; 79 1.1 pk 80 1.1 pk /* 81 1.1 pk * cd1400 chip data 82 1.1 pk */ 83 1.1 pk struct cd1400 { 84 1.10 perry volatile u_char *cd_reg; /* chip registers */ 85 1.1 pk int cd_chiprev; /* chip revision */ 86 1.7 tsutsui int cd_clock; /* clock speed in MHz */ 87 1.1 pk int cd_parmode; /* parallel mode operation */ 88 1.1 pk }; 89 1.1 pk 90 1.1 pk /* 91 1.1 pk * cd1190 chip data 92 1.1 pk */ 93 1.1 pk struct cd1190 { 94 1.10 perry volatile u_char *cd_reg; /* chip registers */ 95 1.1 pk int cd_chiprev; /* chip revision */ 96 1.1 pk }; 97 1.1 pk 98 1.1 pk /* software state for each card */ 99 1.1 pk struct magma_softc { 100 1.17 chs device_t ms_dev; /* required. must be first in softc */ 101 1.1 pk struct evcnt ms_intrcnt; /* statistics */ 102 1.1 pk 103 1.1 pk /* cd1400 chip info */ 104 1.1 pk int ms_ncd1400; 105 1.1 pk struct cd1400 ms_cd1400[MAGMA_MAX_CD1400]; 106 1.10 perry volatile u_char *ms_svcackr; /* CD1400 service acknowledge receive */ 107 1.10 perry volatile u_char *ms_svcackt; /* CD1400 service acknowledge transmit */ 108 1.10 perry volatile u_char *ms_svcackm; /* CD1400 service acknowledge modem */ 109 1.1 pk 110 1.1 pk /* cd1190 chip info */ 111 1.1 pk int ms_ncd1190; 112 1.1 pk struct cd1190 ms_cd1190[MAGMA_MAX_CD1190]; 113 1.1 pk 114 1.1 pk struct magma_board_info *ms_board; /* what am I? */ 115 1.1 pk 116 1.1 pk struct mtty_softc *ms_mtty; 117 1.1 pk struct mbpp_softc *ms_mbpp; 118 1.1 pk 119 1.6 pk /* softintr(9) cookie */ 120 1.6 pk void *ms_sicookie; 121 1.1 pk }; 122 1.1 pk 123 1.1 pk #define MTTY_RBUF_SIZE (2 * 512) 124 1.1 pk #define MTTY_RX_FIFO_THRESHOLD 6 125 1.1 pk #define MTTY_RX_DTR_THRESHOLD 9 126 1.1 pk 127 1.1 pk struct mtty_port { 128 1.1 pk struct cd1400 *mp_cd1400; /* ptr to chip */ 129 1.1 pk int mp_channel; /* and channel */ 130 1.1 pk struct tty *mp_tty; 131 1.1 pk 132 1.1 pk int mp_openflags; /* default tty flags */ 133 1.1 pk int mp_flags; /* port flags */ 134 1.1 pk int mp_carrier; /* state of carrier */ 135 1.1 pk 136 1.1 pk u_char *mp_rbuf; /* ring buffer start */ 137 1.1 pk u_char *mp_rend; /* ring buffer end */ 138 1.1 pk u_char *mp_rget; /* ring buffer read pointer */ 139 1.1 pk u_char *mp_rput; /* ring buffer write pointer */ 140 1.1 pk 141 1.1 pk u_char *mp_txp; /* transmit character pointer */ 142 1.1 pk int mp_txc; /* transmit character counter */ 143 1.1 pk }; 144 1.1 pk 145 1.1 pk #define MTTYF_CARRIER_CHANGED (1<<0) 146 1.1 pk #define MTTYF_SET_BREAK (1<<1) 147 1.1 pk #define MTTYF_CLR_BREAK (1<<2) 148 1.1 pk #define MTTYF_DONE (1<<3) 149 1.1 pk #define MTTYF_STOP (1<<4) 150 1.1 pk #define MTTYF_RING_OVERFLOW (1<<5) 151 1.1 pk 152 1.1 pk struct mtty_softc { 153 1.17 chs device_t ms_dev; /* device info */ 154 1.1 pk int ms_nports; /* tty ports */ 155 1.1 pk struct mtty_port ms_port[MAGMA_MAX_TTY]; 156 1.1 pk }; 157 1.1 pk 158 1.2 pk #define MBPP_RX_FIFO_THRESHOLD 25 159 1.1 pk 160 1.1 pk struct mbpp_port { 161 1.1 pk struct cd1400 *mp_cd1400; /* for LC2+1Sp card */ 162 1.1 pk struct cd1190 *mp_cd1190; /* all the others */ 163 1.3 thorpej 164 1.3 thorpej struct callout mp_timeout_ch; 165 1.3 thorpej struct callout mp_start_ch; 166 1.1 pk 167 1.2 pk int mp_flags; 168 1.1 pk 169 1.2 pk struct mbpp_param mp_param; 170 1.2 pk #define mp_burst mp_param.bp_burst 171 1.2 pk #define mp_timeout mp_param.bp_timeout 172 1.2 pk #define mp_delay mp_param.bp_delay 173 1.1 pk 174 1.2 pk u_char *mp_ptr; /* pointer to I/O data */ 175 1.2 pk int mp_cnt; /* count of I/O chars */ 176 1.1 pk }; 177 1.1 pk 178 1.1 pk #define MBPPF_OPEN (1<<0) 179 1.2 pk #define MBPPF_TIMEOUT (1<<1) 180 1.2 pk #define MBPPF_UIO (1<<2) 181 1.2 pk #define MBPPF_DELAY (1<<3) 182 1.2 pk #define MBPPF_WAKEUP (1<<4) 183 1.1 pk 184 1.1 pk struct mbpp_softc { 185 1.1 pk int ms_nports; /* parallel ports */ 186 1.1 pk struct mbpp_port ms_port[MAGMA_MAX_BPP]; 187 1.1 pk }; 188 1.1 pk 189 1.1 pk /* internal function prototypes */ 190 1.1 pk 191 1.8 perry int cd1400_compute_baud(speed_t, int, int *, int *); 192 1.11 perry __inline void cd1400_write_ccr(struct cd1400 *, u_char); 193 1.11 perry __inline u_char cd1400_read_reg(struct cd1400 *, int); 194 1.11 perry __inline void cd1400_write_reg(struct cd1400 *, int, u_char); 195 1.8 perry void cd1400_enable_transmitter(struct cd1400 *, int); 196 1.8 perry 197 1.15 cegger int magma_match(device_t, cfdata_t, void *); 198 1.15 cegger void magma_attach(device_t, device_t, void *); 199 1.8 perry int magma_hard(void *); 200 1.8 perry void magma_soft(void *); 201 1.8 perry 202 1.15 cegger int mtty_match(device_t, cfdata_t, void *); 203 1.15 cegger void mtty_attach(device_t, device_t, void *); 204 1.8 perry int mtty_modem_control(struct mtty_port *, int, int); 205 1.8 perry int mtty_param(struct tty *, struct termios *); 206 1.8 perry void mtty_start(struct tty *); 207 1.8 perry 208 1.15 cegger int mbpp_match(device_t, cfdata_t, void *); 209 1.15 cegger void mbpp_attach(device_t, device_t, void *); 210 1.8 perry void mbpp_timeout(void *); 211 1.8 perry void mbpp_start(void *); 212 1.12 christos int mbpp_send(struct mbpp_port *, void *, int); 213 1.12 christos int mbpp_recv(struct mbpp_port *, void *, int); 214 1.8 perry int mbpp_hztoms(int); 215 1.8 perry int mbpp_mstohz(int); 216