1 1.15 andvar /* $NetBSD: z8530var.h,v 1.15 2025/04/25 21:06:41 andvar Exp $ */ 2 1.1 tsubai 3 1.1 tsubai /* 4 1.1 tsubai * Copyright (c) 1992, 1993 5 1.1 tsubai * The Regents of the University of California. All rights reserved. 6 1.7 agc * 7 1.7 agc * This software was developed by the Computer Systems Engineering group 8 1.7 agc * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 9 1.7 agc * contributed to Berkeley. 10 1.7 agc * 11 1.7 agc * All advertising materials mentioning features or use of this software 12 1.7 agc * must display the following acknowledgement: 13 1.7 agc * This product includes software developed by the University of 14 1.7 agc * California, Lawrence Berkeley Laboratory. 15 1.7 agc * 16 1.7 agc * Redistribution and use in source and binary forms, with or without 17 1.7 agc * modification, are permitted provided that the following conditions 18 1.7 agc * are met: 19 1.7 agc * 1. Redistributions of source code must retain the above copyright 20 1.7 agc * notice, this list of conditions and the following disclaimer. 21 1.7 agc * 2. Redistributions in binary form must reproduce the above copyright 22 1.7 agc * notice, this list of conditions and the following disclaimer in the 23 1.7 agc * documentation and/or other materials provided with the distribution. 24 1.7 agc * 3. Neither the name of the University nor the names of its contributors 25 1.7 agc * may be used to endorse or promote products derived from this software 26 1.7 agc * without specific prior written permission. 27 1.7 agc * 28 1.7 agc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 29 1.7 agc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 30 1.7 agc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 31 1.7 agc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 32 1.7 agc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 1.7 agc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 1.7 agc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 1.7 agc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 1.7 agc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 1.7 agc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 1.7 agc * SUCH DAMAGE. 39 1.7 agc * 40 1.7 agc * @(#)zsvar.h 8.1 (Berkeley) 6/11/93 41 1.7 agc */ 42 1.7 agc 43 1.7 agc /* 44 1.7 agc * Copyright (c) 1994 Gordon W. Ross 45 1.1 tsubai * 46 1.1 tsubai * This software was developed by the Computer Systems Engineering group 47 1.1 tsubai * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 48 1.1 tsubai * contributed to Berkeley. 49 1.1 tsubai * 50 1.1 tsubai * All advertising materials mentioning features or use of this software 51 1.1 tsubai * must display the following acknowledgement: 52 1.1 tsubai * This product includes software developed by the University of 53 1.1 tsubai * California, Lawrence Berkeley Laboratory. 54 1.1 tsubai * 55 1.1 tsubai * Redistribution and use in source and binary forms, with or without 56 1.1 tsubai * modification, are permitted provided that the following conditions 57 1.1 tsubai * are met: 58 1.1 tsubai * 1. Redistributions of source code must retain the above copyright 59 1.1 tsubai * notice, this list of conditions and the following disclaimer. 60 1.1 tsubai * 2. Redistributions in binary form must reproduce the above copyright 61 1.1 tsubai * notice, this list of conditions and the following disclaimer in the 62 1.1 tsubai * documentation and/or other materials provided with the distribution. 63 1.1 tsubai * 3. All advertising materials mentioning features or use of this software 64 1.1 tsubai * must display the following acknowledgement: 65 1.1 tsubai * This product includes software developed by the University of 66 1.1 tsubai * California, Berkeley and its contributors. 67 1.1 tsubai * 4. Neither the name of the University nor the names of its contributors 68 1.1 tsubai * may be used to endorse or promote products derived from this software 69 1.1 tsubai * without specific prior written permission. 70 1.1 tsubai * 71 1.1 tsubai * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 72 1.1 tsubai * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 73 1.1 tsubai * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 74 1.1 tsubai * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 75 1.1 tsubai * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 76 1.1 tsubai * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 77 1.1 tsubai * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 78 1.1 tsubai * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 79 1.1 tsubai * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 80 1.1 tsubai * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 81 1.1 tsubai * SUCH DAMAGE. 82 1.1 tsubai * 83 1.1 tsubai * @(#)zsvar.h 8.1 (Berkeley) 6/11/93 84 1.1 tsubai */ 85 1.1 tsubai 86 1.1 tsubai #include <dev/ic/z8530sc.h> 87 1.1 tsubai #include <macppc/dev/dbdma.h> 88 1.1 tsubai 89 1.1 tsubai /* 90 1.1 tsubai * Clock source info structure, added here so xzs_chanstate works 91 1.1 tsubai */ 92 1.1 tsubai struct zsclksrc { 93 1.1 tsubai long clk; /* clock rate, in MHz, present on signal line */ 94 1.1 tsubai int flags; /* Specifies how this source can be used 95 1.1 tsubai (RTxC divided, RTxC BRG, PCLK BRG, TRxC divided) 96 1.1 tsubai and also if the source is "external" and if it 97 1.1 tsubai is changeable (by an ioctl ex.). The 98 1.1 tsubai source usage flags are used by the tty 99 1.1 tsubai child. The other bits tell zsloadchannelregs 100 1.1 tsubai if it should call an md signal source 101 1.1 tsubai changing routine. ZSC_VARIABLE says if 102 1.15 andvar an ioctl should be able to change the 103 1.1 tsubai clock rate.*/ 104 1.1 tsubai }; 105 1.1 tsubai #define ZSC_PCLK 0x01 106 1.1 tsubai #define ZSC_RTXBRG 0x02 107 1.1 tsubai #define ZSC_RTXDIV 0x04 108 1.1 tsubai #define ZSC_TRXDIV 0x08 109 1.1 tsubai #define ZSC_VARIABLE 0x40 110 1.1 tsubai #define ZSC_EXTERN 0x80 111 1.1 tsubai 112 1.1 tsubai #define ZSC_BRG 0x03 113 1.1 tsubai #define ZSC_DIV 0x0c 114 1.1 tsubai 115 1.1 tsubai 116 1.1 tsubai /* 117 1.1 tsubai * These are the machine-dependent (extended) variants of 118 1.1 tsubai * struct zs_chanstate and struct zsc_softc 119 1.1 tsubai */ 120 1.1 tsubai struct xzs_chanstate { 121 1.1 tsubai /* machine-independent part (First!)*/ 122 1.1 tsubai struct zs_chanstate xzs_cs; 123 1.1 tsubai /* machine-dependent extensions */ 124 1.1 tsubai int cs_hwflags; 125 1.1 tsubai int cs_chip; /* type of chip */ 126 1.1 tsubai /* Clock source info... */ 127 1.1 tsubai int cs_clock_count; /* how many signal sources available */ 128 1.1 tsubai struct zsclksrc cs_clocks[4]; /* info on available signal sources */ 129 1.1 tsubai long cs_cclk_flag; /* flag for current clock source */ 130 1.1 tsubai long cs_pclk_flag; /* flag for pending clock source */ 131 1.1 tsubai int cs_csource; /* current source # */ 132 1.1 tsubai int cs_psource; /* pending source # */ 133 1.1 tsubai }; 134 1.1 tsubai 135 1.1 tsubai struct zsc_softc { 136 1.14 tsutsui device_t zsc_dev; /* required first: base device */ 137 1.1 tsubai struct zs_chanstate *zsc_cs[2]; /* channel A and B soft state */ 138 1.1 tsubai /* Machine-dependent part follows... */ 139 1.1 tsubai struct xzs_chanstate xzsc_xcs_store[2]; 140 1.1 tsubai dbdma_regmap_t *zsc_txdmareg[2]; 141 1.1 tsubai dbdma_command_t *zsc_txdmacmd[2]; 142 1.1 tsubai /* XXX tx only, for now */ 143 1.8 matt void *zsc_si; /* softintr handler */ 144 1.1 tsubai }; 145 1.1 tsubai 146 1.1 tsubai /* 147 1.1 tsubai * Functions to read and write individual registers in a channel. 148 1.1 tsubai * The ZS chip requires a 1.6 uSec. recovery time between accesses, 149 1.1 tsubai * and the Sun3 hardware does NOT take care of this for you. 150 1.1 tsubai * MacII hardware DOES dake care of the delay for us. :-) 151 1.1 tsubai * XXX - Then these should be inline functions! -gwr 152 1.1 tsubai * Some clock-chirped macs loose serial ports. It could be that the 153 1.1 tsubai * hardware delay is tied to the CPU speed, and that the minimum delay 154 1.1 tsubai * no longer's respected. For them, ZS_DELAY might help. 155 1.1 tsubai * XXX - no one seems to want to try and check this -wrs 156 1.1 tsubai */ 157 1.1 tsubai 158 1.14 tsutsui uint8_t zs_read_reg(struct zs_chanstate *cs, uint8_t reg); 159 1.14 tsutsui uint8_t zs_read_csr(struct zs_chanstate *cs); 160 1.14 tsutsui uint8_t zs_read_data(struct zs_chanstate *cs); 161 1.14 tsutsui 162 1.14 tsutsui void zs_write_reg(struct zs_chanstate *cs, uint8_t reg,uint8_t val); 163 1.14 tsutsui void zs_write_csr(struct zs_chanstate *cs, uint8_t val); 164 1.14 tsutsui void zs_write_data(struct zs_chanstate *cs, uint8_t val); 165 1.1 tsubai 166 1.1 tsubai /* XXX - Could define splzs() here instead of in psl.h */ 167 1.1 tsubai #define splzs spltty 168 1.13 ad #define IPL_ZS IPL_TTY 169 1.3 tsubai 170 1.3 tsubai /* Hook for MD ioctl support */ 171 1.14 tsutsui int zsmdioctl(struct zs_chanstate *cs, u_long cmd, void *data); 172 1.3 tsubai /* XXX - This is a bit gross... */ 173 1.5 atatat #define ZS_MD_IOCTL(cs, cmd, data) zsmdioctl(cs, cmd, data) 174 1.3 tsubai 175 1.3 tsubai /* Callback for "external" clock sources */ 176 1.14 tsutsui void zsmd_setclock(struct zs_chanstate *cs); 177 1.3 tsubai #define ZS_MD_SETCLK(cs) zsmd_setclock(cs) 178 1.4 dbj 179 1.4 dbj #define PCLK (9600 * 384) /* PCLK pin input clock rate */ 180 1.4 dbj 181 1.4 dbj /* The layout of this is hardware-dependent (padding, order). */ 182 1.4 dbj struct zschan { 183 1.14 tsutsui volatile uint8_t zc_csr; /* ctrl,status, and indirect access */ 184 1.14 tsutsui uint8_t zc_xxx0[15]; 185 1.14 tsutsui volatile uint8_t zc_data; /* data */ 186 1.14 tsutsui uint8_t zc_xxx1[15]; 187 1.4 dbj }; 188 1.14 tsutsui void zs_putc(void *, int); 189 1.14 tsutsui int zs_getc(void *); 190 1.14 tsutsui void zs_kgdb_init(void); 191 1.6 tsutsui 192 1.6 tsutsui #ifdef ZS_TXDMA 193 1.14 tsutsui void zstty_txdma_int(void *); 194 1.14 tsutsui void zs_dma_setup(struct zs_chanstate *, void *, int); 195 1.6 tsutsui #endif 196