Sync to NetBSD 970110
authorniklas <niklas@openbsd.org>
Thu, 16 Jan 1997 09:23:08 +0000 (09:23 +0000)
committerniklas <niklas@openbsd.org>
Thu, 16 Jan 1997 09:23:08 +0000 (09:23 +0000)
197 files changed:
sys/arch/amiga/Makefile
sys/arch/amiga/amiga/Locore.c
sys/arch/amiga/amiga/amiga_init.c
sys/arch/amiga/amiga/autoconf.c
sys/arch/amiga/amiga/conf.c
sys/arch/amiga/amiga/db_memrw.c
sys/arch/amiga/amiga/device.h
sys/arch/amiga/amiga/disksubr.c
sys/arch/amiga/amiga/drcustom.h
sys/arch/amiga/amiga/genassym.c
sys/arch/amiga/amiga/locore.s
sys/arch/amiga/amiga/machdep.c
sys/arch/amiga/amiga/pmap.c
sys/arch/amiga/amiga/swapgeneric.c
sys/arch/amiga/amiga/sys_machdep.c
sys/arch/amiga/amiga/trap.c
sys/arch/amiga/conf/A3000 [deleted file]
sys/arch/amiga/conf/COFFEE [deleted file]
sys/arch/amiga/conf/CRASH
sys/arch/amiga/conf/DRACO
sys/arch/amiga/conf/FILIPPA
sys/arch/amiga/conf/GENERIC
sys/arch/amiga/conf/Makefile.amiga
sys/arch/amiga/conf/files.amiga
sys/arch/amiga/conf/std.amiga
sys/arch/amiga/conf/std.draco
sys/arch/amiga/dev/afsc.c
sys/arch/amiga/dev/ahsc.c
sys/arch/amiga/dev/ahscreg.h
sys/arch/amiga/dev/atzsc.c
sys/arch/amiga/dev/atzscreg.h
sys/arch/amiga/dev/bzsc.c
sys/arch/amiga/dev/bztzsc.c [new file with mode: 0644]
sys/arch/amiga/dev/bztzscreg.h [new file with mode: 0644]
sys/arch/amiga/dev/bztzscvar.h [new file with mode: 0644]
sys/arch/amiga/dev/clock.c
sys/arch/amiga/dev/clockioctl.h
sys/arch/amiga/dev/dmavar.h
sys/arch/amiga/dev/drcom.c [new file with mode: 0644]
sys/arch/amiga/dev/drcomvar.h [new file with mode: 0644]
sys/arch/amiga/dev/drisavar.h [new file with mode: 0644]
sys/arch/amiga/dev/drsc.c
sys/arch/amiga/dev/empsc.c
sys/arch/amiga/dev/event.c
sys/arch/amiga/dev/event_var.h
sys/arch/amiga/dev/fd.c
sys/arch/amiga/dev/flsc.c
sys/arch/amiga/dev/gen_cvtab.c [deleted file]
sys/arch/amiga/dev/genpar.c
sys/arch/amiga/dev/grf.c
sys/arch/amiga/dev/grf_cc.c
sys/arch/amiga/dev/grf_cl.c
sys/arch/amiga/dev/grf_clreg.h
sys/arch/amiga/dev/grf_cv.c
sys/arch/amiga/dev/grf_et.c
sys/arch/amiga/dev/grf_etreg.h
sys/arch/amiga/dev/grf_rh.c
sys/arch/amiga/dev/grf_rt.c
sys/arch/amiga/dev/grf_ul.c
sys/arch/amiga/dev/grf_ulreg.h
sys/arch/amiga/dev/grf_ultms.g
sys/arch/amiga/dev/grfabs_cc.c
sys/arch/amiga/dev/grfabs_ccreg.h
sys/arch/amiga/dev/grfioctl.h
sys/arch/amiga/dev/gtsc.c
sys/arch/amiga/dev/gtscreg.h
sys/arch/amiga/dev/gvpbus.c
sys/arch/amiga/dev/gvpbusvar.h
sys/arch/amiga/dev/idesc.c
sys/arch/amiga/dev/if_ae.c
sys/arch/amiga/dev/if_aereg.h
sys/arch/amiga/dev/if_bah.c
sys/arch/amiga/dev/if_bahreg.h
sys/arch/amiga/dev/if_ed.c
sys/arch/amiga/dev/if_edreg.h
sys/arch/amiga/dev/if_es.c
sys/arch/amiga/dev/if_esreg.h
sys/arch/amiga/dev/if_le.c
sys/arch/amiga/dev/if_le_zbus.c
sys/arch/amiga/dev/if_qn.c
sys/arch/amiga/dev/if_qnreg.h
sys/arch/amiga/dev/ite.c
sys/arch/amiga/dev/ite_et.c
sys/arch/amiga/dev/ite_ul.c
sys/arch/amiga/dev/iteioctl.h
sys/arch/amiga/dev/ivsc.c
sys/arch/amiga/dev/kbd.c
sys/arch/amiga/dev/kbdreg.h
sys/arch/amiga/dev/kf_8x11.c
sys/arch/amiga/dev/kf_8x8.c
sys/arch/amiga/dev/mfc.c
sys/arch/amiga/dev/mlhsc.c
sys/arch/amiga/dev/ms.c
sys/arch/amiga/dev/msc.c
sys/arch/amiga/dev/msc6502.h
sys/arch/amiga/dev/mscreg.h
sys/arch/amiga/dev/otgsc.c
sys/arch/amiga/dev/par.c
sys/arch/amiga/dev/parioctl.h
sys/arch/amiga/dev/rtmondefs.c
sys/arch/amiga/dev/rtmons
sys/arch/amiga/dev/sbic.c
sys/arch/amiga/dev/sbicreg.h
sys/arch/amiga/dev/sci.c
sys/arch/amiga/dev/scireg.h
sys/arch/amiga/dev/scsidefs.h [deleted file]
sys/arch/amiga/dev/ser.c
sys/arch/amiga/dev/serreg.h
sys/arch/amiga/dev/sfas.c
sys/arch/amiga/dev/siop.c
sys/arch/amiga/dev/siop_script.ss
sys/arch/amiga/dev/view.c
sys/arch/amiga/dev/viewvar.h
sys/arch/amiga/dev/vuid_event.h
sys/arch/amiga/dev/wesc.c
sys/arch/amiga/dev/wstsc.c
sys/arch/amiga/dev/zbus.c
sys/arch/amiga/dev/zbusvar.h
sys/arch/amiga/dev/zssc.c
sys/arch/amiga/include/ansi.h
sys/arch/amiga/include/asm.h
sys/arch/amiga/include/cdefs.h
sys/arch/amiga/include/conf.h
sys/arch/amiga/include/cpu.h
sys/arch/amiga/include/cpufunc.h
sys/arch/amiga/include/db_machdep.h
sys/arch/amiga/include/exec.h
sys/arch/amiga/include/fbio.h
sys/arch/amiga/include/float.h
sys/arch/amiga/include/frame.h
sys/arch/amiga/include/ieeefp.h
sys/arch/amiga/include/kcore.h
sys/arch/amiga/include/limits.h
sys/arch/amiga/include/mtpr.h
sys/arch/amiga/include/param.h
sys/arch/amiga/include/pcb.h
sys/arch/amiga/include/pmap.h
sys/arch/amiga/include/proc.h
sys/arch/amiga/include/profile.h
sys/arch/amiga/include/psl.h
sys/arch/amiga/include/pte.h
sys/arch/amiga/include/ptrace.h
sys/arch/amiga/include/reg.h
sys/arch/amiga/include/setjmp.h
sys/arch/amiga/include/signal.h
sys/arch/amiga/include/stdarg.h
sys/arch/amiga/include/trap.h
sys/arch/amiga/include/types.h
sys/arch/amiga/include/varargs.h
sys/arch/amiga/stand/Makefile
sys/arch/amiga/stand/binpatch/Makefile
sys/arch/amiga/stand/boot/Makefile [new file with mode: 0644]
sys/arch/amiga/stand/boot/Makefile.txlt [new file with mode: 0644]
sys/arch/amiga/stand/boot/alloc.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/amigagraph.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/amigaio.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/amigatypes.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/aout2bb/Makefile [new file with mode: 0644]
sys/arch/amiga/stand/boot/aout2bb/aout2bb.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/aout2bb/aout2bb.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/aout2bb/chksum.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/aout2bb/chksum.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/ashrdi3.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/bbstart.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/bcopy.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/bzero.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/configure.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/console.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/installboot.8 [new file with mode: 0644]
sys/arch/amiga/stand/boot/installboot.sh [new file with mode: 0644]
sys/arch/amiga/stand/boot/libsa/Makefile [new file with mode: 0644]
sys/arch/amiga/stand/boot/libsa/Makefile.inc [new file with mode: 0644]
sys/arch/amiga/stand/boot/libstubs.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/libstubs.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/main.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/muldi3.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/printf.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/samachdep.h [new file with mode: 0644]
sys/arch/amiga/stand/boot/startit.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/test.s [new file with mode: 0644]
sys/arch/amiga/stand/boot/twiddle.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/txlt/Makefile [new file with mode: 0644]
sys/arch/amiga/stand/boot/txlt/txlt.l [new file with mode: 0644]
sys/arch/amiga/stand/boot/xd.c [new file with mode: 0644]
sys/arch/amiga/stand/boot/xd.h [new file with mode: 0644]
sys/arch/amiga/stand/dumpfont/dumpfont.c
sys/arch/amiga/stand/dumpfont/fontdumper.c
sys/arch/amiga/stand/loadbsd/Makefile [new file with mode: 0644]
sys/arch/amiga/stand/loadbsd/README [new file with mode: 0644]
sys/arch/amiga/stand/loadbsd/loadbsd.c
sys/arch/amiga/stand/loadkmap/Makefile
sys/arch/amiga/stand/loadkmap/Makefile.inc
sys/arch/amiga/stand/loadkmap/din/din-kbdmap.c
sys/arch/amiga/stand/loadkmap/sw/Makefile
sys/arch/amiga/stand/loadkmap/sw/sw-kbdmap.c
sys/arch/amiga/stand/loadkmap/us/Makefile
sys/arch/amiga/stand/loadkmap/us/us-kbdmap.c

index d494906..7f713b4 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: Makefile,v 1.2 1996/08/23 19:05:29 niklas Exp $
-#      $NetBSD: Makefile,v 1.10.6.1 1996/06/09 20:48:33 is Exp $
+#      $OpenBSD: Makefile,v 1.3 1997/01/16 09:23:08 niklas Exp $
+#      $NetBSD: Makefile,v 1.11 1997/01/06 12:33:09 is Exp $
 
 #      @(#)Makefile    7.3 (Berkeley) 6/9/91
 
@@ -14,9 +14,6 @@ COMM= $S/vm/*.[ch] $S/ufs/*.[ch] $S/sys/*.h $S/compat/sunos/*.[ch] \
 
 SUBDIR=stand
 
-#all:
-#      @echo "make tags or links only"
-
 TAMIGA=        $S/arch/amiga/tags
 SAMIGA=        $S/arch/m68k/m68k/*.c $S/arch/m68k/include/*.h \
        $S/arch/amiga/amiga/*.[ch] $S/arch/amiga/include/*.h \
index b1b0fdf..cde2bb1 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: Locore.c,v 1.3 1996/11/23 23:19:26 kstailey Exp $     */
-/*     $NetBSD: Locore.c,v 1.11 1995/08/13 00:05:05 mycroft Exp $      */
+/*     $OpenBSD: Locore.c,v 1.4 1997/01/16 09:23:12 niklas Exp $       */
+/*     $NetBSD: Locore.c,v 1.15 1996/11/06 20:19:21 cgd Exp $  */
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -336,9 +336,6 @@ scanc(size, cp, table, mask)
 /*ARGSUSED*/
 skpc(mask, size, cp) int mask; int size; char *cp; { return (0); }
 
-/*ARGSUSED*/
-locc(mask, size, cp) int mask; char *cp; unsigned size; { return (0); }
-
 /*ARGSUSED*/
 ffs(v) long v; { return (0); }
 
index 61420e1..033a661 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: amiga_init.c,v 1.13 1996/10/04 23:34:35 niklas Exp $  */
-/*     $NetBSD: amiga_init.c,v 1.41.4.4 1996/08/03 00:56:12 jtc Exp $  */
+/*     $OpenBSD: amiga_init.c,v 1.14 1997/01/16 09:23:14 niklas Exp $  */
+/*     $NetBSD: amiga_init.c,v 1.53 1996/11/30 01:20:14 is Exp $       */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
@@ -924,14 +924,21 @@ start_c(id, fphystart, fphysize, cphysize, esym_addr, flags, inh_sync)
                *draco_intpen = 0;
                *draco_intfrc = 0;
                ciaa.icr = 0x7f;                        /* and keyboard */
-#if 0
                ciab.icr = 0x7f;                        /* and again */
-#endif
-               *(volatile u_int8_t *)(DRCCADDR + 
+
+               draco_ioct->io_control &=
+                   ~(DRCNTRL_KBDINTENA|DRCNTRL_FDCINTENA); /* and another */
+
+               draco_ioct->io_status2 &=
+                   ~(DRSTAT2_PARIRQENA|DRSTAT2_TMRINTENA); /* some more */
+
+               *(volatile u_int8_t *)(DRCCADDR + 1 +
                    DRSUPIOPG*NBPG + 4*(0x3F8 + 1)) = 0; /* and com0 */
-               *(volatile u_int8_t *)(DRCCADDR +
+
+               *(volatile u_int8_t *)(DRCCADDR + 1 +
                    DRSUPIOPG*NBPG + 4*(0x2F8 + 1)) = 0; /* and com1 */
                
+               draco_ioct->io_control |= DRCNTRL_WDOGDIS; /* stop Fido */
                *draco_misc &= ~1/*DRMISC_FASTZ2*/;
 
        } else 
@@ -965,6 +972,7 @@ void
 start_c_cleanup()
 {
        u_int *sg, *esg;
+       extern u_int32_t delaydivisor;
 
        /*
         * remove shadow mapping of kernel?
@@ -975,6 +983,22 @@ start_c_cleanup()
        esg = (u_int *)&sg[namigashdwpg];
        while (sg < esg)
                *sg++ = PG_NV;
+
+       /*
+        * preliminary delay divisor value
+        */
+
+       if (machineid & AMIGA_68060)
+               delaydivisor = (1024 * 1) / 80; /* 80 MHz 68060 w. BTC */
+
+       else if (machineid & AMIGA_68040)
+               delaydivisor = (1024 * 3) / 40; /* 40 MHz 68040 */
+
+       else if (machineid & AMIGA_68030)
+               delaydivisor = (1024 * 3) / 50; /* 50 MHz 68030 */
+
+       else
+               delaydivisor = (1024 * 8) / 33; /* 33 MHz 68020 */
 }
 
 void
@@ -1057,12 +1081,12 @@ kernel_reload_write(uio)
                /*
                 * Pull in the exec header and check it.
                 */
-               if ((error = uiomove((caddr_t)&kernel_exec, sizeof(kernel_exec),
-                    uio)) != 0)
+               if ((error = uiomove((caddr_t)&kernel_exec,
+                   sizeof(kernel_exec), uio)) != 0)
                        return(error);
                printf("loading kernel %ld+%ld+%ld+%ld\n", kernel_exec.a_text,
-                       kernel_exec.a_data, kernel_exec.a_bss,
-                       esym == NULL ? 0 : kernel_exec.a_syms);
+                   kernel_exec.a_data, kernel_exec.a_bss,
+                   esym == NULL ? 0 : kernel_exec.a_syms);
                /*
                 * Looks good - allocate memory for a kernel image.
                 */
index 612d31a..13b6488 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: autoconf.c,v 1.8 1997/01/04 12:40:31 niklas Exp $     */
-/*     $NetBSD: autoconf.c,v 1.38.4.1 1996/05/26 16:23:26 is Exp $     */
+/*     $OpenBSD: autoconf.c,v 1.9 1997/01/16 09:23:15 niklas Exp $     */
+/*     $NetBSD: autoconf.c,v 1.45 1996/12/23 09:15:39 veego Exp $      */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -55,6 +55,8 @@ int cold;     /* 1 if still booting */
 void
 configure()
 {
+       int s;
+
        /*
         * this is the real thing baby (i.e. not console init)
         */
@@ -65,10 +67,11 @@ configure()
        } else
 #endif
        custom.intena = INTF_INTEN;
+       s = splhigh();
 
        if (config_rootfound("mainbus", "mainbus") == NULL)
                panic("no mainbus found");
-
+       splx(s);
 #ifdef DEBUG_KERNEL_START
        printf("survived autoconf, going to enable interrupts\n");
 #endif
@@ -188,6 +191,12 @@ config_console()
        if (cf == NULL) {
                panic("no mainbus");
        }
+
+       /*
+        * delay clock calibration.
+        */
+       amiga_config_found(cf, NULL, "clock", NULL);
+
        /*
         * internal grf.
         */
@@ -236,12 +245,14 @@ mbattach(pdp, dp, auxp)
        struct device *pdp, *dp;
        void *auxp;
 {
-       printf ("\n");
+       printf("\n");
        config_found(dp, "clock", simple_devprint);
 #ifdef DRACO
        if (is_draco()) {
                config_found(dp, "kbd", simple_devprint);
                config_found(dp, "drsc", simple_devprint);
+               config_found(dp, "drcom", simple_devprint);
+               config_found(dp, "drcom", simple_devprint);
                /*
                 * XXX -- missing here:
                 * SuperIO chip serial, parallel, floppy
@@ -343,9 +354,8 @@ setroot()
         */
        if (rootdev == orootdev)
                return;
-       printf("changing root device to %c%c%d%c\n",
-               devname[majdev][0], devname[majdev][1],
-               unit, part + 'a');
+       printf("changing root device to %c%c%d%c\n", devname[majdev][0],
+           devname[majdev][1], unit, part + 'a');
 #ifdef DOSWAP
        mindev = DISKUNIT(rootdev);
        for (swp = swdevt; swp->sw_dev; swp++) {
@@ -443,7 +453,7 @@ is_a4000()
                return (1);
 #ifdef DEBUG
        if (a4000_flag)
-               printf ("Denise ID = %04x\n", (unsigned short)custom.deniseid);
+               printf("Denise ID = %04x\n", (unsigned short)custom.deniseid);
 #endif
        if (machineid >> 16)
                return (0);             /* It's not an A4000 */
index d212068..f32b3ac 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: conf.c,v 1.15 1996/11/28 23:33:02 niklas Exp $        */
-/*     $NetBSD: conf.c,v 1.36 1996/05/19 21:04:18 veego Exp $  */
+/*     $OpenBSD: conf.c,v 1.16 1997/01/16 09:23:16 niklas Exp $        */
+/*     $NetBSD: conf.c,v 1.42 1997/01/07 11:35:03 mrg Exp $    */
 
 /*-
  * Copyright (c) 1991 The Regents of the University of California.
@@ -51,8 +51,6 @@
 #include <sys/bankeddev.h>
 #endif
 
-int    ttselect        __P((dev_t, int, struct proc *));
-
 #include "vnd.h"
 #include "sd.h"
 #include "cd.h"
@@ -65,6 +63,7 @@ int   ttselect        __P((dev_t, int, struct proc *));
 #if 0
 #include "rd.h"
 #endif
+#include "ch.h"
 
 struct bdevsw  bdevsw[] =
 {
@@ -100,6 +99,7 @@ int  nblkdev = sizeof(bdevsw) / sizeof(bdevsw[0]);
 #include "ms.h"
 #include "view.h"
 #include "mfcs.h"
+#include "drcom.h"
 dev_decl(filedesc,open);
 #include "bpfilter.h"
 #include "tun.h"
@@ -153,6 +153,8 @@ struct cdevsw       cdevsw[] =
        cdev_uk_init(NUK,uk),           /* 36: unknown SCSI */
        cdev_disk_init(NWD,wd),         /* 37: ST506/ESDI/IDE disk */
        cdev_disk_init(NACD,acd),       /* 38: ATAPI CD-ROM */
+       cdev_tty_init(NDRCOM,drcom),    /* 39: DraCo com ports */
+       cdev_ch_init(NCH,ch),           /* 40: SCSI autochanger */
 };
 int    nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]);
 
@@ -222,9 +224,9 @@ static int chrtoblktab[] = {
        /*  4 */        NODEV,
        /*  5 */        NODEV,
        /*  6 */        NODEV,
-       /*  7 */        8,
-       /*  8 */        4,
-       /*  9 */        7,
+       /*  7 */        8,              /* ccd */
+       /*  8 */        4,              /* sd */
+       /*  9 */        7,              /* cd */
        /* 10 */        NODEV,
        /* 11 */        NODEV,
        /* 12 */        NODEV,
@@ -233,9 +235,9 @@ static int chrtoblktab[] = {
        /* 15 */        NODEV,
        /* 16 */        NODEV,
        /* 17 */        NODEV,
-       /* 18 */        2,
-       /* 19 */        6,
-       /* 20 */        5,
+       /* 18 */        2,              /* fd */
+       /* 19 */        6,              /* vnd */
+       /* 20 */        5,              /* st */
        /* 21 */        NODEV,
        /* 22 */        NODEV,
        /* 23 */        NODEV,
@@ -252,8 +254,10 @@ static int chrtoblktab[] = {
        /* 34 */        NODEV,
        /* 35 */        NODEV,
        /* 36 */        NODEV,
-       /* 37 */        0,
-       /* 38 */        15,
+       /* 37 */        0,              /* wd */
+       /* 38 */        15,             /* acd */
+       /* 39 */        NODEV,
+       /* 40 */        NODEV,
 };
 
 /*
index 6f4b7db..bdf9cb4 100644 (file)
@@ -1,10 +1,13 @@
-/*     $OpenBSD: db_memrw.c,v 1.3 1996/05/02 06:43:14 niklas Exp $     */
-/*     $NetBSD: db_memrw.c,v 1.3 1996/04/21 21:06:55 veego Exp $       */
+/*     $OpenBSD: db_memrw.c,v 1.4 1997/01/16 09:23:17 niklas Exp $     */
+/*     $NetBSD: db_memrw.c,v 1.6 1996/12/09 17:53:07 thorpej Exp $     */
 
-/*
- * Copyright (c) 1994 Gordon W. Ross
+/*-
+ * Copyright (c) 1996 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Gordon W. Ross.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 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. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may 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.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``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 REGENTS OR CONTRIBUTORS 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.
  */
 
 /*
@@ -115,7 +124,9 @@ db_write_text(dst, ch)
                return;
        }
 
-/*printf("db_write_text: %x: %x = %x (%x:%x)\n", dst, *dst, ch, pte, *pte);*/
+#if 0
+printf("db_write_text: %x: %x = %x (%x:%x)\n", dst, *dst, ch, pte, *pte);
+#endif
        *pte &= ~PG_RO;
        TBIS((vm_offset_t)dst);
 
index 8f472f8..31ea76c 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: device.h,v 1.3 1996/11/23 21:45:04 kstailey Exp $     */
-/*     $NetBSD: device.h,v 1.5 1996/04/21 21:06:57 veego Exp $ */
+/*     $OpenBSD: device.h,v 1.4 1997/01/16 09:23:17 niklas Exp $       */
+/*     $NetBSD: device.h,v 1.6 1996/08/27 21:54:26 cgd Exp $   */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index ca73414..a68b2aa 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: disksubr.c,v 1.7 1996/12/20 16:48:09 niklas Exp $     */
-/*     $NetBSD: disksubr.c,v 1.25 1996/04/30 05:00:51 mhitch Exp $     */
+/*     $OpenBSD: disksubr.c,v 1.8 1997/01/16 09:23:18 niklas Exp $     */
+/*     $NetBSD: disksubr.c,v 1.27 1996/10/13 03:06:34 christos Exp $   */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index d8660e7..b2f81c5 100644 (file)
@@ -1,6 +1,6 @@
 /* 
- * $OpenBSD: drcustom.h,v 1.3 1996/08/19 00:04:13 niklas Exp $
- * $NetBSD: drcustom.h,v 1.1.4.1 1996/06/21 06:42:44 jtc Exp $
+ * $OpenBSD: drcustom.h,v 1.4 1997/01/16 09:23:19 niklas Exp $
+ * $NetBSD: drcustom.h,v 1.3 1996/09/24 17:11:54 is Exp $
  * 
  * Motherboard addresses for the DraCo.
  *
@@ -66,7 +66,7 @@ struct drioct {
 #define DRCNTRL_FDCINTENA 1
 #define DRCNTRL_KBDDATOUT 2
 #define DRCNTRL_KBDCLKOUT 4
-#define DRCNTRL_WDOGENA 8
+#define DRCNTRL_WDOGDIS 8
 #define DRCNTRL_WDOGDAT 16
 #define DRCNTRL_KBDINTENA 32
 #define DRCNTRL_KBDKBDACK 64
index 9992525..08888a3 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: genassym.c,v 1.6 1996/05/29 10:14:25 niklas Exp $     */
-/*     $NetBSD: genassym.c,v 1.26 1996/05/09 20:30:37 is Exp $ */
+/*     $OpenBSD: genassym.c,v 1.7 1997/01/16 09:23:20 niklas Exp $     */
+/*     $NetBSD: genassym.c,v 1.29 1996/12/17 07:32:55 is Exp $ */
 
 /*
  * Copyright (c) 1982, 1990 The Regents of the University of California.
@@ -36,6 +36,7 @@
  *     @(#)genassym.c  7.8 (Berkeley) 5/7/91
  */
 
+#include <stdio.h>
 #include <sys/param.h>
 #include <sys/buf.h>
 #include <sys/proc.h>
@@ -43,7 +44,6 @@
 #include <sys/msgbuf.h>
 #include <sys/syscall.h>
 #include <sys/user.h>
-#include <sys/systm.h>
 
 #include <vm/vm.h>
 
@@ -134,6 +134,10 @@ main()
        printf("#define\tDC_CLEAR %d\n", DC_CLEAR);
        printf("#define\tCACHE40_ON %d\n", CACHE40_ON);
        printf("#define\tCACHE40_OFF %d\n", CACHE40_OFF);
+       printf("#define\tCACHE60_ON %d\n", CACHE60_ON);
+       printf("#define\tCACHE60_OFF %d\n", CACHE60_OFF);
+       printf("#define\tIC60_CUBC %d\n", IC60_CUBC);
+       printf("#define\tIC60_CABC %d\n", IC60_CABC);
        printf("#define\tPG_V %d\n", PG_V);
        printf("#define\tPG_NV %d\n", PG_NV);
        printf("#define\tPG_RO %d\n", PG_RO);
index 460b049..a10545b 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: locore.s,v 1.12 1996/11/23 23:19:27 kstailey Exp $    */
-/*     $NetBSD: locore.s,v 1.56.2.2 1996/06/14 11:20:45 is Exp $       */
+/*     $OpenBSD: locore.s,v 1.13 1997/01/16 09:23:22 niklas Exp $      */
+/*     $NetBSD: locore.s,v 1.72 1996/12/17 11:09:10 is Exp $   */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -60,7 +60,7 @@ L_base:
 #include <amiga/amiga/custom.h>
 #include "ser.h"
 #include "fd.h"
-       
+
 #ifdef DRACO
 #include <amiga/amiga/drcustom.h>
 #endif
@@ -71,7 +71,7 @@ L_base:
 #define INTREQRADDR(ar)        movl    _INTREQRaddr,ar
 #define INTREQWADDR(ar)        movl    _INTREQWaddr,ar
 #define INTENAWADDR(ar) movl   _INTENAWaddr,ar
-#define        INTENARADDR(ar) movl    _INTENARaddr,ar
+#define INTENARADDR(ar)        movl    _INTENARaddr,ar
 
        .text
 /*
@@ -130,10 +130,11 @@ _addrerr:
        btst    #2,d0                   | branch prediction error?
        jeq     Lnobpe                  
        movc    cacr,d2
-       orl     #0x00400000,d2          | clear all branch cache entries
+       orl     #IC60_CABC,d2           | clear all branch cache entries
        movc    d2,cacr
        movl    d0,d1
        andl    #0x7ffd,d1
+       addql   #1,L60bpe
        jeq     Lbpedone
 Lnobpe:
        movl    d0,sp@                  | code is FSLW now.
@@ -220,18 +221,18 @@ Lbe10:
 Lbe10a:
        ptestr  d0,a0@,#7               | do a table search
        pmove   psr,sp@                 | save result
-       movl    sp@,d1
-       btst    #26,d1                  | invalid (incl. limit viol. and berr)?
+       movb    sp@,d1
+       btst    #2,d1                   | invalid (incl. limit viol. and berr)?
        jeq     Lmightnotbemerr         | no -> wp check
-       btst    #31,d1                  | is it MMU table berr?
+       btst    #7,d1                   | is it MMU table berr?
        jeq     Lismerr                 | no, must be fast
        jra     Lisberr1                | real bus err needs not be fast.
 Lmightnotbemerr:
-       btst    #27,d1                  | write protect bit set?
+       btst    #3,d1                   | write protect bit set?
        jeq     Lisberr1                | no: must be bus error
-                                       | ssw is in low word of d1
-       andw    #0xc0,d1                | Write protect is set on page:
-       cmpw    #0x40,d1                | was it read cycle?
+       movl    sp@,d0                  | ssw into low word of d0
+       andw    #0xc0,d0                | Write protect is set on page:
+       cmpw    #0x40,d0                | was it read cycle?
        jeq     Lisberr1                | yes, was not WPE, must be bus err
 Lismerr:
        movl    #T_MMUFLT,sp@-          | show that we are an MMU fault
@@ -543,8 +544,7 @@ _DraCoLev2intr:
 
        CIAAADDR(a0)
        movb    a0@(CIAICR),d0          | read irc register (clears ints!)
-       tstb    d0                      | check if CIAB was source
-       jeq     Ldrintrcommon
+       jge     Ldrintrcommon           | CIAA IR not set, go through isr chain
        movel   _draco_intpen,a0
 |      andib   #4,a0@
 |XXX this would better be 
@@ -564,6 +564,41 @@ Ldraciaend:
        moveml  sp@+,#0x0303
        addql   #1,_cnt+V_INTR
        jra     rei
+
+/* XXX on the DraCo rev. 4 or later, lev 1 is vectored here. */
+       .globl _DraCoLev1intr
+       .globl _amiga_clk_interval
+_DraCoLev1intr:
+       moveml  #0xC0C0,sp@-
+       movl    _draco_ioct,a0
+       btst    #5,a0@(7)
+       jeq     Ldrintrcommon
+       btst    #4,a0@(7)       | this only happens during autoconfiguration,
+       jeq     Ldrintrcommon   | so test last.
+       movw    #PSL_HIGHIPL,sr | run clock at high ipl
+Ldrclockretry:
+       lea     sp@(16),a1      | get pointer to PS
+       movl    a1,sp@-         | push pointer to PS, PC
+       jbsr    _hardclock
+       addql   #4,sp           | pop params
+       addql   #1,_intrcnt+32  | add another system clock interrupt
+
+       movl    _draco_ioct,a0
+       tstb    a0@(9)          | latch timer value
+       movw    a0@(11),d0      | can't use movpw here, might be 68060
+       movb    a0@(13),d0
+       addw    _amiga_clk_interval+2,d0
+       movb    d0,a0@(13)      | low byte: latch write value
+       movw    d0,a0@(11)      | ...and write it into timer
+       tstw    d0              | already positive?
+       jcs     Ldrclockretry   | we lost more than one tick, call us again.
+
+       clrb    a0@(9)          | reset timer irq
+
+       moveml  sp@+,#0x0303
+       addql   #1,_cnt+V_INTR
+       jra     rei
+
 /* XXX on the DraCo, lev 1, 3, 4, 5 and 6 are vectored here by initcpu() */
        .globl _DraCoIntr
 _DraCoIntr:
@@ -671,8 +706,7 @@ _fake_lev6intr:
 
        CIABADDR(a0)
        movb    a0@(CIAICR),d0          | read irc register (clears ints!)
-       tstb    d0                      | check if CIAB was source
-       jeq     Lchkexter               | no, go through isr chain
+       jge     Lchkexter               | CIAB IR not set, go through isr chain
        INTREQWADDR(a0)
 #ifndef LEV6_DEFER
        movew   #INTF_EXTER,a0@         | clear EXTER interrupt in intreq
@@ -983,7 +1017,7 @@ Lsetcpu040:
        movl    #CACHE40_OFF,d0         | 68040 cache disable
        btst    #7,sp@(3)               | XXX
        jeq     Lstartnot040
-       orl     #0x400000,d0            | XXX and clear all 060 branch cache 
+       orl     #IC60_CABC,d0           | XXX and clear all 060 branch cache
 Lstartnot040:
        movc    d0,cacr                 | clear and disable on-chip cache(s)
        movl    #_vectab,a0
@@ -1030,6 +1064,11 @@ Lunshadow:
 | is this needed? MLH
        .word   0xf4f8          | cpusha bc - push & invalidate caches
        movl    #CACHE40_ON,d0
+#ifdef M68060
+       btst    #7,_machineid+3
+       jeq     Lcacheon
+       movl    #CACHE60_ON,d0
+#endif
 Lcacheon:
        movc    d0,cacr                 | clear cache(s)
 /* final setup for C code */
@@ -1069,11 +1108,12 @@ Lcacheon:
        jne     Lnoflush                | no, skip
        .word   0xf478                  | cpusha dc
        .word   0xf498                  | cinva ic
-       btst    #7,_machineid+3
-       jeq     Lnoflush
-       movc    cacr,d0
-       orl     #200000,d0
-       movc    d0,cacr
+| XXX dont need these; the cinva ic also clears the branch cache.
+|      btst    #7,_machineid+3
+|      jeq     Lnoflush
+|      movc    cacr,d0
+|      orl     #IC60_CUBC,d0
+|      movc    d0,cacr
 Lnoflush:
        movl    sp@(FR_SP),a0           | grab and load
        movl    a0,usp                  |   user SP
@@ -1229,8 +1269,8 @@ ENTRY(longjmp)
 
 /*
  * The following primitives manipulate the run queues.
- * _whichqs tells which of the 32 queues _qs
- * have processes in them.  Setrunqueue puts processes into queues, Remrq
+ * _whichqs tells which of the 32 queues _qs have processes
+ * in them.  Setrunqueue puts processes into queues, remrunqueue
  * removes them from queues.  The running process is on no queue,
  * other processes are on a queue related to p->p_priority, divided by 4
  * actually to shrink the 0-127 range of priorities into the 32 available
@@ -1274,7 +1314,7 @@ Lset2:
        .even
 
 /*
- * Remrq(p)
+ * remrunqueue(p)
  *
  * Call should be made at spl6().
  */
@@ -1513,7 +1553,7 @@ Lres2:
        btst    #7,_machineid+3
        jeq     Lres3
        movc    cacr,d2
-       orl     #0x00200000,d2          | clear user branch cache entries
+       orl     #IC60_CUBC,d2           | clear user branch cache entries
        movc    d2,cacr
 #endif
 Lres3:
@@ -1712,7 +1752,7 @@ Ltbia040:
        btst    #7,_machineid+3
        jeq     Ltbiano60
        movc    cacr,d0
-       orl     #0x400000,d0    | and clear all branch cache entries
+       orl     #IC60_CABC,d0           | and clear all branch cache entries
        movc    d0,cacr
 #endif
 Ltbiano60:
@@ -1749,7 +1789,7 @@ Ltbis040:
        btst    #7,_machineid+3
        jeq     Ltbisno60
        movc    cacr,d0
-       orl     #0x400000,d0    | and clear all branch cache entries
+       orl     #IC60_CABC,d0           | and clear all branch cache entries
        movc    d0,cacr
 Ltbisno60:
 #endif
@@ -1781,7 +1821,7 @@ Ltbias040:
        btst    #7,_machineid+3
        jeq     Ltbiasno60
        movc    cacr,d0
-       orl     #0x400000,d0    | and clear all branch cache entries
+       orl     #IC60_CABC,d0           | and clear all branch cache entries
        movc    d0,cacr
 Ltbiasno60:
 #endif
@@ -1813,7 +1853,7 @@ Ltbiau040:
        btst    #7,_machineid+3
        jeq     Ltbiauno60
        movc    cacr,d0
-       orl     #0x200000,d0    | but only user branch cache entries
+       orl     #IC60_CUBC,d0           | but only user branch cache entries
        movc    d0,cacr
 Ltbiauno60:
 #endif
@@ -1991,11 +2031,11 @@ ENTRY(loadustp)
 #ifdef M68060
 Lldustp060:
        movc    cacr,d1
-       orl     #0x200000,d1    | clear user branch cache entries
+       orl     #IC60_CUBC,d1           | clear user branch cache entries
        movc    d1,cacr
 #endif
 Lldustp040:
-       .word   0x4e7b,0x0806   | movec d0,URP
+       .word   0x4e7b,0x0806           | movec d0,URP
        rts
 
 /*
@@ -2022,7 +2062,7 @@ Lnot68851:
 #ifdef M68060
 Lflustp060:
        movc    cacr,d1
-       orl     #0x200000,d1    | clear user branch cache entries
+       orl     #IC60_CUBC,d1           | clear user branch cache entries
        movc    d1,cacr
        rts
 #endif
@@ -2071,7 +2111,7 @@ ENTRY(m68881_save)
        fsave   a0@                     | save state
 #if defined(M68020) || defined(M68030) || defined(M68040)
 #ifdef M68060
-       btst    #7,_machineid
+       btst    #7,_machineid+3
        jne     Lm68060fpsave
 #endif
        tstb    a0@                     | null state frame?
@@ -2098,7 +2138,7 @@ ENTRY(m68881_restore)
        movl    sp@(4),a0               | save area pointer
 #if defined(M68020) || defined(M68030) || defined(M68040)
 #if defined(M68060)
-       btst    #7,_machineid
+       btst    #7,_machineid+3
        jne     Lm68060fprestore
 #endif
        tstb    a0@                     | null state frame?
@@ -2331,11 +2371,45 @@ nullrp: .long   0x7fff0001
 zero:  .long   0
 Ldorebootend:
 
+       .align 2
+       .globl _DELAY
+       .globl _delay
+       nop
+_delay:
+_DELAY:
+       movql #10,d1            | 2 +2
+       movl sp@(4),d0          | 4 +4
+       lsll d1,d0              | 8 +2
+       movl _delaydivisor,d1   | A +6
+Ldelay:                                | longword aligned again.
+       subl d1,d0
+       jcc Ldelay
+       rts
+
+#ifdef M68060
+       .globl _intemu60, _fpiemu60, _fpdemu60, _fpeaemu60
+_intemu60:
+       addql   #1,L60iem
+       jra     _I_CALL_TOP+128+0x00
+_fpiemu60:
+       addql   #1,L60fpiem
+       jra     _FP_CALL_TOP+128+0x30
+_fpdemu60:
+       addql   #1,L60fpdem
+       jra     _FP_CALL_TOP+128+0x38
+_fpeaemu60:
+       addql   #1,L60fpeaem
+       jra     _FP_CALL_TOP+128+0x40
+#endif
 
        .data
        .space  NBPG
 tmpstk:
-       .globl  _mmutype,_protorp
+       .globl  _mmutype,_fputype,_protorp
+_mmutype:
+       .long   0
+_fputype:
+       .long   0
 _protorp:
        .long   0x80000002,0    | prototype root pointer
        .globl  _cold
@@ -2344,6 +2418,12 @@ _cold:
        .globl  _proc0paddr
 _proc0paddr:
        .long   0               | KVA of proc0 u-area
+       .globl _delaydivisor
+_delaydivisor:
+       .long   12              | should be enough for 80 MHz 68060
+                               | will be adapted to other CPUs in
+                               | start_c_cleanup and calibrated
+                               | at clock attach time.
 #ifdef DEBUG
        .globl  fulltflush, fullcflush
 fulltflush:
@@ -2376,6 +2456,13 @@ _intrnames:
        .asciz  "lcl/zbus"      | 6: lcl/zorro lev6
        .asciz  "buserr"        | 7: nmi: bus timeout
 #endif
+#ifdef M68060
+       .asciz  "60intemu"
+       .asciz  "60fpiemu"
+       .asciz  "60fpdemu"
+       .asciz  "60fpeaemu"
+       .asciz  "60bpe"
+#endif
 _eintrnames:
        .align  2
 _intrcnt:
@@ -2384,4 +2471,11 @@ _intrcnt:
 Drintrcnt:
        .long   0,0,0,0,0,0,0
 #endif
+#ifdef M68060
+L60iem:                .long   0
+L60fpiem:      .long   0
+L60fpdem:      .long   0
+L60fpeaem:     .long   0
+L60bpe:                .long   0
+#endif
 _eintrcnt:
index 9621cbb..f998c2b 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: machdep.c,v 1.15 1996/08/19 00:04:15 niklas Exp $     */
-/*     $NetBSD: machdep.c,v 1.72.4.1 1996/05/26 16:23:23 is Exp $      */
+/*     $OpenBSD: machdep.c,v 1.16 1997/01/16 09:23:24 niklas Exp $     */
+/*     $NetBSD: machdep.c,v 1.82 1996/12/17 07:32:54 is Exp $  */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -154,6 +154,11 @@ void ser_outintr __P((void));
 void fdintr __P((int));
 #endif
 
+/*
+ * patched by some devices at attach time (currently, only drcom)
+ */
+u_int16_t amiga_ttyspl = PSL_S|PSL_IPL4;
+
 /*
  * Declare these as initialized data so we can patch them.
  */
@@ -197,6 +202,7 @@ char machine[] = "amiga";
 struct isr *isr_ports;
 #ifdef DRACO
 struct isr *isr_slot3;
+struct isr *isr_supio;
 #endif
 #if defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
 struct isr *isr_exter[7];
@@ -499,8 +505,8 @@ again:
 #endif
        printf("avail mem = %ld (%ld pages)\n", ptoa(cnt.v_free_count),
            ptoa(cnt.v_free_count)/NBPG);
-       printf("using %d buffers containing %d bytes of memory\n",
-               nbuf, bufpages * CLBYTES);
+       printf("using %d buffers containing %d bytes of memory\n", nbuf,
+           bufpages * CLBYTES);
        
        /*
         * display memory configuration passed from loadbsd
@@ -511,9 +517,9 @@ again:
                            memlist->m_seg[i].ms_start, 
                            memlist->m_seg[i].ms_size);
 #if defined(MACHINE_NONCONTIG) && defined(DEBUG)
-       printf ("Physical memory segments:\n");
+       printf("Physical memory segments:\n");
        for (i = 0; i < memlist->m_nseg && phys_segs[i].start; ++i)
-               printf ("Physical segment %d at %08lx size %ld offset %d\n", i,
+               printf("Physical segment %d at %08lx size %ld offset %d\n", i,
                    phys_segs[i].start,
                    (phys_segs[i].end - phys_segs[i].start) / NBPG,
                    phys_segs[i].first_page);
@@ -522,6 +528,7 @@ again:
 #ifdef DEBUG_KERNEL_START
        printf("calling initcpu...\n");
 #endif
+
        /*
         * Set up CPU-specific registers, cache, etc.
         */
@@ -595,7 +602,12 @@ setregs(p, pack, stack, retval)
  */
 char cpu_model[120];
 extern char version[];
+
+#if defined(M68060)
+int m68060_pcr_init = 0x21;    /* make this patchable */
+#endif
+
+
 void
 identifycpu()
 {
@@ -640,7 +652,7 @@ identifycpu()
                cpu_type = "m68040";
                mmu = "/MMU";
                fpu = "/FPU";
-               fputype = FPU_68040;
+               fputype = FPU_68040; /* XXX */
        } else if (machineid & AMIGA_68030) {
                cpu_type = "m68030";    /* XXX */
                mmu = "/MMU";
@@ -747,7 +759,9 @@ sendsig(catcher, sig, mask, code)
        extern char sigcode[], esigcode[];
 
 
-/*printf("sendsig %d %d %x %x %x\n", p->p_pid, sig, mask, code, catcher);*/
+#if 0
+printf("sendsig %d %d %x %x %x\n", p->p_pid, sig, mask, code, catcher);
+#endif
 
        frame = (struct frame *)p->p_md.md_regs;
        ft = frame->f_format;
@@ -772,13 +786,13 @@ sendsig(catcher, sig, mask, code)
 #ifdef DEBUG
        if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
                printf("sendsig(%d): sig %d ssp %p usp %p scp %p ft %d\n",
-                      p->p_pid, sig, &oonstack, fp, &fp->sf_sc, ft);
+                   p->p_pid, sig, &oonstack, fp, &fp->sf_sc, ft);
 #endif
        if (useracc((caddr_t)fp, sizeof(struct sigframe), B_WRITE) == 0) {
 #ifdef DEBUG
                if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
                        printf("sendsig(%d): useracc failed on sig %d\n",
-                              p->p_pid, sig);
+                           p->p_pid, sig);
 #endif
                /*
                 * Process has trashed its stack; give it an illegal
@@ -807,8 +821,8 @@ sendsig(catcher, sig, mask, code)
         *      - FP coprocessor state
         */
        kfp->sf_state.ss_flags = SS_USERREGS;
-       bcopy((caddr_t)frame->f_regs,
-             (caddr_t)kfp->sf_state.ss_frame.f_regs, sizeof frame->f_regs);
+       bcopy((caddr_t)frame->f_regs, (caddr_t)kfp->sf_state.ss_frame.f_regs,
+           sizeof frame->f_regs);
        if (ft >= FMT9) {
 #ifdef DEBUG
                if (ft != FMT9 && ft != FMTA && ft != FMTB)
@@ -818,7 +832,7 @@ sendsig(catcher, sig, mask, code)
                kfp->sf_state.ss_frame.f_format = frame->f_format;
                kfp->sf_state.ss_frame.f_vector = frame->f_vector;
                bcopy((caddr_t)&frame->F_u,
-                     (caddr_t)&kfp->sf_state.ss_frame.F_u, exframesize[ft]);
+                   (caddr_t)&kfp->sf_state.ss_frame.F_u, exframesize[ft]);
                /*
                 * Leave an indicator that we need to clean up the kernel
                 * stack.  We do this by setting the "pad word" above the
@@ -834,7 +848,7 @@ sendsig(catcher, sig, mask, code)
 #ifdef DEBUG
                if (sigdebug & SDB_FOLLOW)
                        printf("sendsig(%d): copy out %d of frame %d\n",
-                              p->p_pid, exframesize[ft], ft);
+                           p->p_pid, exframesize[ft], ft);
 #endif
        }
 #ifdef FPCOPROC
@@ -842,9 +856,9 @@ sendsig(catcher, sig, mask, code)
        m68881_save(&kfp->sf_state.ss_fpstate);
 #ifdef DEBUG
        if ((sigdebug & SDB_FPSTATE) && *(char *)&kfp->sf_state.ss_fpstate)
-               printf("sendsig(%d): copy out FP state (%x) to %p\n",
-                      p->p_pid, *(u_int *)&kfp->sf_state.ss_fpstate,
-                      &kfp->sf_state.ss_fpstate);
+               printf("sendsig(%d): copy out FP state (%x) to %p\n", p->p_pid,
+                   *(u_int *)&kfp->sf_state.ss_fpstate,
+                   &kfp->sf_state.ss_fpstate);
 #endif
 #endif
        /*
@@ -862,8 +876,8 @@ sendsig(catcher, sig, mask, code)
 #ifdef DEBUG
        if (sigdebug & SDB_FOLLOW)
                printf("sendsig(%d): sig %d scp %p fp %p sc_sp %x sc_ap %x\n",
-                      p->p_pid, sig, kfp->sf_scp, fp,
-                      kfp->sf_sc.sc_sp, kfp->sf_sc.sc_ap);
+                   p->p_pid, sig, kfp->sf_scp, fp, kfp->sf_sc.sc_sp,
+                   kfp->sf_sc.sc_ap);
 #endif
        /*
         * Signal trampoline code is at base of user stack.
@@ -871,8 +885,7 @@ sendsig(catcher, sig, mask, code)
        frame->f_pc = (int)(((char *)PS_STRINGS) - (esigcode - sigcode));
 #ifdef DEBUG
        if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
-               printf("sendsig(%d): sig %d returns\n",
-                      p->p_pid, sig);
+               printf("sendsig(%d): sig %d returns\n", p->p_pid, sig);
 #endif
        free((caddr_t)kfp, M_TEMP);
 }
@@ -947,8 +960,8 @@ sys_sigreturn(p, v, retval)
        flags = fuword((caddr_t)rf);
 #ifdef DEBUG
        if (sigdebug & SDB_FOLLOW)
-               printf("sigreturn(%d): sc_ap %x flags %x\n",
-                      p->p_pid, rf, flags);
+               printf("sigreturn(%d): sc_ap %x flags %x\n", p->p_pid, rf,
+                   flags);
 #endif
        /*
         * fuword failed (bogus sc_ap value).
@@ -959,9 +972,9 @@ sys_sigreturn(p, v, retval)
                return (EJUSTRETURN);
 #ifdef DEBUG
        if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
-               printf("sigreturn(%d): ssp %p usp %x scp %p ft %d\n",
-                      p->p_pid, &flags, scp->sc_sp, SCARG(uap, sigcntxp),
-                      (flags&SS_RTEFRAME) ? tstate.ss_frame.f_format : -1);
+               printf("sigreturn(%d): ssp %p usp %x scp %p ft %d\n", p->p_pid,
+                   &flags, scp->sc_sp, SCARG(uap, sigcntxp),
+                   (flags&SS_RTEFRAME) ? tstate.ss_frame.f_format : -1);
 #endif
        /*
         * Restore most of the users registers except for A6 and SP
@@ -989,7 +1002,7 @@ sys_sigreturn(p, v, retval)
 #ifdef DEBUG
                if (sigdebug & SDB_FOLLOW)
                        printf("sigreturn(%d): copy in %d of frame type %d\n",
-                              p->p_pid, sz, tstate.ss_frame.f_format);
+                           p->p_pid, sz, tstate.ss_frame.f_format);
 #endif
        }
 #ifdef FPCOPROC
@@ -1001,8 +1014,8 @@ sys_sigreturn(p, v, retval)
 #ifdef DEBUG
        if ((sigdebug & SDB_FPSTATE) && *(char *)&tstate.ss_fpstate)
                printf("sigreturn(%d): copied in FP state (%x) at %p\n",
-                      p->p_pid, *(u_int *)&tstate.ss_fpstate,
-                      &tstate.ss_fpstate);
+                   p->p_pid, *(u_int *)&tstate.ss_fpstate,
+                   &tstate.ss_fpstate);
 #endif
 #endif
 #ifdef DEBUG
@@ -1021,6 +1034,7 @@ bootsync(void)
        if (waittime < 0) {
                waittime = 0;
                vfs_shutdown();
+
                /*
                 * If we've been adjusting the clock, the todr
                 * will be out of synch; adjust it now.
@@ -1261,10 +1275,6 @@ microtime(tvp)
        splx(s);
 }
 
-#if defined(M68060)
-int m68060_pcr_init = 0x21;    /* make this patchable */
-#endif
-
 void
 initcpu()
 {
@@ -1275,7 +1285,8 @@ initcpu()
 
 #ifdef M68060
 #if defined(M060SP)
-       extern u_int8_t I_CALL_TOP[];
+       /*extern u_int8_t I_CALL_TOP[];*/
+       extern u_int8_t intemu60, fpiemu60, fpdemu60, fpeaemu60;
        extern u_int8_t FP_CALL_TOP[];
 #else
        extern u_int8_t illinst;
@@ -1284,7 +1295,8 @@ initcpu()
 #endif
 
 #ifdef DRACO
-       extern u_int8_t DraCoIntr, DraCoLev2intr;
+       extern u_int8_t DraCoIntr, DraCoLev1intr, DraCoLev2intr;
+       u_char dracorev;
 #endif
 
 #ifdef M68060
@@ -1294,12 +1306,17 @@ initcpu()
 #if defined(M060SP)
 
                /* integer support */
-               vectab[61] = &I_CALL_TOP[128 + 0x00];
+               vectab[61] = &intemu60/*&I_CALL_TOP[128 + 0x00]*/;
 
                /* floating point support */
-               vectab[11] = &FP_CALL_TOP[128 + 0x30];
-               vectab[55] = &FP_CALL_TOP[128 + 0x38];
-               vectab[60] = &FP_CALL_TOP[128 + 0x40];
+               /*
+                * XXX maybe we really should run-time check for the
+                * stack frame format here:
+                */
+               vectab[11] = &fpiemu60/*&FP_CALL_TOP[128 + 0x30]*/;
+
+               vectab[55] = &fpdemu60/*&FP_CALL_TOP[128 + 0x38]*/;
+               vectab[60] = &fpeaemu60/*&FP_CALL_TOP[128 + 0x40]*/;
 
                vectab[54] = &FP_CALL_TOP[128 + 0x00];
                vectab[52] = &FP_CALL_TOP[128 + 0x08];
@@ -1315,10 +1332,20 @@ initcpu()
        }
 #endif
 
+/*
+ * Vector initialization for special motherboards 
+ */
+
 #ifdef DRACO
-       if (is_draco()) {
-               vectab[24+1] = &DraCoIntr;
-               vectab[24+2] = &DraCoLev2intr;
+       dracorev = is_draco();
+       if (dracorev) {
+               if (dracorev >= 4) {
+                       vectab[24+1] = &DraCoLev1intr;
+                       vectab[24+2] = &DraCoIntr;
+               } else {
+                       vectab[24+1] = &DraCoIntr;
+                       vectab[24+2] = &DraCoLev2intr;
+               }
                vectab[24+3] = &DraCoIntr;
                vectab[24+4] = &DraCoIntr;
                vectab[24+5] = &DraCoIntr;
@@ -1583,9 +1610,12 @@ add_isr(isr)
                break;
 #ifdef DRACO
        case 3:
-               panic("DraCo IPL3 not yet supported here");
                p = &isr_slot3;
                break;
+
+       case 5:
+               p = &isr_supio;
+               break;
 #endif
        case 6:
 #if defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
@@ -1608,8 +1638,16 @@ add_isr(isr)
        /* enable interrupt */
 #ifdef DRACO
        if (is_draco())
-               *draco_intena |= isr->isr_ipl == 6 ?
-                       DRIRQ_INT6 : DRIRQ_INT2;
+               switch(isr->isr_ipl) {
+                       case 6:
+                               *draco_intena |= DRIRQ_INT6;
+                               break;
+                       case 2:
+                               *draco_intena |= DRIRQ_INT2;
+                               break;
+                       default:
+                               break;
+               }
        else 
 #endif
                custom.intena = INTF_SETCLR |
@@ -1628,9 +1666,12 @@ remove_isr(isr)
                break;
 #ifdef DRACO
        case 3:
-               panic("DraCo IPL3 not yet supported here");
                chain = &isr_slot3;
                break;
+
+       case 5:
+               chain = &isr_supio;
+               break;
 #endif
        case 6:
 #if defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
@@ -1648,6 +1689,7 @@ remove_isr(isr)
                *p = q->isr_forw;
        else
                panic("remove_isr: handler not registered");
+       /* disable interrupt if no more handlers */
        if (*chain == NULL)
                switch (isr->isr_ipl) {
                case 2:
@@ -1658,11 +1700,6 @@ remove_isr(isr)
 #endif
                                custom.intena = INTF_PORTS;
                        break;
-#ifdef DRACO
-               case 3:
-                       panic("DraCo IPL3 not yet supported here");
-                       break;
-#endif
                case 6:
 #if defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
                        if (isr->isr_mapped_ipl == isr_exter_lowipl) {
@@ -1801,6 +1838,16 @@ intrhand(sr)
                if (ireq & INTF_VERTB)
                        vbl_handler();
                break;
+#ifdef DRACO
+       case 5:
+               p = &isr_supio;
+               while ((q = *p) != NULL) {
+                       if ((q->isr_intr)(q->isr_arg))
+                               break;
+                       p = &q->isr_forw;
+               }
+               break;
+#endif
 #if 0
 /* now dealt with in locore.s for speed reasons */
        case 5:
index ee31867..94fe673 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pmap.c,v 1.7 1996/10/04 23:34:39 niklas Exp $ */
+/*     $OpenBSD: pmap.c,v 1.8 1997/01/16 09:23:26 niklas Exp $ */
 /*     $NetBSD: pmap.c,v 1.34.4.1 1996/08/03 00:53:58 jtc Exp $        */
 
 /* 
@@ -499,9 +499,9 @@ pmap_init(phys_start, phys_end)
 #ifdef DEBUG
        if (pmapdebug & PDB_INIT) {
                printf("pmap_init: Sysseg %p, Sysmap %p, Sysptmap %p\n",
-                      Sysseg, Sysmap, Sysptmap);
+                   Sysseg, Sysmap, Sysptmap);
                printf("  pstart %lx, pend %lx, vstart %lx, vend %lx\n",
-                      avail_start, avail_end, virtual_avail, virtual_end);
+                   avail_start, avail_end, virtual_avail, virtual_end);
        }
 #endif
 
@@ -516,8 +516,8 @@ pmap_init(phys_start, phys_end)
                        npg += atop(phys_segs[i].end - phys_segs[i].start);
        }
 #ifdef DEBUG
-       printf ("pmap_init: avail_start %lx phys_segs[0].start %lx npg %ld\n",
-               avail_start, phys_segs[0].start, npg);
+       printf("pmap_init: avail_start %lx phys_segs[0].start %lx npg %ld\n",
+           avail_start, phys_segs[0].start, npg);
 #endif
 #else
        npg = atop(phys_end - phys_start);
@@ -547,7 +547,7 @@ pmap_init(phys_start, phys_end)
 #ifdef DEBUG
        if (pmapdebug & PDB_INIT)
                printf("pmap_init: %lx bytes (%lx pgs): seg %p tbl %p attr %p\n",
-                      s, npg, Segtabzero, pv_table, pmap_attributes);
+                   s, npg, Segtabzero, pv_table, pmap_attributes);
 #endif
 
        /*
@@ -596,8 +596,8 @@ pmap_init(phys_start, phys_end)
 #ifdef DEBUG
        kpt_stats.kpttotal = atop(s);
        if (pmapdebug & PDB_INIT)
-               printf("pmap_init: KPT: %ld pages from %lx to %lx\n",
-                      atop(s), addr, addr + s);
+               printf("pmap_init: KPT: %ld pages from %lx to %lx\n", atop(s),
+                   addr, addr + s);
 #endif
 
        /*
@@ -661,8 +661,8 @@ pmap_next_page(addrp)
        if (avail_next == phys_segs[cur_seg].end) {
                avail_next = phys_segs[++cur_seg].start;
 #ifdef DEBUG
-               printf ("pmap_next_page: next %lx remain %ld\n",
-                   avail_next, avail_remaining);
+               printf("pmap_next_page: next %lx remain %ld\n", avail_next,
+                   avail_remaining);
 #endif
        }
 
@@ -833,7 +833,8 @@ pmap_map(virt, start, end, prot)
 {
 #ifdef DEBUG
        if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_map(%lx, %lx, %lx, %x)\n", virt, start, end, prot);
+               printf("pmap_map(%lx, %lx, %lx, %x)\n", virt, start, end,
+                   prot);
 #endif
        while (start < end) {
                pmap_enter(pmap_kernel(), virt, start, prot, FALSE);
@@ -1114,11 +1115,11 @@ pmap_remove(pmap, sva, eva)
 #ifdef DEBUG
                        if (npv == NULL) {
 #ifdef MACHINE_NONCONTIG       /* XXX this need to be fixed */
-                               printf("pmap_remove: PA %lx index %d\n",
-                                   pa, pa_index(pa));
+                               printf("pmap_remove: PA %lx index %d\n", pa,
+                                   pa_index(pa));
 #else
-                               printf("pmap_remove: PA %lx index %ld\n",
-                                   pa, pa_index(pa));
+                               printf("pmap_remove: PA %lx index %ld\n", pa,
+                                   pa_index(pa));
 #endif
                                panic("pmap_remove: PA not in pv_tab");
                        }
@@ -1138,8 +1139,8 @@ pmap_remove(pmap, sva, eva)
                        remove_stats.ptinvalid++;
                        if (pmapdebug & (PDB_REMOVE|PDB_PTPAGE)) {
                                printf("remove: ste was %x@%p pte was %x@%p\n",
-                                      *ste, ste,
-                                      *(int *)&opte, pmap_pte(pmap, va));
+                                   *ste, ste, *(int *)&opte,
+                                   pmap_pte(pmap, va));
                        }
 #endif
 #if defined(M68040) || defined(M68060)
@@ -1173,8 +1174,8 @@ pmap_remove(pmap, sva, eva)
 #ifdef DEBUG
                                if (pmapdebug & (PDB_REMOVE|PDB_SEGTAB))
                                        printf("remove: stab %p, refcnt %d\n",
-                                              ptpmap->pm_stab,
-                                              ptpmap->pm_sref - 1);
+                                           ptpmap->pm_stab,
+                                           ptpmap->pm_sref - 1);
                                if ((pmapdebug & PDB_PARANOIA) &&
                                    ptpmap->pm_stab != (u_int *)trunc_page(ste))
                                        panic("remove: bogus ste");
@@ -1183,11 +1184,11 @@ pmap_remove(pmap, sva, eva)
 #ifdef DEBUG
                                        if (pmapdebug&(PDB_REMOVE|PDB_SEGTAB))
                                        printf("remove: free stab %p\n",
-                                              ptpmap->pm_stab);
+                                            ptpmap->pm_stab);
 #endif
                                        kmem_free_wakeup(kernel_map,
-                                                 (vm_offset_t)ptpmap->pm_stab,
-                                                 AMIGA_STSIZE);
+                                           (vm_offset_t)ptpmap->pm_stab,
+                                           AMIGA_STSIZE);
                                        ptpmap->pm_stab = Segtabzero;
                                        ptpmap->pm_stpa = Segtabzeropa;
 #if defined(M68040) || defined(M68060)
@@ -1272,15 +1273,15 @@ pmap_page_protect(pa, prot)
                        if (!pmap_ste_v(pv->pv_pmap,pv->pv_va) ||
                            pmap_pte_pa(pmap_pte(pv->pv_pmap,pv->pv_va)) != pa)
 {
-  printf ("pmap_page_protect: va %lx, pmap_ste_v %d pmap_pte_pa %08x/%lx\n",
-    pv->pv_va, pmap_ste_v(pv->pv_pmap,pv->pv_va),
-    pmap_pte_pa(pmap_pte(pv->pv_pmap,pv->pv_va)),pa);
-  printf (" pvh %p pv %p pv_next %p\n", pa_to_pvh(pa), pv, pv->pv_next);
-                               panic("pmap_page_protect: bad mapping");
+    printf ("pmap_page_protect: va %lx, pmap_ste_v %d pmap_pte_pa %08x/%lx\n",
+       pv->pv_va, pmap_ste_v(pv->pv_pmap,pv->pv_va),
+       pmap_pte_pa(pmap_pte(pv->pv_pmap,pv->pv_va)), pa);
+    printf (" pvh %p pv %p pv_next %p\n", pa_to_pvh(pa), pv, pv->pv_next);
+    panic("pmap_page_protect: bad mapping");
 }
 #endif
                        pmap_remove(pv->pv_pmap, pv->pv_va,
-                                   pv->pv_va + PAGE_SIZE);
+                           pv->pv_va + PAGE_SIZE);
                }
                splx(s);
                break;
@@ -1304,7 +1305,8 @@ pmap_protect(pmap, sva, eva, prot)
 
 #ifdef DEBUG
        if (pmapdebug & (PDB_FOLLOW|PDB_PROTECT))
-               printf("pmap_protect(%p, %lx, %lx, %x)\n", pmap, sva, eva, prot);
+               printf("pmap_protect(%p, %lx, %lx, %x)\n", pmap, sva, eva,
+                   prot);
 #endif
        if (pmap == NULL)
                return;
@@ -1390,8 +1392,8 @@ pmap_enter(pmap, va, pa, prot, wired)
 
 #ifdef DEBUG
        if (pmapdebug & (PDB_FOLLOW|PDB_ENTER))
-               printf("pmap_enter(%p, %lx, %lx, %x, %x)\n",
-                      pmap, va, pa, prot, wired);
+               printf("pmap_enter(%p, %lx, %lx, %x, %x)\n", pmap, va, pa,
+                   prot, wired);
 #endif
        if (pmap == NULL)
                return;
@@ -1497,8 +1499,8 @@ pmap_enter(pmap, va, pa, prot, wired)
                s = splimp();
 #ifdef DEBUG
                if (pmapdebug & PDB_ENTER)
-                       printf("enter: pv at %p: %lx/%p/%p\n",
-                              pv, pv->pv_va, pv->pv_pmap, pv->pv_next);
+                       printf("enter: pv at %p: %lx/%p/%p\n", pv, pv->pv_va,
+                           pv->pv_pmap, pv->pv_next);
 #endif
                /*
                 * No entries yet, use header as the first entry
@@ -1668,7 +1670,8 @@ pmap_change_wiring(pmap, va, wired)
         */
        if (!pmap_ste_v(pmap, va)) {
                if (pmapdebug & PDB_PARANOIA)
-                       printf("pmap_change_wiring: invalid STE for %lx\n", va);
+                       printf("pmap_change_wiring: invalid STE for %lx\n",
+                           va);
                return;
        }
        /*
@@ -1677,7 +1680,8 @@ pmap_change_wiring(pmap, va, wired)
         */
        if (!pmap_pte_v(pte)) {
                if (pmapdebug & PDB_PARANOIA)
-                       printf("pmap_change_wiring: invalid PTE for %lx\n", va);
+                       printf("pmap_change_wiring: invalid PTE for %lx\n",
+                           va);
        }
 #endif
        if ((wired && !pmap_pte_w(pte)) || (!wired && pmap_pte_w(pte))) {
@@ -1739,8 +1743,8 @@ void pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr)
 {
 #ifdef DEBUG
        if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_copy(%p, %p, %lx, %lx, %lx)\n",
-                      dst_pmap, src_pmap, dst_addr, len, src_addr);
+               printf("pmap_copy(%p, %p, %lx, %lx, %lx)\n", dst_pmap,
+                   src_pmap, dst_addr, len, src_addr);
 #endif
 }
 
@@ -1834,7 +1838,7 @@ ok:
 #ifdef DEBUG
                if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT)) {
                        printf("collect: freeing KPT page at %lx (ste %x@%p)\n",
-                              pv->pv_va, *(int *)pv->pv_ptste, pv->pv_ptste);
+                           pv->pv_va, *(int *)pv->pv_ptste, pv->pv_ptste);
                        opmapdebug = pmapdebug;
                        pmapdebug |= PDB_PTPAGE;
                }
@@ -1863,7 +1867,7 @@ ok:
                        panic("pmap_collect: lost a KPT page");
                if (pmapdebug & (PDB_PTPAGE|PDB_COLLECT))
                        printf("collect: %lx (%lx) to free list\n",
-                              kpt->kpt_va, kpa);
+                           kpt->kpt_va, kpa);
 #endif
                *pkpt = kpt->kpt_next;
                kpt->kpt_next = kpt_free_list;
@@ -1876,11 +1880,11 @@ ok:
 
                if (*ste)
                        printf("collect: kernel STE at %p still valid (%x)\n",
-                              ste, *ste);
+                           ste, *ste);
                ste = (int *)&Sysptmap[(u_int *)ste-pmap_ste(pmap_kernel(), 0)];
                if (*ste)
                        printf("collect: kernel PTmap at %p still valid (%x)\n",
-                              ste, *ste);
+                           ste, *ste);
 #endif
        }
        splx(s);
@@ -1958,8 +1962,8 @@ pmap_pageable(pmap, sva, eva, pageable)
 {
 #ifdef DEBUG
        if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_pageable(%p, %lx, %lx, %x)\n",
-                      pmap, sva, eva, pageable);
+               printf("pmap_pageable(%p, %lx, %lx, %x)\n", pmap, sva, eva,
+                   pageable);
 #endif
        /*
         * If we are making a PT page pageable then all valid
@@ -1975,8 +1979,8 @@ pmap_pageable(pmap, sva, eva, pageable)
 
 #ifdef DEBUG
                if ((pmapdebug & (PDB_FOLLOW|PDB_PTPAGE)) == PDB_PTPAGE)
-                       printf("pmap_pageable(%p, %lx, %lx, %x)\n",
-                              pmap, sva, eva, pageable);
+                       printf("pmap_pageable(%p, %lx, %lx, %x)\n", pmap, sva,
+                           eva, pageable);
 #endif
                if (!pmap_ste_v(pmap, sva))
                        return;
@@ -1989,7 +1993,7 @@ pmap_pageable(pmap, sva, eva, pageable)
 #ifdef DEBUG
                if (pv->pv_va != sva || pv->pv_next) {
                        printf("pmap_pageable: bad PT page va %lx next %p\n",
-                              pv->pv_va, pv->pv_next);
+                           pv->pv_va, pv->pv_next);
                        return;
                }
 #endif
@@ -2000,7 +2004,7 @@ pmap_pageable(pmap, sva, eva, pageable)
 #ifdef DEBUG
                if (pmapdebug & PDB_PTPAGE)
                        printf("pmap_pageable: PT page %lx(%x) unmodified\n",
-                              sva, *(int *)pmap_pte(pmap, sva));
+                           sva, *(int *)pmap_pte(pmap, sva));
                if (pmapdebug & PDB_WIRING)
                        pmap_check_wiring("pageable", sva);
 #endif
@@ -2172,8 +2176,8 @@ pmap_changebit(pa, bit, setem)
 
 #ifdef DEBUG
        if (pmapdebug & PDB_BITS)
-               printf("pmap_changebit(%lx, %x, %s)\n",
-                      pa, bit, setem ? "set" : "clear");
+               printf("pmap_changebit(%lx, %x, %s)\n", pa, bit,
+                   setem ? "set" : "clear");
 #endif
        if (!pmap_valid_page(pa))
                return;
@@ -2290,8 +2294,8 @@ pmap_enter_ptpage(pmap, va)
                        PMAP_ACTIVATE(pmap, (struct pcb *)curproc->p_addr, 1);
 #ifdef DEBUG
                if (pmapdebug & (PDB_ENTER|PDB_PTPAGE|PDB_SEGTAB))
-                       printf("enter_pt: pmap %p stab %p(%p)\n",
-                              pmap, pmap->pm_stab, pmap->pm_stpa);
+                       printf("enter_pt: pmap %p stab %p(%p)\n", pmap,
+                           pmap->pm_stab, pmap->pm_stpa);
 #endif
        }
 
@@ -2323,7 +2327,8 @@ pmap_enter_ptpage(pmap, va)
 #endif
 #ifdef DEBUG
                        if (pmapdebug & (PDB_ENTER|PDB_PTPAGE|PDB_SEGTAB))
-                               printf("enter_pt: alloc ste2 %d(%p)\n", ix, addr);
+                               printf("enter_pt: alloc ste2 %d(%p)\n", ix,
+                                   addr);
 #endif
                }
                ste = pmap_ste2(pmap, va);
@@ -2338,8 +2343,8 @@ pmap_enter_ptpage(pmap, va)
                ste = (u_int *)((int)ste & ~(NBPG / SG4_LEV3SIZE - 1));
 #ifdef DEBUG
                if (pmapdebug &  (PDB_ENTER|PDB_PTPAGE|PDB_SEGTAB))
-                       printf("enter_pt: ste2 %p (%p)\n",
-                           pmap_ste2(pmap, va), ste);
+                       printf("enter_pt: ste2 %p (%p)\n", pmap_ste2(pmap, va),
+                           ste);
 #endif
        }
 #endif
@@ -2387,9 +2392,9 @@ pmap_enter_ptpage(pmap, va)
 #ifdef DEBUG
                if (pmapdebug & (PDB_ENTER|PDB_PTPAGE))
                        printf("enter_pt: add &Sysptmap[%d]: %x (KPT page %lx)\n",
-                              ste - pmap_ste(pmap, 0),
-                              *(int *)&Sysptmap[ste - pmap_ste(pmap, 0)],
-                              kpt->kpt_va);
+                           ste - pmap_ste(pmap, 0),
+                           *(int *)&Sysptmap[ste - pmap_ste(pmap, 0)],
+                           kpt->kpt_va);
 #endif
                splx(s);
        }
@@ -2447,7 +2452,8 @@ pmap_enter_ptpage(pmap, va)
        pv->pv_ptpmap = pmap;
 #ifdef DEBUG
        if (pmapdebug & (PDB_ENTER|PDB_PTPAGE))
-               printf("enter_pt: new PT page at PA %lx, ste at %p\n", ptpa, ste);
+               printf("enter_pt: new PT page at PA %lx, ste at %p\n", ptpa,
+                   ste);
 #endif
 
        /*
@@ -2473,8 +2479,8 @@ pmap_enter_ptpage(pmap, va)
        if (pmap != pmap_kernel()) {
 #ifdef DEBUG
                if (pmapdebug & (PDB_ENTER|PDB_PTPAGE|PDB_SEGTAB))
-                       printf("enter_pt: stab %p refcnt %d\n",
-                              pmap->pm_stab, pmap->pm_sref);
+                       printf("enter_pt: stab %p refcnt %d\n", pmap->pm_stab,
+                           pmap->pm_sref);
 #endif
        }
        /*
@@ -2498,8 +2504,8 @@ pmap_pvdump(pa)
        printf("pa %lx", pa);
        for (pv = pa_to_pvh(pa); pv; pv = pv->pv_next)
                printf(" -> pmap %p, va %lx, ptste %p, ptpmap %p, flags %x",
-                      pv->pv_pmap, pv->pv_va, pv->pv_ptste, pv->pv_ptpmap,
-                      pv->pv_flags);
+                   pv->pv_pmap, pv->pv_va, pv->pv_ptste, pv->pv_ptpmap,
+                   pv->pv_flags);
        printf("\n");
 }
 
@@ -2525,7 +2531,7 @@ pmap_check_wiring(str, va)
                if (*pte)
                        count++;
        if (entry->wired_count != count)
-               printf("*%s*: %lx: w%d/a%d\n",
-                      str, va, entry->wired_count, count);
+               printf("*%s*: %lx: w%d/a%d\n", str, va, entry->wired_count,
+                   count);
 }
 #endif
index 61f186b..4fad803 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: swapgeneric.c,v 1.6 1996/10/05 15:47:51 niklas Exp $  */
-/*     $NetBSD: swapgeneric.c,v 1.24 1996/05/21 17:15:40 is Exp $      */
+/*     $OpenBSD: swapgeneric.c,v 1.7 1997/01/16 09:23:28 niklas Exp $  */
+/*     $NetBSD: swapgeneric.c,v 1.26 1996/10/13 03:06:40 christos Exp $        */
 
 /*
  * Copyright (c) 1982, 1986 Regents of the University of California.
index 459e12c..a1034c9 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: sys_machdep.c,v 1.4 1996/08/19 00:04:15 niklas Exp $  */
-/*     $NetBSD: sys_machdep.c,v 1.14.4.1 1996/05/26 16:23:34 is Exp $  */
+/*     $OpenBSD: sys_machdep.c,v 1.5 1997/01/16 09:23:29 niklas Exp $  */
+/*     $NetBSD: sys_machdep.c,v 1.15 1996/05/25 21:54:28 is Exp $      */
 
 /*
  * Copyright (c) 1982, 1986 Regents of the University of California.
index 063348a..48ede72 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: trap.c,v 1.7 1996/11/28 23:33:03 niklas Exp $ */
-/*     $NetBSD: trap.c,v 1.47 1996/05/10 14:31:08 is Exp $     */
+/*     $OpenBSD: trap.c,v 1.8 1997/01/16 09:23:30 niklas Exp $ */
+/*     $NetBSD: trap.c,v 1.52 1996/11/13 06:22:20 thorpej Exp $        */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -481,7 +481,7 @@ trapmmufault(type, code, v, fp, p, sticks)
                if (type == T_MMUFLT)
                        return;
                userret(p, fp->f_pc, sticks); 
-               reutrn;
+               return;
        }
 #else /* use hacky 386bsd_code */
        if (rv == KERN_SUCCESS) {
diff --git a/sys/arch/amiga/conf/A3000 b/sys/arch/amiga/conf/A3000
deleted file mode 100644 (file)
index c08c6eb..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#      $OpenBSD: A3000,v 1.6 1996/12/11 23:06:32 niklas Exp $
-#      $NetBSD: A3000,v 1.7 1994/10/26 02:02:23 cgd Exp $
-
-#
-# Minimal AMIGA 3000
-#
-# Author: Stephen Roznowski (sjr@zombie.ncsc.mil)
-#
-# This configuration file is for a multiple disk/multiple tape A3000.
-#
-
-include "arch/amiga/conf/std.amiga"
-#
-# Add support for about 16 users. This variable is used to size
-# various kernel structures.
-#
-maxusers       16
-
-#
-# processors this kernel should support
-#
-options                "M68030"        # support for 030
-
-options                TIMEZONE=300    # Set the timezone that the kernel will use
-options                DST=1           # Set the timezone that the kernel will use
-
-options                FPCOPROC        # Support for MC68881/MC68882
-options                FPSP
-
-#
-# Networking options
-#
-options                INET            # Basic networking support
-
-options                FFS             # Berkeley fast file system
-options                MFS             # Memory based filesystem
-options                PROCFS          # Process filesystem
-options                KERNFS          # Kernel parameter filesystem
-options                NULLFS          # Loopback filesystem
-
-options                FIFO            # FIFO operations on vnodes
-
-options                SWAPPAGER       # Pager for swap device
-options                DEVPAGER        # Pager
-
-#
-# Compatability options for various existing systems
-#
-options                "COMPAT_09"     # fs type binary compatability (name vs number)
-options                COMPAT_SUNOS    # Support to run Sun-3 executables
-options                "COMPAT_43"     # 4.3 BSD compatible system calls
-#options               "TCP_COMPAT_42" # Use 4.2 BSD style TCP
-options                "COMPAT_NOMID"  # ???
-
-#
-# Graphics options
-# 
-options                GRF_ECS                 # Enhanced Chip Set
-options                GRF_NTSC                # NTSC
-options                GRF_PAL                 # PAL
-options                "GRF_A2024"             # Support for the A2024
-
-#
-# Support for System V IPC facilities.
-#
-options                SYSVSHM         # System V shared memory
-options                SYSVMSG         # System V messages
-options                SYSVSEM         # System V semaphores
-
-#
-# Support for various kernel options
-#
-options                KTRACE          # Add kernel tracing system call
-options                DIAGNOSTIC      # Add additional error checking code
-options                "NKMEMCLUSTERS=256"     # Size of kernel malloc area
-options                GENERIC         # Mini-root boot support
-
-#
-# Build one kernel that can boot from any disk.
-#
-config         bsd swap on generic
-
-pseudo-device  view    10      # View (graphics mapping)
-pseudo-device  pty     16      # Pseudo-tty support
-pseudo-device  loop            # Loopback network
-
-#
-#The following sections describe various hardware options.
-#
-
-#
-# Devices on an Amiga 3000
-#
-ahsc0          at mainbus0             # A3000 scsi
-scsibus0       at ahsc0
-
-# any drives on configured controllers.
-sd0    at scsibus? target 0 lun 0
-sd1    at scsibus? target 1 lun 0
-sd2    at scsibus? target 2 lun 0
-sd3    at scsibus? target 3 lun 0
-sd4    at scsibus? target 4 lun 0
-sd5    at scsibus? target 5 lun 0
-sd6    at scsibus? target 6 lun 0
-st0    at scsibus? target ? lun 0
-
-grfcc0         at mainbus0
-grf0           at grfcc0
-ite0           at grf0
diff --git a/sys/arch/amiga/conf/COFFEE b/sys/arch/amiga/conf/COFFEE
deleted file mode 100644 (file)
index e023c49..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-#      $OpenBSD: COFFEE,v 1.7 1996/12/11 23:06:33 niklas Exp $
-#      $NetBSD: COFFEE,v 1.12 1995/10/09 02:08:35 chopps Exp $
-
-#
-# COFFEE - GENERIC but with GATEWAY and DEBUG
-#
-# This configuration file contains all possible options
-#
-
-include "arch/amiga/conf/std.amiga"
-
-maxusers       8
-option         TIMEZONE=300, DST=1
-
-#
-# processors this kernel should support
-#
-option         "M68040"        # support for 040
-option         FPSP            # MC68040 floating point support
-option         "M68030"        # support for 030
-option         "M68020"        # support for 020/851
-option         FPCOPROC        # Support for MC6888[12] (Required)
-
-option         SWAPPAGER       # Pager for processes (Required)
-option         DEVPAGER        # Pager for devices (Required)
-
-#
-# Networking options
-#
-option         INET            # IP networking support (Required)
-#option                ISO             # ISO Networking support
-#option                TPIP            # ARGO TP networking support
-#option                CCITT           # CCITT X.25
-#option                NS              # Xerox XNS
-#option                EON             # ISO CLNL over IP
-option         GATEWAY         # Packet forwarding
-#option                DIRECTED_BROADCAST      # Broadcast across subnets
-#option                NSIP            # XNS over IP
-
-#
-# File system related options
-#
-option         QUOTA           # Disk quotas for local disks
-option         NFSSERVER       # Network File System server side code
-option         NFSCLIENT       # Network File System client side code
-
-#
-# File systems
-#
-option         FFS             # Berkeley fast file system
-option         MFS             # Memory based filesystem
-option         PROCFS          # Process filesystem
-option         KERNFS          # Kernel parameter filesystem (Recommended)
-option         FDESC           # /dev/fd filesystem
-option         NULLFS          # Loopback filesystem
-option         FIFO            # FIFO operations on vnodes (Recommended)
-option         ADOSFS          # AmigaDOS file system
-option         "CD9660"        # ISO 9660 file system, with Rock Ridge
-option         UNION           # union file system
-option         UMAPFS          # uid/gid remapping filesystem
-#option                PORTAL          # Portal filesystem
-#option                MSDOSFS         # MS-DOS filesystem
-
-
-#
-# Compatability options for various existing systems
-#
-option         "COMPAT_10"     # compatability with older NetBSD release
-option         "COMPAT_09"     # compatability with older NetBSD release
-option         "COMPAT_43"     # 4.3 BSD compatible system calls
-option         COMPAT_SUNOS    # Support to run Sun (m68k) executables
-#option                "TCP_COMPAT_42" # Use 4.2 BSD style TCP
-option         "COMPAT_NOMID"  # allow nonvalid machine id executables
-#option                COMPAT_HPUX     # HP300 compatability
-
-#
-# Support for System V IPC facilities.
-#
-option         SYSVSHM         # System V-like shared memory
-option         SYSVMSG         # System V-like messages
-option         SYSVSEM         # System V-like semaphores
-
-#
-# Support for various kernel options
-#
-option         GENERIC         # Mini-root boot support
-option         LKM             # Loadable kernel modules
-option         KTRACE          # Add kernel tracing system call
-option         DIAGNOSTIC      # Add additional error checking code
-option         "NKMEMCLUSTERS=256"     # Size of kernel malloc area
-
-#
-# Misc. debuging options
-#
-option         PANICWAIT       # Require keystroke to dump/reboot
-option         DEBUG           # Add debugging statements
-option         DDB             # Kernel debugger
-#option                SYSCALL_DEBUG   # debug all syscalls.
-#option                SCSIDEBUG       # Add SCSI debugging statements
-#option                KGDB            # Kernel debugger (KGDB) support
-#option                PANICBUTTON     # Forced crash via keypress (???)
-
-#
-# Amiga specific options
-#
-option         MACHINE_NONCONTIG # Non-contiguous memory support
-
-option         RETINACONSOLE   # enable code to allow retina to be console
-option         ULOWELLCONSOLE  # enable code to allow a2410 to be console
-option         CL5426CONSOLE   # Cirrus console
-
-option         GRF_ECS         # Enhanced Chip Set
-option         GRF_NTSC        # NTSC
-option         GRF_PAL         # PAL
-option         "GRF_A2024"     # Support for the A2024
-option         GRF_AGA         # AGA Chip Set
-option         GRF_CL5426      # Cirrus board support
-#option                "KFONT_8X11"    # 8x11 font
-
-# This is how you would tell the kernel the A2410 oscillator frequencies:
-# The used frequencies are the defaults, and don't need option setting
-#option                "ULOWELL_OSC1=36000000"
-#option                "ULOWELL_OSC2=66667000"
-
-# This is how you specify the blitting speed, higher values may speed up blits
-# a littel bit.  If you raise this value too much some trash may appear.
-# the commented version is the default.
-#option                RH_MEMCLK 61000000
-# this option enables the 64 bit sprite which doesn't seems to be work
-# for quite a few people.  E.g. The cursor sprite will turn to a block
-# when moved to the top of the screen in X.
-#option                RH_64BIT_SPRITE
-# enables fast scroll code appears to now work on 040 systems.
-#option                RETINA_SPEED_HACK
-
-grfcc0         at mainbus0             # custom chips
-grfrt0         at zbus0                # retina II
-grfrh0         at zbus0                # retina III
-grfcl*         at zbus0                # Picasso II/Piccalo/Spectrum
-grful0         at zbus0                # A2410
-grfcv0         at zbus0                # CyberVision 64
-
-grf0           at grfcc0
-grf1           at grfrt0
-grf2           at grfrh0
-grf3           at grfcl?
-grf4           at grful0
-grf5           at grfcv0
-
-ite0           at grf0                 # terminal emulators for grf's
-ite1           at grf1                 # terminal emulators for grf's
-ite2           at grf2                 # terminal emulators for grf's
-ite3           at grf3                 # terminal emulators for grf's
-ite4           at grf4                 # terminal emulators for grf's
-
-msc0           at zbus0                # A2232 MSC multiport serial.
-mfc0           at zbus0                # MultiFaceCard I/O board
-mfcs0          at mfc0 unit 0          # MFC serial
-mfcs1          at mfc0 unit 1          # MFC serial
-#mfcp0         at mfc0 unit 0          # MFC parallel [not available yet]
-#mfc1          at zbus0                # MultiFaceCard 2nd I/O board
-#mfcs2         at mfc1 unit 0
-#mfcs3         at mfc1 unit 1
-#mfcp1         at mfc1 unit 0
-
-le0            at zbus0                # Lance ethernet.
-ed0            at zbus0                # dp8390 ethernet
-es0            at zbus0                # SMC 91C90 ethernet
-qn0            at zbus0                # quicknet ethernet
-ae0            at zbus0                # Ariadne ethernet
-bah0           at zbus0                # C= arcnet
-
-# scsi stuff, all possible
-gvpbus*                at zbus0
-gtsc0          at gvpbus?              # GVP series II scsi
-ahsc0          at mainbus0             # A3000 scsi
-atzsc0         at zbus0
-wstsc0         at zbus0                # Wordsync II scsi
-ivsc0          at zbus0                # IVS scsi
-mlhsc0         at zbus0                # Hacker scsi
-otgsc0         at zbus0                # 12 gauge scsi
-zssc0          at zbus0                # Zeus scsi
-mgnsc0         at zbus0                # Magnum scsi
-wesc0          at zbus0                # Warp Engine scsi
-idesc0         at mainbus0             # A4000 & A1200 IDE
-afsc0          at zbus0                # A4091 scsi
-aftsc0         at mainbus0             # A4000T scsi
-flsc0          at zbus0                # FastlaneZ3 scsi
-bzsc0          at zbus0                # Blizzard 1230 scsi
-
-scsibus*       at gtsc0
-scsibus*       at ahsc0
-scsibus*       at atzsc0
-scsibus*       at wstsc0
-scsibus*       at ivsc0
-scsibus*       at mlhsc0
-scsibus*       at otgsc0
-scsibus*       at zssc0
-scsibus*       at mgnsc0
-scsibus*       at wesc0
-scsibus*       at idesc0
-scsibus*       at afsc0
-scsibus*       at aftsc0
-scsibus*       at flsc0
-scsibus*       at bzsc0
-
-# each hard drive from low target to high
-# will configure to the next available sd unit number
-sd*    at scsibus? target ? lun ?      # scsi disks
-
-st*    at scsibus? target ? lun ?      # scsi tapes
-cd*    at scsibus? target ? lun ?      # scsi cd's
-
-pseudo-device  ccd 4                   # concat disks
-pseudo-device  sl                      # slip
-pseudo-device  ppp                     # ppp
-pseudo-device  view 10                 # views
-pseudo-device  pty 16                  # pseudo terminals
-pseudo-device  loop                    # network loopback
-pseudo-device  bpfilter 12             # berkeley packet filters
-pseudo-device  tun 2
-pseudo-device  vnd     3               # 3 pseudo disks (see vnconfig)
-
-config bsd swap on generic
index 0b5f536..3ee26dc 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: CRASH,v 1.6 1996/12/11 23:06:33 niklas Exp $
+#      $OpenBSD: CRASH,v 1.7 1997/01/16 09:23:34 niklas Exp $
 
 #
 # The first OpenBSD/Amiga "user" Neil Brewitt's GG2 + NE2000 equipped A3000
@@ -21,7 +21,6 @@ option                "M68030"        # support for 030
 option         FPCOPROC        # Support for MC6888[12] (Required)
 
 option         SWAPPAGER       # Pager for processes (Required)
-option         VNODEPAGER      # Pager for vnodes (Required)
 option         DEVPAGER        # Pager for devices (Required)
 
 #
index d6cf4ce..96ed319 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: DRACO,v 1.7 1996/12/11 23:06:34 niklas Exp $
-#      $NetBSD: DRACO,v 1.2.4.2 1996/09/06 00:28:31 jtc Exp $
+#      $OpenBSD: DRACO,v 1.8 1997/01/16 09:23:35 niklas Exp $
+#      $NetBSD: DRACO,v 1.7 1996/12/20 19:18:16 veego Exp $
 
 #
 # Macro System GmbH "DraCo", currently 68060-only until FPE is integrated.
@@ -24,10 +24,6 @@ option               "M68060"        # support for 060
 option         "M060SP"        # MC68060 software support (Required for 060)
 option         FPCOPROC        # Support for MC6888[12] (Required)
 
-#
-# pagers:
-#
-
 option         SWAPPAGER       # Pager for processes (Required)
 option         DEVPAGER        # Pager for devices (Required)
 
@@ -70,7 +66,7 @@ option                MSDOSFS         # MS-DOS filesystem
 #
 # Compatability options for various existing systems
 #
-#option                "COMPAT_10"     # compatability with older NetBSD release
+option         COMPAT_12
 #option                COMPAT_SUNOS    # Support to run Sun (m68k) executables
 #option                "TCP_COMPAT_42" # Use 4.2 BSD style TCP
 option         "COMPAT_NOMID"  # allow nonvalid machine id executables
@@ -95,7 +91,6 @@ option                "NKMEMCLUSTERS=256"     # Size of kernel malloc area
 #
 # Misc. debuging options
 #
-option         PANICWAIT       # Require keystroke to dump/reboot
 option         DEBUG           # Add debugging statements
 option         DDB             # Kernel debugger
 #option                SYSCALL_DEBUG   # debug all syscalls.
@@ -156,8 +151,10 @@ scsibus*   at drsc0
 # will configure to the next available sd unit number
 sd*    at scsibus? target ? lun ?      # scsi disks
 st*    at scsibus? target ? lun ?      # scsi tapes
-ss*    at scsibus? target ? lun ?      # scsi scanner
 cd*    at scsibus? target ? lun ?      # scsi cd's
+ss*    at scsibus? target ? lun ?      # scsi scanner
+ch*    at scsibus? target ? lun ?      # scsi autochangers
+uk*    at scsibus? target ? lun ?      # scsi unknown
 
 pseudo-device  pty 16                  # pseudo terminals
 pseudo-device  loop                    # network loopback
index 28c51c2..4a1d723 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: FILIPPA,v 1.13 1997/01/04 12:45:45 niklas Exp $
+#      $OpenBSD: FILIPPA,v 1.14 1997/01/16 09:23:36 niklas Exp $
 
 #
 # Niklas' AMIGA with ISA support
@@ -18,8 +18,8 @@ option                FPSP            # MC68040 floating point support
 #option                "M68020"        # support for 020/851
 option         FPCOPROC        # Support for MC6888[12] (Required)
 
-option         SWAPPAGER       # Pager for processes (Required)
-option         DEVPAGER        # Pager for devices (Required)
+option         SWAPPAGER
+option         DEVPAGER
 
 #
 # Networking option
index 3240272..fbf5e42 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: GENERIC,v 1.17 1997/01/05 02:08:05 niklas Exp $
-#      $NetBSD: GENERIC,v 1.57.4.4 1996/09/06 00:34:18 jtc Exp $
+#      $OpenBSD: GENERIC,v 1.18 1997/01/16 09:23:37 niklas Exp $
+#      $NetBSD: GENERIC,v 1.67 1997/01/07 11:35:04 mrg Exp $
 
 #
 # GENERIC AMIGA
@@ -52,13 +52,14 @@ option              "NKMEMCLUSTERS=256"     # Size of kernel malloc area
 #option                DEBUG           # Add debugging statements
 #option                SYSCALL_DEBUG   # debug all syscalls.
 #option                SCSIDEBUG       # Add SCSI debugging statements
-#option                KGDB            # Kernel debugger (KGDB) support
 #option                PANICBUTTON     # Forced crash via keypress (???)
 
 #
 # Amiga specific options
 #
 option         MACHINE_NONCONTIG # Non-contiguous memory support
+# ATTENTION: There is NO WARRANTY AT ALL that the sync will be complete
+# before the 10 secondinterval ends, or that KBDRESET does work at all.
 #option                KBDRESET        # sync on Ctrl-Amiga-Amiga
 
 # These options improve performance with the built-in serial port
@@ -158,7 +159,8 @@ idesc0              at mainbus0             # A4000 & A1200 IDE
 afsc0          at zbus0                # A4091 scsi
 aftsc0         at mainbus0             # A4000T scsi
 flsc0          at zbus0                # FastlaneZ3 scsi
-bzsc0          at zbus0                # Blizzard 1230 scsi
+bzsc0          at zbus0                # Blizzard 1230 I,II scsi 
+bztzsc0                at zbus0                # Blizzard 1230 IV / 1260 / 2060
 empsc0         at zbus0                # Emplant
 drsc0          at mainbus0             # DraCo scsi
 
@@ -177,6 +179,7 @@ scsibus*    at afsc0
 scsibus*       at aftsc0
 scsibus*       at flsc0
 scsibus*       at bzsc0
+scsibus*       at bztzsc0
 scsibus*       at empsc0
 scsibus*       at drsc0
 
@@ -185,9 +188,9 @@ scsibus*    at drsc0
 sd*    at scsibus? target ? lun ?      # scsi disks
 st*    at scsibus? target ? lun ?      # scsi tapes
 cd*    at scsibus? target ? lun ?      # scsi cd's
-ch*    at scsibus? target ? lun ?      # scsi cd changers
 ss*    at scsibus? target ? lun ?      # scsi scanners
-uk*    at scsibus? target ? lun ?      # unknown scsi
+ch*    at scsibus? target ? lun ?      # scsi autochangers
+uk*    at scsibus? target ? lun ?      # scsi unknown
 
 ggbus* at zbus0                        # Goldengate bridge
 isa*   at ggbus?
index fe2384e..7f3194d 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: Makefile.amiga,v 1.16 1996/08/19 00:15:51 niklas Exp $
-#      $NetBSD: Makefile.amiga,v 1.45 1996/05/16 17:07:08 is Exp $
+#      $OpenBSD: Makefile.amiga,v 1.17 1997/01/16 09:23:38 niklas Exp $
+#      $NetBSD: Makefile.amiga,v 1.52 1996/12/01 12:10:07 veego Exp $
 
 # Makefile for OpenBSD
 #
 # DEBUG is set to -g if debugging.
 # PROF is set to -pg if profiling.
 
-AS?=   as
 CC?=   cc
-CPP?=  cpp
 LD?=   ld
-STRIP?=        strip -d
+MKDEP?=        mkdep
+STRIP?=        strip
 TOUCH?=        touch -f -c
+COPTS?=        -O2
 
 # source tree is located via $S relative to the compilation directory
-S=     ../../../..
-AMIGA= ../..
+.ifndef S
+S!=    cd ../../../..; pwd
+.endif
+AMIGA= $S/arch/amiga
 
-INCLUDES=      -I. -I$S/arch -I$S
-CPPFLAGS=      ${INCLUDES} ${IDENT} -D_KERNEL -Dmc68020 -Damiga
+INCLUDES=      -I. -I$S/arch -I$S -nostdinc
+CPPFLAGS=      ${INCLUDES} ${IDENT} ${PARAM} -D_KERNEL -Dmc68020 -Damiga
 
-CDIAGFLAGS=    -Werror -Wall -Wstrict-prototypes -Wno-uninitialized \
+CWARNFLAGS=    -Werror -Wall -Wstrict-prototypes -Wno-uninitialized \
                -Wno-format
 
 .if empty(IDENT:M-DM68060)
-CMACHFLAGS=    -m68020 -msoft-float
+CMACHFLAGS=    -m68020
 .else
-CMACHFLAGS=    -m68060 -Wa,-m68030 -msoft-float
+CMACHFLAGS=    -m68060 -Wa,-m68030
 .endif
+CMACHFLAGS+=   -msoft-float
 
-CFLAGS=                ${DEBUG} -O2 ${CDIAGFLAGS} ${CMACHFLAGS} ${COPTS}
+CFLAGS=                ${DEBUG} ${CWARNFLAGS} ${COPTS} ${CMACHFLAGS}
 AFLAGS=                -x assembler-with-cpp -traditional-cpp -D_LOCORE
 LINKFLAGS=     -n -Ttext 0 -e start
+STRIPFLAGS=    -d
+
+HOSTCC?=       ${CC}
+HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//}
+HOSTED_CFLAGS= ${CFLAGS}
 
 ### find out what to use for libkern
 .include "$S/lib/libkern/Makefile.inc"
@@ -71,14 +79,14 @@ LIBCOMPAT=  ${COMPATLIB_PROF}
 ### for the Motorola 68060 Software Support Package
 .include "$S/arch/m68k/060sp/Makefile.inc"
 
-# compile rules: rules are named ${TYPE}_${SUFFIX}${CONFIG_DEP}
-# where TYPE is NORMAL, DRIVER, or PROFILE}; SUFFIX is the file suffix,
-# capitalized (e.g. C for a .c file), and CONFIG_DEP is _C if the file
-# is marked as config-dependent.
+# compile rules: rules are named ${TYPE}_${SUFFIX} where TYPE is NORMAL or
+# HOSTED}, and SUFFIX is the file suffix, capitalized (e.g. C for a .c file).
 
 NORMAL_C=      ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
 NORMAL_C_C=    ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
 
+HOSTED_C=      ${HOSTCC} ${HOSTED_CFLAGS} ${HOSTED_CPPFLAGS} -c $<
+
 DRIVER_C=      ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
 DRIVER_C_C=    ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
 
@@ -115,9 +123,9 @@ DEBUG?=
 LINKFLAGS+=    -X
 SYSTEM_LD_TAIL+=; \
                echo cp $@ $@.gdb; rm -f $@.gdb; cp $@ $@.gdb; \
-               echo ${STRIP} $@; ${STRIP} $@
+               echo ${STRIP} ${STRIPFLAGS} $@; ${STRIP} ${STRIPFLAGS} $@
 .else
-LINKFLAGS+=    -x
+LINKFLAGS+=    -S
 .endif
 
 %LOAD
@@ -126,17 +134,17 @@ assym.h: genassym
        ./genassym >assym.h
 
 genassym: genassym.o
-       ${CC} -o $@ genassym.o
+       ${HOSTCC} -o $@ genassym.o
 
 genassym.o: ${AMIGA}/amiga/genassym.c
-       ${NORMAL_C_C}
+       ${HOSTED_C}
 
 param.c: $S/conf/param.c
        rm -f param.c
        cp $S/conf/param.c .
 
 param.o: param.c Makefile
-       ${NORMAL_C_C}
+       ${NORMAL_C}
 
 ioconf.o: ioconf.c
        ${NORMAL_C}
@@ -151,7 +159,7 @@ clean::
            [Ee]rrs linterrs makelinks genassym genassym.o assym.h
 
 lint:
-       @lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \
+       @lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \
            ${AMIGA}/amiga/Locore.c ${CFILES} ${AMIGA}/amiga/swapgeneric.c \
            ioconf.c param.c | \
            grep -v 'static function .* unused'
@@ -171,10 +179,11 @@ SRCS=     ${AMIGA}/amiga/locore.s \
        param.c ioconf.c ${CFILES} ${SFILES}
 depend:: .depend
 .depend: ${SRCS} assym.h param.c
-       mkdep ${AFLAGS} ${CPPFLAGS} ${AMIGA}/amiga/locore.s
-       mkdep -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
-       mkdep -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
-       mkdep -a ${CFLAGS} ${CPPFLAGS} ${PARAM} ${AMIGA}/amiga/genassym.c
+       ${MKDEP} ${AFLAGS} ${CPPFLAGS} ${AMIGA}/amiga/locore.s
+       ${MKDEP} -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
+       ${MKDEP} -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
+       ${MKDEP} -a ${HOSTED_CFLAGS} ${HOSTED_CPPFLAGS} \
+           ${AMIGA}/amiga/genassym.c
 
 
 # depend on root or device configuration
index f32d976..505a588 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: files.amiga,v 1.18 1996/08/19 06:57:02 niklas Exp $
-#      $NetBSD: files.amiga,v 1.48 1996/05/19 21:04:50 veego Exp $
+#      $OpenBSD: files.amiga,v 1.19 1997/01/16 09:23:39 niklas Exp $
+#      $NetBSD: files.amiga,v 1.51 1996/12/16 16:17:31 is Exp $
 
 # maxpartitions must be first item in files.${ARCH}
 maxpartitions 16                       # NOTE THAT AMIGA IS SPECIAL!
@@ -160,6 +160,11 @@ device     mfcp
 attach mfcp at mfc
 file   arch/amiga/dev/mfc.c            mfcs | mfcp needs-count
 
+# DraCo internal com port
+device drcom: tty
+attach drcom at mainbus
+file   arch/amiga/dev/drcom.c          drcom needs-count
+  
 include "../../../scsi/files.scsi"
 
 # wd 33c93 controllers
@@ -251,11 +256,16 @@ device    flsc: scsi, sfas
 attach flsc at zbus
 file   arch/amiga/dev/flsc.c           flsc needs-flag
 
-# Blizzard1230
+# Blizzard1230-I,II
 device bzsc: scsi, sfas
 attach bzsc at zbus
 file   arch/amiga/dev/bzsc.c           bzsc needs-flag
 
+# Blizzard2060 scsi
+device bztzsc: scsi, sfas
+attach bztzsc at zbus
+file   arch/amiga/dev/bztzsc.c         bztzsc needs-flag
+
 # Amiga 4000/1200 IDE masquerading as SCSI
 device idesc: scsi
 attach idesc at mainbus
index 8840cf9..e109d21 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: std.amiga,v 1.3 1996/05/29 10:14:46 niklas Exp $
-#      $NetBSD: std.amiga,v 1.8 1996/05/09 20:31:03 is Exp $
+#      $OpenBSD: std.amiga,v 1.4 1997/01/16 09:23:40 niklas Exp $
+#      $NetBSD: std.amiga,v 1.10 1996/12/20 19:15:06 veego Exp $
 
 # standard amiga information
 
@@ -15,3 +15,6 @@ ms*   at mainbus0
 fdc0   at mainbus0
 fd*    at fdc0 unit ?
 zbus0  at mainbus0
+
+#options       SWAPPAGER       # paging
+#options       DEVPAGER        # mmap() of devices
index a82c288..8a10310 100644 (file)
@@ -1,7 +1,7 @@
-#      $OpenBSD: std.draco,v 1.2 1996/10/04 15:05:40 niklas Exp $
-#      $NetBSD: std.draco,v 1.1 1996/05/09 20:31:04 is Exp $
+#      $OpenBSD: std.draco,v 1.3 1997/01/16 09:23:41 niklas Exp $
+#      $NetBSD: std.draco,v 1.2 1996/12/20 19:15:07 veego Exp $
 
-# standard amiga information
+# standard DraCo information
 
 machine amiga m68k
 
@@ -10,3 +10,6 @@ mainbus0      at root
 clock0 at mainbus0
 kbd0   at mainbus0
 zbus0  at mainbus0
+
+#options       SWAPPAGER       # paging
+#options       DEVPAGER        # mmap() of devices
index d139aa8..5fadc11 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: afsc.c,v 1.6 1996/11/23 21:45:05 kstailey Exp $       */
-/*     $NetBSD: afsc.c,v 1.14 1996/04/21 21:10:48 veego Exp $  */
+/*     $OpenBSD: afsc.c,v 1.7 1997/01/16 09:23:42 niklas Exp $ */
+/*     $NetBSD: afsc.c,v 1.20 1996/12/23 09:09:49 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index aa1dd49..f3e698a 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: ahsc.c,v 1.4 1996/11/23 21:45:05 kstailey Exp $       */
-/*     $NetBSD: ahsc.c,v 1.12 1996/04/21 21:10:49 veego Exp $  */
+/*     $OpenBSD: ahsc.c,v 1.5 1997/01/16 09:23:43 niklas Exp $ */
+/*     $NetBSD: ahsc.c,v 1.18 1996/12/23 09:09:51 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index 81bcab6..63ec2ff 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: ahscreg.h,v 1.3 1997/01/16 09:23:44 niklas Exp $      */
 /*     $NetBSD: ahscreg.h,v 1.2 1994/10/26 02:02:46 cgd Exp $  */
 
 /*
index fbc439a..44e22e3 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: atzsc.c,v 1.4 1996/11/23 21:45:06 kstailey Exp $      */
-/*     $NetBSD: atzsc.c,v 1.16 1996/04/21 21:10:51 veego Exp $ */
+/*     $OpenBSD: atzsc.c,v 1.5 1997/01/16 09:23:45 niklas Exp $        */
+/*     $NetBSD: atzsc.c,v 1.22 1996/12/23 09:09:52 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index 13666b4..4fcfc54 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: atzscreg.h,v 1.2 1997/01/16 09:23:46 niklas Exp $     */
 /*     $NetBSD: atzscreg.h,v 1.2 1994/10/26 02:02:49 cgd Exp $ */
 
 /*
index 997e96a..d1d0311 100644 (file)
@@ -1,6 +1,6 @@
-/*     $OpenBSD: bzsc.c,v 1.4 1996/11/23 21:45:06 kstailey Exp $       */
+/*     $OpenBSD: bzsc.c,v 1.5 1997/01/16 09:23:48 niklas Exp $ */
 
-/*     $NetBSD: bzsc.c,v 1.7 1996/04/21 21:10:52 veego Exp $   */
+/*     $NetBSD: bzsc.c,v 1.14 1996/12/23 09:09:53 veego Exp $  */
 
 /*
  * Copyright (c) 1995 Daniel Widenfalk
@@ -59,7 +59,7 @@
 #include <amiga/dev/bzscreg.h>
 #include <amiga/dev/bzscvar.h>
 
-int  bzscprint  __P((void *auxp, const char *)); 
+int  bzscprint  __P((void *auxp, const char *));
 void bzscattach __P((struct device *, struct device *, void *));
 int  bzscmatch  __P((struct device *, void *, void *));
 
@@ -104,15 +104,26 @@ bzscmatch(pdp, match, auxp)
        void *match, *auxp;
 {
        struct zbus_args *zap;
+       vu_char *ta;
 
        if (!is_a1200())
                return(0);
 
        zap = auxp;
-       if (zap->manid == 0x2140 && zap->prodid == 11)
-               return(1);
+       if (zap->manid != 0x2140 || zap->prodid != 11)
+               return(0);
+
+       ta = (vu_char *)(((char *)zap->va)+0x10010);
+       if (badbaddr((caddr_t)ta))
+               return(0);
 
-       return(0);
+       *ta = 0;
+       *ta = 1;
+       DELAY(5);
+       if (*ta != 1)
+               return(0);
+
+       return(1);
 }
 
 void
@@ -336,7 +347,7 @@ do { chain[n].ptr = (p); chain[n].len = (l); chain[n++].flg = (f); } while(0)
        if (l < 512)
                set_link(n, (vm_offset_t)p, l, SFAS_CHAIN_BUMP);
        else if (
-#ifdef M68040
+#if defined(M68040) || defined(M68060)
                 ((mmutype == MMU_68040) && ((vm_offset_t)p >= 0xFFFC0000)) &&
 #endif
                 ((vm_offset_t)p >= 0xFF000000)) {
diff --git a/sys/arch/amiga/dev/bztzsc.c b/sys/arch/amiga/dev/bztzsc.c
new file mode 100644 (file)
index 0000000..7c18b0b
--- /dev/null
@@ -0,0 +1,429 @@
+/*     $OpenBSD: bztzsc.c,v 1.1 1997/01/16 09:23:49 niklas Exp $       */
+/*     $NetBSD: bztzsc.c,v 1.2 1996/12/23 09:09:54 veego Exp $ */
+
+/*
+ * Copyright (c) 1996 Ignatios Souvatzis
+ * Copyright (c) 1982, 1990 The Regents of the University of California.
+ * 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 contains software written by Ignatios Souvatzis for
+ *     the NetBSD project.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
+ *
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <scsi/scsi_all.h>
+#include <scsi/scsiconf.h>
+#include <vm/vm.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+#include <machine/pmap.h>
+#include <amiga/amiga/custom.h>
+#include <amiga/amiga/cc.h>
+#include <amiga/amiga/device.h>
+#include <amiga/amiga/isr.h>
+#include <amiga/dev/sfasreg.h>
+#include <amiga/dev/sfasvar.h>
+#include <amiga/dev/zbusvar.h>
+#include <amiga/dev/bztzscreg.h>
+#include <amiga/dev/bztzscvar.h>
+
+int  bztzscprint  __P((void *auxp, const char *));
+void bztzscattach __P((struct device *, struct device *, void *));
+int  bztzscmatch  __P((struct device *, void *, void *));
+
+struct scsi_adapter bztzsc_scsiswitch = {
+       sfas_scsicmd,
+       sfas_minphys,
+       0,                      /* no lun support */
+       0,                      /* no lun support */
+};
+
+struct scsi_device bztzsc_scsidev = {
+       NULL,           /* use default error handler */
+       NULL,           /* do not have a start functio */
+       NULL,           /* have no async handler */
+       NULL,           /* Use default done routine */
+};
+
+struct cfattach bztzsc_ca = {
+       sizeof(struct bztzsc_softc), bztzscmatch, bztzscattach
+};
+
+struct cfdriver bztzsc_cd = {
+       NULL, "bztzsc", DV_DULL, NULL, 0
+};
+
+int bztzsc_intr                 __P((void *));
+void bztzsc_set_dma_tc  __P((struct sfas_softc *sc, unsigned int len));
+int bztzsc_setup_dma    __P((struct sfas_softc *sc, vm_offset_t ptr, int len,
+                             int mode));
+int bztzsc_build_dma_chain __P((struct sfas_softc *sc,
+                             struct sfas_dma_chain *chain, void *p, int l));
+int bztzsc_need_bump    __P((struct sfas_softc *sc, vm_offset_t ptr, int len));
+void bztzsc_led                 __P((struct sfas_softc *sc, int mode));
+
+/*
+ * If we are an Phase 5 Devices Blizzard-2060 SCSI option:
+ */
+int
+bztzscmatch(pdp, cfp, auxp)
+       struct device   *pdp;
+       void            *cfp;
+       void            *auxp;
+{
+       struct zbus_args *zap;
+       volatile u_int8_t *ta;
+
+       zap = auxp;
+
+       if (zap->manid != 0x2140)       /* Phase V ? */
+               return(0);
+
+       
+       if (zap->prodid != 24)          /* is it B2060? */
+               return 0;
+
+               ta = (vu_char *)(((char *)zap->va) + 0x1ff00 + 0x20);
+
+       if (badbaddr((caddr_t)ta))
+               return(0);
+                               
+       *ta = 0;
+       *ta = 1;
+       DELAY(5);
+       if (*ta != 1)
+               return(0);
+
+       return(1);
+}
+
+u_int32_t bztzsc_flags = 0;
+
+void
+bztzscattach(pdp, dp, auxp)
+       struct device   *pdp;
+       struct device   *dp;
+       void            *auxp;
+{
+       struct bztzsc_softc *sc;
+       struct zbus_args  *zap;
+       bztzsc_regmap_p    rp;
+       vu_char           *fas;
+
+       zap = auxp;
+
+       fas = &((vu_char *)zap->va)[0x1ff00];
+
+       sc = (struct bztzsc_softc *)dp;
+       rp = &sc->sc_regmap;
+
+       rp->FAS216.sfas_tc_low  = &fas[0x00];
+       rp->FAS216.sfas_tc_mid  = &fas[0x04];
+       rp->FAS216.sfas_fifo    = &fas[0x08];
+       rp->FAS216.sfas_command = &fas[0x0C];
+       rp->FAS216.sfas_dest_id = &fas[0x10];
+       rp->FAS216.sfas_timeout = &fas[0x14];
+       rp->FAS216.sfas_syncper = &fas[0x18];
+       rp->FAS216.sfas_syncoff = &fas[0x1C];
+       rp->FAS216.sfas_config1 = &fas[0x20];
+       rp->FAS216.sfas_clkconv = &fas[0x24];
+       rp->FAS216.sfas_test    = &fas[0x28];
+       rp->FAS216.sfas_config2 = &fas[0x2C];
+       rp->FAS216.sfas_config3 = &fas[0x30];
+       rp->FAS216.sfas_tc_high = &fas[0x38];
+       rp->FAS216.sfas_fifo_bot = &fas[0x3C];
+
+       rp->hardbits            = &fas[0xe0];
+       rp->addrport            = &fas[0xf0];
+
+       sc->sc_softc.sc_fas     = (sfas_regmap_p)rp;
+
+       sc->sc_softc.sc_led     = bztzsc_led;
+
+       sc->sc_softc.sc_setup_dma       = bztzsc_setup_dma;
+       sc->sc_softc.sc_build_dma_chain = bztzsc_build_dma_chain;
+       sc->sc_softc.sc_need_bump       = bztzsc_need_bump;
+
+       sc->sc_softc.sc_clock_freq   = 40;   /* Phase5 SCSI all run at 40MHz */
+       sc->sc_softc.sc_timeout      = 250;  /* Set default timeout to 250ms */
+
+       sc->sc_softc.sc_config_flags = bztzsc_flags;    /* for the moment */
+
+       sc->sc_softc.sc_host_id      = 7;    /* Should check the jumpers */
+
+       sc->sc_softc.sc_bump_sz = NBPG; /* XXX should be the VM pagesize */
+       sc->sc_softc.sc_bump_pa = 0x0;
+
+       sfasinitialize((struct sfas_softc *)sc);
+
+       sc->sc_softc.sc_link.adapter_softc  = sc;
+       sc->sc_softc.sc_link.adapter_target = sc->sc_softc.sc_host_id;
+       sc->sc_softc.sc_link.adapter        = &bztzsc_scsiswitch;
+       sc->sc_softc.sc_link.device         = &bztzsc_scsidev;
+       sc->sc_softc.sc_link.openings       = 1;
+
+       sc->sc_softc.sc_isr.isr_intr = bztzsc_intr;
+       sc->sc_softc.sc_isr.isr_arg  = &sc->sc_softc;
+       sc->sc_softc.sc_isr.isr_ipl  = 2;
+       add_isr(&sc->sc_softc.sc_isr);
+
+/* We don't want interrupt until we're initialized! */
+
+       printf("\n");
+
+/* attach all scsi units on us */
+       config_found(dp, &sc->sc_softc.sc_link, bztzscprint);
+}
+
+/* print diag if pnp is NULL else just extra */
+int
+bztzscprint(auxp, pnp)
+       void *auxp;
+       const char *pnp;
+{
+       if (pnp == NULL)
+               return(UNCONF);
+
+       return(QUIET);
+}
+
+int
+bztzsc_intr(arg)
+       void *arg;
+{
+       struct sfas_softc *dev = arg;
+       bztzsc_regmap_p       rp;
+       int                   quickints;
+
+       rp = (bztzsc_regmap_p)dev->sc_fas;
+
+       if (*rp->FAS216.sfas_status & SFAS_STAT_INTERRUPT_PENDING) {
+               quickints = 16;
+               do {
+                       dev->sc_status = *rp->FAS216.sfas_status;
+                       dev->sc_interrupt = *rp->FAS216.sfas_interrupt;
+         
+                       if (dev->sc_interrupt & SFAS_INT_RESELECTED) {
+                               dev->sc_resel[0] = *rp->FAS216.sfas_fifo;
+                               dev->sc_resel[1] = *rp->FAS216.sfas_fifo;
+                       }
+                       sfasintr(dev);
+
+               } while((*rp->FAS216.sfas_status & SFAS_STAT_INTERRUPT_PENDING)
+                       && --quickints);
+
+               return(1);
+       } 
+       return(0);
+}
+
+/* Set DMA transfer counter */
+void
+bztzsc_set_dma_tc(sc, len)
+       struct sfas_softc *sc;
+       unsigned int      len;
+{
+       *sc->sc_fas->sfas_tc_low  = len; len >>= 8;
+       *sc->sc_fas->sfas_tc_mid  = len; len >>= 8;
+       *sc->sc_fas->sfas_tc_high = len;
+}
+
+/* Initialize DMA for transfer */
+int
+bztzsc_setup_dma(sc, ptr, len, mode)
+       struct sfas_softc *sc;
+       vm_offset_t       ptr;
+       int               len;
+       int               mode;
+{
+       int             retval;
+       u_int32_t       d;
+       bztzsc_regmap_p    rp;
+
+       retval = 0;
+
+       switch(mode) {
+
+       case SFAS_DMA_READ:
+       case SFAS_DMA_WRITE:
+
+               rp = (bztzsc_regmap_p)sc->sc_fas;
+
+               d = (u_int32_t)ptr;
+               d >>= 1;
+
+               if (mode == SFAS_DMA_WRITE)
+                       d |= (1L << 31);
+
+               rp->addrport[12] = (u_int8_t)d;
+               __asm __volatile("nop");
+
+               d >>= 8;
+               rp->addrport[8] = (u_int8_t)d;
+               __asm __volatile("nop");
+
+               d >>= 8;
+               rp->addrport[4] = (u_int8_t)d;
+               __asm __volatile("nop");
+
+               d >>= 8;
+               rp->addrport[0] = (u_int8_t)d;
+               __asm __volatile("nop");
+
+               bztzsc_set_dma_tc(sc, len);
+               break;
+
+       case SFAS_DMA_CLEAR:
+       default:
+               retval = (*sc->sc_fas->sfas_tc_high << 16) |
+                        (*sc->sc_fas->sfas_tc_mid  <<  8) |
+                         *sc->sc_fas->sfas_tc_low;
+
+               bztzsc_set_dma_tc(sc, 0);
+               break;
+       }
+
+       return(retval);
+}
+
+/* Check if address and len is ok for DMA transfer */
+int
+bztzsc_need_bump(sc, ptr, len)
+       struct sfas_softc *sc;
+       vm_offset_t       ptr;
+       int               len;
+{
+       int     p;
+
+       p = (int)ptr & 0x03;
+
+       if (p) {
+               p = 4-p;
+           
+               if (len < 256)
+                       p = len;
+       }
+       return(p);
+}
+
+/* Interrupt driven routines */
+/* XXX some of this is voodoo might be remnants intended for the Fastlane. */
+int
+bztzsc_build_dma_chain(sc, chain, p, l)
+       struct sfas_softc       *sc;
+       struct sfas_dma_chain   *chain;
+       void                    *p;
+       int                      l;
+{
+       vm_offset_t  pa, lastpa;
+       char        *ptr;
+       int          len, prelen, max_t, n;
+
+       if (l == 0)
+               return(0);
+
+#define set_link(n, p, l, f)\
+do { chain[n].ptr = (p); chain[n].len = (l); chain[n++].flg = (f); } while(0)
+
+       n = 0;
+
+       if (l < 512)
+               set_link(n, (vm_offset_t)p, l, SFAS_CHAIN_BUMP);
+       else if ((p >= (void *)0xFF000000)
+#if defined(M68040) || defined(M68060)
+                && ((mmutype == MMU_68040) && (p >= (void *)0xFFFC0000))
+#endif
+                ) {
+               while(l != 0) {
+                       len = ((l > sc->sc_bump_sz) ? sc->sc_bump_sz : l);
+         
+                       set_link(n, (vm_offset_t)p, len, SFAS_CHAIN_BUMP);
+         
+                       p += len;
+                       l -= len;
+               }
+       } else {
+               ptr = p;
+               len = l;
+
+               pa = kvtop(ptr);
+               prelen = ((int)ptr & 0x03);
+
+               if (prelen) {
+                       prelen = 4-prelen;
+                       set_link(n, (vm_offset_t)ptr, prelen, SFAS_CHAIN_BUMP);
+                       ptr += prelen;
+                       len -= prelen;
+               }
+
+               lastpa = 0;
+               while(len > 3) {
+                       pa = kvtop(ptr);
+                       max_t = NBPG - (pa & PGOFSET);
+                       if (max_t > len)
+                         max_t = len;
+
+                       max_t &= ~3;
+
+                       if (lastpa == pa)
+                               sc->sc_chain[n-1].len += max_t;
+                       else
+                               set_link(n, pa, max_t, SFAS_CHAIN_DMA);
+         
+                       lastpa = pa+max_t;
+         
+                       ptr += max_t;
+                       len -= max_t;
+               }
+      
+               if (len)
+                       set_link(n, (vm_offset_t)ptr, len, SFAS_CHAIN_BUMP);
+       }
+
+       return(n);
+}
+
+/* real one for 2060 */
+void
+bztzsc_led(sc, mode)
+       struct sfas_softc *sc;
+       int               mode;
+{
+       bztzsc_regmap_p         rp;
+
+       rp = (bztzsc_regmap_p)sc->sc_fas;
+
+       if (mode)
+               *rp->hardbits = 0x00;   /* Led on, Int on */
+       else
+               *rp->hardbits = 0x02;   /* Led off, Int on */
+}
diff --git a/sys/arch/amiga/dev/bztzscreg.h b/sys/arch/amiga/dev/bztzscreg.h
new file mode 100644 (file)
index 0000000..ad05285
--- /dev/null
@@ -0,0 +1,55 @@
+/*     $OpenBSD: bztzscreg.h,v 1.1 1997/01/16 09:23:50 niklas Exp $    */
+/*     $NetBSD: bztzscreg.h,v 1.1 1996/12/16 16:17:29 is Exp $ */
+
+/*
+ * Copyright (c) 1996 Ignatios Souvatzis
+ * Copyright (c) 1995 Daniel Widenfalk
+ *
+ * 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 Daniel Widenfalk
+ *      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.
+ */
+
+/*
+ * Blizzard 2060 with FAS216 SCSI interface hardware 
+ * description.
+ */
+
+#ifndef _BZTZSCREG_H_
+#define _BZTZSCREG_H_
+
+#ifndef _SFASREG_H_
+#include <amiga/dev/sfasreg.h>
+#endif
+
+typedef struct bztzsc_regmap {
+       sfas_regmap_t   FAS216;
+       vu_char         *hardbits;
+       vu_char         *addrport;
+} bztzsc_regmap_t;
+
+typedef bztzsc_regmap_t *bztzsc_regmap_p;
+
+#endif
diff --git a/sys/arch/amiga/dev/bztzscvar.h b/sys/arch/amiga/dev/bztzscvar.h
new file mode 100644 (file)
index 0000000..b0222cc
--- /dev/null
@@ -0,0 +1,50 @@
+/*     $OpenBSD: bztzscvar.h,v 1.1 1997/01/16 09:23:51 niklas Exp $    */
+/*     $NetBSD: bztzscvar.h,v 1.1 1996/12/16 16:17:30 is Exp $ */
+
+/*
+ * Copyright (c) 1996 Ignatios Souvatzis
+ * Copyright (c) 1995 Daniel Widenfalk
+ *
+ * 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 Daniel Widenfalk
+ *      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.
+ */
+#ifndef _BZTZSCVAR_H_
+#define _BZTZSCVAR_H_
+
+#ifndef _SFASVAR_H_
+#include <amiga/dev/sfasvar.h>
+#endif
+
+#ifndef _BZTZSCREG_H_
+#include <amiga/dev/bztzscreg.h>
+#endif
+
+struct bztzsc_softc {
+       struct sfas_softc       sc_softc;
+       bztzsc_regmap_t         sc_regmap;
+};
+
+#endif /* _BZTZSCVAR_H_ */
index b69de85..6f8d075 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: clock.c,v 1.8 1996/06/04 13:28:39 niklas Exp $        */
-/*     $NetBSD: clock.c,v 1.15 1996/05/10 14:30:53 is Exp $    */
+/*     $OpenBSD: clock.c,v 1.9 1997/01/16 09:23:52 niklas Exp $        */
+/*     $NetBSD: clock.c,v 1.25 1997/01/02 20:59:42 is Exp $    */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -100,8 +100,8 @@ struct clockframe hardclock_frame;
 
 int clockmatch __P((struct device *, void *, void *));
 void clockattach __P((struct device *, struct device *, void *));
+void calibrate_delay __P((struct device *));
 void cpu_initclocks __P((void));
-void setmicspertick __P((void));
 int clockintr __P((void *));
 
 struct cfattach clock_ca = {
@@ -117,11 +117,7 @@ clockmatch(pdp, match, auxp)
        void *match, *auxp;
 {
 
-       if (matchname("clock", auxp)
-#ifdef DRACO
-           && (is_draco() < 4)
-#endif
-           )
+       if (matchname("clock", auxp))
                return(1);
        return(0);
 }
@@ -134,8 +130,11 @@ clockattach(pdp, dp, auxp)
        struct device *pdp, *dp;
        void *auxp;
 {
+       char *clockchip;
        unsigned short interval;
-       char cia;
+#ifdef DRACO
+       u_char dracorev;
+#endif
 
        if (eclockfreq == 0)
                eclockfreq = 715909;    /* guess NTSC */
@@ -143,17 +142,43 @@ clockattach(pdp, dp, auxp)
        CLK_INTERVAL = (eclockfreq / 100);
 
 #ifdef DRACO
-       if (is_draco()) {
+       dracorev = is_draco();
+       if (dracorev >= 4) {
+               CLK_INTERVAL = (eclockfreq / 700);
+               clockchip = "QuickLogic";
+       } else if (dracorev) {
                clockcia = (struct CIA *)CIAAbase;
-               cia = 'A';
+               clockchip = "CIA A";
        } else 
 #endif
        {
                clockcia = (struct CIA *)CIABbase;
-               cia = 'B';
+               clockchip = "CIA B";
        }
 
-       printf(": CIA %c system hz %d hardware hz %d\n", cia, hz, eclockfreq);
+       if (dp)
+               printf(": %s system hz %d hardware hz %d\n", clockchip, hz,
+#ifdef DRACO
+               dracorev >= 4 ? eclockfreq / 7 : eclockfreq);
+#else
+               eclockfreq);
+#endif
+
+#ifdef DRACO
+       if (dracorev >= 4) {
+               /* 
+                * can't preload anything beforehand, timer is free_running;
+                * but need this for delay calibration.
+                */
+
+               draco_ioct->io_timerlo = CLK_INTERVAL & 0xff;
+               draco_ioct->io_timerhi = CLK_INTERVAL >> 8;
+
+               calibrate_delay(dp);
+
+               return;
+       }
+#endif
 
        /*
         * stop timer A 
@@ -174,6 +199,13 @@ clockattach(pdp, dp, auxp)
         */
        clockcia->talo = interval & 0xff;
        clockcia->tahi = interval >> 8;
+
+       /*
+        * start timer A in continuous mode
+        */
+       clockcia->cra = (clockcia->cra & 0xc0) | 1;
+
+       calibrate_delay(dp);
 }
 
 #if defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
@@ -190,6 +222,65 @@ clockintr (arg)
 }
 #endif
 
+/*
+ * Calibrate delay loop.
+ * We use two iterations because we don't have enough bits to do a factor of
+ * 8 with better than 1%.
+ *
+ * XXX Note that we MUST stay below 1 tick if using clkread(), even for 
+ * underestimated values of delaydivisor. 
+ *
+ * XXX the "ns" below is only correct for a shift of 10 bits, and even then
+ * off by 2.4%
+ */
+
+void calibrate_delay(dp)
+       struct device *dp;
+{
+       unsigned long t1, t2;
+       extern u_int32_t delaydivisor;
+               /* XXX this should be defined elsewhere */
+
+       if (dp)
+               printf("Calibrating delay loop... "); 
+
+       do {
+               t1 = clkread();
+               delay(1024);
+               t2 = clkread();
+       } while (t2 <= t1);
+       t2 -= t1;
+       delaydivisor = (delaydivisor * t2 + 1023) >> 10;
+#ifdef DIAGNOSTIC
+       if (dp)
+               printf("\ndiff %ld us, new divisor %u/1024 us\n", t2,
+                   delaydivisor); 
+       do {
+               t1 = clkread();
+               delay(1024);
+               t2 = clkread();
+       } while (t2 <= t1);
+       t2 -= t1;
+       delaydivisor = (delaydivisor * t2 + 1023) >> 10;
+       if (dp)
+               printf("diff %ld us, new divisor %u/1024 us\n", t2,
+                   delaydivisor); 
+#endif
+       do {
+               t1 = clkread();
+               delay(1024);
+               t2 = clkread();
+       } while (t2 <= t1);
+       t2 -= t1;
+       delaydivisor = (delaydivisor * t2 + 1023) >> 10;
+#ifdef DIAGNOSTIC
+       if (dp)
+               printf("diff %ld us, new divisor ", t2);
+#endif
+       if (dp)
+               printf("%u/1024 us\n", delaydivisor); 
+}
+
 void
 cpu_initclocks()
 {
@@ -217,7 +308,7 @@ cpu_initclocks()
         * and globally enable interrupts for ciab
         */
 #ifdef DRACO
-       if (is_draco())         /* we use cia a on DraCo */
+       if (dracorev)           /* we use cia a on DraCo */
                *draco_intena |= DRIRQ_INT2;
        else
 #endif
@@ -238,184 +329,41 @@ setstatclockrate(hz)
 u_long
 clkread()
 {
-       u_char hi, hi2, lo;
        u_int interval;
-   
-       hi  = clockcia->tahi;
-       lo  = clockcia->talo;
-       hi2 = clockcia->tahi;
-       if (hi != hi2) {
-               lo = clockcia->talo;
-               hi = hi2;
-       }
-
-       interval = (CLK_INTERVAL - 1) - ((hi<<8) | lo);
-   
-       /*
-        * should read ICR and if there's an int pending, adjust interval.
-        * However, * since reading ICR clears the interrupt, we'd lose a
-        * hardclock int, and * this is not tolerable.
-        */
-
-       return((interval * tick) / CLK_INTERVAL);
-}
-
-u_int micspertick;
+       u_char hi, hi2, lo;
 
-/*
- * we set up as much of the CIAa as possible
- * as all access to chip memory are very slow.
- */
-void
-setmicspertick()
-{
 #ifdef DRACO
-       if (is_draco())
-               return; /* XXX */
-#endif
-       micspertick = (1000000ULL << 20) / 715909;
-
-       /*
-        * disable interrupts (just in case.)
-        */
-       ciaa.icr = 0x3;
-
-       /*
-        * stop both timers if not already
-        */
-       ciaa.cra &= ~1;
-       ciaa.crb &= ~1;
+       if (is_draco() >= 4) {
+               hi2 = draco_ioct->io_chiprev;   /* latch timer */
+               hi = draco_ioct->io_timerhi;
+               lo = draco_ioct->io_timerlo;
+               interval = ((hi<<8) | lo);
+               if (interval > CLK_INTERVAL)    /* timer underflow */
+                       interval = 65536 + CLK_INTERVAL - interval;
+               else
+                       interval = CLK_INTERVAL - interval;
 
-       /*
-        * set timer B in "count timer A underflows" mode
-        * set timer A in one-shot mode
-        */
-       ciaa.crb = (ciaa.crb & 0x80) | 0x48;
-       ciaa.cra = (ciaa.cra & 0xc0) | 0x08;
-}
-
-/*
- * this function assumes that on any entry beyond the first
- * the following condintions exist:
- * Interrupts for Timers A and B are disabled.
- * Timers A and B are stoped. 
- * Timers A and B are in one-shot mode with B counting timer A underflows
- *
- */
-void
-delay(mic)
-       u_int mic;
-{
-       u_int temp;
-
-#ifdef DRACO
-       if (is_draco()) {
-               DELAY(mic);
-               return;
-       }
+       } else
 #endif
-       if (micspertick == 0)
-               setmicspertick();
-
-       if (mic <= 1)
-               return;
-
-       /*
-        * basically this is going to do an integer
-        * usec / (1000000 / 715909) with no loss of
-        * precision
-        */
-       temp = mic >> 12;
-       asm("divul %3,%1:%0" : "=d" (temp) : "d" (mic >> 12), "0" (mic << 20),
-           "d" (micspertick));
-
-       if ((temp & 0xffff0000) > 0x10000) {
-               mic = (temp >> 16) - 1;
-               temp &= 0xffff;
-
-               /*
-                * set timer A in continous mode
-                */
-               ciaa.cra = (ciaa.cra & 0xc0) | 0x00;
-       
-               /*
-                * latch/load/start "counts of timer A underflows" in B
-                */
-               ciaa.tblo = mic & 0xff;
-               ciaa.tbhi = mic >> 8;
-               
-               /*
-                * timer A latches 0xffff
-                * and start it.
-                */
-               ciaa.talo = 0xff;
-               ciaa.tahi = 0xff;
-               ciaa.cra |= 1;
-
-               while (ciaa.crb & 1)
-                       ;
-
-               /* 
-                * stop timer A 
-                */
-               ciaa.cra &= ~1;
-
-               /*
-                * set timer A in one shot mode
-                */
-               ciaa.cra = (ciaa.cra & 0xc0) | 0x08;
-       } else if ((temp & 0xffff0000) == 0x10000) {
-               temp &= 0xffff;
-
+       {
+               hi  = clockcia->tahi;
+               lo  = clockcia->talo;
+               hi2 = clockcia->tahi;
+               if (hi != hi2) {
+                       lo = clockcia->talo;
+                       hi = hi2;
+               }
+
+               interval = (CLK_INTERVAL - 1) - ((hi<<8) | lo);
+   
                /*
-                * timer A is in one shot latch/load/start 1 full turn
+                * should read ICR and if there's an int pending, adjust
+                * interval. However, since reading ICR clears the interrupt,
+                * we'd lose a hardclock int, and this is not tolerable.
                 */
-               ciaa.talo = 0xff;
-               ciaa.tahi = 0xff;
-               while (ciaa.cra & 1)
-                       ;
        }
-       if (temp < 1)
-               return;
-
-       /*
-        * temp is now residual ammount, latch/load/start it.
-        */
-       ciaa.talo = temp & 0xff;
-       ciaa.tahi = temp >> 8;
-       while (ciaa.cra & 1)
-               ;
-}
 
-/*
- * Needs to be calibrated for use, its way off most of the time
- */
-void
-DELAY(mic)
-       u_int mic;
-{
-       u_long n;
-       short hpos;
-
-#ifdef DRACO
-       if (is_draco()) {
-               while (--mic > 0)
-                       n = *draco_intena;
-               return;
-       }
-#endif
-       /*
-        * this function uses HSync pulses as base units. The custom chips 
-        * display only deals with 31.6kHz/2 refresh, this gives us a
-        * resolution of 1/15800 s, which is ~63us (add some fuzz so we really
-        * wait awhile, even if using small timeouts)
-        */
-       n = mic/63 + 2;
-       do {
-               hpos = custom.vhposr & 0xff00;
-               while (hpos == (custom.vhposr & 0xff00))
-                       ;
-       } while (n--);
+       return((interval * tick) / CLK_INTERVAL);
 }
 
 #if notyet
@@ -1078,5 +1026,5 @@ a2settod(tim)
        rt->year2   = year2;
        rt->control2 &= ~A2CONTROL1_HOLD;
 
-  return 1;
+       return 1;
 }
index 498ca8c..26bb4bd 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: clockioctl.h,v 1.2 1997/01/16 09:23:53 niklas Exp $   */
 /*     $NetBSD: clockioctl.h,v 1.2 1994/10/26 02:02:54 cgd Exp $       */
 
 /*
index a27c513..3709cac 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: dmavar.h,v 1.2 1997/01/16 09:23:54 niklas Exp $       */
 /*     $NetBSD: dmavar.h,v 1.9 1995/03/28 18:14:51 jtc Exp $   */
 
 /*
diff --git a/sys/arch/amiga/dev/drcom.c b/sys/arch/amiga/dev/drcom.c
new file mode 100644 (file)
index 0000000..c4ed739
--- /dev/null
@@ -0,0 +1,1285 @@
+/*     $OpenBSD: drcom.c,v 1.1 1997/01/16 09:23:55 niklas Exp $        */
+/*     $NetBSD: drcom.c,v 1.2 1996/12/23 09:09:56 veego Exp $  */
+
+/*-
+ * Copyright (c) 1993, 1994, 1995, 1996
+ *     Charles M. Hannum.  All rights reserved.
+ * Copyright (c) 1991 The Regents of the University of California.
+ * 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 the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
+ *
+ *     @(#)drcom.c     7.5 (Berkeley) 5/16/91
+ */
+
+/*
+ * COM driver, based on HP dca driver
+ * uses National Semiconductor NS16450/NS16550AF UART
+ */
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/ioctl.h>
+#include <sys/select.h>
+#include <sys/tty.h>
+#include <sys/ttycom.h>
+#include <sys/proc.h>
+#include <sys/user.h>
+#include <sys/file.h>
+#include <sys/uio.h>
+#include <sys/kernel.h>
+#include <sys/syslog.h>
+#include <sys/types.h>
+#include <sys/device.h>
+
+#include <sys/conf.h>
+#include <machine/conf.h>
+
+#include <machine/cpu.h>
+
+#include <amiga/amiga/device.h>
+#include <amiga/amiga/drcustom.h>
+#include <amiga/amiga/isr.h>
+
+#include <amiga/dev/drisavar.h>
+#include <amiga/dev/drcomreg.h>
+#include <amiga/dev/drcomvar.h>
+
+#include <dev/ic/ns16550reg.h>
+
+#define        com_lcr com_cfcr
+
+#include "drcom.h"
+
+
+#define        COM_IBUFSIZE    (2 * 512)
+#define        COM_IHIGHWATER  ((3 * COM_IBUFSIZE) / 4)
+
+struct drcom_softc {
+       struct device sc_dev;
+       void *sc_ih;
+       struct tty *sc_tty;
+
+       int sc_overflows;
+       int sc_floods;
+       int sc_failures;
+       int sc_errors;
+
+       int sc_halt;
+
+       int sc_iobase;
+
+       bus_chipset_tag_t sc_bc;
+       bus_io_handle_t sc_ioh;
+
+       struct isr sc_isr;
+
+       u_char sc_hwflags;
+#define        COM_HW_NOIEN    0x01
+#define        COM_HW_FIFO     0x02
+#define        COM_HW_HAYESP   0x04
+#define        COM_HW_CONSOLE  0x40
+       u_char sc_swflags;
+#define        COM_SW_SOFTCAR  0x01
+#define        COM_SW_CLOCAL   0x02
+#define        COM_SW_CRTSCTS  0x04
+#define        COM_SW_MDMBUF   0x08
+       u_char sc_msr, sc_mcr, sc_lcr, sc_ier;
+       u_char sc_dtr;
+
+       u_char *sc_ibuf, *sc_ibufp, *sc_ibufhigh, *sc_ibufend;
+       u_char sc_ibufs[2][COM_IBUFSIZE];
+
+       u_char sc_iir;
+};
+
+void   drcomdiag               __P((void *));
+int    drcomspeed      __P((long));
+int    drcomparam      __P((struct tty *, struct termios *));
+void   drcomstart      __P((struct tty *));
+void   drcomsoft               __P((void *));
+int    drcomintr               __P((void *));
+
+struct consdev;
+void   drcomcnprobe    __P((struct consdev *));
+void   drcomcninit     __P((struct consdev *));
+int    drcomcngetc     __P((dev_t));
+void   drcomcnputc     __P((dev_t, int));
+void   drcomcnpollc    __P((dev_t, int));
+
+static u_char tiocm_xxx2mcr __P((int));
+
+/*
+ * XXX the following two cfattach structs should be different, and possibly
+ * XXX elsewhere.
+ */
+int drcommatch __P((struct device *, struct cfdata *, void *));
+void drcomattach __P((struct device *, struct device *, void *));
+
+struct cfattach drcom_ca = {
+       sizeof(struct drcom_softc), drcommatch, drcomattach
+};
+
+struct cfdriver drcom_cd = {
+       NULL, "drcom", DV_TTY
+};
+
+void drcominit __P((bus_chipset_tag_t, bus_io_handle_t, int));
+
+#ifdef COMCONSOLE
+int    drcomdefaultrate = CONSPEED;            /* XXX why set default? */
+#else
+int    drcomdefaultrate = 1200 /*TTYDEF_SPEED*/;
+#endif
+int    drcomconsaddr;
+int    drcomconsinit;
+int    drcomconsattached;
+bus_chipset_tag_t drcomconsbc;
+bus_io_handle_t drcomconsioh;
+tcflag_t drcomconscflag = TTYDEF_CFLAG;
+
+int    drcommajor;
+int    drcomsopen = 0;
+int    drcomevents = 0;
+
+#ifdef KGDB
+#include <machine/remote-sl.h>
+extern int kgdb_dev;
+extern int kgdb_rate;
+extern int kgdb_debug_init;
+#endif
+
+#define        COMUNIT(x)      (minor(x))
+
+/* Macros to clear/set/test flags. */
+#define        SET(t, f)       (t) |= (f)
+#define        CLR(t, f)       (t) &= ~(f)
+#define        ISSET(t, f)     ((t) & (f))
+
+int
+drcomspeed(speed)
+       long speed;
+{
+#define        divrnd(n, q)    (((n)*2/(q)+1)/2)       /* divide and round off */
+
+       int x, err;
+
+       if (speed == 0)
+               return 0;
+       if (speed < 0)
+               return -1;
+       x = divrnd((COM_FREQ / 16), speed);
+       if (x <= 0)
+               return -1;
+       err = divrnd((COM_FREQ / 16) * 1000, speed * x) - 1000;
+       if (err < 0)
+               err = -err;
+       if (err > COM_TOLERANCE)
+               return -1;
+       return x;
+
+#undef divrnd(n, q)
+}
+
+int
+drcommatch(parent, cfp, auxp)
+       struct device *parent;
+       struct cfdata *cfp;
+       void *auxp;
+{
+
+       /* Exactly two of us live on the DraCo */
+
+       if (is_draco() && matchname(auxp, "drcom") &&
+           (cfp->cf_unit >= 0) && (cfp->cf_unit < 2))
+               return 1;
+
+       return 0;
+}
+
+void
+drcomattach(parent, self, auxp)
+       struct device *parent, *self;
+       void *auxp;
+{
+       struct drcom_softc *sc = (void *)self;
+       int iobase;
+       bus_chipset_tag_t bc;
+       bus_io_handle_t ioh;
+
+       /*
+        * XXX should be broken out into functions for isa attach and
+        * XXX for drcommulti attach, with a helper function that contains
+        * XXX most of the interesting stuff.
+        */
+       sc->sc_hwflags = 0;
+       sc->sc_swflags = 0;
+
+       bc = 0;
+       iobase = self->dv_cfdata->cf_unit ? 0x2f8 : 0x3f8;
+
+       if (iobase != drcomconsaddr) {
+               (void)bus_io_map(bc, iobase, COM_NPORTS, &ioh);
+       } else {
+               ioh = drcomconsioh;
+       }
+
+       sc->sc_bc = bc;
+       sc->sc_ioh = ioh;
+       sc->sc_iobase = iobase;
+
+       if (iobase == drcomconsaddr) {
+               drcomconsattached = 1;
+
+               /* 
+                * Need to reset baud rate, etc. of next print so reset
+                * drcomconsinit.  Also make sure console is always "hardwired".
+                */
+               delay(1000);                    /* wait for output to finish */
+               drcomconsinit = 0;
+               SET(sc->sc_hwflags, COM_HW_CONSOLE);
+               SET(sc->sc_swflags, COM_SW_SOFTCAR);
+       }
+
+
+       /* look for a NS 16550AF UART with FIFOs */
+       bus_io_write_1(bc, ioh, com_fifo,
+           FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_14);
+       delay(100);
+       if (ISSET(bus_io_read_1(bc, ioh, com_iir), IIR_FIFO_MASK) == IIR_FIFO_MASK)
+               if (ISSET(bus_io_read_1(bc, ioh, com_fifo), FIFO_TRIGGER_14) == FIFO_TRIGGER_14) {
+                       SET(sc->sc_hwflags, COM_HW_FIFO);
+                       printf(": ns16550a, working fifo\n");
+               } else
+                       printf(": ns16550, broken fifo\n");
+       else
+               printf(": ns8250 or ns16450, no fifo\n");
+       bus_io_write_1(bc, ioh, com_fifo, 0);
+#ifdef COM_HAYESP
+       }
+#endif
+
+       if (amiga_ttyspl < (PSL_S|PSL_IPL5)) {
+               printf("%s: raising amiga_ttyspl from 0x%x to 0x%x\n",
+                   sc->sc_dev.dv_xname, amiga_ttyspl, PSL_S|PSL_IPL5);
+               amiga_ttyspl = PSL_S|PSL_IPL5;
+       }
+
+       /* disable interrupts */
+       (void)bus_io_read_1(bc, ioh, com_iir);
+       bus_io_write_1(bc, ioh, com_ier, 0);
+       bus_io_write_1(bc, ioh, com_mcr, 0);
+
+       sc->sc_isr.isr_intr = drcomintr;
+       sc->sc_isr.isr_arg = sc;
+       sc->sc_isr.isr_ipl = 5;
+       add_isr(&sc->sc_isr);
+
+#ifdef KGDB
+       if (kgdb_dev == makedev(drcommajor, unit)) {
+               if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
+                       kgdb_dev = -1;  /* can't debug over console port */
+               else {
+                       drcominit(bc, ioh, kgdb_rate);
+                       if (kgdb_debug_init) {
+                               /*
+                                * Print prefix of device name,
+                                * let kgdb_connect print the rest.
+                                */
+                               printf("%s: ", sc->sc_dev.dv_xname);
+                               kgdb_connect(1);
+                       } else
+                               printf("%s: kgdb enabled\n",
+                                   sc->sc_dev.dv_xname);
+               }
+       }
+#endif
+
+       /* XXX maybe move up some? */
+       if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
+               printf("%s: console\n", sc->sc_dev.dv_xname);
+}
+
+int
+drcomopen(dev, flag, mode, p)
+       dev_t dev;
+       int flag, mode;
+       struct proc *p;
+{
+       int unit = COMUNIT(dev);
+       struct drcom_softc *sc;
+       bus_chipset_tag_t bc;
+       bus_io_handle_t ioh;
+       struct tty *tp;
+       int s;
+       int error = 0;
+       if (unit >= drcom_cd.cd_ndevs)
+               return ENXIO;
+       sc = drcom_cd.cd_devs[unit];
+       if (!sc)
+               return ENXIO;
+
+       if (!sc->sc_tty) {
+               tp = sc->sc_tty = ttymalloc();
+               tty_attach(tp);
+       } else
+               tp = sc->sc_tty;
+
+       tp->t_oproc = drcomstart;
+       tp->t_param = drcomparam;
+       tp->t_dev = dev;
+       if (!ISSET(tp->t_state, TS_ISOPEN)) {
+               SET(tp->t_state, TS_WOPEN);
+               ttychars(tp);
+               tp->t_iflag = TTYDEF_IFLAG;
+               tp->t_oflag = TTYDEF_OFLAG;
+               if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
+                       tp->t_cflag = drcomconscflag;
+               else
+                       tp->t_cflag = TTYDEF_CFLAG;
+               if (ISSET(sc->sc_swflags, COM_SW_CLOCAL))
+                       SET(tp->t_cflag, CLOCAL);
+               if (ISSET(sc->sc_swflags, COM_SW_CRTSCTS))
+                       SET(tp->t_cflag, CRTSCTS);
+               if (ISSET(sc->sc_swflags, COM_SW_MDMBUF))
+                       SET(tp->t_cflag, MDMBUF);
+               tp->t_lflag = TTYDEF_LFLAG;
+               tp->t_ispeed = tp->t_ospeed = drcomdefaultrate;
+
+               s = spltty();
+
+               drcomparam(tp, &tp->t_termios);
+               ttsetwater(tp);
+
+               if (drcomsopen++ == 0)
+                       timeout(drcomsoft, NULL, 1);
+
+               sc->sc_ibufp = sc->sc_ibuf = sc->sc_ibufs[0];
+               sc->sc_ibufhigh = sc->sc_ibuf + COM_IHIGHWATER;
+               sc->sc_ibufend = sc->sc_ibuf + COM_IBUFSIZE;
+
+               bc = sc->sc_bc;
+               ioh = sc->sc_ioh;
+#ifdef COM_HAYESP
+               /* Setup the ESP board */
+               if (ISSET(sc->sc_hwflags, COM_HW_HAYESP)) {
+                       bus_io_handle_t hayespioh = sc->sc_hayespioh;
+
+                       bus_io_write_1(bc, ioh, com_fifo,
+                            FIFO_DMA_MODE|FIFO_ENABLE|
+                            FIFO_RCV_RST|FIFO_XMT_RST|FIFO_TRIGGER_8);
+
+                       /* Set 16550 drcompatibility mode */
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD1, HAYESP_SETMODE);
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2, 
+                            HAYESP_MODE_FIFO|HAYESP_MODE_RTS|
+                            HAYESP_MODE_SCALE);
+
+                       /* Set RTS/CTS flow control */
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD1, HAYESP_SETFLOWTYPE);
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2, HAYESP_FLOW_RTS);
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2, HAYESP_FLOW_CTS);
+
+                       /* Set flow control levels */
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD1, HAYESP_SETRXFLOW);
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2, 
+                            HAYESP_HIBYTE(HAYESP_RXHIWMARK));
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2,
+                            HAYESP_LOBYTE(HAYESP_RXHIWMARK));
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2,
+                            HAYESP_HIBYTE(HAYESP_RXLOWMARK));
+                       bus_io_write_1(bc, hayespioh, HAYESP_CMD2,
+                            HAYESP_LOBYTE(HAYESP_RXLOWMARK));
+               } else
+#endif
+               if (ISSET(sc->sc_hwflags, COM_HW_FIFO))
+                       /* Set the FIFO threshold based on the receive speed. */
+                       bus_io_write_1(bc, ioh, com_fifo,
+                           FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST |
+                           (tp->t_ispeed <= 1200 ? FIFO_TRIGGER_1 : FIFO_TRIGGER_8));
+               /* flush any pending I/O */
+               while (ISSET(bus_io_read_1(bc, ioh, com_lsr), LSR_RXRDY))
+                       (void) bus_io_read_1(bc, ioh, com_data);
+               /* you turn me on, baby */
+               sc->sc_mcr = MCR_DTR | MCR_RTS;
+               if (!ISSET(sc->sc_hwflags, COM_HW_NOIEN))
+                       SET(sc->sc_mcr, MCR_IENABLE);
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               sc->sc_ier = IER_ERXRDY | IER_ERLS | IER_EMSC;
+               bus_io_write_1(bc, ioh, com_ier, sc->sc_ier);
+
+               sc->sc_msr = bus_io_read_1(bc, ioh, com_msr);
+               if (ISSET(sc->sc_swflags, COM_SW_SOFTCAR) ||
+                   ISSET(sc->sc_msr, MSR_DCD) || ISSET(tp->t_cflag, MDMBUF))
+                       SET(tp->t_state, TS_CARR_ON);
+               else
+                       CLR(tp->t_state, TS_CARR_ON);
+       } else if (ISSET(tp->t_state, TS_XCLUDE) && p->p_ucred->cr_uid != 0)
+               return EBUSY;
+       else
+               s = spltty();
+
+       /* wait for carrier if necessary */
+       if (!ISSET(flag, O_NONBLOCK))
+               while (!ISSET(tp->t_cflag, CLOCAL) &&
+                   !ISSET(tp->t_state, TS_CARR_ON)) {
+                       SET(tp->t_state, TS_WOPEN);
+                       error = ttysleep(tp, &tp->t_rawq, TTIPRI | PCATCH,
+                           ttopen, 0);
+                       if (error) {
+                               /* XXX should turn off chip if we're the
+                                  only waiter */
+                               splx(s);
+                               return error;
+                       }
+               }
+       splx(s);
+
+       return (*linesw[tp->t_line].l_open)(dev, tp);
+}
+int
+drcomclose(dev, flag, mode, p)
+       dev_t dev;
+       int flag, mode;
+       struct proc *p;
+{
+       int unit = COMUNIT(dev);
+       struct drcom_softc *sc = drcom_cd.cd_devs[unit];
+       struct tty *tp = sc->sc_tty;
+       bus_chipset_tag_t bc = sc->sc_bc;
+       bus_io_handle_t ioh = sc->sc_ioh;
+       int s;
+
+       /* XXX This is for cons.c. */
+       if (!ISSET(tp->t_state, TS_ISOPEN))
+               return 0;
+
+       (*linesw[tp->t_line].l_close)(tp, flag);
+       s = spltty();
+       CLR(sc->sc_lcr, LCR_SBREAK);
+       bus_io_write_1(bc, ioh, com_lcr, sc->sc_lcr);
+       bus_io_write_1(bc, ioh, com_ier, 0);
+       if (ISSET(tp->t_cflag, HUPCL) &&
+           !ISSET(sc->sc_swflags, COM_SW_SOFTCAR)) {
+               /* XXX perhaps only clear DTR */
+               bus_io_write_1(bc, ioh, com_mcr, 0);
+               bus_io_write_1(bc, ioh, com_fifo, FIFO_RCV_RST | FIFO_XMT_RST);
+       }
+       CLR(tp->t_state, TS_BUSY | TS_FLUSH);
+       if (--drcomsopen == 0)
+               untimeout(drcomsoft, NULL);
+       splx(s);
+       ttyclose(tp);
+#ifdef notyet /* XXXX */
+       if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
+               ttyfree(tp);
+               sc->sc_tty = 0;
+       }
+#endif
+       return 0;
+}
+int
+drcomread(dev, uio, flag)
+       dev_t dev;
+       struct uio *uio;
+       int flag;
+{
+       struct drcom_softc *sc = drcom_cd.cd_devs[COMUNIT(dev)];
+       struct tty *tp = sc->sc_tty;
+       return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
+}
+int
+drcomwrite(dev, uio, flag)
+       dev_t dev;
+       struct uio *uio;
+       int flag;
+{
+       struct drcom_softc *sc = drcom_cd.cd_devs[COMUNIT(dev)];
+       struct tty *tp = sc->sc_tty;
+       return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
+}
+
+struct tty *
+drcomtty(dev)
+       dev_t dev;
+{
+       struct drcom_softc *sc = drcom_cd.cd_devs[COMUNIT(dev)];
+       struct tty *tp = sc->sc_tty;
+
+       return (tp);
+}
+static u_char
+tiocm_xxx2mcr(data)
+       int data;
+{
+       u_char m = 0;
+
+       if (ISSET(data, TIOCM_DTR))
+               SET(m, MCR_DTR);
+       if (ISSET(data, TIOCM_RTS))
+               SET(m, MCR_RTS);
+       return m;
+}
+
+int
+drcomioctl(dev, cmd, data, flag, p)
+       dev_t dev;
+       u_long cmd;
+       caddr_t data;
+       int flag;
+       struct proc *p;
+{
+       int unit = COMUNIT(dev);
+       struct drcom_softc *sc = drcom_cd.cd_devs[unit];
+       struct tty *tp = sc->sc_tty;
+       bus_chipset_tag_t bc = sc->sc_bc;
+       bus_io_handle_t ioh = sc->sc_ioh;
+       int error;
+
+       error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p);
+       if (error >= 0)
+               return error;
+
+       error = ttioctl(tp, cmd, data, flag, p);
+       if (error >= 0)
+               return error;
+
+       switch (cmd) {
+       case TIOCSBRK:
+               SET(sc->sc_lcr, LCR_SBREAK);
+               bus_io_write_1(bc, ioh, com_lcr, sc->sc_lcr);
+               break;
+       case TIOCCBRK:
+               CLR(sc->sc_lcr, LCR_SBREAK);
+               bus_io_write_1(bc, ioh, com_lcr, sc->sc_lcr);
+               break;
+       case TIOCSDTR:
+               SET(sc->sc_mcr, sc->sc_dtr);
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               break;
+       case TIOCCDTR:
+               CLR(sc->sc_mcr, sc->sc_dtr);
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               break;
+       case TIOCMSET:
+               CLR(sc->sc_mcr, MCR_DTR | MCR_RTS);
+       case TIOCMBIS:
+               SET(sc->sc_mcr, tiocm_xxx2mcr(*(int *)data));
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               break;
+       case TIOCMBIC:
+               CLR(sc->sc_mcr, tiocm_xxx2mcr(*(int *)data));
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               break;
+       case TIOCMGET: {
+               u_char m;
+               int bits = 0;
+
+               m = sc->sc_mcr;
+               if (ISSET(m, MCR_DTR))
+                       SET(bits, TIOCM_DTR);
+               if (ISSET(m, MCR_RTS))
+                       SET(bits, TIOCM_RTS);
+               m = sc->sc_msr;
+               if (ISSET(m, MSR_DCD))
+                       SET(bits, TIOCM_CD);
+               if (ISSET(m, MSR_CTS))
+                       SET(bits, TIOCM_CTS);
+               if (ISSET(m, MSR_DSR))
+                       SET(bits, TIOCM_DSR);
+               if (ISSET(m, MSR_RI | MSR_TERI))
+                       SET(bits, TIOCM_RI);
+               if (bus_io_read_1(bc, ioh, com_ier))
+                       SET(bits, TIOCM_LE);
+               *(int *)data = bits;
+               break;
+       }
+       case TIOCGFLAGS: {
+               int driverbits, userbits = 0;
+
+               driverbits = sc->sc_swflags;
+               if (ISSET(driverbits, COM_SW_SOFTCAR))
+                       SET(userbits, TIOCFLAG_SOFTCAR);
+               if (ISSET(driverbits, COM_SW_CLOCAL))
+                       SET(userbits, TIOCFLAG_CLOCAL);
+               if (ISSET(driverbits, COM_SW_CRTSCTS))
+                       SET(userbits, TIOCFLAG_CRTSCTS);
+               if (ISSET(driverbits, COM_SW_MDMBUF))
+                       SET(userbits, TIOCFLAG_MDMBUF);
+
+               *(int *)data = userbits;
+               break;
+       }
+       case TIOCSFLAGS: {
+               int userbits, driverbits = 0;
+
+               error = suser(p->p_ucred, &p->p_acflag); 
+               if (error != 0) {
+                       return(EPERM); 
+               }
+
+               userbits = *(int *)data;
+               if (ISSET(userbits, TIOCFLAG_SOFTCAR) ||
+                   ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
+                       SET(driverbits, COM_SW_SOFTCAR);
+               if (ISSET(userbits, TIOCFLAG_CLOCAL))
+                       SET(driverbits, COM_SW_CLOCAL);
+               if (ISSET(userbits, TIOCFLAG_CRTSCTS))
+                       SET(driverbits, COM_SW_CRTSCTS);
+               if (ISSET(userbits, TIOCFLAG_MDMBUF))
+                       SET(driverbits, COM_SW_MDMBUF);
+
+               sc->sc_swflags = driverbits;
+               break;
+       }
+       default:
+               return ENOTTY;
+       }
+
+       return 0;
+}
+
+int
+drcomparam(tp, t)
+       struct tty *tp;
+       struct termios *t;
+{
+       struct drcom_softc *sc = drcom_cd.cd_devs[COMUNIT(tp->t_dev)];
+       bus_chipset_tag_t bc = sc->sc_bc;
+       bus_io_handle_t ioh = sc->sc_ioh;
+       int ospeed = drcomspeed(t->c_ospeed);
+       u_char lcr;
+       tcflag_t oldcflag;
+       int s;
+
+       /* check requested parameters */
+       if (ospeed < 0 || (t->c_ispeed && t->c_ispeed != t->c_ospeed))
+               return EINVAL;
+
+       lcr = ISSET(sc->sc_lcr, LCR_SBREAK);
+
+       switch (ISSET(t->c_cflag, CSIZE)) {
+       case CS5:
+               SET(lcr, LCR_5BITS);
+               break;
+       case CS6:
+               SET(lcr, LCR_6BITS);
+               break;
+       case CS7:
+               SET(lcr, LCR_7BITS);
+               break;
+       case CS8:
+               SET(lcr, LCR_8BITS);
+               break;
+       }
+       if (ISSET(t->c_cflag, PARENB)) {
+               SET(lcr, LCR_PENAB);
+               if (!ISSET(t->c_cflag, PARODD))
+                       SET(lcr, LCR_PEVEN);
+       }
+       if (ISSET(t->c_cflag, CSTOPB))
+               SET(lcr, LCR_STOPB);
+
+       sc->sc_lcr = lcr;
+
+       s = spltty();
+
+       if (ospeed == 0) {
+               CLR(sc->sc_mcr, MCR_DTR);
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+       }
+
+       /*
+        * Set the FIFO threshold based on the receive speed, if we are
+        * changing it.
+        */
+#if 1
+       if (tp->t_ispeed != t->c_ispeed) {
+#else
+       if (1) {
+#endif
+               if (ospeed != 0) {
+                       /*
+                        * Make sure the transmit FIFO is empty before
+                        * proceeding.  If we don't do this, some revisions
+                        * of the UART will hang.  Interestingly enough,
+                        * even if we do this will the last character is
+                        * still being pushed out, they don't hang.  This
+                        * seems good enough.
+                        */
+                       while (ISSET(tp->t_state, TS_BUSY)) {
+                               int error;
+
+                               ++sc->sc_halt;
+                               error = ttysleep(tp, &tp->t_outq,
+                                   TTOPRI | PCATCH, "drcomprm", 0);
+                               --sc->sc_halt;
+                               if (error) {
+                                       splx(s);
+                                       drcomstart(tp);
+                                       return (error);
+                               }
+                       }
+
+                       bus_io_write_1(bc, ioh, com_lcr, lcr | LCR_DLAB);
+                       bus_io_write_1(bc, ioh, com_dlbl, ospeed);
+                       bus_io_write_1(bc, ioh, com_dlbh, ospeed >> 8);
+                       bus_io_write_1(bc, ioh, com_lcr, lcr);
+                       SET(sc->sc_mcr, MCR_DTR);
+                       bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+               } else
+                       bus_io_write_1(bc, ioh, com_lcr, lcr);
+
+               if (!ISSET(sc->sc_hwflags, COM_HW_HAYESP) &&
+                   ISSET(sc->sc_hwflags, COM_HW_FIFO))
+                       bus_io_write_1(bc, ioh, com_fifo,
+                           FIFO_ENABLE |
+                           (t->c_ispeed <= 1200 ? FIFO_TRIGGER_1 : FIFO_TRIGGER_8));
+       } else
+               bus_io_write_1(bc, ioh, com_lcr, lcr);
+
+       /* When not using CRTSCTS, RTS follows DTR. */
+       if (!ISSET(t->c_cflag, CRTSCTS)) {
+               if (ISSET(sc->sc_mcr, MCR_DTR)) {
+                       if (!ISSET(sc->sc_mcr, MCR_RTS)) {
+                               SET(sc->sc_mcr, MCR_RTS);
+                               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+                       }
+               } else {
+                       if (ISSET(sc->sc_mcr, MCR_RTS)) {
+                               CLR(sc->sc_mcr, MCR_RTS);
+                               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+                       }
+               }
+               sc->sc_dtr = MCR_DTR | MCR_RTS;
+       } else
+               sc->sc_dtr = MCR_DTR;
+
+       /* and copy to tty */
+       tp->t_ispeed = t->c_ispeed;
+       tp->t_ospeed = t->c_ospeed;
+       oldcflag = tp->t_cflag;
+       tp->t_cflag = t->c_cflag;
+
+       /*
+        * If DCD is off and MDMBUF is changed, ask the tty layer if we should
+        * stop the device.
+        */
+       if (!ISSET(sc->sc_msr, MSR_DCD) &&
+           !ISSET(sc->sc_swflags, COM_SW_SOFTCAR) &&
+           ISSET(oldcflag, MDMBUF) != ISSET(tp->t_cflag, MDMBUF) &&
+           (*linesw[tp->t_line].l_modem)(tp, 0) == 0) {
+               CLR(sc->sc_mcr, sc->sc_dtr);
+               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+       }
+
+       /* Just to be sure... */
+       splx(s);
+       drcomstart(tp);
+       return 0;
+}
+
+void
+drcomstart(tp)
+       struct tty *tp;
+{
+       struct drcom_softc *sc = drcom_cd.cd_devs[COMUNIT(tp->t_dev)];
+       bus_chipset_tag_t bc = sc->sc_bc;
+       bus_io_handle_t ioh = sc->sc_ioh;
+       int s;
+
+       s = spltty();
+       if (ISSET(tp->t_state, TS_BUSY))
+               goto out;
+       if (ISSET(tp->t_state, TS_TIMEOUT | TS_TTSTOP) ||
+           sc->sc_halt > 0)
+               goto stopped;
+       if (ISSET(tp->t_cflag, CRTSCTS) && !ISSET(sc->sc_msr, MSR_CTS))
+               goto stopped;
+       if (tp->t_outq.c_cc <= tp->t_lowat) {
+               if (ISSET(tp->t_state, TS_ASLEEP)) {
+                       CLR(tp->t_state, TS_ASLEEP);
+                       wakeup(&tp->t_outq);
+               }
+               if (tp->t_outq.c_cc == 0)
+                       goto stopped;
+               selwakeup(&tp->t_wsel);
+       }
+       SET(tp->t_state, TS_BUSY);
+
+       if (!ISSET(sc->sc_ier, IER_ETXRDY)) {
+               SET(sc->sc_ier, IER_ETXRDY);
+               bus_io_write_1(bc, ioh, com_ier, sc->sc_ier);
+       }
+#ifdef COM_HAYESP
+       if (ISSET(sc->sc_hwflags, COM_HW_HAYESP)) {
+               u_char buffer[1024], *cp = buffer;
+               int n = q_to_b(&tp->t_outq, cp, sizeof buffer);
+               do
+                       bus_io_write_1(bc, ioh, com_data, *cp++);
+               while (--n);
+       }
+       else
+#endif
+       if (ISSET(sc->sc_hwflags, COM_HW_FIFO)) {
+               u_char buffer[16], *cp = buffer;
+               int n = q_to_b(&tp->t_outq, cp, sizeof buffer);
+               do {
+                       bus_io_write_1(bc, ioh, com_data, *cp++);
+               } while (--n);
+       } else
+               bus_io_write_1(bc, ioh, com_data, getc(&tp->t_outq));
+out:
+       splx(s);
+       return;
+stopped:
+       if (ISSET(sc->sc_ier, IER_ETXRDY)) {
+               CLR(sc->sc_ier, IER_ETXRDY);
+               bus_io_write_1(bc, ioh, com_ier, sc->sc_ier);
+       }
+       splx(s);
+}
+
+/*
+ * Stop output on a line.
+ */
+void
+drcomstop(tp, flag)
+       struct tty *tp;
+       int flag;
+{
+       int s;
+
+       s = spltty();
+       if (ISSET(tp->t_state, TS_BUSY))
+               if (!ISSET(tp->t_state, TS_TTSTOP))
+                       SET(tp->t_state, TS_FLUSH);
+       splx(s);
+}
+
+void
+drcomdiag(arg)
+       void *arg;
+{
+       struct drcom_softc *sc = arg;
+       int overflows, floods, failures;
+       int s;
+
+       s = spltty();
+       sc->sc_errors = 0;
+       overflows = sc->sc_overflows;
+       sc->sc_overflows = 0;
+       floods = sc->sc_floods;
+       sc->sc_floods = 0;
+       failures = sc->sc_failures;
+       sc->sc_failures = 0;
+       splx(s);
+
+       log(LOG_WARNING, "%s: %d silo overflow%s, %d ibuf overflow%s, %d uart failure%s\n",
+           sc->sc_dev.dv_xname,
+           overflows, overflows == 1 ? "" : "s",
+           floods, floods == 1 ? "" : "s",
+           failures, failures == 1 ? "" : "s");
+}
+
+void
+drcomsoft(arg)
+       void *arg;
+{
+       int unit;
+       struct drcom_softc *sc;
+       struct tty *tp;
+       register u_char *ibufp;
+       u_char *ibufend;
+       register int c;
+       int s;
+       static int lsrmap[8] = {
+               0,      TTY_PE,
+               TTY_FE, TTY_PE|TTY_FE,
+               TTY_FE, TTY_PE|TTY_FE,
+               TTY_FE, TTY_PE|TTY_FE
+       };
+
+       s = spltty();
+       if (drcomevents == 0) {
+               splx(s);
+               goto out;
+       }
+       drcomevents = 0;
+       splx(s);
+
+       for (unit = 0; unit < drcom_cd.cd_ndevs; unit++) {
+               sc = drcom_cd.cd_devs[unit];
+               if (sc == 0 || sc->sc_ibufp == sc->sc_ibuf)
+                       continue;
+
+               tp = sc->sc_tty;
+
+               s = spltty();
+
+               ibufp = sc->sc_ibuf;
+               ibufend = sc->sc_ibufp;
+
+               if (ibufp == ibufend) {
+                       splx(s);
+                       continue;
+               }
+
+               sc->sc_ibufp = sc->sc_ibuf = (ibufp == sc->sc_ibufs[0]) ?
+                                            sc->sc_ibufs[1] : sc->sc_ibufs[0];
+               sc->sc_ibufhigh = sc->sc_ibuf + COM_IHIGHWATER;
+               sc->sc_ibufend = sc->sc_ibuf + COM_IBUFSIZE;
+
+               if (tp == 0 || !ISSET(tp->t_state, TS_ISOPEN)) {
+                       splx(s);
+                       continue;
+               }
+
+               if (ISSET(tp->t_cflag, CRTSCTS) &&
+                   !ISSET(sc->sc_mcr, MCR_RTS)) {
+                       /* XXX */
+                       SET(sc->sc_mcr, MCR_RTS);
+                       bus_io_write_1(sc->sc_bc, sc->sc_ioh, com_mcr,
+                           sc->sc_mcr);
+               }
+
+               splx(s);
+
+               while (ibufp < ibufend) {
+                       c = *ibufp++;
+                       if (*ibufp & LSR_OE) {
+                               sc->sc_overflows++;
+                               if (sc->sc_errors++ == 0)
+                                       timeout(drcomdiag, sc, 60 * hz);
+                       }
+                       /* This is ugly, but fast. */
+                       c |= lsrmap[(*ibufp++ & (LSR_BI|LSR_FE|LSR_PE)) >> 2];
+                       (*linesw[tp->t_line].l_rint)(c, tp);
+               }
+       }
+
+out:
+       timeout(drcomsoft, NULL, 1);
+}
+
+int
+drcomintr(arg)
+       void *arg;
+{
+       struct drcom_softc *sc = arg;
+       bus_chipset_tag_t bc = sc->sc_bc;
+       bus_io_handle_t ioh = sc->sc_ioh;
+       struct tty *tp;
+       u_char iir, lsr, data, msr, delta;
+#ifdef COM_DEBUG
+       int n;
+       struct {
+               u_char iir, lsr, msr;
+       } iter[32];
+#endif
+
+#ifdef COM_DEBUG
+       n = 0;
+       iter[n].iir =
+#endif
+       iir = bus_io_read_1(bc, ioh, com_iir);
+       if (ISSET(iir, IIR_NOPEND))
+               return (0);
+
+       tp = sc->sc_tty;
+
+       for (;;) {
+#ifdef COM_DEBUG
+               iter[n].lsr =
+#endif
+               lsr = bus_io_read_1(bc, ioh, com_lsr);
+
+               if (ISSET(lsr, LSR_RXRDY)) {
+                       register u_char *p = sc->sc_ibufp;
+
+                       drcomevents = 1;
+                       do {
+                               data = bus_io_read_1(bc, ioh, com_data);
+                               if (ISSET(lsr, LSR_BI)) {
+#ifdef notdef
+                                       printf("break %02x %02x %02x %02x\n",
+                                           sc->sc_msr, sc->sc_mcr, sc->sc_lcr,
+                                           sc->sc_dtr);
+#endif
+#ifdef DDB
+                                       if (ISSET(sc->sc_hwflags,
+                                           COM_HW_CONSOLE)) {
+                                               Debugger();
+                                               goto next;
+                                       }
+#endif
+                               }
+                               if (p >= sc->sc_ibufend) {
+                                       sc->sc_floods++;
+                                       if (sc->sc_errors++ == 0)
+                                               timeout(drcomdiag, sc, 60 * hz);
+                               } else {
+                                       *p++ = data;
+                                       *p++ = lsr;
+                                       if (p == sc->sc_ibufhigh &&
+                                           ISSET(tp->t_cflag, CRTSCTS)) {
+                                               /* XXX */
+                                               CLR(sc->sc_mcr, MCR_RTS);
+                                               bus_io_write_1(bc, ioh,
+                                                   com_mcr, sc->sc_mcr);
+                                       }
+                               }
+#ifdef DDB
+                       next:
+#endif
+#ifdef COM_DEBUG
+                               if (++n >= 32)
+                                       goto ohfudge;
+                               iter[n].lsr =
+#endif
+                               lsr = bus_io_read_1(bc, ioh, com_lsr);
+                       } while (ISSET(lsr, LSR_RXRDY));
+
+                       sc->sc_ibufp = p;
+               } else {
+#ifdef COM_DEBUG
+                       if (ISSET(lsr, LSR_BI|LSR_FE|LSR_PE|LSR_OE))
+                               printf("weird lsr %02x\n", lsr);
+#endif
+                       if ((iir & IIR_IMASK) == IIR_RXRDY) {
+                               sc->sc_failures++;
+                               if (sc->sc_errors++ == 0)
+                                       timeout(drcomdiag, sc, 60 * hz);
+                               bus_io_write_1(bc, ioh, com_ier, 0);
+                               delay(10);
+                               bus_io_write_1(bc, ioh, com_ier, sc->sc_ier);
+                               iir = IIR_NOPEND;
+                               continue;
+                       }
+               }
+
+#ifdef COM_DEBUG
+               iter[n].msr =
+#endif
+               msr = bus_io_read_1(bc, ioh, com_msr);
+
+               if (msr != sc->sc_msr) {
+                       delta = msr ^ sc->sc_msr;
+                       sc->sc_msr = msr;
+                       if (ISSET(delta, MSR_DCD) &&
+                           !ISSET(sc->sc_swflags, COM_SW_SOFTCAR) &&
+                           (*linesw[tp->t_line].l_modem)(tp, ISSET(msr, MSR_DCD)) == 0) {
+                               CLR(sc->sc_mcr, sc->sc_dtr);
+                               bus_io_write_1(bc, ioh, com_mcr, sc->sc_mcr);
+                       }
+                       if (ISSET(delta & msr, MSR_CTS) &&
+                           ISSET(tp->t_cflag, CRTSCTS)) {
+                               /* the line is up and we want to do rts/cts flow control */
+                               (*linesw[tp->t_line].l_start)(tp);
+                       }
+               }
+
+               if (ISSET(lsr, LSR_TXRDY) && ISSET(tp->t_state, TS_BUSY)) {
+                       CLR(tp->t_state, TS_BUSY | TS_FLUSH);
+                       if (sc->sc_halt > 0)
+                               wakeup(&tp->t_outq);
+                       (*linesw[tp->t_line].l_start)(tp);
+               }
+
+#ifdef COM_DEBUG
+               if (++n >= 32)
+                       goto ohfudge;
+               iter[n].iir =
+#endif
+               iir = bus_io_read_1(bc, ioh, com_iir);
+               if (ISSET(iir, IIR_NOPEND))
+                       return (1);
+       }
+
+#ifdef COM_DEBUG
+ohfudge:
+       printf("drcomintr: too many iterations");
+       for (n = 0; n < 32; n++) {
+               if ((n % 4) == 0)
+                       printf("\ndrcomintr: iter[%02d]", n);
+               printf("  %02x %02x %02x", iter[n].iir, iter[n].lsr, iter[n].msr);
+       }
+       printf("\n");
+       printf("drcomintr: msr %02x mcr %02x lcr %02x ier %02x\n",
+           sc->sc_msr, sc->sc_mcr, sc->sc_lcr, sc->sc_ier);
+       printf("drcomintr: state %08x cc %d\n", sc->sc_tty->t_state,
+           sc->sc_tty->t_outq.c_cc);
+       return (1);
+#endif
+}
+
+/*
+ * Following are all routines needed for COM to act as console
+ */
+#include <dev/cons.h>
+
+void
+drcomcnprobe(cp)
+       struct consdev *cp;
+{
+       /* XXX NEEDS TO BE FIXED XXX */
+       bus_chipset_tag_t bc = 0;
+       bus_io_handle_t ioh;
+       int found;
+
+       if (bus_io_map(bc, CONADDR, COM_NPORTS, &ioh)) {
+               cp->cn_pri = CN_DEAD;
+               return;
+       }
+       found = 1/*drcomprobe1(bc, ioh, CONADDR)*/;
+       bus_io_unmap(bc, ioh, COM_NPORTS);
+       if (!found) {
+               cp->cn_pri = CN_DEAD;
+               return;
+       }
+
+       /* locate the major number */
+       for (drcommajor = 0; drcommajor < nchrdev; drcommajor++)
+               if (cdevsw[drcommajor].d_open == drcomopen)
+                       break;
+
+       /* initialize required fields */
+       cp->cn_dev = makedev(drcommajor, CONUNIT);
+#ifdef COMCONSOLE
+       cp->cn_pri = CN_REMOTE;         /* Force a serial port console */
+#else
+       cp->cn_pri = CN_NORMAL;
+#endif
+}
+
+void
+drcomcninit(cp)
+       struct consdev *cp;
+{
+
+#if 0
+       XXX NEEDS TO BE FIXED XXX
+       drcomconsbc = ???;
+#endif
+       if (bus_io_map(drcomconsbc, CONADDR, COM_NPORTS, &drcomconsioh))
+               panic("drcomcninit: mapping failed");
+
+       drcominit(drcomconsbc, drcomconsioh, drcomdefaultrate);
+       drcomconsaddr = CONADDR;
+       drcomconsinit = 0;
+}
+
+void
+drcominit(bc, ioh, rate)
+       bus_chipset_tag_t bc;
+       bus_io_handle_t ioh;
+       int rate;
+{
+       int s = splhigh();
+       u_char stat;
+
+       bus_io_write_1(bc, ioh, com_lcr, LCR_DLAB);
+       rate = drcomspeed(drcomdefaultrate);
+       bus_io_write_1(bc, ioh, com_dlbl, rate);
+       bus_io_write_1(bc, ioh, com_dlbh, rate >> 8);
+       bus_io_write_1(bc, ioh, com_lcr, LCR_8BITS);
+       bus_io_write_1(bc, ioh, com_ier, IER_ERXRDY | IER_ETXRDY);
+       bus_io_write_1(bc, ioh, com_fifo,
+           FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_1);
+       bus_io_write_1(bc, ioh, com_mcr, MCR_DTR | MCR_RTS);
+       DELAY(100);
+       stat = bus_io_read_1(bc, ioh, com_iir);
+       splx(s);
+}
+
+int
+drcomcngetc(dev)
+       dev_t dev;
+{
+       int s = splhigh();
+       bus_chipset_tag_t bc = drcomconsbc;
+       bus_io_handle_t ioh = drcomconsioh;
+       u_char stat, c;
+
+       while (!ISSET(stat = bus_io_read_1(bc, ioh, com_lsr), LSR_RXRDY))
+               ;
+       c = bus_io_read_1(bc, ioh, com_data);
+       stat = bus_io_read_1(bc, ioh, com_iir);
+       splx(s);
+       return c;
+}
+
+/*
+ * Console kernel output character routine.
+ */
+void
+drcomcnputc(dev, c)
+       dev_t dev;
+       int c;
+{
+       int s = splhigh();
+       bus_chipset_tag_t bc = drcomconsbc;
+       bus_io_handle_t ioh = drcomconsioh;
+       u_char stat;
+       register int timo;
+
+#ifdef KGDB
+       if (dev != kgdb_dev)
+#endif
+       if (drcomconsinit == 0) {
+               drcominit(bc, ioh, drcomdefaultrate);
+               drcomconsinit = 1;
+       }
+       /* wait for any pending transmission to finish */
+       timo = 50000;
+       while (!ISSET(stat = bus_io_read_1(bc, ioh, com_lsr), LSR_TXRDY) && --timo)
+               ;
+       bus_io_write_1(bc, ioh, com_data, c);
+       /* wait for this transmission to drcomplete */
+       timo = 1500000;
+       while (!ISSET(stat = bus_io_read_1(bc, ioh, com_lsr), LSR_TXRDY) && --timo)
+               ;
+       /* clear any interrupts generated by this transmission */
+       stat = bus_io_read_1(bc, ioh, com_iir);
+       splx(s);
+}
+
+void
+drcomcnpollc(dev, on)
+       dev_t dev;
+       int on;
+{
+
+}
diff --git a/sys/arch/amiga/dev/drcomvar.h b/sys/arch/amiga/dev/drcomvar.h
new file mode 100644 (file)
index 0000000..f6431d2
--- /dev/null
@@ -0,0 +1,40 @@
+/*     $OpenBSD: drcomvar.h,v 1.1 1997/01/16 09:23:56 niklas Exp $     */
+/*     $NetBSD: drcomvar.h,v 1.1 1996/11/30 00:43:04 is Exp $  */
+
+/*
+ * Copyright (c) 1996 Christopher G. Demetriou.  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 Christopher G. Demetriou
+ *     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.
+ */
+
+int comintr __P((void *));
+
+extern int comconsaddr;
+extern int comconsattached;
+extern bus_chipset_tag_t comconsbc;
+extern bus_io_handle_t comconsioh;
+extern tcflag_t comconscflag;
diff --git a/sys/arch/amiga/dev/drisavar.h b/sys/arch/amiga/dev/drisavar.h
new file mode 100644 (file)
index 0000000..04e102e
--- /dev/null
@@ -0,0 +1,23 @@
+/*     $OpenBSD: drisavar.h,v 1.1 1997/01/16 09:23:57 niklas Exp $     */
+/*     $NetBSD: drisavar.h,v 1.1 1996/11/30 00:43:05 is Exp $  */
+
+#ifndef DRISAVAR_H
+
+#ifndef DRCCADDR
+#include <amiga/amiga/drcustom.h>
+#endif
+
+#define i2drabs(io)    (DRCCADDR + NBPG * DRSUPIOPG + (io << 2) + 1)
+#define i2drrel(ioh,io)        (ioh + (io << 2))
+
+#define bus_chipset_tag_t              void *
+#define bus_io_handle_t                        vm_offset_t
+
+#define bus_io_map(bc, iob, n, iohp)   (*(iohp) = i2drabs(iob), 0)
+#define bus_io_unmap(bc, ioh, n)       do {(void)bc; (void)ioh; (void)n;} while (0)
+
+#define bus_io_read_1(bt, ioh, off)    ((void)bc, *(u_int8_t *)i2drrel(ioh, off))
+#define bus_io_write_1(bt, ioh, off, val) do {\
+       (void)bt; *(u_int8_t *)i2drrel(ioh, off) = (val); } while (0)
+
+#endif
index 09768e8..d79459f 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: drsc.c,v 1.2 1996/05/19 19:03:01 is Exp $      */
+/*     $OpenBSD: drsc.c,v 1.3 1997/01/16 09:23:58 niklas Exp $ */
+/*     $NetBSD: drsc.c,v 1.9 1996/12/23 09:09:57 veego Exp $   */
 
 /*
  * Copyright (c) 1996 Ignatios Souvatzis
@@ -97,8 +98,9 @@ drscmatch(pdp, match, auxp)
        struct device *pdp;
        void *match, *auxp;
 {
-       struct cfdata *cdp = (struct cfdata *)match;
-       if (is_draco() && (cdp->cf_unit == 0))
+       struct cfdata *cfp = (struct cfdata *)match;
+
+       if (is_draco() && matchname(auxp, "drsc") && (cfp->cf_unit == 0))
                return(1);
        return(0);
 }
index a603e4d..369de43 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: empsc.c,v 1.4 1996/11/23 21:45:07 kstailey Exp $ */
-/*     $NetBSD: empsc.c,v 1.7 1996/05/10 13:02:33 is Exp $     */
+/*     $OpenBSD: empsc.c,v 1.5 1997/01/16 09:23:59 niklas Exp $ */
+/*     $NetBSD: empsc.c,v 1.13 1996/12/23 09:09:58 veego Exp $ */
 
 /*
 
index 1de83fa..d727e79 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: event.c,v 1.3.6.1 1996/05/31 09:17:39 is Exp $ */
+/*     $OpenBSD: event.c,v 1.3 1997/01/16 09:24:00 niklas Exp $        */
+/*     $NetBSD: event.c,v 1.5 1996/10/11 21:12:43 mhitch Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
index 95dd5fa..52fc3a8 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: event_var.h,v 1.2 1994/10/26 02:03:00 cgd Exp $        */
+/*     $OpenBSD: event_var.h,v 1.2 1997/01/16 09:24:02 niklas Exp $    */
+/*     $NetBSD: event_var.h,v 1.3 1996/10/11 21:12:46 mhitch Exp $     */
 
 /*
  * Copyright (c) 1992, 1993
index 6fa601a..46f0d15 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: fd.c,v 1.10 1996/11/23 21:45:08 kstailey Exp $        */
-/*     $NetBSD: fd.c,v 1.32 1996/05/04 04:54:00 mhitch Exp $   */
+/*     $OpenBSD: fd.c,v 1.11 1997/01/16 09:24:03 niklas Exp $  */
+/*     $NetBSD: fd.c,v 1.36 1996/12/23 09:09:59 veego Exp $    */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index 35875d2..a58d0b4 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: flsc.c,v 1.6 1996/11/23 21:45:09 kstailey Exp $       */
-/*     $NetBSD: flsc.c,v 1.5.4.3 1996/08/05 20:40:35 jtc Exp $ */
+/*     $OpenBSD: flsc.c,v 1.7 1997/01/16 09:24:04 niklas Exp $ */
+/*     $NetBSD: flsc.c,v 1.14 1996/12/23 09:10:00 veego Exp $  */
 
 /*
  * Copyright (c) 1995 Daniel Widenfalk
diff --git a/sys/arch/amiga/dev/gen_cvtab.c b/sys/arch/amiga/dev/gen_cvtab.c
deleted file mode 100644 (file)
index a78f9e4..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*     $OpenBSD: gen_cvtab.c,v 1.1 1996/02/26 21:08:03 niklas Exp $    */
-/*     $NetBSD: gen_cvtab.c,v 1.1 1996/02/24 20:13:00 chopps Exp $     */
-
-/*
- * Copyright (c) 1996 Christian E. Hopps
- * 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 Christian E. Hopps.
- * 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.
- */
-#include <sys/types.h>
-#include <stdio.h>
-
-/*
- * generate a conversion table to replace the use of the
- * floating point expression below in grf_cv.c
- */
-int
-main(int argc, char** argv)
-{
-       u_long vals[31];
-       u_long clock;
-       int m = 33;
-       int lastm = -1;
-
-       for (clock = 0; clock < 1080 && m > 0; ++clock) {
-               m = ((55 * .72 + 16.867) * 89.736 / (clock + 39) - 21.1543);    
-               m = m / 2 - 1;
-               if (m > 31)
-                       continue;
-               if (m != lastm)  {
-                       vals[m] = clock;
-                       lastm = m;
-               }
-       }
-       printf("/* generated by gen_cvtab */\n");
-       printf("static int cv_convtab[31] = {");
-       for (m = 0; m < 31; ++m) {
-               if (m % 5 == 0)
-                       printf("\n");
-               printf("\t%ld,", vals[m]);
-       }
-       printf("\n};\n");
-}
index a2cafad..0efcf0e 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: genpar.c,v 1.2 1997/01/16 09:24:06 niklas Exp $       */
 /*     $NetBSD: genpar.c,v 1.6 1995/02/16 21:57:31 chopps Exp $        */
 
 /*
index 3366f4e..be8f6d4 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf.c,v 1.7 1996/11/24 20:23:40 niklas Exp $  */
-/*     $NetBSD: grf.c,v 1.27 1996/05/19 20:06:20 is Exp $      */
+/*     $OpenBSD: grf.c,v 1.8 1997/01/16 09:24:07 niklas Exp $  */
+/*     $NetBSD: grf.c,v 1.32 1996/12/23 09:10:01 veego Exp $   */
 
 /*
  * Copyright (c) 1988 University of Utah.
index 94b68bf..e0ca799 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_cc.c,v 1.5 1996/11/24 20:23:41 niklas Exp $       */
-/*     $NetBSD: grf_cc.c,v 1.19 1996/04/21 21:11:08 veego Exp $        */
+/*     $OpenBSD: grf_cc.c,v 1.6 1997/01/16 09:24:08 niklas Exp $       */
+/*     $NetBSD: grf_cc.c,v 1.23 1996/12/23 09:10:02 veego Exp $        */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index a3c01db..03c48dd 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_cl.c,v 1.8 1996/11/24 20:23:42 niklas Exp $       */
-/*      $NetBSD: grf_cl.c,v 1.11.4.1 1996/05/27 10:50:40 is Exp $        */
+/*     $OpenBSD: grf_cl.c,v 1.9 1997/01/16 09:24:10 niklas Exp $       */
+/*      $NetBSD: grf_cl.c,v 1.18 1996/12/23 09:10:04 veego Exp $        */
 
 /*
  * Copyright (c) 1995 Ezra Story
@@ -161,7 +161,7 @@ static void *cl_fbaddr = 0; /* framebuffer */
 static void *cl_regaddr = 0;   /* registers */
 static int cl_fbsize;          /* framebuffer size */
 
-/* current sprite info, if you add summport for multiple boards
+/* current sprite info, if you add support for multiple boards
  * make this an array or something
  */
 struct grf_spriteinfo cl_cursprite;
@@ -358,8 +358,8 @@ grfclattach(pdp, dp, auxp)
 
 int
 grfclprint(auxp, pnp)
-       void *auxp;
-       const char   *pnp;
+       void    *auxp;
+       const char *pnp;
 {
        if (pnp)
                printf("ite at %s: ", pnp);
@@ -553,7 +553,7 @@ cl_blank(gp, on)
         struct grf_softc *gp;
         int *on;
 {
-        WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on ? 0x01 : 0x21);
+        WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on > 0 ? 0x01 : 0x21);
         return(0);
 }
         
@@ -1281,7 +1281,7 @@ cl_load_mon(gp, md)
                sr15 = ((cl_fbsize / 0x100000 == 2) ? 0x38 : 0xb8);
            WSeq(ba, SEQ_ID_CONF_RBACK, 0x00);
        } else {
-               sr15 = (TEXT || (gv->depth == 1)) ? 0x90 : 0xb0;
+               sr15 = (TEXT || (gv->depth == 1)) ? 0xd0 : 0xb0;
        }
        WSeq(ba, SEQ_ID_DRAM_CNTL, sr15);
        WGfx(ba, GCT_ID_READ_MAP_SELECT, 0x00);
index 228df97..048cc22 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_clreg.h,v 1.5 1996/08/23 18:52:38 niklas Exp $    */
-/*     $NetBSD: grf_clreg.h,v 1.4.4.1 1996/05/27 10:50:42 is Exp $     */
+/*     $OpenBSD: grf_clreg.h,v 1.6 1997/01/16 09:24:11 niklas Exp $    */
+/*     $NetBSD: grf_clreg.h,v 1.5 1996/10/08 23:18:51 thorpej Exp $    */
 
 /*
  * Copyright (c) 1995 Ezra Story
index b375952..1dc6fdd 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_cv.c,v 1.13 1996/11/24 20:23:44 niklas Exp $      */
-/*     $NetBSD: grf_cv.c,v 1.14 1996/05/19 21:05:27 veego Exp $        */
+/*     $OpenBSD: grf_cv.c,v 1.14 1997/01/16 09:24:13 niklas Exp $      */
+/*     $NetBSD: grf_cv.c,v 1.20 1996/12/23 09:10:05 veego Exp $        */
 
 /*
  * Copyright (c) 1995 Michael Teske
@@ -114,18 +114,7 @@ static struct grfvideo_mode monitor_def[24] = {
 static struct grfvideo_mode *monitor_current = &monitor_def[0];
 #define MAXPIXELCLOCK 135000000 /* safety */
 
-#if 0
-/* generated by gen_cvtab.c */
-static int cv_convtab[31] = {
-       163,    148,    135,    124,    114,
-       106,    98,     91,     85,     79,
-       74,     69,     65,     61,     57,
-       53,     50,     47,     44,     42,
-       39,     37,     35,     33,     31,
-       29,     27,     26,     24,     22,
-       21,
-};
-#endif
+unsigned char cv_pass_toggle;  /* passthru status tracker */
 
 /* Console display definition.
  *   Default hardcoded text mode.  This grf_cv is set up to
@@ -796,7 +785,7 @@ cv_blank(gp, on)
        volatile caddr_t ba;
 
        ba = gp->g_regkva;
-       gfx_on_off(*on ? 0 : 1, ba);
+       gfx_on_off(*on > 0 ? 0 : 1, ba);
        return (0);
 }
 
@@ -823,7 +812,7 @@ cv_mode(gp, cmd, arg, a2, a3)
 
            case GM_GRFOFF:
 #ifndef CV64CONSOLE
-               (void)cv_toggle(gp);
+               cvscreen(1, gp->g_regkva - 0x02000000)
 #else
                cv_load_mon(gp, &cvconsole_mode);
                ite_reinit(gp->g_itedev);
@@ -1051,7 +1040,17 @@ cv_toggle(gp)
        volatile caddr_t ba;
 
        ba = gp->g_regkva;
-       cvscreen(1, ba - 0x02000000);
+#ifndef CV64CONSOLE
+       cv_pass_toggle = 1;
+#endif /* !CV64CONSOLE */
+
+       if (cv_pass_toggle) {
+               cvscreen(0, ba - 0x02000000);
+               cv_pass_toggle = 0;
+       } else {
+               cvscreen(1, ba - 0x02000000);
+               cv_pass_toggle = 1;
+       }
 
        return (0);
 }
@@ -1425,7 +1424,7 @@ cv_load_mon(gp, md)
         * Divide by 1000 to prevent overflows.
         */
 
-       tfillm = (96 * (cv_memclk/1000))/240000;
+       tfillm = (96 * (cv_memclk/1000))/240000;
 
        switch(gv->depth) {
            case 32:
index 968fe19..3aed82e 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: grf_et.c,v 1.1.4.2 1996/06/04 09:01:21 is Exp $        */
+/*     $OpenBSD: grf_et.c,v 1.5 1997/01/16 09:24:15 niklas Exp $       */
+/*     $NetBSD: grf_et.c,v 1.8 1996/12/23 09:10:06 veego Exp $ */
 
 /*
  * Copyright (c) 1996 Tobias Abt
@@ -235,13 +236,13 @@ grfetmatch(pdp, match, auxp)
        /* Configure either registers or framebuffer in any order */
        /* as said before, oMniBus does not support ProdID */
        if (ettype == OMNIBUS) {
-               if (zap->size == 64*1024) {
+               if (zap->size == 64 * 1024) {
                        /* register area */
-                       et_regaddr=zap->va;
+                       et_regaddr = zap->va;
                } else {
                        /* memory area */
-                       et_fbaddr=zap->va;
-                       et_fbsize=zap->size;
+                       et_fbaddr = zap->va;
+                       et_fbsize = zap->size;
                }
        } else {
                if (zap->prodid == regprod) {
@@ -365,8 +366,8 @@ grfetattach(pdp, dp, auxp)
 
 int
 grfetprint(auxp, pnp)
-       void *auxp;
-       const char   *pnp;
+       void    *auxp;
+       const char *pnp;
 {
        if (pnp)
                printf("ite at %s: ", pnp);
@@ -387,34 +388,41 @@ et_boardinit(gp)
        RegOnpass(ba);
 
        if (ettype == MERLIN) {
-         /* Merlin needs some special initialisations */
-         vgaw(ba, MERLIN_SWITCH_REG, 0);
-         delay(20000);
-         vgaw(ba, MERLIN_SWITCH_REG, 8);
-         delay(20000);
-         vgaw(ba, MERLIN_SWITCH_REG, 0);
-         delay(20000);
-         vgaw(ba, MERLIN_VDAC_DATA, 1);
-         
-         vgaw(ba, MERLIN_VDAC_INDEX, 0x00);
-         vgaw(ba, MERLIN_VDAC_SPRITE,  0xff);
-         vgaw(ba, MERLIN_VDAC_INDEX, 0x01);
-         vgaw(ba, MERLIN_VDAC_SPRITE,  0x0f);
-         vgaw(ba, MERLIN_VDAC_INDEX, 0x02);
-         vgaw(ba, MERLIN_VDAC_SPRITE,  0x42);
-         vgaw(ba, MERLIN_VDAC_INDEX, 0x03);
-         vgaw(ba, MERLIN_VDAC_SPRITE,  0x00);
-
-         vgaw(ba, MERLIN_VDAC_DATA, 0);
+               /* Merlin needs some special initialisations */
+               vgaw(ba, MERLIN_SWITCH_REG, 0);
+               delay(20000);
+               vgaw(ba, MERLIN_SWITCH_REG, 8);
+               delay(20000);
+               vgaw(ba, MERLIN_SWITCH_REG, 0);
+               delay(20000);
+               vgaw(ba, MERLIN_VDAC_DATA, 1);
+
+               vgaw(ba, MERLIN_VDAC_INDEX, 0x00);
+               vgaw(ba, MERLIN_VDAC_SPRITE,  0xff);
+               vgaw(ba, MERLIN_VDAC_INDEX, 0x01);
+               vgaw(ba, MERLIN_VDAC_SPRITE,  0x0f);
+               vgaw(ba, MERLIN_VDAC_INDEX, 0x02);
+               vgaw(ba, MERLIN_VDAC_SPRITE,  0x42);
+               vgaw(ba, MERLIN_VDAC_INDEX, 0x03);
+               vgaw(ba, MERLIN_VDAC_SPRITE,  0x00);
+
+               vgaw(ba, MERLIN_VDAC_DATA, 0);
        }
 
        
        /* setup initial unchanging parameters */
 
-       vgaw(ba, GREG_HERCULESCOMPAT, 0x03);
+       vgaw(ba, GREG_HERCULESCOMPAT + ((ettype == DOMINO) ? 0x0fff : 0), 0x03);
        vgaw(ba, GREG_DISPMODECONTROL, 0xa0);
        vgaw(ba, GREG_MISC_OUTPUT_W, 0x63);
 
+       if (ettype == DOMINO)
+       {
+               vgaw(ba, CRT_ADDRESS, CRT_ID_VIDEO_CONFIG1);
+               vgaw(ba, CRT_ADDRESS_W + 0x0fff,
+                   0xc0 | vgar(ba, CRT_ADDRESS_R + 0x0fff));
+       }
+
        WSeq(ba, SEQ_ID_RESET, 0x03);
        WSeq(ba, SEQ_ID_CLOCKING_MODE, 0x21);   /* 8 dot, Display off */
        WSeq(ba, SEQ_ID_MAP_MASK, 0x0f);
@@ -480,17 +488,17 @@ et_boardinit(gp)
            case MERLIN:
                vgaw(ba, MERLIN_VDAC_INDEX, 0);
                for (x = 255; x >= 0; x--) {
-                   vgaw(ba, MERLIN_VDAC_COLORS, x);
-                   vgaw(ba, MERLIN_VDAC_COLORS, x);
-                   vgaw(ba, MERLIN_VDAC_COLORS, x);
+                       vgaw(ba, MERLIN_VDAC_COLORS, x);
+                       vgaw(ba, MERLIN_VDAC_COLORS, x);
+                       vgaw(ba, MERLIN_VDAC_COLORS, x);
                }
                break;
            default:
                vgaw(ba, VDAC_ADDRESS_W, 0);
                for (x = 255; x >= 0; x--) {
-                   vgaw(ba, VDAC_DATA, x);
-                   vgaw(ba, VDAC_DATA, x);
-                   vgaw(ba, VDAC_DATA, x);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0), x);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0), x);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0), x);
                }
                break;
        }
@@ -505,16 +513,16 @@ et_boardinit(gp)
        /* card spezific initialisations */
        switch(ettype) {
            case OMNIBUS:
-               etctype=et_getControllerType(gp);
-               etdtype=et_getDACType(gp);
+               etctype = et_getControllerType(gp);
+               etdtype = et_getDACType(gp);
                break;
            case MERLIN:
-               etctype=ETW32;
-               etdtype=MERLINDAC;
-       break;
+               etctype = ETW32;
+               etdtype = MERLINDAC;
+               break;
            case DOMINO:
-               etctype=ET4000;
-               etdtype=SIERRA11483;
+               etctype = ET4000;
+               etdtype = SIERRA11483;
                break;
        }
 }
@@ -535,26 +543,26 @@ et_getvmode(gp, vm)
                vm->depth = etconsole_mode.fy;
        } else 
 #endif
-        {
-                if (vm->mode_num == 0)
-                        vm->mode_num = (monitor_current - monitor_def) + 1;
-                if (vm->mode_num < 1 || vm->mode_num > monitor_def_max)
-                        return (EINVAL);
-                gv = monitor_def + (vm->mode_num - 1);
-                if (gv->mode_num == 0)
-                        return (EINVAL);
-
-                bcopy(gv, vm, sizeof(struct grfvideo_mode));
-        }
-
-        /* adjust internal values to pixel values */
-
-        vm->hblank_start *= 8;
-        vm->hblank_stop *= 8;
-        vm->hsync_start *= 8;
-        vm->hsync_stop *= 8;
-        vm->htotal *= 8;
-        
+       {
+               if (vm->mode_num == 0)
+                       vm->mode_num = (monitor_current - monitor_def) + 1;
+               if (vm->mode_num < 1 || vm->mode_num > monitor_def_max)
+                       return (EINVAL);
+               gv = monitor_def + (vm->mode_num - 1);
+               if (gv->mode_num == 0)
+                       return (EINVAL);
+
+               bcopy(gv, vm, sizeof(struct grfvideo_mode));
+       }
+
+       /* adjust internal values to pixel values */
+
+       vm->hblank_start *= 8;
+       vm->hblank_stop *= 8;
+       vm->hsync_start *= 8;
+       vm->hsync_stop *= 8;
+       vm->htotal *= 8;
+
        return (0);
 }
 
@@ -589,13 +597,12 @@ et_off(gp)
 
 int
 et_blank(gp, on)
-        struct grf_softc *gp;
-        int *on;
+       struct grf_softc *gp;
+       int *on;
 {
-        WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on ? 0x01 : 0x21);
-        return(0);
+       WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on > 0 ? 0x01 : 0x21);
+       return(0);
 }
-        
 
 /*
  * Change the mode of the display.
@@ -609,7 +616,7 @@ et_mode(gp, cmd, arg, a2, a3)
        u_long a2;
        int a3;
 {
-       int     error;
+       int error;
 
        switch (cmd) {
            case GM_GRFON:
@@ -689,7 +696,7 @@ et_ioctl(gp, cmd, data)
            case GRFIOCSETMON:
                return (et_setmonitor(gp, (struct grfvideo_mode *) data));
 
-            case GRFIOCBLANK:
+           case GRFIOCBLANK:
                return (et_blank(gp, (int *)data));
        }
        return (EINVAL);
@@ -728,19 +735,19 @@ et_setmousepos(gp, data)
        if (et_cursprite.pos.x == data->x && et_cursprite.pos.y == data->y)
                return (0);
 
-        /* current and previous real coordinates */
+       /* current and previous real coordinates */
        rx = data->x - et_cursprite.hot.x;
        ry = data->y - et_cursprite.hot.y;
        prx = et_cursprite.pos.x - et_cursprite.hot.x;
        pry = et_cursprite.pos.y - et_cursprite.hot.y;
 
-        /* if we are/were on an edge, create (un)shifted bitmap --
-         * ripped out optimization (not extremely worthwhile,
-         * and kind of buggy anyhow).
-         */
+       /* if we are/were on an edge, create (un)shifted bitmap --
+        * ripped out optimization (not extremely worthwhile,
+        * and kind of buggy anyhow).
+        */
 
-        /* do movement, save position */
-        et_writesprpos(ba, rx < 0 ? 0 : rx, ry < 0 ? 0 : ry);
+       /* do movement, save position */
+       et_writesprpos(ba, rx < 0 ? 0 : rx, ry < 0 ? 0 : ry);
        et_cursprite.pos.x = data->x;
        et_cursprite.pos.y = data->y;
 
@@ -785,18 +792,18 @@ et_setmonitor(gp, gv)
 {
        struct grfvideo_mode *md;
 
-        if (!et_mondefok(gv))
-                return(EINVAL);
+       if (!et_mondefok(gv))
+               return(EINVAL);
 
 #ifdef TSENGCONSOLE
        /* handle interactive setting of console mode */
        if (gv->mode_num == 255) {
                bcopy(gv, &etconsole_mode.gv, sizeof(struct grfvideo_mode));
-                etconsole_mode.gv.hblank_start /= 8;
-                etconsole_mode.gv.hblank_stop /= 8;
-                etconsole_mode.gv.hsync_start /= 8;
-                etconsole_mode.gv.hsync_stop /= 8;
-                etconsole_mode.gv.htotal /= 8;
+               etconsole_mode.gv.hblank_start /= 8;
+               etconsole_mode.gv.hblank_stop /= 8;
+               etconsole_mode.gv.hsync_start /= 8;
+               etconsole_mode.gv.hsync_stop /= 8;
+               etconsole_mode.gv.htotal /= 8;
                etconsole_mode.rows = gv->disp_height / etconsole_mode.fy;
                etconsole_mode.cols = gv->disp_width / etconsole_mode.fx;
                if (!(gp->g_flags & GF_GRFON))
@@ -809,13 +816,13 @@ et_setmonitor(gp, gv)
        md = monitor_def + (gv->mode_num - 1);
        bcopy(gv, md, sizeof(struct grfvideo_mode));
 
-        /* adjust pixel oriented values to internal rep. */
+       /* adjust pixel oriented values to internal rep. */
 
-        md->hblank_start /= 8;
-        md->hblank_stop /= 8;
-        md->hsync_start /= 8;
-        md->hsync_stop /= 8;
-        md->htotal /= 8;
+       md->hblank_start /= 8;
+       md->hblank_stop /= 8;
+       md->hsync_start /= 8;
+       md->hsync_stop /= 8;
+       md->htotal /= 8;
 
        return (0);
 }
@@ -827,9 +834,9 @@ et_getcmap(gfp, cmap)
        struct grf_colormap *cmap;
 {
        volatile unsigned char *ba;
-       u_char  red[256], green[256], blue[256], *rp, *gp, *bp;
-       short   x;
-       int     error;
+       u_char  red[256], green[256], blue[256], *rp, *gp, *bp;
+       short   x;
+       int     error;
 
        if (cmap->count == 0 || cmap->index >= 256)
                return 0;
@@ -855,11 +862,11 @@ et_getcmap(gfp, cmap)
                } while (x-- > 0);
                break;
            default:
-               vgaw(ba, VDAC_ADDRESS_W, cmap->index);
+               vgaw(ba, VDAC_ADDRESS_R+((ettype==DOMINO)?0x0fff:0), cmap->index);
                do {
-                       *rp++ = vgar(ba, VDAC_DATA) << etcmap_shift;
-                       *gp++ = vgar(ba, VDAC_DATA) << etcmap_shift;
-                       *bp++ = vgar(ba, VDAC_DATA) << etcmap_shift;
+                       *rp++ = vgar(ba, VDAC_DATA+((ettype==DOMINO)?0x0fff:0)) << etcmap_shift;
+                       *gp++ = vgar(ba, VDAC_DATA+((ettype==DOMINO)?0x0fff:0)) << etcmap_shift;
+                       *bp++ = vgar(ba, VDAC_DATA+((ettype==DOMINO)?0x0fff:0)) << etcmap_shift;
                } while (x-- > 0);
                break;
        }
@@ -880,9 +887,9 @@ et_putcmap(gfp, cmap)
        struct grf_colormap *cmap;
 {
        volatile unsigned char *ba;
-       u_char  red[256], green[256], blue[256], *rp, *gp, *bp;
-       short   x;
-       int     error;
+       u_char  red[256], green[256], blue[256], *rp, *gp, *bp;
+       short   x;
+       int     error;
 
        if (cmap->count == 0 || cmap->index >= 256)
                return (0);
@@ -908,7 +915,7 @@ et_putcmap(gfp, cmap)
        bp = blue + cmap->index;
 
        switch(ettype){
-       case MERLIN:
+           case MERLIN:
                vgaw(ba, MERLIN_VDAC_INDEX, cmap->index);
                do {
                        vgaw(ba, MERLIN_VDAC_COLORS, *rp++);
@@ -916,12 +923,15 @@ et_putcmap(gfp, cmap)
                        vgaw(ba, MERLIN_VDAC_COLORS, *bp++);
                } while (x-- > 0);
                break;
-       default:
+           default:
                vgaw(ba, VDAC_ADDRESS_W, cmap->index);
                do {
-                       vgaw(ba, VDAC_DATA, *rp++ >> etcmap_shift);
-                       vgaw(ba, VDAC_DATA, *gp++ >> etcmap_shift);
-                       vgaw(ba, VDAC_DATA, *bp++ >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           *rp++ >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           *gp++ >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           *bp++ >> etcmap_shift);
                } while (x-- > 0);
                break;
        }
@@ -964,14 +974,14 @@ static u_char et_clockdividers[ET_NUMCLOCKS] = {
 };
 
 static u_int et_clockfreqs[ET_NUMCLOCKS] = {
-         6293750,  7080500,  7875000,  8125000,
-         9000000,  9375000, 10000000, 11225000,
-        12587500, 14161000, 15750000, 16250000,
-        18000000, 18750000, 20000000, 22450000,
-        25175000, 28322000, 31500000, 32500000,
-        36000000, 37500000, 40000000, 44900000,
-        50350000, 56644000, 63000000, 65000000,
-        72000000, 75000000, 80000000, 89800000
+        6293750,  7080500,  7875000,  8125000,
+        9000000,  9375000, 10000000, 11225000,
+       12587500, 14161000, 15750000, 16250000,
+       18000000, 18750000, 20000000, 22450000,
+       25175000, 28322000, 31500000, 32500000,
+       36000000, 37500000, 40000000, 44900000,
+       50350000, 56644000, 63000000, 65000000,
+       72000000, 75000000, 80000000, 89800000
 };
 
 
@@ -987,7 +997,7 @@ et_CompFQ(fq, num, denom)
                if (fq <= et_clockfreqs[i++]) {
                        break;
                }
-       }       
+       }
 
        *num = et_clocks[--i];
        *denom = et_clockdividers[i];
@@ -1000,25 +1010,24 @@ int
 et_mondefok(gv)
        struct grfvideo_mode *gv;
 {
-        
        if (gv->mode_num < 1 || gv->mode_num > monitor_def_max)
-                if (gv->mode_num != 255 || gv->depth != 4)
-                        return(0);
+               if (gv->mode_num != 255 || gv->depth != 4)
+                       return(0);
 
        switch (gv->depth) {
            case 4:
-                if (gv->mode_num != 255)
-                        return(0);
+               if (gv->mode_num != 255)
+                       return(0);
            case 1:
            case 8:
            case 15:
            case 16:
            case 24:
-                break;
+               break;
            default:
                return (0);
        }
-        return (1);
+       return (1);
 }
 
 
@@ -1191,18 +1200,18 @@ et_load_mon(gp, md)
        WCrt(ba, CRT_ID_LINE_COMPARE, 0xff);
 
        WCrt(ba, CRT_ID_OVERFLOW_HIGH,
-               ((VBS & 0x400) ? 0x01 : 0x00) |
-               ((VT  & 0x400) ? 0x02 : 0x00) |
-               ((VDE & 0x400) ? 0x04 : 0x00) |
-               ((VSS & 0x400) ? 0x08 : 0x00) |
-               0x10 |
-               (LACE ? 0x80 : 0x00));
-
-        WCrt(ba, CRT_ID_HOR_OVERFLOW,
-                ((HT  & 0x100) ? 0x01 : 0x00) |
-                ((HBS & 0x100) ? 0x04 : 0x00) |
-                ((HSS & 0x100) ? 0x10 : 0x00)
-        );
+           ((VBS & 0x400) ? 0x01 : 0x00) |
+           ((VT  & 0x400) ? 0x02 : 0x00) |
+           ((VDE & 0x400) ? 0x04 : 0x00) |
+           ((VSS & 0x400) ? 0x08 : 0x00) |
+           0x10 |
+           (LACE ? 0x80 : 0x00));
+
+       WCrt(ba, CRT_ID_HOR_OVERFLOW,
+           ((HT  & 0x100) ? 0x01 : 0x00) |
+           ((HBS & 0x100) ? 0x04 : 0x00) |
+           ((HSS & 0x100) ? 0x10 : 0x00)
+       );
 
        /* depth dependent stuff */
 
@@ -1381,9 +1390,12 @@ et_inittextmode(gp)
                for (z = 0; z < 256; z++) {
                        y = (z & 1) ? ((z > 7) ? 2 : 1) : 0;
            
-                       vgaw(ba, VDAC_DATA, etconscolors[y][0] >> etcmap_shift);
-                       vgaw(ba, VDAC_DATA, etconscolors[y][1] >> etcmap_shift);
-                       vgaw(ba, VDAC_DATA, etconscolors[y][2] >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           etconscolors[y][0] >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           etconscolors[y][1] >> etcmap_shift);
+                       vgaw(ba, VDAC_DATA + ((ettype == DOMINO) ? 0x0fff : 0),
+                           etconscolors[y][2] >> etcmap_shift);
                }
                break;
        }
@@ -1417,13 +1429,13 @@ et_getControllerType(gp)
 
        *((unsigned long *)mmu) = 0;
        *(mem + 0x13) = 0x38;
+
        *mmu = 0xff;
 
        /* hide ACL */
        WIma(ba, IMA_PORTCONTROL, 0x00);
        WCrt(ba, CRT_ID_VIDEO_CONFIG1, 0xd3);
+
        return((*mem == 0xff) ? ETW32 : ET4000);
 }
 
@@ -1440,55 +1452,52 @@ et_getDACType(gp)
 
        /* check for Sierra SC 15025 */
 
-  if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR));
-  vgaw(ba, VDAC_COMMAND, 0x10); /* set ERPF */
-
-  vgaw(ba, VDAC_XINDEX, 9);
-  check.cc[0]=vgar(ba, VDAC_XDATA);
-  vgaw(ba, VDAC_XINDEX, 10);
-  check.cc[1]=vgar(ba, VDAC_XDATA);
-  vgaw(ba, VDAC_XINDEX, 11);
-  check.cc[2]=vgar(ba, VDAC_XDATA);
-  vgaw(ba, VDAC_XINDEX, 12);
-  check.cc[3]=vgar(ba, VDAC_XDATA);
-  
-  if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR));
-  vgaw(ba, VDAC_COMMAND, 0x00); /* clear ERPF */
-
-  if(check.tt == 0x533ab141){
-    if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR));
-    vgaw(ba, VDAC_COMMAND, 0x10); /* set ERPF */
-   
-    /* switch to 8 bits per color */
-    vgaw(ba, VDAC_XINDEX, 8);
-    vgaw(ba, VDAC_XDATA, 1);
-    /* do not shift color values */
-    etcmap_shift = 0;
-    
-    if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR)); if(vgar(ba, HDR));
-    vgaw(ba, VDAC_COMMAND, 0x00); /* clear ERPF */
-    
-    vgaw(ba, VDAC_MASK, 0xff);
-    return(SIERRA15025);
-  }
-
-  /* check for MUSIC DAC */
-  
-  if(vgar(ba, HDR));   /* We MUST do 4 HW reads to switch into command mode */
-  if(vgar(ba, HDR));
-  if(vgar(ba, HDR));
-  if(vgar(ba, HDR));
-
-  vgaw(ba, VDAC_COMMAND, 0x02); /* set some strange MUSIC mode (???) */
-  
-  vgaw(ba, VDAC_XINDEX, 0x01);
-  if(vgar(ba, VDAC_XDATA) == 0x01){
-    /* shift color values by 2 */
-    etcmap_shift = 2;
-
-    vgaw(ba, VDAC_MASK, 0xff);
-    return(MUSICDAC);
-  }
+       /* We MUST do 4 HW reads to switch into command mode */
+       if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR));
+               vgaw(ba, VDAC_COMMAND, 0x10); /* set ERPF */
+
+       vgaw(ba, VDAC_XINDEX, 9);
+       check.cc[0] = vgar(ba, VDAC_XDATA);
+       vgaw(ba, VDAC_XINDEX, 10);
+       check.cc[1] = vgar(ba, VDAC_XDATA);
+       vgaw(ba, VDAC_XINDEX, 11);
+       check.cc[2] = vgar(ba, VDAC_XDATA);
+       vgaw(ba, VDAC_XINDEX, 12);
+       check.cc[3] = vgar(ba, VDAC_XDATA);
+
+       if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR));
+               vgaw(ba, VDAC_COMMAND, 0x00); /* clear ERPF */
+
+       if (check.tt == 0x533ab141) {
+               if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR));
+                       vgaw(ba, VDAC_COMMAND, 0x10); /* set ERPF */
+
+               /* switch to 8 bits per color */
+               vgaw(ba, VDAC_XINDEX, 8);
+               vgaw(ba, VDAC_XDATA, 1);
+               /* do not shift color values */
+               etcmap_shift = 0;
+
+               if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR));
+                       vgaw(ba, VDAC_COMMAND, 0x00); /* clear ERPF */
+
+               vgaw(ba, VDAC_MASK, 0xff);
+               return (SIERRA15025);
+       }
+
+       /* check for MUSIC DAC */
+
+       if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR)); if (vgar(ba, HDR));
+               vgaw(ba, VDAC_COMMAND, 0x02);   /* set some strange MUSIC mode (???) */
+
+       vgaw(ba, VDAC_XINDEX, 0x01);
+       if (vgar(ba, VDAC_XDATA) == 0x01) {
+               /* shift color values by 2 */
+               etcmap_shift = 2;
+
+               vgaw(ba, VDAC_MASK, 0xff);
+               return (MUSICDAC);
+}
 
        /*
         * nothing else found, so let us pretend it is a stupid
@@ -1497,9 +1506,9 @@ et_getDACType(gp)
 
        /* shift color values by 2 */
        etcmap_shift = 2;
+
        vgaw(ba, VDAC_MASK, 0xff);
-       return(SIERRA11483);  
+       return(SIERRA11483);
 }
 
 #endif /* NGRFET */
index bec07ac..a5b3832 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: grf_etreg.h,v 1.1.4.1 1996/05/27 01:12:13 is Exp $     */
+/*     $OpenBSD: grf_etreg.h,v 1.3 1997/01/16 09:24:17 niklas Exp $    */
+/*     $NetBSD: grf_etreg.h,v 1.2 1996/06/09 13:21:11 veego Exp $      */
 
 /*
  * Copyright (c) 1996 Tobias Abt
  * fields for a text mode are present.
  */
 struct grfettext_mode {
-       struct grfvideo_mode gv;
-       unsigned short  fx;         /* font x dimension */
-       unsigned short  fy;         /* font y dimension */
-       unsigned short  cols;       /* screen dimensions */
-       unsigned short  rows;
-       void            *fdata;     /* font data */
-       unsigned short  fdstart;
-       unsigned short  fdend;
+       struct grfvideo_mode gv;
+       unsigned short  fx;             /* font x dimension */
+       unsigned short  fy;             /* font y dimension */
+       unsigned short  cols;           /* screen dimensions */
+       unsigned short  rows;
+       void            *fdata;         /* font data */
+       unsigned short  fdstart;
+       unsigned short  fdend;
 };
 
 
@@ -69,14 +70,14 @@ struct grfettext_mode {
 #define MERLIN         2117
 
 /* VGA controller types */
-#define ET4000      0
-#define ETW32       1
+#define ET4000 0
+#define ETW32  1
 
 /* DAC types */
-#define SIERRA11483 0    /* Sierra 11483 HiColor DAC */
-#define SIERRA15025 1    /* Sierra 15025 TrueColor DAC */
-#define MUSICDAC    2    /* MUSIC TrueColor DAC */
-#define MERLINDAC   3    /* Merlin's BrookTree TrueColor DAC */
+#define SIERRA11483    0       /* Sierra 11483 HiColor DAC */
+#define SIERRA15025    1       /* Sierra 15025 TrueColor DAC */
+#define MUSICDAC       2       /* MUSIC TrueColor DAC */
+#define MERLINDAC      3       /* Merlin's BrookTree TrueColor DAC */
 
 /* read VGA register */
 #define vgar(ba, reg) (*(((volatile unsigned char *)ba)+reg))
@@ -101,7 +102,7 @@ struct grfettext_mode {
 #define GREG_STATUS0_R         0x03C2
 #define GREG_STATUS1_R         0x03DA
 #define GREG_MISC_OUTPUT_R     0x03CC
-#define GREG_MISC_OUTPUT_W     0x03C2  
+#define GREG_MISC_OUTPUT_W     0x03C2
 #define GREG_FEATURE_CONTROL_R 0x03CA
 #define GREG_FEATURE_CONTROL_W 0x03DA
 #define GREG_POS               0x0102
@@ -114,7 +115,7 @@ struct grfettext_mode {
 
 /* ETW32 special */
 #define W32mappedRegs 0xfff00
-    
+
 /* MMU */
 #define MMU_APERTURE0 0x80000
 #define MMU_APERTURE1 0xa0000
@@ -177,9 +178,9 @@ struct grfettext_mode {
 #define        SEQ_ID_AUXILIARY_MODE   0x07
 
 /* don't know about them right now...
-#define TEXT_PLANE_CHAR            0x01
-#define TEXT_PLANE_ATTR            0x02
-#define TEXT_PLANE_FONT            0x04
+#define TEXT_PLANE_CHAR                0x01
+#define TEXT_PLANE_ATTR                0x02
+#define TEXT_PLANE_FONT                0x04
 */
 
 /* CRT Controller: */
@@ -226,18 +227,20 @@ struct grfettext_mode {
 #define IMA_ADDRESS            0x217a
 #define IMA_ADDRESS_R          0x217b
 #define IMA_ADDRESS_W          0x217b
-#define IMA_STARTADDRESSLOW     0xf0
-#define IMA_STARTADDRESSMIDDLE  0xf1
-#define IMA_STARTADDRESSHIGH    0xf2
-#define IMA_TRANSFERLENGTHLOW   0xf3
-#define IMA_TRANSFERLENGTHHIGH  0xf4
-#define IMA_ROWOFFSETLOW        0xf5
-#define IMA_ROWOFFSETHIGH       0xf6
-#define IMA_PORTCONTROL         0xf7
+#define IMA_STARTADDRESSLOW    0xf0
+#define IMA_STARTADDRESSMIDDLE 0xf1
+#define IMA_STARTADDRESSHIGH   0xf2
+#define IMA_TRANSFERLENGTHLOW  0xf3
+#define IMA_TRANSFERLENGTHHIGH 0xf4
+#define IMA_ROWOFFSETLOW       0xf5
+#define IMA_ROWOFFSETHIGH      0xf6
+#define IMA_PORTCONTROL                0xf7
 
 /* Pass-through */
 #define PASS_ADDRESS           0x8000
 #define PASS_ADDRESS_W         0x8000
+#define PASS_ADDRESS_DOM       0xa000
+#define PASS_ADDRESS_DOMW      0xb000
 
 /* Video DAC */
 #define VDAC_ADDRESS           0x03c8
@@ -248,15 +251,15 @@ struct grfettext_mode {
 #define VDAC_MASK              0x03c6
 #define HDR                    0x03c6  /* Hidden DAC register, 4 reads to access */
 
-#define VDAC_COMMAND 0x03c6
-#define VDAC_XINDEX 0x03c7
-#define VDAC_XDATA 0x03c8
+#define VDAC_COMMAND           0x03c6
+#define VDAC_XINDEX            0x03c7
+#define VDAC_XDATA             0x03c8
 
-#define MERLIN_VDAC_INDEX 0x01
-#define MERLIN_VDAC_COLORS 0x05
-#define MERLIN_VDAC_SPRITE 0x09
-#define MERLIN_VDAC_DATA 0x19
-#define MERLIN_SWITCH_REG 0x0401
+#define MERLIN_VDAC_INDEX      0x01
+#define MERLIN_VDAC_COLORS     0x05
+#define MERLIN_VDAC_SPRITE     0x09
+#define MERLIN_VDAC_DATA       0x19
+#define MERLIN_SWITCH_REG      0x0401
 
 #define WGfx(ba, idx, val) \
        do { vgaw(ba, GCT_ADDRESS, idx); vgaw(ba, GCT_ADDRESS_W , val); } while (0)
@@ -295,65 +298,63 @@ struct grfettext_mode {
  * inline functions.
  */
 static inline void RegWakeup(volatile void *ba) {
-       extern int ettype;
-
-       switch (ettype) { 
-       case OMNIBUS: 
-               vgaw(ba, PASS_ADDRESS_W, 0x00); 
-               break; 
-/*
-       case DOMINO: 
-               vgaw(ba, PASS_ADDRESS_W, 0x00); 
-               break; 
-       case MERLIN: 
-               break; 
-*/
-       } 
-       delay(200000);
+       extern int ettype;
+
+       switch (ettype) {
+           case OMNIBUS:
+               vgaw(ba, PASS_ADDRESS_W, 0x00);
+               break;
+           case DOMINO:
+               vgaw(ba, PASS_ADDRESS_DOM, 0x00);
+               break;
+           case MERLIN:
+               break;
+       } 
+       delay(200000);
 }
 
 
 static inline void RegOnpass(volatile void *ba) {
-       extern int ettype;
+       extern int ettype;
        extern unsigned char pass_toggle;
        extern unsigned char Merlin_switch;
 
-       switch (ettype) { 
-       case OMNIBUS: 
-         vgaw(ba, PASS_ADDRESS_W, 0x00); 
-         break; 
-       case DOMINO: 
-         vgaw(ba, PASS_ADDRESS_W, 0x00); 
-         break; 
-       case MERLIN:
-         Merlin_switch &= 0xfe;
-         vgaw(ba, MERLIN_SWITCH_REG, Merlin_switch);
-               break;
-       } 
-       pass_toggle = 1;
-       delay(200000);
+       switch (ettype) {
+           case OMNIBUS:
+               vgaw(ba, PASS_ADDRESS_W, 0x00);
+               break;
+           case DOMINO:
+               vgaw(ba, PASS_ADDRESS_DOMW, 0x00);
+               break;
+           case MERLIN:
+               Merlin_switch &= 0xfe;
+               vgaw(ba, MERLIN_SWITCH_REG, Merlin_switch);
+               break;
+       }
+       pass_toggle = 1;
+       delay(200000);
 }
 
 
 static inline void RegOffpass(volatile void *ba) {
-       extern int ettype;
-       extern unsigned char pass_toggle;
+       extern int ettype;
+       extern unsigned char pass_toggle;
        extern unsigned char Merlin_switch;
 
-       switch (ettype) { 
-       case OMNIBUS: 
-               vgaw(ba, PASS_ADDRESS_W, 0x01); 
-               break; 
-       case DOMINO: 
-               vgaw(ba, PASS_ADDRESS_W, 0x00); 
-               break; 
-       case MERLIN:
-         Merlin_switch |= 0x01;
-         vgaw(ba, MERLIN_SWITCH_REG, Merlin_switch);
-               break;
-       } 
-       pass_toggle = 0;
-       delay(200000);
+       switch (ettype) {
+           case OMNIBUS:
+               vgaw(ba, PASS_ADDRESS_W, 0x01);
+               break;
+           case DOMINO:
+               vgaw(ba, PASS_ADDRESS_DOM, 0x00);
+               break;
+           case MERLIN:
+               Merlin_switch |= 0x01;
+               vgaw(ba, MERLIN_SWITCH_REG, Merlin_switch);
+               break;
+       }
+       pass_toggle = 0;
+       delay(200000);
 }
 
 static inline unsigned char RAttr(volatile void * ba, short idx) {
index 1809296..0bd1839 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_rh.c,v 1.11 1996/11/24 20:23:47 niklas Exp $      */
-/*     $NetBSD: grf_rh.c,v 1.17.4.3 1996/09/06 00:40:22 jtc Exp $      */
+/*     $OpenBSD: grf_rh.c,v 1.12 1997/01/16 09:24:18 niklas Exp $      */
+/*     $NetBSD: grf_rh.c,v 1.26 1996/12/31 17:54:28 is Exp $   */
 
 /*
  * Copyright (c) 1994 Markus Wild
@@ -592,22 +592,18 @@ RZ3SetPalette (gp, colornum, red, green, blue)
 
 }
 
-/* XXXXXXXXX !! */
-static unsigned short xpan;
-static unsigned short ypan;
-
 void
 RZ3SetPanning (gp, xoff, yoff)
        struct grf_softc *gp;
        unsigned short xoff, yoff;
 {
        volatile unsigned char *ba = gp->g_regkva;
+       struct grfinfo *gi = &gp->g_display;
        const struct MonDef * md = (struct MonDef *) gp->g_data;
        unsigned long off;
 
-       xpan = xoff;
-       ypan = yoff;
-
+       gi->gd_fbx = xoff;
+       gi->gd_fby = yoff;
 
         if (md->DEP > 8 && md->DEP <= 16) xoff *= 2;
         else if (md->DEP > 16) xoff *= 3;
@@ -640,27 +636,35 @@ RZ3SetHWCloc (gp, x, y)
 {
        volatile unsigned char *ba = gp->g_regkva;
        const struct MonDef *md = (struct MonDef *) gp->g_data;
-       volatile unsigned char *acm = ba + ACM_OFFSET;
+       /*volatile unsigned char *acm = ba + ACM_OFFSET;*/
+       struct grfinfo *gi = &gp->g_display;
 
-       if (x < xpan)
-               RZ3SetPanning(gp, x, ypan);
+       if (x < gi->gd_fbx)
+               RZ3SetPanning(gp, x, gi->gd_fby);
 
-       if (x >= (xpan+md->MW))
-               RZ3SetPanning(gp, (1 + x - md->MW) , ypan);
+       if (x >= (gi->gd_fbx+md->MW))
+               RZ3SetPanning(gp, (1 + x - md->MW) , gi->gd_fby);
 
-       if (y < ypan)
-               RZ3SetPanning(gp, xpan, y);
+       if (y < gi->gd_fby)
+               RZ3SetPanning(gp, gi->gd_fbx, y);
 
-       if (y >= (ypan+md->MH))
-               RZ3SetPanning(gp, xpan, (1 + y - md->MH));
+       if (y >= (gi->gd_fby+md->MH))
+               RZ3SetPanning(gp, gi->gd_fbx, (1 + y - md->MH));
 
-       x -= xpan;
-       y -= ypan;
+       x -= gi->gd_fbx;
+       y -= gi->gd_fby;
 
-       *(acm + (ACM_CURSOR_POSITION+0)) = x & 0xff;
+#if 1
+       WSeq(ba, SEQ_ID_CURSOR_X_LOC_HI, x >> 8);
+       WSeq(ba, SEQ_ID_CURSOR_X_LOC_LO, x & 0xff);
+       WSeq(ba, SEQ_ID_CURSOR_Y_LOC_HI, y >> 8);
+       WSeq(ba, SEQ_ID_CURSOR_Y_LOC_LO, y & 0xff);
+#else
        *(acm + (ACM_CURSOR_POSITION+1)) = x >> 8;
-       *(acm + (ACM_CURSOR_POSITION+2)) = y & 0xff;
+       *(acm + (ACM_CURSOR_POSITION+0)) = x & 0xff;
        *(acm + (ACM_CURSOR_POSITION+3)) = y >> 8;
+       *(acm + (ACM_CURSOR_POSITION+2)) = y & 0xff;
+#endif
 }
 
 u_short
@@ -890,7 +894,7 @@ rh_load_mon(gp, md)
        WSeq(ba, SEQ_ID_ACM_APERTURE_1, 0x00);
        WSeq(ba, SEQ_ID_ACM_APERTURE_2, 0x30);
        WSeq(ba, SEQ_ID_ACM_APERTURE_3, 0x00);
-       WSeq(ba, SEQ_ID_MEMORY_MAP_CNTL, 0x07);
+       WSeq(ba, SEQ_ID_MEMORY_MAP_CNTL, 0x03); /* was 7, but stupid cursor */
 
        WCrt(ba, CRT_ID_END_VER_RETR, (md->VSE & 0xf) | 0x20);
        WCrt(ba, CRT_ID_HOR_TOTAL, md->HT    & 0xff);
@@ -1152,8 +1156,8 @@ rh_load_mon(gp, md)
 
                RZ3BitBlit(gp, &bb);
 
-               xpan = 0;
-               ypan = 0;
+               gi->gd_fbx = 0;
+               gi->gd_fby = 0;
 
                return(1);
        } else if (md->DEP == 16) {
@@ -1168,8 +1172,8 @@ rh_load_mon(gp, md)
 
                RZ3BitBlit16(gp, &bb);
 
-               xpan = 0;
-               ypan = 0;
+               gi->gd_fbx = 0;
+               gi->gd_fby = 0;
 
                return(1);
         } else if (md->DEP == 24) {
@@ -1184,8 +1188,8 @@ rh_load_mon(gp, md)
                 
                 RZ3BitBlit24(gp, &bb );
                 
-                xpan = 0;
-                ypan = 0;
+               gi->gd_fbx = 0;
+               gi->gd_fby = 0;
                 
                 return 1;
        } else
@@ -1890,15 +1894,24 @@ rh_getspritepos (gp, pos)
        struct grf_softc *gp;
        struct grf_position *pos;
 {
+       struct grfinfo *gi = &gp->g_display;
+#if 1
+       volatile unsigned char *ba = gp->g_regkva;
+
+       pos->x = (RSeq(ba, SEQ_ID_CURSOR_X_LOC_HI) << 8) |
+           RSeq(ba, SEQ_ID_CURSOR_X_LOC_LO);
+       pos->y = (RSeq(ba, SEQ_ID_CURSOR_Y_LOC_HI) << 8) |
+           RSeq(ba, SEQ_ID_CURSOR_Y_LOC_LO);
+#else
        volatile unsigned char *acm = gp->g_regkva + ACM_OFFSET;
 
        pos->x = acm[ACM_CURSOR_POSITION + 0] +
            (acm[ACM_CURSOR_POSITION + 1] << 8);
        pos->y = acm[ACM_CURSOR_POSITION + 2] +
            (acm[ACM_CURSOR_POSITION + 3] << 8);
-
-       pos->x += xpan;
-       pos->y += ypan;
+#endif
+       pos->x += gi->gd_fbx;
+       pos->y += gi->gd_fby;
 
        return(0);
 }
index 5b8cf87..17d9013 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_rt.c,v 1.9 1996/11/24 20:23:48 niklas Exp $       */
-/*     $NetBSD: grf_rt.c,v 1.27.4.1 1996/05/26 17:26:43 is Exp $       */
+/*     $OpenBSD: grf_rt.c,v 1.10 1997/01/16 09:24:20 niklas Exp $      */
+/*     $NetBSD: grf_rt.c,v 1.34 1996/12/23 09:10:09 veego Exp $        */
 
 /*
  * Copyright (c) 1993 Markus Wild
@@ -1465,7 +1465,7 @@ rt_blank(gp, on)
 
        r = 0x01 | ((md->FLG & MDF_CLKDIV2)/ MDF_CLKDIV2 * 8);
 
-       WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on ? r : 0x21);
+       WSeq(gp->g_regkva, SEQ_ID_CLOCKING_MODE, *on > 0 ? r : 0x21);
 
        return(0);
 }       
index e1b396d..54ec326 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grf_ul.c,v 1.11 1996/11/24 20:23:49 niklas Exp $      */
-/*     $NetBSD: grf_ul.c,v 1.17 1996/05/09 20:31:25 is Exp $   */
+/*     $OpenBSD: grf_ul.c,v 1.12 1997/01/16 09:24:21 niklas Exp $      */
+/*     $NetBSD: grf_ul.c,v 1.23 1996/12/23 09:10:10 veego Exp $        */
 
 #define UL_DEBUG
 
@@ -17,8 +17,9 @@
  *    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 Lutz Vieweg.
- * 4. The name of the author may not be used to endorse or promote products
+ *      This product includes software developed by Ignatios Souvatzis for
+ *      the NetBSD project.
+ * 4. The name of the authors 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
@@ -912,7 +913,7 @@ ul_blank(gp, onoff, dev)
        gsp->ctrl = (gsp->ctrl & ~(INCR | INCW)) | LBL;
        gsp->hstadrh = 0xC000;
        gsp->hstadrl = 0x0080;
-       if (*onoff)
+       if (*onoff > 0)
                gsp->data |= 0x9000;
        else
                gsp->data &= ~0x9000;
index 3f8a863..e55391d 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: grf_ulreg.h,v 1.3 1995/12/31 01:22:03 chopps Exp $     */
+/*     $OpenBSD: grf_ulreg.h,v 1.3 1997/01/16 09:24:22 niklas Exp $    */
+/*     $NetBSD: grf_ulreg.h,v 1.4 1996/07/08 13:28:42 is Exp $ */
 
 /*
  * Copyright (c) 1995 Ignatios Souvatzis
@@ -14,7 +15,8 @@
  *    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 Lutz Vieweg.
+ *      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
  *
@@ -35,7 +37,7 @@
 
 struct gspregs {
        /*
-        * alas, they didn't invert the A1 bit, so be have to write the 
+        * alas, they didn't invert the A1 bit, so we have to write the 
         * address pointer in two parts
         */
        __volatile u_short hstadrl;
index 502af7b..7ea72a1 100644 (file)
@@ -15,6 +15,8 @@
 ;    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 contains 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 withough specific prior written permission
 ;
 ; assembler code for the TMS34010 CPU/graphics processor. 
 ;
 ; Use Paul Mackerras' gspa assembler to transfer it to hex format, then
-; Ignatios Souvatzis' hex2c utility (available from the author) or a small 
-; perl script to transform that into the form of grf_ultmscode.h. 
+; Ignatios Souvatzis' gpsahextoc utility to convert it to grf_ultmscode.h. 
 ; 
-; A modified gspa for this purpose will be released as soon as this
-; procedure is cleaned up. 
+; This has been integrated into the OpenBSD/Amiga kernel build procedure.
 ;
 
 ; memory map:
index ca4288c..2f862c0 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: grfabs_cc.c,v 1.4 1996/08/23 18:52:55 niklas Exp $    */
-/*     $NetBSD: grfabs_cc.c,v 1.12.4.1 1996/05/28 20:46:04 is Exp $    */
+/*     $OpenBSD: grfabs_cc.c,v 1.5 1997/01/16 09:24:25 niklas Exp $    */
+/*     $NetBSD: grfabs_cc.c,v 1.15 1996/10/13 03:07:09 christos Exp $  */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index b6da073..f8018fc 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: grfabs_ccreg.h,v 1.2 1997/01/16 09:24:27 niklas Exp $ */
 /*     $NetBSD: grfabs_ccreg.h,v 1.6 1995/10/05 12:41:19 chopps Exp $  */
 
 /*
index f7b9534..5a2f6f4 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: grfioctl.h,v 1.11.6.1 1996/06/04 10:22:00 is Exp $     */
+/*     $OpenBSD: grfioctl.h,v 1.3 1997/01/16 09:24:29 niklas Exp $     */
+/*     $NetBSD: grfioctl.h,v 1.12 1996/06/03 18:55:08 is Exp $ */
 
 /*
  * Copyright (c) 1988 University of Utah.
index 7735f01..4025c75 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: gtsc.c,v 1.4 1996/11/23 21:45:17 kstailey Exp $       */
-/*     $NetBSD: gtsc.c,v 1.15 1996/04/21 21:11:34 veego Exp $  */
+/*     $OpenBSD: gtsc.c,v 1.5 1997/01/16 09:24:30 niklas Exp $ */
+/*     $NetBSD: gtsc.c,v 1.20 1996/12/23 09:10:11 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index 1d85b80..cb39c05 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: gtscreg.h,v 1.2 1997/01/16 09:24:31 niklas Exp $      */
 /*     $NetBSD: gtscreg.h,v 1.2 1994/10/26 02:03:39 cgd Exp $  */
 
 /*
index d253668..3bc7a16 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: gvpbus.c,v 1.4 1996/11/23 21:45:18 kstailey Exp $     */
-/*     $NetBSD: gvpbus.c,v 1.11 1996/04/21 21:11:36 veego Exp $        */
+/*     $OpenBSD: gvpbus.c,v 1.5 1997/01/16 09:24:32 niklas Exp $       */
+/*     $NetBSD: gvpbus.c,v 1.15 1996/12/23 09:10:12 veego Exp $        */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index a3dc7f5..bf4cfb3 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: gvpbusvar.h,v 1.2 1997/01/16 09:24:33 niklas Exp $    */
 /*     $NetBSD: gvpbusvar.h,v 1.8 1995/08/18 15:27:55 chopps Exp $     */
 
 /*
index d2c90fd..c5528f9 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: idesc.c,v 1.7 1996/11/23 21:45:19 kstailey Exp $      */
-/*     $NetBSD: idesc.c,v 1.21.4.2 1996/05/30 03:20:14 mhitch Exp $    */
+/*     $OpenBSD: idesc.c,v 1.8 1997/01/16 09:24:34 niklas Exp $        */
+/*     $NetBSD: idesc.c,v 1.29 1996/12/23 09:10:12 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index 22e2fbe..893ab0d 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_ae.c,v 1.8 1996/08/23 18:53:04 niklas Exp $        */
-/*     $NetBSD: if_ae.c,v 1.8.4.1 1996/05/26 17:26:41 is Exp $ */
+/*     $OpenBSD: if_ae.c,v 1.9 1997/01/16 09:24:35 niklas Exp $        */
+/*     $NetBSD: if_ae.c,v 1.12 1996/12/23 09:10:13 veego Exp $ */
 
 /*
  * Copyright (c) 1995 Bernd Ernesti and Klaus Burkert. All rights reserved.
 #include <netinet/if_ether.h>
 #endif
 
+#ifdef NS
+#include <netns/ns.h>
+#include <netns/ns_if.h>
+#endif
+
+#if defined(CCITT) && defined(LLC)
+#include <sys/socketvar.h>  
+#include <netccitt/x25.h>
+#include <net/if_dl.h>
+#include <net/if_llc.h>
+#include <netccitt/dll.h>
+#include <netccitt/llc_var.h>
+#include <netccitt/pk.h> 
+#include <netccitt/pk_var.h>
+#include <netccitt/pk_extern.h>
+#endif  
+
 #if NBPFILTER > 0
 #include <net/bpf.h>
 #include <net/bpfdesc.h>
@@ -968,6 +985,22 @@ aeioctl(ifp, cmd, data)
                        aeinit(sc);     
                        arp_ifinit(&sc->sc_arpcom, ifa);
                        break;
+#endif
+#ifdef NS
+               case AF_NS:
+                   {
+                       register struct ns_addr *ina = &IA_SNS(ifa)->sns_addr;
+
+                       if (ns_nullhost(*ina))
+                               ina->x_host =
+                                   *(union ns_host *)(sc->sc_arpcom.ac_enaddr);
+                       else
+                               wcopyto(ina->x_host.c_host,
+                                   sc->sc_arpcom.ac_enaddr,
+                                   sizeof(sc->sc_arpcom.ac_enaddr));
+                       aeinit(sc); /* does ae_setaddr() */
+                       break;
+                   }
 #endif
                default:
                        aeinit(sc);
@@ -975,6 +1008,16 @@ aeioctl(ifp, cmd, data)
                }
                break;
 
+#if defined(CCITT) && defined(LLC)
+       case SIOCSIFCONF_X25:
+               ifp->if_flags |= IFF_UP;
+               ifa->ifa_rtrequest = cons_rtrequest; /* XXX */
+               error = x25_llcglue(PRC_IFUP, ifa->ifa_addr);
+               if (error == 0)
+                       aeinit(sc);
+               break;
+#endif /* CCITT && LLC */
+
        case SIOCSIFFLAGS:
                if ((ifp->if_flags & IFF_UP) == 0 &&
                    (ifp->if_flags & IFF_RUNNING) != 0) {
index 0d0ce51..c08eede 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: if_aereg.h,v 1.2 1997/01/16 09:24:37 niklas Exp $     */
 /*     $NetBSD: if_aereg.h,v 1.2 1995/08/18 15:53:32 chopps Exp $      */
 
 /*
index 4c63ea4..82abd45 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_bah.c,v 1.6 1996/05/09 22:39:59 niklas Exp $ */
-/*     $NetBSD: if_bah.c,v 1.18 1996/05/07 00:46:39 thorpej Exp $ */
+/*     $OpenBSD: if_bah.c,v 1.7 1997/01/16 09:24:38 niklas Exp $ */
+/*     $NetBSD: if_bah.c,v 1.25 1996/12/23 09:10:15 veego Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Ignatios Souvatzis
@@ -189,8 +189,8 @@ void        movepout __P((u_char *from, u_char __volatile *to, int len));
 void   movepin __P((u_char __volatile *from, u_char *to, int len));
 void   bah_srint __P((void *vsc, void *dummy));
 void   callstart __P((void *vsc, void *dummy));
-static void bah_tint __P((struct bah_softc *, int));
-
+__inline static void bah_tint __P((struct bah_softc *, int));
+void   bah_reconwatch(void *);
 
 struct cfattach bah_zbus_ca = {
        sizeof(struct bah_softc), bah_zbus_match, bah_zbus_attach
@@ -1048,10 +1048,8 @@ bahintr(arg)
                sc->sc_arccom.ac_if.if_collisions++;
 
                /*
-                * If more than 2 seconds per reconfig:
-                *      Reset time and counter.
-                * else:
-                *      If more than ARC_EXCESSIVE_RECONFIGS reconfigs
+!               * If less than 2 seconds per reconfig:
+!               *      If ARC_EXCESSIVE_RECONFIGS
                 *      since last burst, complain and set treshold for
                 *      warnings to ARC_EXCESSIVE_RECONS_REWARN.
                 *
@@ -1063,24 +1061,19 @@ bahintr(arg)
                 * time if necessary.
                 */
 
+               untimeout(bah_reconwatch, (void *)sc);
                newsec = time.tv_sec;
-               if (newsec - sc->sc_recontime > 2 * sc->sc_reconcount) {
-                       sc->sc_recontime = newsec;
-                       sc->sc_reconcount = 0;
-                       sc->sc_reconcount_excessive = ARC_EXCESSIVE_RECONS;
-               } else if (++sc->sc_reconcount > sc->sc_reconcount_excessive) {
-                       sc->sc_reconcount_excessive = 
-                           ARC_EXCESSIVE_RECONS_REWARN;
+               if ((newsec - sc->sc_recontime <= 2) && 
+                   (++sc->sc_reconcount == ARC_EXCESSIVE_RECONS)) {
                        log(LOG_WARNING,
                            "%s: excessive token losses, cable problem?\n",
                            sc->sc_dev.dv_xname);
-                       sc->sc_recontime = newsec;
-                       sc->sc_reconcount = 0;
                }
+               sc->sc_recontime = newsec;
+               timeout(bah_reconwatch, (void *)sc, 15*hz);
        }
 
        if (maskedisr & ARC_RI) {
-
 #if defined(BAH_DEBUG) && (BAH_DEBUG > 1)
                printf("%s: intr: hard rint, act %ld\n",
                    sc->sc_dev.dv_xname, sc->sc_rx_act);
@@ -1089,52 +1082,71 @@ bahintr(arg)
                buffer = sc->sc_rx_act;
                /* look if buffer is marked invalid: */
                if (sc->sc_base->buffers[buffer*512*2] == 0) {
-       /* invalid marked buffer (or illegally configured sender) */
+                       /*
+                        * invalid marked buffer (or illegally configured
+                        * sender)
+                        */
                        log(LOG_WARNING, 
                            "%s: spurious RX interrupt or sender 0 (ignored)\n",
                            sc->sc_dev.dv_xname);
                        /*
                         * restart receiver on same buffer.
+                        * XXX maybe better reset interface?
                         */
                        sc->sc_base->command = ARC_RXBC(buffer);
-
-               } else if (++sc->sc_rx_fillcount > 1) {
-                       sc->sc_intmask &= ~ARC_RI;
-                       sc->sc_base->status = sc->sc_intmask;
                } else {
-
-                       buffer ^= 1;
-                       sc->sc_rx_act = buffer;
-
-                       /*
-                        * Start receiver on other receive buffer.
-                        * This also clears the RI interupt flag.
-                        */
-                       sc->sc_base->command = ARC_RXBC(buffer);
-                       /* we are in the RX intr, so mask is ok for RX */
-
+                       if (++sc->sc_rx_fillcount > 1) {
+                               sc->sc_intmask &= ~ARC_RI;
+                               sc->sc_base->status = sc->sc_intmask;
+                       } else {
+
+                               buffer ^= 1;
+                               sc->sc_rx_act = buffer;
+
+                               /*
+                                * Start receiver on other receive buffer.
+                                * This also clears the RI interupt flag.
+                                */
+                               sc->sc_base->command = ARC_RXBC(buffer);
+                               /* in the RX intr, so mask is ok for RX */
+       
 #ifdef BAH_DEBUG
-                       printf("%s: started rx for buffer %ld, status 0x%02x\n",
-                           sc->sc_dev.dv_xname, sc->sc_rx_act,
-                           sc->sc_base->status);
+                               printf("%s: strt rx for buf %ld, stat 0x%02x\n",
+                                   sc->sc_dev.dv_xname, sc->sc_rx_act,
+                                   sc->sc_base->status);
 #endif
-               }
-
+                       }
+       
 #ifdef BAHSOFTCOPY
-               /* this one starts a soft int to copy out of the hw */
-               add_sicallback((sifunc_t)bah_srint, sc,NULL);
+                       /* this one starts a soft int to copy out of the hw */
+                       add_sicallback((sifunc_t)bah_srint, sc,NULL);
 #else
-               /* this one does the copy here */
-               bah_srint(sc,NULL);
+                       /* this one does the copy here */
+                       bah_srint(sc,NULL);
 #endif
+               }
        }
-
-       if (maskedisr & ARC_TA) 
+       if (maskedisr & ARC_TA) {
                bah_tint(sc, isr);
+       }
 
        return (1);
 }
 
+void
+bah_reconwatch(arg)
+       void *arg;
+{
+       struct bah_softc *sc = arg;
+
+       if (sc->sc_reconcount >= ARC_EXCESSIVE_RECONS) {
+               sc->sc_reconcount = 0;
+               log(LOG_WARNING, "%s: token valid again.\n",
+                   sc->sc_dev.dv_xname);
+       }
+       sc->sc_reconcount = 0;
+}
+
 /*
  * Process an ioctl request. 
  * This code needs some work - it looks pretty ugly.
@@ -1147,11 +1159,13 @@ bah_ioctl(ifp, command, data)
 {
        struct bah_softc *sc;
        register struct ifaddr *ifa;
+       struct ifreq *ifr;
        int s, error;
 
        error = 0;
        sc = ifp->if_softc;
        ifa = (struct ifaddr *)data;
+       ifr = (struct ifreq *)data;
        s = splnet();
 
 #if defined(BAH_DEBUG) && (BAH_DEBUG > 2) 
@@ -1192,7 +1206,13 @@ bah_ioctl(ifp, command, data)
                } 
                break;
 
-               /* Multicast not supported */
+       case SIOCADDMULTI:
+       case SIOCDELMULTI:
+               if (ifr->ifr_addr.sa_family == AF_INET)
+                       error = 0;
+               else
+                       error = EAFNOSUPPORT;
+               break;
 
        default:
                error = EINVAL;
index 568d8c4..4b95047 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: if_bahreg.h,v 1.2 1997/01/16 09:24:39 niklas Exp $ */
 /*     $NetBSD: if_bahreg.h,v 1.4 1995/06/07 00:16:59 cgd Exp $ */
 
 /*
index 4f5133b..2e287ef 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_ed.c,v 1.8 1996/10/04 15:11:40 niklas Exp $        */
-/*     $NetBSD: if_ed.c,v 1.21 1996/05/07 00:46:41 thorpej Exp $       */
+/*     $OpenBSD: if_ed.c,v 1.9 1997/01/16 09:24:40 niklas Exp $        */
+/*     $NetBSD: if_ed.c,v 1.24 1996/12/23 09:10:16 veego Exp $ */
 
 /*
  * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
 #include <netinet/if_ether.h>
 #endif
 
+#ifdef NS
+#include <netns/ns.h>
+#include <netns/ns_if.h>
+#endif
+
 #if NBPFILTER > 0
 #include <net/bpf.h>
 #include <net/bpfdesc.h>
@@ -885,6 +890,24 @@ ed_ioctl(ifp, command, data)
                        ed_init(sc);
                        arp_ifinit(&sc->sc_arpcom, ifa);
                        break;
+#endif
+#ifdef NS
+               /* XXX - This code is probably wrong. */
+               case AF_NS:
+                   {
+                       register struct ns_addr *ina = &IA_SNS(ifa)->sns_addr;
+
+                       if (ns_nullhost(*ina))
+                               ina->x_host =
+                                   *(union ns_host *)(sc->sc_arpcom.ac_enaddr);
+                       else
+                               bcopy(ina->x_host.c_host,
+                                   sc->sc_arpcom.ac_enaddr,
+                                   sizeof(sc->sc_arpcom.ac_enaddr));
+                       /* Set new address. */
+                       ed_init(sc);
+                       break;
+                   }
 #endif
                default:
                        ed_init(sc);
index 10c8c82..57aca32 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: if_edreg.h,v 1.2 1997/01/16 09:24:41 niklas Exp $     */
 /*     $NetBSD: if_edreg.h,v 1.4 1995/05/08 02:40:54 chopps Exp $      */
 
 /*
index 798b7f9..11a6a0b 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_es.c,v 1.9 1996/05/09 22:40:01 niklas Exp $        */
-/*     $NetBSD: if_es.c,v 1.13 1996/05/07 00:46:44 thorpej Exp $       */
+/*     $OpenBSD: if_es.c,v 1.10 1997/01/16 09:24:43 niklas Exp $       */
+/*     $NetBSD: if_es.c,v 1.16 1996/12/23 09:10:17 veego Exp $ */
 
 /*
  * Copyright (c) 1995 Michael L. Hitch
 #include <netinet/if_ether.h>
 #endif
 
+#ifdef NS
+#include <netns/ns.h>
+#include <netns/ns_if.h>
+#endif
+
 #include <machine/cpu.h>
 #include <machine/mtpr.h>
 #include <amiga/amiga/device.h>
@@ -983,6 +988,23 @@ esioctl(ifp, command, data)
                        esinit(sc);
                        arp_ifinit(&sc->sc_arpcom, ifa);
                        break;
+#endif
+#ifdef NS
+               case AF_NS:
+                   {
+                       register struct ns_addr *ina = &IA_SNS(ifa)->sns_addr;
+
+                       if (ns_nullhost(*ina))
+                               ina->x_host =
+                                   *(union ns_host *)(sc->sc_arpcom.ac_enaddr);
+                       else
+                               bcopy(ina->x_host.c_host,
+                                   sc->sc_arpcom.ac_enaddr,
+                                   sizeof(sc->sc_arpcom.ac_enaddr));
+                       /* Set new address. */
+                       esinit(sc);
+                       break;
+                   }
 #endif
                default:
                        esinit(sc);
index e3cb9d4..86e8456 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: if_esreg.h,v 1.3 1997/01/16 09:24:44 niklas Exp $     */
 /*     $NetBSD: if_esreg.h,v 1.4 1996/05/01 15:51:08 mhitch Exp $      */
 
 /*
index 7aaa518..cefc8b4 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_le.c,v 1.5 1996/05/09 22:43:24 niklas Exp $        */
-/*     $NetBSD: if_le.c,v 1.21 1996/05/07 00:35:07 thorpej Exp $       */
+/*     $OpenBSD: if_le.c,v 1.6 1997/01/16 09:24:45 niklas Exp $        */
+/*     $NetBSD: if_le.c,v 1.22 1996/12/23 09:10:18 veego Exp $ */
 
 /*-
  * Copyright (c) 1995 Charles M. Hannum.  All rights reserved.
index 97dc943..d57d27b 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_le_zbus.c,v 1.5 1996/05/09 22:43:24 niklas Exp $   */
-/*     $NetBSD: if_le.c,v 1.21 1996/05/07 00:35:07 thorpej Exp $       */
+/*     $OpenBSD: if_le_zbus.c,v 1.6 1997/01/16 09:24:45 niklas Exp $   */
+/*     $NetBSD: if_le.c,v 1.22 1996/12/23 09:10:18 veego Exp $ */
 
 /*-
  * Copyright (c) 1995 Charles M. Hannum.  All rights reserved.
index eba8567..46909ff 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: if_qn.c,v 1.8 1996/05/09 22:40:02 niklas Exp $        */
-/*     $NetBSD: if_qn.c,v 1.6 1996/05/07 00:46:47 thorpej Exp $        */
+/*     $OpenBSD: if_qn.c,v 1.9 1997/01/16 09:24:47 niklas Exp $        */
+/*     $NetBSD: if_qn.c,v 1.10 1996/12/23 09:10:19 veego Exp $ */
 
 /*
  * Copyright (c) 1995 Mika Kortelainen
@@ -71,6 +71,7 @@
 
 #define QN_DEBUG
 #define QN_DEBUG1_no /* hides some old tests */
+#define QN_CHECKS_no /* adds some checks (not needed in normal situations) */
 
 #include "bpfilter.h"
 
 #include <netinet/if_ether.h>
 #endif
 
+#ifdef NS
+#include <netns/ns.h>
+#include <netns/ns_if.h>
+#endif
+
 #include <machine/cpu.h>
 #include <machine/mtpr.h>
 #include <amiga/amiga/device.h>
@@ -163,9 +169,9 @@ void        qnstop __P((struct qn_softc *));
 static u_short qn_put __P((u_short volatile *, struct mbuf *));
 static void qn_rint __P((struct qn_softc *, u_short));
 static void qn_flush __P((struct qn_softc *));
-static void inline word_copy_from_card __P((u_short volatile *, u_short *, u_short));
-static void inline word_copy_to_card __P((u_short *, u_short volatile *, u_short));
-static void qn_get_packet __P((struct qn_softc *, u_short)); 
+static void __inline word_copy_from_card __P((u_short volatile *, u_short *, u_short));
+static void __inline word_copy_to_card __P((u_short *, u_short volatile *, u_short));
+void   qn_get_packet __P((struct qn_softc *, u_short)); 
 #ifdef QN_DEBUG1
 static void qn_dump __P((struct qn_softc *));
 #endif
@@ -426,7 +432,6 @@ qnstart(ifp)
         * that RAM is not visible to the host but is read from FIFO)
         *
         */
-       log(LOG_INFO, "NBPFILTER... no-one has tested this with qn.\n");
        if (sc->sc_bpf)
                bpf_mtap(sc->sc_bpf, m);
 #endif
@@ -462,7 +467,7 @@ qnstart(ifp)
 /*
  * Memory copy, copies word at a time
  */
-static void inline
+static void __inline
 word_copy_from_card(card, b, len)
        u_short volatile *card;
        u_short *b, len;
@@ -473,15 +478,13 @@ word_copy_from_card(card, b, len)
                *b++ = *card;
 }
 
-static void inline
+static void __inline
 word_copy_to_card(a, card, len)
        u_short *a;
        u_short volatile *card;
        u_short len;
 {
-       register u_short l = len/2;
-
-       while (l--)
+       while (len--)
                *card = *a++;
 }
 
@@ -492,13 +495,14 @@ word_copy_to_card(a, card, len)
  * unless the whole packet fits in one mbuf.
  *
  */
-static u_short
+u_short
 qn_put(addr, m)
        u_short volatile *addr;
        struct mbuf *m;
 {
-       u_short *data, savebyte[2];
-       int len, wantbyte;
+       u_short *data;
+       u_char savebyte[2];
+       int len, len1, wantbyte;
        u_short totlen;
 
        totlen = wantbyte = 0;
@@ -508,23 +512,26 @@ qn_put(addr, m)
                len = m->m_len;
                totlen += len;
                if (len > 0) {
+                       totlen += len;
+
                        /* Finish the last word. */
                        if (wantbyte) {
-                               savebyte[1] = *data;
+                               savebyte[1] = *((u_char *)data);
                                *addr = *((u_short *)savebyte);
-                               data++;
+                               ((u_char *)data)++;
                                len--;
                                wantbyte = 0;
                        }
                        /* Output contiguous words. */
                        if (len > 1) {
-                               word_copy_to_card(data, addr, len);
-                               data += len & ~1;
+                               len1 = len/2;
+                               word_copy_to_card(data, addr, len1);
+                               data += len1;
                                len &= 1;
                        }
                        /* Save last byte, if necessary. */
                        if (len == 1) {
-                               savebyte[0] = *data;
+                               savebyte[0] = *((u_char *)data);
                                wantbyte = 1;
                        }
                }
@@ -554,7 +561,7 @@ qn_put(addr, m)
  * Trailers not supported.
  *
  */
-static void
+void
 qn_get_packet(sc, len)
        struct qn_softc *sc;
        u_short len;
@@ -621,7 +628,6 @@ qn_get_packet(sc, len)
        }
 
 #if NBPFILTER > 0
-       log(LOG_INFO, "qn: Beware, an untested code section\n");
        if (sc->sc_bpf) {
                bpf_mtap(sc->sc_bpf, head);
 
@@ -671,25 +677,25 @@ qn_rint(sc, rstat)
         * Some of them are senseless because they are masked off.
         * XXX
         */
-       if (rstat & 0x0101) {
+       if (rstat & R_INT_OVR_FLO) {
 #ifdef QN_DEBUG
                log(LOG_INFO, "Overflow\n");
 #endif
                ++sc->sc_arpcom.ac_if.if_ierrors;
        }
-       if (rstat & 0x0202) {
+       if (rstat & R_INT_CRC_ERR) {
 #ifdef QN_DEBUG
                log(LOG_INFO, "CRC Error\n");
 #endif
                ++sc->sc_arpcom.ac_if.if_ierrors;
        }
-       if (rstat & 0x0404) {
+       if (rstat & R_INT_ALG_ERR) {
 #ifdef QN_DEBUG
                log(LOG_INFO, "Alignment error\n");
 #endif
                ++sc->sc_arpcom.ac_if.if_ierrors;
        }
-       if (rstat & 0x0808) {
+       if (rstat & R_INT_SRT_PKT) {
                /* Short packet (these may occur and are
                 * no reason to worry about - or maybe
                 * they are?).
@@ -732,7 +738,7 @@ qn_rint(sc, rstat)
                len = *sc->nic_fifo;
                len = ((len << 8) & 0xff00) | ((len >> 8) & 0x00ff);
 
-#ifdef QN_DEBUG
+#ifdef QN_CHECKS
                if (len > ETHER_MAX_LEN || len < ETHER_HDR_SIZE) {
                        log(LOG_WARNING,
                            "%s: received a %s packet? (%u bytes)\n",
@@ -742,7 +748,7 @@ qn_rint(sc, rstat)
                        continue;
                }
 #endif
-#ifdef QN_DEBUG
+#ifdef QN_CHECKS
                if (len < ETHER_MIN_LEN)
                        log(LOG_WARNING,
                            "%s: received a short packet? (%u bytes)\n",
@@ -889,6 +895,23 @@ qnioctl(ifp, command, data)
                        qninit(sc);
                        arp_ifinit(&sc->sc_arpcom, ifa);
                        break;
+#endif
+#ifdef NS
+               case AF_NS:
+                   {
+                       register struct ns_addr *ina = &(IA_SNS(ifa)->sns_addr);
+
+                       if (ns_nullhost(*ina))
+                               ina->x_host =
+                                   *(union ns_host *)(sc->sc_arpcom.ac_enaddr);
+                       else
+                               bcopy(ina->x_host.c_host,
+                                   sc->sc_arpcom.ac_enaddr,
+                                   sizeof(sc->sc_arpcom.ac_enaddr));
+                       qnstop(sc);
+                       qninit(sc);
+                       break;
+                   }
 #endif
                default:
                        log(LOG_INFO, "qn:sa_family:default (not tested)\n");
index 2094db7..91ae2fc 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: if_qnreg.h,v 1.1.2.1 1995/11/10 16:39:14 chopps Exp $  */
+/*     $OpenBSD: if_qnreg.h,v 1.3 1997/01/16 09:24:48 niklas Exp $     */
+/*     $NetBSD: if_qnreg.h,v 1.2 1995/11/30 00:57:04 jtc Exp $ */
 
 /*
  * Copyright (c) 1995 Mika Kortelainen
index 5b32e74..48d5142 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: ite.c,v 1.8 1996/08/23 18:53:07 niklas Exp $  */
-/*     $NetBSD: ite.c,v 1.41.4.1 1996/06/06 04:53:13 mhitch Exp $      */
+/*     $OpenBSD: ite.c,v 1.9 1997/01/16 09:24:50 niklas Exp $  */
+/*     $NetBSD: ite.c,v 1.47 1996/12/23 09:10:20 veego Exp $   */
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -163,7 +163,7 @@ itematch(pdp, match, auxp)
        struct device *pdp;
        void *match, *auxp;
 {
-       struct cfdata *cdp = match;
+       struct cfdata *cfp = match;
        struct grf_softc *gp;
        int maj;
        
@@ -172,7 +172,7 @@ itematch(pdp, match, auxp)
         * all that our mask allows (more than enough no one 
         * has > 32 monitors for text consoles on one machine)
         */
-       if (cdp->cf_unit >= sizeof(ite_confunits) * NBBY)
+       if (cfp->cf_unit >= sizeof(ite_confunits) * NBBY)
                return(0);
        /*
         * XXX
@@ -183,7 +183,7 @@ itematch(pdp, match, auxp)
        for(maj = 0; maj < nchrdev; maj++)
                if (cdevsw[maj].d_open == iteopen)
                        break;
-       gp->g_itedev = makedev(maj, cdp->cf_unit);
+       gp->g_itedev = makedev(maj, cfp->cf_unit);
        return(1);
 }
 
index 6cfb981..0942bb0 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: ite_et.c,v 1.1.4.1 1996/05/27 01:12:10 is Exp $        */
+/*     $OpenBSD: ite_et.c,v 1.3 1997/01/16 09:24:51 niklas Exp $       */
+/*     $NetBSD: ite_et.c,v 1.2 1996/10/08 23:18:54 thorpej Exp $       */
 
 /*
  * Copyright (c) 1995 Ezra Story
index b9bc4aa..0e6646c 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: ite_ul.c,v 1.4 1996/05/10 13:02:35 is Exp $    */
+/*     $OpenBSD: ite_ul.c,v 1.4 1997/01/16 09:24:52 niklas Exp $       */
+/*     $NetBSD: ite_ul.c,v 1.7 1996/10/13 03:07:20 christos Exp $      */
 
 /*
  * Copyright (c) 1995 Ignatios Souvatzis
@@ -14,7 +15,8 @@
  *    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 Lutz Vieweg.
+ *      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
  *
index 4236d64..d9ffc98 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: iteioctl.h,v 1.2 1997/01/16 09:24:53 niklas Exp $     */
 /*     $NetBSD: iteioctl.h,v 1.9 1994/10/26 02:04:02 cgd Exp $ */
 
 /*
index 27db9e1..6ff8c73 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: ivsc.c,v 1.4 1996/11/23 21:45:19 kstailey Exp $       */
-/*     $NetBSD: ivsc.c,v 1.15 1996/04/21 21:12:04 veego Exp $  */
+/*     $OpenBSD: ivsc.c,v 1.5 1997/01/16 09:24:54 niklas Exp $ */
+/*     $NetBSD: ivsc.c,v 1.21 1996/12/23 09:10:21 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index 14a1825..e3fe894 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: kbd.c,v 1.4 1996/05/29 10:15:33 niklas Exp $  */
-/*     $NetBSD: kbd.c,v 1.22 1996/05/16 20:18:01 is Exp $      */
+/*     $OpenBSD: kbd.c,v 1.5 1997/01/16 09:24:55 niklas Exp $  */
+/*     $NetBSD: kbd.c,v 1.28 1996/12/23 09:10:22 veego Exp $   */
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -152,7 +152,6 @@ kbdenable()
                        ciaa.icr = CIA_ICR_IR_SC | CIA_ICR_SP;
                                                /* SP interrupt enable */
                        ciaa.cra &= ~(1<<6);    /* serial line == input */
-                       printf("ok.\n");
                        break;
                case 1:
                case 2:
@@ -175,7 +174,6 @@ kbdenable()
                        while (draco_ioct->io_status & DRSTAT_KBDRECV) {
                                c = draco_ioct->io_kbddata;
                                draco_ioct->io_kbdrst = 0;
-                               printf(".");
                                DELAY(2000);
                        }
 
@@ -335,7 +333,7 @@ kbdintr(mask)
 #ifdef DRACO
 /* maps MF-II keycodes to Amiga keycodes */
 
-u_char drkbdtab[] = {
+const u_char drkbdtab[] = {
        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50,
        0x45, 0xff, 0xff, 0xff, 0xff, 0x42, 0x00, 0x51,
 
index 4f970d0..1807c4a 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: kbdreg.h,v 1.2 1997/01/16 09:24:56 niklas Exp $       */
 /*     $NetBSD: kbdreg.h,v 1.5 1994/10/26 02:04:14 cgd Exp $   */
 
 /*
index dc25971..c44a9a2 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: kf_8x11.c,v 1.2 1997/01/16 09:24:58 niklas Exp $      */
 /*     $NetBSD: kf_8x11.c,v 1.3 1994/10/26 02:04:16 cgd Exp $  */
 
 /*
index 2b3ece8..2d593f0 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: kf_8x8.c,v 1.2 1997/01/16 09:24:59 niklas Exp $       */
 /*     $NetBSD: kf_8x8.c,v 1.3 1994/10/26 02:04:18 cgd Exp $   */
 
 /*
index 22d4768..3d6cd5b 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: mfc.c,v 1.9 1996/11/23 21:45:20 kstailey Exp $ */
-/*     $NetBSD: mfc.c,v 1.12.4.1 1996/06/06 04:53:16 mhitch Exp $ */
+/*     $OpenBSD: mfc.c,v 1.10 1997/01/16 09:25:01 niklas Exp $ */
+/*     $NetBSD: mfc.c,v 1.18 1996/12/23 09:10:23 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index de282ad..2a13f94 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: mlhsc.c,v 1.4 1996/11/23 21:45:21 kstailey Exp $      */
-/*     $NetBSD: mlhsc.c,v 1.10 1996/04/21 21:12:12 veego Exp $ */
+/*     $OpenBSD: mlhsc.c,v 1.5 1997/01/16 09:25:02 niklas Exp $        */
+/*     $NetBSD: mlhsc.c,v 1.16 1996/12/23 09:10:25 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index 4e14bef..b994de2 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: ms.c,v 1.3 1996/05/29 10:15:35 niklas Exp $   */
-/*     $NetBSD: ms.c,v 1.10 1996/05/09 20:31:41 is Exp $       */
+/*     $OpenBSD: ms.c,v 1.4 1997/01/16 09:25:03 niklas Exp $   */
+/*     $NetBSD: ms.c,v 1.14 1996/12/23 09:10:25 veego Exp $    */
 
 /*
  * based on:
index d8828ed..eb4d51d 100644 (file)
@@ -1,9 +1,9 @@
-/*     $OpenBSD: msc.c,v 1.5 1996/08/23 18:53:14 niklas Exp $ */
-/*     $NetBSD: msc.c,v 1.6.4.1 1996/06/06 04:53:17 mhitch Exp $ */
+/*     $OpenBSD: msc.c,v 1.6 1997/01/16 09:25:04 niklas Exp $ */
+/*     $NetBSD: msc.c,v 1.13 1996/12/23 09:10:26 veego Exp $   */
 
 /*
  * Copyright (c) 1993 Zik.
- * Copyright (c) 1995 Jukka Marin <jmarin@teeri.jmp.fi>.
+ * Copyright (c) 1995 Jukka Marin <jmarin@jmp.fi>.
  * Copyright (c) 1995 Timo Rossi <trossi@jyu.fi>.
  * Copyright (c) 1995 Rob Healey <rhealey@kas.helios.mn.org>.
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -49,6 +49,7 @@
  *     Integrated more bug fixes by Jukka Marin <jmarin@jmp.fi> 950918
  *     Also added Jukka's turbo board code. 950918
  *   - Reformatted to NetBSD style format.
+ *   - Rewritten the carrier detect system to prevent lock-ups (jm 951029)
  */
 
 #include "msc.h"
@@ -121,8 +122,8 @@ struct      vbl_node msc_vbl_node[NMSC];    /* vbl interrupt node per board */
 struct speedtab mscspeedtab_normal[] = {
        { 0,            0               },
        { 50,           MSCPARAM_B50    },
-       { 75,           MSCPARAM_B75    },
-       { 110,          MSCPARAM_B110   },
+       { 75,           MSCPARAM_B75    },
+       { 110,          MSCPARAM_B110   },
        { 134,          MSCPARAM_B134   },
        { 150,          MSCPARAM_B150   },
        { 300,          MSCPARAM_B300   },
@@ -169,7 +170,6 @@ int mscmatch __P((struct device *, void *, void *));
 void mscattach __P((struct device *, struct device *, void *));
 
 #define        SWFLAGS(dev)    (msc->openflags | (MSCDIALIN(dev) ? 0 : TIOCFLAG_SOFTCAR))
-#define        DEBUG_MSC       0
 #define        DEBUG_CD        0
 
 struct cfattach msc_ca = {
@@ -180,30 +180,6 @@ struct cfdriver msc_cd = {
        NULL, "msc",DV_TTY, NULL, 0
 };
 
-#if DEBUG_MSC
-void
-bugi(msc, string)
-       struct mscdevice *msc;
-       char *string;
-{
-       volatile struct mscstatus *ms;
-       volatile struct mscmemory *mscmem;
-
-       mscmem = msc->board;
-       ms = &mscmem->Status[msc->port];
-
-       printf("msc  %s u%d f%08lx F%08lx\n", string, msc->port, msc->flags,
-               msc->openflags);
-       printf("msc  h%d t%d H%d t%d p%02x c%02x CD%02x\n", ms->InHead,
-               ms->InTail, ms->OutHead, ms->OutTail, ms->Param, ms->Command,
-               ms->chCD);
-       printf("msc  a%02x b%02x c%02x\n", ms->Pad_a, ms->Pad_b, ms->Padc);
-
-       return
-}
-       
-#endif
-
 int
 mscmatch(pdp, match, auxp)
        struct device *pdp;
@@ -223,65 +199,72 @@ mscattach(pdp, dp, auxp)
        struct device *pdp, *dp;
        void *auxp;
 {
-  volatile struct mscmemory *mscmem;
-  struct mscdevice *msc;
-  struct zbus_args *zap;
-  int unit;
-  int Count;
-
-  zap = (struct zbus_args *)auxp;
-  unit = dp->dv_unit;
-
-  if (mscinitcard(zap) != 0) {
-    printf("\nmsc%d: Board initialize failed, bad download code.\n", unit);
-    return;
-  }
-
-  printf("\nmsc%d: Board successfully initialized.\n", unit);
-
-  mscmem = (struct mscmemory *) zap->va;
-
-  if (mscmem->Common.Crystal == MSC_UNKNOWN) {
-       printf("msc%d: Unable to detect crystal frequency.\n", unit);
-       return;
-  }
-
-  if (mscmem->Common.Crystal == MSC_TURBO) {
-       printf("msc%d: Turbo version detected (%02x%02x:%d)\n", unit,
-               mscmem->Common.TimerH, mscmem->Common.TimerL,
-               mscmem->Common.Pad_a);
-       mscspeedtab = mscspeedtab_turbo;
-  } else {
-       printf("msc%d: Normal version detected (%02x%02x:%d)\n", unit,
-               mscmem->Common.TimerH, mscmem->Common.TimerL,
-               mscmem->Common.Pad_a);
-       mscspeedtab = mscspeedtab_normal;
-  }
-
-  /* XXX 8 is a constant */
-  for (Count = 0; Count < 8 && MSCSLOTUL(unit, Count) < MSCSLOTS; Count++) {
-    msc = &mscdev[MSCSLOTUL(unit, Count)];
-    msc->board = mscmem;
-    msc->port = Count;
-    msc->flags = 0;
-    msc->openflags = 0;
-    msc->active = 1;
-    msc->closing = FALSE;
-    msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, Count))] = NULL;
-    msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, Count))+1] = NULL;
-
-  }
-
-  /* disable the non-existant eighth port */
-  if (MSCSLOTUL(unit, NUMLINES) < MSCSLOTS)
-    mscdev[MSCSLOTUL(unit, NUMLINES)].active = 0;
-
-  msc_vbl_node[unit].function = (void (*) (void *)) mscmint;
-  msc_vbl_node[unit].data = (void *) unit;
-
-  add_vbl_function (&msc_vbl_node[unit], MSC_VBL_PRIORITY, (void *)unit);
-
-  return; 
+       volatile struct mscmemory *mscmem;
+       struct mscdevice *msc;
+       struct zbus_args *zap;
+       int unit;
+       int Count;
+
+       zap = (struct zbus_args *)auxp;
+       unit = dp->dv_unit;
+
+       /*
+        * Make config msgs look nicer.
+        */
+       printf("\n");
+
+       if (mscinitcard(zap) != 0) {
+               printf("msc%d: Board initialize failed, bad download code.\n", unit);
+               return;
+       }
+
+       printf("msc%d: Board successfully initialized.\n", unit);
+
+       mscmem = (struct mscmemory *) zap->va;
+
+       if (mscmem->Common.Crystal == MSC_UNKNOWN) {
+               printf("msc%d: Unable to detect crystal frequency.\n", unit);
+               return;
+       }
+
+       if (mscmem->Common.Crystal == MSC_TURBO) {
+               printf("msc%d: Turbo version detected (%02x%02x:%d)\n", unit,
+                       mscmem->Common.TimerH, mscmem->Common.TimerL,
+                       mscmem->Common.Pad_a);
+               mscspeedtab = mscspeedtab_turbo;
+       } else {
+               printf("msc%d: Normal version detected (%02x%02x:%d)\n", unit,
+                       mscmem->Common.TimerH, mscmem->Common.TimerL,
+                       mscmem->Common.Pad_a);
+               mscspeedtab = mscspeedtab_normal;
+       }
+
+       mscmem->Common.CDStatus = 0;    /* common status for all 7 ports */
+
+       /* XXX 8 is a constant */
+       for (Count = 0; Count < 8 && MSCSLOTUL(unit, Count) < MSCSLOTS; Count++) {
+               msc = &mscdev[MSCSLOTUL(unit, Count)];
+               msc->board = mscmem;
+               msc->port = Count;
+               msc->flags = 0;
+               msc->openflags = 0;
+               msc->active = 1;
+               msc->unit = unit;
+               msc->closing = FALSE;
+               msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, Count))] = NULL;
+               msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, Count)) + 1] = NULL;
+       }
+
+       /* disable the non-existant eighth port */
+       if (MSCSLOTUL(unit, NUMLINES) < MSCSLOTS)
+               mscdev[MSCSLOTUL(unit, NUMLINES)].active = 0;
+
+       msc_vbl_node[unit].function = (void (*) (void *)) mscmint;
+       msc_vbl_node[unit].data = (void *) unit;
+
+       add_vbl_function (&msc_vbl_node[unit], MSC_VBL_PRIORITY, (void *)unit);
+
+       return; 
 }
 
 /* ARGSUSED */
@@ -291,159 +274,155 @@ mscopen(dev, flag, mode, p)
        int flag, mode;
        struct proc *p;
 {
-  register struct tty *tp;
-  int error = 0;
-  int s;
-  int slot;
-  int ttyn;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
+       register struct tty *tp;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       int error = 0;
+       int s, slot, ttyn;
   
-  /* get the device structure */
-  slot = MSCSLOT(dev);
-  ttyn = MSCTTY(dev);
+       /* get the device structure */
+       slot = MSCSLOT(dev);
+       ttyn = MSCTTY(dev);
 
-  if (slot >= MSCSLOTS)
-    return ENXIO;
+       if (slot >= MSCSLOTS)
+               return ENXIO;
 
-  if (MSCLINE(dev) >= NUMLINES)
-    return ENXIO;
+       if (MSCLINE(dev) >= NUMLINES)
+               return ENXIO;
 
-  msc = &mscdev[slot];
-  ms = &msc->board->Status[msc->port];
+       msc = &mscdev[slot];
+       ms = &msc->board->Status[msc->port];
 
-  if (!msc->active)
-    return ENXIO;
+       if (!msc->active)
+               return ENXIO;
 
-  /*
-   * RFH: WHY here? Put down by while like other serial drivers
-   *      But if we do that it makes things bomb.
-   */
-  s = spltty();
+       /*
+        * RFH: WHY here? Put down by while like other serial drivers
+        *      But if we do that it makes things bomb.
+        */
+       s = spltty();
 
-  if (!msc_tty[ttyn]) {
+       if (!msc_tty[ttyn]) {
 
-      tp = ttymalloc();
-      tty_attach(tp);
-      msc_tty[ttyn] = tp;
-      msc_tty[ttyn+1] = (struct tty *)NULL;
+               tp = ttymalloc();
+               tty_attach(tp);
+               msc_tty[ttyn] = tp;
+               msc_tty[ttyn+1] = (struct tty *)NULL;
 
 #if 0
-      /* default values are not optimal for this device, increase buffers. */
-      clfree(&tp->t_rawq);
-      clfree(&tp->t_canq);
-      clfree(&tp->t_outq);
-      clalloc(&tp->t_rawq, 8192, 1);
-      clalloc(&tp->t_canq, 8192, 1);
-      clalloc(&tp->t_outq, 8192, 0);
+               /* default values are not optimal for this device, increase buffers. */
+               clfree(&tp->t_rawq);
+               clfree(&tp->t_canq);
+               clfree(&tp->t_outq);
+               clalloc(&tp->t_rawq, 8192, 1);
+               clalloc(&tp->t_canq, 8192, 1);
+               clalloc(&tp->t_outq, 8192, 0);
 #endif
 
-  } 
-  else
-    tp = msc_tty[ttyn];
+       } else
+               tp = msc_tty[ttyn];
 
-  tp->t_oproc = (void (*) (struct tty *)) mscstart;
-  tp->t_param = mscparam;
-  tp->t_dev = dev;
-  tp->t_hwiflow = mschwiflow;
+       tp->t_oproc = (void (*) (struct tty *)) mscstart;
+       tp->t_param = mscparam;
+       tp->t_dev = dev;
+       tp->t_hwiflow = mschwiflow;
  
-  /* if port is still closing, just bitbucket remaining characters */
-  if (msc->closing) {
-
-      ms->OutFlush = TRUE;
-      msc->closing = FALSE;
-  }
-
-  /* initialize tty */
-  if ((tp->t_state & TS_ISOPEN) == 0) {
-
-      tp->t_state |= TS_WOPEN;
-      ttychars(tp);
-      if (tp->t_ispeed == 0) {
-
-         tp->t_iflag = TTYDEF_IFLAG;
-         tp->t_oflag = TTYDEF_OFLAG;
-         tp->t_cflag = TTYDEF_CFLAG;
-         tp->t_lflag = TTYDEF_LFLAG;
-         tp->t_ispeed = tp->t_ospeed = mscdefaultrate;
-      }
-
-      /* flags changed to be private to every unit by JM */
-      if (msc->openflags & TIOCFLAG_CLOCAL)
-               tp->t_cflag |= CLOCAL;
-      if (msc->openflags & TIOCFLAG_CRTSCTS)
-               tp->t_cflag |= CRTSCTS;
-      if (msc->openflags & TIOCFLAG_MDMBUF)
-               tp->t_cflag |= MDMBUF;
-
-      mscparam(tp, &tp->t_termios);
-      ttsetwater(tp);
-
-      (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMSET);
-
-      if ((SWFLAGS(dev) & TIOCFLAG_SOFTCAR) ||
-         (mscmctl(dev, 0, DMGET) & TIOCM_CD))
-            tp->t_state |= TS_CARR_ON;
-      else
-            tp->t_state &= ~TS_CARR_ON;
-
-  } 
-  else {
-        if (tp->t_state & TS_XCLUDE && p->p_ucred->cr_uid != 0) {
-           splx(s);
-           return (EBUSY);
-       }
-  }
+       /* if port is still closing, just bitbucket remaining characters */
+       if (msc->closing) {
+               ms->OutFlush = TRUE;
+               msc->closing = FALSE;
+       }
 
-  /*
-   * if NONBLOCK requested, ignore carrier
-   */
-  if (flag & O_NONBLOCK)
-    goto done;
+       /* initialize tty */
+       if ((tp->t_state & TS_ISOPEN) == 0) {
+               tp->t_state |= TS_WOPEN;
+               ttychars(tp);
+               if (tp->t_ispeed == 0) {
+                       tp->t_iflag = TTYDEF_IFLAG;
+                       tp->t_oflag = TTYDEF_OFLAG;
+                       tp->t_cflag = TTYDEF_CFLAG;
+                       tp->t_lflag = TTYDEF_LFLAG;
+                       tp->t_ispeed = tp->t_ospeed = mscdefaultrate;
+               }
 
-  /* 
-   * s = spltty();
-   *
-   * This causes hangs when put here, like other TTY drivers do, rather than
-   * above, WHY? RFH
-   *
-   */
+               /* flags changed to be private to every unit by JM */
+               if (msc->openflags & TIOCFLAG_CLOCAL)
+                       tp->t_cflag |= CLOCAL;
+               if (msc->openflags & TIOCFLAG_CRTSCTS)
+                       tp->t_cflag |= CRTSCTS;
+               if (msc->openflags & TIOCFLAG_MDMBUF)
+                       tp->t_cflag |= MDMBUF;
+
+               mscparam(tp, &tp->t_termios);
+               ttsetwater(tp);
+
+               (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMSET);
+
+               if ((SWFLAGS(dev) & TIOCFLAG_SOFTCAR) ||
+                   (mscmctl(dev, 0, DMGET) & TIOCM_CD))
+                       tp->t_state |= TS_CARR_ON;
+               else
+                       tp->t_state &= ~TS_CARR_ON;
+
+       } else {
+               if (tp->t_state & TS_XCLUDE && p->p_ucred->cr_uid != 0) {
+                       splx(s);
+                       return (EBUSY);
+               }
+       }
 
-  while ((tp->t_state & TS_CARR_ON) == 0 && (tp->t_cflag & CLOCAL) == 0) {
+       /*
+        * if NONBLOCK requested, ignore carrier
+        */
+       if (flag & O_NONBLOCK) {
+#if DEBUG_CD
+               printf("msc%d: %d open nonblock\n", msc->unit, MSCLINE(dev));
+#endif
+               goto done;
+       }
+
+       /* 
+        * s = spltty();
+        *
+        * This causes hangs when put here, like other TTY drivers do, rather than
+        * above, WHY? RFH
+        *
+        */
 
-      tp->t_state |= TS_WOPEN;
+       while ((tp->t_state & TS_CARR_ON) == 0 && (tp->t_cflag & CLOCAL) == 0) {
+               tp->t_state |= TS_WOPEN;
 
 #if DEBUG_CD
-      printf("msc %ld waiting for CD\n", MSCLINE(dev));
+               printf("msc%d: %d waiting for CD\n", msc->unit, MSCLINE(dev));
 #endif
-      error = ttysleep(tp, (caddr_t)&tp->t_rawq, TTIPRI | PCATCH, ttopen, 0);
+               error = ttysleep(tp, (caddr_t)&tp->t_rawq, TTIPRI | PCATCH, ttopen, 0);
 
-      if (error) {
-               splx(s);
-               return(error);
-      }
-  }
+               if (error) {
+                       splx(s);
+                       return(error);
+               }
+       }
 
-done: 
 #if DEBUG_CD
-  printf("msc %ld waiting for CD\n", MSCLINE(dev));
+       printf("msc%d: %d got CD\n", msc->unit, MSCLINE(dev));
 #endif
-  /* This is a way to handle lost XON characters */
-  if ((flag & O_TRUNC) && (tp->t_state & TS_TTSTOP)) {
-          tp->t_state &= ~TS_TTSTOP;
-          ttstart (tp);
-  }
 
-  splx(s);
+       done: 
+               /* This is a way to handle lost XON characters */
+               if ((flag & O_TRUNC) && (tp->t_state & TS_TTSTOP)) {
+                       tp->t_state &= ~TS_TTSTOP;
+                       ttstart (tp);
+               }
 
-  /*
-   * Reset the tty pointer, as there could have been a dialout
-   * use of the tty with a dialin open waiting.
-   */
-  tp->t_dev = dev;
+       splx(s);
 
-  return((*linesw[tp->t_line].l_open)(dev, tp));
+       /*
+        * Reset the tty pointer, as there could have been a dialout
+        * use of the tty with a dialin open waiting.
+        */
+       tp->t_dev = dev;
 
+       return((*linesw[tp->t_line].l_open)(dev, tp));
 }
 
 int
@@ -452,46 +431,37 @@ mscclose(dev, flag, mode, p)
        int flag, mode;
        struct proc *p;
 {
-  register struct tty *tp;
-  int slot;
-  volatile struct mscstatus *ms;
-  struct mscdevice *msc;
+       register struct tty *tp;
+       int slot;
+       volatile struct mscstatus *ms;
+       struct mscdevice *msc;
   
-  /* get the device structure */
-  slot = MSCSLOT(dev);
+       /* get the device structure */
+       slot = MSCSLOT(dev);
 
-  if (slot >= MSCSLOTS)
-    return ENXIO;
+       if (slot >= MSCSLOTS)
+               return ENXIO;
 
-  msc = &mscdev[slot];
+       msc = &mscdev[slot];
 
-  if (!msc->active)
-    return ENXIO;
+       if (!msc->active)
+               return ENXIO;
 
-  ms = &msc->board->Status[msc->port];
+       ms = &msc->board->Status[msc->port];
   
-#if DEBUG_MSC
-  bugi(msc, "close1");
-#endif
-
-  tp = msc_tty[MSCTTY(dev)];
-  (*linesw[tp->t_line].l_close)(tp, flag);
-
-  (void) mscmctl(dev, 0, DMSET);
-
-  ttyclose(tp);
+       tp = msc_tty[MSCTTY(dev)];
+       (*linesw[tp->t_line].l_close)(tp, flag);
 
-  if (msc->flags & TIOCM_DTR)
-    msc->closing = TRUE; /* flush remaining characters before dropping DTR */
-  else
-    ms->OutFlush = TRUE; /* just bitbucket remaining characters */
+       (void) mscmctl(dev, 0, DMSET);
 
-#if DEBUG_MSC
-  bugi(msc, "close2");
-#endif
+       ttyclose(tp);
 
-  return (0);
+       if (msc->flags & TIOCM_DTR)
+               msc->closing = TRUE; /* flush remaining characters before dropping DTR */
+       else
+               ms->OutFlush = TRUE; /* just bitbucket remaining characters */
 
+       return (0);
 }
  
 int
@@ -516,14 +486,14 @@ mscwrite(dev, uio, flag)
        struct uio *uio;
        int flag;
 {
-  register struct tty *tp;
+       register struct tty *tp;
   
-  tp = msc_tty[MSCTTY(dev)];
+       tp = msc_tty[MSCTTY(dev)];
 
-  if (! tp)
-    return ENXIO;
+       if (! tp)
+               return ENXIO;
 
-  return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
+       return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
 }
 
 /*
@@ -543,278 +513,217 @@ void
 mscmint (data)
        register void *data;
 {
-  int unit;
-  register struct tty *tp;
-  int slot;
-  int maxslot;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  volatile u_char *ibuf, *cbuf;
-  unsigned char newhead; /* was int */
-  unsigned char bufpos;  /* was int */
-  int s;
-
-  unit = (int) data;
-
-  /* check each line on this board */
-  maxslot = MSCSLOTUL(unit, NUMLINES);
-  if (maxslot > MSCSLOTS)
-    maxslot = MSCSLOTS;
-
-  for (slot = MSCSLOTUL(unit, 0); slot < maxslot; slot++)
-    {
-      msc = &mscdev[slot];
-
-      if (!msc->active)
-        continue;
-
-      tp = msc_tty[MSCTTYSLOT(slot)];
-      ms = &msc->board->Status[msc->port];
-
-      newhead = ms->InHead;            /* 65c02 write pointer */
-
-      /* yoohoo, is the port open? */
-      if (tp && (tp->t_state & (TS_ISOPEN|TS_WOPEN))) {
-       /* port is open, handle all type of events */
-
-       /* set interrupt priority level */
-        s = spltty();
-
-      /* check for input for this port */
-      if (newhead != (bufpos = ms->InTail))
-      {
-#if DEBUG_MSC
-             printf("iop%d\n",slot);
-#endif
-             /* buffer for input chars/events */
-             ibuf = &msc->board->InBuf[msc->port][0];
-
-             /* data types of bytes in ibuf */
-             cbuf = &msc->board->InCtl[msc->port][0];
-    
-             /* do for all chars, if room */
-             while (bufpos != newhead)
-             {
-                 /* which type of input data? */
-                 switch (cbuf[bufpos])
-                 {
-                     /* input event (CD, BREAK, etc.) */
-                     case MSCINCTL_EVENT:
-                       switch (ibuf[bufpos++])
-                       {
-                           /* carrier detect change OFF -> ON */
-                           case MSCEVENT_CarrierOn:
+       register struct tty *tp;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       volatile u_char *ibuf, *cbuf;
+       unsigned char newhead; /* was int */
+       unsigned char bufpos;  /* was int */
+       unsigned char ncd, ocd, ccd;
+       int unit, slot, maxslot;
+       int s, i;
+
+       unit = (int) data;
+
+       /* check each line on this board */
+       maxslot = MSCSLOTUL(unit, NUMLINES);
+       if (maxslot > MSCSLOTS)
+               maxslot = MSCSLOTS;
+
+       msc = &mscdev[MSCSLOTUL(unit, 0)];
+
+       newhead = msc->board->Common.CDHead;
+       bufpos  = msc->board->Common.CDTail;
+       if (newhead != bufpos) {        /* CD events in queue   */
+           /* set interrupt priority level */
+           s = spltty();
+           ocd = msc->board->Common.CDStatus;          /* get old status bits  */
+           while (newhead != bufpos) {                 /* read all events      */
+               ncd = msc->board->CDBuf[bufpos++];      /* get one event        */
+               ccd = ncd ^ ocd;                        /* mask of changed lines*/
+               ocd = ncd;                              /* save new status bits */
 #if DEBUG_CD
-                             printf("msc  CD ON %d\n", msc->port);
+               printf("ocd %02x ncd %02x ccd %02x\n", ocd, ncd, ccd);
 #endif
-                             msc->flags |= TIOCM_CD;
-                             if (MSCDIALIN(tp->t_dev))
-                               (*linesw[tp->t_line].l_modem)(tp, 1);
-                             break;
-    
-                           /*  carrier detect change ON -> OFF */
-                           case MSCEVENT_CarrierOff:
+               for(i = 0; i < NUMLINES; i++) {         /* do for all lines     */
+                   if (ccd & 1) {                      /* this one changed     */
+                       msc = &mscdev[MSCSLOTUL(unit, i)];
+                       if (ncd & 1) {  /* CD is now OFF */
 #if DEBUG_CD
-                             printf("msc  CD OFF %d\n", msc->port);
+                           printf("msc%d: CD OFF %d\n", unit, msc->port);
 #endif
-                             msc->flags &= ~TIOCM_CD;
+                           msc->flags &= ~TIOCM_CD;
+                           if ((tp = msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, i))]) &&
+                                (tp->t_state & (TS_ISOPEN | TS_WOPEN))) {
+
 #ifndef MSCCDHACK
-                             if (MSCDIALIN(tp->t_dev))
-#endif                     /* Note to format police: Don't merge the { below
-                              in to the line above! */
-                             {
-                                 if ((*linesw[tp->t_line].l_modem)(tp, 0) == 0)
-                                 {
-                                     /* clear RTS and DTR, bitbucket output */
-                                     ms->Command = (ms->Command & ~MSCCMD_CMask) | MSCCMD_Close;
-                                     ms->Setup = TRUE;
-                                     msc->flags &= ~(TIOCM_DTR | TIOCM_RTS);
-                                     ms->OutFlush = TRUE;
-                                 }
-                             }
-                             break;
-    
-                           case MSCEVENT_Break:
-#if DEBUG_MSC
-                             printf("Break received on msc%d\n", slot);
+                               if (MSCDIALIN(tp->t_dev))
 #endif
-                             (*linesw[tp->t_line].l_rint)(TTY_FE, tp);
-                             break;
-    
-                           default:
-                             printf("msc: unknown event type %d\n",
-                                     ibuf[(bufpos-1)&0xff]);
-
-                       } /* event type switch */
-                       break;
-
-                     case MSCINCTL_CHAR:
-                        if (tp->t_state & TS_TBLOCK) {
-                          if (ms->chCD) {
-                            /* Carrier detect ON -> OFF */
+                               {
+                                   if ((*linesw[tp->t_line].l_modem)(tp, 0) == 0) {
+                                       /* clear RTS and DTR, bitbucket output */
+                                       ms = &msc->board->Status[msc->port];
+                                       ms->Command = (ms->Command & ~MSCCMD_CMask) |
+                                                MSCCMD_Close;
+                                       ms->Setup = TRUE;
+                                       msc->flags &= ~(TIOCM_DTR | TIOCM_RTS);
+                                       ms->OutFlush = TRUE;
+                                   }
+                               }
+                           }
+                       } else {        /* CD is now ON */
 #if DEBUG_CD
-                            printf("msc  CD OFF blocked %d msc->flags %08lx\n",
-                                   msc->port, msc->flags);
+                           printf("msc%d: CD ON %d\n", unit, msc->port);
 #endif
-                            msc->flags &= ~TIOCM_CD;
+                           msc->flags |= TIOCM_CD;
+                           if ((tp = msc_tty[MSCTTYSLOT(MSCSLOTUL(unit, i))]) &&
+                               (tp->t_state & (TS_ISOPEN | TS_WOPEN))) {
+                                   if (MSCDIALIN(tp->t_dev))
+                                       (*linesw[tp->t_line].l_modem)(tp, 1);
+                           } /* if tp valid and port open */
+                       }               /* CD on/off */
+                   } /* if CD changed for this line */
+                   ccd >>= 1; ncd >>= 1;                       /* bit for next line */
+               } /* for every line */
+           } /* while events in queue */
+       msc->board->Common.CDStatus = ocd;              /* save new status */
+       msc->board->Common.CDTail   = bufpos;   /* remove events */
+       splx(s);
+       }       /* if events in CD queue */
 
-#ifndef MSCCDHACK
-                            if (MSCDIALIN(tp->t_dev))
-#endif
-                            {
-                              if ((*linesw[tp->t_line].l_modem)(tp, 0) == 0) {
-                                /* Clear RTS and DTR, bitbucket output */
-                                ms->Command = (ms->Command & ~MSCCMD_CMask) |
-                                              MSCCMD_Close;
-                                ms->Setup = TRUE;
-                                msc->flags &= ~(TIOCM_DTR | TIOCM_RTS);
-                                ms->OutFlush = TRUE;
-                              }
-                            }
-                          }
-                          goto NoRoomForYa;
-                        }
-#if DEBUG_MSC
-                        printf("'%c' ",ibuf[bufpos]);
-#endif
-                        (*linesw[tp->t_line].l_rint)((int)ibuf[bufpos++], tp);
-                       break;
+       for (slot = MSCSLOTUL(unit, 0); slot < maxslot; slot++) {
+           msc = &mscdev[slot];
 
-                     default:
-                       printf("msc: unknown data type %d\n", cbuf[bufpos]);
-                       bufpos++;
+           if (!msc->active)
+               continue;
 
-                  } /* switch on input data type */
+           tp = msc_tty[MSCTTYSLOT(slot)];
+           ms = &msc->board->Status[msc->port];
 
-               } /* while there's something in the buffer */
-NoRoomForYa:
-             ms->InTail = bufpos;              /* tell 65C02 what we've read */
+           newhead = ms->InHead;               /* 65c02 write pointer */
 
-           } /* if there was something in the buffer */
+           /* yoohoo, is the port open? */
+           if (tp && (tp->t_state & (TS_ISOPEN|TS_WOPEN))) {
+               /* port is open, handle all type of events */
 
-         /* we get here only when the port is open */
-         /* send output */
-          if (tp->t_state & (TS_BUSY|TS_FLUSH))
-           {
-
-             bufpos = ms->OutHead - ms->OutTail;
-
-             /* busy and below low water mark? */
-             if (tp->t_state & TS_BUSY)
-               {
-                 if (bufpos < IOBUFLOWWATER)
-                   {
-                     tp->t_state &= ~TS_BUSY;  /* not busy any more */
-                     if (tp->t_line)
-                       (*linesw[tp->t_line].l_start)(tp);
-                     else
-                       mscstart(tp);
-                   }
-               }
+               /* set interrupt priority level */
+               s = spltty();
 
-             /* waiting for flush and buffer empty? */
-             if (tp->t_state & TS_FLUSH)
-               {
-                 if (bufpos == 0)
-                   tp->t_state &= ~TS_FLUSH;   /* finished flushing */
-               }
-           } /* BUSY or FLUSH */
+               /* check for input for this port */
+               if (newhead != (bufpos = ms->InTail)) {
+                   /* buffer for input chars/events */
+                   ibuf = &msc->board->InBuf[msc->port][0];
 
-            splx(s);
+                   /* data types of bytes in ibuf */
+                   cbuf = &msc->board->InCtl[msc->port][0];
+    
+                   /* do for all chars, if room */
+                   while (bufpos != newhead) {
+                       /* which type of input data? */
+                       switch (cbuf[bufpos]) {
+                           /* input event (CD, BREAK, etc.) */
+                           case MSCINCTL_EVENT:
+                               switch (ibuf[bufpos++]) {
+                                   case MSCEVENT_Break:
+                                       (*linesw[tp->t_line].l_rint)(TTY_FE, tp);
+                                       break;
+
+                                   default:
+                                       printf("msc%d: unknown event type %d\n",
+                                       msc->unit, ibuf[(bufpos-1)&0xff]);
+                               } /* event type switch */
+                               break;
+
+                           case MSCINCTL_CHAR:
+                               if (tp->t_state & TS_TBLOCK) {
+                                   goto NoRoomForYa;
+                               }
+                               (*linesw[tp->t_line].l_rint)((int)ibuf[bufpos++], tp);
+                               break;
 
-      } else { /* End of port open */
-       /* port is closed, don't pass on the chars from it */
+                           default:
+                               printf("msc%d: unknown data type %d\n", 
+                               msc->unit, cbuf[bufpos]);
+                               bufpos++;
+                       } /* switch on input data type */
+                   } /* while there's something in the buffer */
+NoRoomForYa:
+               ms->InTail = bufpos;            /* tell 65C02 what we've read */
+           } /* if there was something in the buffer */
 
-      /* check for input for this port */
-      if (newhead != (bufpos = ms->InTail))
-      {
-#if DEBUG_MSC
-             printf("icp%d\n",slot);
-#endif
-             /* buffer for input chars/events */
-             ibuf = &msc->board->InBuf[msc->port][0];
+           /* we get here only when the port is open */
+           /* send output */
+           if (tp->t_state & (TS_BUSY|TS_FLUSH)) {
 
-             /* data types of bytes in ibuf */
-             cbuf = &msc->board->InCtl[msc->port][0];
-    
-             /* do for all chars, if room */
-             while (bufpos != newhead)
-             {
-                 /* which type of input data? */
-                 switch (cbuf[bufpos])
-                 {
-                     /* input event (CD, BREAK, etc.) */
-                     case MSCINCTL_EVENT:
-                       switch (ibuf[bufpos++])
-                       {
-                           /* carrier detect change OFF -> ON */
-                           case MSCEVENT_CarrierOn:
-#if DEBUG_CD
-                             printf("msc  CD ON %d (closed)\n", msc->port);
-#endif
-                             msc->flags |= TIOCM_CD;
-                             break;
-    
-                           /*  carrier detect change ON -> OFF */
-                           case MSCEVENT_CarrierOff:
-#if DEBUG_CD
-                             printf("msc  CD OFF %d (closed)\n", msc->port);
-#endif
-                             msc->flags &= ~TIOCM_CD;
-#ifndef MSCCDHACK
-                             if (tp && MSCDIALIN(tp->t_dev))
-#else
-                             if (tp )
-#endif
-                             {
-                                 if ((*linesw[tp->t_line].l_modem)(tp, 0) == 0)
-                                 {
-                                     /* clear RTS and DTR, bitbucket output */
-                                     ms->Command = (ms->Command & ~MSCCMD_CMask) | MSCCMD_Close;
-                                     ms->Setup = TRUE;
-                                     msc->flags &= ~(TIOCM_DTR | TIOCM_RTS);
-                                     ms->OutFlush = TRUE;
-                                 }
-                             }
-                             break;
-    
-                           default:
-                             printf("msc: unknown event type %d\n",
-                                    ibuf[(bufpos-1)&0xff]);
+               bufpos = ms->OutHead - ms->OutTail;
 
-                       } /* event type switch */
-                       break;
+               /* busy and below low water mark? */
+               if (tp->t_state & TS_BUSY) {
+                   if (bufpos < IOBUFLOWWATER) {
+                       tp->t_state &= ~TS_BUSY;        /* not busy any more */
+                       if (tp->t_line)
+                           (*linesw[tp->t_line].l_start)(tp);
+                       else
+                           mscstart(tp);
+                   }
+               }
 
-                     default:
-                       bufpos++;
+               /* waiting for flush and buffer empty? */
+               if (tp->t_state & TS_FLUSH) {
+                   if (bufpos == 0)
+                       tp->t_state &= ~TS_FLUSH;       /* finished flushing */
+               }
+           } /* BUSY or FLUSH */
 
-                  } /* switch on input data type */
+           splx(s);
 
-               } /* while there's something in the buffer */
+           } else { /* End of port open */
+               /* port is closed, don't pass on the chars from it */
 
-               ms->InTail = bufpos;            /* tell 65C02 what we've read */
+               /* check for input for this port */
+               if (newhead != (bufpos = ms->InTail)) {
+                   /* buffer for input chars/events */
+                   ibuf = &msc->board->InBuf[msc->port][0];
 
-           } /* if there was something in the buffer */
-      } /* End of port open/close */
-
-      /* is this port closing? */
-      if (msc->closing)
-        {
-         /* if DTR is off, just bitbucket remaining characters */
-         if ( (msc->flags & TIOCM_DTR) == 0)
-           {
-             ms->OutFlush = TRUE;
-             msc->closing = FALSE;
+                   /* data types of bytes in ibuf */
+                   cbuf = &msc->board->InCtl[msc->port][0];
+    
+                   /* do for all chars, if room */
+                       while (bufpos != newhead) {
+                           /* which type of input data? */
+                           switch (cbuf[bufpos]) {
+                           /* input event (BREAK, etc.) */
+                               case MSCINCTL_EVENT:
+                                   switch (ibuf[bufpos++]) {
+                                       default:
+                                           printf("msc: unknown event type %d\n",
+                                               ibuf[(bufpos-1)&0xff]);
+                                   } /* event type switch */
+                                   break;
+
+                               default:
+                                   bufpos++;
+                           } /* switch on input data type */
+                       } /* while there's something in the buffer */
+
+                   ms->InTail = bufpos;                /* tell 65C02 what we've read */
+               } /* if there was something in the buffer */
+           } /* End of port open/close */
+
+           /* is this port closing? */
+           if (msc->closing) {
+               /* if DTR is off, just bitbucket remaining characters */
+               if ( (msc->flags & TIOCM_DTR) == 0) {
+                   ms->OutFlush = TRUE;
+                   msc->closing = FALSE;
+               }
+               /* if output has drained, drop DTR */
+               else if (ms->OutHead == ms->OutTail) {
+                   (void) mscmctl(tp->t_dev, 0, DMSET);
+                   msc->closing = FALSE;
+               }
            }
-         /* if output has drained, drop DTR */
-          else if (ms->OutHead == ms->OutTail)
-           {
-             (void) mscmctl(tp->t_dev, 0, DMSET);
-             msc->closing = FALSE;
-            }
-        }
-    }  /* For all ports */
-  
+       }  /* For all ports */
 }
 
 int
@@ -825,170 +734,157 @@ mscioctl(dev, cmd, data, flag, p)
        int flag;
        struct proc *p;
 {
-  register struct tty *tp;
-  register int slot;
-  register int error;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  int s;
+       register struct tty *tp;
+       register int slot;
+       register int error;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       int s;
   
-  /* get the device structure */
-  slot = MSCSLOT(dev);
+       /* get the device structure */
+       slot = MSCSLOT(dev);
 
-  if (slot >= MSCSLOTS)
-    return ENXIO;
+       if (slot >= MSCSLOTS)
+               return ENXIO;
 
-  msc = &mscdev[slot];
+       msc = &mscdev[slot];
 
-  if (!msc->active)
-    return ENXIO;
+       if (!msc->active)
+               return ENXIO;
 
-  ms = &msc->board->Status[msc->port];
-  if (!(tp = msc_tty[MSCTTY(dev)]))
-    return ENXIO;
+       ms = &msc->board->Status[msc->port];
+       if (!(tp = msc_tty[MSCTTY(dev)]))
+               return ENXIO;
 
-  error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p);
+       error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p);
 
-  if (error >= 0)
-    return (error);
+       if (error >= 0)
+               return (error);
 
-  error = ttioctl(tp, cmd, data, flag, p);
+       error = ttioctl(tp, cmd, data, flag, p);
 
-  if (error >= 0)
-    return (error);
+       if (error >= 0)
+               return (error);
   
-  switch (cmd) {
-
-      /* send break */
-    case TIOCSBRK:
-      s = spltty();
-      ms->Command = (ms->Command & (~MSCCMD_RTSMask)) | MSCCMD_Break;
-      ms->Setup = TRUE;
-      splx(s);
-      break;
-
-      /* clear break */
-    case TIOCCBRK:
-      s = spltty();
-      ms->Command = (ms->Command & (~MSCCMD_RTSMask)) | MSCCMD_RTSOn;
-      ms->Setup = TRUE;
-      splx(s);
-      break;
-
-    case TIOCSDTR:
-      (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMBIS);
-      break;
-      
-    case TIOCCDTR:
-      if (!MSCDIALIN(dev))     /* don't let dialins drop DTR */
-        (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMBIC);
-      break;
+       switch (cmd) {
+
+               /* send break */
+               case TIOCSBRK:
+                       s = spltty();
+                       ms->Command = (ms->Command & (~MSCCMD_RTSMask)) | MSCCMD_Break;
+                       ms->Setup = TRUE;
+                       splx(s);
+                       break;
+
+               /* clear break */
+               case TIOCCBRK:
+                       s = spltty();
+                       ms->Command = (ms->Command & (~MSCCMD_RTSMask)) | MSCCMD_RTSOn;
+                       ms->Setup = TRUE;
+                       splx(s);
+                       break;
+
+               case TIOCSDTR:
+                       (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMBIS);
+                       break;
       
-    case TIOCMSET:
-      (void) mscmctl(dev, *(int *)data, DMSET);
-      break;
+               case TIOCCDTR:
+                       if (!MSCDIALIN(dev))    /* don't let dialins drop DTR */
+                               (void) mscmctl(dev, TIOCM_DTR | TIOCM_RTS, DMBIC);
+                       break;
       
-    case TIOCMBIS:
-      (void) mscmctl(dev, *(int *)data, DMBIS);
-      break;
+               case TIOCMSET:
+                       (void) mscmctl(dev, *(int *)data, DMSET);
+                       break;
       
-    case TIOCMBIC:
-      if (MSCDIALIN(dev))      /* don't let dialins drop DTR */
-        (void) mscmctl(dev, *(int *)data & TIOCM_DTR, DMBIC);
-      else
-        (void) mscmctl(dev, *(int *)data, DMBIC);
-      break;
+               case TIOCMBIS:
+                       (void) mscmctl(dev, *(int *)data, DMBIS);
+                       break;
       
-    case TIOCMGET:
-      *(int *)data = mscmctl(dev, 0, DMGET);
-      break;
+               case TIOCMBIC:
+                       if (MSCDIALIN(dev))     /* don't let dialins drop DTR */
+                               (void) mscmctl(dev, *(int *)data & TIOCM_DTR, DMBIC);
+                       else
+                               (void) mscmctl(dev, *(int *)data, DMBIC);
+                       break;
       
-    case TIOCGFLAGS:
-      *(int *)data = SWFLAGS(dev);
-      break;
-
-    case TIOCSFLAGS:
-      error = suser(p->p_ucred, &p->p_acflag);
-      if (error != 0)
-              return(EPERM);
+               case TIOCMGET:
+                       *(int *)data = mscmctl(dev, 0, DMGET);
+                       break;
       
-      msc->openflags = *(int *)data;
-
-      /* only allow valid flags */
-      msc->openflags &= (TIOCFLAG_SOFTCAR | TIOCFLAG_CLOCAL | TIOCFLAG_CRTSCTS);
+               case TIOCGFLAGS:
+                       *(int *)data = SWFLAGS(dev);
+                       break;
 
-      break;
+               case TIOCSFLAGS:
+                       error = suser(p->p_ucred, &p->p_acflag);
+                       if (error != 0)
+                               return(EPERM);
+                       msc->openflags = *(int *)data;
+                       /* only allow valid flags */
+                       msc->openflags &=
+                            (TIOCFLAG_SOFTCAR | TIOCFLAG_CLOCAL | TIOCFLAG_CRTSCTS);
+                       break;
 
-    default:
-      return (ENOTTY);
-    }
+               default:
+                       return (ENOTTY);
+       }
 
-  return (0);
+       return (0);
 }
 
-
 int
 mscparam(tp, t)
        register struct tty *tp;
        register struct termios *t;
 {
-  register int cflag = t->c_cflag;
-  int slot;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  int s;
-  int ospeed = ttspeedtab(t->c_ospeed, mscspeedtab);
+       register int cflag = t->c_cflag;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       int s, slot;
+       int ospeed = ttspeedtab(t->c_ospeed, mscspeedtab);
   
-  /* get the device structure */
-  slot = MSCSLOT(tp->t_dev);
+       /* get the device structure */
+       slot = MSCSLOT(tp->t_dev);
 
-  if (slot >= MSCSLOTS)
-    return ENXIO;
+       if (slot >= MSCSLOTS)
+               return ENXIO;
 
-  msc = &mscdev[slot];
-
-  if (!msc->active)
-    return ENXIO;
-
-  ms = &msc->board->Status[msc->port];
-
-#if DEBUG_MSC
-  bugi(msc, "param1");
-#endif
-  /* check requested parameters */
-  if (ospeed < 0 || (t->c_ispeed && t->c_ispeed != t->c_ospeed))
-    return (EINVAL);
-
-  /* and copy to tty */
-  tp->t_ispeed = t->c_ispeed;
-  tp->t_ospeed = t->c_ospeed;
-  tp->t_cflag = cflag;
-  
-  /* hang up if baud is zero */
-  if (t->c_ospeed == 0) {
+       msc = &mscdev[slot];
 
-      if (!MSCDIALIN(tp->t_dev))  /* don't let dialins drop DTR */
-        (void) mscmctl(tp->t_dev, 0, DMSET);
-  }
-  else {
+       if (!msc->active)
+               return ENXIO;
 
-      /* set the baud rate */
-      s = spltty();
-      ms->Param = (ms->Param & ~MSCPARAM_BaudMask) | ospeed | MSCPARAM_RcvBaud;
+       ms = &msc->board->Status[msc->port];
 
-      /* make sure any previous hangup is undone, ie.  reenable DTR.
-       * also mscmctl will cause the speed to be set
-       */
-      (void) mscmctl (tp->t_dev, TIOCM_DTR | TIOCM_RTS, DMSET);
+       /* check requested parameters */
+       if (ospeed < 0 || (t->c_ispeed && t->c_ispeed != t->c_ospeed))
+               return (EINVAL);
 
-      splx(s);
-  }
+       /* and copy to tty */
+       tp->t_ispeed = t->c_ispeed;
+       tp->t_ospeed = t->c_ospeed;
+       tp->t_cflag = cflag;
   
-#if DEBUG_MSC
-  bugi(msc, "param2");
-#endif
-  return (0);
-
+       /* hang up if baud is zero */
+       if (t->c_ospeed == 0) {
+               if (!MSCDIALIN(tp->t_dev))  /* don't let dialins drop DTR */
+                       (void) mscmctl(tp->t_dev, 0, DMSET);
+       } else {
+               /* set the baud rate */
+               s = spltty();
+               ms->Param = (ms->Param & ~MSCPARAM_BaudMask) | ospeed | MSCPARAM_RcvBaud;
+
+               /*
+                * Make sure any previous hangup is undone, ie.  reenable DTR.
+                * also mscmctl will cause the speed to be set
+                */
+               (void) mscmctl (tp->t_dev, TIOCM_DTR | TIOCM_RTS, DMSET);
+
+               splx(s);
+       }
+  
+       return(0);
 }
 
 
@@ -1005,149 +901,133 @@ mschwiflow(tp, flag)
 
 /* Rob's version */
 #if 1
-#if DEBUG_MSC
-       printf("mschwiflow %d\n", flag);
-#endif
-
        if (flag)
-          mscmctl( tp->t_dev, TIOCM_RTS, DMBIC); /* Clear/Lower RTS */
+               mscmctl( tp->t_dev, TIOCM_RTS, DMBIC);  /* Clear/Lower RTS */
        else
-          mscmctl( tp->t_dev, TIOCM_RTS, DMBIS); /* Set/Raise RTS */
-       
-#endif
+               mscmctl( tp->t_dev, TIOCM_RTS, DMBIS);  /* Set/Raise RTS */
 
-/* Jukka's version */
-#if 0
-  int slot;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  int s;
-
-  /* get the device structure */
-  slot = MSCSLOT(tp->t_dev);
-  if (slot >= MSCSLOTS)
-    return ENXIO;
-  msc = &mscdev[slot];
-  if (!msc->active)
-    return ENXIO;
-  ms = &msc->board->Status[msc->port];
-
-#if DEBUG_MSC
-  bugi(msc, "hwiflow");
-#endif
-  /* Well, we should really _do_ something here, but the 65c02 code
-   * manages the RTS signal on its own now, so...  This will probably
-   * change in the future.
-   */
+#else  /* Jukka's version */
+
+       int s, slot;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
 
+       /* get the device structure */
+       slot = MSCSLOT(tp->t_dev);
+       if (slot >= MSCSLOTS)
+               return ENXIO;
+       msc = &mscdev[slot];
+       if (!msc->active)
+               return ENXIO;
+       ms = &msc->board->Status[msc->port];
+
+       /* Well, we should really _do_ something here, but the 65c02 code
+        * manages the RTS signal on its own now, so...  This will probably
+        * change in the future.
+        */
 #endif
        return 1;
-
 }
 
 void
 mscstart(tp)
        register struct tty *tp;
 {
-  register int cc;
-  register char *cp;
-  register int mhead;
-  int s;
-  int slot;
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  volatile char *mob;
-  int hiwat = 0;
-  int maxout;
-
-  if (! (tp->t_state & TS_ISOPEN))
-    return;
-
-  slot = MSCSLOT(tp->t_dev);
+       register int cc;
+       register char *cp;
+       register int mhead;
+       int s, slot;
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       volatile char *mob;
+       int hiwat = 0;
+       int maxout;
+
+       if (! (tp->t_state & TS_ISOPEN))
+               return;
+
+       slot = MSCSLOT(tp->t_dev);
 
 #if 0
-  printf("starting msc%d\n", slot);
+       printf("starting msc%d\n", slot);
 #endif
 
-  s = spltty();
-
-  /* don't start if explicitly stopped */
-  if (tp->t_state & (TS_TIMEOUT|TS_TTSTOP)) 
-    goto out;
+       s = spltty();
 
-  /* wake up if below low water */
-  cc = tp->t_outq.c_cc;
+       /* don't start if explicitly stopped */
+       if (tp->t_state & (TS_TIMEOUT|TS_TTSTOP)) 
+               goto out;
 
-  if (cc <= tp->t_lowat) {
-      if (tp->t_state & TS_ASLEEP) {
+       /* wake up if below low water */
+       cc = tp->t_outq.c_cc;
 
-         tp->t_state &= ~TS_ASLEEP;
-         wakeup((caddr_t)&tp->t_outq);
+       if (cc <= tp->t_lowat) {
+               if (tp->t_state & TS_ASLEEP) {
+                       tp->t_state &= ~TS_ASLEEP;
+                       wakeup((caddr_t)&tp->t_outq);
+               }
+               selwakeup(&tp->t_wsel);
        }
 
-      selwakeup(&tp->t_wsel);
-  }
-
-  /* don't bother if no characters or busy */
-  if (cc == 0 || (tp->t_state & TS_BUSY))
-    goto out;
+       /* don't bother if no characters or busy */
+       if (cc == 0 || (tp->t_state & TS_BUSY))
+               goto out;
 
-  /*
-   * Limit the amount of output we do in one burst
-   */
-  msc = &mscdev[slot];
-  ms = &msc->board->Status[msc->port];
-  mhead = ms->OutHead;
-  maxout = mhead - ms->OutTail;
+       /*
+        * Limit the amount of output we do in one burst
+        */
+       msc = &mscdev[slot];
+       ms = &msc->board->Status[msc->port];
+       mhead = ms->OutHead;
+       maxout = mhead - ms->OutTail;
 
-  if (maxout < 0)
-      maxout += IOBUFLEN;
+       if (maxout < 0)
+               maxout += IOBUFLEN;
 
-  maxout = IOBUFLEN - 1 - maxout;
+       maxout = IOBUFLEN - 1 - maxout;
 
-  if (cc >= maxout) {
-      hiwat++;
-      cc = maxout;
-  }
+       if (cc >= maxout) {
+               hiwat++;
+               cc = maxout;
+       }
 
-  cc = q_to_b (&tp->t_outq, msc->tmpbuf, cc);
+       cc = q_to_b (&tp->t_outq, msc->tmpbuf, cc);
 
-  if (cc > 0) {
-      tp->t_state |= TS_BUSY;
+       if (cc > 0) {
+               tp->t_state |= TS_BUSY;
 
-      mob = &msc->board->OutBuf[msc->port][0];
-      cp = &msc->tmpbuf[0];
+               mob = &msc->board->OutBuf[msc->port][0];
+               cp = &msc->tmpbuf[0];
       
-      /* enable output */
-      ms->OutDisable = FALSE;
+               /* enable output */
+               ms->OutDisable = FALSE;
 
 #if 0
-      msc->tmpbuf[cc] = 0;
-      printf("sending '%s'\n", msctmpbuf);
+               msc->tmpbuf[cc] = 0;
+               printf("sending '%s'\n", msctmpbuf);
 #endif
 
-      /* send the first char across to reduce latency */
-      mob[mhead++] = *cp++;
-      mhead &= IOBUFLENMASK;
-      ms->OutHead = mhead;
-      cc--;
-
-      /* copy the rest of the chars across quickly */
-      while (cc > 0) {
-         mob[mhead++] = *cp++;
-         mhead &= IOBUFLENMASK;
-         cc--;
-      }
-      ms->OutHead = mhead;
-
-      /* leave the device busy if we've filled the buffer */
-      if (!hiwat)
-        tp->t_state &= ~TS_BUSY;
-    }
+               /* send the first char across to reduce latency */
+               mob[mhead++] = *cp++;
+               mhead &= IOBUFLENMASK;
+               ms->OutHead = mhead;
+               cc--;
+
+               /* copy the rest of the chars across quickly */
+               while (cc > 0) {
+                       mob[mhead++] = *cp++;
+                       mhead &= IOBUFLENMASK;
+                       cc--;
+               }
+               ms->OutHead = mhead;
+
+               /* leave the device busy if we've filled the buffer */
+               if (!hiwat)
+                       tp->t_state &= ~TS_BUSY;
+       }
 
 out:  
-  splx(s);
-
+       splx(s);
 }
  
 /* XXX */
@@ -1190,81 +1070,68 @@ mscmctl(dev, bits, how)
        dev_t dev;
        int bits, how;
 {
-  struct mscdevice *msc;
-  volatile struct mscstatus *ms;
-  int slot;
-  int s;
-  u_char newcmd;
-  int OldFlags;
-
-  /* get the device structure */
-  slot = MSCSLOT(dev);
+       struct mscdevice *msc;
+       volatile struct mscstatus *ms;
+       int slot;
+       int s;
+       u_char newcmd;
+       int OldFlags;
 
-  if (slot >= MSCSLOTS)
-    return ENXIO;
+       /* get the device structure */
+       slot = MSCSLOT(dev);
 
-  msc = &mscdev[slot];
+       if (slot >= MSCSLOTS)
+               return ENXIO;
 
-  if (!msc->active)
-    return ENXIO;
+       msc = &mscdev[slot];
 
-#if DEBUG_MSC
-  bugi(msc, "mctl1");
-#endif
+       if (!msc->active)
+               return ENXIO;
 
-  s = spltty();                /* Jukka wants spl6() here, WHY?!! RFH */
+       s = spltty();
 
-  if (how != DMGET) {
-      OldFlags = msc->flags;
-      bits &= TIOCM_DTR | TIOCM_RTS; /* can only modify DTR and RTS */
+       if (how != DMGET) {
+               OldFlags = msc->flags;
+               bits &= TIOCM_DTR | TIOCM_RTS;  /* can only modify DTR and RTS */
 
-      switch (how) {
-        case DMSET:
-         msc->flags = (bits | (msc->flags & ~(TIOCM_DTR | TIOCM_RTS)));
-          break;
+               switch (how) {
+                   case DMSET:
+                       msc->flags = (bits | (msc->flags & ~(TIOCM_DTR | TIOCM_RTS)));
+                       break;
       
-        case DMBIC:
-          msc->flags &= ~bits;
-          break;
+                   case DMBIC:
+                       msc->flags &= ~bits;
+                       break;
       
-        case DMBIS:
-          msc->flags |= bits;
-          break;
-      }
-
-#if DEBUG_MSC
-    bugi(msc, "mctl2");
-#endif
+                   case DMBIS:
+                       msc->flags |= bits;
+                       break;
+               }
 
-      /* modify modem control state */
-      ms = &msc->board->Status[msc->port];
+               /* modify modem control state */
+               ms = &msc->board->Status[msc->port];
 
-      if (msc->flags & TIOCM_RTS)      /* was bits & */
-       newcmd = MSCCMD_RTSOn;
-      else                     /* this doesn't actually work now */
-       newcmd = MSCCMD_RTSOff;
+               if (msc->flags & TIOCM_RTS)     /* was bits & */
+                       newcmd = MSCCMD_RTSOn;
+               else                    /* this doesn't actually work now */
+                       newcmd = MSCCMD_RTSOff;
 
-      if (msc->flags & TIOCM_DTR)      /* was bits & */
-       newcmd |= MSCCMD_Enable;
+               if (msc->flags & TIOCM_DTR)     /* was bits & */
+                       newcmd |= MSCCMD_Enable;
 
-      ms->Command = (ms->Command & (~MSCCMD_RTSMask & ~MSCCMD_Enable)) | newcmd;
-      ms->Setup = TRUE;
+               ms->Command = (ms->Command & (~MSCCMD_RTSMask & ~MSCCMD_Enable)) | newcmd;
+               ms->Setup = TRUE;
 
-      /* if we've dropped DTR, bitbucket any pending output */
-      if ( (OldFlags & TIOCM_DTR) && ((bits & TIOCM_DTR) == 0))
-        ms->OutFlush = TRUE;
-  }
+               /* if we've dropped DTR, bitbucket any pending output */
+               if ( (OldFlags & TIOCM_DTR) && ((bits & TIOCM_DTR) == 0))
+                       ms->OutFlush = TRUE;
+       }
 
-  bits = msc->flags;
+       bits = msc->flags;
 
-  (void) splx(s);
+       (void) splx(s);
   
-#if DEBUG_MSC
-    bugi(msc, "mctl3");
-#endif
-
-  return(bits);
-
+       return(bits);
 }
 
 struct tty *
@@ -1283,42 +1150,36 @@ int
 mscinitcard(zap)
        struct zbus_args *zap;
 {
-  int bcount;
-  short start;
-  u_char *from;
-  volatile u_char *to;
-  volatile struct mscmemory *mlm;
-
-  mlm = (volatile struct mscmemory *)zap->va;  
-  (void)mlm->Enable6502Reset;
-
-  /* copy the code across to the board */
-  to = (u_char *)mlm;
-  from = msc6502code; bcount = sizeof(msc6502code) - 2;
-  start = *(short *)from; from += sizeof(start);
-  to += start;
-
-#if DEBUG_MSC
-  printf("\n** copying %ld bytes from %08lx to %08lx (start=%04lx)\n",
-         (unsigned long)bcount, (unsigned long)from, to, start);
-  printf("First byte to copy is %02lx\n", *from);
-#endif
+       int bcount;
+       short start;
+       u_char *from;
+       volatile u_char *to;
+       volatile struct mscmemory *mlm;
+
+       mlm = (volatile struct mscmemory *)zap->va;     
+       (void)mlm->Enable6502Reset;
 
-  while(bcount--) *to++ = *from++;
+       /* copy the code across to the board */
+       to = (u_char *)mlm;
+       from = msc6502code; bcount = sizeof(msc6502code) - 2;
+       start = *(short *)from; from += sizeof(start);
+       to += start;
 
-  mlm->Common.Crystal = MSC_UNKNOWN;   /* use automatic speed check */
+       while(bcount--) *to++ = *from++;
 
-  /* start 6502 running */
-  (void)mlm->ResetBoard;
+       mlm->Common.Crystal = MSC_UNKNOWN;      /* use automatic speed check */
 
-  /* wait until speed detector has finished */
-  for (bcount = 0; bcount < 200; bcount++) {
-       delay(10000);
-       if (mlm->Common.Crystal) break;
-  }
+       /* start 6502 running */
+       (void)mlm->ResetBoard;
 
-  return(0);
+       /* wait until speed detector has finished */
+       for (bcount = 0; bcount < 200; bcount++) {
+               delay(10000);
+               if (mlm->Common.Crystal)
+                       break;
+       }
 
+       return(0);
 }
 
 #endif  /* NMSC > 0 */
index dff1daa..ab01ad8 100644 (file)
@@ -1,7 +1,8 @@
-/*     $NetBSD: msc6502.h,v 1.2 1995/10/07 18:18:32 chopps Exp $ */
+/*     $OpenBSD: msc6502.h,v 1.2 1997/01/16 09:25:06 niklas Exp $      */
+/*     $NetBSD: msc6502.h,v 1.3 1996/12/09 17:24:57 is Exp $   */
 
 /*
- * Copyright (c) 1995 Jukka Marin <jmarin@teeri.jmp.fi>.
+ * Copyright (c) 1995 Jukka Marin <jmarin@jmp.fi>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  */
 static unsigned char msc6502code[] = {
        0x38, 0x00, 0xA2, 0xFF, 0x9A, 0xD8, 0xA2, 0x00, 
-       0xA9, 0x00, 0xA0, 0x70, 0x95, 0x00, 0xE8, 0x88, 
-       0xD0, 0xFA, 0xA9, 0xFF, 0x85, 0x0D, 0x85, 0x1D, 
-       0x85, 0x2D, 0x85, 0x3D, 0x85, 0x4D, 0x85, 0x5D, 
-       0x85, 0x6D, 0x64, 0x74, 0x64, 0x76, 0xA9, 0x00, 
-       0x85, 0x71, 0xA9, 0xAA, 0xC9, 0x64, 0x90, 0x02, 
-       0xE6, 0x71, 0xA5, 0x70, 0xF0, 0x03, 0x4C, 0x9E, 
-       0x38, 0xA9, 0x98, 0x8D, 0x06, 0x44, 0xA9, 0x0B, 
-       0x8D, 0x04, 0x44, 0xAD, 0x02, 0x44, 0xA9, 0x80, 
-       0x8D, 0x1A, 0x7C, 0xA9, 0xFF, 0x8D, 0x08, 0x7C, 
-       0x8D, 0x0A, 0x7C, 0xA2, 0x00, 0x8E, 0x00, 0x44, 
-       0xEA, 0xEA, 0xAD, 0x02, 0x44, 0xEA, 0xEA, 0x8E, 
-       0x00, 0x44, 0xAD, 0x02, 0x44, 0x29, 0x10, 0xF0, 
-       0xF9, 0xA9, 0x11, 0x8E, 0x00, 0x44, 0x8D, 0x1C, 
-       0x7C, 0xAD, 0x02, 0x44, 0x29, 0x10, 0xF0, 0xF9, 
-       0x8E, 0x1C, 0x7C, 0xAD, 0x08, 0x7C, 0x85, 0x73, 
-       0xAD, 0x0A, 0x7C, 0x85, 0x72, 0xC9, 0xD0, 0x90, 
-       0x05, 0xA9, 0x02, 0x4C, 0x8E, 0x38, 0xA9, 0x01, 
-       0x85, 0x70, 0xA9, 0x00, 0x8D, 0x02, 0x44, 0x8D, 
-       0x06, 0x44, 0x8D, 0x04, 0x44, 0x4C, 0x9E, 0x38, 
-       0xAD, 0x00, 0x7C, 0xC5, 0x74, 0xF0, 0x0A, 0xC5, 
-       0x76, 0xF0, 0x09, 0x85, 0x76, 0xA9, 0x40, 0x85, 
-       0x75, 0x4C, 0xBB, 0x39, 0xC6, 0x75, 0x10, 0xF9, 
-       0x85, 0x74, 0xA5, 0x74, 0x29, 0x01, 0x45, 0x0D, 
-       0xF0, 0x1D, 0xA6, 0x00, 0xE8, 0xE4, 0x01, 0xF0, 
-       0x16, 0xCA, 0xA0, 0x02, 0x45, 0x0D, 0x85, 0x0D, 
-       0xF0, 0x02, 0xA0, 0x03, 0xA9, 0x01, 0x9D, 0x00, 
-       0x10, 0x98, 0x9D, 0x00, 0x09, 0xE6, 0x00, 0xA5, 
-       0x74, 0x29, 0x02, 0x45, 0x1D, 0xF0, 0x1D, 0xA6, 
-       0x10, 0xE8, 0xE4, 0x11, 0xF0, 0x16, 0xCA, 0xA0, 
-       0x02, 0x45, 0x1D, 0x85, 0x1D, 0xF0, 0x02, 0xA0, 
-       0x03, 0xA9, 0x01, 0x9D, 0x00, 0x11, 0x98, 0x9D, 
-       0x00, 0x0A, 0xE6, 0x10, 0xA5, 0x74, 0x29, 0x04, 
-       0x45, 0x2D, 0xF0, 0x1D, 0xA6, 0x20, 0xE8, 0xE4, 
-       0x21, 0xF0, 0x16, 0xCA, 0xA0, 0x02, 0x45, 0x2D, 
-       0x85, 0x2D, 0xF0, 0x02, 0xA0, 0x03, 0xA9, 0x01, 
-       0x9D, 0x00, 0x12, 0x98, 0x9D, 0x00, 0x0B, 0xE6, 
-       0x20, 0xA5, 0x74, 0x29, 0x08, 0x45, 0x3D, 0xF0, 
-       0x1D, 0xA6, 0x30, 0xE8, 0xE4, 0x31, 0xF0, 0x16, 
-       0xCA, 0xA0, 0x02, 0x45, 0x3D, 0x85, 0x3D, 0xF0, 
-       0x02, 0xA0, 0x03, 0xA9, 0x01, 0x9D, 0x00, 0x13, 
-       0x98, 0x9D, 0x00, 0x0C, 0xE6, 0x30, 0xA5, 0x74, 
-       0x29, 0x10, 0x45, 0x4D, 0xF0, 0x1D, 0xA6, 0x40, 
-       0xE8, 0xE4, 0x41, 0xF0, 0x16, 0xCA, 0xA0, 0x02, 
-       0x45, 0x4D, 0x85, 0x4D, 0xF0, 0x02, 0xA0, 0x03, 
-       0xA9, 0x01, 0x9D, 0x00, 0x14, 0x98, 0x9D, 0x00, 
-       0x0D, 0xE6, 0x40, 0xA5, 0x74, 0x29, 0x20, 0x45, 
-       0x5D, 0xF0, 0x1D, 0xA6, 0x50, 0xE8, 0xE4, 0x51, 
-       0xF0, 0x16, 0xCA, 0xA0, 0x02, 0x45, 0x5D, 0x85, 
-       0x5D, 0xF0, 0x02, 0xA0, 0x03, 0xA9, 0x01, 0x9D, 
-       0x00, 0x15, 0x98, 0x9D, 0x00, 0x0E, 0xE6, 0x50, 
-       0xA5, 0x74, 0x29, 0x40, 0x45, 0x6D, 0xF0, 0x1D, 
-       0xA6, 0x60, 0xE8, 0xE4, 0x61, 0xF0, 0x16, 0xCA, 
-       0xA0, 0x02, 0x45, 0x6D, 0x85, 0x6D, 0xF0, 0x02, 
-       0xA0, 0x03, 0xA9, 0x01, 0x9D, 0x00, 0x16, 0x98, 
-       0x9D, 0x00, 0x0F, 0xE6, 0x60, 0x20, 0x26, 0x3B, 
-       0xA5, 0x09, 0xF0, 0x0F, 0xA5, 0x0C, 0x85, 0x0E, 
-       0xA5, 0x0A, 0x09, 0x10, 0x8D, 0x06, 0x44, 0x64, 
-       0x04, 0x64, 0x09, 0xA5, 0x00, 0xE5, 0x01, 0xC9, 
-       0xC8, 0xA5, 0x0B, 0x29, 0xF3, 0xB0, 0x02, 0x09, 
-       0x08, 0x8D, 0x04, 0x44, 0xA5, 0x08, 0xF0, 0x08, 
-       0xA5, 0x05, 0x85, 0x06, 0x64, 0x04, 0x64, 0x08, 
-       0x20, 0x26, 0x3B, 0xA5, 0x19, 0xF0, 0x0F, 0xA5, 
-       0x1C, 0x85, 0x1E, 0xA5, 0x1A, 0x09, 0x10, 0x8D, 
-       0x06, 0x4C, 0x64, 0x14, 0x64, 0x19, 0xA5, 0x10, 
-       0xE5, 0x11, 0xC9, 0xC8, 0xA5, 0x1B, 0x29, 0xF3, 
-       0xB0, 0x02, 0x09, 0x08, 0x8D, 0x04, 0x4C, 0xA5, 
-       0x18, 0xF0, 0x08, 0xA5, 0x15, 0x85, 0x16, 0x64, 
-       0x14, 0x64, 0x18, 0x20, 0x26, 0x3B, 0xA5, 0x29, 
-       0xF0, 0x0F, 0xA5, 0x2C, 0x85, 0x2E, 0xA5, 0x2A, 
-       0x09, 0x10, 0x8D, 0x06, 0x54, 0x64, 0x24, 0x64, 
-       0x29, 0xA5, 0x20, 0xE5, 0x21, 0xC9, 0xC8, 0xA5, 
-       0x2B, 0x29, 0xF3, 0xB0, 0x02, 0x09, 0x08, 0x8D, 
-       0x04, 0x54, 0xA5, 0x28, 0xF0, 0x08, 0xA5, 0x25, 
-       0x85, 0x26, 0x64, 0x24, 0x64, 0x28, 0x20, 0x26, 
-       0x3B, 0xA5, 0x39, 0xF0, 0x0F, 0xA5, 0x3C, 0x85, 
-       0x3E, 0xA5, 0x3A, 0x09, 0x10, 0x8D, 0x06, 0x5C, 
-       0x64, 0x34, 0x64, 0x39, 0xA5, 0x30, 0xE5, 0x31, 
-       0xC9, 0xC8, 0xA5, 0x3B, 0x29, 0xF3, 0xB0, 0x02, 
-       0x09, 0x08, 0x8D, 0x04, 0x5C, 0xA5, 0x38, 0xF0, 
-       0x08, 0xA5, 0x35, 0x85, 0x36, 0x64, 0x34, 0x64, 
-       0x38, 0x20, 0x26, 0x3B, 0xA5, 0x49, 0xF0, 0x0F, 
-       0xA5, 0x4C, 0x85, 0x4E, 0xA5, 0x4A, 0x09, 0x10, 
-       0x8D, 0x06, 0x64, 0x64, 0x44, 0x64, 0x49, 0xA5, 
-       0x40, 0xE5, 0x41, 0xC9, 0xC8, 0xA5, 0x4B, 0x29, 
-       0xF3, 0xB0, 0x02, 0x09, 0x08, 0x8D, 0x04, 0x64, 
-       0xA5, 0x48, 0xF0, 0x08, 0xA5, 0x45, 0x85, 0x46, 
-       0x64, 0x44, 0x64, 0x48, 0x20, 0x26, 0x3B, 0xA5, 
-       0x59, 0xF0, 0x0F, 0xA5, 0x5C, 0x85, 0x5E, 0xA5, 
-       0x5A, 0x09, 0x10, 0x8D, 0x06, 0x6C, 0x64, 0x54, 
-       0x64, 0x59, 0xA5, 0x50, 0xE5, 0x51, 0xC9, 0xC8, 
-       0xA5, 0x5B, 0x29, 0xF3, 0xB0, 0x02, 0x09, 0x08, 
-       0x8D, 0x04, 0x6C, 0xA5, 0x58, 0xF0, 0x08, 0xA5, 
-       0x55, 0x85, 0x56, 0x64, 0x54, 0x64, 0x58, 0x20, 
-       0x26, 0x3B, 0xA5, 0x69, 0xF0, 0x0F, 0xA5, 0x6C, 
-       0x85, 0x6E, 0xA5, 0x6A, 0x09, 0x10, 0x8D, 0x06, 
-       0x74, 0x64, 0x64, 0x64, 0x69, 0xA5, 0x60, 0xE5, 
-       0x61, 0xC9, 0xC8, 0xA5, 0x6B, 0x29, 0xF3, 0xB0, 
-       0x02, 0x09, 0x08, 0x8D, 0x04, 0x74, 0xA5, 0x68, 
-       0xF0, 0x08, 0xA5, 0x65, 0x85, 0x66, 0x64, 0x64, 
-       0x64, 0x68, 0x20, 0x26, 0x3B, 0x4C, 0x9E, 0x38, 
-       0xAD, 0x02, 0x44, 0x89, 0x08, 0xF0, 0x3B, 0x89, 
-       0x02, 0xF0, 0x1B, 0xAD, 0x00, 0x44, 0xD0, 0x32, 
-       0xA6, 0x00, 0xA9, 0x01, 0x9D, 0x00, 0x10, 0xA9, 
-       0x01, 0x9D, 0x00, 0x09, 0xE8, 0xE4, 0x01, 0xF0, 
-       0x02, 0x86, 0x00, 0x4C, 0x68, 0x3B, 0xA6, 0x00, 
-       0xAD, 0x00, 0x44, 0x9D, 0x00, 0x09, 0x9E, 0x00, 
-       0x10, 0xE8, 0xE4, 0x01, 0xF0, 0x02, 0x86, 0x00, 
-       0x29, 0x7F, 0xC9, 0x13, 0xD0, 0x04, 0xA5, 0x0E, 
-       0x85, 0x04, 0xAD, 0x02, 0x44, 0x29, 0x10, 0xF0, 
-       0x2C, 0xA6, 0x07, 0xF0, 0x0F, 0xAD, 0x02, 0x7C, 
-       0x29, 0x01, 0xD0, 0x21, 0x8E, 0x00, 0x44, 0x64, 
-       0x07, 0x4C, 0x9B, 0x3B, 0xA6, 0x06, 0xE4, 0x05, 
-       0xF0, 0x13, 0xA5, 0x04, 0xD0, 0x0F, 0xAD, 0x02, 
-       0x7C, 0x29, 0x01, 0xD0, 0x08, 0xBD, 0x00, 0x02, 
-       0x8D, 0x00, 0x44, 0xE6, 0x06, 0xAD, 0x02, 0x4C, 
+       0xA9, 0x00, 0xA0, 0x54, 0x95, 0x00, 0xE8, 0x88, 
+       0xD0, 0xFA, 0x64, 0x5C, 0x64, 0x5E, 0x64, 0x58, 
+       0x64, 0x59, 0xA9, 0x00, 0x85, 0x55, 0xA9, 0xAA, 
+       0xC9, 0x64, 0x90, 0x02, 0xE6, 0x55, 0xA5, 0x54, 
+       0xF0, 0x03, 0x4C, 0x92, 0x38, 0xA9, 0x98, 0x8D, 
+       0x06, 0x44, 0xA9, 0x0B, 0x8D, 0x04, 0x44, 0xAD, 
+       0x02, 0x44, 0xA9, 0x80, 0x8D, 0x1A, 0x7C, 0xA9, 
+       0xFF, 0x8D, 0x08, 0x7C, 0x8D, 0x0A, 0x7C, 0xA2, 
+       0x00, 0x8E, 0x00, 0x44, 0xEA, 0xEA, 0xAD, 0x02, 
+       0x44, 0xEA, 0xEA, 0x8E, 0x00, 0x44, 0xAD, 0x02, 
+       0x44, 0x29, 0x10, 0xF0, 0xF9, 0xA9, 0x11, 0x8E, 
+       0x00, 0x44, 0x8D, 0x1C, 0x7C, 0xAD, 0x02, 0x44, 
+       0x29, 0x10, 0xF0, 0xF9, 0x8E, 0x1C, 0x7C, 0xAD, 
+       0x08, 0x7C, 0x85, 0x57, 0xAD, 0x0A, 0x7C, 0x85, 
+       0x56, 0xC9, 0xD0, 0x90, 0x05, 0xA9, 0x02, 0x4C, 
+       0x82, 0x38, 0xA9, 0x01, 0x85, 0x54, 0xA9, 0x00, 
+       0x8D, 0x02, 0x44, 0x8D, 0x06, 0x44, 0x8D, 0x04, 
+       0x44, 0x4C, 0x92, 0x38, 0xAD, 0x00, 0x7C, 0xC5, 
+       0x5C, 0xF0, 0x1F, 0xC5, 0x5E, 0xF0, 0x09, 0x85, 
+       0x5E, 0xA9, 0x40, 0x85, 0x5D, 0x4C, 0xB8, 0x38, 
+       0xC6, 0x5D, 0x10, 0x0E, 0xA6, 0x58, 0x9D, 0x00, 
+       0x17, 0xE8, 0xE4, 0x59, 0xF0, 0x04, 0x86, 0x58, 
+       0x85, 0x5C, 0x20, 0x23, 0x3A, 0xA5, 0x07, 0xF0, 
+       0x0F, 0xA5, 0x0A, 0x85, 0x0B, 0xA5, 0x08, 0x09, 
+       0x10, 0x8D, 0x06, 0x44, 0x64, 0x02, 0x64, 0x07, 
+       0xA5, 0x00, 0xE5, 0x01, 0xC9, 0xC8, 0xA5, 0x09, 
+       0x29, 0xF3, 0xB0, 0x02, 0x09, 0x08, 0x8D, 0x04, 
+       0x44, 0xA5, 0x06, 0xF0, 0x08, 0xA5, 0x03, 0x85, 
+       0x04, 0x64, 0x02, 0x64, 0x06, 0x20, 0x23, 0x3A, 
+       0xA5, 0x13, 0xF0, 0x0F, 0xA5, 0x16, 0x85, 0x17, 
+       0xA5, 0x14, 0x09, 0x10, 0x8D, 0x06, 0x4C, 0x64, 
+       0x0E, 0x64, 0x13, 0xA5, 0x0C, 0xE5, 0x0D, 0xC9, 
+       0xC8, 0xA5, 0x15, 0x29, 0xF3, 0xB0, 0x02, 0x09, 
+       0x08, 0x8D, 0x04, 0x4C, 0xA5, 0x12, 0xF0, 0x08, 
+       0xA5, 0x0F, 0x85, 0x10, 0x64, 0x0E, 0x64, 0x12, 
+       0x20, 0x23, 0x3A, 0xA5, 0x1F, 0xF0, 0x0F, 0xA5, 
+       0x22, 0x85, 0x23, 0xA5, 0x20, 0x09, 0x10, 0x8D, 
+       0x06, 0x54, 0x64, 0x1A, 0x64, 0x1F, 0xA5, 0x18, 
+       0xE5, 0x19, 0xC9, 0xC8, 0xA5, 0x21, 0x29, 0xF3, 
+       0xB0, 0x02, 0x09, 0x08, 0x8D, 0x04, 0x54, 0xA5, 
+       0x1E, 0xF0, 0x08, 0xA5, 0x1B, 0x85, 0x1C, 0x64, 
+       0x1A, 0x64, 0x1E, 0x20, 0x23, 0x3A, 0xA5, 0x2B, 
+       0xF0, 0x0F, 0xA5, 0x2E, 0x85, 0x2F, 0xA5, 0x2C, 
+       0x09, 0x10, 0x8D, 0x06, 0x5C, 0x64, 0x26, 0x64, 
+       0x2B, 0xA5, 0x24, 0xE5, 0x25, 0xC9, 0xC8, 0xA5, 
+       0x2D, 0x29, 0xF3, 0xB0, 0x02, 0x09, 0x08, 0x8D, 
+       0x04, 0x5C, 0xA5, 0x2A, 0xF0, 0x08, 0xA5, 0x27, 
+       0x85, 0x28, 0x64, 0x26, 0x64, 0x2A, 0x20, 0x23, 
+       0x3A, 0xA5, 0x37, 0xF0, 0x0F, 0xA5, 0x3A, 0x85, 
+       0x3B, 0xA5, 0x38, 0x09, 0x10, 0x8D, 0x06, 0x64, 
+       0x64, 0x32, 0x64, 0x37, 0xA5, 0x30, 0xE5, 0x31, 
+       0xC9, 0xC8, 0xA5, 0x39, 0x29, 0xF3, 0xB0, 0x02, 
+       0x09, 0x08, 0x8D, 0x04, 0x64, 0xA5, 0x36, 0xF0, 
+       0x08, 0xA5, 0x33, 0x85, 0x34, 0x64, 0x32, 0x64, 
+       0x36, 0x20, 0x23, 0x3A, 0xA5, 0x43, 0xF0, 0x0F, 
+       0xA5, 0x46, 0x85, 0x47, 0xA5, 0x44, 0x09, 0x10, 
+       0x8D, 0x06, 0x6C, 0x64, 0x3E, 0x64, 0x43, 0xA5, 
+       0x3C, 0xE5, 0x3D, 0xC9, 0xC8, 0xA5, 0x45, 0x29, 
+       0xF3, 0xB0, 0x02, 0x09, 0x08, 0x8D, 0x04, 0x6C, 
+       0xA5, 0x42, 0xF0, 0x08, 0xA5, 0x3F, 0x85, 0x40, 
+       0x64, 0x3E, 0x64, 0x42, 0x20, 0x23, 0x3A, 0xA5, 
+       0x4F, 0xF0, 0x0F, 0xA5, 0x52, 0x85, 0x53, 0xA5, 
+       0x50, 0x09, 0x10, 0x8D, 0x06, 0x74, 0x64, 0x4A, 
+       0x64, 0x4F, 0xA5, 0x48, 0xE5, 0x49, 0xC9, 0xC8, 
+       0xA5, 0x51, 0x29, 0xF3, 0xB0, 0x02, 0x09, 0x08, 
+       0x8D, 0x04, 0x74, 0xA5, 0x4E, 0xF0, 0x08, 0xA5, 
+       0x4B, 0x85, 0x4C, 0x64, 0x4A, 0x64, 0x4E, 0x20, 
+       0x23, 0x3A, 0x4C, 0x92, 0x38, 0xAD, 0x02, 0x44, 
        0x89, 0x08, 0xF0, 0x3B, 0x89, 0x02, 0xF0, 0x1B, 
-       0xAD, 0x00, 0x4C, 0xD0, 0x32, 0xA6, 0x10, 0xA9, 
-       0x01, 0x9D, 0x00, 0x11, 0xA9, 0x01, 0x9D, 0x00, 
-       0x0A, 0xE8, 0xE4, 0x11, 0xF0, 0x02, 0x86, 0x10, 
-       0x4C, 0xDD, 0x3B, 0xA6, 0x10, 0xAD, 0x00, 0x4C
-       0x9D, 0x00, 0x0A, 0x9E, 0x00, 0x11, 0xE8, 0xE4, 
-       0x11, 0xF0, 0x02, 0x86, 0x10, 0x29, 0x7F, 0xC9, 
-       0x13, 0xD0, 0x04, 0xA5, 0x1E, 0x85, 0x14, 0xAD, 
-       0x02, 0x4C, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 0x17
-       0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x02, 0xD0, 
-       0x21, 0x8E, 0x00, 0x4C, 0x64, 0x17, 0x4C, 0x10
-       0x3C, 0xA6, 0x16, 0xE4, 0x15, 0xF0, 0x13, 0xA5, 
-       0x14, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x02
-       0xD0, 0x08, 0xBD, 0x00, 0x03, 0x8D, 0x00, 0x4C
-       0xE6, 0x16, 0xAD, 0x02, 0x54, 0x89, 0x08, 0xF0, 
-       0x3B, 0x89, 0x02, 0xF0, 0x1B, 0xAD, 0x00, 0x54
-       0xD0, 0x32, 0xA6, 0x20, 0xA9, 0x01, 0x9D, 0x00, 
-       0x12, 0xA9, 0x01, 0x9D, 0x00, 0x0B, 0xE8, 0xE4, 
-       0x21, 0xF0, 0x02, 0x86, 0x20, 0x4C, 0x52, 0x3C
-       0xA6, 0x20, 0xAD, 0x00, 0x54, 0x9D, 0x00, 0x0B
-       0x9E, 0x00, 0x12, 0xE8, 0xE4, 0x21, 0xF0, 0x02, 
-       0x86, 0x20, 0x29, 0x7F, 0xC9, 0x13, 0xD0, 0x04, 
-       0xA5, 0x2E, 0x85, 0x24, 0xAD, 0x02, 0x54, 0x29, 
-       0x10, 0xF0, 0x2C, 0xA6, 0x27, 0xF0, 0x0F, 0xAD, 
-       0x02, 0x7C, 0x29, 0x04, 0xD0, 0x21, 0x8E, 0x00, 
-       0x54, 0x64, 0x27, 0x4C, 0x85, 0x3C, 0xA6, 0x26
-       0xE4, 0x25, 0xF0, 0x13, 0xA5, 0x24, 0xD0, 0x0F, 
-       0xAD, 0x02, 0x7C, 0x29, 0x04, 0xD0, 0x08, 0xBD, 
-       0x00, 0x04, 0x8D, 0x00, 0x54, 0xE6, 0x26, 0xAD, 
-       0x02, 0x5C, 0x89, 0x08, 0xF0, 0x3B, 0x89, 0x02, 
-       0xF0, 0x1B, 0xAD, 0x00, 0x5C, 0xD0, 0x32, 0xA6, 
-       0x30, 0xA9, 0x01, 0x9D, 0x00, 0x13, 0xA9, 0x01, 
-       0x9D, 0x00, 0x0C, 0xE8, 0xE4, 0x31, 0xF0, 0x02, 
-       0x86, 0x30, 0x4C, 0xC7, 0x3C, 0xA6, 0x30, 0xAD, 
-       0x00, 0x5C, 0x9D, 0x00, 0x0C, 0x9E, 0x00, 0x13
-       0xE8, 0xE4, 0x31, 0xF0, 0x02, 0x86, 0x30, 0x29, 
-       0x7F, 0xC9, 0x13, 0xD0, 0x04, 0xA5, 0x3E, 0x85, 
-       0x34, 0xAD, 0x02, 0x5C, 0x29, 0x10, 0xF0, 0x2C, 
-       0xA6, 0x37, 0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 
-       0x08, 0xD0, 0x21, 0x8E, 0x00, 0x5C, 0x64, 0x37
-       0x4C, 0xFA, 0x3C, 0xA6, 0x36, 0xE4, 0x35, 0xF0, 
-       0x13, 0xA5, 0x34, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 
-       0x29, 0x08, 0xD0, 0x08, 0xBD, 0x00, 0x05, 0x8D, 
-       0x00, 0x5C, 0xE6, 0x36, 0xAD, 0x02, 0x64, 0x89, 
+       0xAD, 0x00, 0x44, 0xD0, 0x32, 0xA6, 0x00, 0xA9, 
+       0x01, 0x9D, 0x00, 0x10, 0xA9, 0x01, 0x9D, 0x00, 
+       0x09, 0xE8, 0xE4, 0x01, 0xF0, 0x02, 0x86, 0x00, 
+       0x4C, 0x65, 0x3A, 0xA6, 0x00, 0xAD, 0x00, 0x44
+       0x9D, 0x00, 0x09, 0x9E, 0x00, 0x10, 0xE8, 0xE4, 
+       0x01, 0xF0, 0x02, 0x86, 0x00, 0x29, 0x7F, 0xC9, 
+       0x13, 0xD0, 0x04, 0xA5, 0x0B, 0x85, 0x02, 0xAD, 
+       0x02, 0x44, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 0x05
+       0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x01, 0xD0, 
+       0x21, 0x8E, 0x00, 0x44, 0x64, 0x05, 0x4C, 0x98
+       0x3A, 0xA6, 0x04, 0xE4, 0x03, 0xF0, 0x13, 0xA5, 
+       0x02, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x01
+       0xD0, 0x08, 0xBD, 0x00, 0x02, 0x8D, 0x00, 0x44
+       0xE6, 0x04, 0xAD, 0x02, 0x4C, 0x89, 0x08, 0xF0, 
+       0x3B, 0x89, 0x02, 0xF0, 0x1B, 0xAD, 0x00, 0x4C
+       0xD0, 0x32, 0xA6, 0x0C, 0xA9, 0x01, 0x9D, 0x00, 
+       0x11, 0xA9, 0x01, 0x9D, 0x00, 0x0A, 0xE8, 0xE4, 
+       0x0D, 0xF0, 0x02, 0x86, 0x0C, 0x4C, 0xDA, 0x3A
+       0xA6, 0x0C, 0xAD, 0x00, 0x4C, 0x9D, 0x00, 0x0A
+       0x9E, 0x00, 0x11, 0xE8, 0xE4, 0x0D, 0xF0, 0x02, 
+       0x86, 0x0C, 0x29, 0x7F, 0xC9, 0x13, 0xD0, 0x04, 
+       0xA5, 0x17, 0x85, 0x0E, 0xAD, 0x02, 0x4C, 0x29, 
+       0x10, 0xF0, 0x2C, 0xA6, 0x11, 0xF0, 0x0F, 0xAD, 
+       0x02, 0x7C, 0x29, 0x02, 0xD0, 0x21, 0x8E, 0x00, 
+       0x4C, 0x64, 0x11, 0x4C, 0x0D, 0x3B, 0xA6, 0x10
+       0xE4, 0x0F, 0xF0, 0x13, 0xA5, 0x0E, 0xD0, 0x0F, 
+       0xAD, 0x02, 0x7C, 0x29, 0x02, 0xD0, 0x08, 0xBD, 
+       0x00, 0x03, 0x8D, 0x00, 0x4C, 0xE6, 0x10, 0xAD, 
+       0x02, 0x54, 0x89, 0x08, 0xF0, 0x3B, 0x89, 0x02, 
+       0xF0, 0x1B, 0xAD, 0x00, 0x54, 0xD0, 0x32, 0xA6, 
+       0x18, 0xA9, 0x01, 0x9D, 0x00, 0x12, 0xA9, 0x01, 
+       0x9D, 0x00, 0x0B, 0xE8, 0xE4, 0x19, 0xF0, 0x02, 
+       0x86, 0x18, 0x4C, 0x4F, 0x3B, 0xA6, 0x18, 0xAD, 
+       0x00, 0x54, 0x9D, 0x00, 0x0B, 0x9E, 0x00, 0x12
+       0xE8, 0xE4, 0x19, 0xF0, 0x02, 0x86, 0x18, 0x29, 
+       0x7F, 0xC9, 0x13, 0xD0, 0x04, 0xA5, 0x23, 0x85, 
+       0x1A, 0xAD, 0x02, 0x54, 0x29, 0x10, 0xF0, 0x2C, 
+       0xA6, 0x1D, 0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 
+       0x04, 0xD0, 0x21, 0x8E, 0x00, 0x54, 0x64, 0x1D
+       0x4C, 0x82, 0x3B, 0xA6, 0x1C, 0xE4, 0x1B, 0xF0, 
+       0x13, 0xA5, 0x1A, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 
+       0x29, 0x04, 0xD0, 0x08, 0xBD, 0x00, 0x04, 0x8D, 
+       0x00, 0x54, 0xE6, 0x1C, 0xAD, 0x02, 0x5C, 0x89, 
        0x08, 0xF0, 0x3B, 0x89, 0x02, 0xF0, 0x1B, 0xAD, 
-       0x00, 0x64, 0xD0, 0x32, 0xA6, 0x40, 0xA9, 0x01, 
-       0x9D, 0x00, 0x14, 0xA9, 0x01, 0x9D, 0x00, 0x0D, 
-       0xE8, 0xE4, 0x41, 0xF0, 0x02, 0x86, 0x40, 0x4C, 
-       0x3C, 0x3D, 0xA6, 0x40, 0xAD, 0x00, 0x64, 0x9D, 
-       0x00, 0x0D, 0x9E, 0x00, 0x14, 0xE8, 0xE4, 0x41, 
-       0xF0, 0x02, 0x86, 0x40, 0x29, 0x7F, 0xC9, 0x13, 
-       0xD0, 0x04, 0xA5, 0x4E, 0x85, 0x44, 0xAD, 0x02, 
-       0x64, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 0x47, 0xF0, 
-       0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x10, 0xD0, 0x21, 
-       0x8E, 0x00, 0x64, 0x64, 0x47, 0x4C, 0x6F, 0x3D, 
-       0xA6, 0x46, 0xE4, 0x45, 0xF0, 0x13, 0xA5, 0x44, 
-       0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x10, 0xD0, 
-       0x08, 0xBD, 0x00, 0x06, 0x8D, 0x00, 0x64, 0xE6, 
-       0x46, 0xAD, 0x02, 0x6C, 0x89, 0x08, 0xF0, 0x3B, 
-       0x89, 0x02, 0xF0, 0x1B, 0xAD, 0x00, 0x6C, 0xD0, 
-       0x32, 0xA6, 0x50, 0xA9, 0x01, 0x9D, 0x00, 0x15, 
-       0xA9, 0x01, 0x9D, 0x00, 0x0E, 0xE8, 0xE4, 0x51, 
-       0xF0, 0x02, 0x86, 0x50, 0x4C, 0xB1, 0x3D, 0xA6, 
-       0x50, 0xAD, 0x00, 0x6C, 0x9D, 0x00, 0x0E, 0x9E, 
-       0x00, 0x15, 0xE8, 0xE4, 0x51, 0xF0, 0x02, 0x86, 
-       0x50, 0x29, 0x7F, 0xC9, 0x13, 0xD0, 0x04, 0xA5, 
-       0x5E, 0x85, 0x54, 0xAD, 0x02, 0x6C, 0x29, 0x10, 
-       0xF0, 0x2C, 0xA6, 0x57, 0xF0, 0x0F, 0xAD, 0x02, 
-       0x7C, 0x29, 0x20, 0xD0, 0x21, 0x8E, 0x00, 0x6C, 
-       0x64, 0x57, 0x4C, 0xE4, 0x3D, 0xA6, 0x56, 0xE4, 
-       0x55, 0xF0, 0x13, 0xA5, 0x54, 0xD0, 0x0F, 0xAD, 
-       0x02, 0x7C, 0x29, 0x20, 0xD0, 0x08, 0xBD, 0x00, 
-       0x07, 0x8D, 0x00, 0x6C, 0xE6, 0x56, 0xAD, 0x02, 
-       0x74, 0x89, 0x08, 0xF0, 0x3B, 0x89, 0x02, 0xF0, 
-       0x1B, 0xAD, 0x00, 0x74, 0xD0, 0x32, 0xA6, 0x60, 
-       0xA9, 0x01, 0x9D, 0x00, 0x16, 0xA9, 0x01, 0x9D, 
-       0x00, 0x0F, 0xE8, 0xE4, 0x61, 0xF0, 0x02, 0x86, 
-       0x60, 0x4C, 0x26, 0x3E, 0xA6, 0x60, 0xAD, 0x00, 
-       0x74, 0x9D, 0x00, 0x0F, 0x9E, 0x00, 0x16, 0xE8, 
-       0xE4, 0x61, 0xF0, 0x02, 0x86, 0x60, 0x29, 0x7F, 
-       0xC9, 0x13, 0xD0, 0x04, 0xA5, 0x6E, 0x85, 0x64, 
-       0xAD, 0x02, 0x74, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 
-       0x67, 0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x40, 
-       0xD0, 0x21, 0x8E, 0x00, 0x74, 0x64, 0x67, 0x4C, 
-       0x59, 0x3E, 0xA6, 0x66, 0xE4, 0x65, 0xF0, 0x13, 
-       0xA5, 0x64, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 
-       0x40, 0xD0, 0x08, 0xBD, 0x00, 0x08, 0x8D, 0x00, 
-       0x74, 0xE6, 0x66, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0x00, 0x5C, 0xD0, 0x32, 0xA6, 0x24, 0xA9, 0x01, 
+       0x9D, 0x00, 0x13, 0xA9, 0x01, 0x9D, 0x00, 0x0C, 
+       0xE8, 0xE4, 0x25, 0xF0, 0x02, 0x86, 0x24, 0x4C, 
+       0xC4, 0x3B, 0xA6, 0x24, 0xAD, 0x00, 0x5C, 0x9D, 
+       0x00, 0x0C, 0x9E, 0x00, 0x13, 0xE8, 0xE4, 0x25, 
+       0xF0, 0x02, 0x86, 0x24, 0x29, 0x7F, 0xC9, 0x13, 
+       0xD0, 0x04, 0xA5, 0x2F, 0x85, 0x26, 0xAD, 0x02, 
+       0x5C, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 0x29, 0xF0, 
+       0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x08, 0xD0, 0x21, 
+       0x8E, 0x00, 0x5C, 0x64, 0x29, 0x4C, 0xF7, 0x3B, 
+       0xA6, 0x28, 0xE4, 0x27, 0xF0, 0x13, 0xA5, 0x26, 
+       0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x08, 0xD0, 
+       0x08, 0xBD, 0x00, 0x05, 0x8D, 0x00, 0x5C, 0xE6, 
+       0x28, 0xAD, 0x02, 0x64, 0x89, 0x08, 0xF0, 0x3B, 
+       0x89, 0x02, 0xF0, 0x1B, 0xAD, 0x00, 0x64, 0xD0, 
+       0x32, 0xA6, 0x30, 0xA9, 0x01, 0x9D, 0x00, 0x14, 
+       0xA9, 0x01, 0x9D, 0x00, 0x0D, 0xE8, 0xE4, 0x31, 
+       0xF0, 0x02, 0x86, 0x30, 0x4C, 0x39, 0x3C, 0xA6, 
+       0x30, 0xAD, 0x00, 0x64, 0x9D, 0x00, 0x0D, 0x9E, 
+       0x00, 0x14, 0xE8, 0xE4, 0x31, 0xF0, 0x02, 0x86, 
+       0x30, 0x29, 0x7F, 0xC9, 0x13, 0xD0, 0x04, 0xA5, 
+       0x3B, 0x85, 0x32, 0xAD, 0x02, 0x64, 0x29, 0x10, 
+       0xF0, 0x2C, 0xA6, 0x35, 0xF0, 0x0F, 0xAD, 0x02, 
+       0x7C, 0x29, 0x10, 0xD0, 0x21, 0x8E, 0x00, 0x64, 
+       0x64, 0x35, 0x4C, 0x6C, 0x3C, 0xA6, 0x34, 0xE4, 
+       0x33, 0xF0, 0x13, 0xA5, 0x32, 0xD0, 0x0F, 0xAD, 
+       0x02, 0x7C, 0x29, 0x10, 0xD0, 0x08, 0xBD, 0x00, 
+       0x06, 0x8D, 0x00, 0x64, 0xE6, 0x34, 0xAD, 0x02, 
+       0x6C, 0x89, 0x08, 0xF0, 0x3B, 0x89, 0x02, 0xF0, 
+       0x1B, 0xAD, 0x00, 0x6C, 0xD0, 0x32, 0xA6, 0x3C, 
+       0xA9, 0x01, 0x9D, 0x00, 0x15, 0xA9, 0x01, 0x9D, 
+       0x00, 0x0E, 0xE8, 0xE4, 0x3D, 0xF0, 0x02, 0x86, 
+       0x3C, 0x4C, 0xAE, 0x3C, 0xA6, 0x3C, 0xAD, 0x00, 
+       0x6C, 0x9D, 0x00, 0x0E, 0x9E, 0x00, 0x15, 0xE8, 
+       0xE4, 0x3D, 0xF0, 0x02, 0x86, 0x3C, 0x29, 0x7F, 
+       0xC9, 0x13, 0xD0, 0x04, 0xA5, 0x47, 0x85, 0x3E, 
+       0xAD, 0x02, 0x6C, 0x29, 0x10, 0xF0, 0x2C, 0xA6, 
+       0x41, 0xF0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x20, 
+       0xD0, 0x21, 0x8E, 0x00, 0x6C, 0x64, 0x41, 0x4C, 
+       0xE1, 0x3C, 0xA6, 0x40, 0xE4, 0x3F, 0xF0, 0x13, 
+       0xA5, 0x3E, 0xD0, 0x0F, 0xAD, 0x02, 0x7C, 0x29, 
+       0x20, 0xD0, 0x08, 0xBD, 0x00, 0x07, 0x8D, 0x00, 
+       0x6C, 0xE6, 0x40, 0xAD, 0x02, 0x74, 0x89, 0x08, 
+       0xF0, 0x3B, 0x89, 0x02, 0xF0, 0x1B, 0xAD, 0x00, 
+       0x74, 0xD0, 0x32, 0xA6, 0x48, 0xA9, 0x01, 0x9D, 
+       0x00, 0x16, 0xA9, 0x01, 0x9D, 0x00, 0x0F, 0xE8, 
+       0xE4, 0x49, 0xF0, 0x02, 0x86, 0x48, 0x4C, 0x23, 
+       0x3D, 0xA6, 0x48, 0xAD, 0x00, 0x74, 0x9D, 0x00, 
+       0x0F, 0x9E, 0x00, 0x16, 0xE8, 0xE4, 0x49, 0xF0, 
+       0x02, 0x86, 0x48, 0x29, 0x7F, 0xC9, 0x13, 0xD0, 
+       0x04, 0xA5, 0x53, 0x85, 0x4A, 0xAD, 0x02, 0x74, 
+       0x29, 0x10, 0xF0, 0x2C, 0xA6, 0x4D, 0xF0, 0x0F, 
+       0xAD, 0x02, 0x7C, 0x29, 0x40, 0xD0, 0x21, 0x8E, 
+       0x00, 0x74, 0x64, 0x4D, 0x4C, 0x56, 0x3D, 0xA6, 
+       0x4C, 0xE4, 0x4B, 0xF0, 0x13, 0xA5, 0x4A, 0xD0, 
+       0x0F, 0xAD, 0x02, 0x7C, 0x29, 0x40, 0xD0, 0x08, 
+       0xBD, 0x00, 0x08, 0x8D, 0x00, 0x74, 0xE6, 0x4C, 
+       0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
index e1e106e..afeaee8 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: mscreg.h,v 1.4 1995/10/07 18:22:14 chopps Exp $ */
+/*     $OpenBSD: mscreg.h,v 1.2 1997/01/16 09:25:07 niklas Exp $ */
+/*     $NetBSD: mscreg.h,v 1.5 1996/12/09 17:24:58 is Exp $ */
 
 /*
  * Copyright (c) 1993 Zik.
@@ -46,8 +47,8 @@
  *    - Change to NetBSD style for integration in to the main tree. 950919
  */
 
-#define        NUMLINES        7               /* number of lines per card */
-#define        IOBUFLEN        256             /* number of bytes per buffer */
+#define        NUMLINES        7       /* number of lines per card */
+#define        IOBUFLEN        256     /* number of bytes per buffer */
 #define        IOBUFLENMASK    0xff    /* mask for maximum number of bytes */
 #define        IOBUFHIGHWATER  192     /* point at which to enable output */
 #define        IOBUFLOWWATER   128     /* point at which to wake output */
@@ -64,13 +65,15 @@ struct msccommon {
        u_char Pad_a;
        u_char TimerH;  /* timer value after speed check */
        u_char TimerL;
+       u_char CDHead;  /* head pointer for CD message queue */
+       u_char CDTail;  /* tail pointer for CD message queue */
+       u_char CDStatus;
+       u_char Pad_b;
 };
 
 struct mscstatus {
        u_char InHead;          /* input queue head */
        u_char InTail;          /* input queue tail */
-       u_char Pad_a;           /* paddington */
-       u_char Pad_b;           /* paddington */
        u_char OutDisable;      /* disables output */
        u_char OutHead;         /* output queue head */
        u_char OutTail;         /* output queue tail */
@@ -81,22 +84,22 @@ struct mscstatus {
        u_char Command;         /* command byte - see MSCCMD */
        u_char SoftFlow;        /* enables xon/xoff flow control */
        /* private 65C02 fields: */
-       u_char chCD;            /* used to detect CD changes */
        u_char XonOff;          /* stores XON/XOFF enable/disable */
-       u_char Pad_c;           /* paddington */
 };
 
-#define        MSC_MEMPAD      \
+#define        MSC_MEMPAD1     \
     (0x0200 - NUMLINES * sizeof(struct mscstatus) - sizeof(struct msccommon))
+#define        MSC_MEMPAD2     (0x2000 - NUMLINES * IOBUFLEN - IOBUFLEN)
        
 struct mscmemory {
        struct mscstatus Status[NUMLINES];      /* 0x0000-0x006f status areas */
-       struct msccommon Common;                /* 0x0070-0x0073 common flags */
-       u_char Dummy1[MSC_MEMPAD];              /* 0x00XX-0x01ff */
+       struct msccommon Common;                /* 0x0070-0x0077 common flags */
+       u_char Dummy1[MSC_MEMPAD1];             /* 0x00XX-0x01ff */
        u_char OutBuf[NUMLINES][IOBUFLEN];      /* 0x0200-0x08ff output bufs */
        u_char InBuf[NUMLINES][IOBUFLEN];       /* 0x0900-0x0fff input bufs */
        u_char InCtl[NUMLINES][IOBUFLEN];       /* 0x1000-0x16ff control data */
-       u_char Dummy2[ 0x2000 - 7 * 0x0100];    /* 0x1700-0x2fff */
+       u_char CDBuf[IOBUFLEN];                 /* 0x1700-0x17ff CD event buffer */
+       u_char Dummy2[MSC_MEMPAD2];             /* 0x1800-0x2fff */
        u_char Code[0x1000];                    /* 0x3000-0x3fff code area */
        u_short InterruptAck;                   /* 0x4000        intr ack */
        u_char Dummy3[0x3ffe];                  /* 0x4002-0x7fff */
@@ -107,16 +110,17 @@ struct mscmemory {
                                                /*  6502 RESET line held high */
 };
 
-#undef MSC_MEMPAD
+#undef MSC_MEMPAD1
+#undef MSC_MEMPAD2
 
 struct mscdevice {
        volatile struct mscmemory *board;       /* where the board is located */
        int flags;                      /* modem control flags */
        int openflags;                  /* flags for device open */
+       u_char unit;                    /* which unit (ie. which board) */
        u_char port;                    /* which port on the board (0-6) */
        u_char active;                  /* does this port have hardware? */
        u_char closing;                 /* are we flushing before close? */
-       u_char paddington;              /* just for padding */
        char tmpbuf[IOBUFLEN];          /* temp buffer for data transfers */
 };
 
index a1aeeb7..0e57650 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: otgsc.c,v 1.4 1996/11/23 21:45:22 kstailey Exp $      */
-/*     $NetBSD: otgsc.c,v 1.11 1996/04/21 21:12:16 veego Exp $ */
+/*     $OpenBSD: otgsc.c,v 1.5 1997/01/16 09:25:08 niklas Exp $        */
+/*     $NetBSD: otgsc.c,v 1.17 1996/12/23 09:10:27 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index 6ae89c2..69fdf80 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: par.c,v 1.3 1996/05/02 06:44:24 niklas Exp $  */
-/*     $NetBSD: par.c,v 1.13 1996/04/21 21:12:18 veego Exp $   */
+/*     $OpenBSD: par.c,v 1.4 1997/01/16 09:25:09 niklas Exp $  */
+/*     $NetBSD: par.c,v 1.16 1996/12/23 09:10:28 veego Exp $   */
 
 /*
  * Copyright (c) 1982, 1990 The Regents of the University of California.
index f9250f4..49f799e 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: parioctl.h,v 1.2 1997/01/16 09:25:11 niklas Exp $     */
 /*     $NetBSD: parioctl.h,v 1.5 1994/10/26 02:32:00 cgd Exp $ */
 
 /*
index 18bf42a..a3cac40 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: rtmondefs.c,v 1.2 1997/01/16 09:25:12 niklas Exp $    */
 /*     $NetBSD: rtmondefs.c,v 1.2 1994/10/26 02:04:33 cgd Exp $        */
 
 static struct MonDef monitor_defs[] = {
index 22811ed..ab4b80a 100644 (file)
@@ -1,3 +1,4 @@
+;      $OpenBSD: rtmons,v 1.2 1997/01/16 09:25:13 niklas Exp $
 ;      $NetBSD: rtmons,v 1.2 1994/10/26 02:04:36 cgd Exp $
 
 ; 640 Ã— 200, 4 Bit, 31609 Hz, 75 Hz d
index cf83fab..eaba55a 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: sbic.c,v 1.7 1996/05/29 10:15:38 niklas Exp $ */
-/*     $NetBSD: sbic.c,v 1.25 1996/05/12 02:26:10 mhitch Exp $ */
+/*     $OpenBSD: sbic.c,v 1.8 1997/01/16 09:25:16 niklas Exp $ */
+/*     $NetBSD: sbic.c,v 1.28 1996/10/13 03:07:29 christos Exp $       */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -1791,7 +1791,7 @@ sbicgo(dev, xs)
        /*
         * push the data cache ( I think this won't work (EH))
         */
-#if defined(M68040)
+#if defined(M68040) || defined(M68060)
        if (mmutype == MMU_68040 && usedma && count) {
                dma_cachectl(addr, count);
                if (((u_int)addr & 0xF) || (((u_int)addr + count) & 0xF))
@@ -2279,10 +2279,11 @@ sbicnextstate(dev, csr, asr)
                /*
                 * check for overlapping cache line, flush if so
                 */
-#ifdef M68040
+#if defined(M68040) || defined(M68060)
                if (dev->sc_flags & SBICF_DCFLUSH) {
 #if 0
-                       printf("sbic: 68040 DMA cache flush needs fixing? %x:%x\n",
+                       printf("sbic: 68040/68060 DMA cache flush needs "
+                           "fixing? %x:%x\n",
                            dev->sc_xs->data, dev->sc_xs->datalen);
 #endif
                }
@@ -2558,10 +2559,12 @@ sbicnextstate(dev, csr, asr)
                        /*
                         * check for overlapping cache line, flush if so
                         */
-#ifdef M68040
+#if defined(M68040) || defined(M68060)
+
                        if (dev->sc_flags & SBICF_DCFLUSH) {
 #if 0
-                               printf("sibc: 68040 DMA cache flush needs fixing? %x:%x\n",
+                               printf("sbic: 68040/060 DMA cache flush needs "
+                                   "fixing? %x:%x\n",
                                    dev->sc_xs->data, dev->sc_xs->datalen);
 #endif
                        }
index 088d3e3..a7b08a4 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: sbicreg.h,v 1.3 1997/01/16 09:25:17 niklas Exp $      */
 /*     $NetBSD: sbicreg.h,v 1.2 1994/10/26 02:04:40 cgd Exp $  */
 
 /*
index ea12bc5..f49bce1 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: sci.c,v 1.4 1996/05/29 10:15:40 niklas Exp $  */
-/*     $NetBSD: sci.c,v 1.17 1996/05/12 02:26:19 mhitch Exp $  */
+/*     $OpenBSD: sci.c,v 1.5 1997/01/16 09:25:19 niklas Exp $  */
+/*     $NetBSD: sci.c,v 1.19 1996/10/13 03:07:31 christos Exp $        */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index b86f5a6..8be3d9c 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: scireg.h,v 1.2 1997/01/16 09:25:20 niklas Exp $       */
 /*     $NetBSD: scireg.h,v 1.3 1994/10/26 02:04:46 cgd Exp $   */
 
 /*
diff --git a/sys/arch/amiga/dev/scsidefs.h b/sys/arch/amiga/dev/scsidefs.h
deleted file mode 100644 (file)
index e69de29..0000000
index 1d40b2c..8561cf2 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: ser.c,v 1.5 1996/08/23 18:53:17 niklas Exp $  */
-/*     $NetBSD: ser.c,v 1.34.4.1 1996/06/06 04:53:19 mhitch Exp $      */
+/*     $OpenBSD: ser.c,v 1.6 1997/01/16 09:25:22 niklas Exp $  */
+/*     $NetBSD: ser.c,v 1.39 1996/12/23 09:10:29 veego Exp $   */
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -354,12 +354,16 @@ serclose(dev, flag, mode, p)
        if (dev != kgdb_dev)
 #endif
                custom.intena = INTF_RBF | INTF_TBE;    /* disable interrups */
-       custom.intreq = INTF_RBF | INTF_TBE;            /* clear int request */
+       custom.intreq = INTF_RBF | INTF_TBE;            /* clear intr req */
 
-       if ((tp->t_cflag & HUPCL) &&
-           !(SWFLAGS(dev) & TIOCFLAG_SOFTCAR))
-               /* XXX perhaps only clear DTR */
-               (void) sermctl(dev, 0, DMSET);
+       /*
+        * If the device is closed, it's close, no matter whether we deal with
+        * modem control signals nor not.
+        */
+#if 0
+       if (tp->t_cflag & HUPCL || tp->t_state & TS_WOPEN ||
+           (tp->t_state & TS_ISOPEN) == 0)
+#endif
        ttyclose(tp);
 #if not_yet
        if (tp != &ser_cons) {
index a53d30a..879bf7d 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: serreg.h,v 1.2 1997/01/16 09:25:23 niklas Exp $       */
 /*     $NetBSD: serreg.h,v 1.7 1994/10/26 02:04:54 cgd Exp $   */
 
 /*
index 644171b..1a2fba0 100644 (file)
@@ -1,6 +1,5 @@
-/*    $OpenBSD: sfas.c,v 1.5 1996/05/02 06:44:31 niklas Exp $  */
-
-/*     $NetBSD: sfas.c,v 1.9 1996/04/23 22:53:23 veego Exp $   */
+/*    $OpenBSD: sfas.c,v 1.6 1997/01/16 09:25:25 niklas Exp $  */
+/*     $NetBSD: sfas.c,v 1.12 1996/10/13 03:07:33 christos Exp $       */
 
 /*
  * Copyright (c) 1995 Daniel Widenfalk
@@ -369,7 +368,7 @@ sfas_scsicmd(struct scsi_xfer *xs)
  *  2) Out data source/destination is not in the u-stack area.
  */
        if (!(flags & SCSI_POLL) && (
-#ifdef M68040
+#if defined(M68040) || defined(M68060)
            ((mmutype == MMU_68040) && ((vm_offset_t)xs->data >= 0xFFFC0000)) &&
 #endif
                       ((vm_offset_t)xs->data >= 0xFF000000))) {
index 127d1fc..f63d723 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: siop.c,v 1.8 1996/05/29 10:15:43 niklas Exp $ */
-/*     $NetBSD: siop.c,v 1.33 1996/05/12 02:26:26 mhitch Exp $ */
+/*     $OpenBSD: siop.c,v 1.9 1997/01/16 09:25:26 niklas Exp $ */
+/*     $NetBSD: siop.c,v 1.35 1996/10/13 03:07:34 christos Exp $       */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index f43c74b..3a37fc8 100644 (file)
@@ -1,3 +1,4 @@
+;      $OpenBSD: siop_script.ss,v 1.2 1997/01/16 09:25:29 niklas Exp $
 ;      $NetBSD: siop_script.ss,v 1.3 1995/08/18 15:28:11 chopps Exp $
 
 ;
index f6a00f1..83cba62 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: view.c,v 1.2 1996/05/02 06:44:36 niklas Exp $ */
-/*     $NetBSD: view.c,v 1.13 1996/04/21 21:12:39 veego Exp $  */
+/*     $OpenBSD: view.c,v 1.3 1997/01/16 09:25:30 niklas Exp $ */
+/*     $NetBSD: view.c,v 1.16 1996/10/13 03:07:35 christos Exp $       */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
index b3e4f4c..fd8844e 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: viewvar.h,v 1.2 1997/01/16 09:25:30 niklas Exp $      */
 /*     $NetBSD: viewvar.h,v 1.3 1994/10/26 02:05:08 cgd Exp $  */
 
 /*
index d98e2c0..1b07a19 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: vuid_event.h,v 1.2 1997/01/16 09:25:32 niklas Exp $   */
 /*     $NetBSD: vuid_event.h,v 1.2 1994/10/26 02:05:10 cgd Exp $       */
 
 /*
index be70b88..1792761 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: wesc.c,v 1.5 1996/11/23 21:45:23 kstailey Exp $       */
-/*     $NetBSD: wesc.c,v 1.13 1996/04/21 21:12:42 veego Exp $  */
+/*     $OpenBSD: wesc.c,v 1.6 1997/01/16 09:25:33 niklas Exp $ */
+/*     $NetBSD: wesc.c,v 1.19 1996/12/23 09:10:30 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index 7ca4777..410eb04 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: wstsc.c,v 1.4 1996/11/23 21:45:23 kstailey Exp $      */
-/*     $NetBSD: wstsc.c,v 1.12 1996/04/28 06:49:35 mhitch Exp $        */
+/*     $OpenBSD: wstsc.c,v 1.5 1997/01/16 09:25:34 niklas Exp $        */
+/*     $NetBSD: wstsc.c,v 1.18 1996/12/23 09:10:31 veego Exp $ */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index ab07e78..588b151 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: zbus.c,v 1.7 1996/11/23 21:45:24 kstailey Exp $       */
-/*     $NetBSD: zbus.c,v 1.19 1996/05/19 21:06:09 veego Exp $  */
+/*     $OpenBSD: zbus.c,v 1.8 1997/01/16 09:25:35 niklas Exp $ */
+/*     $NetBSD: zbus.c,v 1.31 1997/01/06 18:05:15 is Exp $     */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -57,19 +57,22 @@ struct preconfdata {
  */
 static struct aconfdata aconftab[] = {
        /* Commodore Amiga */
-       { "atfsc",      514,    84 },
        { "atzee",      513,    1 },
+       { "atzsc",      514,    2 },
        { "atzsc",      514,    3 },
        { "bah",        514,    9 },    /* A2060 */
-       { "le",         514,    112 },
        { "ql",         514,    69 },
        { "ql",         514,    70 },
+       { "atfsc",      514,    84 },
+       { "le",         514,    112 },
        /* Ameristar */
        { "le",         1053,   1 },
        { "bah",        1053,   9 },    /* A2060 */
        { "es",         1053,   10 },
        /* University of Lowell */
        { "grful",      1030,   0 },
+       /* DMI */
+       { "grfrs",      2129,   1 },    /* Resolver graphics board */
        /* Macrosystems */
        { "grfrt",      18260,  6 },
        { "grfrh",      18260,  16},    /* Retina BLT Z3 */
@@ -101,10 +104,11 @@ static struct aconfdata aconftab[] = {
        /* Hydra */
        { "ed",         2121,   1 },
        /* ASDG */
-       { "ed",         9999,   9 },            /* XXXX */
+       { "ed",         1023,   254 },
        /* Village Tronic Ariadne */
        { "ae",         2167,   201},
        /* bsc/Alf Data */
+       { "Tandem",     2092,    6 },   /* Tandem AT disk controler */
        { "mfc",        2092,   16 },
        { "mfc",        2092,   17 },
        { "mfc",        2092,   18 },
@@ -122,21 +126,30 @@ static struct aconfdata aconftab[] = {
        /* phase 5 digital products */
        { "flmem",      8512,   10},    /* FastlaneZ3 memory */
        { "flsc",       8512,   11},    /* FastlaneZ3 */
+       { "cbsc",       8512,   12},    /* Cyberstorm Mk I SCSI */
+       { "bzivsc",     8512,   17},    /* Blizzard IV SCSI */
+       { "bztzsc",     8512,   24},    /* Blizzard 2060 SCSI */
+       { "cbiisc",     8512,   25},    /* Cyberstorm Mk II SCSI */
        { "grfcv",      8512,   34},    /* CyberVison 64 */
-       /* Commodore Amiga */
-       { "afsc",       514,    84},    /* A4091 SCSI HD Controller */
        /* Hacker Inc. */
        { "mlhsc",      2011,   1 },
        /* Resource Management Force */
        { "qn",         2011,   2 },    /* QuickNet Ethernet */
        /* ??? */
        { "empsc",      2171,   21 },   /* Emplant SCSI */
+       { "empsc",      2171,   32 },   /* Emplant SCSI */
        /* Tseng ET4000 boards */
        { "grfet",      2181,   0 },    /* oMniBus */
        { "grfet",      2167,   1 },    /* Domnio mem */
        { "grfet",      2167,   2 },    /* Domino regs */
        { "grfet",      2117,   3 },    /* Merlin mem */
-       { "grfet",      2117,   4 }     /* Merlin regs */
+       { "grfet",      2117,   4 },    /* Merlin regs */
+       /* Advanced Systems */
+       { "nxsc",       2102,   1 },    /* Nexus SCSI board */
+       /* Masoboshi */
+       { "mcsc",       8535,   4 },    /* Masoboshi Mastercard 702 */
+       /* Apollo */
+       { "apssc",      8738,   35 }    /* Apollo '060 scsi */
 };
 static int naconfent = sizeof(aconftab) / sizeof(struct aconfdata);
 
index 6c17a0e..bc799bd 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: zbusvar.h,v 1.2 1997/01/16 09:25:36 niklas Exp $      */
 /*     $NetBSD: zbusvar.h,v 1.1 1994/12/28 09:26:09 chopps Exp $       */
 
 /*
index 0184d80..ffd2eef 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: zssc.c,v 1.8 1996/11/23 21:45:25 kstailey Exp $       */
-/*     $NetBSD: zssc.c,v 1.16 1996/04/21 21:12:45 veego Exp $  */
+/*     $OpenBSD: zssc.c,v 1.9 1997/01/16 09:25:37 niklas Exp $ */
+/*     $NetBSD: zssc.c,v 1.22 1996/12/23 09:10:33 veego Exp $  */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
index d228617..46114ee 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: ansi.h,v 1.2 1997/01/16 09:25:41 niklas Exp $ */
 /*     $NetBSD: ansi.h,v 1.8 1994/10/26 02:05:55 cgd Exp $     */
 
 #ifndef _MACHINE_ANSI_H_
index 3e9ddfb..c77d571 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: asm.h,v 1.2 1997/01/16 09:25:43 niklas Exp $  */
 /*     $NetBSD: asm.h,v 1.4 1994/10/26 02:05:57 cgd Exp $      */
 
 #ifndef _MACHINE_ASM_H_
index a3c9c43..aa33d6d 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: cdefs.h,v 1.2 1997/01/16 09:25:45 niklas Exp $        */
 /*     $NetBSD: cdefs.h,v 1.1 1995/01/19 01:38:36 jtc Exp $    */
 
 #ifndef _MACHINE_CDEFS_H_
index 98ded5d..e3bfee9 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: conf.h,v 1.5 1996/09/04 22:44:22 niklas Exp $ */
-/*     $NetBSD: conf.h,v 1.1 1996/04/21 21:13:16 veego Exp $   */
+/*     $OpenBSD: conf.h,v 1.6 1997/01/16 09:25:45 niklas Exp $ */
+/*     $NetBSD: conf.h,v 1.4 1996/11/30 01:13:07 is Exp $      */
 
 /*
  * Copyright (c) 1996 Bernd Ernesti.  All rights reserved.
@@ -37,6 +37,8 @@ cdev_decl(com);
 
 cdev_decl(ctty);
 
+cdev_decl(drcom);
+
 bdev_decl(fd);
 cdev_decl(fd);
 
index 8ddb9c5..d63e077 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: cpu.h,v 1.8 1996/05/29 10:15:50 niklas Exp $  */
-/*     $NetBSD: cpu.h,v 1.35 1996/05/19 15:35:43 is Exp $      */
+/*     $OpenBSD: cpu.h,v 1.9 1997/01/16 09:25:46 niklas Exp $  */
+/*     $NetBSD: cpu.h,v 1.36 1996/09/11 00:11:42 thorpej Exp $ */
 
 /*
  * Copyright (c) 1988 University of Utah.
  */
 #include <machine/psl.h>
 
+/*
+ * Get common m68k CPU definitions.
+ */
+#include <m68k/cpu.h>
+#define        M68K_MMU_MOTOROLA
+
 /*
  * definitions of cpu-dependent requirements
  * referenced in generic code
@@ -123,87 +129,10 @@ int       want_resched;           /* resched() was called */
 #define        AMIGA_FPU40     (1L<<6)
 #define AMIGA_68060    (1L<<7)
 
-/* values for fputype */
-#define FPU_NONE       0
-#define FPU_68881      1
-#define FPU_68882      2
-#define FPU_68040      3
-
-/* values for mmutype (assigned for quick testing) */
-#define        MMU_68030       -1      /* 68030 on-chip subset of 68851 */
-#define        MMU_68851       1       /* Motorola 68851 */
-#define MMU_68040      -2      /* 68040 on-chip subsubset */
-
 #ifdef _KERNEL
-int machineid, mmutype, fputype;
+int machineid;
 #endif
 
-/*
- * 68851 and 68030 MMU
- */
-#define        PMMU_LVLMASK    0x0007
-#define        PMMU_INV        0x0400
-#define        PMMU_WP         0x0800
-#define        PMMU_ALV        0x1000
-#define        PMMU_SO         0x2000
-#define        PMMU_LV         0x4000
-#define        PMMU_BE         0x8000
-#define        PMMU_FAULT      (PMMU_WP|PMMU_INV)
-
-/* 680X0 function codes */
-#define        FC_USERD        1       /* user data space */
-#define        FC_USERP        2       /* user program space */
-#define        FC_SUPERD       5       /* supervisor data space */
-#define        FC_SUPERP       6       /* supervisor program space */
-#define        FC_CPU          7       /* CPU space */
-
-/* fields in the 68020 cache control register */
-#define        IC_ENABLE       0x0001  /* enable instruction cache */
-#define        IC_FREEZE       0x0002  /* freeze instruction cache */
-#define        IC_CE           0x0004  /* clear instruction cache entry */
-#define        IC_CLR          0x0008  /* clear entire instruction cache */
-
-/* additional fields in the 68030 cache control register */
-#define        IC_BE           0x0010  /* instruction burst enable */
-#define        DC_ENABLE       0x0100  /* data cache enable */
-#define        DC_FREEZE       0x0200  /* data cache freeze */
-#define        DC_CE           0x0400  /* clear data cache entry */
-#define        DC_CLR          0x0800  /* clear entire data cache */
-#define        DC_BE           0x1000  /* data burst enable */
-#define        DC_WA           0x2000  /* write allocate */
-
-/* fields in the 68040 cache control register */
-#define        IC40_ENABLE     0x00008000      /* enable instruction cache */
-#define DC40_ENABLE    0x80000000      /* enable data cache */
-
-/* additional fields in the 68060 cache control register */
-
-#define DC60_NAD       0x40000000      /* no allocate mode, data cache */
-#define DC60_ESB       0x20000000      /* enable store buffer */
-#define DC60_DPI       0x10000000      /* disable CPUSH invalidation */
-#define DC60_FOC       0x08000000      /* four kB data cache mode (else 8) */
-
-#define IC60_EBC       0x00800000      /* enable branch cache */
-#define IC60_CABC      0x00400000      /* clear all branch cache entries */
-#define IC60_CUBC      0x00200000      /* clear user branch cache entries */
-
-#define IC60_NAI       0x00004000      /* no allocate mode, instr. cache */
-#define IC60_FIC       0x00002000      /* four kB instr. cache (else 8) */
-
-
-#define        CACHE_ON        (DC_WA|DC_BE|DC_CLR|DC_ENABLE|IC_BE|IC_CLR|IC_ENABLE)
-#define        CACHE_OFF       (DC_CLR|IC_CLR)
-#define        CACHE_CLR       (CACHE_ON)
-#define        IC_CLEAR        (DC_WA|DC_BE|DC_ENABLE|IC_BE|IC_CLR|IC_ENABLE)
-#define        DC_CLEAR        (DC_WA|DC_BE|DC_CLR|DC_ENABLE|IC_BE|IC_ENABLE)
-
-/* 68040 cache control */
-#define        CACHE40_ON      (IC40_ENABLE|DC40_ENABLE)
-#define        CACHE40_OFF     0x00000000
-
-#define CACHE60_ON     (CACHE40_ON |IC60_CABC|IC60_EBC|DC60_ESB)
-#define CACHE60_OFF    (CACHE40_OFF|IC60_CABC)
-
 /*
  * CTL_MACHDEP definitions.
  */
index 04242c0..5e7f1a4 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: cpufunc.h,v 1.2 1997/01/16 09:25:48 niklas Exp $      */
 /*     $NetBSD: cpufunc.h,v 1.7 1994/10/26 02:06:02 cgd Exp $  */
 
 /*
index bd9b4fa..c851880 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: db_machdep.h,v 1.2 1997/01/16 09:25:49 niklas Exp $   */
 /*     $NetBSD: db_machdep.h,v 1.4 1994/10/26 02:06:03 cgd Exp $       */
 
 #ifndef _MACHINE_DB_MACHDEP_H_
index 4850a24..84f2fd5 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: exec.h,v 1.4 1997/01/16 09:25:50 niklas Exp $ */
 /*     $NetBSD: exec.h,v 1.8 1994/10/26 02:06:11 cgd Exp $     */
 
 /*
index 2f6dd29..19d8841 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenBSD: fbio.h,v 1.2 1997/01/16 09:25:51 niklas Exp $ */
 /* $NetBSD: fbio.h,v 1.1 1996/05/19 20:06:12 is Exp $ */
 
 /*
index c4910de..121b969 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: float.h,v 1.2 1997/01/16 09:25:52 niklas Exp $        */
 /*     $NetBSD: float.h,v 1.8 1994/10/26 02:06:13 cgd Exp $    */
 
 #ifndef _MACHINE_FLOAT_H_
index 2a4df88..50a90d0 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: frame.h,v 1.2 1997/01/16 09:25:53 niklas Exp $        */
 /*     $NetBSD: frame.h,v 1.7 1994/10/26 02:06:15 cgd Exp $    */
 
 #ifndef _MACHINE_FRAME_H_
index 1e1bfc2..3737406 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: ieeefp.h,v 1.2 1997/01/16 09:25:54 niklas Exp $       */
 /*     $NetBSD: ieeefp.h,v 1.2 1995/04/16 16:47:03 jtc Exp $   */
 
 /* Just use the common m68k definition */
index e303289..cab7e69 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: kcore.h,v 1.2 1997/01/16 09:25:55 niklas Exp $        */
 /*     $NetBSD: kcore.h,v 1.1 1996/05/12 02:47:46 mhitch Exp $ */
 
 #ifndef _MACHINE_KCORE_H_
index e88ce06..b02a161 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: limits.h,v 1.2 1997/01/16 09:25:56 niklas Exp $       */
 /*     $NetBSD: limits.h,v 1.8 1994/10/26 02:06:16 cgd Exp $   */
 
 #ifndef _MACHINE_LIMITS_H_
index 5d85d6e..623c88a 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: mtpr.h,v 1.3 1997/01/16 09:25:57 niklas Exp $ */
 /*     $NetBSD: mtpr.h,v 1.10 1996/05/09 20:31:53 is Exp $     */
 
 /*
index 22ea7f2..6fad68c 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: param.h,v 1.7 1996/05/04 09:29:50 niklas Exp $        */
-/*     $NetBSD: param.h,v 1.29 1996/04/21 21:13:20 veego Exp $ */
+/*     $OpenBSD: param.h,v 1.8 1997/01/16 09:25:58 niklas Exp $        */
+/*     $NetBSD: param.h,v 1.30 1996/09/28 15:54:04 mhitch Exp $        */
 
 /*
  * Copyright (c) 1988 University of Utah.
index fd78f0f..79988a8 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: pcb.h,v 1.2 1997/01/16 09:25:59 niklas Exp $  */
 /*     $NetBSD: pcb.h,v 1.9 1995/05/11 23:05:57 chopps Exp $   */
 
 /*
index 0b830ba..e627e17 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: pmap.h,v 1.2 1997/01/16 09:26:01 niklas Exp $ */
 /*     $NetBSD: pmap.h,v 1.16 1995/09/29 13:52:08 chopps Exp $ */
 
 /* 
index 03e0110..22e636e 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: proc.h,v 1.3 1997/01/16 09:26:02 niklas Exp $ */
 /*     $NetBSD: proc.h,v 1.10 1994/10/26 02:06:27 cgd Exp $    */
 
 /*
index e29f965..94824ec 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: profile.h,v 1.2 1997/01/16 09:26:03 niklas Exp $      */
 /*     $NetBSD: profile.h,v 1.2 1994/10/26 02:06:29 cgd Exp $  */
 
 #ifndef _MACHINE_PROFILE_H_
index 069f483..e3c5def 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: psl.h,v 1.7 1996/05/31 10:46:29 niklas Exp $  */
-/*     $NetBSD: psl.h,v 1.8 1996/04/21 21:13:22 veego Exp $    */
+/*     $OpenBSD: psl.h,v 1.8 1997/01/16 09:26:04 niklas Exp $  */
+/*     $NetBSD: psl.h,v 1.11 1996/11/30 00:33:49 is Exp $      */
 
 #ifndef _MACHINE_PSL_H_
 #define _MACHINE_PSL_H_
@@ -103,8 +103,25 @@ spllower(npsl)
  */
 #define splbio()       spl3()
 #define splnet()       spl3()
-#define spltty()       spl4()
-#define splimp()       spl4()
+
+/*
+ * spltty hack, idea by Jason Thorpe.
+ * drivers which need it (at the present only drcom) raise the variable to
+ * spl5 (the idea being that only ser.c really wants it below 5, and ser
+ * and drcom will never be present at the same time).
+ *
+ * XXX ttyspl is statically initialized in drcom.c at the moment; should 
+ * be some driver independent file.
+ *
+ * XXX should ttyspl be volatile? I think not; it is intended to be set only
+ * during xxx_attach() time, and will be used only later.
+ *   -is
+ */
+
+extern u_int16_t amiga_ttyspl;
+#define spltty()       splexact(amiga_ttyspl)
+#define splimp()       spltty()        /* XXX for the full story, see i386 */
+
 #if defined(LEV6_DEFER) || defined(IPL_REMAP_1) || defined(IPL_REMAP_2)
 #define splclock()     spl4()
 #else
index 8617b5f..97e7444 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: pte.h,v 1.2 1997/01/16 09:26:05 niklas Exp $  */
 /*     $NetBSD: pte.h,v 1.14 1995/09/29 13:52:09 chopps Exp $  */
 
 /*
index 24aa91a..72c1611 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: ptrace.h,v 1.2 1997/01/16 09:26:06 niklas Exp $       */
 /*     $NetBSD: ptrace.h,v 1.4 1994/10/26 02:06:36 cgd Exp $   */
 
 #ifndef _MACHINE_PTRACE_H_
index b485e45..92bf5dd 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: reg.h,v 1.2 1997/01/16 09:26:08 niklas Exp $  */
 /*     $NetBSD: reg.h,v 1.11 1994/10/26 02:06:37 cgd Exp $     */
 
 #ifndef _MACHINE_REG_H_
index 7c4f408..34b1f7a 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: setjmp.h,v 1.2 1997/01/16 09:26:09 niklas Exp $       */
 /*     $NetBSD: setjmp.h,v 1.1 1994/12/20 10:36:27 cgd Exp $   */
 
 #include <m68k/setjmp.h>
index 20a114a..d72674f 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: signal.h,v 1.2 1997/01/16 09:26:10 niklas Exp $       */
 /*     $NetBSD: signal.h,v 1.5 1994/10/26 02:06:39 cgd Exp $   */
 
 #ifndef _MACHINE_SIGNAL_H_
index 0717f83..c9b3a89 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: stdarg.h,v 1.2 1997/01/16 09:26:11 niklas Exp $       */
 /*     $NetBSD: stdarg.h,v 1.8 1994/10/26 02:06:40 cgd Exp $   */
 
 /* Just use the common m68k definition */
index 2da4dd7..d1b6480 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: trap.h,v 1.2 1997/01/16 09:26:12 niklas Exp $ */
 /*     $NetBSD: trap.h,v 1.8 1995/02/12 19:19:39 chopps Exp $  */
 
 #ifndef _MACHINE_TRAP_H_
index 3c8c13b..278c36f 100644 (file)
@@ -1,4 +1,5 @@
-/*     $NetBSD: types.h,v 1.9 1995/09/16 16:11:40 chopps Exp $ */
+/*     $OpenBSD: types.h,v 1.2 1997/01/16 09:26:13 niklas Exp $        */
+/*     $NetBSD: types.h,v 1.11 1996/12/23 09:16:20 veego Exp $ */
 
 #ifndef _MACHINE_TYPES_H_
 #define _MACHINE_TYPES_H_
index 24a0e69..1d6d4f5 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: varargs.h,v 1.2 1997/01/16 09:26:14 niklas Exp $      */
 /*     $NetBSD: varargs.h,v 1.6 1994/10/26 02:06:46 cgd Exp $  */
 
 /* Just use the common m68k definition */
index 67d17c0..f97da89 100644 (file)
@@ -1,6 +1,6 @@
-# $OpenBSD: Makefile,v 1.1 1996/08/23 23:15:50 niklas Exp $
-# $NetBSD: Makefile,v 1.1.2.1 1996/06/08 15:44:55 is Exp $
+# $OpenBSD: Makefile,v 1.2 1997/01/16 09:26:18 niklas Exp $
+# $NetBSD: Makefile,v 1.3 1996/11/30 20:34:58 is Exp $
 
-SUBDIR=binpatch loadkmap
+SUBDIR=binpatch boot loadkmap
 
 .include <bsd.subdir.mk>
index dac2388..706a584 100644 (file)
@@ -1,5 +1,5 @@
-#      $OpenBSD: Makefile,v 1.2 1996/10/04 23:09:50 niklas Exp $
-#      $NetBSD: Makefile,v 1.4.6.1 1996/07/31 16:05:53 jtc Exp $
+#      $OpenBSD: Makefile,v 1.3 1997/01/16 09:26:20 niklas Exp $
+#      $NetBSD: Makefile,v 1.6 1996/09/27 03:23:12 chopps Exp $
 
 PROG=binpatch
 MAN=binpatch.8
diff --git a/sys/arch/amiga/stand/boot/Makefile b/sys/arch/amiga/stand/boot/Makefile
new file mode 100644 (file)
index 0000000..4dc2b87
--- /dev/null
@@ -0,0 +1,102 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/16 09:26:21 niklas Exp $
+
+NOPROG=        installboot
+MAN=installboot.8
+
+SUBDIR=aout2bb txlt
+
+TXLT=txlt/txlt
+
+OBJS = configure.o main.o
+OBJS += console.o xd.o
+
+# libsa library replacements:
+OBJS += alloc.o printf.o twiddle.o
+
+# libkern replacements:
+OBJS += bcopy.o bzero.o ashrdi3.o muldi3.o
+
+# machine language startup code:
+OBJS += startit.o
+
+SRCS = installboot.sh configure.c main.c console.c xd.c 
+SRCS+= twiddle.c
+SRCS+= bbstart.s libstubs.s alloc.s printf.s startit.s
+SRCS+= bcopy.s bzero.c ashrdi3.s muldi3.s
+
+CLEANFILES = $(OBJS) $(BOOTBLOCKS) x.out xxstart.s f.out fdstart.s
+
+S=     ${.CURDIR}/../../../..
+INCPATH=-I${.CURDIR} -I${.CURDIR}/../.. -I${S} -I${S}/lib/libsa
+COPTIM=        -O2 -fomit-frame-pointer -fno-function-cse -Wa,-l -m68060 -Wa,-m68030
+CFLAGS = ${COPTIM} ${INCPATH} ${DEFS}
+COPTS += -Wall -Wstrict-prototypes
+
+BOOTBLOCKS=xxboot # XXX  fdboot is too large at the moment.
+
+.s.o: ; $(CC) $(CAFLAGS) $(COPTS) -x assembler-with-cpp -o $*.o -c $*.s
+
+#libs:
+
+.include "${.CURDIR}/libsa/Makefile.inc"
+LIBSA=  ${SA_LIB}
+
+# libstubs should really be a library, but we don't care for now.
+LIBS=  ${LIBSA} ${LIBKERN} libstubs.o
+
+all: $(BOOTBLOCKS) installboot
+
+$(OBJS): txlt
+
+xxstart.s: bbstart.s
+       cpp bbstart.s > $@
+       
+fdstart.s: bbstart.s
+       cpp -DAUTOLOAD=8192 bbstart.s > $@
+
+x.out: xxstart.o $(OBJS) $(LIBS)
+       $(LD) $(LDFLAGS) -r -dc -e _start -o x.out xxstart.o $(OBJS) $(LIBS)
+       size x.out
+
+f.out: fdstart.o $(OBJS) $(LIBS)
+       $(LD) $(LDFLAGS) -r -dc -e _start -o f.out fdstart.o $(OBJS) $(LIBS)
+       size f.out
+
+
+$(BOOTBLOCKS): aout2bb
+
+xxboot: x.out
+       rm -f $@
+       aout2bb/aout2bb x.out $@ || nm -u x.out
+
+fdboot: f.out
+       rm -f $@
+       aout2bb/aout2bb -F f.out $@ || nm -u f.out
+
+clean::
+       rm -f $(OBJS) fdstart.[os] xxstart.[os] f.out x.out installboot
+
+install: all maninstall
+       install -o $(BINOWN) -g $(BINGRP) $(BOOTBLOCKS) /usr/mdec
+       install -o $(BINOWN) -g $(BINGRP) installboot /usr/sbin
+
+ci:
+       ci -l $(SRCS) Makefile
+
+tar:
+       (cd ..; tar \
+               --exclude '*.o' --exclude RCS --exclude .depend \
+               --exclude '*.out' --exclude fdstart.s --exclude xxstart.s \
+               --exclude aout2bb/aout2bb --exclude libsa.a \
+               -czvf boot.tar.gz boot)
+
+test: xxtest fdtest
+
+xxtest: xxboot
+       dd if=$? of=/dev/rsd1e bs=8192 count=1
+
+fdtest: fdboot
+       dd if=$? of=/dev/rfd0a bs=8192 count=1
+
+.include <bsd.prog.mk>
+.include "Makefile.txlt"
diff --git a/sys/arch/amiga/stand/boot/Makefile.txlt b/sys/arch/amiga/stand/boot/Makefile.txlt
new file mode 100644 (file)
index 0000000..714c912
--- /dev/null
@@ -0,0 +1,12 @@
+# $OpenBSD: Makefile.txlt,v 1.1 1997/01/16 09:26:22 niklas Exp $
+# $NetBSD: Makefile.txlt,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+
+AFLAGS += -m68060 -m68030 -l
+CAFLAGS += -Wa,-l -Wa,-m68030
+#CFLAGS +=  -ffixed-a4 
+# -ffixed-a5
+
+.c.o: 
+       $(CC) $(CFLAGS) -S $< -o $*.s
+       $(TXLT) < $*.s | $(AS) $(AFLAGS) -o $*.o
+       rm $*.s
diff --git a/sys/arch/amiga/stand/boot/alloc.s b/sys/arch/amiga/stand/boot/alloc.s
new file mode 100644 (file)
index 0000000..4d7879c
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * $OpenBSD: alloc.s,v 1.1 1997/01/16 09:26:23 niklas Exp $
+ * $NetBSD: alloc.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * Memory allocation through exec library.
+ */
+
+       .globl  _SysBase
+       .globl  _alloc
+_alloc:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),d0
+       movl    #0x50001,d1     | MEMF_CLEAR|MEMF_REVERSE|MEMF_PUBLIC for now.
+       jsr     a6@(-0xc6)
+       movl    sp@+,a6
+       rts
+
+       .globl  _free
+_free:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       movl    sp@(12),d0
+       jsr     a6@(-0xd2)
+       movl    sp@+,a6
+       rts
+
diff --git a/sys/arch/amiga/stand/boot/amigagraph.h b/sys/arch/amiga/stand/boot/amigagraph.h
new file mode 100644 (file)
index 0000000..7d3c619
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * $OpenBSD: amigagraph.h,v 1.1 1997/01/16 09:26:24 niklas Exp $
+ * $NetBSD: amigagraph.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#ifndef AMIGA_GRAPH_H
+#define AMIGA_GRAPH_H
+
+#define SA_Title       0x80000028
+#define SA_Colors      0x80000029
+
+#define SA_Sysfont     0x8000002C
+#define SA_Type                0x8000002D
+
+#define SA_DisplayID   0x80000032
+#define SA_ShowTitle   0x80000036
+#define SA_Quiet       0x80000038
+#define SA_AutoScroll  0x80000039
+#define SA_Pens                0x8000003A
+
+#define PUBLICSCREEN 2
+#define CUSTOMSCREEN 0xF
+
+#define        WA_Left         0x80000064
+#define        WA_Top          0x80000065
+#define        WA_Width        0x80000066
+#define        WA_Height       0x80000067
+#define WA_DetailPen   0x80000068
+#define WA_BlockPen    0x80000069
+#define WA_IDCMP       0x8000006A
+#define WA_Flags       0x8000006B
+#define WA_Gadgets     0x8000006C
+#define WA_Checkmark   0x8000006D
+#define WA_Title       0x8000006E
+#define WA_ScreenTitle 0x8000006F
+#define WA_CustomScreen        0x80000070
+#define WA_SuperBitMap 0x80000071
+#define WA_MinWidth    0x80000072
+#define WA_MinHeight   0x80000073
+#define WA_MaxWidth    0x80000074
+#define WA_MaxHeight   0x80000075
+#define WA_Backdrop    0x80000085
+#define WA_Borderless  0x80000088
+#define WA_Activate    0x80000089
+#define WA_AutoAdjust  0x80000090
+
+struct Window {
+       u_int8_t dum1[136];
+};
+#endif AMIGA_GRAPH_H
diff --git a/sys/arch/amiga/stand/boot/amigaio.h b/sys/arch/amiga/stand/boot/amigaio.h
new file mode 100644 (file)
index 0000000..bc94f0f
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * $OpenBSD: amigaio.h,v 1.1 1997/01/16 09:26:25 niklas Exp $
+ * $NetBSD: amigaio.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * This describes the IO parameter block used by many standard
+ * Amiga OS device drivers.
+ */
+#ifndef AMIGA_IO_H
+#define AMIGA_IO_H
+
+struct AmigaIO {
+       u_int8_t        dum0[28];
+       u_int16_t       cmd;
+       u_int8_t        flags;
+       int8_t          err;
+       u_int32_t       actual, /* transferred */
+                       length; /* please transfer this much */
+       void            *buf;   /* data buffer */
+       u_int32_t       offset; /* offset for block devices */
+};
+
+struct TimerIO {
+       u_int8_t        dum0[28];
+       u_int16_t       cmd;
+       u_int8_t        flags;
+       int8_t          err;
+       u_int32_t       secs,
+                       usec;
+};
+
+/* flags */
+#define        QuickIO         0x1
+
+/* commands */
+#define Cmd_Rst                0x1
+#define Cmd_Rd         0x2
+#define Cmd_Wr         0x3
+#define Cmd_Upd                0x4
+#define Cmd_Clr                0x5
+#define Cmd_Stp                0x6
+#define Cmd_Strt       0x7
+#define Cmd_Flsh       0x8
+
+#define Cmd_Addtimereq 0x9
+
+#endif /* AMIGA_IO_H */
diff --git a/sys/arch/amiga/stand/boot/amigatypes.h b/sys/arch/amiga/stand/boot/amigatypes.h
new file mode 100644 (file)
index 0000000..bbdb6d0
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * $OpenBSD: amigatypes.h,v 1.1 1997/01/16 09:26:26 niklas Exp $
+ * $NetBSD: amigatypes.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#ifndef _AMIGA_TYPES_H_
+#define _AMIGA_TYPES_H_
+
+/* Dummy structs, used only as abstract pointers */
+
+struct Library;
+struct TextAttr;
+struct Gadget;
+struct BitMap;
+struct NewScreen;
+struct MemNode;
+
+/* real structs */
+
+struct TagItem {u_int32_t item; void * data;};
+
+struct Library {
+       u_int8_t Dmy1[20];
+       u_int16_t Version, Revision;
+       u_int8_t Dmy2[34-24];
+};
+
+struct MemHead {
+       struct MemHead *next;
+       u_int8_t Dmy1[  9-  4];
+       u_int8_t Pri;
+       u_int8_t Dmy2[ 14- 10];
+       u_int16_t Attribs;
+       u_int32_t First, Lower, Upper, Free;
+};
+
+struct ExecBase {
+       struct Library LibNode;
+       u_int8_t Dmy1[296-34];
+       u_int16_t AttnFlags;    /* 296 */
+       u_int8_t Dmy2[300-298]; /* 298 */
+       void *ResModules;       /* 300 */
+       u_int8_t Dmy3[322-304]; /* 304 */
+       struct MemHead *MemLst; /* 322 */
+       /*
+        * XXX: actually, its a longer List base, but we only need to 
+        * search it once.
+        */
+       u_int8_t Dmy4[568-326]; /* 326 */
+       u_int32_t EClockFreq;   /* 330 */
+       u_int8_t Dmy5[632-334];
+};
+
+#endif /* _AMIGA_TYPES_H */
diff --git a/sys/arch/amiga/stand/boot/aout2bb/Makefile b/sys/arch/amiga/stand/boot/aout2bb/Makefile
new file mode 100644 (file)
index 0000000..7e03937
--- /dev/null
@@ -0,0 +1,14 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/16 09:26:47 niklas Exp $
+
+PROG=aout2bb
+SRCS=aout2bb.c chksum.c
+NOMAN=notyet
+INCLUDES=aout2bb.h chksum.h
+
+COPTS += -Wall -Wstrict-prototypes -g
+
+
+ci: 
+       ci -l $(SRCS) $(INCLUDES) Makefile
+
+.include <bsd.prog.mk>
diff --git a/sys/arch/amiga/stand/boot/aout2bb/aout2bb.c b/sys/arch/amiga/stand/boot/aout2bb/aout2bb.c
new file mode 100644 (file)
index 0000000..3ef9839
--- /dev/null
@@ -0,0 +1,340 @@
+/*
+ * $OpenBSD: aout2bb.c,v 1.1 1997/01/16 09:26:48 niklas Exp $
+ * $NetBSD: aout2bb.c,v 1.2 1996/12/31 22:39:58 veego Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#include <sys/types.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <sys/mman.h>          /* of the machine we're running on */
+#include <machine/endian.h>    /* of the machine we're running on */
+
+#include <sys/exec_aout.h>     /* TARGET */
+
+#include "aout2bb.h"
+#include "chksum.h"
+
+void usage __P((void));
+int intcmp(const void *, const void *);
+int main(int argc, char *argv[]);
+
+#ifdef DEBUG
+#define dprintf(x) printf x
+#else
+#define dprintf(x)
+#endif
+
+#define BBSIZE 8192
+
+char *progname;
+u_int8_t buffer[BBSIZE];
+u_int32_t relbuf[BBSIZE/sizeof(u_int32_t)]; 
+       /* can't have more relocs than that*/
+
+int
+intcmp(i, j)
+       const void *i, *j;
+{
+       int r;
+
+       r = (*(u_int32_t *)i) < (*(u_int32_t *)j);
+       
+       return 2*r-1; 
+}
+
+int
+main(argc, argv)
+       int argc;
+       char *argv[];
+{
+       int ifd, ofd;
+       u_int mid, flags, magic;
+       caddr_t image;
+       struct exec *eh;
+       struct relocation_info_m68k *rpi;
+       u_int32_t *lptr;
+       int i, delta;
+       u_int8_t *rpo;
+       u_int32_t oldaddr, addrdiff;
+       u_int32_t tsz, dsz, bsz, trsz, drsz, entry, relver;
+       int sumsize = 16;
+       int c;
+       
+
+       progname = argv[0];
+
+       /* insert getopt here, if needed */
+       while ((c = getopt(argc, argv, "F")) != -1)
+       switch(c) {
+       case 'F':
+               sumsize = 2;
+               break;
+       default:
+               usage();
+       }
+       argv += optind;
+       argc -= optind;
+
+       if (argc < 2)
+               usage();
+
+       ifd = open(argv[0], O_RDONLY, 0);
+       if (ifd < 0)
+               err(1, "Can't open %s", argv[0]);
+
+       image = mmap(0, 65536, PROT_READ, MAP_FILE|MAP_PRIVATE, ifd, 0);
+       if (image == 0)
+               err(1, "Can't mmap %s", argv[1]);
+
+       eh = (struct exec *)image; /* XXX endianness */
+
+       magic = N_GETMAGIC(*eh);
+       if (magic != OMAGIC)
+               errx(1, "%s isn't an OMAGIC file, but 0%o", argv[0], magic);
+
+       flags = N_GETFLAG(*eh);
+       if (flags != 0)
+               errx(1, "%s has strange exec flags 0x%x", argv[0], flags);
+
+       mid = N_GETMID(*eh);
+       switch(mid) {
+       case MID_M68K:
+               break;
+       default:
+               errx(1, "%s has strange machine id 0x%x (%d)", argv[0], mid,
+                   mid);
+       }
+
+       tsz = ntohl(eh->a_text);
+       dsz = ntohl(eh->a_data);
+       bsz = ntohl(eh->a_bss);
+       trsz = ntohl(eh->a_trsize);
+       drsz = ntohl(eh->a_drsize);
+       entry = ntohl(eh->a_entry);
+
+       dprintf(("tsz = 0x%x, dsz = 0x%x, bsz = 0x%x, total 0x%x, entry=0x%x\n", 
+               tsz, dsz, bsz, tsz+dsz+bsz, entry));
+
+       if ((trsz+drsz)==0)
+               errx(1, "%s has no relocation records.\n", argv[0]);
+
+       dprintf(("%d text relocs, %d data relocs\n", trsz/8, drsz/8));
+       if (entry != 12)
+               errx(1, "%s: entry point 0x%04x is not 0x000c\n", argv[0],
+                   entry);
+
+       /*
+        * We have one contiguous area allocated by the ROM to us.
+        */
+       if (tsz+dsz+bsz > BBSIZE)
+               errx(1, "%s: resulting image too big\n", argv[0]);
+
+       memset(buffer, sizeof(buffer), 0);
+       memcpy(buffer, image + N_TXTOFF(*eh), tsz+dsz);
+
+       /*
+        * Hm. This tool REALLY should understand more than one 
+        * relocator version. For now, check that the relocator at
+        * the image start does understand what we output.
+        */
+       relver = ntohl(*(u_int32_t *)(image+0x24));
+       switch (relver) {
+               default:
+                       errx(1, "%s: unrecognized relocator version %d\n",
+                               argv[0], relver);
+                       /*NOTREACHED*/
+
+               case RELVER_RELATIVE_BYTES:
+                       rpo = buffer + BBSIZE - 1;
+                       delta = -1;
+                       break;
+
+               case RELVER_RELATIVE_BYTES_FORWARD:
+                       rpo = buffer + tsz + dsz;
+                       delta = +1;
+                       *(u_int16_t *)(buffer + 14) = htons(tsz + dsz);
+                       break;
+       }
+
+
+       
+       i = 0;
+
+       for (rpi = (struct relocation_info_m68k *)(image+N_TRELOFF(*eh));
+           (caddr_t)rpi < image+N_TRELOFF(*eh)+trsz; rpi++) {
+
+               NTOHL(((u_int32_t *)rpi)[0]);
+               NTOHL(((u_int32_t *)rpi)[1]);
+
+               dprintf(("0x%08x 0x%08x %c\n", *(u_int32_t *)rpi,
+                   ((u_int32_t *)rpi)[1], rpi->r_extern ? 'U' : ' '));
+
+               if (rpi->r_extern)
+                       errx(1, "code accesses unresolved symbol");
+               if (rpi->r_copy)
+                       errx(1, "code accesses r_copy symbol");
+               if (rpi->r_jmptable)
+                       errx(1, "code accesses r_jmptable symbol");
+               if (rpi->r_relative)
+                       errx(1, "code accesses r_relative symbol");
+               if (rpi->r_baserel)
+                       errx(1, "code accesses r_baserel symbol");
+
+               /*
+                * We don't worry about odd sized symbols which are pc
+                * relative, so test for pcrel first:
+                */
+
+               if (rpi->r_pcrel)
+                       continue;
+
+               if (rpi->r_length != 2)
+                       errx(1, "code accesses size %d symbol", rpi->r_length);
+
+               relbuf[i++] = rpi->r_address;
+       }
+
+       for (rpi = (struct relocation_info_m68k *)(image+N_DRELOFF(*eh));
+           (caddr_t)rpi < image+N_DRELOFF(*eh)+drsz; rpi++) {
+
+               NTOHL(((u_int32_t *)rpi)[0]);
+               NTOHL(((u_int32_t *)rpi)[1]);
+
+               dprintf(("0x%08x 0x%08x %c\n", *(u_int32_t *)rpi,
+                   ((u_int32_t *)rpi)[1], rpi->r_extern ? 'U' : ' '));
+
+               if (rpi->r_extern)
+                       errx(1, "data accesses unresolved symbol");
+               if (rpi->r_copy)
+                       errx(1, "data accesses r_copy symbol");
+               if (rpi->r_jmptable)
+                       errx(1, "data accesses r_jmptable symbol");
+               if (rpi->r_relative)
+                       errx(1, "data accesses r_relative symbol");
+               if (rpi->r_baserel)
+                       errx(1, "data accesses r_baserel symbol");
+
+               /*
+                * We don't worry about odd sized symbols which are pc
+                * relative, so test for pcrel first:
+                */
+
+               if (rpi->r_pcrel)
+                       continue;
+
+               if (rpi->r_length != 2)
+                       errx(1, "data accesses size %d symbol", rpi->r_length);
+
+
+               relbuf[i++] = rpi->r_address + tsz;
+       }
+       printf("%d absolute reloc%s found, ", i, i==1?"":"s");
+       
+       if (i > 1)
+               heapsort(relbuf, i, 4, intcmp);
+
+       oldaddr = 0;
+       
+       for (--i; i>=0; --i) {
+               dprintf(("0x%04x: ", relbuf[i]));
+               lptr = (u_int32_t *)&buffer[relbuf[i]];
+               addrdiff = relbuf[i] - oldaddr;
+               dprintf(("(0x%04x, 0x%04x): ", *lptr, addrdiff));
+               if (addrdiff > 255) {
+                       *rpo = 0;
+                       if (delta > 0) {
+                               ++rpo;
+                               *rpo++ = (relbuf[i] >> 8) & 0xff;
+                               *rpo++ = relbuf[i] & 0xff;
+                               dprintf(("%02x%02x%02x\n",
+                                   rpo[-3], rpo[-2], rpo[-1]));
+                       } else {
+                               *--rpo = relbuf[i] & 0xff;
+                               *--rpo = (relbuf[i] >> 8) & 0xff;
+                               --rpo;
+                               dprintf(("%02x%02x%02x\n",
+                                   rpo[0], rpo[1], rpo[2]));
+                       }
+               } else {
+                       *rpo = addrdiff;
+                       dprintf(("%02x\n", *rpo));
+                       rpo += delta;
+               }
+
+               oldaddr = relbuf[i];
+
+               if (delta < 0 ? rpo <= buffer+tsz+dsz
+                   : rpo >= buffer + BBSIZE)
+                       errx(1, "Relocs don't fit.");
+       }
+       *rpo = 0; rpo += delta;
+       *rpo = 0; rpo += delta;
+       *rpo = 0; rpo += delta;
+
+       printf("using %d bytes.\n", delta > 0 ?
+           rpo-buffer-tsz-dsz : buffer+BBSIZE-rpo);
+       /*
+        * RELOCs must fit into the bss area.
+        */
+       if (delta < 0 ? rpo <= buffer+tsz+dsz
+           : rpo >= buffer + BBSIZE)
+               errx(1, "Relocs don't fit.");
+
+       ((u_int32_t *)buffer)[1] = 0; 
+       ((u_int32_t *)buffer)[1] = 
+           (0xffffffff - chksum((u_int32_t *)buffer, sumsize * 512 / 4));
+
+       ofd = open(argv[1], O_CREAT|O_WRONLY, 0644);
+       if (ofd < 0)
+               err(1, "Can't open %s", argv[1]);
+
+       if (write(ofd, buffer, BBSIZE) != BBSIZE)
+               err(1, "Writing output file");
+
+       exit(0);
+}
+
+void
+usage()
+{
+       fprintf(stderr, "Usage: %s [-F] bootprog bootprog.bin\n",
+           progname);
+       exit(1);
+       /* NOTREACHED */
+}
diff --git a/sys/arch/amiga/stand/boot/aout2bb/aout2bb.h b/sys/arch/amiga/stand/boot/aout2bb/aout2bb.h
new file mode 100644 (file)
index 0000000..5962774
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * $OpenBSD: aout2bb.h,v 1.1 1997/01/16 09:26:49 niklas Exp $
+ * $NetBSD: aout2bb.h,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * Relocator version definitions for aout to Amiga bootblock converter.
+ */
+
+/* 
+ * All the tables are at the end of the bootblock, with logical start at the
+ * end.
+ */
+
+/* 
+ * The following formats are for a length of 8 kBytes only.
+ */
+
+/*
+ * Absolute words in Motorola byte order, end of table marked by 0x0000
+ */
+#define RELVER_ABSOLUTE_WORDS  0
+
+/*
+ * Unsigned bytes relative to previous address to relocate; first one to 0.
+ * If the difference is >255, the logical next two bytes (in Motorola byte
+ * order) give the absolute address to relocate.
+ */
+#define RELVER_RELATIVE_BYTES  1
+
+/*
+ * Same as above, but with the bytes stored in forward direction beginning
+ * with the __relocation_bytes symbol
+ */
+#define RELVER_RELATIVE_BYTES_FORWARD 2
+
+/*
+ * loader can autoload
+ */
+
+#define RELFLAG_SELFLOADING    0x10
diff --git a/sys/arch/amiga/stand/boot/aout2bb/chksum.c b/sys/arch/amiga/stand/boot/aout2bb/chksum.c
new file mode 100644 (file)
index 0000000..1a857e6
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * $OpenBSD: chksum.c,v 1.1 1997/01/16 09:26:50 niklas Exp $
+ * $NetBSD: chksum.c,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include "chksum.h"
+
+u_int32_t
+chksum(block, size)
+       u_int32_t *block;
+       int size;
+{
+       u_int32_t sum, lastsum;
+       int i;
+
+       sum = 0;
+
+       for (i=0; i<size; i++) {
+               lastsum = sum;
+               sum += block[i];
+               if (sum < lastsum)
+                       ++sum;
+       }
+
+       return sum;
+}
+
+#ifdef TESTSUM
+u_int32_t myblock[8192];
+
+int
+main(int argc, char *argb[]) {
+       int bbsize;
+       u_int32_t cks, cks1;
+
+       bbsize=atol(argb[1]);
+       bbsize *= (512 / sizeof (u_int32_t));
+
+       if (4*bbsize != read(0, myblock, sizeof(u_int32_t)*bbsize)) {
+               fprintf(stderr, "short read\n");
+               exit(1);
+       }
+       fprintf(stderr, "Cksum field = 0x%x, ", myblock[1]);
+       cks = chksum(myblock, bbsize);
+       fprintf(stderr, "cksum = 0x%x\n", cks);
+       myblock[1] += 0xFFFFFFFF - cks;
+       fprintf(stderr, "New cksum field = 0x%x, ", myblock[1]);
+       cks1 = chksum(myblock, bbsize);
+       fprintf(stderr, "cksum = 0x%x\n", cks1);
+}
+#endif
diff --git a/sys/arch/amiga/stand/boot/aout2bb/chksum.h b/sys/arch/amiga/stand/boot/aout2bb/chksum.h
new file mode 100644 (file)
index 0000000..34fddcf
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * $OpenBSD: chksum.h,v 1.1 1997/01/16 09:26:51 niklas Exp $
+ * $NetBSD: chksum.h,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#define CHKSUMOFFS 1
+
+u_int32_t chksum __P((u_int32_t *, int));
+
diff --git a/sys/arch/amiga/stand/boot/ashrdi3.s b/sys/arch/amiga/stand/boot/ashrdi3.s
new file mode 100644 (file)
index 0000000..419d66e
--- /dev/null
@@ -0,0 +1,50 @@
+/*     $OpenBSD: ashrdi3.s,v 1.1 1997/01/16 09:26:27 niklas Exp $
+/*     $NetBSD: ashrdi3.s,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ * Slow but small ashrdi3.
+ */
+
+       .text
+       .even
+       .globl  ___ashrdi3
+___ashrdi3:
+       movl d2,sp@-            | 0 reg, 1 pc, 2..4 parameters
+       movml sp@(8),d0-d2
+       jra L2
+L1:
+       asrl #1,d0
+       roxrl #1,d1
+L2:
+       dbra d2,L1
+
+       movl sp@+,d2
+       rts
diff --git a/sys/arch/amiga/stand/boot/bbstart.s b/sys/arch/amiga/stand/boot/bbstart.s
new file mode 100644 (file)
index 0000000..c251231
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * $OpenBSD: bbstart.s,v 1.1 1997/01/16 09:26:28 niklas Exp $
+ * $NetBSD: bbstart.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#include "aout2bb/aout2bb.h"
+
+#define LVOAllocMem    -0x0c6
+#define LVODoIO                -0x1c8
+#define LVOCacheClearU -0x27c
+
+#define IOcmd  28
+#define IOerr  31
+#define IOlen  36
+#define IObuf  40
+#define IOoff  44
+
+#define Cmd_Rd 2
+
+       .globl  _configure
+       .globl  _pain
+
+       .text
+Lzero: .asciz "DOS"                    | "DOS type"
+       /*
+        * We put the relocator version here, for aout2bb, which replaces
+        * it with the bootblock checksum.
+        */
+Chksum:        .long RELVER_RELATIVE_BYTES_FORWARD
+Filesz:        .long 8192                      | dummy
+
+/* 
+ * Entry point from Kickstart.
+ * A1 points to an IOrequest, A6 points to ExecBase, we have a stack.
+ * _must_ be at offset 12.
+ */
+       .globl _start
+_start:
+#ifdef AUTOLOAD
+       jra     Lautoload
+#else
+       jra     Lrelocate
+#endif
+
+Lreltab:
+       .word 0                 | aout2bb puts the reloc table address here
+
+#ifdef AUTOLOAD
+/*
+ * autoload
+ */
+Lautoload:
+       movl    a6,sp@-                 |SysBase
+       movl    a1,sp@-                 |IORequest
+
+       movl    #AUTOLOAD,d0            |Howmuch
+       movl    d0,a1@(IOlen)           | for the actual read...
+       movl    #0x10001,d1             |MEMF_CLEAR|MEMF_PUBLIC
+       jsr     a6@(LVOAllocMem)
+       movl    sp@+,a1                 |IORequest
+       movl    sp@+,a6                 |SysBase
+       orl     d0,d0
+       jne     Lgotmem
+       movql   #1,d0
+       rts
+
+Lgotmem:
+       movl    d0,sp@-                 |Address
+       movl    a1@(IOoff),sp@-         |Old offset
+       movl    a1,sp@-
+       movl    a6,sp@-
+
+/* we've set IOlen above */
+       movl    d0,a1@(IObuf)
+       movw    #Cmd_Rd,a1@(IOcmd)
+       jsr     a6@(LVODoIO)
+
+       movl    sp@+,a6
+       movl    sp@+,a1
+       movl    sp@+,a1@(IOoff)
+
+       tstb    a1@(IOerr)
+       jne     Lioerr
+       addl    #Lrelocate-Lzero,sp@
+
+       movl    a6,sp@-
+       jsr     a6@(LVOCacheClearU)
+       movl    sp@+,a6
+       rts
+Lioerr:
+       movql   #1,d0
+       addql   #4,sp
+       rts
+#endif
+
+/*
+ * Relocate ourselves, at the same time clearing the relocation table
+ * (in case it overlaps with BSS).
+ *
+ * Register usage:
+ * A2: points into the reloc table, located at our end.
+ * A0: pointer to the longword to relocate.
+ * D0: word offset of longword to relocate
+ * D1: points to our start.
+ *
+ * Table has relative byte offsets, if a byte offset is zero, it is
+ * followed by an absolute word offset. If this is zero, too, table
+ * end is reached.
+ */
+Lrelocate:
+       lea     pc@(Lzero),a0
+       movl    a0,d1
+       movw    pc@(Lreltab),a2
+       addl    d1,a2
+       jra     Loopend
+       
+Loopw:
+       clrw    a2@+
+       movl    d1,a0   | for a variant with relative words, erase this line
+Loopb:
+       addl    d0,a0
+       addl    d1,a0@
+Loopend:
+       movq    #0,d0
+       movb    a2@,d0
+       clrb    a2@+    | bfclr a2@+{0:8} is still two shorts
+       tstb    d0      | we could save one short by using casb d0,d0,a2@+
+       jne     Loopb
+
+       movw    a2@,d0
+       jne     Loopw
+
+Lendtab:
+       movl    a6,sp@-
+       jsr     a6@(LVOCacheClearU)
+       movl    sp@+,a6
+
+/* We are relocated. Now it is safe to initialize _SysBase: */
+
+       movl    a6,_SysBase
+
+       movl    a1,sp@-
+       bsr     _configure
+       addql   #4,sp
+       tstl    d0
+       jne     Lerr
+
+       bsr     _pain
+
+Lerr:
+       movq    #1,d0
+       rts
+
+       .comm _SysBase,4
diff --git a/sys/arch/amiga/stand/boot/bcopy.s b/sys/arch/amiga/stand/boot/bcopy.s
new file mode 100644 (file)
index 0000000..afb8fc4
--- /dev/null
@@ -0,0 +1,64 @@
+/*     $OpenBSD: bcopy.s,v 1.1 1997/01/16 09:26:29 niklas Exp $        */
+
+/*
+ * Copyright (c) 1996 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.
+ *
+ * Small but possibly slow bcopy/memcpy combo.
+ */
+       .text
+       .even
+.globl _bcopy,_memcpy
+
+_memcpy:
+       movel sp@(4),a0
+       movel sp@(8),a1
+       jra Lcpy
+_bcopy:
+       movel sp@(4),a1
+       movel sp@(8),a0
+Lcpy:
+       movel sp@(12),d0
+       jeq L1
+       cmpl a1,a0
+       jcc L3
+L4:
+       moveb a1@+,a0@+
+       subql #1,d0
+       jne L4
+       rts
+L3:
+       addl d0,a1
+       addl d0,a0
+L9:
+       moveb a1@-,a0@-
+       subql #1,d0
+       jne L9
+L1:
+       rts
diff --git a/sys/arch/amiga/stand/boot/bzero.c b/sys/arch/amiga/stand/boot/bzero.c
new file mode 100644 (file)
index 0000000..11192df
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *     $OpenBSD: bzero.c,v 1.1 1997/01/16 09:26:30 niklas Exp $
+ *     $NetBSD: bzero.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ * Lightweight bzero.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+void
+bzero(p, len)
+       void *p;
+       size_t len;
+{
+       char *s = p;
+       while (len > 0) {
+               *s++ = 0;
+               --len;
+       }
+}
diff --git a/sys/arch/amiga/stand/boot/configure.c b/sys/arch/amiga/stand/boot/configure.c
new file mode 100644 (file)
index 0000000..0528859
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * $OpenBSD: configure.c,v 1.1 1997/01/16 09:26:31 niklas Exp $
+ * $NetBSD: configure.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#include <sys/types.h>
+
+#include "stand.h"
+#include "samachdep.h"
+
+int
+configure(aio)
+void *aio;
+{
+       xdinit(aio);
+       return (consinit());
+}
diff --git a/sys/arch/amiga/stand/boot/console.c b/sys/arch/amiga/stand/boot/console.c
new file mode 100644 (file)
index 0000000..d30af45
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * $OpenBSD: console.c,v 1.1 1997/01/16 09:26:32 niklas Exp $
+ * $NetBSD: console.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * Bootblock support routines for Intuition console support.
+ */
+
+#include <sys/types.h>
+
+#include <stand.h>
+#include "samachdep.h"
+
+#include "amigatypes.h"
+#include "amigagraph.h"
+#include "amigaio.h"
+#include "libstubs.h"
+
+const u_int32_t screentags[] = {
+       SA_Type, CUSTOMSCREEN,
+       SA_DisplayID, 0x8000,
+       SA_ShowTitle, 0,
+       SA_Quiet, 1,
+       0
+};
+
+u_int32_t windowtags[] = {
+       WA_CustomScreen, 0L,
+       WA_Borderless, 1L,
+       WA_Backdrop, 1L,
+       WA_Activate, 1L,
+       0
+};
+
+struct AmigaIO *cnior;
+struct TimerIO *tmior;
+struct MsgPort *cnmp;
+
+u_int16_t timelimit;
+
+int
+consinit() {
+       struct Screen *s = 0;
+       struct Window *w = 0;
+
+       IntuitionBase = OpenLibrary("intuition.library", 36L);
+       if (IntuitionBase == 0)
+               goto err;
+
+       s = OpenScreenTagList(0, screentags);
+       if (!s)
+               goto err;
+
+       windowtags[1] = (u_int32_t)s;
+       w = OpenWindowTagList(0, windowtags);
+       if (!w)
+               goto err;
+
+       cnmp = CreateMsgPort();
+
+       if (!cnmp)
+               goto err;
+
+       cnior = (struct AmigaIO *)CreateIORequest(cnmp, sizeof(struct AmigaIO));
+       if (!cnior)
+               goto err;
+
+       cnior->buf = (void *)w;
+       if (OpenDevice("console.device", 0, cnior, 0))
+               goto err;
+
+       tmior = (struct TimerIO *)CreateIORequest(cnmp, sizeof(struct TimerIO));
+       if (!tmior)
+               goto err;
+
+       if (OpenDevice("timer.device", 0, (struct AmigaIO*)tmior, 0))
+               goto err;
+
+       return 0;
+
+err:
+#ifdef notyet
+       if (tmior)
+               DeleteIORequest(tmior);
+
+       if (cnior)
+               DeleteIORequest(cnior);
+
+       if (cnmp)
+               DeleteMsgPort(cnmp);
+
+       if (w)
+               CloseWindow(w);
+
+       if (s)
+               CloseScreen(s);
+       if (IntuitionBase)
+               CloseLibrary(IntuitionBase);
+#endif
+
+       return 1;
+}
+
+void
+putchar(c)
+       char c;
+{
+       cnior->length = 1;
+       cnior->buf = &c;
+       cnior->cmd = Cmd_Wr;
+       (void)DoIO(cnior);
+}
+
+void
+puts(s)
+       char *s;
+{
+       cnior->length = -1;
+       cnior->buf = s;
+       cnior->cmd = Cmd_Wr;
+       (void)DoIO(cnior);
+}
+
+int
+getchar()
+{
+       struct AmigaIO *ior;
+       char c = -1;
+
+       cnior->length = 1;
+       cnior->buf = &c;
+       cnior->cmd = Cmd_Rd;
+
+       SendIO(cnior);
+
+       if (timelimit) {
+               tmior->cmd = Cmd_Addtimereq;
+               tmior->secs = timelimit;
+               tmior->usec = 2; /* Paranoid */
+               SendIO((struct AmigaIO *)tmior);
+
+               ior = WaitPort(cnmp);
+               if (ior == cnior)
+                       AbortIO((struct AmigaIO *)tmior);
+               else /* if (ior == tmior) */ {
+                       AbortIO(cnior);
+                       c = '\n';
+               }
+               WaitIO((struct AmigaIO *)tmior);
+               timelimit = 0;
+       } 
+       (void)WaitIO(cnior);
+       return c;
+}
diff --git a/sys/arch/amiga/stand/boot/installboot.8 b/sys/arch/amiga/stand/boot/installboot.8
new file mode 100644 (file)
index 0000000..b3c1f2c
--- /dev/null
@@ -0,0 +1,122 @@
+.\"    $OpenBSD: installboot.8,v 1.1 1997/01/16 09:26:33 niklas Exp $
+.\"    $NetBSD: installboot.8,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+.\"
+.\" Copyright (c) 1995 Paul Kranenburg
+.\" 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 Paul Kranenburg.
+.\" 3. 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.
+.\"
+.Dd November 29, 1996
+.Dt INSTALLBOOT 8
+.Os 
+.Sh NAME
+.Nm installboot
+.Nd install a bootstrap on an FFS filesystem partition
+.Sh SYNOPSIS
+.Nm installboot
+.Ar bootblock
+.Ar device
+.Sh DESCRIPTION
+.Nm installboot
+copies the bootblock to a bootable partition. The
+bootstrap is written into the bootblock area on the partition, right
+in front of the superblock, and hence limited in size to
+8192 bytes.
+.Pp
+The bootstrap resides in the first few blocks on the partition
+.Pq as specified by Commodore-Amiga Inc.
+The bootstrap is loaded into memory by the ROM from bootable devices:
+RDB devices, where the partition is marked as bootable, or (not on the
+DraCo) floppy disks in Amiga format (880K/1760k).
+.Pp
+In presence of more than one bootable partiton/floppy disk, the partition
+is chosen by the bootpriority (from the RDB), which can be overridden by
+the operator from the boot menu (on Amiga machines, hold down the outer 
+mouse buttons during boot; on DraCo machines, press the left mouse button
+when prompted).
+.Pp
+On RDB devices, the whole bootblock is loaded by the ROM. The number of 
+boot blocks in the RDB partition entry must be correct.
+.Pp 
+On floppy disks, the ROM always loads the first two blocks (1024 bytes),
+and the bootblock allocates memory and loads the whole bootblock on startup.
+.Pp
+After receiving control, the bootblock uses the stand-alone
+filesystem code in
+.Dq libsa.a
+to load the kernel from the filesystem on the partition it was started from.
+The code for the boot program can be found in
+.Pa /usr/mdec/fdboot
+.Pq floppy disk code
+or
+.Pa /usr/mdec/xxboot
+.Pq generic RDB disk code .
+.Pp
+The arguments are:
+.Bl -tag -width bootblock
+.It Ar bootblock
+The file containing the bootblock (normally /usr/mdec/xxboot for RDB devices).
+.It Ar device
+The name of the character special device specifying the partition on which the
+bootstrap is to be installed.
+.El
+.Sh EXAMPLES
+The following command will install the 
+boot program in the bootblock area on
+.Dq sd0a :
+.Bd -literal -offset indent
+installboot /usr/mdec/xxboot /dev/rsd0a
+.Ed
+.Sh CAVEATS
+If
+.Nm
+is used on the whole disk partition, the RDB will be overwritten.
+.Pp
+Some third-party accellerator boards are not auto-configuring. You won't 
+be able to use their memory when booting from the bootblock after a cold 
+start.
+.Pp
+Some third-party disk controllers don't support bootblock booting.
+.Pp
+Phase 5 68060 boards don't set the SysBase->AttnFlags bit for the 68060
+CPU (a patch program which is called during AmigaOS startup does this).
+Currently,
+.Tn OpenBSD
+is not able to detect this condition, and will fail.
+.Sh BUGS
+There is currently no easy way to edit the RDB from within
+.Tn OpenBSD.
+.Pp
+As normal dd is used to install the bootblock, you can only install onto
+your currently used root (or any other mounted) partiton from single-user
+mode, or while otherwise running in insecure mode.
+.Sh "SEE ALSO"
+.Xr dd 1
+.Sh HISTORY
+The
+.Nm
+command first appeared in
+.Nx 1.3
diff --git a/sys/arch/amiga/stand/boot/installboot.sh b/sys/arch/amiga/stand/boot/installboot.sh
new file mode 100644 (file)
index 0000000..642e941
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+#      $OpenBSD: installboot.sh,v 1.1 1997/01/16 09:26:34 niklas Exp $
+#      $NetBSD: installboot.sh,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+
+# compatibility with old installboot program
+#
+#      @(#)installboot.sh      8.1 (Berkeley) 6/10/93
+#
+if [ $# != 2 ]
+then
+       echo "Usage: installboot bootprog device"
+       exit 1
+fi
+if [ ! -f $1 ]
+then
+       echo "Usage: installboot bootprog device"
+       echo "${1}: bootprog must be a regular file"
+       exit 1
+fi
+if [ ! -c $2 ]
+then
+       echo "Usage: installboot bootprog device"
+       echo "${2}: device must be a char special file"
+       exit 1
+fi
+#/sbin/disklabel -B -b $1 $2
+dd if=$1 of=$2 bs=512 count=16
+exit $?
diff --git a/sys/arch/amiga/stand/boot/libsa/Makefile b/sys/arch/amiga/stand/boot/libsa/Makefile
new file mode 100644 (file)
index 0000000..f6a3ee7
--- /dev/null
@@ -0,0 +1,46 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/16 09:26:53 niklas Exp $
+#      $NetBSD: Makefile,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+
+LIB=   sa
+
+DIR_SA =       ${.CURDIR}/../../../../../lib/libsa
+DIR_KERN =     ${.CURDIR}/../../../../../lib/libkern
+DIR_KERN_MD =  ${.CURDIR}/../../../../../lib/libkern/arch/$(MACHINE_ARCH)
+
+TXLT =         ${.CURDIR}/../txlt/txlt
+
+.PATH: $(DIR_SA) $(DIR_KERN) $(DIR_KERN_MD)
+
+CFLAGS+=-DSTANDALONE -DINSECURE ${DEBUGFLAGS}
+# -DCOMPAT_UFS
+CFLAGS+=-I${.CURDIR}/../../../../..  -I${.CURDIR}/../../../../../lib/libsa
+CFLAGS+=-O2 -fomit-frame-pointer -fno-function-cse -m68060 -Wa,-l -Wa,-m68030
+CFLAGS+=$(COPTS)
+
+# stand routines
+SRCS=  gets.c
+# memcpy.c bcopy.c strerror.c
+
+# io routines
+SRCS+= close.c lseek.c open.c read.c dev.c
+
+# dev.c stat.c
+
+# boot filesystems
+SRCS+= ufs.c
+
+# kernlib routines
+SRCS+= strlen.S strcmp.S
+#$(DIR_KERN)/bcmp.c
+
+
+#ashrdi3.c bzero.S muldi3.S
+
+NOPROFILE=
+NOPIC=
+OBJMACHINE=
+
+install:
+
+.include <bsd.lib.mk>
+.include "../Makefile.txlt"
diff --git a/sys/arch/amiga/stand/boot/libsa/Makefile.inc b/sys/arch/amiga/stand/boot/libsa/Makefile.inc
new file mode 100644 (file)
index 0000000..35aeea6
--- /dev/null
@@ -0,0 +1,24 @@
+#      $OpenBSD: Makefile.inc,v 1.1 1997/01/16 09:26:54 niklas Exp $
+#      $NetBSD: Makefile.inc,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+
+#      NOTE: $S must correspond to the top of the 'sys' tree
+
+SA_DIR=        $S/arch/amiga/stand/boot/libsa
+
+.if exists($(SA_DIR)/obj.${MACHINE})
+SA_LIBDIR=     $(SA_DIR)/obj.${MACHINE}
+.else
+SA_LIBDIR=     $(SA_DIR)
+.endif
+
+SA_LIB=        $(SA_LIBDIR)/libsa.a
+
+$(SA_LIB):     .NOTMAIN __always_make_sa_lib
+       @echo making sure the stand-alone library is up to date...
+       @(cd $(SA_DIR) ; make)
+
+clean::                .NOTMAIN __always_make_sa_lib
+       @echo cleaning the stand-alone library objects
+       @(cd $(SA_DIR) ; make clean)
+
+__always_make_sa_lib: .NOTMAIN
diff --git a/sys/arch/amiga/stand/boot/libstubs.h b/sys/arch/amiga/stand/boot/libstubs.h
new file mode 100644 (file)
index 0000000..73d93ef
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * $OpenBSD: libstubs.h,v 1.1 1997/01/16 09:26:35 niklas Exp $
+ * $NetBSD: libstubs.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#include "amigaio.h"
+#include "amigagraph.h"
+#include "amigatypes.h"
+#include <sys/types.h>
+
+extern struct ExecBase *SysBase;
+extern struct Library *IntuitionBase;
+extern struct Library *ExpansionBase;
+
+void *AllocMem (size_t, u_int32_t);
+void FreeMem (void *, size_t);
+
+struct Library *OpenLibrary (const char *, u_int32_t);
+void CloseLibrary (struct Library *);
+struct MsgPort *CreateMsgPort(void);
+void *CreateIORequest(struct MsgPort *, u_int32_t);
+void DeleteIORequest(void *);
+void DeleteMsgPort(struct MsgPort *);
+
+u_int8_t DoIO(struct AmigaIO *);
+void SendIO(struct AmigaIO *);
+struct AmigaIO *CheckIO(struct AmigaIO *);
+void *WaitPort(struct MsgPort *);
+void AbortIO(struct AmigaIO *);
+u_int8_t WaitIO(struct AmigaIO *);
+
+int OpenDevice(const char *, u_int32_t, struct AmigaIO *, u_int32_t);
+
+void *FindResident(const char *);
+void *OpenResource(const char *);
+
+u_int32_t CachePreDMA(u_int32_t, u_int32_t *, int);
+#define DMAF_Continue          2
+#define DMAF_NoModify          4
+#define DMAF_ReadFromRAM       8
+
+void Forbid(void);
+void Permit(void);
+
+struct Screen *OpenScreenTagList(struct NewScreen *, const u_int32_t *);
+struct Screen *OpenScreenTag(struct NewScreen *, ...);
+struct Window *OpenWindowTagList(struct Window *, const u_int32_t *);
+struct Window *OpenWindowTag(struct Window *, ...);
+
+#ifdef nomore
+u_int32_t mytime(void);
+#endif
+
+struct cfdev *FindConfigDev(struct cfdev *, int, int);
+
+#ifndef DOINLINES
+void CacheClearU(void);
+#else
+#define LibCallNone(lib, what)  \
+       asm("movl a6,sp@-; movl %0,a6; " what "; movl sp@+,a6" :: \
+           "r"(lib) : "d0", "d1", "a0", "a1")
+
+#define CacheClearU() LibCallNone(SysBase, "jsr a6@(-0x27c)")
+#endif
diff --git a/sys/arch/amiga/stand/boot/libstubs.s b/sys/arch/amiga/stand/boot/libstubs.s
new file mode 100644 (file)
index 0000000..d1dbe36
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * $OpenBSD: libstubs.s,v 1.1 1997/01/16 09:26:36 niklas Exp $
+ * $NetBSD: libstubs.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * Exec.library functions.
+ */
+       .comm _SysBase,4
+
+       .globl _OpenLibrary
+_OpenLibrary:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       movl    sp@(12),d0
+       jsr     a6@(-0x228)
+       movl    sp@+,a6
+       rts
+#ifdef notyet
+       .globl _CloseLibrary
+_CloseLibrary:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x19e)
+       movl    sp@+,a6
+       rts
+#endif
+       .globl _CreateIORequest
+_CreateIORequest:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       movl    sp@(12),d0
+       jsr     a6@(-0x28e)
+       movl    sp@+,a6
+       rts
+
+       .globl _CreateMsgPort
+_CreateMsgPort:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       jsr     a6@(-0x29a)
+       movl    sp@+,a6
+       rts
+       
+#ifdef notyet
+       .globl _DeleteMsgPort
+_DeleteMsgPort:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       jsr     a6@(-0x2a0)
+       movl    sp@+,a6
+       rts
+       
+       .globl _DeleteIORequest
+_DeleteIORequest:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       jsr     a6@(-0x294)
+       movl    sp@+,a6
+       rts
+#endif
+       
+       .globl  _OpenDevice
+_OpenDevice:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       movl    sp@(12),d0
+       movl    sp@(16),a1
+       movl    sp@(20),d1
+       jsr     a6@(-0x1bc)
+       movl    sp@+,a6
+       rts
+
+       .globl  _DoIO
+_DoIO: 
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1c8)
+       movl    sp@+,a6
+       rts
+#ifdef nomore
+       .globl  _CheckIO
+_CheckIO:      
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1d4)
+       movl    sp@+,a6
+       rts
+#endif
+       .globl  _WaitIO
+_WaitIO:       
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1da)
+       movl    sp@+,a6
+       rts
+
+       .globl  _SendIO
+_SendIO:       
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1ce)
+       movl    sp@+,a6
+       rts
+
+       .globl  _AbortIO
+_AbortIO:      
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1e0)
+       movl    sp@+,a6
+       rts
+
+       .globl  _WaitPort
+_WaitPort:     
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       jsr     a6@(-0x180)
+       movl    sp@+,a6
+       rts
+
+#ifndef DOINLINES
+       .globl _CacheClearU
+_CacheClearU:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       jsr     a6@(-0x27c)
+       movl    sp@+,a6
+       rts
+#endif
+       .globl _CachePreDMA
+_CachePreDMA:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a0
+       movl    sp@(12),a1
+       movl    sp@(16),d0
+       jsr     a6@(-0x2fa)
+       movl    sp@+,a6
+       rts
+
+       .globl _FindResident
+_FindResident:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x60)
+       movl    sp@+,a6
+       rts
+
+       .globl _OpenResource
+_OpenResource:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:w),a6
+       movl    sp@(8),a1
+       jsr     a6@(-0x1f2)
+       movl    sp@+,a6
+       rts
+#ifdef notyet
+       .globl _Forbid
+_Forbid:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:W),a6
+       jsr     a6@(-0x84)
+       movl    sp@+,a6
+       rts
+
+       .globl _Permit
+_Permit:
+       movl    a6,sp@-
+       movl    pc@(_SysBase:W),a6
+       jsr     a6@(-0x8a)
+       movl    sp@+,a6
+       rts
+#endif
+
+/*
+ * Intuition.library functions.
+ */
+
+       .comm _IntuitionBase,4
+
+       .globl _OpenScreenTagList
+_OpenScreenTagList:
+       movl    a6,sp@-
+       movl    pc@(_IntuitionBase:w),a6
+       movl    sp@(8),a0
+       movl    sp@(12),a1
+       jsr     a6@(-0x264)
+       movl    sp@+,a6
+       rts
+
+       .globl _OpenWindowTagList
+_OpenWindowTagList:
+       movl    a6,sp@-
+       movl    pc@(_IntuitionBase:w),a6
+       movl    sp@(8),a0
+       movl    sp@(12),a1
+       jsr     a6@(-0x25e)
+       movl    sp@+,a6
+       rts
+#ifdef nomore
+       .globl _mytime
+_mytime:
+       movl    a6,sp@-
+       movl    pc@(_IntuitionBase:w),a6
+       subql   #8,sp
+       movl    sp,a0
+       lea     sp@(4),a1
+       jsr     a6@(-0x54)
+       movl    sp@+,d0
+       addql   #4,sp
+       movl    sp@+,a6
+       rts
+#endif
+       .comm _ExpansionBase,4
+       .globl _FindConfigDev
+_FindConfigDev:
+       movl    a6,sp@-
+       movl    _ExpansionBase,a6
+       movl    sp@(8),a0
+       movl    sp@(12),d0
+       movl    sp@(16),d1
+       jsr     a6@(-0x48)
+       movl    sp@+,a6
+       rts
diff --git a/sys/arch/amiga/stand/boot/main.c b/sys/arch/amiga/stand/boot/main.c
new file mode 100644 (file)
index 0000000..4314684
--- /dev/null
@@ -0,0 +1,566 @@
+/*
+ * $OpenBSD: main.c,v 1.1 1997/01/16 09:26:38 niklas Exp $
+ * $NetBSD: main.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ *
+ * Copyright (c) 1996 Ignatios Souvatzis
+ * Copyright (c) 1994 Michael L. Hitch
+ * 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 Michael L. Hitch.
+ * 4. The name of the authors 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+#include <sys/reboot.h>
+#include <sys/types.h>
+
+#include <sys/exec_aout.h>
+
+#include <amiga/cfdev.h>
+#include <amiga/memlist.h>
+#include <include/cpu.h>
+
+#include "saerrno.h"
+#include "stand.h"
+
+#include "libstubs.h"
+#include "samachdep.h"
+
+#define __LDPGSZ 8192
+#define __PGSZ 8192
+
+#define DRACOREVISION  (*(u_int8_t *)0x02000009)
+#define DRACOMMUMARGIN 0x200000
+#define DRACOZ2OFFSET  0x3000000
+#define DRACOZ2MAX     0x1000000
+
+#define EXECMIN 36
+
+void startit __P((void *, u_long, u_long, void *, u_long, u_long, int, void *,
+       int, int, u_long, u_long, int));
+void startit_end __P((void));
+int get_cpuid __P((u_int32_t *));
+
+/*
+ * Kernel startup interface version
+ *     1:      first version of loadbsd
+ *     2:      needs esym location passed in a4
+ *     3:      load kernel image into fastmem rather than chipmem
+ *     MAX:    highest version with backward compatibility.
+ */     
+
+#define KERNEL_STARTUP_VERSION         3
+#define KERNEL_STARTUP_VERSION_MAX     9
+
+static long get_number(char **);
+
+const char version[] = "2.0";
+char default_command[] = "openbsd -Sn2";
+
+int
+pain()
+{
+       long int io = 0;
+       char linebuf[128];
+       char    *kernel_name = default_command;
+       char    *path = default_command;
+       int     boothowto = RB_AUTOBOOT;
+       u_int32_t cpuid = 0;
+       int     amiga_flags = 0;
+       u_int32_t I_flag = 0;
+       int     k_flag = 0;
+       int     p_flag = 0;
+       int     Z_flag = 0;
+       int     m_value = 0;
+       int     S_flag = 0;
+       int     t_flag = 0;
+       long stringsz;
+
+       u_int32_t fmem = 0x0;
+       int     fmemsz = 0x0;
+       int     cmemsz = 0x0;
+       int     eclock = SysBase->EClockFreq;
+       /* int  skip_chipmem = 0; */
+
+       void (*start_it)(void *, u_long, u_long, void *, u_long, u_long, int,
+           void *, int, int, u_long, u_long, int) = startit;
+
+       caddr_t kp;
+       u_int16_t *kvers;
+       struct exec *eh;
+       int     textsz, ksize;
+       void    *esym = 0;
+       int32_t *nkcd;
+       struct cfdev *cd, *kcd;
+       struct boot_memseg *kmemseg;
+       struct boot_memseg *memseg;
+       struct MemHead *mh;
+       u_int32_t from, size, vfrom, vsize;
+       int contflag, mapped1to1;
+
+       int ncd, nseg;
+       char c;
+
+       extern u_int16_t timelimit;
+
+       /*
+        * we need V36 for: EClock, RDB Bootblocks, CacheClearU
+        */
+
+       if (SysBase->LibNode.Version < EXECMIN) {
+               printf("Exec V%ld, need V%ld\n",
+                   (long)SysBase->LibNode.Version, (long)EXECMIN);
+               goto out;
+       }
+
+       printf("\2337mOpenBSD/Amiga bootblock %s\2330m\n%s :- ",
+               version, kernel_name);
+
+       timelimit = 3;
+       gets(linebuf);
+
+       if (*linebuf == 'q')
+               return 1;
+
+       if (*linebuf)
+               path = linebuf;
+
+       /*
+        * parse boot command for path name and process any options
+        */
+       while ((c = *path)) {
+               while (c == ' ')
+                       c = *++path;
+               if (c == '-') {
+                       while ((c = *++path) && c != ' ') {
+                               switch (c) {
+                               case 'a':       /* multi-user state */
+                                       boothowto &= ~RB_SINGLE;
+                                       break;
+                               case 'b':       /* ask for root device */
+                                       boothowto |= RB_ASKNAME;
+                                       break;
+                               case 'c':       /* force machine model */
+                                       cpuid = get_number(&path) << 16;
+                                       break;
+                               case 'k':       /* Reserve first 4M fastmem */
+                                       k_flag++;
+                                       break;
+                               case 'm':       /* Force fastmem size */
+                                       m_value = get_number(&path) * 1024;
+                                       break;
+                               case 'n':       /* non-contiguous memory */
+                                       amiga_flags |= 
+                                           (get_number(&path) & 3) << 1;
+                                       break;
+                               case 'p':       /* Select fastmem by priority */
+                                       p_flag++;
+                                       break;
+                               case 's':       /* single-user state */
+                                       boothowto |= RB_SINGLE;
+                                       break;
+                               case 't':       /* test flag */
+                                       t_flag = 1;
+                                       break;
+                               case 'A':       /* enable AGA modes */
+                                       amiga_flags |= 1;
+                                       break;
+                               case 'D':       /* enter Debugger */
+                                       boothowto |= RB_KDB;
+                                       break;
+                               case 'I':       /* inhibit sync negotiation */
+                                       I_flag = get_number(&path);
+                                       break;
+                               case 'K':       /* remove 1st 4MB fastmem */
+                                       break;
+                               case 'S':       /* include debug symbols */
+                                       S_flag = 1;
+                                       break;
+                               case 'Z':       /* force chip memory load */
+                                       Z_flag = 1;
+                                       break;
+                               }
+                       }
+               } else {
+                       kernel_name = path;
+                       while ((c = *++path) && c != ' ')
+                               ;
+                       if (c)
+                               *path++ = 0;
+               }
+       }
+       while ((c = *kernel_name) && c == ' ')
+               ++kernel_name;
+       path = kernel_name;
+       while ((c = *path) && c != ' ')
+               ++path;
+       if (c)
+               *path = 0;
+
+       if (get_cpuid(&cpuid))
+               goto out;
+
+       ExpansionBase = OpenLibrary("expansion.library", 0);
+       if (!ExpansionBase) {
+               printf("can't open %s\n", "expansion.library");
+               return 1;
+       }
+
+       for (ncd=0, cd=0; (cd = FindConfigDev(cd, -1, -1)); ncd++)
+               /* nothing */;
+
+       /* find memory list */
+
+       memseg = (struct boot_memseg *)alloc(16*sizeof(struct boot_memseg));
+
+       /* Forbid(); */
+
+       nseg = 0;
+       mh = SysBase->MemLst;
+       vfrom = mh->Lower & -__PGSZ;
+       vsize = (mh->Upper - vfrom) & -__PGSZ; 
+       contflag = mapped1to1 = 0;
+
+       do {
+               size = vsize;
+
+               if (SysBase->LibNode.Version > 36) {
+                       from = CachePreDMA(vfrom, &size, contflag);
+                       contflag = DMAF_Continue;
+                       mapped1to1 = (from == vfrom);
+                       vsize -= size;
+                       vfrom += size;
+               } else {
+                       from = vfrom;
+                       vsize = 0;
+               }
+
+#if DEBUG_MEMORY_LIST
+               printf("%lx %lx %lx %ld/%lx %lx\n",
+                       (long)from, (long)size, 
+                       (long)mh->Attribs, (long)mh->Pri,
+                       (long)vfrom, (long)vsize);
+#endif
+               /* Insert The Evergrowing Kludge List Here: */
+
+               /* a) dont load kernel over DraCo MMU table */
+                       
+               if (((cpuid >> 24) == 0x7D) &&
+                   ((from & -DRACOMMUMARGIN) == 0x40000000) && 
+                   (size >= DRACOMMUMARGIN)) {
+
+                       memseg[nseg].ms_start = from & -DRACOMMUMARGIN;
+                       memseg[nseg].ms_size = DRACOMMUMARGIN;
+                       memseg[nseg].ms_attrib = mh->Attribs;
+                       memseg[nseg].ms_pri = mh->Pri;
+
+                       size -= DRACOMMUMARGIN - (from & (DRACOMMUMARGIN - 1));
+                       from += DRACOMMUMARGIN - (from & (DRACOMMUMARGIN - 1));
+                       ++nseg;
+               }
+
+               if ((mh->Attribs & (MEMF_CHIP|MEMF_FAST)) == MEMF_CHIP) {
+                       size += from;
+                       cmemsz = size;;
+                       from = 0;
+               } else if ((fmemsz < size) && mapped1to1) {
+                       fmem = from;
+                       fmemsz = size;
+               }
+
+               memseg[nseg].ms_start = from;
+               memseg[nseg].ms_size = size;
+               memseg[nseg].ms_attrib = mh->Attribs;
+               memseg[nseg].ms_pri = mh->Pri;
+
+               if (vsize == 0) {
+                       mh = mh->next;
+                       contflag = 0;
+                       if (mh->next) {
+                               vfrom = mh->Lower & -__PGSZ;
+                               vsize = (mh->Upper & -__PGSZ) - vfrom;
+                       }
+               }
+       } while ((++nseg <= 16) && vsize);
+
+       /* Permit(); */
+
+       printf("Loading %s: ", kernel_name);
+       io = open(kernel_name, 0);
+       if (io < 0)
+               goto err;
+
+       eh = alloc(sizeof(*eh));
+       if (!eh) {
+               errno = ENOMEM;
+               goto err;
+       }
+       if (read(io, eh, sizeof(*eh)) != sizeof(*eh)) {
+               errno = ENOEXEC;
+               goto err;
+       }
+
+       if ((N_GETMAGIC(*eh) != NMAGIC) || (N_GETMID(*eh) != MID_M68K)) {
+               errno = ENOEXEC;
+               goto err;
+       }
+               
+       textsz = (eh->a_text + __LDPGSZ - 1) & (-__LDPGSZ);
+       esym = 0;
+
+       ksize = textsz + eh->a_data + eh->a_bss 
+           + sizeof(*nkcd) + ncd*sizeof(*cd)
+           + sizeof(*nkcd) + nseg * sizeof(struct boot_memseg);
+
+       if (S_flag && eh->a_syms) {
+               if (lseek(io, eh->a_text+ eh->a_data+ eh->a_syms, SEEK_CUR)
+                   <= 0
+                   || read(io, &stringsz, 4) != 4
+                   || lseek(io, sizeof(*eh), SEEK_SET) < 0)
+                       goto err;
+               ksize += eh->a_syms + 4 + ((stringsz + 3) & ~3);
+       }
+
+       kp = alloc(ksize + 256 + ((u_char *)startit_end - (u_char *)startit));
+       if (kp == 0) {
+               errno = ENOMEM;
+               goto err;
+       }
+
+       printf("%ld", eh->a_text);
+       if (read(io, kp, eh->a_text) != eh->a_text)
+               goto err;
+
+       printf("+%ld", eh->a_data);
+       if (read(io, kp + textsz, eh->a_data) != eh->a_data)
+               goto err;
+
+       printf("+%ld", eh->a_bss);
+
+       kvers = (u_short *)(kp + eh->a_entry - 2);
+
+       if (*kvers > KERNEL_STARTUP_VERSION_MAX && *kvers != 0x4e73) {
+                printf("\nnewer bootblock required: %ld\n", (long)*kvers);
+               goto freeall;
+       }
+#if 0
+        if (*kvers > KERNEL_STARTUP_VERSION)
+               printf("\nKernel V%ld newer than bootblock V%ld\n",
+                   (long)*kvers, (long)KERNEL_STARTUP_VERSION);
+#endif
+        nkcd = (int *)(kp + textsz + eh->a_data + eh->a_bss);
+        if (*kvers != 0x4e73 && *kvers > 1 && S_flag && eh->a_syms) {
+                *nkcd++ = eh->a_syms;
+               printf("+[%ld", eh->a_syms);
+                if (read(io, (char *)nkcd, eh->a_syms) != eh->a_syms)
+                       goto err;
+                nkcd = (int *)((char *)nkcd + eh->a_syms);
+               printf("+%ld]", stringsz);
+                if (read(io, (char *)nkcd, stringsz) != stringsz)
+                       goto err;
+                nkcd = (int*)((char *)nkcd + ((stringsz + 3) & ~3));
+                esym = (char *)(textsz + eh->a_data + eh->a_bss
+                    + eh->a_syms + 4 + ((stringsz + 3) & ~3));
+        }
+       putchar('\n');
+
+       *nkcd = ncd;
+       kcd = (struct cfdev *)(nkcd + 1);
+
+       while ((cd = FindConfigDev(cd, -1, -1))) {
+               *kcd = *cd;
+               if (((cpuid >> 24) == 0x7D) &&
+                   ((u_long)kcd->addr < 0x1000000)) {
+                       kcd->addr += 0x3000000;
+               }
+               ++kcd;
+       }
+
+       nkcd = (u_int32_t *)kcd;
+       *nkcd = nseg;
+
+       kmemseg = (struct boot_memseg *)(nkcd + 1);
+
+       while (nseg-- > 0)
+               *kmemseg++ = *memseg++;
+
+       if (*kvers > 2 && Z_flag == 0) {
+               /*
+                * Kernel supports direct load to fastmem, and the -Z
+                * option was not specified.  Copy startup code to end
+                * of kernel image and set start_it.
+                */
+               if ((u_int32_t)kp < fmem) {
+                       errno = EFBIG;
+                       goto err;
+               }
+               memcpy(kp + ksize + 256, (char *)startit,
+                   (char *)startit_end - (char *)startit);
+               CacheClearU();
+               (caddr_t)start_it = kp + ksize + 256;
+               printf("*** Loading from %08lx to Fastmem %08lx ***\n",
+                   (u_long)kp, (u_long)fmem);
+               /* sleep(2); */
+       } else {
+               /*
+                * Either the kernel doesn't suppport loading directly to
+                * fastmem or the -Z flag was given.  Verify kernel image
+                * fits into chipmem.
+                */
+               if (ksize >= cmemsz) {
+                       printf("Kernel size %d exceeds Chip Memory of %d\n",
+                           ksize, cmemsz);
+                       return 20;
+               }
+               Z_flag = 1;
+               printf("*** Loading from %08lx to Chipmem ***\n", (u_long)kp);
+       }
+
+#if 0
+       printf("would start(kp=0x%lx, ksize=%ld, entry=0x%lx,\n"
+               "fmem=0x%lx, fmemsz=%ld, cmemsz=%ld\n"
+               "boothow=0x%lx, esym=0x%lx, cpuid=0x%lx, eclock=%ld\n"
+               "amigaflags=0x%lx, I_flags=0x%lx, Zflag=%ld, ok?\n",
+           (u_long)kp, (u_long)ksize, eh->a_entry,
+           (u_long)fmem, (u_long)fmemsz, (u_long)cmemsz,
+           (u_long)boothowto, (u_long)esym, (u_long)cpuid, (u_long)eclock,
+           (u_long)amiga_flags, (u_long)I_flag, (u_long)(Z_flag == 0));
+#endif
+       timelimit = 2;
+       (void)getchar();
+
+       start_it(kp, ksize, eh->a_entry, (void *)fmem, fmemsz, cmemsz,
+           boothowto, esym, cpuid, eclock, amiga_flags, I_flag, Z_flag == 0);
+       /*NOTREACHED*/
+
+freeall:
+       free(kp, ksize);
+       free(eh, sizeof(*eh));
+err:
+       printf("\nError %ld\n", (long)errno);
+       close(io);
+out:
+       timelimit = 10;
+       (void)getchar();
+       return 1;
+}
+
+static
+long get_number(ptr)
+char **ptr;
+{
+       long value = 0;
+       int base = 10;
+       char *p = *ptr;
+       char c;
+       char sign = 0;
+
+       c = *++p;
+       while (c == ' ')
+               c = *++p;
+       if (c == '-') {
+               sign = -1;
+               c = *++p;
+       }
+       if (c == '$') {
+               base = 16;
+               c = *++p;
+       } else if (c == '0') {
+               c = *++p;
+               if ((c & 0xdf) == 'X') {
+                       base = 16;
+                       c = *++p;
+               }
+       }
+       while (c) {
+               if (c >= '0' && c <= '9')
+                       c -= '0';
+               else {
+                       c = (c & 0xdf) - 'A' + 10;
+                       if (base != 16 || c < 10 || c > 15)
+                               break;
+               }
+               value = value * base + c;
+               c = *++p;
+       }
+       *ptr = p - 1;
+#ifdef TEST
+       fprintf(stderr, "get_number: got %c0x%x", 
+           sign ? '-' : '+', value);
+#endif 
+       return (sign ? -value : value);
+}
+
+/*
+ * Try to determine the machine ID by searching the resident module list
+ * for modules only present on specific machines.  (Thanks, Bill!)
+ */
+
+int
+get_cpuid(cpuid)
+       u_int32_t *cpuid;
+{
+       *cpuid |= SysBase->AttnFlags;   /* get FPU and CPU flags */
+       if (*cpuid & 0xffff0000) {
+               if ((*cpuid >> 24) == 0x7D)
+                       return 0;
+
+               switch (*cpuid >> 16) {
+               case 500:
+               case 600:
+               case 1000:
+               case 1200:
+               case 2000:
+               case 3000:
+               case 4000:
+                       return 0;
+               default:
+                       printf("Amiga %ld ???\n",
+                           (long)(*cpuid >> 16));
+                       return(1);
+               }
+       }
+       if (FindResident("A4000 Bonus") || FindResident("A4000 bonus")
+           || FindResident("A1000 Bonus"))
+               *cpuid |= 4000 << 16;
+       else if (FindResident("A3000 Bonus") || FindResident("A3000 bonus")
+           || (SysBase->LibNode.Version == 36))
+               *cpuid |= 3000 << 16;
+       else if (OpenResource("card.resource")) {
+               /* Test for AGA? */
+               *cpuid |= 1200 << 16;
+       } else if (OpenResource("draco.resource")) {
+               *cpuid |= (32000 | DRACOREVISION) << 16;
+       }
+       /*
+        * Nothing found, it's probably an A2000 or A500
+        */
+       if ((*cpuid >> 16) == 0)
+               *cpuid |= 2000 << 16;
+
+       return 0;
+}
diff --git a/sys/arch/amiga/stand/boot/muldi3.s b/sys/arch/amiga/stand/boot/muldi3.s
new file mode 100644 (file)
index 0000000..d2003ff
--- /dev/null
@@ -0,0 +1,63 @@
+/*     $OpenBSD: muldi3.s,v 1.1 1997/01/16 09:26:39 niklas Exp $
+/*     $NetBSD: muldi3.s,v 1.1.1.1 1996/11/29 23:36:30 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ * Slow but small muldi3.
+ * Beware... the multiplicand is unsigned (but should be enough for
+ * usage by ufs.c :-)
+ */
+
+       .text
+       .even
+       .globl  ___muldi3
+___muldi3:
+       movml d2/d3/d4/d5/d6,sp@-       | 0..4 regs, 5 pc, 6..9 parameters
+       movml sp@(24),d2-d5
+|      movl sp@(24),d2
+|      movl sp@(28),d3
+|      movl sp@(32),d4
+|      movl sp@(36),d5
+       movq #0,d0
+       movq #0,d1
+       movq #63,d6
+L4:
+       asrl #1,d2
+       roxrl #1,d3
+       jcc L5
+       addl d5,d1
+       addxl d4,d0
+L5:
+       addl d5,d5
+       addxl d4,d4
+L7:
+       dbra d6,L4
+       movml sp@+,d2/d3/d4/d5/d6
+       rts
diff --git a/sys/arch/amiga/stand/boot/printf.s b/sys/arch/amiga/stand/boot/printf.s
new file mode 100644 (file)
index 0000000..a49a597
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * $OpenBSD: printf.s,v 1.1 1997/01/16 09:26:40 niklas Exp $
+ * $NetBSD: printf.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * printf calling exec's RawDoFmt
+ * Beware! You have to explicitly use %ld etc. for 32bit integers!
+ */
+       .text
+       .globl  _printf
+       .globl  _putchar, _SysBase
+
+Lputch:
+       movl    d0,sp@-
+       bsr     _putchar
+       addql   #4,sp
+       rts
+
+_printf:
+       movml   #0x0032,sp@-
+       lea     pc@(Lputch:w),a2
+       lea     sp@(20),a1
+       movl    sp@(16),a0
+       movl    pc@(_SysBase:w),a6
+       jsr     a6@(-0x20a)
+       movml   sp@+, #0x4c00
+       rts
+#if 0
+Lstorech:
+       movb    d0, a3@+
+       rts
+
+       .globl _sprintf
+_sprintf:
+       movml   #0x0032,sp@-
+       movl    sp@(16),a3
+       lea     pc@(Lstorech:w),a2
+       lea     sp@(24),a1
+       movl    sp@(20),a0
+       movl    pc@(_SysBase:w),a6
+       jsr     a6@(-0x20a)
+       movml   sp@+, #0x4c00
+       rts
+#endif
diff --git a/sys/arch/amiga/stand/boot/samachdep.h b/sys/arch/amiga/stand/boot/samachdep.h
new file mode 100644 (file)
index 0000000..57ca228
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * $OpenBSD: samachdep.h,v 1.1 1997/01/16 09:26:41 niklas Exp $
+ * $NetBSD: samachdep.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+#ifndef _SA_MACHDEP_H_
+#define _SA_MACHDEP_H_
+
+/* "hardware" init: */
+
+int configure(void *);
+int pain(void);
+
+/* console functions not declared MI: */
+
+int consinit(void);
+void puts(char *);
+
+void xdinit(void *);
+
+#endif
diff --git a/sys/arch/amiga/stand/boot/startit.s b/sys/arch/amiga/stand/boot/startit.s
new file mode 100644 (file)
index 0000000..a8dd10c
--- /dev/null
@@ -0,0 +1,235 @@
+/*     $OpenBSD: startit.s,v 1.1 1997/01/16 09:26:41 niklas Exp $      */
+/*     $NetBSD: startit.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $       */
+
+/*
+ * Copyright (c) 1996 Ignatios Souvatzis
+ * Copyright (c) 1994 Michael L. Hitch
+ * 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 Michael L. Hitch.
+ * 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.
+ *
+ *
+ * From: $NetBSD: startit.s,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ */
+
+       .set    ABSEXECBASE,4
+
+       .text
+
+       .globl  _startit
+       .globl  _startit_end
+
+_startit:
+#if TESTONAMIGA
+       movew   #0x999,0xdff180         | gray
+#endif
+       movel   sp,a3
+       movel   4:w,a6
+       lea     pc@(start_super:w),a5
+       jmp     a6@(-0x1e)              | supervisor-call
+
+start_super:
+#if TESTONAMIGA
+       movew   #0x900,0xdff180         | dark red
+#endif
+       movew   #0x2700,sr
+
+       | the BSD kernel wants values into the following registers:
+       | a0:  fastmem-start
+       | d0:  fastmem-size
+       | d1:  chipmem-size
+       | d3:  Amiga specific flags
+       | d4:  E clock frequency
+       | d5:  AttnFlags (cpuid)
+       | d7:  boothowto
+       | a4:  esym location
+       | a2:  Inhibit sync flags
+       | All other registers zeroed for possible future requirements.
+
+       lea     pc@(_startit:w),sp      | make sure we have a good stack ***
+
+       movel   a3@(4),a1               | loaded kernel
+       movel   a3@(8),d2               | length of loaded kernel
+|      movel   a3@(12),sp              | entry point in stack pointer
+       movel   a3@(12),a6              | entry point           ***
+       movel   a3@(16),a0              | fastmem-start
+       movel   a3@(20),d0              | fastmem-size
+       movel   a3@(24),d1              | chipmem-size
+       movel   a3@(28),d7              | boothowto
+       movel   a3@(32),a4              | esym
+       movel   a3@(36),d5              | cpuid
+       movel   a3@(40),d4              | E clock frequency
+       movel   a3@(44),d3              | Amiga flags
+       movel   a3@(48),a2              | Inhibit sync flags
+       movel   a3@(52),d6              | Load to fastmem flag
+       subl    a5,a5                   | target, load to 0
+
+       cmpb    #0x7D,a3@(36)           | is it DraCo?
+       beq     nott                    | yes, switch off MMU later
+
+                                       | no, it is an Amiga:
+
+#if TESTONAMIGA
+       movew   #0xf00,0xdff180         |red
+#endif
+|      moveb   #0,0x200003c8
+|      moveb   #63,0x200003c9
+|      moveb   #0,0x200003c9
+|      moveb   #0,0x200003c9
+
+       movew   #(1<<9),0xdff096        | disable DMA on Amigas.
+
+| ------ mmu off start -----
+
+       btst    #3,d5                   | AFB_68040,SysBase->AttnFlags
+       beq     not040
+
+| Turn off 68040/060 MMU
+
+       subl    a3,a3
+       .word 0x4e7b,0xb003             | movec a3,tc
+       .word 0x4e7b,0xb806             | movec a3,urp
+       .word 0x4e7b,0xb807             | movec a3,srp
+       .word 0x4e7b,0xb004             | movec a3,itt0
+       .word 0x4e7b,0xb005             | movec a3,itt1
+       .word 0x4e7b,0xb006             | movec a3,dtt0
+       .word 0x4e7b,0xb007             | movec a3,dtt1
+       bra     nott
+
+not040:
+       lea     pc@(zero:w),a3
+       pmove   a3@,tc                  | Turn off MMU
+       lea     pc@(nullrp:w),a3
+       pmove   a3@,crp                 | Turn off MMU some more
+       pmove   a3@,srp                 | Really, really, turn off MMU
+
+| Turn off 68030 TT registers
+
+       btst    #2,d5                   | AFB_68030,SysBase->AttnFlags
+       beq     nott                    | Skip TT registers if not 68030
+       lea     pc@(zero:w),a3
+       .word 0xf013,0x0800             | pmove a3@,tt0 (gas only knows about 68851 ops..)
+       .word 0xf013,0x0c00             | pmove a3@,tt1 (gas only knows about 68851 ops..)
+
+nott:
+| ---- mmu off end ----
+#if TESTONAMIGA
+       movew   #0xf60,0xdff180         | orange
+#endif
+|      moveb   #0,0x200003c8
+|      moveb   #63,0x200003c9
+|      moveb   #24,0x200003c9
+|      moveb   #0,0x200003c9
+
+| ---- copy kernel start ----
+
+       tstl    d6                      | Can we load to fastmem?
+       beq     L0                      | No, leave destination at 0
+       movl    a0,a5                   | Move to start of fastmem chunk
+       addl    a0,a6                   | relocate kernel entry point
+L0:
+       movl    a1@+,a5@+
+       subl    #4,d2
+       bcc     L0
+
+       lea     pc@(ckend:w),a1
+       movl    a5,sp@-
+       pea     pc@(_startit_end:w)
+L1:
+       movl    a1@+,a5@+
+       cmpl    sp@,a1
+       bcs     L1
+       addql   #4,sp
+
+       btst    #3,d5
+       jeq     L2
+       .word   0xf4f8
+L2:    movql   #0,d2                   | switch off cache to ensure we use
+       movec   d2,cacr                 | valid kernel data
+
+#if TESTONAMIGA
+       movew   #0xFF0,0xdff180         | yellow
+#endif
+|      moveb   #0,0x200003c8
+|      moveb   #63,0x200003c9
+|      moveb   #0,0x200003c9
+|      moveb   #0,0x200003c9
+
+       rts
+
+| ---- copy kernel end ----
+
+ckend:
+#if TESTONAMIGA
+       movew   #0x0ff,0xdff180         | petrol
+#endif
+|      moveb   #0,0x200003c8
+|      moveb   #0,0x200003c9
+|      moveb   #63,0x200003c9
+|      moveb   #63,0x200003c9
+
+       movl    d5,d2
+       roll    #8,d2
+       cmpb    #0x7D,d2
+       jne     noDraCo
+
+| DraCo: switch off MMU now:
+
+       subl    a3,a3
+       .word 0x4e7b,0xb003             | movec a3,tc
+       .word 0x4e7b,0xb806             | movec a3,urp
+       .word 0x4e7b,0xb807             | movec a3,srp
+       .word 0x4e7b,0xb004             | movec a3,itt0
+       .word 0x4e7b,0xb005             | movec a3,itt1
+       .word 0x4e7b,0xb006             | movec a3,dtt0
+       .word 0x4e7b,0xb007             | movec a3,dtt1
+       
+noDraCo:
+       moveq   #0,d2                   | zero out unused registers
+       moveq   #0,d6                   | (might make future compatibility
+       movel   d6,a1                   |  would have known contents)
+       movel   d6,a3
+       movel   d6,a5
+       movel   a6,sp                   | entry point into stack pointer
+       movel   d6,a6
+
+#if TESTONAMIGA
+       movew   #0x0F0,0xdff180         | green
+#endif
+|      moveb   #0,0x200003c8
+|      moveb   #0,0x200003c9
+|      moveb   #63,0x200003c9
+|      moveb   #0,0x200003c9
+
+       jmp     sp@                     | jump to kernel entry point
+
+
+| A do-nothing MMU root pointer (includes the following long as well)
+
+nullrp:        .long   0x7fff0001
+zero:  .long   0
+
+_startit_end:
diff --git a/sys/arch/amiga/stand/boot/test.s b/sys/arch/amiga/stand/boot/test.s
new file mode 100644 (file)
index 0000000..e5abdd9
--- /dev/null
@@ -0,0 +1,7 @@
+       .text
+       .globl _start
+_start:
+       lea     pc@(bla),a0
+       movq    #1,d0
+       rts
+       .globl  bla
diff --git a/sys/arch/amiga/stand/boot/twiddle.c b/sys/arch/amiga/stand/boot/twiddle.c
new file mode 100644 (file)
index 0000000..bd07e47
--- /dev/null
@@ -0,0 +1,52 @@
+/*     $OpenBSD: twiddle.c,v 1.1 1997/01/16 09:26:44 niklas Exp $      */
+/*     $NetBSD: twiddle.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $       */
+
+/*-
+ * Copyright (c) 1993
+ *     The Regents of the University of California.  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 the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
+ *
+ *     @(#)printf.c    8.1 (Berkeley) 6/11/93
+ */
+
+/*     From: $NetBSD: twiddle.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $ */
+
+#include "stand.h"
+
+const static char chars[4] = {'|', '/', '-', '\\'};
+
+void
+twiddle()
+{
+       static short int pos;
+
+       putchar(chars[pos++ & 3]);
+       putchar('\b');
+}
diff --git a/sys/arch/amiga/stand/boot/txlt/Makefile b/sys/arch/amiga/stand/boot/txlt/Makefile
new file mode 100644 (file)
index 0000000..8a13db5
--- /dev/null
@@ -0,0 +1,10 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/16 09:26:55 niklas Exp $
+
+PROG=txlt
+NOMAN=noman
+LDADD=-ll
+CLEANFILES+=txlt.c
+
+install:
+
+.include <bsd.prog.mk>
diff --git a/sys/arch/amiga/stand/boot/txlt/txlt.l b/sys/arch/amiga/stand/boot/txlt/txlt.l
new file mode 100644 (file)
index 0000000..a915677
--- /dev/null
@@ -0,0 +1,19 @@
+       void munchit(char *);
+%%
+\..*\n                                 printf("%s", yytext);
+pea[   ][_A-Za-z][A-Za-z0-9_]*$        {printf("pea");munchit(yytext+3);}
+\ [_A-Za-z][A-Za-z0-9_]*/\,            munchit(yytext);
+.                                      putchar(*yytext);
+%%
+void
+munchit(s)
+       char *s;
+{
+       putchar(*s++);
+       if (!strncmp(s, "fp", 2) ||
+           !strncmp(s, "sp", 2) ||
+           ((*s == 'a')  || (*s == 'd')) && ((s[1]-'0')<=7))
+               printf("%s", s);
+       else
+               printf("pc@(%s)",s);
+}
diff --git a/sys/arch/amiga/stand/boot/xd.c b/sys/arch/amiga/stand/boot/xd.c
new file mode 100644 (file)
index 0000000..b383184
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * $OpenBSD: xd.c,v 1.1 1997/01/16 09:26:45 niklas Exp $
+ * $NetBSD: xd.c,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 Ignatios Souvatzis.
+ * Copyright (c) 1995 Waldi Ravens.
+ * 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 Waldi Ravens.
+ * 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.
+ */
+
+#include <sys/types.h>
+
+#include <stand.h>
+#include <ufs.h>
+
+
+#include "samachdep.h"
+#include "amigaio.h"
+#include "libstubs.h"
+
+static int xdstrategy __P((void *, int, daddr_t, size_t, void *, size_t *));
+static int xdopen __P((struct open_file *, ...));
+static int xdclose __P((struct open_file *));
+static int xdioctl __P((struct open_file *, u_long, void *));
+
+static u_int32_t aio_base;
+static struct AmigaIO *aio_save;
+
+static struct devsw devsw[] = {
+        { "xd", xdstrategy, xdopen, xdclose, xdioctl }
+};              
+
+struct fs_ops file_system[] = {
+       { ufs_open, ufs_close, ufs_read, ufs_write, ufs_seek, ufs_stat },
+};
+
+int nfsys = sizeof(file_system)/sizeof(struct fs_ops);
+
+
+
+/* called from configure */
+
+void
+xdinit(aio)
+       void *aio;
+{
+       aio_save = aio;
+       aio_base = aio_save->offset;
+}
+
+/* 
+ * Kernel ist loaded from device and partition the kickstart
+ * menu or boot priority has chosen:
+ */
+
+int
+devopen(f, fname, file)
+       struct open_file *f;
+       const char *fname;
+       char **file;
+{
+       f->f_devdata = aio_save;
+       f->f_dev = &devsw[0];
+       *file = (char *)fname;
+       return 0;
+}
+
+/* tell kickstart to do the real work */
+
+static int
+xdstrategy (devd, flag, dblk, size, buf, rsize)
+       void    *devd;
+       int     flag;
+       daddr_t dblk;
+       size_t  size;
+       void    *buf;
+       size_t  *rsize; 
+{
+       struct AmigaIO *aio = (struct AmigaIO *)devd;
+
+       if (flag != F_READ)
+               return EIO;
+
+       aio->cmd = Cmd_Rd;
+       aio->length = size;
+       aio->offset = aio_base + (dblk << 9);
+       aio->buf = buf;
+
+#ifdef XDDEBUG
+       printf("strategy called: %ld(%ld), %ld, 0x%lx\n",
+           (long)dblk, (long)aio->offset, (long)size, (unsigned long)buf);
+#endif
+
+       DoIO(aio);
+
+#ifdef XDDEBUG
+       printf("strategy got err %ld, rsize %ld\n", aio->err, aio->actual);
+#endif
+
+       if (aio->err) {
+               *rsize = 0;
+               return EIO;
+       }
+
+       *rsize = aio->actual;
+       return 0;
+}
+
+
+/* nothing do do for these: */
+
+static int
+xdopen(f)
+       struct open_file *f;
+{
+       return 0;
+}
+
+static int
+xdclose(f)
+       struct open_file *f;
+{
+       return 0;
+}
+
+static int
+xdioctl (f, cmd, data)
+       struct open_file *f;
+       u_long  cmd;
+       void    *data;
+{
+       return EIO;
+}
diff --git a/sys/arch/amiga/stand/boot/xd.h b/sys/arch/amiga/stand/boot/xd.h
new file mode 100644 (file)
index 0000000..c50a64b
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * $OpenBSD: xd.h,v 1.1 1997/01/16 09:26:45 niklas Exp $
+ * $NetBSD: xd.h,v 1.1.1.1 1996/11/29 23:36:29 is Exp $
+ *
+ * Copyright (c) 1996 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.
+ *
+ */
+
+/*
+ * Prototypes for eXec disks:
+ */
+
+#ifndef _XD_H_
+#define _XD_H_
+
+#include <sys/types.h>
+
+void xdinit (void *);
+int xdstrategy (void *, int, daddr_t, size_t, void *, size_t *);
+
+#endif
index 0107c2e..1c3da88 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: dumpfont.c,v 1.2 1997/01/16 09:26:58 niklas Exp $     */
 /*     $NetBSD: dumpfont.c,v 1.5 1994/10/26 02:06:57 cgd Exp $ */
 
 /*
index 365dbb7..d7d31d3 100644 (file)
@@ -1,3 +1,4 @@
+/*     $OpenBSD: fontdumper.c,v 1.2 1997/01/16 09:26:59 niklas Exp $   */
 /*     $NetBSD: fontdumper.c,v 1.3 1994/10/26 02:06:59 cgd Exp $       */
 
 /*
diff --git a/sys/arch/amiga/stand/loadbsd/Makefile b/sys/arch/amiga/stand/loadbsd/Makefile
new file mode 100644 (file)
index 0000000..2acabbf
--- /dev/null
@@ -0,0 +1,13 @@
+#      $OpenBSD: Makefile,v 1.1 1997/01/16 09:27:00 niklas Exp $
+
+CC = gcc
+CFLAGS = -m68030 -O2 -D__progname=program_name -noixemul
+
+OBJS = loadbsd.o getopt.o
+LIBS = -lamiga
+
+loadbsd: $(OBJS)
+       $(CC) $(CFLAGS) $(LDFLAGS) -o loadbsd $(OBJS) $(LIBS)
+
+clean:
+       delete $(OBJS) loadbsd
diff --git a/sys/arch/amiga/stand/loadbsd/README b/sys/arch/amiga/stand/loadbsd/README
new file mode 100644 (file)
index 0000000..d70a291
--- /dev/null
@@ -0,0 +1,22 @@
+$OpenBSD: README,v 1.1 1997/01/16 09:27:01 niklas Exp $
+
+This was prepared to compile with gcc 2.7.0 for AmigaOS and 
+libnix 1.0. You don't need ixemul or special directories to run the
+binary, if compiled that way.
+
+With very old versions of gcc, you might need to add +2-. to relative
+offsets in the assembler part, but honestly, I suggest you upgrade your
+assembler (and compiler) instead, even if you know what I'm talking about 
+and how to identify the lines.
+
+You'll need the (unchanged) getopt.c from src/lib/libc/stdlib, too.
+
+With newer libnix or the ADE version of gcc, or when removing the
+-noixemul option from CFLAGS, you might need (or want) to delete the 
+sleep() function at the bottom of loadbsd, or getopt.o from the 
+"OBJS =" line of Makefile.
+
+[Sorry, but I didn't dare to risk my gcc installation a few weeks 
+ before the release by trying to install ADE]
+
+       Ignatios Souvatzis
index bd30916..11c9c41 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: loadbsd.c,v 1.9 1997/01/15 23:41:50 millert Exp $     */
-/*     $NetBSD: loadbsd.c,v 1.19.4.2 1996/08/03 00:51:46 jtc Exp $     */
+/*     $OpenBSD: loadbsd.c,v 1.10 1997/01/16 09:27:03 niklas Exp $     */
+/*     $NetBSD: loadbsd.c,v 1.22 1996/10/13 13:39:52 is Exp $  */
 
 /*
  * Copyright (c) 1994 Michael L. Hitch
@@ -409,7 +409,7 @@ main(argc, argv)
                if ((void *)kp < fmem) {
                        printf("Kernel at %08lx, Fastmem used at %08lx\n",
                            kp, fmem);
-                       errx(20, "Can't copy downwards yet.");
+                       errx(20, "Can't copy upwards yet.\nDefragment your memory and try again OR try the -p OR try the -Z options.");
                }
                memcpy(kp + ksize + 256, (char *)startit,
                    (char *)startit_end - (char *)startit);
index a13714f..d08e6e7 100644 (file)
@@ -1,5 +1,5 @@
-# $OpenBSD: Makefile,v 1.2 1996/10/04 22:35:34 niklas Exp $
-# $NetBSD: Makefile,v 1.1.2.2 1996/07/31 16:08:59 jtc Exp $
+# $OpenBSD: Makefile,v 1.3 1997/01/16 09:27:05 niklas Exp $
+# $NetBSD: Makefile,v 1.5 1996/09/27 03:23:13 chopps Exp $
 
 PROG=loadkmap
 NOMAN=loadkmap
index 9114e0b..9fe9570 100644 (file)
@@ -1,18 +1,15 @@
-# $OpenBSD: Makefile.inc,v 1.3 1996/10/04 23:31:23 niklas Exp $
-# $NetBSD: Makefile.inc,v 1.1.2.3 1996/06/25 01:13:36 jtc Exp $
+# $OpenBSD: Makefile.inc,v 1.4 1997/01/16 09:27:06 niklas Exp $
+# $NetBSD: Makefile.inc,v 1.2 1996/06/21 21:55:53 is Exp $
 
-BINDIR=        /usr/share/keymaps/amiga
+BINDIR=        ${DESTDIR}/usr/share/keymaps/amiga
 NOMAN=
 CC=    ${HOSTCC}
 
-all:   ${MAP}
-
-${MAP}: ${PROG}
-       ./${PROG} >${MAP}
-
-realinstall:
-.if !exists(${DESTDIR}${BINDIR})
-       mkdir -p ${DESTDIR}${BINDIR}
+# XXX making dirs should be handled by mtree
+realinstall: ${PROG}
+.if !exists(${BINDIR})
+       mkdir -p ${BINDIR}
 .endif
-       install ${COPY} -o ${BINOWN} -g ${BINGRP} -m 555 ${MAP} \
-           ${DESTDIR}${BINDIR}
+       ./${PROG} > ${BINDIR}/${MAP}
+       chmod 555 ${BINDIR}/${MAP}
+       chown ${BINOWN}.${BINGRP} ${BINDIR}/${MAP}
index 8872b92..f2346dc 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: din-kbdmap.c,v 1.2 1996/10/04 22:35:39 niklas Exp $   */
-/*     $NetBSD: din-kbdmap.c,v 1.4.6.1 1996/06/08 16:03:59 is Exp $    */
+/*     $OpenBSD: din-kbdmap.c,v 1.3 1997/01/16 09:27:07 niklas Exp $   */
+/*     $NetBSD: din-kbdmap.c,v 1.5 1996/06/08 15:28:51 is Exp $        */
 
 #include "../../../dev/kbdmap.h"
 
index 14aabe6..2eaa0f2 100644 (file)
@@ -1,7 +1,8 @@
-# $OpenBSD: Makefile,v 1.2 1996/10/04 22:35:40 niklas Exp $
-# $NetBSD: Makefile,v 1.2.2.1 1996/07/31 16:11:27 jtc Exp $
+# $OpenBSD: Makefile,v 1.3 1997/01/16 09:27:09 niklas Exp $
+# $NetBSD: Makefile,v 1.4 1996/12/31 22:36:19 veego Exp $
 
 PROG=sw-kbdmap
+NOMAN=
 MAP=sw.map
 
 .include <bsd.prog.mk>
index 8ed46de..84da591 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: sw-kbdmap.c,v 1.2 1996/10/04 22:35:40 niklas Exp $    */
-/*     $NetBSD: sw-kbdmap.c,v 1.2.4.1 1996/06/08 16:04:02 is Exp $     */
+/*     $OpenBSD: sw-kbdmap.c,v 1.3 1997/01/16 09:27:11 niklas Exp $    */
+/*     $NetBSD: sw-kbdmap.c,v 1.3 1996/06/08 15:28:58 is Exp $ */
 
 /*
  * Copyright (c) 1993 Markus Wild
index 5c303e5..df74823 100644 (file)
@@ -1,7 +1,8 @@
-# $OpenBSD: Makefile,v 1.2 1996/10/04 22:35:41 niklas Exp $
-# $NetBSD: Makefile,v 1.2 1996/06/08 15:42:03 is Exp $
+# $OpenBSD: Makefile,v 1.3 1997/01/16 09:27:12 niklas Exp $
+# $NetBSD: Makefile,v 1.3 1996/12/31 22:36:20 veego Exp $
 
 PROG=us-kbdmap
+NOMAN=
 MAP=us.map
 
 .include <bsd.prog.mk>
index b2acc38..26c4feb 100644 (file)
@@ -1,5 +1,5 @@
-/*     $OpenBSD: us-kbdmap.c,v 1.2 1996/10/04 22:35:42 niklas Exp $    */
-/*     $NetBSD: us-kbdmap.c,v 1.3.6.1 1996/06/08 16:04:03 is Exp $     */
+/*     $OpenBSD: us-kbdmap.c,v 1.3 1997/01/16 09:27:13 niklas Exp $    */
+/*     $NetBSD: us-kbdmap.c,v 1.4 1996/06/08 15:29:04 is Exp $ */
 
 #include "../../../dev/kbdmap.h"