--- oldsrc/sys/arch/amiga/conf/files.amiga Sat Jan 16 15:54:18 1999 +++ newsrc/sys/arch/amiga/conf/files.amiga Wed Jan 6 20:59:58 1999 @@ -200,6 +200,11 @@ attach hyper at zbus file arch/amiga/dev/hyper.c hyper +# ZBus IOBlix +device ioblix: supio +attach ioblix at zbus +file arch/amiga/dev/ioblix.c ioblix + attach com at supio with com_supio file arch/amiga/dev/com_supio.c com_supio --- oldsrc/sys/arch/amiga/conf/GENERIC Sat Jan 16 15:54:18 1999 +++ newsrc/sys/arch/amiga/conf/GENERIC Sat Jan 16 15:48:14 1999 @@ -117,6 +117,8 @@ #options SYSCALL_DEBUG # debug all syscalls. #options SCSIDEBUG # Add SCSI debugging statements #options PANICBUTTON # Forced crash via keypress (???) +#options AUCC_DEBUG # Debug aucc.c +#options COM_DEBUG # Debug com.c (HyperCom & IOBlix) # # Amiga specific options @@ -212,8 +214,12 @@ hyper* at zbus? # zbus HyperCom3 + HyperCom4 #hyper* at mainbus0 # not yet: HyperCom1 + HyperCom3 -com* at hyper? port ? # Hypercom3/4 serial ports +com* at hyper? port ? # HyPerCom3/4 serial ports #lpt* at hyper? port ? # not yet: Hypercom3 parallel port +ioblix* at zbus? # zbus IOBlix +com* at ioblix? port ? # IOBlix serial ports +#lpt* at ioblix? port ? # not yet: IOBlix parallel port + # # Amiga Mainboard devices (sans graphics and keyboard) --- oldsrc/sys/arch/amiga/dev/zbus.c Sat Jan 16 15:54:18 1999 +++ newsrc/sys/arch/amiga/dev/zbus.c Sun Jan 3 18:08:46 1999 @@ -162,7 +162,9 @@ /* VMC Harald Frank */ { "blst", 5001, 1}, /* ISDN Blaster */ { "hyper4", 5001, 2}, /* Hypercom4-Zbus */ - { "hyper3", 5001, 3} /* Hypercom3-Zbus */ + { "hyper3", 5001, 3}, /* Hypercom3-Zbus */ + /* RBM */ + { "ioblix", 4711, 1} /* IOBlix */ }; static int naconfent = sizeof(aconftab) / sizeof(struct aconfdata); --- oldsrc/sys/arch/amiga/dev/com_supio.c Sat Jan 16 15:54:18 1999 +++ newsrc/sys/arch/amiga/dev/com_supio.c Sun Jan 10 20:59:23 1999 @@ -125,7 +125,6 @@ { bus_space_tag_t iot; int iobase; - int rv = 1; struct supio_attach_args *supa = aux; iot = supa->supio_iot; @@ -134,7 +133,7 @@ if (strcmp(supa->supio_name,"com")) return 0; - return (rv); + return 1; } void @@ -156,6 +155,7 @@ iot = csc->sc_iot = supa->supio_iot; printf(" port 0x%x ipl %d", iobase, supa->supio_ipl); + /* XXX This is a no-op */ if (bus_space_map(iot, iobase, COM_NPORTS, 0, &csc->sc_ioh)) panic("comattach: io mapping failed"); --- newsrc/sys/arch/amiga/dev/ioblix.c Thu Jan 1 01:00:00 1970 +++ newsrc/sys/arch/amiga/dev/ioblix.c Sun Jan 10 21:43:42 1999 @@ -0,0 +1,168 @@ +/* $NetBSD: hyper.c,v 1.3 1998/08/09 22:25:18 is Exp $ */ + +/* + * Copyright (c) 1999 Bernardo Innocenti + * All rights reserved. + * + * Copyright (c) 1997, 1998 Ignatios Souvatzis + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Ignatios Souvatzis + * for the NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * zbus IOBlix driver, based on HyperCom driver (hyper.c) + */ + +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include +#include + + + +/* The IOBlix multi I/O board uses a StarTech 16C654 UART. + * Its register base address is offseted 0x1000 bytes after the + * board address on the Zorro bus. + * The ST16C654 registers are mapped with a 16 byte interleaving + * factor to avoid problems with the 68040/060 line burst access. + * So we need a stride factor of 4 (1<<4 == 16) to access the + * registers with the generic I/O read and write macros used in + * the machine independent COM driver (../../../dev/com.c). + * The ports are located at offsets 0, 0x80, 0x100 and 0x180. + * Since the bus_space_map() macro will shift the port offset by the + * stride factor we need to specify offsets 0, 0x8, 0x10 and 0x18. + * + * The IOBlix driver is inspired from the HyperCom driver (hyper.c), + * which handles serial interrupts using the common code for + * Draco's Super I/O chip (com_supio.c) and handles the UART details + * with the generic COM driver for PC-like UARTs (../../../dev/com.c). + */ + +#define IOBLIX_UART_BASEOFFSET 0x1000 +#define IOBLIX_UART_NUMPORTS 4 +#define IOBLIX_UART_PORTOFFSET 8 +#define IOBLIX_UART_STRIDE 4 +#define IOBLIX_UART_FREQUENCY 6000000 /* non-standard */ + +struct ioblix_softc { + struct device sc_dev; + struct bus_space_tag sc_bst; +}; + +struct ioblix_args +{ + struct zbus_args zargs; + char *subdev; + char unit; +}; + + +int ioblix_match __P((struct device *, struct cfdata *, void *)); +void ioblix_attach __P((struct device *, struct device *, void *)); +int ioblix_print __P((void *auxp, const char *)); + +struct cfattach ioblix_ca = { + sizeof(struct ioblix_softc), ioblix_match, ioblix_attach +}; + +int +ioblix_match(parent, cfp, auxp) + struct device *parent; + struct cfdata *cfp; + void *auxp; +{ + + struct zbus_args *zap = auxp; + + if ((zap->manid != 4711) || (zap->prodid != 1)) + return 0; + + return 1; +} + +void +ioblix_attach(parent, self, auxp) + struct device *parent, *self; + void *auxp; +{ + struct ioblix_softc *sc; + struct zbus_args *zap; + struct supio_attach_args supa; + int i; + + + sc = (struct ioblix_softc *)self; + zap = (struct zbus_args *)auxp; + + if (parent) + printf(": IOBlix\n"); + + /* setup bus space tag for the underlying generic com driver */ + sc->sc_bst.base = (u_long)zap->va + IOBLIX_UART_BASEOFFSET; + sc->sc_bst.stride = IOBLIX_UART_STRIDE; + + supa.supio_iot = &sc->sc_bst; + supa.supio_ipl = 6; + + for (i = 0; i < IOBLIX_UART_NUMPORTS; i++) + { + supa.supio_name = "com"; + supa.supio_iobase = i * IOBLIX_UART_PORTOFFSET; + supa.supio_arg = IOBLIX_UART_FREQUENCY; + config_found(self, &supa, ioblix_print); + } +} + +int +ioblix_print(auxp, pnp) + void *auxp; + const char *pnp; +{ + struct supio_attach_args *supa = auxp; + + if (pnp == NULL) + return QUIET; + + printf("%s at %s port 0x%02x", + supa->supio_name, pnp, supa->supio_iobase); + + return UNCONF; +}