The pica tree is now obsolete and removed. Use arch/arc.
authorpefo <pefo@openbsd.org>
Fri, 30 Aug 1996 21:31:44 +0000 (21:31 +0000)
committerpefo <pefo@openbsd.org>
Fri, 30 Aug 1996 21:31:44 +0000 (21:31 +0000)
100 files changed:
sys/arch/pica/Makefile [deleted file]
sys/arch/pica/TODO [deleted file]
sys/arch/pica/compile/.cvsignore [deleted file]
sys/arch/pica/compile/.keep_me [deleted file]
sys/arch/pica/conf/GENERIC [deleted file]
sys/arch/pica/conf/Makefile.pica [deleted file]
sys/arch/pica/conf/PICA [deleted file]
sys/arch/pica/conf/files.pica [deleted file]
sys/arch/pica/dev/asc.c [deleted file]
sys/arch/pica/dev/ascreg.h [deleted file]
sys/arch/pica/dev/com.c [deleted file]
sys/arch/pica/dev/dma.c [deleted file]
sys/arch/pica/dev/dma.h [deleted file]
sys/arch/pica/dev/fd.c [deleted file]
sys/arch/pica/dev/fdreg.h [deleted file]
sys/arch/pica/dev/if_sn.c [deleted file]
sys/arch/pica/dev/if_sn.h [deleted file]
sys/arch/pica/dev/isopccons [deleted file]
sys/arch/pica/dev/lpt.c [deleted file]
sys/arch/pica/dev/pccons.c [deleted file]
sys/arch/pica/dev/scsi.h [deleted file]
sys/arch/pica/include/ansi.h [deleted file]
sys/arch/pica/include/asm.h [deleted file]
sys/arch/pica/include/autoconf.h [deleted file]
sys/arch/pica/include/bsd-aout.h [deleted file]
sys/arch/pica/include/bus.h [deleted file]
sys/arch/pica/include/cdefs.h [deleted file]
sys/arch/pica/include/cpu.h [deleted file]
sys/arch/pica/include/disklabel.h [deleted file]
sys/arch/pica/include/display.h [deleted file]
sys/arch/pica/include/ecoff.h [deleted file]
sys/arch/pica/include/elf.h [deleted file]
sys/arch/pica/include/endian.h [deleted file]
sys/arch/pica/include/exec.h [deleted file]
sys/arch/pica/include/float.h [deleted file]
sys/arch/pica/include/ieeefp.h [deleted file]
sys/arch/pica/include/kbdreg.h [deleted file]
sys/arch/pica/include/kcore.h [deleted file]
sys/arch/pica/include/kdbparam.h [deleted file]
sys/arch/pica/include/limits.h [deleted file]
sys/arch/pica/include/mips_opcode.h [deleted file]
sys/arch/pica/include/mouse.h [deleted file]
sys/arch/pica/include/param.h [deleted file]
sys/arch/pica/include/pcb.h [deleted file]
sys/arch/pica/include/pccons.h [deleted file]
sys/arch/pica/include/pio.h [deleted file]
sys/arch/pica/include/pmap.h [deleted file]
sys/arch/pica/include/proc.h [deleted file]
sys/arch/pica/include/profile.h [deleted file]
sys/arch/pica/include/psl.h [deleted file]
sys/arch/pica/include/pte.h [deleted file]
sys/arch/pica/include/ptrace.h [deleted file]
sys/arch/pica/include/reg.h [deleted file]
sys/arch/pica/include/regdef.h [deleted file]
sys/arch/pica/include/regnum.h [deleted file]
sys/arch/pica/include/reloc.h [deleted file]
sys/arch/pica/include/setjmp.h [deleted file]
sys/arch/pica/include/signal.h [deleted file]
sys/arch/pica/include/stdarg.h [deleted file]
sys/arch/pica/include/trap.h [deleted file]
sys/arch/pica/include/types.h [deleted file]
sys/arch/pica/include/varargs.h [deleted file]
sys/arch/pica/include/vmparam.h [deleted file]
sys/arch/pica/isa/isa.c [deleted file]
sys/arch/pica/isa/isa_machdep.h [deleted file]
sys/arch/pica/isa/spkrreg.h [deleted file]
sys/arch/pica/isa/timerreg.h [deleted file]
sys/arch/pica/pica/autoconf.c [deleted file]
sys/arch/pica/pica/clock.c [deleted file]
sys/arch/pica/pica/clock_mc.c [deleted file]
sys/arch/pica/pica/clockvar.h [deleted file]
sys/arch/pica/pica/cpu.c [deleted file]
sys/arch/pica/pica/cpu_exec.c [deleted file]
sys/arch/pica/pica/disksubr.c [deleted file]
sys/arch/pica/pica/fp.S [deleted file]
sys/arch/pica/pica/genassym.c [deleted file]
sys/arch/pica/pica/locore.S [deleted file]
sys/arch/pica/pica/machdep.c [deleted file]
sys/arch/pica/pica/mainbus.c [deleted file]
sys/arch/pica/pica/mem.c [deleted file]
sys/arch/pica/pica/minidebug.c [deleted file]
sys/arch/pica/pica/pica.c [deleted file]
sys/arch/pica/pica/pica.h [deleted file]
sys/arch/pica/pica/picatype.h [deleted file]
sys/arch/pica/pica/pmap.c [deleted file]
sys/arch/pica/pica/process_machdep.c [deleted file]
sys/arch/pica/pica/swapgeneric.c [deleted file]
sys/arch/pica/pica/sys_machdep.c [deleted file]
sys/arch/pica/pica/trap.c [deleted file]
sys/arch/pica/pica/vm_machdep.c [deleted file]
sys/arch/pica/stand/Makefile [deleted file]
sys/arch/pica/stand/boot.c [deleted file]
sys/arch/pica/stand/conf.c [deleted file]
sys/arch/pica/stand/filesystem.c [deleted file]
sys/arch/pica/stand/libsa/Makefile [deleted file]
sys/arch/pica/stand/libsa/devopen.c [deleted file]
sys/arch/pica/stand/libsa/getenv.c [deleted file]
sys/arch/pica/stand/libsa/getputchar.c [deleted file]
sys/arch/pica/stand/rz.c [deleted file]
sys/arch/pica/stand/start.S [deleted file]

diff --git a/sys/arch/pica/Makefile b/sys/arch/pica/Makefile
deleted file mode 100644 (file)
index 1eb83a2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#      from: @(#)Makefile      8.1 (Berkeley) 6/16/93
-#      $Id: Makefile,v 1.2 1996/05/15 07:09:06 pefo Exp $
-
-# Makefile for pica links, tags file
-
-.include "../../kern/Make.tags.inc"
-
-all:
-       @echo "make links or tags only"
-
-DIRS=  conf dev dist include pica
-
-links::
-       -for i in ${DIRS}; do \
-           (cd $$i && { rm -f tags; ln -s ${SYSTAGS} tags; }) done
-
-PICA=  /sys/pica/dev/*.[ch] /sys/pica/include/*.[ch] \
-       /sys/pica/pica/*.[ch] /sys/pica/ultrix/*.[ch]
-APICA= /sys/pica/pica/*.s
-
-tags::
-       -ctags -wdtif ${COMM} ${PICA}
-       egrep "^LEAF(.*)|^[AN]LEAF(.*)|^NON_LEAF(.*)" ${APICA} | \
-           sed "s;\([^:]*\):\([^(]*\)(\([^, )]*\)\(.*\);\3 \1 /^\2(\3\4$$/;" \
-               >> tags
-       sort -o tags tags
-
-.include <bsd.prog.mk>
diff --git a/sys/arch/pica/TODO b/sys/arch/pica/TODO
deleted file mode 100644 (file)
index e6d2936..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-To do list (not in any particular order).
-
-    o  Improve pmap_zero_page and pmap_copy_page. Speed and flushing.
-
-    o  Move the RO and WIRED attribute from the pte to the pv table.
-       This saves four instructions in the tlb miss handler.
-InWork: Have a test version. The system hangs after a while. Not solved yet.
-        Also, is it worth the effort to remove 4 instr. in TLB-miss handler?
-
-    o  Update MAKEDEV to create all devices correctly.
-
-    o   Boot. Standalone boot program instead of booting the kernel directly?
-
-    o   Create boot package for distribution.
-
-    o   sigsetjmp/siglongjmp missing....
-
-    o   Add more videomodes to pccons driver. 50kHz and 64kHz monitors?
-InWork: This seems to be hard. Need more info on the chip.
-
-    o   Find out why bitmap load to S3-928 flashes screen.
-Know why (enable linear mode). Need S3 info.
-
-    o   Would be nice to have Motif...
-
-    o   ELF shared libraries......
-
-    o   GDB. The current one does not work correctly with current toolchain.
-
-    o   ISA driver. ISA dma, interrupt etc.
-
-    o   Can we have 32 double registers?
-
-
-Lots of other things.....
diff --git a/sys/arch/pica/compile/.cvsignore b/sys/arch/pica/compile/.cvsignore
deleted file mode 100644 (file)
index db5b0e0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-GENERIC
diff --git a/sys/arch/pica/compile/.keep_me b/sys/arch/pica/compile/.keep_me
deleted file mode 100644 (file)
index 7527019..0000000
+++ /dev/null
@@ -1 +0,0 @@
-This file must remain so that 'cvs checkout' makes the compile directory.
diff --git a/sys/arch/pica/conf/GENERIC b/sys/arch/pica/conf/GENERIC
deleted file mode 100644 (file)
index 5bde11c..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-#      Generic configuration file for MIPS R4400 PICA system
-#
-
-machine                pica
-
-maxusers       8
-
-# does not really do anything anymore, but this replaces "ident GENERIC"
-options                GENERIC
-
-# Need to set locally
-options                TIMEZONE="8*60"         # minutes west of GMT (for)
-options                DST=1                   # use daylight savings rules
-
-# Standard system options
-options                SWAPPAGER               # swap pager (anonymous and swap space)
-options                VNODEPAGER              # vnode pager (mapped files)
-options                DEVPAGER                # device pager (mapped devices)
-options                DIAGNOSTIC              # extra kernel debugging checks
-options                DEBUG                   # extra kernel debugging support
-options                "COMPAT_43"             # compatibility with 4.3BSD binaries
-#options       KTRACE                  # system call tracing support
-options                "NKMEMCLUSTERS=1024"    # 4K pages in kernel malloc pool
-#options       KGDB                    # support for kernel gdb
-#options       "KGDBRATE=19200"        # kernel gdb port rate (default 9600)
-#options       "KGDBDEV=15*256+0"      # device for kernel gdb
-
-# System V options
-options                SYSVMSG         # System V-like message queues
-options                SYSVSEM         # System V-like semaphores
-options                SYSVSHM         # System V-like memory sharing
-options                SHMMAXPGS=1024  # 1024 pages is the default
-options                NATIVE_ELF
-
-# Filesystem options
-options                FIFO            # POSIX fifo support (in all filesystems)
-options                FFS,QUOTA       # fast filesystem with user and group quotas
-options                MFS             # memory-based filesystem
-options                NFSCLIENT       # Sun NFS-compatible filesystem (client)
-options                NFSSERVER       # Sun NFS-compatible filesystem (server)
-options                KERNFS          # kernel data-structure filesystem
-options                MSDOSFS         # Ability to read write MS-Dos filsystem
-options                CD9660          # ISO 9660 + Rock Ridge file system
-options                FDESC           # user file descriptor filesystem
-#options       UMAPFS          # uid/gid remapping filesystem
-#options       NULLFS          # null layer filesystem
-#options       LFS             # Log-based filesystem (still experimental)
-#options       PORTAL          # portal filesystem (still experimental)
-
-# Networking options
-options                INET            # Internet protocols
-options                "TCP_COMPAT_42" # compatibility with 4.2BSD TCP/IP
-options                GATEWAY         # IP packet forwarding
-#options       MULTICAST       # Multicast support
-#options       MROUTING        # Multicast routing support
-#options       ISO             # OSI networking
-#options       TPIP
-#options       EON
-
-config         bsd swap generic
-
-mainbus0       at root
-cpu*           at mainbus0
-
-pica*          at mainbus0
-clock0         at pica?
-pc0            at pica?
-pms0           at pica?
-com0           at pica?
-com1           at pica?
-lpt0           at pica?
-sn0            at pica?
-
-fdc0           at pica?
-fd*            at fdc? drive ?
-
-asc0           at pica?
-scsibus*       at asc?
-
-sd*            at scsibus? target ? lun ?
-st*            at scsibus? target ? lun ?
-cd*            at scsibus? target ? lun ?
-ch*            at scsibus? target ? lun ?
-ss*            at scsibus? target ? lun ?
-uk*            at scsibus? target ? lun ?
-
-pseudo-device  sl               2      # serial-line IP ports
-pseudo-device  ppp              2      # serial-line PPP ports
-pseudo-device  pty             64      # pseudo ptys
-pseudo-device  bpfilter        16      # packet filter ports
-pseudo-device  loop
-pseudo-device  vnd             4       # virtual disk
diff --git a/sys/arch/pica/conf/Makefile.pica b/sys/arch/pica/conf/Makefile.pica
deleted file mode 100644 (file)
index fefb086..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-#      $NetBSD: Makefile.pica,v 1.15 1995/06/24 20:46:54 christos Exp $
-
-#      @(#)Makefile.pica       8.2 (Berkeley) 2/16/94
-#
-# Makefile for 4.4 BSD
-#
-# This makefile is constructed from a machine description:
-#      config machineid
-# Most changes should be made in the machine description
-#      /sys/arch/MACHINE/conf/``machineid''
-# after which you should do
-#       config machineid
-# Machine generic makefile changes should be made in
-#      /sys/arch/MACHINE/conf/Makefile.``machinetype''
-# after which config should be rerun for all machines of that type.
-#
-# N.B.: NO DEPENDENCIES ON FOLLOWING FLAGS ARE VISIBLE TO MAKEFILE
-#      IF YOU CHANGE THE DEFINITION OF ANY OF THESE RECOMPILE EVERYTHING
-#
-# -DTRACE      compile in kernel tracing hooks
-# -DQUOTA      compile in file system quotas
-
-
-# DEBUG is set to -g by config if debugging is requested (config -g).
-# PROF is set to -pg by config if profiling is requested (config -p).
-AS?=   as
-CC?=   cc
-CPP?=  cpp
-LD=    ld.ok                   # XXX TEMPORARY
-STRIP?=        strip -d
-TOUCH?=        touch -f -c
-
-# source tree is located via $S relative to the compilation directory
-S=     ../../../..
-PICA=  ../..
-
-INCLUDES=      -I. -I$S/arch -I$S
-CPPFLAGS=      ${INCLUDES} ${IDENT} -D_KERNEL -Dpica
-CFLAGS=                ${DEBUG} -O2 -Werror -mno-abicalls -mips2 -mcpu=r4000
-AFLAGS=                -x assembler-with-cpp -traditional-cpp -D_LOCORE
-
-### find out what to use for libkern
-.include "$S/lib/libkern/Makefile.inc"
-.ifndef PROF
-LIBKERN=       ${KERNLIB}
-.else
-LIBKERN=       ${KERNLIB_PROF}
-.endif
-
-### find out what to use for libcompat
-.include "$S/compat/common/Makefile.inc"
-.ifndef PROF
-LIBCOMPAT=     ${COMPATLIB}
-.else
-LIBCOMPAT=     ${COMPATLIB_PROF}
-.endif
-
-# 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.
-
-USRLAND_C=     ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
-USRLAND_C_C=   ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
-
-NORMAL_C=      ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
-NORMAL_C_C=    ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
-
-DRIVER_C=      ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $<
-DRIVER_C_C=    ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $<
-
-NORMAL_S=      ${CC} ${AFLAGS} ${CPPFLAGS} -c $<
-NORMAL_S_C=    ${AS}  ${COPTS} ${PARAM} $< -o $@
-
-%OBJS
-
-%CFILES
-
-%SFILES
-
-# load lines for config "xxx" will be emitted as:
-# xxx: ${SYSTEM_DEP} swapxxx.o
-#      ${SYSTEM_LD_HEAD}
-#      ${SYSTEM_LD} swapxxx.o
-#      ${SYSTEM_LD_TAIL}
-
-SYSTEM_OBJ=    locore.o fp.o ${OBJS} param.o ioconf.o ${LIBKERN} \
-               ${LIBCOMPAT}
-#
-SYSTEM_DEP=    Makefile ${SYSTEM_OBJ}
-SYSTEM_LD_HEAD=        rm -f $@
-SYSTEM_LD=     -@if [ X${DEBUG} = X-g ]; \
-               then strip=-X; \
-               else strip=-x; \
-               fi; \
-               echo ${LD} $$strip -N -o $@ -e start -Ttext 80080000 \
-                       '$${SYSTEM_OBJ}' vers.o; \
-               ${LD} $$strip -N -o $@ -e start -Ttext 80080000 \
-                       ${SYSTEM_OBJ} vers.o
-#
-SYSTEM_LD_TAIL=        chmod 755 $@; \
-               elf2ecoff $@ $@.ecoff; \
-               size $@
-
-%LOAD
-
-newvers:
-       sh $S/conf/newvers.sh
-       ${CC} $(CFLAGS) -c vers.c
-
-clean::
-       rm -f eddep bsd bsd.gdb tags *.o locore.i [a-z]*.s \
-           Errs errs linterrs makelinks genassym
-
-lint: /tmp param.c
-       @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} -UKGDB \
-           ${PICA}/pica/Locore.c ${CFILES} ${PICA}/pica/swapgeneric.c \
-           ioconf.c param.c
-
-symbols.sort: ${PICA}/pica/symbols.raw
-       grep -v '^#' ${PICA}/pica/symbols.raw \
-           | sed 's/^  //' | sort -u > symbols.sort
-
-locore.o: ${PICA}/pica/locore.S ${PICA}/include/asm.h \
-       ${PICA}/include/cpu.h ${PICA}/include/reg.h assym.h
-       ${NORMAL_S} -mips3 ${PICA}/pica/locore.S
-
-fp.o: ${PICA}/pica/fp.S ${PICA}/include/asm.h \
-       ${PICA}/include/cpu.h ${PICA}/include/reg.h assym.h
-       ${NORMAL_S} -mips3 ${PICA}/pica/fp.S
-
-# the following are necessary because the files depend on the types of
-# cpu's included in the system configuration
-clock.o machdep.o autoconf.o conf.o: Makefile
-
-# depend on network configuration
-uipc_domain.o uipc_proto.o vfs_conf.o: Makefile
-if_tun.o if_loop.o if_ethersubr.o: Makefile
-in_proto.o: Makefile
-
-assym.h: genassym
-       ./genassym >assym.h
-
-genassym: genassym.o
-       ${CC} -o $@ genassym.o
-
-genassym.o: ${PICA}/pica/genassym.c
-       ${CC} ${INCLUDES} ${IDENT} -D_KERNEL -Dpica -c $<
-
-links:
-       egrep '#if' ${CFILES} | sed -f $S/conf/defines | \
-         sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
-       echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
-         sort -u | comm -23 - dontlink | \
-         sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
-       sh makelinks && rm -f dontlink
-
-tags:
-       @echo "see $S/kern/Makefile for tags"
-
-ioconf.o: ioconf.c
-       ${NORMAL_C}
-
-param.c: $S/conf/param.c
-       rm -f param.c
-       cp $S/conf/param.c .
-
-param.o: param.c Makefile
-       ${NORMAL_C_C}
-
-newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
-       sh $S/conf/newvers.sh
-       ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
-
-depend:: .depend
-.depend: ${SRCS} assym.h param.c
-       mkdep ${AFLAGS} ${CPPFLAGS} ${PICA}/pica/locore.s
-       mkdep -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES}
-       mkdep -a ${AFLAGS} ${CPPFLAGS} ${SFILES}
-       mkdep -a ${CFLAGS} ${CPPFLAGS} ${PARAM} ${PICA}/pica/genassym.c
-
-%RULES
-
diff --git a/sys/arch/pica/conf/PICA b/sys/arch/pica/conf/PICA
deleted file mode 100644 (file)
index 8c6340d..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-#
-#
-machine                pica
-
-maxusers       8
-
-# Need to set locally
-options                TIMEZONE="8*60"         # minutes west of GMT (for)
-options                DST=1                   # use daylight savings rules
-
-# Standard system options
-options                SWAPPAGER               # swap pager (anonymous and swap space)
-options                VNODEPAGER              # vnode pager (mapped files)
-options                DEVPAGER                # device pager (mapped devices)
-options                DIAGNOSTIC              # extra kernel debugging checks
-options                DEBUG                   # extra kernel debugging support
-options                "COMPAT_43"             # compatibility with 4.3BSD binaries
-#options       KTRACE                  # system call tracing support
-options                "NKMEMCLUSTERS=1024"    # 4K pages in kernel malloc pool
-#options       KGDB                    # support for kernel gdb
-#options       "KGDBRATE=19200"        # kernel gdb port rate (default 9600)
-#options       "KGDBDEV=15*256+0"      # device for kernel gdb
-
-# System V options
-options                SYSVMSG         # System V-like message queues
-options                SYSVSEM         # System V-like semaphores
-options                SYSVSHM         # System V-like memory sharing
-options                SHMMAXPGS=1024  # 1024 pages is the default
-
-# Filesystem options
-options                FIFO            # POSIX fifo support (in all filesystems)
-options                FFS,QUOTA       # fast filesystem with user and group quotas
-options                MFS             # memory-based filesystem
-options                NFSCLIENT       # Sun NFS-compatible filesystem (client)
-options                NFSSERVER       # Sun NFS-compatible filesystem (server)
-options                KERNFS          # kernel data-structure filesystem
-options                MSDOSFS         # Ability to read write MS-Dos filsystem
-options                CD9660          # ISO 9660 + Rock Ridge file system
-options                FDESC           # user file descriptor filesystem
-#options       UMAPFS          # uid/gid remapping filesystem
-#options       NULLFS          # null layer filesystem
-#options       LFS             # Log-based filesystem (still experimental)
-#options       PORTAL          # portal filesystem (still experimental)
-
-# Networking options
-options                INET            # Internet protocols
-options                "TCP_COMPAT_42" # compatibility with 4.2BSD TCP/IP
-options                GATEWAY         # IP packet forwarding
-#options       MULTICAST       # Multicast support
-#options       MROUTING        # Multicast routing support
-#options       ISO             # OSI networking
-#options       TPIP
-#options       EON
-
-config         bsd     root on sd0 swap on sd0 and sd1
-#options       GENERIC
-
-
-mainbus0       at root
-cpu*           at mainbus0
-
-pica*          at mainbus0
-clock0         at pica?
-pc0            at pica?
-pms0           at pica?
-com0           at pica?
-com1           at pica?
-lpt0           at pica?
-sn0            at pica?
-
-fdc0           at pica?
-fd*            at fdc? drive ?
-
-asc0           at pica?
-scsibus*       at asc?
-
-sd*            at scsibus? target ? lun ?
-st*            at scsibus? target ? lun ?
-cd*            at scsibus? target ? lun ?
-
-
-pseudo-device  loop             1      # network loopback
-pseudo-device  sl               2      # serial-line IP ports
-pseudo-device  ppp              2      # serial-line PPP ports
-pseudo-device  tun              2      # network tunneling over tty
-pseudo-device  pty             64      # pseudo ptys
-pseudo-device  bpfilter        16      # packet filter ports
-pseudo-device  vnd              4      # virtual disk
diff --git a/sys/arch/pica/conf/files.pica b/sys/arch/pica/conf/files.pica
deleted file mode 100644 (file)
index 863f030..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#      $OpenBSD: files.pica,v 1.5 1996/06/06 23:06:17 deraadt Exp $
-#      $NetBSD: files.pica,v 1.16 1995/04/30 10:11:00 cgd Exp $
-#
-# maxpartitions must be first item in files.${ARCH}
-#
-maxpartitions 8
-
-maxusers 2 8 64
-
-#      Required files
-
-file   arch/pica/isa/isa.c
-
-file   arch/pica/pica/autoconf.c
-file   arch/pica/pica/conf.c
-file   arch/pica/pica/cpu_exec.c
-file   arch/pica/pica/disksubr.c
-file   arch/pica/dev/dma.c
-file   arch/pica/pica/machdep.c
-file   arch/pica/pica/mainbus.c
-file   arch/pica/pica/minidebug.c
-file   arch/pica/pica/mem.c
-file   arch/pica/pica/pmap.c
-file   arch/pica/pica/process_machdep.c
-file   arch/pica/pica/sys_machdep.c
-file   arch/pica/pica/trap.c
-file   arch/pica/pica/vm_machdep.c
-
-#
-# System bus types
-#
-
-device mainbus {}
-attach mainbus at root
-
-#      Our CPU configurator
-device cpu
-attach cpu at mainbus                  # not optional
-file arch/pica/pica/cpu.c              cpu
-
-#
-#      PICA bus autoconfiguration devices
-#
-device pica {}
-attach pica at mainbus                 # { slot = -1, offset = -1 }
-file   arch/pica/pica/pica.c           pica    needs-flag
-
-#      Real time clock, must have one..
-device clock
-attach clock at pica
-file   arch/pica/pica/clock.c          clock
-file   arch/pica/pica/clock_mc.c       clock
-
-#      Ethernet chip
-device sn
-attach sn at pica: ifnet, ether
-file   arch/pica/dev/if_sn.c           sn      needs-count
-
-#      Use machine independent SCSI driver routines
-include        "../../../scsi/files.scsi"
-major  {sd = 0}
-major  {cd = 3}
-
-#      Machine dependent SCSI interface driver
-device asc: scsi
-attach asc at pica
-file   arch/pica/dev/asc.c             asc     needs-count
-
-#      NS16450/16550 Serial line driver
-device com
-attach com at pica
-file   arch/pica/dev/com.c             com     needs-count
-
-#      Paralell printer port driver
-device lpt
-attach lpt at pica
-file   arch/pica/dev/lpt.c             lpt     needs-count
-
-#      Console driver on PC-style graphics
-device pc: tty
-attach pc at pica
-device pms: tty
-attach pms at pica
-file   arch/pica/dev/pccons.c          pc      needs-count
-
-
-# Floppy disk controller
-device fdc {drive = -1}
-attach fdc at pica
-device fd: disk
-attach fd at fdc
-file   arch/pica/dev/fd.c              fdc     needs-flag
-major  {fd = 7}
-
-#
-# This is a dummy - don't try to use it:
-
-
-file   dev/cons.c
-file   dev/cninit.c
-file   netinet/in_cksum.c
-file   netns/ns_cksum.c                        ns
-
-file   compat/ultrix/ultrix_misc.c             compat_ultrix
-file   compat/ultrix/ultrix_syscalls.c         compat_ultrix
-file   compat/ultrix/ultrix_sysent.c           compat_ultrix
-
diff --git a/sys/arch/pica/dev/asc.c b/sys/arch/pica/dev/asc.c
deleted file mode 100644 (file)
index a5d106c..0000000
+++ /dev/null
@@ -1,2073 +0,0 @@
-/*     $NetBSD: asc.c,v 1.10 1994/12/05 19:11:12 dean Exp $    */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell and Rick Macklem.
- *
- * 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.
- *
- *     @(#)asc.c       8.3 (Berkeley) 7/3/94
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-/*
- * HISTORY
- * Log:        scsi_53C94_hdw.c,v
- * Revision 2.5  91/02/05  17:45:07  mrt
- *     Added author notices
- *     [91/02/04  11:18:43  mrt]
- * 
- *     Changed to use new Mach copyright
- *     [91/02/02  12:17:20  mrt]
- * 
- * Revision 2.4  91/01/08  15:48:24  rpd
- *     Added continuation argument to thread_block.
- *     [90/12/27            rpd]
- * 
- * Revision 2.3  90/12/05  23:34:48  af
- *     Recovered from pmax merge.. and from the destruction of a disk.
- *     [90/12/03  23:40:40  af]
- * 
- * Revision 2.1.1.1  90/11/01  03:39:09  af
- *     Created, from the DEC specs:
- *     "PMAZ-AA TURBOchannel SCSI Module Functional Specification"
- *     Workstation Systems Engineering, Palo Alto, CA. Aug 27, 1990.
- *     And from the NCR data sheets
- *     "NCR 53C94, 53C95, 53C96 Advances SCSI Controller"
- *     [90/09/03            af]
- */
-
-/*
- *     File: scsi_53C94_hdw.h
- *     Author: Alessandro Forin, Carnegie Mellon University
- *     Date:   9/90
- *
- *     Bottom layer of the SCSI driver: chip-dependent functions
- *
- *     This file contains the code that is specific to the NCR 53C94
- *     SCSI chip (Host Bus Adapter in SCSI parlance): probing, start
- *     operation, and interrupt routine.
- */
-
-/*
- * This layer works based on small simple 'scripts' that are installed
- * at the start of the command and drive the chip to completion.
- * The idea comes from the specs of the NCR 53C700 'script' processor.
- *
- * There are various reasons for this, mainly
- * - Performance: identify the common (successful) path, and follow it;
- *   at interrupt time no code is needed to find the current status
- * - Code size: it should be easy to compact common operations
- * - Adaptability: the code skeleton should adapt to different chips without
- *   terrible complications.
- * - Error handling: and it is easy to modify the actions performed
- *   by the scripts to cope with strange but well identified sequences
- *
- */
-
-#include <asc.h>
-#if NASC > 0
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/dkstat.h>
-#include <sys/buf.h>
-#include <sys/proc.h>
-#include <sys/conf.h>
-#include <sys/errno.h>
-#include <sys/device.h>
-
-#include <scsi/scsi_all.h>
-#include <scsi/scsiconf.h>
-
-#include <machine/cpu.h>
-#include <machine/autoconf.h>
-
-#include <pica/dev/dma.h>
-#include <pica/dev/scsi.h>
-#include <pica/dev/ascreg.h>
-
-#include <pica/pica/pica.h>
-#include <pica/pica/picatype.h>
-
-
-#define        readback(a)     { register int foo; foo = (a); }
-extern int cputype;
-
-/*
- * In 4ns ticks.
- */
-int    asc_to_scsi_period[] = {
-       32,
-       33,
-       34,
-       35,
-       5,
-       5,
-       6,
-       7,
-       8,
-       9,
-       10,
-       11,
-       12,
-       13,
-       14,
-       15,
-       16,
-       17,
-       18,
-       19,
-       20,
-       21,
-       22,
-       23,
-       24,
-       25,
-       26,
-       27,
-       28,
-       29,
-       30,
-       31,
-};
-
-/*
- * Internal forward declarations.
- */
-static void asc_reset();
-static void asc_startcmd();
-
-#ifdef DEBUG
-int    asc_debug = 1;
-int    asc_debug_cmd;
-int    asc_debug_bn;
-int    asc_debug_sz;
-#define NLOG 16
-struct asc_log {
-       u_int   status;
-       u_char  state;
-       u_char  msg;
-       int     target;
-       int     resid;
-} asc_log[NLOG], *asc_logp = asc_log;
-#define PACK(unit, status, ss, ir) \
-       ((unit << 24) | (status << 16) | (ss << 8) | ir)
-#endif
-
-/*
- * Scripts are entries in a state machine table.
- * A script has four parts: a pre-condition, an action, a command to the chip,
- * and an index into asc_scripts for the next state. The first triggers error
- * handling if not satisfied and in our case it is formed by the
- * values of the interrupt register and status register, this
- * basically captures the phase of the bus and the TC and BS
- * bits.  The action part is just a function pointer, and the
- * command is what the 53C94 should be told to do at the end
- * of the action processing.  This command is only issued and the
- * script proceeds if the action routine returns TRUE.
- * See asc_intr() for how and where this is all done.
- */
-typedef struct script {
-       int             condition;      /* expected state at interrupt time */
-       int             (*action)();    /* extra operations */
-       int             command;        /* command to the chip */
-       struct script   *next;          /* index into asc_scripts for next state */
-} script_t;
-
-/* Matching on the condition value */
-#define        SCRIPT_MATCH(ir, csr)           ((ir) | (((csr) & 0x67) << 8))
-
-/* forward decls of script actions */
-static int script_nop();               /* when nothing needed */
-static int asc_end();                  /* all come to an end */
-static int asc_get_status();           /* get status from target */
-static int asc_dma_in();               /* start reading data from target */
-static int asc_last_dma_in();          /* cleanup after all data is read */
-static int asc_resume_in();            /* resume data in after a message */
-static int asc_resume_dma_in();                /* resume DMA after a disconnect */
-static int asc_dma_out();              /* send data to target via dma */
-static int asc_last_dma_out();         /* cleanup after all data is written */
-static int asc_resume_out();           /* resume data out after a message */
-static int asc_resume_dma_out();       /* resume DMA after a disconnect */
-static int asc_sendsync();             /* negotiate sync xfer */
-static int asc_replysync();            /* negotiate sync xfer */
-static int asc_msg_in();               /* process a message byte */
-static int asc_disconnect();           /* process an expected disconnect */
-
-/* Define the index into asc_scripts for various state transitions */
-#define        SCRIPT_DATA_IN          0
-#define        SCRIPT_CONTINUE_IN      2
-#define        SCRIPT_DATA_OUT         3
-#define        SCRIPT_CONTINUE_OUT     5
-#define        SCRIPT_SIMPLE           6
-#define        SCRIPT_GET_STATUS       7
-#define        SCRIPT_DONE             8
-#define        SCRIPT_MSG_IN           9
-#define        SCRIPT_REPLY_SYNC       11
-#define        SCRIPT_TRY_SYNC         12
-#define        SCRIPT_DISCONNECT       15
-#define        SCRIPT_RESEL            16
-#define        SCRIPT_RESUME_IN        17
-#define        SCRIPT_RESUME_DMA_IN    18
-#define        SCRIPT_RESUME_OUT       19
-#define        SCRIPT_RESUME_DMA_OUT   20
-#define        SCRIPT_RESUME_NO_DATA   21
-
-/*
- * Scripts
- */
-script_t asc_scripts[] = {
-       /* start data in */
-       {SCRIPT_MATCH(ASC_INT_FC | ASC_INT_BS, ASC_PHASE_DATAI),        /*  0 */
-               asc_dma_in, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_IN + 1]},
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_STATUS),                    /*  1 */
-               asc_last_dma_in, ASC_CMD_I_COMPLETE,
-               &asc_scripts[SCRIPT_GET_STATUS]},
-
-       /* continue data in after a chunk is finished */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAI),                     /*  2 */
-               asc_dma_in, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_IN + 1]},
-
-       /* start data out */
-       {SCRIPT_MATCH(ASC_INT_FC | ASC_INT_BS, ASC_PHASE_DATAO),        /*  3 */
-               asc_dma_out, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_OUT + 1]},
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_STATUS),                    /*  4 */
-               asc_last_dma_out, ASC_CMD_I_COMPLETE,
-               &asc_scripts[SCRIPT_GET_STATUS]},
-
-       /* continue data out after a chunk is finished */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAO),                     /*  5 */
-               asc_dma_out, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_OUT + 1]},
-
-       /* simple command with no data transfer */
-       {SCRIPT_MATCH(ASC_INT_FC | ASC_INT_BS, ASC_PHASE_STATUS),       /*  6 */
-               script_nop, ASC_CMD_I_COMPLETE,
-               &asc_scripts[SCRIPT_GET_STATUS]},
-
-       /* get status and finish command */
-       {SCRIPT_MATCH(ASC_INT_FC, ASC_PHASE_MSG_IN),                    /*  7 */
-               asc_get_status, ASC_CMD_MSG_ACPT,
-               &asc_scripts[SCRIPT_DONE]},
-       {SCRIPT_MATCH(ASC_INT_DISC, 0),                                 /*  8 */
-               asc_end, ASC_CMD_NOP,
-               &asc_scripts[SCRIPT_DONE]},
-
-       /* message in */
-       {SCRIPT_MATCH(ASC_INT_FC, ASC_PHASE_MSG_IN),                    /*  9 */
-               asc_msg_in, ASC_CMD_MSG_ACPT,
-               &asc_scripts[SCRIPT_MSG_IN + 1]},
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_MSG_IN),                    /* 10 */
-               script_nop, ASC_CMD_XFER_INFO,
-               &asc_scripts[SCRIPT_MSG_IN]},
-
-       /* send synchonous negotiation reply */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_MSG_OUT),                   /* 11 */
-               asc_replysync, ASC_CMD_XFER_INFO,
-               &asc_scripts[SCRIPT_REPLY_SYNC]},
-
-       /* try to negotiate synchonous transfer parameters */
-       {SCRIPT_MATCH(ASC_INT_FC | ASC_INT_BS, ASC_PHASE_MSG_OUT),      /* 12 */
-               asc_sendsync, ASC_CMD_XFER_INFO,
-               &asc_scripts[SCRIPT_TRY_SYNC + 1]},
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_MSG_IN),                    /* 13 */
-               script_nop, ASC_CMD_XFER_INFO,
-               &asc_scripts[SCRIPT_MSG_IN]},
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_COMMAND),                   /* 14 */
-               script_nop, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_RESUME_NO_DATA]},
-
-       /* handle a disconnect */
-       {SCRIPT_MATCH(ASC_INT_DISC, ASC_PHASE_DATAO),                   /* 15 */
-               asc_disconnect, ASC_CMD_ENABLE_SEL,
-               &asc_scripts[SCRIPT_RESEL]},
-
-       /* reselect sequence: this is just a placeholder so match fails */
-       {SCRIPT_MATCH(0, ASC_PHASE_MSG_IN),                             /* 16 */
-               script_nop, ASC_CMD_MSG_ACPT,
-               &asc_scripts[SCRIPT_RESEL]},
-
-       /* resume data in after a message */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAI),                     /* 17 */
-               asc_resume_in, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_IN + 1]},
-
-       /* resume partial DMA data in after a message */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAI),                     /* 18 */
-               asc_resume_dma_in, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_IN + 1]},
-
-       /* resume data out after a message */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAO),                     /* 19 */
-               asc_resume_out, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_OUT + 1]},
-
-       /* resume partial DMA data out after a message */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_DATAO),                     /* 20 */
-               asc_resume_dma_out, ASC_CMD_XFER_INFO | ASC_CMD_DMA,
-               &asc_scripts[SCRIPT_DATA_OUT + 1]},
-
-       /* resume after a message when there is no more data */
-       {SCRIPT_MATCH(ASC_INT_BS, ASC_PHASE_STATUS),                    /* 21 */
-               script_nop, ASC_CMD_I_COMPLETE,
-               &asc_scripts[SCRIPT_GET_STATUS]},
-};
-
-/*
- * State kept for each active SCSI device.
- */
-typedef struct scsi_state {
-       script_t *script;       /* saved script while processing error */
-       struct scsi_generic cmd;/* storage for scsi command */
-       int     statusByte;     /* status byte returned during STATUS_PHASE */
-       u_int   dmaBufSize;     /* DMA buffer size */
-       int     dmalen;         /* amount to transfer in this chunk */
-       int     dmaresid;       /* amount not transfered if chunk suspended */
-       int     cmdlen;         /* length of command in cmd */
-       int     buflen;         /* total remaining amount of data to transfer */
-       vm_offset_t buf;        /* current pointer within scsicmd->buf */
-       int     flags;          /* see below */
-       int     msglen;         /* number of message bytes to read */
-       int     msgcnt;         /* number of message bytes received */
-       u_char  sync_period;    /* DMA synchronous period */
-       u_char  sync_offset;    /* DMA synchronous xfer offset or 0 if async */
-       u_char  msg_out;        /* next MSG_OUT byte to send */
-       u_char  msg_in[16];     /* buffer for multibyte messages */
-} State;
-
-/* state flags */
-#define DISCONN                0x001   /* true if currently disconnected from bus */
-#define DMA_IN_PROGRESS        0x002   /* true if data DMA started */
-#define DMA_IN         0x004   /* true if reading from SCSI device */
-#define DMA_OUT                0x010   /* true if writing to SCSI device */
-#define DID_SYNC       0x020   /* true if synchronous offset was negotiated */
-#define TRY_SYNC       0x040   /* true if try neg. synchronous offset */
-#define PARITY_ERR     0x080   /* true if parity error seen */
-#define        CHECK_SENSE     0x100   /* true if doing sense command */
-
-/*
- * State kept for each active SCSI host interface (53C94).
- */
-struct asc_softc {
-       struct device   sc_dev;         /* use as a device */
-       asc_regmap_t    *regs;          /* chip address */
-       dma_softc_t     __dma;          /* stupid macro..... */
-       dma_softc_t     *dma;           /* dma control structure */
-       int             sc_id;          /* SCSI ID of this interface */
-       int             myidmask;       /* ~(1 << myid) */
-       int             state;          /* current SCSI connection state */
-       int             target;         /* target SCSI ID if busy */
-       script_t        *script;        /* next expected interrupt & action */
-       struct scsi_xfer *cmdq[ASC_NCMD];/* Pointer to queued commands */
-       struct scsi_xfer *cmd[ASC_NCMD];/* Pointer to current active command */
-       State           st[ASC_NCMD];   /* state info for each active command */
-       int             min_period;     /* Min transfer period clk/byte */
-       int             max_period;     /* Max transfer period clk/byte */
-       int             ccf;            /* CCF, whatever that really is? */
-       int             timeout_250;    /* 250ms timeout */
-       int             tb_ticks;       /* 4ns. ticks/tb channel ticks */
-       struct scsi_link sc_link;       /* scsi link struct */
-};
-
-#define        ASC_STATE_IDLE          0       /* idle state */
-#define        ASC_STATE_BUSY          1       /* selecting or currently connected */
-#define ASC_STATE_TARGET       2       /* currently selected as target */
-#define ASC_STATE_RESEL                3       /* currently waiting for reselect */
-
-typedef struct asc_softc *asc_softc_t;
-
-/*
- * Autoconfiguration data for config.
- */
-int    ascmatch __P((struct device *, void *, void *));
-void   ascattach __P((struct device *, struct device *, void *));
-int    ascprint(void *, char *);
-
-int    asc_doprobe __P((void *, int, int, struct device *));
-
-struct cfattach asc_ca = {
-       sizeof(struct asc_softc), ascmatch, ascattach
-};
-struct cfdriver asc_cd = {
-       NULL, "asc", DV_DULL, NULL, 0
-};
-
-/*
- *  Glue to the machine dependent scsi
- */
-int asc_scsi_cmd __P((struct scsi_xfer *));
-void asc_minphys __P((struct buf *));
-
-struct scsi_adapter asc_switch = {
-       asc_scsi_cmd,
-/*XXX*/        asc_minphys,    /* no max transfer size, DMA driver negotiates */
-       NULL,
-       NULL,
-};
-
-struct scsi_device asc_dev = {
-/*XXX*/        NULL,           /* Use default error handler */
-/*XXX*/        NULL,           /* have a queue, served by this */
-/*XXX*/        NULL,           /* have no async handler */
-/*XXX*/        NULL,           /* Use default 'done' routine */
-};
-
-static int     asc_probe();
-static void    asc_start();
-static int     asc_intr();
-
-/*
- * Match driver based on name
- */
-int
-ascmatch(parent, match, aux)
-       struct device *parent;
-       void *match;
-       void *aux;
-{
-       struct cfdata *cf = match;
-       struct confargs *ca = aux;
-
-       if(!BUS_MATCHNAME(ca, "asc"))
-               return(0);
-       return(1);
-}
-
-void
-ascattach(parent, self, aux)
-       struct device *parent;
-       struct device *self;
-       void *aux;
-{
-       register struct confargs *ca = aux;
-       register asc_softc_t asc = (void *)self;
-       register asc_regmap_t *regs;
-       int id, s, i;
-       int bufsiz;
-
-       /*
-        * Initialize hw descriptor, cache some pointers
-        */
-       asc->regs = (asc_regmap_t *)BUS_CVTADDR(ca);
-
-       /*
-        * Set up machine dependencies.
-        * 1) how to do dma
-        * 2) timing based on chip clock frequency
-        */
-       switch (cputype) {
-       case ACER_PICA_61:
-               bufsiz = 63 * 1024; /*XXX check if code handles 0 as 64k */
-               asc->dma = &asc->__dma;
-               asc_dma_init(asc->dma);
-               break;
-       default:
-               bufsiz = 64 * 1024;
-       };
-       /*
-        * Now for timing. The pica has a 25Mhz
-        */
-       switch (cputype) {
-       case ACER_PICA_61:
-               asc->min_period = ASC_MIN_PERIOD25;
-               asc->max_period = ASC_MAX_PERIOD25;
-               asc->ccf = ASC_CCF(25);
-               asc->timeout_250 = ASC_TIMEOUT_250(25, asc->ccf);
-               asc->tb_ticks = 10;
-               break;
-       default:
-               asc->min_period = ASC_MIN_PERIOD12;
-               asc->max_period = ASC_MAX_PERIOD12;
-               asc->ccf = ASC_CCF(13);
-               asc->timeout_250 = ASC_TIMEOUT_250(13, asc->ccf);
-               asc->tb_ticks = 20;
-               break;
-       };
-
-       asc->state = ASC_STATE_IDLE;
-       asc->target = -1;
-
-       regs = asc->regs;
-
-       /*
-        * Reset chip, fully.  Note that interrupts are already enabled.
-        */
-       s = splbio();
-
-       /* preserve our ID for now */
-       asc->sc_id = regs->asc_cnfg1 & ASC_CNFG1_MY_BUS_ID;
-       asc->myidmask = ~(1 << asc->sc_id);
-
-       asc_reset(asc, regs);
-
-       /*
-        * Our SCSI id on the bus.
-        * The user can set this via the prom on 3maxen/picaen.
-        * If this changes it is easy to fix: make a default that
-        * can be changed as boot arg.
-        */
-#ifdef unneeded
-       regs->asc_cnfg1 = (regs->asc_cnfg1 & ~ASC_CNFG1_MY_BUS_ID) |
-                             (scsi_initiator_id[unit] & 0x7);
-       asc->sc_id = regs->asc_cnfg1 & ASC_CNFG1_MY_BUS_ID;
-#endif
-       id = asc->sc_id;
-       splx(s);
-
-       /*
-        * Give each target its DMA buffer region.
-        * The buffer address is the same for all targets,
-        * the allocated dma viritual scatter/gather space.
-        */
-       for (i = 0; i < ASC_NCMD; i++) {
-               asc->st[i].dmaBufSize = bufsiz;
-       }
-
-       /*
-        * Set up interrupt handler.
-         */
-       BUS_INTR_ESTABLISH(ca, asc_intr, (void *)asc);
-
-       printf(": NCR53C94, target %d\n", id);
-
-       /*
-        * Fill in the prototype scsi link.
-        */
-       asc->sc_link.adapter_softc = asc;
-       asc->sc_link.adapter_target = asc->sc_id;
-       asc->sc_link.adapter = &asc_switch;
-       asc->sc_link.device = &asc_dev;
-       asc->sc_link.openings = 2;
-
-       /*
-        * Now try to attach all the sub devices.
-        */
-       config_found(self, &asc->sc_link, ascprint);
-}
-
-int
-ascprint(aux, name)
-       void *aux;
-       char *name;
-{
-       return -1;
-}
-
-/*
- *  Driver breaks down request transfer size.
- */
-void
-asc_minphys(bp)
-       struct buf *bp;
-{
-}
-
-/*
- * Start activity on a SCSI device.
- * We maintain information on each device separately since devices can
- * connect/disconnect during an operation.
- */
-int
-asc_scsi_cmd(xs)
-       struct scsi_xfer *xs;
-{
-       struct scsi_link *sc_link = xs->sc_link;
-       struct asc_softc *asc = sc_link->adapter_softc;
-       State *state = &asc->st[sc_link->target];
-
-       int flags, s;
-
-       flags = xs->flags;
-
-       /*
-        *  Flush caches for any data buffer
-        */
-       if(xs->datalen != 0) {
-               MachHitFlushDCache(xs->data, xs->datalen);
-       }
-       /*
-        *  The hack on the next few lines are to avoid buffers
-        *  mapped to UADDR. Realloc to the kva uarea address.
-        */
-       if((u_int)(xs->data) >= UADDR) {
-               xs->data = ((u_int)(xs->data) & ~UADDR) + (u_char *)(curproc->p_addr);
-       }
-
-       /*
-        * Check if another command is already in progress.
-        * We may have to change this if we allow SCSI devices with
-        * separate LUNs.
-        */
-       s = splbio();
-       if (asc->cmd[sc_link->target]) {
-               if (asc->cmdq[sc_link->target]) {
-                       splx(s);
-                       printf("asc_scsi_cmd: called when target busy");
-                       xs->error = XS_DRIVER_STUFFUP;
-                       return TRY_AGAIN_LATER;
-               }
-               asc->cmdq[sc_link->target] = xs;
-               splx(s);
-               return SUCCESSFULLY_QUEUED;
-       }
-       asc->cmd[sc_link->target] = xs;
-
-       /*
-        *  Going to launch.
-        *  Make a local copy of the command and some pointers.
-        */
-       asc_startcmd(asc, sc_link->target);
-
-       /*
-        *  If in startup, interrupts not usable yet.
-        */
-       if(flags & SCSI_POLL) {
-               return(asc_poll(asc,sc_link->target));
-       }
-       splx(s);
-       return SUCCESSFULLY_QUEUED;
-}
-
-int
-asc_poll(asc, target)
-       struct asc_softc *asc;
-       int target;
-{
-       struct scsi_xfer *scsicmd = asc->cmd[target];
-       int count = scsicmd->timeout * 10;
-
-       while(count) {
-               if(asc->regs->asc_status &ASC_CSR_INT) {
-                       asc_intr(asc);
-               }
-               if(scsicmd->flags & ITSDONE)
-                       break;
-               DELAY(5);
-               count--;
-       }
-       if(count == 0) {
-               scsicmd->error = XS_TIMEOUT;
-               asc_end(asc, 0, 0, 0);
-       }
-       return COMPLETE;
-}
-
-static void
-asc_reset(asc, regs)
-       asc_softc_t asc;
-       asc_regmap_t *regs;
-{
-
-       /*
-        * Reset chip and wait till done
-        */
-       regs->asc_cmd = ASC_CMD_RESET;
-       wbflush(); DELAY(25);
-
-       /* spec says this is needed after reset */
-       regs->asc_cmd = ASC_CMD_NOP;
-       wbflush(); DELAY(25);
-
-       /*
-        * Set up various chip parameters
-        */
-       regs->asc_ccf = asc->ccf;
-       wbflush(); DELAY(25);
-       regs->asc_sel_timo = asc->timeout_250;
-       /* restore our ID */
-       regs->asc_cnfg1 = asc->sc_id | ASC_CNFG1_P_CHECK;
-       /* include ASC_CNFG2_SCSI2 if you want to allow SCSI II commands */
-       regs->asc_cnfg2 = /* ASC_CNFG2_RFB | ASC_CNFG2_SCSI2 | */ ASC_CNFG2_EPL;
-       regs->asc_cnfg3 = 0;
-       /* zero anything else */
-       ASC_TC_PUT(regs, 0);
-       regs->asc_syn_p = asc->min_period;
-       regs->asc_syn_o = 0;    /* async for now */
-       wbflush();
-}
-
-/*
- * Start a SCSI command on a target.
- */
-static void
-asc_startcmd(asc, target)
-       asc_softc_t asc;
-       int target;
-{
-       asc_regmap_t *regs;
-       State *state;
-       struct scsi_xfer *scsicmd;
-       int i, len;
-
-       /*
-        * See if another target is currently selected on this SCSI bus.
-        */
-       if (asc->target >= 0)
-               return;
-
-       regs = asc->regs;
-
-       /*
-        * If a reselection is in progress, it is Ok to ignore it since
-        * the ASC will automatically cancel the command and flush
-        * the FIFO if the ASC is reselected before the command starts.
-        * If we try to use ASC_CMD_DISABLE_SEL, we can hang the system if
-        * a reselect occurs before starting the command.
-        */
-
-       asc->state = ASC_STATE_BUSY;
-       asc->target = target;
-
-       /* cache some pointers */
-       scsicmd = asc->cmd[target];
-       state = &asc->st[target];
-
-       /*
-        * Init the chip and target state.
-        */
-       state->flags = state->flags & (DID_SYNC | CHECK_SENSE);
-       state->script = (script_t *)0;
-       state->msg_out = SCSI_NO_OP;
-
-       /*
-        * Set up for DMA of command output. Also need to flush cache.
-        */
-       if(!(state->flags & CHECK_SENSE)) {
-               bcopy(scsicmd->cmd, &state->cmd, scsicmd->cmdlen);
-               state->cmdlen = scsicmd->cmdlen;
-               state->buf = (vm_offset_t)scsicmd->data;
-               state->buflen = scsicmd->datalen;
-       }
-       len = state->cmdlen;
-       state->dmalen = len;
-       
-#ifdef DEBUG
-       if (asc_debug > 1) {
-               printf("asc_startcmd: %s target %d cmd %x len %d\n",
-                       asc->sc_dev.dv_xname, target,
-                       state->cmd.opcode, state->buflen);
-       }
-#endif
-
-       /* check for simple SCSI command with no data transfer */
-       if(state->flags & CHECK_SENSE) {
-               asc->script = &asc_scripts[SCRIPT_DATA_IN];
-               state->flags |= DMA_IN;
-       }
-       else if (scsicmd->flags & SCSI_DATA_OUT) {
-               asc->script = &asc_scripts[SCRIPT_DATA_OUT];
-               state->flags |= DMA_OUT;
-       }
-       else if (scsicmd->flags & SCSI_DATA_IN) {
-               asc->script = &asc_scripts[SCRIPT_DATA_IN];
-               state->flags |= DMA_IN;
-       }
-       else if (state->buflen == 0) {
-               /* check for sync negotiation */
-               if ((scsicmd->flags & /* SCSICMD_USE_SYNC */ 0) &&
-                   !(state->flags & DID_SYNC)) {
-                       asc->script = &asc_scripts[SCRIPT_TRY_SYNC];
-                       state->flags |= TRY_SYNC;
-               } else
-                       asc->script = &asc_scripts[SCRIPT_SIMPLE];
-               state->buf = (vm_offset_t)0;
-       }
-
-#ifdef DEBUG
-       asc_debug_cmd = state->cmd.opcode;
-       if (state->cmd.opcode == SCSI_READ_EXT) {
-               asc_debug_bn = (state->cmd.bytes[1] << 24) |
-                       (state->cmd.bytes[2] << 16) |
-                       (state->cmd.bytes[3] << 8) |
-                        state->cmd.bytes[4];
-               asc_debug_sz = (state->cmd.bytes[6] << 8) | state->cmd.bytes[7];
-       }
-       asc_logp->status = PACK(asc->sc_dev.dv_unit, 0, 0, asc_debug_cmd);
-       asc_logp->target = asc->target;
-       asc_logp->state = asc->script - asc_scripts;
-       asc_logp->msg = SCSI_DIS_REC_IDENTIFY;
-       asc_logp->resid = scsicmd->datalen;
-       if (++asc_logp >= &asc_log[NLOG])
-               asc_logp = asc_log;
-#endif
-
-       /* preload the FIFO with the message and command to be sent */
-       regs->asc_fifo = SCSI_DIS_REC_IDENTIFY | (scsicmd->sc_link->lun & 0x07);
-
-       for( i = 0; i < len; i++ ) {
-               regs->asc_fifo = ((caddr_t)&state->cmd)[i];
-       }
-       ASC_TC_PUT(regs, 0);
-       readback(regs->asc_cmd);
-       regs->asc_cmd = ASC_CMD_DMA;
-       readback(regs->asc_cmd);
-
-       regs->asc_dbus_id = target;
-       readback(regs->asc_dbus_id);
-       regs->asc_syn_p = state->sync_period;
-       readback(regs->asc_syn_p);
-       regs->asc_syn_o = state->sync_offset;
-       readback(regs->asc_syn_o);
-
-/*XXX PEFO */
-/* we are not using sync transfer now, need to check this if we will */
-
-       if (state->flags & TRY_SYNC)
-               regs->asc_cmd = ASC_CMD_SEL_ATN_STOP;
-       else
-               regs->asc_cmd = ASC_CMD_SEL_ATN;
-       readback(regs->asc_cmd);
-}
-
-/*
- * Interrupt routine
- *     Take interrupts from the chip
- *
- * Implementation:
- *     Move along the current command's script if
- *     all is well, invoke error handler if not.
- */
-int
-asc_intr(sc)
-       void *sc;
-{
-       asc_softc_t asc = sc;
-       asc_regmap_t *regs = asc->regs;
-       State *state;
-       script_t *scpt;
-       int ss, ir, status;
-
-       /* collect ephemeral information */
-       status = regs->asc_status;
-       ss = regs->asc_ss;
-
-       if ((status & ASC_CSR_INT) == 0) /* Make shure it's a real interrupt */
-                return;
-
-       ir = regs->asc_intr;    /* this resets the previous two */
-       scpt = asc->script;
-
-#ifdef DEBUG
-       asc_logp->status = PACK(asc->sc_dev.dv_unit, status, ss, ir);
-       asc_logp->target = (asc->state == ASC_STATE_BUSY) ? asc->target : -1;
-       asc_logp->state = scpt - asc_scripts;
-       asc_logp->msg = -1;
-       asc_logp->resid = 0;
-       if (++asc_logp >= &asc_log[NLOG])
-               asc_logp = asc_log;
-       if (asc_debug > 2)
-               printf("asc_intr: status %x ss %x ir %x cond %d:%x\n",
-                       status, ss, ir, scpt - asc_scripts, scpt->condition);
-#endif
-
-       /* check the expected state */
-       if (SCRIPT_MATCH(ir, status) == scpt->condition) {
-               /*
-                * Perform the appropriate operation, then proceed.
-                */
-               if ((*scpt->action)(asc, status, ss, ir)) {
-                       regs->asc_cmd = scpt->command;
-                       readback(regs->asc_cmd);
-                       asc->script = scpt->next;
-               }
-               goto done;
-       }
-
-       /*
-        * Check for parity error.
-        * Hardware will automatically set ATN
-        * to request the device for a MSG_OUT phase.
-        */
-       if (status & ASC_CSR_PE) {
-               printf("%s: SCSI device %d: incomming parity error seen\n",
-                       asc->sc_dev.dv_xname, asc->target);
-               asc->st[asc->target].flags |= PARITY_ERR;
-       }
-
-       /*
-        * Check for gross error.
-        * Probably a bug in a device driver.
-        */
-       if (status & ASC_CSR_GE) {
-               printf("%s: SCSI device %d: gross error\n",
-                       asc->sc_dev.dv_xname, asc->target);
-               goto abort;
-       }
-
-       /* check for message in or out */
-       if ((ir & ~ASC_INT_FC) == ASC_INT_BS) {
-               register int len, fifo;
-
-               state = &asc->st[asc->target];
-               switch (ASC_PHASE(status)) {
-               case ASC_PHASE_DATAI:
-               case ASC_PHASE_DATAO:
-                       ASC_TC_GET(regs, len);
-                       fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-                       printf("asc_intr: data overrun: buflen %d dmalen %d tc %d fifo %d\n",
-                               state->buflen, state->dmalen, len, fifo);
-                       goto abort;
-
-               case ASC_PHASE_MSG_IN:
-                       break;
-
-               case ASC_PHASE_MSG_OUT:
-                       /*
-                        * Check for parity error.
-                        * Hardware will automatically set ATN
-                        * to request the device for a MSG_OUT phase.
-                        */
-                       if (state->flags & PARITY_ERR) {
-                               state->flags &= ~PARITY_ERR;
-                               state->msg_out = SCSI_MESSAGE_PARITY_ERROR;
-                               /* reset message in counter */
-                               state->msglen = 0;
-                       } else
-                               state->msg_out = SCSI_NO_OP;
-                       regs->asc_fifo = state->msg_out;
-                       regs->asc_cmd = ASC_CMD_XFER_INFO;
-                       readback(regs->asc_cmd);
-                       goto done;
-
-               case ASC_PHASE_STATUS:
-                       /* probably an error in the SCSI command */
-                       asc->script = &asc_scripts[SCRIPT_GET_STATUS];
-                       regs->asc_cmd = ASC_CMD_I_COMPLETE;
-                       readback(regs->asc_cmd);
-                       goto done;
-
-               default:
-                       goto abort;
-               }
-
-               if (state->script)
-                       goto abort;
-
-               /*
-                * OK, message coming in clean up whatever is going on.
-                * Get number of bytes left to transfered from byte counter
-                * counter decrements when data is trf on the SCSI bus
-                */
-               ASC_TC_GET(regs, len);
-               fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-               /* flush any data in the FIFO */
-               if (fifo && !(state->flags & DMA_IN_PROGRESS)) {
-printf("asc_intr: fifo flush %d len %d fifo %x\n", fifo, len, regs->asc_fifo);
-                       regs->asc_cmd = ASC_CMD_FLUSH;
-                       readback(regs->asc_cmd);
-                       DELAY(2);
-               }
-               else if (fifo && state->flags & DMA_IN_PROGRESS) {      
-                       if (state->flags & DMA_OUT) {
-                               len += fifo; /* Bytes dma'ed but not sent */
-                       }
-                       else if (state->flags & DMA_IN) {
-                               u_char *cp;
-
-                               printf("asc_intr: IN: dmalen %d len %d fifo %d\n",
-                                       state->dmalen, len, fifo); /* XXX */
-                       }
-                       regs->asc_cmd = ASC_CMD_FLUSH;
-                       readback(regs->asc_cmd);
-                       DELAY(2);
-               }
-               if (len && (state->flags & DMA_IN_PROGRESS)) {
-                       /* save number of bytes still to be sent or received */
-                       state->dmaresid = len;
-                       state->flags &= ~DMA_IN_PROGRESS;
-                       ASC_TC_PUT(regs, 0);
-#ifdef DEBUG
-                       if (asc_logp == asc_log)
-                               asc_log[NLOG - 1].resid = len;
-                       else
-                               asc_logp[-1].resid = len;
-#endif
-                       /* setup state to resume to */
-                       if (state->flags & DMA_IN) {
-                               /*
-                                * Since the ASC_CNFG3_SRB bit of the
-                                * cnfg3 register bit is not set,
-                                * we just transferred an extra byte.
-                                * Since we can't resume on an odd byte
-                                * boundary, we copy the valid data out
-                                * and resume DMA at the start address.
-                                */
-                               if (len & 1) {
-                                       printf("asc_intr: msg in len %d (fifo %d)\n",
-                                               len, fifo); /* XXX */
-                                       len = state->dmalen - len;
-                                       goto do_in;
-                               }
-                               state->script =
-                                       &asc_scripts[SCRIPT_RESUME_DMA_IN];
-                       } else if (state->flags & DMA_OUT)
-                               state->script =
-                                       &asc_scripts[SCRIPT_RESUME_DMA_OUT];
-                       else
-                               state->script = asc->script;
-               } else if (state->flags & DMA_IN) {
-                       if (len) {
-#ifdef DEBUG
-                               printf("asc_intr: 1: bn %d len %d (fifo %d)\n",
-                                       asc_debug_bn, len, fifo); /* XXX */
-#endif
-                               goto abort;
-                       }
-                       /* setup state to resume to */
-                       if (state->flags & DMA_IN_PROGRESS) {
-                               len = state->dmalen;
-                               state->flags &= ~DMA_IN_PROGRESS;
-                       do_in:
-                               DMA_END(asc->dma);
-                               state->buf += len;
-                               state->buflen -= len;
-                       }
-                       if (state->buflen)
-                               state->script =
-                                   &asc_scripts[SCRIPT_RESUME_IN];
-                       else
-                               state->script =
-                                   &asc_scripts[SCRIPT_RESUME_NO_DATA];
-               } else if (state->flags & DMA_OUT) {
-                       if (len) {
-                               printf("asc_intr: 2: len %d (fifo %d)\n", len,
-                                       fifo); /* XXX */
-/* XXX THEO */
-#if 1 
-                               regs->asc_cmd = ASC_CMD_FLUSH;
-                               readback(regs->asc_cmd);
-                               DELAY(2);
-                               len = 0;
-#else                                   
-                               goto abort;
-#endif
-                       }
-                       /*
-                        * If this is the last chunk, the next expected
-                        * state is to get status.
-                        */
-                       if (state->flags & DMA_IN_PROGRESS) {
-                               state->flags &= ~DMA_IN_PROGRESS;
-                               DMA_END(asc->dma);
-                               len = state->dmalen;
-                               state->buf += len;
-                               state->buflen -= len;
-                       }
-                       if (state->buflen)
-                               state->script =
-                                   &asc_scripts[SCRIPT_RESUME_OUT];
-                       else
-                               state->script =
-                                   &asc_scripts[SCRIPT_RESUME_NO_DATA];
-               } else if (asc->script == &asc_scripts[SCRIPT_SIMPLE])
-                       state->script = &asc_scripts[SCRIPT_RESUME_NO_DATA];
-               else
-                       state->script = asc->script;
-
-               /* setup to receive a message */
-               asc->script = &asc_scripts[SCRIPT_MSG_IN];
-               state->msglen = 0;
-               regs->asc_cmd = ASC_CMD_XFER_INFO;
-               readback(regs->asc_cmd);
-               goto done;
-       }
-
-       /* check for SCSI bus reset */
-       if (ir & ASC_INT_RESET) {
-               register int i;
-
-               printf("%s: SCSI bus reset!!\n", asc->sc_dev.dv_xname);
-               /* need to flush any pending commands */
-               for (i = 0; i < ASC_NCMD; i++) {
-                       if (!asc->cmd[i])
-                               continue;
-                       asc->cmd[i]->error = XS_DRIVER_STUFFUP;
-                       asc_end(asc, 0, 0, 0);
-               }
-               /* rearbitrate synchronous offset */
-               for (i = 0; i < ASC_NCMD; i++) {
-                       asc->st[i].sync_offset = 0;
-                       asc->st[i].flags = 0;
-               }
-               asc->target = -1;
-               return;
-       }
-
-       /* check for command errors */
-       if (ir & ASC_INT_ILL)
-               goto abort;
-
-       /* check for disconnect */
-       if (ir & ASC_INT_DISC) {
-               state = &asc->st[asc->target];
-               switch (asc->script - asc_scripts) {
-               case SCRIPT_DONE:
-               case SCRIPT_DISCONNECT:
-                       /*
-                        * Disconnects can happen normally when the
-                        * command is complete with the phase being
-                        * either ASC_PHASE_DATAO or ASC_PHASE_MSG_IN.
-                        * The SCRIPT_MATCH() only checks for one phase
-                        * so we can wind up here.
-                        * Perform the appropriate operation, then proceed.
-                        */
-                       if ((*scpt->action)(asc, status, ss, ir)) {
-                               regs->asc_cmd = scpt->command;
-                               readback(regs->asc_cmd);
-                               asc->script = scpt->next;
-                       }
-                       goto done;
-
-               case SCRIPT_TRY_SYNC:
-               case SCRIPT_SIMPLE:
-               case SCRIPT_DATA_IN:
-               case SCRIPT_DATA_OUT: /* one of the starting scripts */
-                       if (ASC_SS(ss) == 0) {
-                               /* device did not respond */
-                               if (regs->asc_flags & ASC_FLAGS_FIFO_CNT) {
-                                       regs->asc_cmd = ASC_CMD_FLUSH;
-                                       readback(regs->asc_cmd);
-                               }
-                               asc->cmd[asc->target]->error = XS_DRIVER_STUFFUP;
-                               asc_end(asc, status, ss, ir);
-                               return;
-                       }
-                       /* FALLTHROUGH */
-
-               default:
-                       printf("%s: SCSI device %d: unexpected disconnect\n",
-                               asc->sc_dev.dv_xname, asc->target);
-#ifdef DEBUG
-                       asc_DumpLog("asc_disc");
-#endif
-                       /*
-                        * On rare occasions my RZ24 does a disconnect during
-                        * data in phase and the following seems to keep it
-                        * happy.
-                        * XXX Should a scsi disk ever do this??
-                        */
-                       asc->script = &asc_scripts[SCRIPT_RESEL];
-                       asc->state = ASC_STATE_RESEL;
-                       state->flags |= DISCONN;
-                       regs->asc_cmd = ASC_CMD_ENABLE_SEL;
-                       readback(regs->asc_cmd);
-                       return;
-               }
-       }
-
-       /* check for reselect */
-       if (ir & ASC_INT_RESEL) {
-               unsigned fifo, id, msg;
-
-               fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-               if (fifo < 2)
-                       goto abort;
-               /* read unencoded SCSI ID and convert to binary */
-               msg = regs->asc_fifo & asc->myidmask;
-               for (id = 0; (msg & 1) == 0; id++)
-                       msg >>= 1;
-               /* read identify message */
-               msg = regs->asc_fifo;
-#ifdef DEBUG
-               if (asc_logp == asc_log)
-                       asc_log[NLOG - 1].msg = msg;
-               else
-                       asc_logp[-1].msg = msg;
-#endif
-               asc->state = ASC_STATE_BUSY;
-               asc->target = id;
-               state = &asc->st[id];
-               asc->script = state->script;
-               state->script = (script_t *)0;
-               if (!(state->flags & DISCONN))
-                       goto abort;
-               state->flags &= ~DISCONN;
-               regs->asc_syn_p = state->sync_period;
-               regs->asc_syn_o = state->sync_offset;
-               regs->asc_cmd = ASC_CMD_MSG_ACPT;
-               readback(regs->asc_cmd);
-               goto done;
-       }
-
-       /* check if we are being selected as a target */
-       if (ir & (ASC_INT_SEL | ASC_INT_SEL_ATN))
-               goto abort;
-
-       /*
-        * 'ir' must be just ASC_INT_FC.
-        * This is normal if canceling an ASC_ENABLE_SEL.
-        */
-
-done:
-       wbflush();
-       /*
-        * If the next interrupt comes in immediatly the interrupt
-        * dispatcher (which we are returning to) will catch it
-        * before returning to the interrupted code.
-        */
-       return;
-
-abort:
-#ifdef DEBUG
-       asc_DumpLog("asc_intr");
-#endif
-#if 0
-       panic("asc_intr");
-#else
-       boot(4); /* XXX */
-#endif
-}
-
-/*
- * All the many little things that the interrupt
- * routine might switch to.
- */
-
-/* ARGSUSED */
-static int
-script_nop(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_get_status(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register int data;
-
-       /*
-        * Get the last two bytes in the FIFO.
-        */
-       if ((data = regs->asc_flags & ASC_FLAGS_FIFO_CNT) != 2) {
-               printf("asc_get_status: cmdreg %x, fifo cnt %d\n",
-                      regs->asc_cmd, data); /* XXX */
-#ifdef DEBUG
-               asc_DumpLog("get_status"); /* XXX */
-#endif
-               if (data < 2) {
-                       asc->regs->asc_cmd = ASC_CMD_MSG_ACPT;
-                       readback(asc->regs->asc_cmd);
-                       return (0);
-               }
-               do {
-                       data = regs->asc_fifo;
-               } while ((regs->asc_flags & ASC_FLAGS_FIFO_CNT) > 2);
-       }
-
-       /* save the status byte */
-       asc->st[asc->target].statusByte = data = regs->asc_fifo;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].msg = data;
-       else
-               asc_logp[-1].msg = data;
-#endif
-
-       /* get the (presumed) command_complete message */
-       if ((data = regs->asc_fifo) == SCSI_COMMAND_COMPLETE)
-               return (1);
-
-#ifdef DEBUG
-       printf("asc_get_status: status %x cmd %x\n",
-               asc->st[asc->target].statusByte, data);
-       asc_DumpLog("asc_get_status");
-#endif
-       return (0);
-}
-
-/* ARGSUSED */
-static int
-asc_end(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       struct scsi_xfer *scsicmd;
-       struct scsi_link *sc_link;
-       State *state;
-       int i, target;
-
-       asc->state = ASC_STATE_IDLE;
-       target = asc->target;
-       asc->target = -1;
-       scsicmd = asc->cmd[target];
-       sc_link = scsicmd->sc_link;
-       asc->cmd[target] = (struct scsi_xfer *)0;
-       state = &asc->st[target];
-
-#ifdef DEBUG
-       if (asc_debug > 1) {
-               printf("asc_end: %s target %d cmd %x err %d resid %d\n",
-                       asc->sc_dev.dv_xname, target,
-                       state->cmd.opcode, scsicmd->error, state->buflen);
-       }
-#endif
-#ifdef DIAGNOSTIC
-       if (target < 0 || !scsicmd)
-               panic("asc_end");
-#endif
-
-       /* look for disconnected devices */
-       for (i = 0; i < ASC_NCMD; i++) {
-               if (!asc->cmd[i] || !(asc->st[i].flags & DISCONN))
-                       continue;
-               asc->regs->asc_cmd = ASC_CMD_ENABLE_SEL;
-               readback(asc->regs->asc_cmd);
-               asc->state = ASC_STATE_RESEL;
-               asc->script = &asc_scripts[SCRIPT_RESEL];
-               break;
-       }
-
-       if(scsicmd->error == XS_NOERROR && !(state->flags & CHECK_SENSE)) {
-               if((state->statusByte & ST_MASK) == SCSI_CHECK) {
-                       struct scsi_sense *ss = (void *)&state->cmd;
-                       /* Save return values */
-                       scsicmd->resid = state->buflen;
-                       scsicmd->status = state->statusByte;
-                       /* Set up sense request command */
-                       bzero(ss, sizeof(*ss));
-                       ss->opcode = REQUEST_SENSE;
-                       ss->byte2 = sc_link->lun << 5;
-                       ss->length = sizeof(struct scsi_sense_data);
-                       state->cmdlen = sizeof(*ss);
-                       state->buf = (vm_offset_t)&scsicmd->sense;
-                       state->buflen = sizeof(struct scsi_sense_data);
-                       state->flags |= CHECK_SENSE;
-                       MachHitFlushDCache(state->buf, state->buflen);
-                       asc->cmd[target] = scsicmd;
-                       asc_startcmd(asc, target);
-                       return(0);
-               }
-       }
-
-       if(scsicmd->error == XS_NOERROR && (state->flags & CHECK_SENSE)) {
-               scsicmd->error = XS_SENSE;
-       }
-       else {
-               scsicmd->resid = state->buflen;
-       }
-       state->flags &= ~CHECK_SENSE;
-
-       /*
-        * Look for another device that is ready.
-        * May want to keep last one started and increment for fairness
-        * rather than always starting at zero.
-        */
-       for (i = 0; i < ASC_NCMD; i++) {
-               if (asc->cmd[i] == 0 && asc->cmdq[i] != 0) {
-                       asc->cmd[i] = asc->cmdq[i];
-                       asc->cmdq[i] = 0;
-               }
-       }
-       for (i = 0; i < ASC_NCMD; i++) {
-               /* don't restart a disconnected command */
-               if (!asc->cmd[i] || (asc->st[i].flags & DISCONN))
-                       continue;
-               asc_startcmd(asc, i);
-               break;
-       }
-
-       /* signal device driver that the command is done */
-       scsicmd->flags |= ITSDONE;
-       scsi_done(scsicmd);
-
-       return (0);
-}
-
-/* ARGSUSED */
-static int
-asc_dma_in(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len;
-
-       /* check for previous chunk in buffer */
-       if (state->flags & DMA_IN_PROGRESS) {
-               /*
-                * Only count bytes that have been copied to memory.
-                * There may be some bytes in the FIFO if synchonous transfers
-                * are in progress.
-                */
-               DMA_END(asc->dma);
-               ASC_TC_GET(regs, len);
-               len = state->dmalen - len;
-               state->buf += len;
-               state->buflen -= len;
-       }
-
-       /* setup to start reading the next chunk */
-       len = state->buflen;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       if (len > state->dmaBufSize)
-               len = state->dmaBufSize;
-       state->dmalen = len;
-       DMA_START(asc->dma, (caddr_t)state->buf, len, DMA_FROM_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_dma_in: buflen %d, len %d\n", state->buflen, len);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (len != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_IN];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_last_dma_in(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len, fifo;
-
-       DMA_END(asc->dma);
-       ASC_TC_GET(regs, len);
-       fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_last_dma_in: buflen %d dmalen %d tc %d fifo %d\n",
-                       state->buflen, state->dmalen, len, fifo);
-#endif
-       if (fifo) {
-               /* device must be trying to send more than we expect */
-               regs->asc_cmd = ASC_CMD_FLUSH;
-               readback(regs->asc_cmd);
-       }
-       state->flags &= ~DMA_IN_PROGRESS;
-       len = state->dmalen - len;
-       state->buflen -= len;
-
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_resume_in(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len;
-
-       /* setup to start reading the next chunk */
-       len = state->buflen;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       if (len > state->dmaBufSize)
-               len = state->dmaBufSize;
-       state->dmalen = len;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       DMA_START(asc->dma, (caddr_t)state->buf, len, DMA_FROM_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_resume_in: buflen %d, len %d\n", state->buflen,
-                       len);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (len != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_IN];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_resume_dma_in(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len, off;
-
-       /* setup to finish reading the current chunk */
-       len = state->dmaresid;
-       off = state->dmalen - len;
-       if ((off & 1) && state->sync_offset) {
-               printf("asc_resume_dma_in: odd xfer dmalen %d len %d off %d\n",
-                       state->dmalen, len, off); /* XXX */
-               regs->asc_res_fifo = ((u_char *)state->buf)[off];
-/*XXX Need to flush cache ? */
-       }
-       DMA_START(asc->dma, (caddr_t)state->buf + off, len, DMA_FROM_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_resume_dma_in: buflen %d dmalen %d len %d off %d\n",
-                       state->dmalen, state->buflen, len, off);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (state->dmalen != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_IN];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_dma_out(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len, fifo;
-
-       if (state->flags & DMA_IN_PROGRESS) {
-               /* check to be sure previous chunk was finished */
-               ASC_TC_GET(regs, len);
-               fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-               if (len || fifo)
-                       printf("asc_dma_out: buflen %d dmalen %d tc %d fifo %d\n",
-                               state->buflen, state->dmalen, len, fifo); /* XXX */
-               len += fifo;
-               len = state->dmalen - len;
-               state->buf += len;
-               state->buflen -= len;
-       }
-
-       /* setup for this chunk */
-       len = state->buflen;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       if (len > state->dmaBufSize)
-               len = state->dmaBufSize;
-       state->dmalen = len;
-       DMA_START(asc->dma, (caddr_t)state->buf, len, DMA_TO_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_dma_out: buflen %d, len %d\n", state->buflen, len);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (len != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_OUT];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_last_dma_out(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len, fifo;
-
-       ASC_TC_GET(regs, len);
-       fifo = regs->asc_flags & ASC_FLAGS_FIFO_CNT;
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_last_dma_out: buflen %d dmalen %d tc %d fifo %d\n",
-                       state->buflen, state->dmalen, len, fifo);
-#endif
-       if (fifo) {
-               len += fifo;
-               regs->asc_cmd = ASC_CMD_FLUSH;
-               readback(regs->asc_cmd);
-       }
-       state->flags &= ~DMA_IN_PROGRESS;
-       len = state->dmalen - len;
-       state->buflen -= len;
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_resume_out(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len;
-
-       /* setup for this chunk */
-       len = state->buflen;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       if (len > state->dmaBufSize)
-               len = state->dmaBufSize;
-       state->dmalen = len;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].resid = len;
-       else
-               asc_logp[-1].resid = len;
-#endif
-       DMA_START(asc->dma, (caddr_t)state->buf, len, DMA_TO_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_resume_out: buflen %d, len %d\n", state->buflen,
-                       len);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (len != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_OUT];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_resume_dma_out(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int len, off;
-
-       /* setup to finish writing this chunk */
-       len = state->dmaresid;
-       off = state->dmalen - len;
-       if (off & 1) {
-               printf("asc_resume_dma_out: odd xfer dmalen %d len %d off %d\n",
-                       state->dmalen, len, off); /* XXX */
-               regs->asc_fifo = ((u_char *)state->buf)[off];
-/*XXX Need to flush Cache ? */
-               off++;
-               len--;
-       }
-       DMA_START(asc->dma, (caddr_t)state->buf + off, len, DMA_TO_DEV);
-       ASC_TC_PUT(regs, len);
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_resume_dma_out: buflen %d dmalen %d len %d off %d\n",
-                       state->dmalen, state->buflen, len, off);
-#endif
-
-       /* check for next chunk */
-       state->flags |= DMA_IN_PROGRESS;
-       if (state->dmalen != state->buflen) {
-               regs->asc_cmd = ASC_CMD_XFER_INFO | ASC_CMD_DMA;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_CONTINUE_OUT];
-               return (0);
-       }
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_sendsync(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-
-       /* send the extended synchronous negotiation message */
-       regs->asc_fifo = SCSI_EXTENDED_MSG;
-       wbflush();
-       regs->asc_fifo = 3;
-       wbflush();
-       regs->asc_fifo = SCSI_SYNCHRONOUS_XFER;
-       wbflush();
-       regs->asc_fifo = SCSI_MIN_PERIOD;
-       wbflush();
-       regs->asc_fifo = ASC_MAX_OFFSET;
-       /* state to resume after we see the sync reply message */
-       state->script = asc->script + 2;
-       state->msglen = 0;
-       return (1);
-}
-
-/* ARGSUSED */
-static int
-asc_replysync(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_replysync: %x %x\n",
-                       asc_to_scsi_period[state->sync_period] * asc->tb_ticks,
-                       state->sync_offset);
-#endif
-       /* send synchronous transfer in response to a request */
-       regs->asc_fifo = SCSI_EXTENDED_MSG;
-       wbflush();
-       regs->asc_fifo = 3;
-       wbflush();
-       regs->asc_fifo = SCSI_SYNCHRONOUS_XFER;
-       wbflush();
-       regs->asc_fifo = asc_to_scsi_period[state->sync_period] * asc->tb_ticks;
-       wbflush();
-       regs->asc_fifo = state->sync_offset;
-       regs->asc_cmd = ASC_CMD_XFER_INFO;
-       readback(regs->asc_cmd);
-
-       /* return to the appropriate script */
-       if (!state->script) {
-#ifdef DEBUG
-               asc_DumpLog("asc_replsync");
-#endif
-               panic("asc_replysync");
-       }
-       asc->script = state->script;
-       state->script = (script_t *)0;
-       return (0);
-}
-
-/* ARGSUSED */
-static int
-asc_msg_in(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register asc_regmap_t *regs = asc->regs;
-       register State *state = &asc->st[asc->target];
-       register int msg;
-       int i;
-
-       /* read one message byte */
-       msg = regs->asc_fifo;
-#ifdef DEBUG
-       if (asc_logp == asc_log)
-               asc_log[NLOG - 1].msg = msg;
-       else
-               asc_logp[-1].msg = msg;
-#endif
-
-       /* check for multi-byte message */
-       if (state->msglen != 0) {
-               /* first byte is the message length */
-               if (state->msglen < 0) {
-                       state->msglen = msg;
-                       return (1);
-               }
-               if (state->msgcnt >= state->msglen)
-                       goto abort;
-               state->msg_in[state->msgcnt++] = msg;
-
-               /* did we just read the last byte of the message? */
-               if (state->msgcnt != state->msglen)
-                       return (1);
-
-               /* process an extended message */
-#ifdef DEBUG
-               if (asc_debug > 2)
-                       printf("asc_msg_in: msg %x %x %x\n",
-                               state->msg_in[0],
-                               state->msg_in[1],
-                               state->msg_in[2]);
-#endif
-               switch (state->msg_in[0]) {
-               case SCSI_SYNCHRONOUS_XFER:
-                       state->flags |= DID_SYNC;
-                       state->sync_offset = state->msg_in[2];
-
-                       /* convert SCSI period to ASC period */
-                       i = state->msg_in[1] / asc->tb_ticks;
-                       if (i < asc->min_period)
-                               i = asc->min_period;
-                       else if (i >= asc->max_period) {
-                               /* can't do sync transfer, period too long */
-                               printf("%s: SCSI device %d: sync xfer period too long (%d)\n",
-                                       asc->sc_dev.dv_xname, asc->target, i);
-                               i = asc->max_period;
-                               state->sync_offset = 0;
-                       }
-                       if ((i * asc->tb_ticks) != state->msg_in[1])
-                               i++;
-                       state->sync_period = i & 0x1F;
-
-                       /*
-                        * If this is a request, check minimums and
-                        * send back an acknowledge.
-                        */
-                       if (!(state->flags & TRY_SYNC)) {
-                               regs->asc_cmd = ASC_CMD_SET_ATN;
-                               readback(regs->asc_cmd);
-
-                               if (state->sync_period < asc->min_period)
-                                       state->sync_period =
-                                               asc->min_period;
-                               if (state->sync_offset > ASC_MAX_OFFSET)
-                                       state->sync_offset =
-                                               ASC_MAX_OFFSET;
-                               asc->script = &asc_scripts[SCRIPT_REPLY_SYNC];
-                               regs->asc_syn_p = state->sync_period;
-                               readback(regs->asc_syn_p);
-                               regs->asc_syn_o = state->sync_offset;
-                               readback(regs->asc_syn_o);
-                               regs->asc_cmd = ASC_CMD_MSG_ACPT;
-                               readback(regs->asc_cmd);
-                               return (0);
-                       }
-
-                       regs->asc_syn_p = state->sync_period;
-                       readback(regs->asc_syn_p);
-                       regs->asc_syn_o = state->sync_offset;
-                       readback(regs->asc_syn_o);
-                       goto done;
-
-               default:
-                       printf("%s: SCSI device %d: rejecting extended message 0x%x\n",
-                                asc->sc_dev.dv_xname, asc->target,
-                               state->msg_in[0]);
-                       goto reject;
-               }
-       }
-
-       /* process first byte of a message */
-#ifdef DEBUG
-       if (asc_debug > 2)
-               printf("asc_msg_in: msg %x\n", msg);
-#endif
-       switch (msg) {
-#if 0
-       case SCSI_MESSAGE_REJECT:
-               printf(" did not like SYNCH xfer "); /* XXX */
-               state->flags |= DID_SYNC;
-               regs->asc_cmd = ASC_CMD_MSG_ACPT;
-               readback(regs->asc_cmd);
-               status = asc_wait(regs, ASC_CSR_INT);
-               ir = regs->asc_intr;
-               /* some just break out here, some dont */
-               if (ASC_PHASE(status) == ASC_PHASE_MSG_OUT) {
-                       regs->asc_fifo = SCSI_ABORT;
-                       regs->asc_cmd = ASC_CMD_XFER_INFO;
-                       readback(regs->asc_cmd);
-                       status = asc_wait(regs, ASC_CSR_INT);
-                       ir = regs->asc_intr;
-               }
-               if (ir & ASC_INT_DISC) {
-                       asc_end(asc, status, 0, ir);
-                       return (0);
-               }
-               goto status;
-#endif /* 0 */
-
-       case SCSI_EXTENDED_MSG: /* read an extended message */
-               /* setup to read message length next */
-               state->msglen = -1;
-               state->msgcnt = 0;
-               return (1);
-
-       case SCSI_NO_OP:
-               break;
-
-       case SCSI_SAVE_DATA_POINTER:
-               /* expect another message */
-               return (1);
-
-       case SCSI_RESTORE_POINTERS:
-               /*
-                * Need to do the following if resuming synchonous data in
-                * on an odd byte boundary.
-               regs->asc_cnfg2 |= ASC_CNFG2_RFB;
-                */
-               break;
-
-       case SCSI_DISCONNECT:
-               if (state->flags & DISCONN)
-                       goto abort;
-               state->flags |= DISCONN;
-               regs->asc_cmd = ASC_CMD_MSG_ACPT;
-               readback(regs->asc_cmd);
-               asc->script = &asc_scripts[SCRIPT_DISCONNECT];
-               return (0);
-
-       default:
-               printf("%s: SCSI device %d: rejecting message 0x%x\n",
-                       asc->sc_dev.dv_xname, asc->target, msg);
-       reject:
-               /* request a message out before acknowledging this message */
-               state->msg_out = SCSI_MESSAGE_REJECT;
-               regs->asc_cmd = ASC_CMD_SET_ATN;
-               readback(regs->asc_cmd);
-       }
-
-done:
-       /* return to original script */
-       regs->asc_cmd = ASC_CMD_MSG_ACPT;
-       readback(regs->asc_cmd);
-       if (!state->script) {
-       abort:
-#ifdef DEBUG
-               asc_DumpLog("asc_msg_in");
-#endif
-               panic("asc_msg_in");
-       }
-       asc->script = state->script;
-       state->script = (script_t *)0;
-       return (0);
-}
-
-/* ARGSUSED */
-static int
-asc_disconnect(asc, status, ss, ir)
-       register asc_softc_t asc;
-       register int status, ss, ir;
-{
-       register State *state = &asc->st[asc->target];
-
-#ifdef DIAGNOSTIC
-       if (!(state->flags & DISCONN)) {
-               printf("asc_disconnect: device %d: DISCONN not set!\n",
-                       asc->target);
-       }
-#endif /* DIAGNOSTIC */
-       asc->target = -1;
-       asc->state = ASC_STATE_RESEL;
-       return (1);
-}
-
-#ifdef DEBUG
-/*
- * Dump the log buffer.
- */
-asc_DumpLog(str)
-       char *str;
-{
-       register struct asc_log *lp;
-       register u_int status;
-
-       printf("asc: %s: cmd %x bn %d cnt %d\n", str, asc_debug_cmd,
-               asc_debug_bn, asc_debug_sz);
-       lp = asc_logp;
-       do {
-               status = lp->status;
-               printf("asc%d tgt %d status %x ss %x ir %x cond %d:%x msg %x resid %d\n",
-                       status >> 24,
-                       lp->target,
-                       (status >> 16) & 0xFF,
-                       (status >> 8) & 0xFF,
-                       status & 0XFF,
-                       lp->state,
-                       asc_scripts[lp->state].condition,
-                       lp->msg, lp->resid);
-               if (++lp >= &asc_log[NLOG])
-                       lp = asc_log;
-       } while (lp != asc_logp);
-}
-#endif /* DEBUG */
-
-#endif /* NASC > 0 */
diff --git a/sys/arch/pica/dev/ascreg.h b/sys/arch/pica/dev/ascreg.h
deleted file mode 100644 (file)
index cafa656..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell and Rick Macklem.
- *
- * 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.
- *
- *     from: @(#)ascreg.h      8.1 (Berkeley) 6/10/93
- *      $Id: ascreg.h,v 1.1.1.1 1995/10/18 10:39:08 deraadt Exp $
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-/*
- * HISTORY
- * Log:        scsi_53C94.h,v
- * Revision 2.4  91/02/05  17:44:59  mrt
- *     Added author notices
- *     [91/02/04  11:18:32  mrt]
- * 
- *     Changed to use new Mach copyright
- *     [91/02/02  12:17:11  mrt]
- * 
- * Revision 2.3  90/12/05  23:34:46  af
- *     Documented max DMA xfer size.
- *     [90/12/03  23:39:36  af]
- * 
- * Revision 2.1.1.1  90/11/01  03:38:54  af
- *     Created, from the DEC specs:
- *     "PMAZ-AA TURBOchannel SCSI Module Functional Specification"
- *     Workstation Systems Engineering, Palo Alto, CA. Aug 27, 1990.
- *     And from the NCR data sheets
- *     "NCR 53C94, 53C95, 53C96 Advanced SCSI Controller"
- *     [90/09/03            af]
- */
-
-/*
- *     File: scsi_53C94.h
- *     Author: Alessandro Forin, Carnegie Mellon University
- *     Date:   9/90
- *
- *     Defines for the NCR 53C94 ASC (SCSI interface)
- *     Some gotcha came from the "86C01/53C94 DMA lab work" written
- *     by Ken Stewart (NCR MED Logic Products Applications Engineer)
- *     courtesy of NCR.  Thanks Ken !
- */
-
-#define ASC_OFFSET_53C94       0x0     /* from module base */
-
-#define ASC_NCMD               7       /* Number of simultaneous cmds */
-
-/*
- * Synch xfer parameters, and timing conversions
- */
-#define SCSI_MIN_PERIOD                50      /* in 4 nsecs units */
-#define ASC_MIN_PERIOD40       8       /* in CLKS/BYTE, 1 CLK = 25nsecs */
-#define ASC_MIN_PERIOD25       5       /* in CLKS/BYTE, 1 CLK = 40nsecs */
-#define ASC_MIN_PERIOD12       3       /* in CLKS/BYTE, 1 CLK = 80nsecs */
-#define ASC_MAX_PERIOD40       56      /* in CLKS/BYTE, 1 CLK = 25nsecs */
-#define ASC_MAX_PERIOD25       35      /* in CLKS/BYTE, 1 CLK = 40nsecs */
-#define ASC_MAX_PERIOD12       18      /* in CLKS/BYTE, 1 CLK = 80nsecs */
-#define ASC_MAX_OFFSET         15      /* pure number */
-/*
- * Register map, padded as needed
- */
-
-typedef volatile struct {
-       u_char  asc_tc_lsb;     /* rw: Transfer Counter LSB */
-       u_char  asc_tc_msb;     /* rw: Transfer Counter MSB */
-       u_char  asc_fifo;       /* rw: FIFO top */
-       u_char  asc_cmd;        /* rw: Command */
-       u_char  asc_status;     /* r:  Status */
-#define asc_dbus_id asc_status /* w: Destination Bus ID */
-       u_char  asc_intr;       /* r:  Interrupt */
-#define asc_sel_timo asc_intr  /* w: (re)select timeout */
-       u_char  asc_ss;         /* r:  Sequence Step */
-#define asc_syn_p asc_ss       /* w: synchronous period */
-       u_char  asc_flags;      /* r:  FIFO flags + seq step */
-#define asc_syn_o asc_flags    /* w: synchronous offset */
-       u_char  asc_cnfg1;      /* rw: Configuration 1 */
-       u_char  asc_ccf;        /* w:  Clock Conv. Factor */
-       u_char  asc_test;       /* w:  Test Mode */
-       u_char  asc_cnfg2;      /* rw: Configuration 2 */
-       u_char  asc_cnfg3;      /* rw: Configuration 3 */
-       u_char  asc_res_fifo;   /* w: Reserve FIFO byte */
-} asc_regmap_t;
-
-/*
- * Transfer Count: access macros
- * That a NOP is required after loading the dma counter
- * I learned on the NCR test code. Sic.
- */
-
-#define        ASC_TC_MAX      0x10000
-
-#define ASC_TC_GET(ptr, val)                           \
-       val = (ptr)->asc_tc_lsb | ((ptr)->asc_tc_msb << 8)
-#define ASC_TC_PUT(ptr, val)                           \
-       (ptr)->asc_tc_lsb = (val);                      \
-       (ptr)->asc_tc_msb = (val) >> 8;                 \
-       (ptr)->asc_cmd = ASC_CMD_NOP | ASC_CMD_DMA;
-
-/*
- * Command register (command codes)
- */
-
-#define ASC_CMD_DMA            0x80
-                                       /* Miscellaneous */
-#define ASC_CMD_NOP            0x00
-#define ASC_CMD_FLUSH          0x01
-#define ASC_CMD_RESET          0x02
-#define ASC_CMD_BUS_RESET      0x03
-                                       /* Initiator state */
-#define ASC_CMD_XFER_INFO      0x10
-#define ASC_CMD_I_COMPLETE     0x11
-#define ASC_CMD_MSG_ACPT       0x12
-#define ASC_CMD_XFER_PAD       0x18
-#define ASC_CMD_SET_ATN                0x1a
-#define ASC_CMD_CLR_ATN                0x1b
-                                       /* Target state */
-#define ASC_CMD_SND_MSG                0x20
-#define ASC_CMD_SND_STATUS     0x21
-#define ASC_CMD_SND_DATA       0x22
-#define ASC_CMD_DISC_SEQ       0x23
-#define ASC_CMD_TERM           0x24
-#define ASC_CMD_T_COMPLETE     0x25
-#define ASC_CMD_DISC           0x27
-#define ASC_CMD_RCV_MSG                0x28
-#define ASC_CMD_RCV_CDB                0x29
-#define ASC_CMD_RCV_DATA       0x2a
-#define ASC_CMD_RCV_CMD                0x2b
-#define ASC_CMD_ABRT_DMA       0x04
-                                       /* Disconnected state */
-#define ASC_CMD_RESELECT       0x40
-#define ASC_CMD_SEL            0x41
-#define ASC_CMD_SEL_ATN                0x42
-#define ASC_CMD_SEL_ATN_STOP   0x43
-#define ASC_CMD_ENABLE_SEL     0x44
-#define ASC_CMD_DISABLE_SEL    0x45
-#define ASC_CMD_SEL_ATN3       0x46
-
-/*
- * Status register, and phase encoding
- */
-
-#define ASC_CSR_INT            0x80
-#define ASC_CSR_GE             0x40
-#define ASC_CSR_PE             0x20
-#define ASC_CSR_TC             0x10
-#define ASC_CSR_VGC            0x08
-#define ASC_CSR_MSG            0x04
-#define ASC_CSR_CD             0x02
-#define ASC_CSR_IO             0x01
-
-#define        ASC_PHASE(csr)          ((csr) & 0x7)
-#define ASC_PHASE_DATAO                0x0
-#define ASC_PHASE_DATAI                0x1
-#define ASC_PHASE_COMMAND      0x2
-#define ASC_PHASE_STATUS       0x3
-                               /* 4..5 ANSI reserved */
-#define ASC_PHASE_MSG_OUT      0x6
-#define ASC_PHASE_MSG_IN       0x7
-
-/*
- * Destination Bus ID
- */
-
-#define ASC_DEST_ID_MASK       0x07
-
-/*
- * Interrupt register
- */
-
-#define ASC_INT_RESET          0x80
-#define ASC_INT_ILL            0x40
-#define ASC_INT_DISC           0x20
-#define ASC_INT_BS             0x10
-#define ASC_INT_FC             0x08
-#define ASC_INT_RESEL          0x04
-#define ASC_INT_SEL_ATN                0x02
-#define ASC_INT_SEL            0x01
-
-/*
- * Timeout register:
- *
- *     val = (timeout * CLK_freq) / (8192 * CCF);
- */
-
-#define        ASC_TIMEOUT_250(clk, ccf)       (((clk) * 31) / (ccf))
-
-/*
- * Sequence Step register
- */
-
-#define ASC_SS_RESERVED                0xf0
-#define ASC_SS_SOM             0x08
-#define ASC_SS_MASK            0x07
-#define        ASC_SS(ss)              ((ss) & ASC_SS_MASK)
-
-/*
- * Synchronous Transfer Period
- */
-
-#define ASC_STP_MASK           0x1f
-#define ASC_STP_MIN            0x05            /* 5 clk per byte */
-#define ASC_STP_MAX            0x04            /* after ovfl, 35 clk/byte */
-
-/*
- * FIFO flags
- */
-
-#define ASC_FLAGS_SEQ_STEP     0xe0
-#define ASC_FLAGS_FIFO_CNT     0x1f
-
-/*
- * Synchronous offset
- */
-
-#define ASC_SYNO_MASK          0x0f            /* 0 -> asyn */
-
-/*
- * Configuration 1
- */
-
-#define ASC_CNFG1_SLOW         0x80
-#define ASC_CNFG1_SRD          0x40
-#define ASC_CNFG1_P_TEST       0x20
-#define ASC_CNFG1_P_CHECK      0x10
-#define ASC_CNFG1_TEST         0x08
-#define ASC_CNFG1_MY_BUS_ID    0x07
-
-/*
- * CCF register
- */
-
-#define        ASC_CCF(clk)            ((((clk) - 1) / 5) + 1)
-
-/*
- * Test register
- */
-
-#define ASC_TEST_XXXX          0xf8
-#define ASC_TEST_HI_Z          0x04
-#define ASC_TEST_I             0x02
-#define ASC_TEST_T             0x01
-
-/*
- * Configuration 2
- */
-
-#define ASC_CNFG2_RFB          0x80
-#define ASC_CNFG2_EPL          0x40
-#define ASC_CNFG2_EBC          0x20
-#define ASC_CNFG2_DREQ_HIZ     0x10
-#define ASC_CNFG2_SCSI2                0x08
-#define ASC_CNFG2_BPA          0x04
-#define ASC_CNFG2_RPE          0x02
-#define ASC_CNFG2_DPE          0x01
-
-/*
- * Configuration 3
- */
-
-#define ASC_CNFG3_RESERVED     0xf8
-#define ASC_CNFG3_SRB          0x04
-#define ASC_CNFG3_ALT_DMA      0x02
-#define ASC_CNFG3_T8           0x01
-
-#define        ST_MASK 0x3e
diff --git a/sys/arch/pica/dev/com.c b/sys/arch/pica/dev/com.c
deleted file mode 100644 (file)
index 449e973..0000000
+++ /dev/null
@@ -1,1003 +0,0 @@
-/*     $NetBSD: com.c,v 1.61 1995/07/04 06:47:18 mycroft Exp $ */
-
-/*-
- * Copyright (c) 1993, 1994, 1995 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.
- *
- *     @(#)com.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/proc.h>
-#include <sys/user.h>
-#include <sys/conf.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 <machine/cpu.h>
-#include <machine/autoconf.h>
-#include <machine/pio.h>
-#include <pica/pica/pica.h>
-
-#include <dev/isa/comreg.h>
-#include <dev/ic/ns16550reg.h>
-
-#define        COM_IBUFSIZE    (2 * 256)
-#define        COM_IHIGHWATER  ((3 * COM_IBUFSIZE) / 4)
-
-struct com_softc {
-       struct device sc_dev;
-       struct tty *sc_tty;
-
-       int sc_overflows;
-       int sc_floods;
-       int sc_errors;
-
-       long    sc_iobase;
-       u_char sc_hwflags;
-#define        COM_HW_NOIEN    0x01
-#define        COM_HW_FIFO     0x02
-#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;
-       u_char sc_dtr;
-
-       u_char *sc_ibuf, *sc_ibufp, *sc_ibufhigh, *sc_ibufend;
-       u_char sc_ibufs[2][COM_IBUFSIZE];
-};
-
-int commatch __P((struct device *, void *, void *));
-void comattach __P((struct device *, struct device *, void *));
-int comopen __P((dev_t, int, int, struct proc *));
-int comclose __P((dev_t, int, int, struct proc *));
-void comdiag __P((void *));
-int comintr __P((void *));
-void compoll __P((void *));
-int comparam __P((struct tty *, struct termios *));
-void comstart __P((struct tty *));
-
-struct cfattach com_ca = {
-       sizeof(struct com_softc), commatch, comattach
-};
-struct cfdriver com_cd = {
-       NULL, "com", DV_TTY, NULL, 0
-};
-
-int    comdefaultrate = TTYDEF_SPEED;
-#ifdef COMCONSOLE
-int    comconsole = COMCONSOLE;
-#else
-int    comconsole = -1;
-#endif
-int    comconsinit;
-int    commajor;
-int    comsopen = 0;
-int    comevents = 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))
-
-#define        bis(c, b)       do { const register int com_ad = (c); \
-                            outb(com_ad, inb(com_ad) | (b)); } while(0)
-#define        bic(c, b)       do { const register int com_ad = (c); \
-                            outb(com_ad, inb(com_ad) & ~(b)); } while(0)
-
-int
-comspeed(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
-commatch1(iobase)
-       long iobase;
-{
-
-       /* force access to id reg */
-       outb(iobase + com_cfcr, 0);
-       outb(iobase + com_iir, 0);
-       if (inb(iobase + com_iir) & 0x38)
-               return 0;
-
-       return 1;
-}
-
-int
-commatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata, *aux;
-{
-       struct confargs *ca = aux;
-       long iobase;
-
-       /* Make shure that we're looking for this type of device. */
-       if(!BUS_MATCHNAME(ca, "com"))
-               return(0);
-
-       iobase = (long)BUS_CVTADDR(ca);
-       if (!commatch1(iobase))
-               return (0);
-
-       return (1);
-}
-
-void
-comattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct com_softc *sc = (void *)self;
-       struct confargs *ca = aux;
-       struct cfdata *cf = sc->sc_dev.dv_cfdata;
-       long iobase;
-       struct tty *tp;
-
-       sc->sc_iobase = iobase = (long)BUS_CVTADDR(ca);
-       sc->sc_hwflags = cf->cf_flags & COM_HW_NOIEN;
-       sc->sc_swflags = 0;
-
-       if (sc->sc_dev.dv_unit == comconsole)
-               delay(1000);
-
-       /* look for a NS 16550AF UART with FIFOs */
-       outb(iobase + com_fifo,
-           FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_14);
-       delay(100);
-       if ((inb(iobase + com_iir) & IIR_FIFO_MASK) == IIR_FIFO_MASK)
-               if ((inb(iobase + com_fifo) & FIFO_TRIGGER_14) == FIFO_TRIGGER_14) {
-                       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");
-       outb(iobase + com_fifo, 0);
-
-       /* disable interrupts */
-       outb(iobase + com_ier, 0);
-       outb(iobase + com_mcr, 0);
-
-       BUS_INTR_ESTABLISH(ca, comintr, (void *)(long)sc);
-
-#ifdef KGDB
-       if (kgdb_dev == makedev(commajor, unit)) {
-               if (comconsole == unit)
-                       kgdb_dev = -1;  /* can't debug over console port */
-               else {
-                       (void) cominit(unit, 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
-
-       if (sc->sc_dev.dv_unit == comconsole) {
-               /*
-                * Need to reset baud rate, etc. of next print so reset
-                * comconsinit.  Also make sure console is always "hardwired".
-                */
-               comconsinit = 0;
-               sc->sc_hwflags |= COM_HW_CONSOLE;
-               sc->sc_swflags |= COM_SW_SOFTCAR;
-       }
-}
-
-int
-comopen(dev, flag, mode, p)
-       dev_t dev;
-       int flag, mode;
-       struct proc *p;
-{
-       int unit = COMUNIT(dev);
-       struct com_softc *sc;
-       long iobase;
-       struct tty *tp;
-       int s;
-       int error = 0;
-       if (unit >= com_cd.cd_ndevs)
-               return ENXIO;
-       sc = com_cd.cd_devs[unit];
-       if (!sc)
-               return ENXIO;
-
-       if (!sc->sc_tty)
-               tp = sc->sc_tty = ttymalloc();
-       else
-               tp = sc->sc_tty;
-
-       tp->t_oproc = comstart;
-       tp->t_param = comparam;
-       tp->t_dev = dev;
-       if ((tp->t_state & TS_ISOPEN) == 0) {
-               tp->t_state |= TS_WOPEN;
-               ttychars(tp);
-               tp->t_iflag = TTYDEF_IFLAG;
-               tp->t_oflag = TTYDEF_OFLAG;
-               tp->t_cflag = TTYDEF_CFLAG;
-               if (sc->sc_swflags & COM_SW_CLOCAL)
-                       tp->t_cflag |= CLOCAL;
-               if (sc->sc_swflags & COM_SW_CRTSCTS)
-                       tp->t_cflag |= CRTSCTS;
-               if (sc->sc_swflags & COM_SW_MDMBUF)
-                       tp->t_cflag |= MDMBUF;
-               tp->t_lflag = TTYDEF_LFLAG;
-               tp->t_ispeed = tp->t_ospeed = comdefaultrate;
-
-               s = spltty();
-
-               comparam(tp, &tp->t_termios);
-               ttsetwater(tp);
-
-               if (comsopen++ == 0)
-                       timeout(compoll, 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;
-
-               iobase = sc->sc_iobase;
-               /* Set the FIFO threshold based on the receive speed. */
-               if (sc->sc_hwflags & COM_HW_FIFO)
-                       outb(iobase + 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 (inb(iobase + com_lsr) & LSR_RXRDY)
-                       (void) inb(iobase + com_data);
-               /* you turn me on, baby */
-               sc->sc_mcr = MCR_DTR | MCR_RTS;
-               if ((sc->sc_hwflags & COM_HW_NOIEN) == 0)
-                       sc->sc_mcr |= MCR_IENABLE;
-               outb(iobase + com_mcr, sc->sc_mcr);
-               outb(iobase + com_ier,
-                   IER_ERXRDY | IER_ETXRDY | IER_ERLS | IER_EMSC);
-
-               sc->sc_msr = inb(iobase + com_msr);
-               if (sc->sc_swflags & COM_SW_SOFTCAR || sc->sc_msr & MSR_DCD ||
-                   tp->t_cflag & MDMBUF)
-                       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) {
-               return EBUSY;
-       } else
-               s = spltty();
-
-       /* wait for carrier if necessary */
-       if ((flag & O_NONBLOCK) == 0)
-               while ((tp->t_cflag & CLOCAL) == 0 &&
-                   (tp->t_state & TS_CARR_ON) == 0) {
-                       tp->t_state |= TS_WOPEN;
-                       error = ttysleep(tp, (caddr_t)&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
-comclose(dev, flag, mode, p)
-       dev_t dev;
-       int flag, mode;
-       struct proc *p;
-{
-       int unit = COMUNIT(dev);
-       struct com_softc *sc = com_cd.cd_devs[unit];
-       struct tty *tp = sc->sc_tty;
-       long iobase = sc->sc_iobase;
-       int s;
-
-       /* XXX This is for cons.c. */
-       if ((tp->t_state & TS_ISOPEN) == 0)
-               return 0;
-
-       (*linesw[tp->t_line].l_close)(tp, flag);
-       s = spltty();
-       bic(iobase + com_cfcr, LCR_SBREAK);
-       outb(iobase + com_ier, 0);
-       if (tp->t_cflag & HUPCL &&
-           (sc->sc_swflags & COM_SW_SOFTCAR) == 0) {
-               /* XXX perhaps only clear DTR */
-               outb(iobase + com_mcr, 0);
-       }
-       tp->t_state &= ~(TS_BUSY | TS_FLUSH);
-       if (--comsopen == 0)
-               untimeout(compoll, NULL);
-       splx(s);
-       ttyclose(tp);
-#ifdef notyet /* XXXX */
-       if (unit != comconsole) {
-               ttyfree(tp);
-               sc->sc_tty = 0;
-       }
-#endif
-       return 0;
-}
-int
-comread(dev, uio, flag)
-       dev_t dev;
-       struct uio *uio;
-       int flag;
-{
-       struct com_softc *sc = com_cd.cd_devs[COMUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-       return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
-}
-int
-comwrite(dev, uio, flag)
-       dev_t dev;
-       struct uio *uio;
-       int flag;
-{
-       struct com_softc *sc = com_cd.cd_devs[COMUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-       return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
-}
-
-struct tty *
-comtty(dev)
-       dev_t dev;
-{
-       struct com_softc *sc = com_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 (data & TIOCM_DTR)
-               m |= MCR_DTR;
-       if (data & TIOCM_RTS)
-               m |= MCR_RTS;
-       return m;
-}
-
-int
-comioctl(dev, cmd, data, flag, p)
-       dev_t dev;
-       u_long cmd;
-       caddr_t data;
-       int flag;
-       struct proc *p;
-{
-       int unit = COMUNIT(dev);
-       struct com_softc *sc = com_cd.cd_devs[unit];
-       struct tty *tp = sc->sc_tty;
-       long iobase = sc->sc_iobase;
-       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:
-               bis(iobase + com_cfcr, LCR_SBREAK);
-               break;
-       case TIOCCBRK:
-               bic(iobase + com_cfcr, LCR_SBREAK);
-               break;
-       case TIOCSDTR:
-               outb(iobase + com_mcr, sc->sc_mcr |= sc->sc_dtr);
-               break;
-       case TIOCCDTR:
-               outb(iobase + com_mcr, sc->sc_mcr &= ~sc->sc_dtr);
-               break;
-       case TIOCMSET:
-               sc->sc_mcr &= ~(MCR_DTR | MCR_RTS);
-       case TIOCMBIS:
-               outb(iobase + com_mcr,
-                   sc->sc_mcr |= tiocm_xxx2mcr(*(int *)data));
-               break;
-       case TIOCMBIC:
-               outb(iobase + com_mcr,
-                   sc->sc_mcr &= ~tiocm_xxx2mcr(*(int *)data));
-               break;
-       case TIOCMGET: {
-               u_char m;
-               int bits = 0;
-
-               m = sc->sc_mcr;
-               if (m & MCR_DTR)
-                       bits |= TIOCM_DTR;
-               if (m & MCR_RTS)
-                       bits |= TIOCM_RTS;
-               m = sc->sc_msr;
-               if (m & MSR_DCD)
-                       bits |= TIOCM_CD;
-               if (m & MSR_CTS)
-                       bits |= TIOCM_CTS;
-               if (m & MSR_DSR)
-                       bits |= TIOCM_DSR;
-               if (m & (MSR_RI | MSR_TERI))
-                       bits |= TIOCM_RI;
-               if (inb(iobase + com_ier))
-                       bits |= TIOCM_LE;
-               *(int *)data = bits;
-               break;
-       }
-       case TIOCGFLAGS: {
-               int bits = 0;
-
-               if (sc->sc_swflags & COM_SW_SOFTCAR)
-                       bits |= TIOCFLAG_SOFTCAR;
-               if (sc->sc_swflags & COM_SW_CLOCAL)
-                       bits |= TIOCFLAG_CLOCAL;
-               if (sc->sc_swflags & COM_SW_CRTSCTS)
-                       bits |= TIOCFLAG_CRTSCTS;
-               if (sc->sc_swflags & COM_SW_MDMBUF)
-                       bits |= TIOCFLAG_MDMBUF;
-
-               *(int *)data = bits;
-               break;
-       }
-       case TIOCSFLAGS: {
-               int userbits, driverbits = 0;
-
-               error = suser(p->p_ucred, &p->p_acflag); 
-               if (error != 0)
-                       return(EPERM); 
-
-               userbits = *(int *)data;
-               if ((userbits & TIOCFLAG_SOFTCAR) ||
-                   (sc->sc_hwflags & COM_HW_CONSOLE))
-                       driverbits |= COM_SW_SOFTCAR;
-               if (userbits & TIOCFLAG_CLOCAL)
-                       driverbits |= COM_SW_CLOCAL;
-               if (userbits & TIOCFLAG_CRTSCTS)
-                       driverbits |= COM_SW_CRTSCTS;
-               if (userbits & TIOCFLAG_MDMBUF)
-                       driverbits |= COM_SW_MDMBUF;
-
-               sc->sc_swflags = driverbits;
-               break;
-       }
-       default:
-               return ENOTTY;
-       }
-
-       return 0;
-}
-
-int
-comparam(tp, t)
-       struct tty *tp;
-       struct termios *t;
-{
-       struct com_softc *sc = com_cd.cd_devs[COMUNIT(tp->t_dev)];
-       long iobase = sc->sc_iobase;
-       int ospeed = comspeed(t->c_ospeed);
-       u_char cfcr;
-       tcflag_t oldcflag;
-       int s;
-
-       /* check requested parameters */
-       if (ospeed < 0 || (t->c_ispeed && t->c_ispeed != t->c_ospeed))
-               return EINVAL;
-
-       switch (t->c_cflag & CSIZE) {
-       case CS5:
-               cfcr = LCR_5BITS;
-               break;
-       case CS6:
-               cfcr = LCR_6BITS;
-               break;
-       case CS7:
-               cfcr = LCR_7BITS;
-               break;
-       case CS8:
-               cfcr = LCR_8BITS;
-               break;
-       }
-       if (t->c_cflag & PARENB) {
-               cfcr |= LCR_PENAB;
-               if ((t->c_cflag & PARODD) == 0)
-                       cfcr |= LCR_PEVEN;
-       }
-       if (t->c_cflag & CSTOPB)
-               cfcr |= LCR_STOPB;
-
-       s = spltty();
-
-       if (ospeed == 0)
-               outb(iobase + com_mcr, sc->sc_mcr &= ~MCR_DTR);
-
-       /*
-        * Set the FIFO threshold based on the receive speed, if we are
-        * changing it.
-        */
-       if (tp->t_ispeed != t->c_ispeed) {
-               if (sc->sc_hwflags & COM_HW_FIFO)
-                       outb(iobase + com_fifo,
-                           FIFO_ENABLE |
-                           (t->c_ispeed <= 1200 ? FIFO_TRIGGER_1 : FIFO_TRIGGER_8));
-       }
-
-       if (ospeed != 0) {
-               outb(iobase + com_cfcr, cfcr | LCR_DLAB);
-               outb(iobase + com_dlbl, ospeed);
-               outb(iobase + com_dlbh, ospeed >> 8);
-               outb(iobase + com_cfcr, cfcr);
-               outb(iobase + com_mcr, sc->sc_mcr |= MCR_DTR);
-       } else
-               outb(iobase + com_cfcr, cfcr);
-
-       /* When not using CRTSCTS, RTS follows DTR. */
-       if ((t->c_cflag & CRTSCTS) == 0) {
-               if (sc->sc_mcr & MCR_DTR) {
-                       if ((sc->sc_mcr & MCR_RTS) == 0)
-                               outb(iobase + com_mcr, sc->sc_mcr |= MCR_RTS);
-               } else {
-                       if (sc->sc_mcr & MCR_RTS)
-                               outb(iobase + com_mcr, sc->sc_mcr &= ~MCR_RTS);
-               }
-               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 ((sc->sc_msr & MSR_DCD) == 0 &&
-           (sc->sc_swflags & COM_SW_SOFTCAR) == 0 &&
-           (oldcflag & MDMBUF) != (tp->t_cflag & MDMBUF) &&
-           (*linesw[tp->t_line].l_modem)(tp, 0) == 0) {
-               outb(iobase + com_mcr, sc->sc_mcr &= ~sc->sc_dtr);
-       }
-
-       splx(s);
-       return 0;
-}
-
-void
-comstart(tp)
-       struct tty *tp;
-{
-       struct com_softc *sc = com_cd.cd_devs[COMUNIT(tp->t_dev)];
-       long iobase = sc->sc_iobase;
-       int s;
-
-       s = spltty();
-       if (tp->t_state & (TS_TTSTOP | TS_BUSY))
-               goto out;
-       if ((tp->t_cflag & CRTSCTS) != 0 &&
-           (sc->sc_msr & MSR_CTS) == 0)
-               goto out;
-       if (tp->t_outq.c_cc <= tp->t_lowat) {
-               if (tp->t_state & TS_ASLEEP) {
-                       tp->t_state &= ~TS_ASLEEP;
-                       wakeup((caddr_t)&tp->t_outq);
-               }
-               if (tp->t_outq.c_cc == 0)
-                       goto out;
-               selwakeup(&tp->t_wsel);
-       }
-       tp->t_state |= TS_BUSY;
-       if (sc->sc_hwflags & COM_HW_FIFO) {
-               u_char buffer[16], *cp = buffer;
-               int n = q_to_b(&tp->t_outq, cp, sizeof buffer);
-               do {
-                       outb(iobase + com_data, *cp++);
-               } while (--n);
-       } else
-               outb(iobase + com_data, getc(&tp->t_outq));
-out:
-       splx(s);
-}
-
-/*
- * Stop output on a line.
- */
-void
-comstop(tp, flag)
-       struct tty *tp;
-{
-       int s;
-
-       s = spltty();
-       if (tp->t_state & TS_BUSY)
-               if ((tp->t_state & TS_TTSTOP) == 0)
-                       tp->t_state |= TS_FLUSH;
-       splx(s);
-}
-
-void
-comdiag(arg)
-       void *arg;
-{
-       struct com_softc *sc = arg;
-       int overflows, floods;
-       int s;
-
-       s = spltty();
-       sc->sc_errors = 0;
-       overflows = sc->sc_overflows;
-       sc->sc_overflows = 0;
-       floods = sc->sc_floods;
-       sc->sc_floods = 0;
-       splx(s);
-
-       log(LOG_WARNING, "%s: %d silo overflow%s, %d ibuf overflow%s\n",
-           sc->sc_dev.dv_xname,
-           overflows, overflows == 1 ? "" : "s",
-           floods, floods == 1 ? "" : "s");
-}
-
-void
-compoll(arg)
-       void *arg;
-{
-       int unit;
-       struct com_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 (comevents == 0) {
-               splx(s);
-               goto out;
-       }
-       comevents = 0;
-       splx(s);
-
-       for (unit = 0; unit < com_cd.cd_ndevs; unit++) {
-               sc = com_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 || (tp->t_state & TS_ISOPEN) == 0) {
-                       splx(s);
-                       continue;
-               }
-
-               if ((tp->t_cflag & CRTSCTS) != 0 &&
-                   (sc->sc_mcr & MCR_RTS) == 0)
-                       outb(sc->sc_iobase + com_mcr, sc->sc_mcr |= MCR_RTS);
-
-               splx(s);
-
-               while (ibufp < ibufend) {
-                       c = *ibufp++;
-                       if (*ibufp & LSR_OE) {
-                               sc->sc_overflows++;
-                               if (sc->sc_errors++ == 0)
-                                       timeout(comdiag, 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(compoll, NULL, 1);
-}
-
-int
-comintr(arg)
-       void *arg;
-{
-       struct com_softc *sc = arg;
-       long iobase = sc->sc_iobase;
-       struct tty *tp;
-       u_char lsr, data, msr, delta;
-
-       if (inb(iobase + com_iir) & IIR_NOPEND)
-               return (0);
-
-       tp = sc->sc_tty;
-
-       for (;;) {
-               lsr = inb(iobase + com_lsr);
-
-               if (lsr & LSR_RCV_MASK) {
-                       register u_char *p = sc->sc_ibufp;
-
-                       comevents = 1;
-                       do {
-                               if ((lsr & LSR_BI) != 0) {
-#ifdef DDB
-                                       if (sc->sc_dev.dv_unit == comconsole) {
-                                               Debugger();
-                                               goto next;
-                                       }
-#endif
-                                       data = '\0';
-                               } else
-                                       data = inb(iobase + com_data);
-                               if (p >= sc->sc_ibufend) {
-                                       sc->sc_floods++;
-                                       if (sc->sc_errors++ == 0)
-                                               timeout(comdiag, sc, 60 * hz);
-                               } else {
-                                       *p++ = data;
-                                       *p++ = lsr;
-                                       if (p == sc->sc_ibufhigh &&
-                                           (tp->t_cflag & CRTSCTS) != 0)
-                                               outb(iobase + com_mcr,
-                                                    sc->sc_mcr &= ~MCR_RTS);
-                               }
-                       next:
-                               lsr = inb(iobase + com_lsr);
-                       } while (lsr & LSR_RCV_MASK);
-
-                       sc->sc_ibufp = p;
-               }
-
-               if (lsr & LSR_TXRDY && (tp->t_state & TS_BUSY) != 0) {
-                       tp->t_state &= ~TS_BUSY;
-                       if (tp->t_state & TS_FLUSH)
-                               tp->t_state &= ~TS_FLUSH;
-                       else
-                               (*linesw[tp->t_line].l_start)(tp);
-               }
-
-               msr = inb(iobase + com_msr);
-
-               if (msr != sc->sc_msr) {
-                       delta = msr ^ sc->sc_msr;
-                       sc->sc_msr = msr;
-                       if ((delta & MSR_DCD) != 0 &&
-                           (sc->sc_swflags & COM_SW_SOFTCAR) == 0 &&
-                           (*linesw[tp->t_line].l_modem)(tp, (msr & MSR_DCD) != 0) == 0) {
-                               outb(iobase + com_mcr, sc->sc_mcr &= ~sc->sc_dtr);
-                       }
-                       if ((delta & msr & MSR_CTS) != 0 &&
-                           (tp->t_cflag & CRTSCTS) != 0) {
-                               /* the line is up and we want to do rts/cts flow control */
-                               (*linesw[tp->t_line].l_start)(tp);
-                       }
-               }
-
-               if (inb(iobase + com_iir) & IIR_NOPEND)
-                       return (1);
-       }
-}
-
-/*
- * Following are all routines needed for COM to act as console
- */
-#include <dev/cons.h>
-
-#undef  CONADDR                /* This is stupid but using devs before config .. */
-#define CONADDR PICA_SYS_COM1
-
-void
-comcnprobe(cp)
-       struct consdev *cp;
-{
-
-       if (!commatch1(CONADDR)) {
-               cp->cn_pri = CN_DEAD;
-               return;
-       }
-
-       /* locate the major number */
-       for (commajor = 0; commajor < nchrdev; commajor++)
-               if (cdevsw[commajor].d_open == comopen)
-                       break;
-
-       /* initialize required fields */
-       cp->cn_dev = makedev(commajor, CONUNIT);
-#ifdef COMCONSOLE
-       cp->cn_pri = CN_REMOTE;         /* Force a serial port console */
-#else
-       cp->cn_pri = CN_NORMAL;
-#endif
-}
-
-void
-comcninit(cp)
-       struct consdev *cp;
-{
-
-       cominit(CONUNIT, comdefaultrate);
-       comconsole = CONUNIT;
-       comconsinit = 0;
-}
-
-cominit(unit, rate)
-       int unit, rate;
-{
-       int s = splhigh();
-       long iobase = CONADDR;
-       u_char stat;
-
-       outb(iobase + com_cfcr, LCR_DLAB);
-       rate = comspeed(comdefaultrate);
-       outb(iobase + com_dlbl, rate);
-       outb(iobase + com_dlbh, rate >> 8);
-       outb(iobase + com_cfcr, LCR_8BITS);
-       outb(iobase + com_ier, IER_ERXRDY | IER_ETXRDY);
-       outb(iobase + com_fifo, FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_4);
-       stat = inb(iobase + com_iir);
-       splx(s);
-}
-
-comcngetc(dev)
-       dev_t dev;
-{
-       int s = splhigh();
-       long iobase = CONADDR;
-       u_char stat, c;
-
-       while (((stat = inb(iobase + com_lsr)) & LSR_RXRDY) == 0)
-               ;
-       c = inb(iobase + com_data);
-       stat = inb(iobase + com_iir);
-       splx(s);
-       return c;
-}
-
-/*
- * Console kernel output character routine.
- */
-void
-comcnputc(dev, c)
-       dev_t dev;
-       int c;
-{
-       int s = splhigh();
-       long iobase = CONADDR;
-       u_char stat;
-       register int timo;
-
-#ifdef KGDB
-       if (dev != kgdb_dev)
-#endif
-       if (comconsinit == 0) {
-               (void) cominit(COMUNIT(dev), comdefaultrate);
-               comconsinit = 1;
-       }
-       /* wait for any pending transmission to finish */
-       timo = 50000;
-       while (((stat = inb(iobase + com_lsr)) & LSR_TXRDY) == 0 && --timo)
-               ;
-       outb(iobase + com_data, c);
-       /* wait for this transmission to complete */
-       timo = 1500000;
-       while (((stat = inb(iobase + com_lsr)) & LSR_TXRDY) == 0 && --timo)
-               ;
-       /* clear any interrupts generated by this transmission */
-       stat = inb(iobase + com_iir);
-       splx(s);
-}
-
-void
-comcnpollc(dev, on)
-       dev_t dev;
-       int on;
-{
-
-}
diff --git a/sys/arch/pica/dev/dma.c b/sys/arch/pica/dev/dma.c
deleted file mode 100644 (file)
index c2e744e..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (c) 1992, 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.
- *
- *     from: @(#)rz.c  8.1 (Berkeley) 7/29/93
- *      $Id: dma.c,v 1.5 1996/06/06 23:06:26 deraadt Exp $
- */
-
-/*
- * PICA system dma driver. Handles resource allocation and
- * logical (viritual) address remaping. 
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-
-#include <vm/vm.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-
-#include <machine/cpu.h>
-#include <machine/autoconf.h>
-#include <machine/pte.h>
-#include <machine/pio.h>
-
-#include <scsi/scsi_all.h>
-#include <scsi/scsiconf.h>
-
-#include <pica/pica/pica.h>
-#include <pica/dev/dma.h>
-
-
-extern vm_map_t phys_map;
-
-#define dma_pte_to_pa(x)       (((x) - first_dma_pte) * PICA_DMA_PAGE_SIZE)
-
-dma_pte_t *free_dma_pte;       /* Pointer to free dma pte list */
-dma_pte_t *first_dma_pte;      /* Pointer to first dma pte */
-
-/*
- *  Initialize the dma mapping register area and pool.
- */
-void
-picaDmaInit()
-{
-       int map = PICA_TL_BASE;
-
-       MachFlushCache();       /* Make shure no map entries are cached */
-
-       bzero((char *)map, PICA_TL_SIZE);
-       free_dma_pte = (dma_pte_t *)map;
-       first_dma_pte = (dma_pte_t *)map;
-       free_dma_pte->queue.next = NULL;
-       free_dma_pte->queue.size = PICA_TL_SIZE / sizeof(dma_pte_t);
-
-       out32(PICA_SYS_TL_BASE, UNCACHED_TO_PHYS(map));
-       out32(PICA_SYS_TL_LIMIT, PICA_TL_SIZE);
-       out32(PICA_SYS_TL_IVALID, 0);
-}
-
-/*
- *  Allocate an array of 'size' dma pte entrys.
- *  Return address to first pte.
- */
-void
-picaDmaTLBAlloc(dma_softc_t *dma)
-{
-       dma_pte_t *list;
-       dma_pte_t *found;
-       int size;
-       int s;
-
-       found = NULL;
-       size = dma->pte_size;
-       do {
-               list = (dma_pte_t *)&free_dma_pte;
-               s = splhigh();
-               while(list) {
-                       if(list->queue.next->queue.size >= size) {
-                               found = list->queue.next;
-                               break;
-                       }
-               }
-/*XXX Wait for release wakeup */
-       } while(found == NULL);
-       if(found->queue.size == size) {
-               list->queue.next = found->queue.next;
-       }
-       else {
-               list->queue.next = found + size;
-               list = found + size;
-               list->queue.next = found->queue.next;
-               list->queue.size = found->queue.size - size;
-       }
-       splx(s);
-       dma->pte_base = found;
-       dma->dma_va = dma_pte_to_pa(found);
-}
-
-/*
- *  Free an array of dma pte entrys.
- */
-void
-picaDmaTLBFree(dma_softc_t *dma)
-{
-       dma_pte_t *list;
-       dma_pte_t *entry;
-       int        size;
-       int s;
-
-       s = splhigh();
-       entry = dma->pte_base;
-       size = dma->pte_size;
-       entry->queue.next = NULL;
-       entry->queue.size = size;
-       if(free_dma_pte == NULL || entry < free_dma_pte) {
-               list = entry;
-               list->queue.next = free_dma_pte;
-               free_dma_pte = entry;
-       }
-       else {
-               list = free_dma_pte;
-               while(list < entry && list->queue.next != NULL) {
-                       if(list + list->queue.size == entry) {
-                               list->queue.size += size;
-                               break;
-                       }
-                       else if(list->queue.next == NULL) {
-                               list->queue.next = entry;
-                               break;
-                       }
-                       else
-                               list = list->queue.next;
-               }
-       }
-       if(list->queue.next != NULL) {
-               if(list + list->queue.size == list->queue.next) {
-                       list->queue.size += list->queue.next->queue.size;
-                       list->queue.next = list->queue.next->queue.next;
-               }
-       }
-       splx(s);
-/*XXX Wakeup waiting */
-}
-
-/*
- *  Map up a viritual address space in dma space given by
- *  the dma control structure and invalidate dma TLB cache.
- */
-
-picaDmaTLBMap(dma_softc_t *sc)
-{
-       vm_offset_t pa;
-       vm_offset_t va;
-       dma_pte_t *dma_pte;
-       int nbytes;
-
-       va = sc->next_va - sc->dma_va;
-       dma_pte = sc->pte_base + (va / PICA_DMA_PAGE_SIZE);
-       nbytes = dma_page_round(sc->next_size + dma_page_offs(va));
-       va = sc->req_va;
-       while(nbytes > 0) {
-               if(va < VM_MIN_KERNEL_ADDRESS) {
-                       pa = CACHED_TO_PHYS(va);
-               }
-               else {
-                       pa = pmap_extract(vm_map_pmap(phys_map), va);
-               }
-               pa &= PICA_DMA_PAGE_NUM;
-               if(pa == 0)
-                       panic("picaDmaTLBMap: null page frame");
-               dma_pte->entry.lo_addr = pa;
-               dma_pte->entry.hi_addr = 0;
-               dma_pte++;
-               va += PICA_DMA_PAGE_SIZE;
-               nbytes -= PICA_DMA_PAGE_SIZE;
-       }
-}
-
-/*
- *  Start local dma channel.
- */
-void
-picaDmaStart(sc, addr, size, datain)
-       struct dma_softc *sc;
-       char    *addr;
-       size_t  size;
-       int     datain;
-{
-       int mode;
-       pDmaReg regs = sc->dma_reg;
-
-       /* Halt DMA */
-       regs->dma_enab = 0;
-       regs->dma_mode = 0;
-
-       /* Remap request space va into dma space va */
-
-       sc->req_va = (int)addr;
-       sc->next_va = sc->dma_va + dma_page_offs(addr);
-       sc->next_size = size;
-
-       /* Map up the request viritual dma space */
-       picaDmaTLBMap(sc);
-       out32(PICA_SYS_TL_IVALID, 0);   /* Flush dma map cache */
-
-       /* Load new transfer parameters */
-       regs->dma_addr = sc->next_va;
-       regs->dma_count = sc->next_size;
-       regs->dma_mode = sc->mode & PICA_DMA_MODE;
-
-       sc->sc_active = 1;
-       if(datain == DMA_FROM_DEV) {
-               sc->mode &= ~DMA_DIR_WRITE;
-               regs->dma_enab = PICA_DMA_ENAB_RUN | PICA_DMA_ENAB_READ;
-       }
-       else {
-               sc->mode |= DMA_DIR_WRITE;
-               regs->dma_enab = PICA_DMA_ENAB_RUN | PICA_DMA_ENAB_WRITE;
-       }
-       wbflush();
-}
-
-/*
- *  Set up DMA mapper for external dma.
- *  Used by ISA dma and SONIC
- */
-void
-picaDmaMap(sc, addr, size, offset)
-       struct dma_softc *sc;
-       char    *addr;
-       size_t  size;
-       int     offset;
-{
-       /* Remap request space va into dma space va */
-
-       sc->req_va = (int)addr;
-       sc->next_va = sc->dma_va + dma_page_offs(addr) + offset;
-       sc->next_size = size;
-
-       /* Map up the request viritual dma space */
-       picaDmaTLBMap(sc);
-}
-
-/*
- *  Prepare for new dma by flushing
- */
-void
-picaDmaFlush(sc, addr, size, datain)
-       struct dma_softc *sc;
-       char    *addr;
-       size_t  size;
-       int     datain;
-{
-       out32(PICA_SYS_TL_IVALID, 0);   /* Flush dma map cache */
-}
-
-/*
- *  Stop/Reset a DMA channel
- */
-void
-picaDmaReset(dma_softc_t *sc)
-{
-       pDmaReg regs = sc->dma_reg;
-
-       /* Halt DMA */
-       regs->dma_enab = 0;
-       regs->dma_mode = 0;
-       sc->sc_active = 0;
-}
-
-/*
- *  End dma operation, return byte count left.
- */
-int
-picaDmaEnd(dma_softc_t *sc)
-{
-       pDmaReg regs = sc->dma_reg;
-       int res;
-
-       res = regs->dma_count = sc->next_size;
-
-       /* Halt DMA */
-       regs->dma_enab = 0;
-       regs->dma_mode = 0;
-       sc->sc_active = 0;
-
-       return res;
-}
-
-/*
- *  Null call rathole!
- */
-void
-picaDmaNull(dma_softc_t *sc)
-{
-       pDmaReg regs = sc->dma_reg;
-
-       printf("picaDmaNull called\n");
-}
-
-/*
- *  dma_init..
- *     Called from asc to set up dma
- */
-void
-asc_dma_init(dma_softc_t *sc)
-{
-       sc->reset = picaDmaReset;
-       sc->enintr = picaDmaNull;
-       sc->start = picaDmaStart;
-       sc->map = picaDmaMap;
-       sc->isintr = (int(*)())picaDmaNull;
-       sc->intr = (int(*)())picaDmaNull;
-       sc->end = picaDmaEnd;
-
-       sc->dma_reg = (pDmaReg)PICA_SYS_DMA0_REGS;
-       sc->pte_size = 32;
-       sc->mode = PICA_DMA_MODE_160NS | PICA_DMA_MODE_16;
-       picaDmaTLBAlloc(sc);
-}
-/*
- *  dma_init..
- *     Called from fdc to set up dma
- */
-void
-fdc_dma_init(dma_softc_t *sc)
-{
-       sc->reset = picaDmaReset;
-       sc->enintr = picaDmaNull;
-       sc->start = picaDmaStart;
-       sc->map = picaDmaMap;
-       sc->isintr = (int(*)())picaDmaNull;
-       sc->intr = (int(*)())picaDmaNull;
-       sc->end = picaDmaEnd;
-
-       sc->dma_reg = (pDmaReg)PICA_SYS_DMA1_REGS;
-       sc->pte_size = 32;
-       sc->mode = PICA_DMA_MODE_160NS | PICA_DMA_MODE_8;
-       picaDmaTLBAlloc(sc);
-}
-/*
- *  dma_init..
- *     Called from sonic to set up dma
- */
-void
-sn_dma_init(dma_softc_t *sc, int pages)
-{
-       sc->reset = picaDmaNull;
-       sc->enintr = picaDmaNull;
-       sc->start = picaDmaFlush;
-       sc->map = picaDmaMap;
-       sc->isintr = (int(*)())picaDmaNull;
-       sc->intr = (int(*)())picaDmaNull;
-       sc->end = (int(*)())picaDmaNull;
-
-       sc->dma_reg = (pDmaReg)NULL;
-       sc->pte_size = pages;
-       sc->mode = 0;
-       picaDmaTLBAlloc(sc);
-}
diff --git a/sys/arch/pica/dev/dma.h b/sys/arch/pica/dev/dma.h
deleted file mode 100644 (file)
index 6961b65..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*-
- * Copyright (c) 1992, 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.
- *
- *     from: @(#)dma.h 8.1 (Berkeley) 6/10/93
- *      $Id: dma.h,v 1.4 1996/05/02 07:59:38 pefo Exp $
- */
-
-/*
- *     The PICA system has four dma channels capable of scatter/gather
- *     and full memory addressing. The maximum transfer length is 1Mb.
- *     Dma snopes the L2 cache so no precaution is required. However
- *     if L1 cache is cached 'write back' the processor is responible
- *     for flushing/invalidating it.
- *
- *     The dma mapper has up to 4096 page descriptors.
- */
-
-#define        PICA_TL_BASE    0xa0008000      /* Base of tl register area */
-#define        PICA_TL_SIZE    0x00008000      /* Size of tl register area */
-
-/*
- *  Hardware dma registers.
- */
-typedef volatile struct {
-       int             dma_mode;
-       int             pad1;
-       int             dma_enab;
-       int             pad2;
-       int             dma_count;
-       int             pad3;
-       vm_offset_t     dma_addr;
-       int             pad4;
-} DmaReg, *pDmaReg;
-
-#define        PICA_DMA_MODE_40NS      0x00    /* Device dma timing */
-#define        PICA_DMA_MODE_80NS      0x01    /* Device dma timing */
-#define        PICA_DMA_MODE_120NS     0x02    /* Device dma timing */
-#define        PICA_DMA_MODE_160NS     0x03    /* Device dma timing */
-#define        PICA_DMA_MODE_200NS     0x04    /* Device dma timing */
-#define        PICA_DMA_MODE_240NS     0x05    /* Device dma timing */
-#define        PICA_DMA_MODE_280NS     0x06    /* Device dma timing */
-#define        PICA_DMA_MODE_320NS     0x07    /* Device dma timing */
-#define        PICA_DMA_MODE_8         0x08    /* Device 8 bit  */
-#define        PICA_DMA_MODE_16        0x10    /* Device 16 bit */
-#define        PICA_DMA_MODE_32        0x18    /* Device 32 bit */
-#define        PICA_DMA_MODE_INT       0x20    /* Interrupt when done */
-#define        PICA_DMA_MODE_BURST     0x40    /* Burst mode (Rev 2 only) */
-#define PICA_DMA_MODE_FAST     0x80    /* Fast dma cycle (Rev 2 only) */
-#define PICA_DMA_MODE          0xff    /* Mode register bits */
-#define DMA_DIR_WRITE          0x100   /* Software direction status */
-#define DMA_DIR_READ           0x000   /* Software direction status */
-
-#define        PICA_DMA_ENAB_RUN       0x01    /* Enable dma */
-#define        PICA_DMA_ENAB_READ      0x00    /* Read from device */
-#define        PICA_DMA_ENAB_WRITE     0x02    /* Write to device */
-#define        PICA_DMA_ENAB_TC_IE     0x100   /* Terminal count int enable */
-#define        PICA_DMA_ENAB_ME_IE     0x200   /* Memory error int enable */
-#define        PICA_DMA_ENAB_TL_IE     0x400   /* Translation limit int enable */
-
-#define        PICA_DMA_COUNT_MASK     0x00fffff /* Byte count mask */
-#define        PICA_DMA_PAGE_NUM       0xffff000 /* Address page number */
-#define        PICA_DMA_PAGE_OFFS      0x0000fff /* Address page offset */
-#define        PICA_DMA_PAGE_SIZE      0x0001000 /* Address page size */
-
-
-/*
- *  Dma TLB entry
- */
-
-typedef union dma_pte {
-       struct {
-           vm_offset_t lo_addr;        /* Low part of translation addr */
-           vm_offset_t hi_addr;        /* High part of translation addr */
-       } entry;
-       struct bbb {
-           union dma_pte *next;        /* Next free translation entry */
-           int         size;           /* Number of consecutive free entrys */
-       } queue;
-} dma_pte_t;
-
-/*
- *  Structure used to control dma.
- */
-
-typedef struct dma_softc {
-       struct device   sc_dev;         /* use as a device */
-       struct esp_softc *sc_esp;
-       vm_offset_t     dma_va;         /* Viritual address for transfer */
-       int             req_va;         /* Original request va */
-       vm_offset_t     next_va;        /* Value to program into dma regs */
-       int             next_size;      /* Value to program into dma regs */
-       int             mode;           /* Mode register value and direction */
-       dma_pte_t       *pte_base;      /* Pointer to dma tlb array */
-       int             pte_size;       /* Size of pte allocated pte array */
-       pDmaReg         dma_reg;        /* Pointer to dma registers */
-       int             sc_active;      /* Active flag */
-       char            **sc_dmaaddr;   /* Pointer to dma address in dev */
-       int             *sc_dmalen;     /* Pointer to len counter in dev */
-       void (*reset)(struct dma_softc *);      /* Reset routine pointer */
-       void (*enintr)(struct dma_softc *);     /* Int enab routine pointer */
-       void (*map)(struct dma_softc *, char *, size_t, int);
-                                               /* Map a dma viritual area */
-       void (*start)(struct dma_softc *, caddr_t, size_t, int);
-                                               /* Start routine pointer */
-       int (*isintr)(struct dma_softc *);      /* Int check routine pointer */
-       int (*intr)(struct dma_softc *);        /* Interrupt routine pointer */
-       int (*end)(struct dma_softc *); /* Interrupt routine pointer */
-} dma_softc_t;
-
-#define        DMA_TO_DEV      0
-#define        DMA_FROM_DEV    1
-
-#define        dma_page_offs(x)        ((int)(x) & PICA_DMA_PAGE_OFFS)
-#define dma_page_round(x)      (((int)(x) + PICA_DMA_PAGE_OFFS) & PICA_DMA_PAGE_NUM)
-
-#define        DMA_RESET(r)            ((r->reset)(r))
-#define        DMA_START(a, b, c, d)   ((a->start)(a, b, c, d))
-#define        DMA_MAP(a, b, c, d)     ((a->map)(a, b, c, d))
-#define        DMA_INTR(r)             ((r->intr)(r))
-#define        DMA_DRAIN(r)
-#define        DMA_END(r)              ((r->end)(r))
diff --git a/sys/arch/pica/dev/fd.c b/sys/arch/pica/dev/fd.c
deleted file mode 100644 (file)
index df19f54..0000000
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*     $NetBSD: fd.c,v 1.78 1995/07/04 07:23:09 mycroft Exp $  */
-
-/*-
- * Copyright (c) 1993, 1994, 1995 Charles Hannum.
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Don Ahn.
- *
- * 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.
- *
- *     @(#)fd.c        7.4 (Berkeley) 5/25/91
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/conf.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <sys/device.h>
-#include <sys/disklabel.h>
-#include <sys/dkstat.h>
-#include <sys/disk.h>
-#include <sys/buf.h>
-#include <sys/uio.h>
-#include <sys/syslog.h>
-#include <sys/queue.h>
-
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-
-#include <pica/dev/fdreg.h>
-#include <pica/dev/dma.h>
-
-
-#define FDUNIT(dev)    (minor(dev) / 8)
-#define FDTYPE(dev)    (minor(dev) % 8)
-
-#define b_cylin b_resid
-
-enum fdc_state {
-       DEVIDLE = 0,
-       MOTORWAIT,
-       DOSEEK,
-       SEEKWAIT,
-       SEEKTIMEDOUT,
-       SEEKCOMPLETE,
-       DOIO,
-       IOCOMPLETE,
-       IOTIMEDOUT,
-       DORESET,
-       RESETCOMPLETE,
-       RESETTIMEDOUT,
-       DORECAL,
-       RECALWAIT,
-       RECALTIMEDOUT,
-       RECALCOMPLETE,
-};
-
-/* software state, per controller */
-struct fdc_softc {
-       struct device sc_dev;           /* boilerplate */
-
-       struct dma_softc __dma;
-       struct dma_softc *dma;
-
-       int sc_iobase;
-
-       struct fd_softc *sc_fd[4];      /* pointers to children */
-       TAILQ_HEAD(drivehead, fd_softc) sc_drives;
-       enum fdc_state sc_state;
-       int sc_errors;                  /* number of retries so far */
-       u_char sc_status[7];            /* copy of registers */
-};
-
-/* controller driver configuration */
-int fdcprobe __P((struct device *, void *, void *));
-void fdcattach __P((struct device *, struct device *, void *));
-
-struct cfattach fdc_ca = {
-       sizeof(struct fdc_softc), fdcprobe, fdcattach
-};
-struct cfdriver fdc_cd = {
-       NULL, "fdc", DV_DULL, NULL, 0
-};
-
-/*
- * Floppies come in various flavors, e.g., 1.2MB vs 1.44MB; here is how
- * we tell them apart.
- */
-struct fd_type {
-       int     sectrac;        /* sectors per track */
-       int     heads;          /* number of heads */
-       int     seccyl;         /* sectors per cylinder */
-       int     secsize;        /* size code for sectors */
-       int     datalen;        /* data len when secsize = 0 */
-       int     steprate;       /* step rate and head unload time */
-       int     gap1;           /* gap len between sectors */
-       int     gap2;           /* formatting gap */
-       int     tracks;         /* total num of tracks */
-       int     size;           /* size of disk in sectors */
-       int     step;           /* steps per cylinder */
-       int     rate;           /* transfer speed code */
-       char    *name;
-};
-
-/* The order of entries in the following table is important -- BEWARE! */
-struct fd_type fd_types[] = {
-        { 18,2,36,2,0xff,0xcf,0x1b,0x6c,80,2880,1,FDC_500KBPS,"1.44MB"    }, /* 1.44MB diskette */
-        { 15,2,30,2,0xff,0xdf,0x1b,0x54,80,2400,1,FDC_500KBPS, "1.2MB"    }, /* 1.2 MB AT-diskettes */
-        {  9,2,18,2,0xff,0xdf,0x23,0x50,40, 720,2,FDC_300KBPS, "360KB/AT" }, /* 360kB in 1.2MB drive */
-        {  9,2,18,2,0xff,0xdf,0x2a,0x50,40, 720,1,FDC_250KBPS, "360KB/PC" }, /* 360kB PC diskettes */
-        {  9,2,18,2,0xff,0xdf,0x2a,0x50,80,1440,1,FDC_250KBPS, "720KB"    }, /* 3.5" 720kB diskette */
-        {  9,2,18,2,0xff,0xdf,0x23,0x50,80,1440,1,FDC_300KBPS, "720KB/x"  }, /* 720kB in 1.2MB drive */
-        {  9,2,18,2,0xff,0xdf,0x2a,0x50,40, 720,2,FDC_250KBPS, "360KB/x"  }, /* 360kB in 720kB drive */
-};
-
-/* software state, per disk (with up to 4 disks per ctlr) */
-struct fd_softc {
-       struct device sc_dev;
-       struct disk sc_dk;
-
-       struct fd_type *sc_deftype;     /* default type descriptor */
-       struct fd_type *sc_type;        /* current type descriptor */
-
-       daddr_t sc_blkno;       /* starting block number */
-       int sc_bcount;          /* byte count left */
-       int sc_skip;            /* bytes already transferred */
-       int sc_nblks;           /* number of blocks currently tranferring */
-       int sc_nbytes;          /* number of bytes currently tranferring */
-
-       int sc_drive;           /* physical unit number */
-       int sc_flags;
-#define        FD_OPEN         0x01            /* it's open */
-#define        FD_MOTOR        0x02            /* motor should be on */
-#define        FD_MOTOR_WAIT   0x04            /* motor coming up */
-       int sc_cylin;           /* where we think the head is */
-
-       void *sc_sdhook;        /* saved shutdown hook for drive. */
-
-       TAILQ_ENTRY(fd_softc) sc_drivechain;
-       int sc_ops;             /* I/O ops since last switch */
-       struct buf sc_q;        /* head of buf chain */
-};
-
-/* floppy driver configuration */
-int fdprobe __P((struct device *, void *, void *));
-void fdattach __P((struct device *, struct device *, void *));
-
-struct cfattach fd_ca = {
-       sizeof(struct fd_softc), fdprobe, fdattach
-};
-struct cfdriver fd_cd = {
-       NULL, "fd", DV_DISK, NULL, 0
-};
-
-void fdgetdisklabel __P((struct fd_softc *));
-int fd_get_parms __P((struct fd_softc *));
-void fdstrategy __P((struct buf *));
-void fdstart __P((struct fd_softc *));
-
-struct dkdriver fddkdriver = { fdstrategy };
-
-struct fd_type *fd_nvtotype __P((char *, int, int));
-void fd_set_motor __P((struct fdc_softc *fdc, int reset));
-void fd_motor_off __P((void *arg));
-void fd_motor_on __P((void *arg));
-int fdcresult __P((struct fdc_softc *fdc));
-int out_fdc __P((int iobase, u_char x));
-void fdcstart __P((struct fdc_softc *fdc));
-void fdcstatus __P((struct device *dv, int n, char *s));
-void fdctimeout __P((void *arg));
-void fdcpseudointr __P((void *arg));
-int fdcintr __P((void *));
-void fdcretry __P((struct fdc_softc *fdc));
-void fdfinish __P((struct fd_softc *fd, struct buf *bp));
-
-int
-fdcprobe(parent, match, aux)
-       struct device *parent;
-       void *match, *aux;
-{
-       register struct confargs *ca = aux;
-       int iobase = (long)BUS_CVTADDR(ca);
-
-       if (!BUS_MATCHNAME(ca, "fdc"))
-               return (0);
-
-       /* reset */
-       outb(iobase + fdout, 0);
-       delay(100);
-       outb(iobase + fdout, FDO_FRST);
-
-       /* see if it can handle a command */
-       if (out_fdc(iobase, NE7CMD_SPECIFY) < 0)
-               return 0;
-       out_fdc(iobase, 0xdf);
-       out_fdc(iobase, 2);
-
-       return 1;
-}
-
-/*
- * Arguments passed between fdcattach and fdprobe.
- */
-struct fdc_attach_args {
-       int fa_drive;
-       struct fd_type *fa_deftype;
-};
-
-/*
- * Print the location of a disk drive (called just before attaching the
- * the drive).  If `fdc' is not NULL, the drive was found but was not
- * in the system config file; print the drive name as well.
- * Return QUIET (config_find ignores this if the device was configured) to
- * avoid printing `fdN not configured' messages.
- */
-int
-fdprint(aux, fdc)
-       void *aux;
-       char *fdc;
-{
-       register struct fdc_attach_args *fa = aux;
-
-       if (!fdc)
-               printf(" drive %d", fa->fa_drive);
-       return QUIET;
-}
-
-void
-fdcattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct fdc_softc *fdc = (void *)self;
-       struct confargs *ca = aux;
-       struct fdc_attach_args fa;
-       int type;
-
-       fdc->sc_iobase = (long)BUS_CVTADDR(ca);
-       fdc->sc_state = DEVIDLE;
-       TAILQ_INIT(&fdc->sc_drives);
-
-       fdc->dma = &fdc->__dma;
-       fdc_dma_init(fdc->dma);
-
-       printf("\n");
-
-       BUS_INTR_ESTABLISH(ca, fdcintr, fdc);
-
-       /*
-        * No way yet to determine default disk types.
-        * we assume 1.44 3.5" type for the moment.
-        */
-       type = 0;
-
-       /* physical limit: two drives per controller. */
-       for (fa.fa_drive = 0; fa.fa_drive < 2; fa.fa_drive++) {
-               if (type >= 0 && fa.fa_drive < 2)
-                       fa.fa_deftype = fd_nvtotype(fdc->sc_dev.dv_xname,
-                           type, fa.fa_drive);
-               else
-                       fa.fa_deftype = NULL;           /* unknown */
-               (void)config_found(self, (void *)&fa, fdprint);
-       }
-}
-
-int
-fdprobe(parent, match, aux)
-       struct device *parent;
-       void *match, *aux;
-{
-       struct fdc_softc *fdc = (void *)parent;
-       struct cfdata *cf = match;
-       struct fdc_attach_args *fa = aux;
-       int drive = fa->fa_drive;
-       int iobase = fdc->sc_iobase;
-       int n;
-
-       if (cf->cf_loc[0] != -1 && cf->cf_loc[0] != drive)
-               return 0;
-
-       /* select drive and turn on motor */
-       outb(iobase + fdout, drive | FDO_FRST | FDO_MOEN(drive));
-       /* wait for motor to spin up */
-       delay(500000);
-       out_fdc(iobase, NE7CMD_RECAL);
-       out_fdc(iobase, drive);
-       /* wait for recalibrate */
-       delay(2000000);
-       out_fdc(iobase, NE7CMD_SENSEI);
-       n = fdcresult(fdc);
-#ifdef FD_DEBUG
-       {
-               int i;
-               printf("fdprobe: status");
-               for (i = 0; i < n; i++)
-                       printf(" %x", fdc->sc_status[i]);
-               printf("\n");
-       }
-#endif
-       if (n != 2 || (fdc->sc_status[0] & 0xf8) != 0x20)
-               return 0;
-       /* turn off motor */
-       outb(iobase + fdout, FDO_FRST);
-
-       return 1;
-}
-
-/*
- * Controller is working, and drive responded.  Attach it.
- */
-void
-fdattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct fdc_softc *fdc = (void *)parent;
-       struct fd_softc *fd = (void *)self;
-       struct fdc_attach_args *fa = aux;
-       struct fd_type *type = fa->fa_deftype;
-       int drive = fa->fa_drive;
-
-       /* XXX Allow `flags' to override device type? */
-
-       if (type)
-               printf(": %s %d cyl, %d head, %d sec\n", type->name,
-                   type->tracks, type->heads, type->sectrac);
-       else
-               printf(": density unknown\n");
-
-       fd->sc_cylin = -1;
-       fd->sc_drive = drive;
-       fd->sc_deftype = type;
-       fdc->sc_fd[drive] = fd;
-       fd->sc_dk.dk_name = fd->sc_dev.dv_xname;
-       fd->sc_dk.dk_driver = &fddkdriver;
-       /* XXX Need to do some more fiddling with sc_dk. */
-       dk_establish(&fd->sc_dk, &fd->sc_dev);
-
-       /* Needed to power off if the motor is on when we halt. */
-       fd->sc_sdhook = shutdownhook_establish(fd_motor_off, fd);
-}
-
-/*
- * Translate nvram type into internal data structure.  Return NULL for
- * none/unknown/unusable.
- */
-struct fd_type *
-fd_nvtotype(fdc, nvraminfo, drive)
-       char *fdc;
-       int nvraminfo, drive;
-{
-       int type;
-
-       type = (drive == 0 ? nvraminfo : nvraminfo << 4) & 0xf0;
-#if 0
-       switch (type) {
-       case NVRAM_DISKETTE_NONE:
-               return NULL;
-       case NVRAM_DISKETTE_12M:
-               return &fd_types[1];
-       case NVRAM_DISKETTE_TYPE5:
-       case NVRAM_DISKETTE_TYPE6:
-               /* XXX We really ought to handle 2.88MB format. */
-       case NVRAM_DISKETTE_144M:
-               return &fd_types[0];
-       case NVRAM_DISKETTE_360K:
-               return &fd_types[3];
-       case NVRAM_DISKETTE_720K:
-               return &fd_types[4];
-       default:
-               printf("%s: drive %d: unknown device type 0x%x\n",
-                   fdc, drive, type);
-               return NULL;
-       }
-#else
-       return &fd_types[0]; /* Use only 1.44 for now */
-#endif
-}
-
-inline struct fd_type *
-fd_dev_to_type(fd, dev)
-       struct fd_softc *fd;
-       dev_t dev;
-{
-       int type = FDTYPE(dev);
-
-       if (type > (sizeof(fd_types) / sizeof(fd_types[0])))
-               return NULL;
-       return type ? &fd_types[type - 1] : fd->sc_deftype;
-}
-
-void
-fdstrategy(bp)
-       register struct buf *bp;        /* IO operation to perform */
-{
-       struct fd_softc *fd;
-       int unit = FDUNIT(bp->b_dev);
-       int sz;
-       int s;
-
-       /* Valid unit, controller, and request? */
-       if (unit >= fd_cd.cd_ndevs ||
-           (fd = fd_cd.cd_devs[unit]) == 0 ||
-           bp->b_blkno < 0 ||
-           (bp->b_bcount % FDC_BSIZE) != 0) {
-               bp->b_error = EINVAL;
-               goto bad;
-       }
-
-       /* If it's a null transfer, return immediately. */
-       if (bp->b_bcount == 0)
-               goto done;
-
-       sz = howmany(bp->b_bcount, FDC_BSIZE);
-
-       if (bp->b_blkno + sz > fd->sc_type->size) {
-               sz = fd->sc_type->size - bp->b_blkno;
-               if (sz == 0) {
-                       /* If exactly at end of disk, return EOF. */
-                       bp->b_resid = bp->b_bcount;
-                       goto done;
-               }
-               if (sz < 0) {
-                       /* If past end of disk, return EINVAL. */
-                       bp->b_error = EINVAL;
-                       goto bad;
-               }
-               /* Otherwise, truncate request. */
-               bp->b_bcount = sz << DEV_BSHIFT;
-       }
-
-       bp->b_cylin = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE) / fd->sc_type->seccyl;
-
-#ifdef FD_DEBUG
-       printf("fdstrategy: b_blkno %d b_bcount %d blkno %d cylin %d sz %d\n",
-           bp->b_blkno, bp->b_bcount, fd->sc_blkno, bp->b_cylin, sz);
-#endif
-
-       /* Queue transfer on drive, activate drive and controller if idle. */
-       s = splbio();
-       disksort(&fd->sc_q, bp);
-       untimeout(fd_motor_off, fd); /* a good idea */
-       if (!fd->sc_q.b_active)
-               fdstart(fd);
-#ifdef DIAGNOSTIC
-       else {
-               struct fdc_softc *fdc = (void *)fd->sc_dev.dv_parent;
-               if (fdc->sc_state == DEVIDLE) {
-                       printf("fdstrategy: controller inactive\n");
-                       fdcstart(fdc);
-               }
-       }
-#endif
-       splx(s);
-       return;
-
-bad:
-       bp->b_flags |= B_ERROR;
-done:
-       /* Toss transfer; we're done early. */
-       biodone(bp);
-}
-
-void
-fdstart(fd)
-       struct fd_softc *fd;
-{
-       struct fdc_softc *fdc = (void *)fd->sc_dev.dv_parent;
-       int active = fdc->sc_drives.tqh_first != 0;
-
-       /* Link into controller queue. */
-       fd->sc_q.b_active = 1;
-       TAILQ_INSERT_TAIL(&fdc->sc_drives, fd, sc_drivechain);
-
-       /* If controller not already active, start it. */
-       if (!active)
-               fdcstart(fdc);
-}
-
-void
-fdfinish(fd, bp)
-       struct fd_softc *fd;
-       struct buf *bp;
-{
-       struct fdc_softc *fdc = (void *)fd->sc_dev.dv_parent;
-
-       /*
-        * Move this drive to the end of the queue to give others a `fair'
-        * chance.  We only force a switch if N operations are completed while
-        * another drive is waiting to be serviced, since there is a long motor
-        * startup delay whenever we switch.
-        */
-       if (fd->sc_drivechain.tqe_next && ++fd->sc_ops >= 8) {
-               fd->sc_ops = 0;
-               TAILQ_REMOVE(&fdc->sc_drives, fd, sc_drivechain);
-               if (bp->b_actf) {
-                       TAILQ_INSERT_TAIL(&fdc->sc_drives, fd, sc_drivechain);
-               } else
-                       fd->sc_q.b_active = 0;
-       }
-       bp->b_resid = fd->sc_bcount;
-       fd->sc_skip = 0;
-       fd->sc_q.b_actf = bp->b_actf;
-       biodone(bp);
-       /* turn off motor 5s from now */
-       timeout(fd_motor_off, fd, 10 * hz);
-       fdc->sc_state = DEVIDLE;
-}
-
-int
-fdread(dev, uio)
-       dev_t dev;
-       struct uio *uio;
-{
-
-       return (physio(fdstrategy, NULL, dev, B_READ, minphys, uio));
-}
-
-int
-fdwrite(dev, uio)
-       dev_t dev;
-       struct uio *uio;
-{
-
-       return (physio(fdstrategy, NULL, dev, B_WRITE, minphys, uio));
-}
-
-void
-fd_set_motor(fdc, reset)
-       struct fdc_softc *fdc;
-       int reset;
-{
-       struct fd_softc *fd;
-       u_char status;
-       int n;
-
-       if (fd = fdc->sc_drives.tqh_first)
-               status = fd->sc_drive;
-       else
-               status = 0;
-       if (!reset)
-               status |= FDO_FRST | FDO_FDMAEN;
-       for (n = 0; n < 4; n++)
-               if ((fd = fdc->sc_fd[n]) && (fd->sc_flags & FD_MOTOR))
-                       status |= FDO_MOEN(n);
-       outb(fdc->sc_iobase + fdout, status);
-}
-
-void
-fd_motor_off(arg)
-       void *arg;
-{
-       struct fd_softc *fd = arg;
-       int s;
-
-       s = splbio();
-       fd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
-       fd_set_motor((struct fdc_softc *)fd->sc_dev.dv_parent, 0);
-       splx(s);
-}
-
-void
-fd_motor_on(arg)
-       void *arg;
-{
-       struct fd_softc *fd = arg;
-       struct fdc_softc *fdc = (void *)fd->sc_dev.dv_parent;
-       int s;
-
-       s = splbio();
-       fd->sc_flags &= ~FD_MOTOR_WAIT;
-       if ((fdc->sc_drives.tqh_first == fd) && (fdc->sc_state == MOTORWAIT))
-               (void) fdcintr(fdc);
-       splx(s);
-}
-
-int
-fdcresult(fdc)
-       struct fdc_softc *fdc;
-{
-       int iobase = fdc->sc_iobase;
-       u_char i;
-       int j = 400000,         /* Empirical, should do at 150 Mhz to */
-           n = 0;
-
-       for (; j; --j) {
-               i = inb(iobase + fdsts) & (NE7_DIO | NE7_RQM | NE7_CB);
-               if (i == NE7_RQM) {
-                       return n;
-               }
-               if (i == (NE7_DIO | NE7_RQM | NE7_CB)) {
-                       if (n >= sizeof(fdc->sc_status)) {
-                               log(LOG_ERR, "fdcresult: overrun\n");
-                               return -1;
-                       }
-                       fdc->sc_status[n++] = inb(iobase + fddata);
-               }
-       }
-       log(LOG_ERR, "fdcresult: timeout\n");
-       return -1;
-}
-
-int
-out_fdc(iobase, x)
-       int iobase;
-       u_char x;
-{
-       int i = 100000;
-
-       while ((inb(iobase + fdsts) & NE7_DIO) && i-- > 0);
-       if (i <= 0)
-               return -1;
-       while ((inb(iobase + fdsts) & NE7_RQM) == 0 && i-- > 0);
-       if (i <= 0)
-               return -1;
-       outb(iobase + fddata, x);
-       return 0;
-}
-
-int
-fdopen(dev, flags)
-       dev_t dev;
-       int flags;
-{
-       int unit;
-       struct fd_softc *fd;
-       struct fd_type *type;
-
-       unit = FDUNIT(dev);
-       if (unit >= fd_cd.cd_ndevs)
-               return ENXIO;
-       fd = fd_cd.cd_devs[unit];
-       if (fd == 0)
-               return ENXIO;
-       type = fd_dev_to_type(fd, dev);
-       if (type == NULL)
-               return ENXIO;
-
-       if ((fd->sc_flags & FD_OPEN) != 0 &&
-           fd->sc_type != type)
-               return EBUSY;
-
-       fd->sc_type = type;
-       fd->sc_cylin = -1;
-       fd->sc_flags |= FD_OPEN;
-
-       return 0;
-}
-
-int
-fdclose(dev, flags)
-       dev_t dev;
-       int flags;
-{
-       struct fd_softc *fd = fd_cd.cd_devs[FDUNIT(dev)];
-
-       fd->sc_flags &= ~FD_OPEN;
-       return 0;
-}
-
-void
-fdcstart(fdc)
-       struct fdc_softc *fdc;
-{
-
-#ifdef DIAGNOSTIC
-       /* only got here if controller's drive queue was inactive; should
-          be in idle state */
-       if (fdc->sc_state != DEVIDLE) {
-               printf("fdcstart: not idle\n");
-               return;
-       }
-#endif
-       (void) fdcintr(fdc);
-}
-
-void
-fdcstatus(dv, n, s)
-       struct device *dv;
-       int n;
-       char *s;
-{
-       struct fdc_softc *fdc = (void *)dv->dv_parent;
-       int iobase = fdc->sc_iobase;
-
-       if (n == 0) {
-               out_fdc(fdc->sc_iobase, NE7CMD_SENSEI);
-               (void) fdcresult(fdc);
-               n = 2;
-       }
-
-       printf("%s: %s", dv->dv_xname, s);
-
-       switch (n) {
-       case 0:
-               printf("\n");
-               break;
-       case 2:
-               printf(" (st0 %b cyl %d)\n",
-                   fdc->sc_status[0], NE7_ST0BITS,
-                   fdc->sc_status[1]);
-               break;
-       case 7:
-               printf(" (st0 %b st1 %b st2 %b cyl %d head %d sec %d)\n",
-                   fdc->sc_status[0], NE7_ST0BITS,
-                   fdc->sc_status[1], NE7_ST1BITS,
-                   fdc->sc_status[2], NE7_ST2BITS,
-                   fdc->sc_status[3], fdc->sc_status[4], fdc->sc_status[5]);
-               break;
-#ifdef DIAGNOSTIC
-       default:
-               printf("\nfdcstatus: weird size");
-               break;
-#endif
-       }
-}
-
-void
-fdctimeout(arg)
-       void *arg;
-{
-       struct fdc_softc *fdc = arg;
-       struct fd_softc *fd = fdc->sc_drives.tqh_first;
-       int s;
-
-       s = splbio();
-       fdcstatus(&fd->sc_dev, 0, "timeout");
-
-       if (fd->sc_q.b_actf)
-               fdc->sc_state++;
-       else
-               fdc->sc_state = DEVIDLE;
-
-       (void) fdcintr(fdc);
-       splx(s);
-}
-
-void
-fdcpseudointr(arg)
-       void *arg;
-{
-       int s;
-
-       /* Just ensure it has the right spl. */
-       s = splbio();
-       (void) fdcintr(arg);
-       splx(s);
-}
-
-int
-fdcintr(arg)
-       void *arg;
-{
-       struct fdc_softc *fdc = arg;
-#define        st0     fdc->sc_status[0]
-#define        cyl     fdc->sc_status[1]
-       struct fd_softc *fd;
-       struct buf *bp;
-       int iobase = fdc->sc_iobase;
-       int read, head, trac, sec, i, s, nblks;
-       struct fd_type *type;
-
-loop:
-       /* Is there a drive for the controller to do a transfer with? */
-       fd = fdc->sc_drives.tqh_first;
-       if (fd == NULL) {
-               fdc->sc_state = DEVIDLE;
-               return 1;
-       }
-
-       /* Is there a transfer to this drive?  If not, deactivate drive. */
-       bp = fd->sc_q.b_actf;
-       if (bp == NULL) {
-               fd->sc_ops = 0;
-               TAILQ_REMOVE(&fdc->sc_drives, fd, sc_drivechain);
-               fd->sc_q.b_active = 0;
-               goto loop;
-       }
-
-       switch (fdc->sc_state) {
-       case DEVIDLE:
-               fdc->sc_errors = 0;
-               fd->sc_skip = 0;
-               fd->sc_bcount = bp->b_bcount;
-               fd->sc_blkno = bp->b_blkno / (FDC_BSIZE / DEV_BSIZE);
-               untimeout(fd_motor_off, fd);
-               if ((fd->sc_flags & FD_MOTOR_WAIT) != 0) {
-                       fdc->sc_state = MOTORWAIT;
-                       return 1;
-               }
-               if ((fd->sc_flags & FD_MOTOR) == 0) {
-                       /* Turn on the motor, being careful about pairing. */
-                       struct fd_softc *ofd = fdc->sc_fd[fd->sc_drive ^ 1];
-                       if (ofd && ofd->sc_flags & FD_MOTOR) {
-                               untimeout(fd_motor_off, ofd);
-                               ofd->sc_flags &= ~(FD_MOTOR | FD_MOTOR_WAIT);
-                       }
-                       fd->sc_flags |= FD_MOTOR | FD_MOTOR_WAIT;
-                       fd_set_motor(fdc, 0);
-                       fdc->sc_state = MOTORWAIT;
-                       /* Allow .5s for motor to stabilize. */
-                       timeout(fd_motor_on, fd, hz / 2);
-                       return 1;
-               }
-               /* Make sure the right drive is selected. */
-               fd_set_motor(fdc, 0);
-
-               /* fall through */
-       case DOSEEK:
-       doseek:
-               if (fd->sc_cylin == bp->b_cylin)
-                       goto doio;
-
-               out_fdc(iobase, NE7CMD_SPECIFY);/* specify command */
-               out_fdc(iobase, fd->sc_type->steprate);
-               out_fdc(iobase, 6);             /* XXX head load time == 6ms */
-
-               out_fdc(iobase, NE7CMD_SEEK);   /* seek function */
-               out_fdc(iobase, fd->sc_drive);  /* drive number */
-               out_fdc(iobase, bp->b_cylin * fd->sc_type->step);
-
-               fd->sc_cylin = -1;
-               fdc->sc_state = SEEKWAIT;
-               timeout(fdctimeout, fdc, 4 * hz);
-               return 1;
-
-       case DOIO:
-       doio:
-               type = fd->sc_type;
-               sec = fd->sc_blkno % type->seccyl;
-               nblks = type->seccyl - sec;
-               nblks = min(nblks, fd->sc_bcount / FDC_BSIZE);
-               nblks = min(nblks, FDC_MAXIOSIZE / FDC_BSIZE);
-               fd->sc_nblks = nblks;
-               fd->sc_nbytes = nblks * FDC_BSIZE;
-               head = sec / type->sectrac;
-               sec -= head * type->sectrac;
-#ifdef DIAGNOSTIC
-               {int block;
-                block = (fd->sc_cylin * type->heads + head) * type->sectrac + sec;
-                if (block != fd->sc_blkno) {
-                        printf("fdcintr: block %d != blkno %d\n", block, fd->sc_blkno);
-#ifdef DDB
-                        Debugger();
-#endif
-                }}
-#endif
-               MachFlushDCache(bp->b_data + fd->sc_skip, fd->sc_nbytes);
-               read = bp->b_flags & B_READ ? DMA_FROM_DEV : DMA_TO_DEV;
-               DMA_START(fdc->dma, bp->b_data + fd->sc_skip, fd->sc_nbytes, read);
-               outb(iobase + fdctl, type->rate);
-#ifdef FD_DEBUG
-               printf("fdcintr: %s drive %d track %d head %d sec %d nblks %d\n",
-                   read ? "read" : "write", fd->sc_drive, fd->sc_cylin, head,
-                   sec, nblks);
-#endif
-               if (read)
-                       out_fdc(iobase, NE7CMD_READ);   /* READ */
-               else
-                       out_fdc(iobase, NE7CMD_WRITE);  /* WRITE */
-               out_fdc(iobase, (head << 2) | fd->sc_drive);
-               out_fdc(iobase, fd->sc_cylin);          /* track */
-               out_fdc(iobase, head);
-               out_fdc(iobase, sec + 1);               /* sector +1 */
-               out_fdc(iobase, type->secsize);         /* sector size */
-               out_fdc(iobase, type->sectrac);         /* sectors/track */
-               out_fdc(iobase, type->gap1);            /* gap1 size */
-               out_fdc(iobase, type->datalen);         /* data length */
-               fdc->sc_state = IOCOMPLETE;
-               /* allow 2 seconds for operation */
-               timeout(fdctimeout, fdc, 2 * hz);
-               return 1;                               /* will return later */
-
-       case SEEKWAIT:
-               untimeout(fdctimeout, fdc);
-               fdc->sc_state = SEEKCOMPLETE;
-               /* allow 1/50 second for heads to settle */
-               timeout(fdcpseudointr, fdc, hz / 50);
-               return 1;
-               
-       case SEEKCOMPLETE:
-               /* Make sure seek really happened. */
-               out_fdc(iobase, NE7CMD_SENSEI);
-               if (fdcresult(fdc) != 2 || (st0 & 0xf8) != 0x20 ||
-                   cyl != bp->b_cylin * fd->sc_type->step) {
-#ifdef FD_DEBUG
-                       fdcstatus(&fd->sc_dev, 2, "seek failed");
-#endif
-                       fdcretry(fdc);
-                       goto loop;
-               }
-               fd->sc_cylin = bp->b_cylin;
-               goto doio;
-
-       case IOTIMEDOUT:
-               DMA_RESET(fdc->dma);
-
-       case SEEKTIMEDOUT:
-       case RECALTIMEDOUT:
-       case RESETTIMEDOUT:
-               fdcretry(fdc);
-               goto loop;
-
-       case IOCOMPLETE: /* IO DONE, post-analyze */
-               untimeout(fdctimeout, fdc);
-               if (fdcresult(fdc) != 7 || (st0 & 0xf8) != 0) {
-                       DMA_RESET(fdc->dma);
-#ifdef FD_DEBUG
-                       fdcstatus(&fd->sc_dev, 7, bp->b_flags & B_READ ?
-                           "read failed" : "write failed");
-                       printf("blkno %d nblks %d\n",
-                           fd->sc_blkno, fd->sc_nblks);
-#endif
-                       fdcretry(fdc);
-                       goto loop;
-               }
-               DMA_END(fdc->dma);
-               read = bp->b_flags & B_READ;
-               if (fdc->sc_errors) {
-                       diskerr(bp, "fd", "soft error", LOG_PRINTF,
-                           fd->sc_skip / FDC_BSIZE, (struct disklabel *)NULL);
-                       printf("\n");
-                       fdc->sc_errors = 0;
-               }
-               fd->sc_blkno += fd->sc_nblks;
-               fd->sc_skip += fd->sc_nbytes;
-               fd->sc_bcount -= fd->sc_nbytes;
-               if (fd->sc_bcount > 0) {
-                       bp->b_cylin = fd->sc_blkno / fd->sc_type->seccyl;
-                       goto doseek;
-               }
-               fdfinish(fd, bp);
-               goto loop;
-
-       case DORESET:
-               /* try a reset, keep motor on */
-               fd_set_motor(fdc, 1);
-               delay(100);
-               fd_set_motor(fdc, 0);
-               fdc->sc_state = RESETCOMPLETE;
-               timeout(fdctimeout, fdc, hz / 2);
-               return 1;                       /* will return later */
-
-       case RESETCOMPLETE:
-               untimeout(fdctimeout, fdc);
-               /* clear the controller output buffer */
-               for (i = 0; i < 4; i++) {
-                       out_fdc(iobase, NE7CMD_SENSEI);
-                       (void) fdcresult(fdc);
-               }
-
-               /* fall through */
-       case DORECAL:
-               out_fdc(iobase, NE7CMD_RECAL);  /* recalibrate function */
-               out_fdc(iobase, fd->sc_drive);
-               fdc->sc_state = RECALWAIT;
-               timeout(fdctimeout, fdc, 5 * hz);
-               return 1;                       /* will return later */
-
-       case RECALWAIT:
-               untimeout(fdctimeout, fdc);
-               fdc->sc_state = RECALCOMPLETE;
-               /* allow 1/30 second for heads to settle */
-               timeout(fdcpseudointr, fdc, hz / 30);
-               return 1;                       /* will return later */
-
-       case RECALCOMPLETE:
-               out_fdc(iobase, NE7CMD_SENSEI);
-               if (fdcresult(fdc) != 2 || (st0 & 0xf8) != 0x20 || cyl != 0) {
-#ifdef FD_DEBUG
-                       fdcstatus(&fd->sc_dev, 2, "recalibrate failed");
-#endif
-                       fdcretry(fdc);
-                       goto loop;
-               }
-               fd->sc_cylin = 0;
-               goto doseek;
-
-       case MOTORWAIT:
-               if (fd->sc_flags & FD_MOTOR_WAIT)
-                       return 1;               /* time's not up yet */
-               goto doseek;
-
-       default:
-               fdcstatus(&fd->sc_dev, 0, "stray interrupt");
-               return 1;
-       }
-#ifdef DIAGNOSTIC
-       panic("fdcintr: impossible");
-#endif
-#undef st0
-#undef cyl
-}
-
-void
-fdcretry(fdc)
-       struct fdc_softc *fdc;
-{
-       struct fd_softc *fd;
-       struct buf *bp;
-
-       fd = fdc->sc_drives.tqh_first;
-       bp = fd->sc_q.b_actf;
-
-       switch (fdc->sc_errors) {
-       case 0:
-               /* try again */
-               fdc->sc_state = SEEKCOMPLETE;
-               break;
-
-       case 1: case 2: case 3:
-               /* didn't work; try recalibrating */
-               fdc->sc_state = DORECAL;
-               break;
-
-       case 4:
-               /* still no go; reset the bastard */
-               fdc->sc_state = DORESET;
-               break;
-
-       default:
-               diskerr(bp, "fd", "hard error", LOG_PRINTF,
-                   fd->sc_skip / FDC_BSIZE, (struct disklabel *)NULL);
-               printf(" (st0 %b st1 %b st2 %b cyl %d head %d sec %d)\n",
-                   fdc->sc_status[0], NE7_ST0BITS,
-                   fdc->sc_status[1], NE7_ST1BITS,
-                   fdc->sc_status[2], NE7_ST2BITS,
-                   fdc->sc_status[3], fdc->sc_status[4], fdc->sc_status[5]);
-
-               bp->b_flags |= B_ERROR;
-               bp->b_error = EIO;
-               fdfinish(fd, bp);
-       }
-       fdc->sc_errors++;
-}
-
-int
-fdsize(dev)
-       dev_t dev;
-{
-
-       /* Swapping to floppies would not make sense. */
-       return -1;
-}
-
-int
-fddump(dev, blkno, va, size)
-       dev_t dev;
-       daddr_t blkno;
-       caddr_t va;
-       size_t size;
-{
-
-       /* Not implemented. */
-       return ENXIO;
-}
-
-int
-fdioctl(dev, cmd, addr, flag)
-       dev_t dev;
-       u_long cmd;
-       caddr_t addr;
-       int flag;
-{
-       struct fd_softc *fd = fd_cd.cd_devs[FDUNIT(dev)];
-       struct disklabel buffer;
-       int error;
-
-       switch (cmd) {
-       case DIOCGDINFO:
-               bzero(&buffer, sizeof(buffer));
-               
-               buffer.d_secpercyl = fd->sc_type->seccyl;
-               buffer.d_type = DTYPE_FLOPPY;
-               buffer.d_secsize = FDC_BSIZE;
-
-               if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL)
-                       return EINVAL;
-
-               *(struct disklabel *)addr = buffer;
-               return 0;
-
-       case DIOCWLABEL:
-               if ((flag & FWRITE) == 0)
-                       return EBADF;
-               /* XXX do something */
-               return 0;
-
-       case DIOCWDINFO:
-               if ((flag & FWRITE) == 0)
-                       return EBADF;
-
-               error = setdisklabel(&buffer, (struct disklabel *)addr, 0, NULL);
-               if (error)
-                       return error;
-
-               error = writedisklabel(dev, fdstrategy, &buffer, NULL);
-               return error;
-
-       default:
-               return ENOTTY;
-       }
-
-#ifdef DIAGNOSTIC
-       panic("fdioctl: impossible");
-#endif
-}
diff --git a/sys/arch/pica/dev/fdreg.h b/sys/arch/pica/dev/fdreg.h
deleted file mode 100644 (file)
index a1c8388..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*     $NetBSD: fdreg.h,v 1.8 1995/06/28 04:30:57 cgd Exp $    */
-
-/*-
- * 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.
- *
- *     @(#)fdreg.h     7.1 (Berkeley) 5/9/91
- */
-
-/*
- * AT floppy controller registers and bitfields
- */
-
-/* uses NEC765 controller */
-#include <dev/ic/nec765reg.h>
-
-/* registers */
-#define        fdout   2       /* Digital Output Register (W) */
-#define        FDO_FDSEL       0x03    /*  floppy device select */
-#define        FDO_FRST        0x04    /*  floppy controller reset */
-#define        FDO_FDMAEN      0x08    /*  enable floppy DMA and Interrupt */
-#define        FDO_MOEN(n)     ((1 << n) * 0x10)       /* motor enable */
-
-#define        fdsts   4       /* NEC 765 Main Status Register (R) */
-#define        fddata  5       /* NEC 765 Data Register (R/W) */
-
-#define        fdctl   7       /* Control Register (W) */
-#define        FDC_500KBPS     0x00    /* 500KBPS MFM drive transfer rate */
-#define        FDC_300KBPS     0x01    /* 300KBPS MFM drive transfer rate */
-#define        FDC_250KBPS     0x02    /* 250KBPS MFM drive transfer rate */
-#define        FDC_125KBPS     0x03    /* 125KBPS FM drive transfer rate */
-
-#define        fdin    7       /* Digital Input Register (R) */
-#define        FDI_DCHG        0x80    /* diskette has been changed */
-
-#define        FDC_BSIZE       512
-#define        FDC_NPORT       8
-#define        FDC_MAXIOSIZE   NBPG    /* XXX should be MAXBSIZE */
diff --git a/sys/arch/pica/dev/if_sn.c b/sys/arch/pica/dev/if_sn.c
deleted file mode 100644 (file)
index 089b686..0000000
+++ /dev/null
@@ -1,1299 +0,0 @@
-/*
- * National Semiconductor  SONIC Driver
- * Copyright (c) 1991   Algorithmics Ltd (http://www.algor.co.uk)
- * You may use, copy, and modify this program so long as you retain the
- * copyright line.
- *
- * This driver has been substantially modified since Algorithmics donated
- * it.
- */
-
-#include "sn.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/buf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/syslog.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/device.h>
-#include <machine/autoconf.h>
-
-#include <net/if.h>
-#include <net/netisr.h>
-#include <net/route.h>
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-#include <netinet/if_ether.h>
-#endif
-
-#include <vm/vm.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <net/bpf.h>
-#include <net/bpfdesc.h>
-#endif
-
-#include <pica/dev/dma.h>
-
-#define SONICDW 32
-typedef unsigned char uchar;
-
-#include <pica/dev/if_sn.h>
-#define SWR(a, x)      (a) = (x)
-#define SRD(a)         ((a) & 0xffff)
-
-#include <machine/cpu.h>
-
-/*
- * Statistics collected over time
- */
-struct sn_stats {
-       int     ls_opacks;      /* packets transmitted */
-       int     ls_ipacks;      /* packets received */
-       int     ls_tdr;         /* contents of tdr after collision */
-       int     ls_tdef;        /* packets where had to wait */
-       int     ls_tone;        /* packets with one retry */
-       int     ls_tmore;       /* packets with more than one retry */
-       int     ls_tbuff;       /* transmit buff errors */
-       int     ls_tuflo;       /* "      uflo  "     */
-       int     ls_tlcol;
-       int     ls_tlcar;
-       int     ls_trtry;
-       int     ls_rbuff;       /* receive buff errors */
-       int     ls_rfram;       /* framing     */
-       int     ls_roflo;       /* overflow    */
-       int     ls_rcrc;
-       int     ls_rrng;        /* rx ring sequence error */
-       int     ls_babl;        /* chip babl error */
-       int     ls_cerr;        /* collision error */
-       int     ls_miss;        /* missed packet */
-       int     ls_merr;        /* memory error */
-       int     ls_copies;      /* copies due to out of range mbufs */
-       int     ls_maxmbufs;    /* max mbufs on transmit */
-       int     ls_maxslots;    /* max ring slots on transmit */
-};
-
-struct sn_softc {
-       struct  device sc_dev;
-       struct  arpcom sc_ac;
-#define        sc_if           sc_ac.ac_if     /* network visible interface */
-#define        sc_enaddr       sc_ac.ac_enaddr /* hardware ethernet address */
-
-       struct sonic_reg *sc_csr;       /* hardware pointer */
-       dma_softc_t     __dma;          /* stupid macro ... */
-       dma_softc_t     *dma;           /* dma mapper control */
-       int     sc_rxmark;              /* position in rx ring for reading buffs */
-
-       int     sc_rramark;             /* index into rra of wp */
-
-       int     sc_txhead;              /* index of first TDA passed to chip  */
-       int     sc_missed;              /* missed packet counter */
-       struct  RXpkt *sc_lrxp;         /* last RDA available to chip */
-       struct  sn_stats sc_sum;
-       short   sc_iflags;
-} sn_softc;
-
-int snmatch __P((struct device *, void *, void *));
-void snattach __P((struct device *, struct device *, void *));
-
-struct cfattach sn_ca = {
-       sizeof(struct sn_softc), snmatch, snattach
-};
-struct cfdriver sn_cd = {
-       NULL, "sn", DV_IFNET, NULL, 0
-};
-
-#include <assert.h>
-void
-__assert(file, line, failedexpr)
-       const char *file, *failedexpr;
-       int line;
-{
-       (void)printf(
-           "assertion \"%s\" failed: file \"%s\", line %d\n",
-           failedexpr, file, line);
-}
-
-void 
-m_check(m)
-       struct mbuf *m;
-{
-       if (m->m_flags & M_EXT) {
-               assert(m->m_len >= 0);
-               assert(m->m_len <= m->m_ext.ext_size);
-               assert(m->m_data >= &m->m_ext.ext_buf[0]);
-               assert(m->m_data <= &m->m_ext.ext_buf[m->m_ext.ext_size]);
-               assert(m->m_data + m->m_len <= &m->m_ext.ext_buf[m->m_ext.ext_size]);
-       } else if (m->m_flags & M_PKTHDR) {
-               assert(m->m_len >= 0);
-               assert(m->m_len <= MHLEN);
-               assert(m->m_data >= m->m_pktdat);
-               assert(m->m_data <= &m->m_pktdat[MHLEN]);
-               assert(m->m_data + m->m_len <= &m->m_pktdat[MHLEN]);
-       } else {
-               assert(m->m_len >= 0);
-               assert(m->m_len <= MLEN);
-               assert(m->m_data >= m->m_dat);
-               assert(m->m_data <= &m->m_dat[MLEN]);
-               assert(m->m_data + m->m_len <= &m->m_dat[MLEN]);
-       }
-}
-
-void 
-m_checkm(m)
-       struct mbuf *m;
-{
-       while (m) {
-               m_check(m);
-               m = m->m_next;
-       }
-}
-
-int ethdebug = 0;
-
-int snintr __P((struct sn_softc *));
-int snioctl __P((struct ifnet *ifp, u_long cmd, caddr_t data));
-void snstart __P((struct ifnet *ifp));
-void snwatchdog __P((struct ifnet *ifp));
-void snreset __P((struct sn_softc *sc));
-
-/*
- * SONIC buffers need to be aligned 16 or 32 bit aligned.
- * These macros calculate and verify alignment.
- */
-#if SONICDW == 32
-#define SONICALIGN 4
-#else
-#define SONICALIGN 2
-#endif
-#define SOALIGN(array) (((int)array+SONICALIGN-1) & ~(SONICALIGN-1))
-#define SOALIGNED(p) (!(((uint)p)&(SONICALIGN-1)))
-
-#define UPPER(x) ((unsigned)(x) >> 16)
-#define LOWER(x) ((unsigned)(x) & 0xffff)
-
-#define NRRA   32              /* # receive resource descriptors */
-#define RRAMASK        0x1f            /* why it must be poer of two */
-
-#define NRBA   16              /* # receive buffers < NRRA */
-#define NRDA   NRBA            /* # receive descriptors */
-#define NTDA   4               /* # transmit descriptors */
-
-#define CDASIZE sizeof(struct CDA)
-#define RRASIZE (NRRA*sizeof(struct RXrsrc))
-#define RDASIZE (NRDA*sizeof(struct RXpkt))
-#define TDASIZE (NTDA*sizeof(struct TXpkt))
-
-#define FCSSIZE        4               /* size of FCS append te received packets */
-
-/*
- * maximum recieve packet size plus 2 byte pad to make each
- * one aligned. 4 byte slop (required for eobc)
- */
-#define RBASIZE        (sizeof(struct ether_header) + ETHERMTU + FCSSIZE + 2 + 4)
-
-/*
- * space requiered for descriptors
- */
-#define DESC_SIZE (RRASIZE + CDASIZE + RDASIZE + TDASIZE + SONICALIGN - 1)
-
-/*
- *  This should really be 'allocated' but for now we
- *  'hardwire' it.
- */
-#define SONICBUF       0xa0010000
-
-/*
- *  Nicely aligned pointers into the sonicbuffers
- *  p_ points at physical (K1_SEG) addresses.
- *  v_ is dma viritual address used by sonic.
- */
-struct RXrsrc  *p_rra; /* receiver resource descriptors */
-struct RXrsrc  *v_rra;
-struct RXpkt   *p_rda; /* receiver desriptors */
-struct RXpkt   *v_rda;
-struct TXpkt   *p_tda; /* transmitter descriptors */
-struct TXpkt   *v_tda;
-struct CDA     *p_cda; /* CAM descriptors */
-struct CDA     *v_cda;
-char           *p_rba; /* receive buffer area base */
-char           *v_rba;
-
-/* Meta transmit descriptors */
-struct mtd {
-       struct  mtd *mtd_link;
-       struct  TXpkt *mtd_txp;
-       struct  mbuf *mtd_mbuf;
-} mtda[NTDA];
-
-struct mtd *mtdfree;           /* list of free meta transmit descriptors */
-struct mtd *mtdhead;           /* head of descriptors assigned to chip */
-struct mtd *mtdtail;           /* tail of descriptors assigned to chip */
-struct mtd *mtdnext;           /* next descriptor to give to chip */
-
-void mtd_free __P((struct mtd *));
-struct mtd *mtd_alloc __P((void));
-
-int sngetaddr __P((struct sn_softc *sc));
-int sninit __P((struct sn_softc *sc));
-int snstop __P((struct sn_softc *sc));
-int sonicput __P((struct sn_softc *sc, struct mbuf *m0));
-
-void camdump __P((struct sn_softc *sc));
-
-int
-snmatch(parent, match, aux)
-       struct device *parent;
-       void *match, *aux;
-{
-       struct cfdata *cf = match;
-       struct confargs *ca = aux;
-
-       /* XXX CHECK BUS */
-       /* make sure that we're looking for this type of device. */
-       if (!BUS_MATCHNAME(ca, "sonic"))
-               return (0);
-
-       return (1);
-}
-
-/*
- * Interface exists: make available by filling in network interface
- * record.  System will initialize the interface when it is ready
- * to accept packets.
- */
-void
-snattach(parent, self, aux)
-       struct device *parent, *self;
-       void   *aux;
-{
-       struct sn_softc *sc = (void *)self;
-       struct confargs *ca = aux;
-       struct ifnet *ifp = &sc->sc_if;
-       struct cfdata *cf = sc->sc_dev.dv_cfdata;
-       int p, pp;
-
-       sc->sc_csr = (struct sonic_reg *)BUS_CVTADDR(ca);
-
-       sc->dma = &sc->__dma;
-       sn_dma_init(sc->dma, FRAGMAX * NTDA
-                          + (NRBA * RBASIZE / PICA_DMA_PAGE_SIZE) + 1
-                          + (DESC_SIZE * 2 / PICA_DMA_PAGE_SIZE) + 1);
-
-/*
- * because the sonic is basicly 16bit device it 'concatenates'
- * a higher buffer address to a 16 bit offset this will cause wrap
- * around problems near the end of 64k !!
- */
-       p = SONICBUF;
-       pp = SONICBUF - (FRAGMAX * NTDA * PICA_DMA_PAGE_SIZE);
-
-       if ((p ^ (p + TDASIZE)) & 0x10000)
-               p = (p + 0x10000) & ~0xffff;
-       p_tda = (struct TXpkt *) p;
-       v_tda = (struct TXpkt *)(p - pp + sc->dma->dma_va);
-       p += TDASIZE;
-
-       if ((p ^ (p + RRASIZE + CDASIZE)) & 0x10000)
-               p = (p + 0x10000) & ~0xffff;
-       p_rra = (struct RXrsrc *) p;
-       v_rra = (struct RXrsrc *)(p - pp + sc->dma->dma_va);
-       p += RRASIZE;
-
-       if ((p ^ (p + RDASIZE)) & 0x10000)
-               p = (p + 0x10000) & ~0xffff;
-       p_rda = (struct RXpkt *) p;
-       v_rda = (struct RXpkt *)(p - pp + sc->dma->dma_va);
-       p += RDASIZE;
-
-       p_cda = (struct CDA *) p;
-       v_cda = (struct CDA *)(p - pp + sc->dma->dma_va);
-       p += CDASIZE;
-
-       p += PICA_DMA_PAGE_SIZE - (p & (PICA_DMA_PAGE_SIZE -1));
-       p_rba = (char *)p;
-       v_rba = (char *)(p - pp + sc->dma->dma_va);
-       p += NRBA * RBASIZE;
-
-       DMA_MAP(sc->dma, (caddr_t)SONICBUF, p - SONICBUF, SONICBUF - pp);
-
-#if 0
-       camdump(sc);
-#endif
-       sngetaddr(sc);
-       printf(" address %s\n", ether_sprintf(sc->sc_enaddr));
-
-#if 0
-printf("\nsonic buffers: rra=0x%x cda=0x%x rda=0x%x tda=0x%x rba=0x%x\n",
-       p_rra, p_cda, p_rda, p_tda, p_rba);
-printf("sonic buffers: rra=0x%x cda=0x%x rda=0x%x tda=0x%x rba=0x%x\n",
-       v_rra, v_cda, v_rda, v_tda, v_rba);
-printf("mapped to offset 0x%x size 0x%x\n", SONICBUF - pp, p - SONICBUF);
-#endif
-
-       BUS_INTR_ESTABLISH(ca, (intr_handler_t)snintr, (void *)sc);
-
-       bcopy(sc->sc_dev.dv_xname, ifp->if_xname, IFNAMSIZ);
-       ifp->if_softc = sc;
-       ifp->if_ioctl = snioctl;
-       ifp->if_start = snstart;
-       ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
-       ifp->if_watchdog = snwatchdog;
-#if NBPFILTER > 0
-       bpfattach(&ifp->if_bpf, ifp, DLT_EN10MB, sizeof(struct ether_header));
-#endif
-       if_attach(ifp);
-       ether_ifattach(ifp);
-}
-
-int
-snioctl(ifp, cmd, data)
-       struct ifnet *ifp;
-       u_long cmd;
-       caddr_t data;
-{
-       struct ifaddr *ifa;
-       struct sn_softc *sc = ifp->if_softc;
-       int     s = splnet(), err = 0;
-       int     temp;
-       int     error;
-
-       if ((error = ether_ioctl(ifp, &sc->sc_ac, cmd, data)) > 0) {
-               splx(s);
-               return error;
-       }
-
-       switch (cmd) {
-
-       case SIOCSIFADDR:
-               ifa = (struct ifaddr *)data;
-               ifp->if_flags |= IFF_UP;
-               switch (ifa->ifa_addr->sa_family) {
-#ifdef INET
-               case AF_INET:
-                       (void)sninit(ifp->if_softc);
-                       arp_ifinit(&sc->sc_ac, ifa);
-                       break;
-#endif
-               default:
-                       (void)sninit(ifp->if_softc);
-                       break;
-               }
-               break;
-
-       case SIOCSIFFLAGS:
-               if ((ifp->if_flags & IFF_UP) == 0 &&
-                   ifp->if_flags & IFF_RUNNING) {
-                       snstop(ifp->if_softc);
-                       ifp->if_flags &= ~IFF_RUNNING;
-               } else if (ifp->if_flags & IFF_UP &&
-                   (ifp->if_flags & IFF_RUNNING) == 0)
-                       (void)sninit(ifp->if_softc);
-               /*
-                * If the state of the promiscuous bit changes, the interface
-                * must be reset to effect the change.
-                */
-               if (((ifp->if_flags ^ sc->sc_iflags) & IFF_PROMISC) &&
-                   (ifp->if_flags & IFF_RUNNING)) {
-                       sc->sc_iflags = ifp->if_flags;
-                       printf("change in flags\n");
-                       temp = sc->sc_if.if_flags & IFF_UP;
-                       snreset(sc);
-                       sc->sc_if.if_flags |= temp;
-                       snstart(ifp);
-               }
-               break;
-
-       case SIOCADDMULTI:
-       case SIOCDELMULTI:
-               if(cmd == SIOCADDMULTI)
-                       err = ether_addmulti((struct ifreq *)data, &sc->sc_ac);
-               else
-                       err = ether_delmulti((struct ifreq *)data, &sc->sc_ac);
-
-               if (err == ENETRESET) {
-                       /*
-                        * Multicast list has changed; set the hardware
-                        * filter accordingly. But remember UP flag!
-                        */
-                       temp = sc->sc_if.if_flags & IFF_UP;
-                       snreset(sc);
-                       sc->sc_if.if_flags |= temp;
-                       err = 0;
-               }
-               break;
-       default:
-               err = EINVAL;
-       }
-       splx(s);
-       return (err);
-}
-
-/*
- * Encapsulate a packet of type family for the local net.
- * Use trailer local net encapsulation if enough data in first
- * packet leaves a multiple of 512 bytes of data in remainder.
- */
-void
-snstart(ifp)
-       struct ifnet *ifp;
-{
-       struct sn_softc *sc = ifp->if_softc;
-       struct mbuf *m;
-       int     len;
-
-       if ((sc->sc_if.if_flags & IFF_RUNNING) == 0)
-               return;
-       IF_DEQUEUE(&sc->sc_if.if_snd, m);
-       if (m == 0)
-               return;
-
-       /*
-        * If there is nothing in the o/p queue, and there is room in
-        * the Tx ring, then send the packet directly.  Otherwise append
-        * it to the o/p queue.
-        */
-       if (!sonicput(sc, m)) { /* not enough space */
-               IF_PREPEND(&sc->sc_if.if_snd, m);
-       }
-#if NBPFILTER > 0
-       /*
-        * If bpf is listening on this interface, let it
-        * see the packet before we commit it to the wire.
-        */
-       if (sc->sc_if.if_bpf)
-               bpf_mtap(sc->sc_if.if_bpf, m);
-#endif
-
-       sc->sc_if.if_opackets++;        /* # of pkts */
-       sc->sc_sum.ls_opacks++;         /* # of pkts */
-}
-
-/*
- * This is called from sonicioctl() when /etc/ifconfig is run to set
- * the address or switch the i/f on.
- */
-void caminitialise __P((void));
-void camentry __P((int, u_char *ea));
-void camprogram __P((struct sn_softc *));
-void initialise_tda __P((struct sn_softc *));
-void initialise_rda __P((struct sn_softc *));
-void initialise_rra __P((struct sn_softc *));
-
-/*
- * reset and restart the SONIC.  Called in case of fatal
- * hardware/software errors.
- */
-void
-snreset(sc)
-       struct sn_softc *sc;
-{
-       snstop(sc);
-       sninit(sc);
-}
-
-int 
-sninit(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr = sc->sc_csr;
-       int s, error;
-
-       if (sc->sc_if.if_flags & IFF_RUNNING)
-               /* already running */
-               return (0);
-
-       s = splnet();
-
-       csr->s_cr = CR_RST;     /* s_dcr only accessable reset mode! */
-
-       /* config it */
-       csr->s_dcr = DCR_LBR | DCR_SYNC | DCR_WAIT0 | DCR_DW32 | DCR_DMABLOCK |
-           DCR_RFT16 | DCR_TFT16;
-       csr->s_rcr = RCR_BRD | RCR_LBNONE;
-       csr->s_imr = IMR_PRXEN | IMR_PTXEN | IMR_TXEREN | IMR_HBLEN | IMR_LCDEN;
-
-       /* clear pending interrupts */
-       csr->s_isr = 0x7fff;
-
-       /* clear tally counters */
-       csr->s_crct = -1;
-       csr->s_faet = -1;
-       csr->s_mpt = -1;
-
-       initialise_tda(sc);
-       initialise_rda(sc);
-       initialise_rra(sc);
-
-       /* enable the chip */
-       csr->s_cr = 0;
-       wbflush();
-
-       /* program the CAM with our address */
-       caminitialise();
-       camentry(0, sc->sc_enaddr);
-       camprogram(sc);
-
-       /* get it to read resource descriptors */
-       csr->s_cr = CR_RRRA;
-       wbflush();
-       while (csr->s_cr & CR_RRRA)
-               continue;
-
-       /* enable rx */
-       csr->s_cr = CR_RXEN;
-       wbflush();
-
-       /* flag interface as "running" */
-       sc->sc_if.if_flags |= IFF_RUNNING;
-
-       splx(s);
-       return (0);
-
-bad:
-       snstop(sc);
-       return (error);
-}
-
-/*
- * close down an interface and free its buffers
- * Called on final close of device, or if sninit() fails
- * part way through.
- */
-int 
-snstop(sc)
-       struct sn_softc *sc;
-{
-       struct mtd *mtd;
-       int s = splnet();
-
-       /* stick chip in reset */
-       sc->sc_csr->s_cr = CR_RST;
-       wbflush();
-
-       /* free all receive buffers (currently static so nothing to do) */
-
-       /* free all pending transmit mbufs */
-       while (mtd = mtdhead) {
-               mtdhead = mtdhead->mtd_link;
-               if (mtd->mtd_mbuf)
-                       m_freem(mtd->mtd_mbuf);
-               mtd->mtd_mbuf = 0;
-               mtd_free(mtd);
-       }
-       mtdnext = mtd_alloc();
-
-       sc->sc_if.if_timer = 0;
-       sc->sc_if.if_flags &= ~(IFF_RUNNING | IFF_UP);
-
-       splx(s);
-       return (0);
-}
-
-/*
- * Called if any Tx packets remain unsent after 5 seconds,
- * In all cases we just reset the chip, and any retransmission
- * will be handled by higher level protocol timeouts.
- */
-void
-snwatchdog(ifp)
-       struct ifnet *ifp;
-{
-       struct sn_softc *sc = ifp->if_softc;
-       int temp;
-
-       if (mtdhead && mtdhead->mtd_mbuf) {
-               /* something still pending for transmit */
-               if (mtdhead->mtd_txp->status == 0)
-                       log(LOG_ERR, "%s%d: Tx - timeout\n",
-                           sc->sc_if.if_xname, sc->sc_if.if_softc);
-               else
-                       log(LOG_ERR, "%s%d: Tx - lost interrupt\n",
-                           sc->sc_if.if_xname, sc->sc_if.if_softc);
-               temp = sc->sc_if.if_flags & IFF_UP;
-               snreset(sc);
-               sc->sc_if.if_flags |= temp;
-       }
-}
-/*
- * stuff packet into sonic (at splnet)
-*/
-int 
-sonicput(sc, m0)
-       struct sn_softc *sc;
-       struct mbuf *m0;
-{
-       struct sonic_reg *csr = sc->sc_csr;
-       struct TXpkt *txp;
-       struct mtd *mtdnew;
-       struct mbuf *m;
-       int len = 0, fr = 0;
-       int i;
-       int fragoffset;         /* Offset in viritual dma space for fragment */
-
-       /* grab the replacement mtd */
-       if ((mtdnew = mtd_alloc()) == 0)
-               return (0);
-
-       /* this packet goes to mdtnext fill in the TDA */
-       mtdnext->mtd_mbuf = m0;
-       txp = mtdnext->mtd_txp;
-       SWR(txp->config, 0);
-       fragoffset = (txp - p_tda) * FRAGMAX * PICA_DMA_PAGE_SIZE;
-
-       /*
-        * Now fill in the fragments. Each fragment maps to it's
-        * own dma page. Fragments crossing a dma page boundary
-        * are split up in two fragments. This is somewhat stupid
-        * because the dma mapper can do the work, but it helps
-        * keeping the fragments in order. (read lazy programmer).
-        */
-       for (m = m0; m; m = m->m_next) {
-               unsigned va = (unsigned) mtod(m, caddr_t);
-               int resid = m->m_len;
-
-               if(resid != 0) {
-                       MachHitFlushDCache(va, resid);
-                       DMA_MAP(sc->dma, (caddr_t)va, resid, fragoffset);
-               }
-               len += resid;
-
-               while (resid) {
-                       unsigned pa;
-                       unsigned n;
-
-                       pa = sc->dma->dma_va + (va & PGOFSET) + fragoffset;
-                       n = resid;
-                       if (n > NBPG - (va & PGOFSET)) {
-                               n = NBPG - (va & PGOFSET);
-                       }
-                       if (fr < FRAGMAX) {
-                               SWR(txp->u[fr].frag_ptrlo, LOWER(pa));
-                               SWR(txp->u[fr].frag_ptrhi, UPPER(pa));
-                               SWR(txp->u[fr].frag_size, n);
-                       }
-                       fr++;
-                       va += n;
-                       resid -= n;
-                       fragoffset += PICA_DMA_PAGE_SIZE;
-               }
-       }
-       /*
-        * pad out last fragment for minimum size
-        */
-        if (len < ETHERMIN + sizeof(struct ether_header) && fr < FRAGMAX) {
-                int pad = ETHERMIN + sizeof(struct ether_header) - len;
-                static char zeros[64];
-                unsigned pa;
-
-                DMA_MAP(sc->dma, (caddr_t)zeros, pad, fragoffset);
-                pa = sc->dma->dma_va + ((unsigned)zeros & PGOFSET) + fragoffset;
-                SWR(txp->u[fr].frag_ptrlo, LOWER(pa));
-                SWR(txp->u[fr].frag_ptrhi, UPPER(pa));
-                SWR(txp->u[fr].frag_size, pad);
-                fr++;
-                len = ETHERMIN + sizeof(struct ether_header);
-        }
-
-       DMA_START(sc->dma, (caddr_t)0, 0, 0); /* Flush dma tlb */
-
-       if (fr > FRAGMAX) {
-               mtd_free(mtdnew);
-               m_freem(m0);
-               log(LOG_ERR, "%s%d: tx too many fragments %d\n",
-                   sc->sc_if.if_xname, sc->sc_if.if_softc, fr);
-               sc->sc_if.if_oerrors++;
-               return (len);
-       }
-
-       SWR(txp->frag_count, fr);
-       SWR(txp->pkt_size, len);
-
-       /* link onto the next mtd that will be used */
-       SWR(txp->u[fr].tlink, LOWER(v_tda + (mtdnew->mtd_txp - p_tda)) | EOL);
-
-       if (mtdhead == 0) {
-               /* no current transmit list start with this one */
-               mtdtail = mtdhead = mtdnext;
-               csr->s_ctda = LOWER(v_tda + (txp - p_tda));
-       } else {
-               /*
-                * have a transmit list append it to end note
-                * mtdnext is already physicaly linked to mtdtail in
-                * mtdtail->mtd_txp->u[mtdtail->mtd_txp->frag_count].tlink
-                */
-               SWR(mtdtail->mtd_txp->u[mtdtail->mtd_txp->frag_count].tlink,
-                   SRD(mtdtail->mtd_txp->u[mtdtail->mtd_txp->frag_count].tlink) & ~EOL);
-               mtdtail = mtdnext;
-       }
-       mtdnext->mtd_link = mtdnew;
-       mtdnext = mtdnew;
-
-       /* make sure chip is running */
-       wbflush();
-       csr->s_cr = CR_TXP;
-       wbflush();
-       sc->sc_if.if_timer = 5; /* 5 seconds to watch for failing to transmit */
-       return (len);
-}
-
-/*
- *  Read out the ethernet address from the cam. It is stored
- *  there by the boot when doing a loopback test. Thus we don't
- *  have to fetch it from nv ram.
- */
-int 
-sngetaddr(sc)
-       struct sn_softc *sc;
-{
-       unsigned i, x, y;
-       char   *cp, *ea;
-
-#if 0
-       sc->sc_csr->s_cr = CR_RST;
-       wbflush();
-       sc->sc_csr->s_cep = 0;
-       i = sc->sc_csr->s_cap2;
-       wbflush();
-       sc->sc_enaddr[5] = i >> 8;
-       sc->sc_enaddr[4] = i;
-       i = sc->sc_csr->s_cap1;
-       wbflush();
-       sc->sc_enaddr[3] = i >> 8;
-       sc->sc_enaddr[2] = i;
-       i = sc->sc_csr->s_cap0;
-       wbflush();
-       sc->sc_enaddr[1] = i >> 8;
-       sc->sc_enaddr[0] = i;
-
-       sc->sc_csr->s_cr = 0;
-       wbflush();
-#else
-       sc->sc_enaddr[0] = 0x08;
-       sc->sc_enaddr[1] = 0x00;
-       sc->sc_enaddr[2] = 0x20;
-       sc->sc_enaddr[3] = 0xa0;
-       sc->sc_enaddr[4] = 0x66;
-       sc->sc_enaddr[5] = 0x54;
-#endif 
-       return (0);
-}
-
-void sonictxint __P((struct sn_softc *));
-void sonicrxint __P((struct sn_softc *));
-
-int sonic_read __P((struct sn_softc *, struct RXpkt *));
-struct mbuf *sonic_get __P((struct sn_softc *, struct ether_header *, int));
-
-void 
-mtd_free(mtd)
-       struct mtd *mtd;
-{
-       mtd->mtd_link = mtdfree;
-       mtdfree = mtd;
-}
-
-struct mtd *
-mtd_alloc()
-{
-       struct mtd *mtd = mtdfree;
-
-       if (mtd) {
-               mtdfree = mtd->mtd_link;
-               mtd->mtd_link = 0;
-       }
-       return (mtd);
-}
-
-/*
- * CAM support
- */
-void 
-caminitialise()
-{
-       int     i;
-
-       for (i = 0; i < MAXCAM; i++)
-               SWR(p_cda->desc[i].cam_ep, i);
-       SWR(p_cda->enable, 0);
-}
-
-void 
-camentry(entry, ea)
-       int entry;
-       u_char *ea;
-{
-       SWR(p_cda->desc[entry].cam_ep, entry);
-       SWR(p_cda->desc[entry].cam_ap2, (ea[5] << 8) | ea[4]);
-       SWR(p_cda->desc[entry].cam_ap1, (ea[3] << 8) | ea[2]);
-       SWR(p_cda->desc[entry].cam_ap0, (ea[1] << 8) | ea[0]);
-       SWR(p_cda->enable, SRD(p_cda->enable) | (1 << entry));
-}
-
-void 
-camprogram(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr;
-       int     timeout;
-       int     i;
-
-       csr = sc->sc_csr;
-       csr->s_cdp = LOWER(v_cda);
-       csr->s_cdc = MAXCAM;
-       csr->s_cr = CR_LCAM;
-       wbflush();
-
-       timeout = 10000;
-       while (csr->s_cr & CR_LCAM && timeout--)
-               continue;
-       if (timeout == 0) {
-               /* XXX */
-               panic("sonic: CAM initialisation failed\n");
-       }
-       timeout = 10000;
-       while ((csr->s_isr & ISR_LCD) == 0 && timeout--)
-               continue;
-
-       if (csr->s_isr & ISR_LCD)
-               csr->s_isr = ISR_LCD;
-       else
-               printf("sonic: CAM initialisation without interrupt\n");
-}
-
-#if 0
-void 
-camdump(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr = sc->sc_csr;
-       int i;
-
-       printf("CAM entries:\n");
-       csr->s_cr = CR_RST;
-       wbflush();
-
-       for (i = 0; i < 16; i++) {
-               ushort  ap2, ap1, ap0;
-               csr->s_cep = i;
-               wbflush();
-               ap2 = csr->s_cap2;
-               ap1 = csr->s_cap1;
-               ap0 = csr->s_cap0;
-               printf("%d: ap2=0x%x ap1=0x%x ap0=0x%x\n", i, ap2, ap1, ap0);
-       }
-       printf("CAM enable 0x%x\n", csr->s_cep);
-
-       csr->s_cr = 0;
-       wbflush();
-}
-#endif
-
-void 
-initialise_tda(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr;
-       struct mtd *mtd;
-       int     i;
-
-       csr = sc->sc_csr;
-
-       mtdfree = mtdhead = mtdtail = (struct mtd *) 0;
-
-       for (i = 0; i < NTDA; i++) {
-               mtd = &mtda[i];
-               mtd->mtd_txp = &p_tda[i];
-               mtd->mtd_mbuf = (struct mbuf *) 0;
-               mtd_free(mtd);
-       }
-       mtdnext = mtd_alloc();
-
-       csr->s_utda = UPPER(v_tda);
-}
-
-void 
-initialise_rda(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr;
-       int     i;
-
-       csr = sc->sc_csr;
-
-       /* link the RDA's together into a circular list */
-       for (i = 0; i < (NRDA - 1); i++) {
-               SWR(p_rda[i].rlink, LOWER(&v_rda[i + 1]));
-               SWR(p_rda[i].in_use, 1);
-       }
-       SWR(p_rda[NRDA - 1].rlink, LOWER(&v_rda[0]) | EOL);
-       SWR(p_rda[NRDA - 1].in_use, 1);
-
-       /* mark end of receive descriptor list */
-       sc->sc_lrxp = &p_rda[NRDA - 1];
-
-       sc->sc_rxmark = 0;
-
-       csr->s_urda = UPPER(&v_rda[0]);
-       csr->s_crda = LOWER(&v_rda[0]);
-       wbflush();
-}
-
-void 
-initialise_rra(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr;
-       int     i;
-
-       csr = sc->sc_csr;
-
-       csr->s_eobc = RBASIZE / 2 - 2;  /* must be >= MAXETHERPKT */
-       csr->s_urra = UPPER(v_rra);
-       csr->s_rsa = LOWER(v_rra);
-       csr->s_rea = LOWER(&v_rra[NRRA]);
-       csr->s_rrp = LOWER(v_rra);
-       csr->s_rsc = 0;
-
-       /* fill up SOME of the rra with buffers */
-       for (i = 0; i < NRBA; i++) {
-               SWR(p_rra[i].buff_ptrhi, UPPER(&v_rba[i * RBASIZE]));
-               SWR(p_rra[i].buff_ptrlo, LOWER(&v_rba[i * RBASIZE]));
-               SWR(p_rra[i].buff_wchi, UPPER(RBASIZE / 2));
-               SWR(p_rra[i].buff_wclo, LOWER(RBASIZE / 2));
-       }
-       sc->sc_rramark = NRBA;
-       csr->s_rwp = LOWER(&v_rra[sc->sc_rramark]);
-       wbflush();
-}
-
-int 
-snintr(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr = sc->sc_csr;
-       int     isr;
-
-       while (isr = (csr->s_isr & ISR_ALL)) {
-               /* scrub the interrupts that we are going to service */
-               csr->s_isr = isr;
-               wbflush();
-
-               if (isr & (ISR_BR | ISR_LCD | ISR_PINT | ISR_TC))
-                       printf("sonic: unexpected interrupt status 0x%x\n", isr);
-
-               if (isr & (ISR_TXDN | ISR_TXER))
-                       sonictxint(sc);
-
-               if (isr & ISR_PKTRX)
-                       sonicrxint(sc);
-
-               if (isr & (ISR_HBL | ISR_RDE | ISR_RBE | ISR_RBAE | ISR_RFO)) {
-                       if (isr & ISR_HBL)
-                               printf("sonic: no heartbeat\n");
-                       if (isr & ISR_RDE)
-                               printf("sonic: receive descriptors exhausted\n");
-                       if (isr & ISR_RBE)
-                               printf("sonic: receive buffers exhausted\n");
-                       if (isr & ISR_RBAE)
-                               printf("sonic: receive buffer area exhausted\n");
-                       if (isr & ISR_RFO)
-                               printf("sonic: receive FIFO overrun\n");
-               }
-               if (isr & (ISR_CRC | ISR_FAE | ISR_MP)) {
-#ifdef notdef
-                       if (isr & ISR_CRC)
-                               sc->sc_crctally++;
-                       if (isr & ISR_FAE)
-                               sc->sc_faetally++;
-                       if (isr & ISR_MP)
-                               sc->sc_mptally++;
-#endif
-               }
-       }
-       return (1);
-}
-
-/*
- * Transmit interrupt routine
- */
-void 
-sonictxint(sc)
-       struct sn_softc *sc;
-{
-       struct TXpkt *txp;
-       struct sonic_reg *csr;
-       struct mtd *mtd;
-
-       if (mtdhead == (struct mtd *) 0)
-               return;
-
-       csr = sc->sc_csr;
-
-       while (mtd = mtdhead) {
-               struct mbuf *m = mtd->mtd_mbuf;
-
-               if (m == 0)
-                       break;
-
-               txp = mtd->mtd_txp;
-
-               if (SRD(txp->status) == 0)      /* it hasn't really gone yet */
-                       return;
-
-               if (ethdebug) {
-                       struct ether_header *eh = mtod(m, struct ether_header *);
-                       printf("xmit status=0x%x len=%d type=0x%x from %s",
-                           txp->status,
-                           txp->pkt_size,
-                           htons(eh->ether_type),
-                           ether_sprintf(eh->ether_shost));
-                       printf(" (to %s)\n", ether_sprintf(eh->ether_dhost));
-               }
-               m_freem(m);
-               mtd->mtd_mbuf = 0;
-               mtdhead = mtd->mtd_link;
-
-               mtd_free(mtd);
-
-               if ((SRD(txp->status) & TCR_PTX) == 0) {
-                       printf("sonic: Tx packet status=0x%x\n", txp->status);
-
-                       if (mtdhead != mtdnext) {
-                               printf("resubmitting remaining packets\n");
-                               csr->s_ctda = LOWER(mtdhead->mtd_txp);
-                               csr->s_cr = CR_TXP;
-                               wbflush();
-                               return;
-                       }
-               }
-       }
-       /* mtdhead should be at mtdnext (go) */
-       assert(mtdhead == mtdnext);
-       assert(mtdhead->mtd_link == 0);
-       mtdhead = 0;
-
-       /* and start feeding any queued packets to chip */
-       while (1) {
-               struct mbuf *m;
-
-               IF_DEQUEUE(&sc->sc_if.if_snd, m);
-               if (m == 0)     /* nothing left to send */
-                       break;
-               if (!sonicput(sc, m)) { /* not enough space */
-                       IF_PREPEND(&sc->sc_if.if_snd, m);
-                       break;
-               }
-       }
-}
-
-/*
- * Receive interrupt routine
- */
-void 
-sonicrxint(sc)
-       struct sn_softc *sc;
-{
-       struct sonic_reg *csr = sc->sc_csr;
-       struct RXpkt *rxp;
-       u_long  addr;
-       int     orra;
-
-       rxp = &p_rda[sc->sc_rxmark];
-
-       while (SRD(rxp->in_use) == 0) {
-               unsigned status = SRD(rxp->status);
-               if ((status & RCR_LPKT) == 0)
-                       printf("sonic: more than one packet in RBA!\n");
-               assert(PSNSEQ(SRD(rxp->seq_no)) == 0);
-
-               if (status & RCR_PRX) {
-                       if (sonic_read(sc, rxp)) {
-                               sc->sc_if.if_ipackets++;
-                               sc->sc_sum.ls_ipacks++;
-                               sc->sc_missed = 0;
-                       }
-               } else
-                       sc->sc_if.if_ierrors++;
-
-               /*
-                * give receive buffer area back to chip XXX what buffer
-                * did the sonic use for this descriptor answer look at
-                * the rba sequence number !! 
-                */
-               orra = RBASEQ(SRD(rxp->seq_no)) & RRAMASK;
-
-               assert(SRD(rxp->pkt_ptrhi) == SRD(p_rra[orra].buff_ptrhi));
-               assert(SRD(rxp->pkt_ptrlo) == SRD(p_rra[orra].buff_ptrlo));
-if(SRD(rxp->pkt_ptrlo) != SRD(p_rra[orra].buff_ptrlo))
-printf("%x,%x\n",SRD(rxp->pkt_ptrlo),SRD(p_rra[orra].buff_ptrlo));
-               assert(SRD(p_rra[orra].buff_wclo));
-
-               /*
-                * orra is now empty of packets and can be freed if
-                * sonic read didnt copy it out then we would have to
-                * wait !!
-                * (dont bother add it back in again straight away)
-                */
-               p_rra[sc->sc_rramark] = p_rra[orra];
-
-               /* zap old rra for fun */
-               p_rra[orra].buff_wchi = 0;
-               p_rra[orra].buff_wclo = 0;
-
-               sc->sc_rramark = (sc->sc_rramark + 1) & RRAMASK;
-               csr->s_rwp = LOWER(&v_rra[sc->sc_rramark]);
-               wbflush();
-
-               /*
-                * give recieve descriptor back to chip simple
-                * list is circular
-                */
-               SWR(rxp->in_use, 1);
-               SWR(rxp->rlink, SRD(rxp->rlink) | EOL);
-               SWR(sc->sc_lrxp->rlink, SRD(sc->sc_lrxp->rlink) & ~EOL);
-               sc->sc_lrxp = rxp;
-
-               if (++sc->sc_rxmark >= NRDA)
-                       sc->sc_rxmark = 0;
-               rxp = &p_rda[sc->sc_rxmark];
-       }
-}
-
-/*
- * sonic_read -- pull packet off interface and forward to
- * appropriate protocol handler
- */
-int 
-sonic_read(sc, rxp)
-       struct sn_softc *sc;
-       struct RXpkt *rxp;
-{
-       struct ifnet *ifp = &sc->sc_if;
-       /*extern char *ether_sprintf();*/
-       struct ether_header *et;
-       struct mbuf *m;
-       int     len, off, i;
-       caddr_t pkt;
-
-       /*
-         * Get input data length.
-         * Get pointer to ethernet header (in input buffer).
-         * Deal with trailer protocol: if type is PUP trailer
-         * get true type from first 16-bit word past data.
-         * Remember that type was trailer by setting off.
-         */
-
-       len = SRD(rxp->byte_count) - sizeof(struct ether_header) - FCSSIZE;
-       pkt = (caddr_t)((SRD(rxp->pkt_ptrhi) << 16) | SRD(rxp->pkt_ptrlo));
-       pkt = pkt - v_rba + p_rba;
-       et = (struct ether_header *)pkt;
-
-       if (ethdebug) {
-               printf("rcvd 0x%x status=0x%x, len=%d type=0x%x from %s",
-                   et, rxp->status, len, htons(et->ether_type),
-                   ether_sprintf(et->ether_shost));
-               printf(" (to %s)\n", ether_sprintf(et->ether_dhost));
-       }
-       if (len < ETHERMIN || len > ETHERMTU) {
-               printf("sonic: invalid packet length %d bytes\n", len);
-               return (0);
-       }
-
-#if NBPFILTER > 0
-       /*
-        * Check if there's a bpf filter listening on this interface.
-        * If so, hand off the raw packet to enet, then discard things
-        * not destined for us (but be sure to keep broadcast/multicast).
-        */
-       if (sc->sc_if.if_bpf) {
-               bpf_tap(sc->sc_if.if_bpf, pkt,
-                   len + sizeof(struct ether_header));
-               if ((ifp->if_flags & IFF_PROMISC) != 0 &&
-                   (et->ether_dhost[0] & 1) == 0 && /* !mcast and !bcast */
-                   bcmp(et->ether_dhost, sc->sc_enaddr,
-                           sizeof(et->ether_dhost)) != 0)
-                       return;
-       }
-#endif
-       m = sonic_get(sc, et, len);
-       if (m == NULL)
-               return (0);
-       ether_input(ifp, et, m);
-       return(1);
-}
-
-#define sonicdataaddr(eh, off, type)       ((type)(((caddr_t)((eh)+1)+(off))))
-
-/*
- * munge the recieved packet into an mbuf chain
- * because we are using stupif buffer management this
- * is slow.
-*/
-struct mbuf *
-sonic_get(sc, eh, datalen)
-       struct sn_softc *sc;
-       struct ether_header *eh;
-       int datalen;
-{
-       struct mbuf *m;
-       struct mbuf *top = 0, **mp = &top;
-       int     len;
-       char   *spkt = sonicdataaddr(eh, 0, caddr_t);
-       char   *epkt = spkt + datalen;
-       char *cp = spkt;
-
-       epkt = cp + datalen;
-       MGETHDR(m, M_DONTWAIT, MT_DATA);
-       if (m == 0)
-               return (0);
-       m->m_pkthdr.rcvif = &sc->sc_if;
-       m->m_pkthdr.len = datalen;
-       m->m_len = MHLEN;
-
-       while (datalen > 0) {
-               if (top) {
-                       MGET(m, M_DONTWAIT, MT_DATA);
-                       if (m == 0) {
-                               m_freem(top);
-                               return (0);
-                       }
-                       m->m_len = MLEN;
-               }
-               len = min(datalen, epkt - cp);
-               if (len >= MINCLSIZE) {
-                       MCLGET(m, M_DONTWAIT);
-                       if (m->m_flags & M_EXT)
-                               m->m_len = len = min(len, MCLBYTES);
-                       else
-                               len = m->m_len;
-               } else {
-                       /*
-                        * Place initial small packet/header at end of mbuf.
-                        */
-                       if (len < m->m_len) {
-                               if (top == 0 && len + max_linkhdr <= m->m_len)
-                                       m->m_data += max_linkhdr;
-                               m->m_len = len;
-                       } else
-                               len = m->m_len;
-               }
-               bcopy(cp, mtod(m, caddr_t), (unsigned) len);
-               cp += len;
-               *mp = m;
-               mp = &m->m_next;
-               datalen -= len;
-               if (cp == epkt)
-                       cp = spkt;
-       }
-       return (top);
-}
diff --git a/sys/arch/pica/dev/if_sn.h b/sys/arch/pica/dev/if_sn.h
deleted file mode 100644 (file)
index a5cd835..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (c) 1991   Algorithmics Ltd (http://www.algor.co.uk)
- * You may use, copy, and modify this program so long as you retain the
- * copyright line.
- */
-
-/*
- * if_sonic.h -- National Semiconductor DP83932BVF (SONIC)
- */
-
-/*
- * Accessing SONIC data structures and registers as 32 bit values
- * makes code endianess independent.  The SONIC is however always in
- * bigendian mode so it is necessary to ensure that data structures shared
- * between the CPU and the SONIC are always in bigendian order.
- */
-
-/*
- * Receive Resource Descriptor
- * This structure describes the buffers into which packets
- * will be received.  Note that more than one packet may be
- * packed into a single buffer if constraints permit.
- */
-#if SONICDW == 32
-struct RXrsrc {
-       u_long  buff_ptrlo;     /* buffer address LO */
-       u_long  buff_ptrhi;     /* buffer address HI */
-       u_long  buff_wclo;      /* buffer size (16bit words) LO */ 
-       u_long  buff_wchi;      /* buffer size (16bit words) HI */
-};
-#endif
-
-/*
- * Receive Descriptor
- * This structure holds information about packets received.
- */
-#if SONICDW == 32
-struct RXpkt {
-       u_long  status;         /* + receive status */
-       u_long  byte_count;     /* + packet byte count (including FCS) */
-       u_long  pkt_ptrlo;      /* + packet data LO (in RBA) */
-       u_long  pkt_ptrhi;      /* + packet data HI (in RBA) */
-       u_long  seq_no;         /* + RBA sequence numbers */
-       u_long  rlink;          /* link to next receive descriptor */
-       u_long  in_use;         /* + packet available to SONIC */
-       u_long  pad;            /* pad to multiple of 16 bytes */
-};
-#endif
-#define RBASEQ(x) (((x)>>8)&0xff)
-#define PSNSEQ(x) ((x) & 0xff)
-
-/*
- * Transmit Descriptor
- * This structure holds information about packets to be transmitted.
- */
-#define FRAGMAX        31              /* maximum number of fragments in a packet */
-#if SONICDW == 32
-struct TXpkt {
-       u_long  status;         /* + transmitted packet status */
-       u_long  config;         /* transmission configuration */
-       u_long  pkt_size;       /* entire packet size in bytes */
-       u_long  frag_count;     /* # fragments in packet */
-       union {
-               struct {
-                       u_long  _frag_ptrlo;    /* pointer to packet fragment LO */
-                       u_long  _frag_ptrhi;    /* pointer to packet fragment HI */
-                       u_long  _frag_size;     /* fragment size */
-               } u_frag;
-               struct {
-                       u_long  _tlink;         /* link to next transmit descriptor */
-               } u_link;
-       } u[FRAGMAX+1]; /* +1 makes tcp->u[FRAGMAX].u_link.link valid! */
-};
-#endif
-
-#define frag_ptrlo u_frag._frag_ptrlo
-#define frag_ptrhi u_frag._frag_ptrhi
-#define frag_size u_frag._frag_size
-#define tlink u_link._tlink
-
-#define EOL    0x0001          /* end of list marker for link fields */
-
-#define MAXCAM 16      /* number of user entries in CAM */
-#if SONICDW == 32
-struct CDA {
-       struct {
-               u_long  cam_ep;         /* CAM Entry Pointer */
-               u_long  cam_ap0;        /* CAM Address Port 0 xx-xx-xx-xx-YY-YY */
-               u_long  cam_ap1;        /* CAM Address Port 1 xx-xx-YY-YY-xxxx */
-               u_long  cam_ap2;        /* CAM Address Port 2 YY-YY-xx-xx-xx-xx */
-       } desc[MAXCAM];
-       u_long  enable;         /* mask enabling CAM entries */
-};
-#endif
-
-/*
- * SONIC registers as seen by the processor
- */
-struct sonic_reg {
-       volatile u_long s_cr;           /* 00: Command */
-       volatile u_long s_dcr;          /* 01: Data Configuration */
-       volatile u_long s_rcr;          /* 02: Receive Control */
-       volatile u_long s_tcr;          /* 03: Transmit Control */
-       volatile u_long s_imr;          /* 04: Interrupt Mask */
-       volatile u_long s_isr;          /* 05: Interrupt Status */
-       volatile u_long s_utda;         /* 06: Upper Transmit Descriptor Address */
-       volatile u_long s_ctda;         /* 07: Current Transmit Descriptor Address */
-       volatile u_long _s_tps;         /* 08* Transmit Packet Size */
-       volatile u_long _s_tfc;         /* 09* Transmit Fragment Count */
-       volatile u_long _s_tsa0;        /* 0a* Transmit Start Address 0 */
-       volatile u_long _s_tsa1;        /* 0b* Transmit Start Address 1 */
-       volatile u_long _s_tfs;         /* 0c* Transmit Fragment Size */
-       volatile u_long s_urda;         /* 0d: Upper Receive Descriptor Address */
-       volatile u_long s_crda;         /* 0e: Current Receive Descriptor Address */
-       volatile u_long _s_crba0;       /* 0f* Current Receive Buffer Address 0 */
-       volatile u_long _s_crba1;       /* 10* Current Receive Buffer Address 1 */
-       volatile u_long _s_rbwc0;       /* 11* Remaining Buffer Word Count 0 */
-       volatile u_long _s_rbwc1;       /* 12* Remaining Buffer Word Count 1 */
-       volatile u_long s_eobc;         /* 13: End Of Buffer Word Count */
-       volatile u_long s_urra;         /* 14: Upper Receive Resource Address */
-       volatile u_long s_rsa;          /* 15: Resource Start Address */
-       volatile u_long s_rea;          /* 16: Resource End Address */
-       volatile u_long s_rrp;          /* 17: Resource Read Pointer */
-       volatile u_long s_rwp;          /* 18: Resource Write Pointer */
-       volatile u_long _s_trba0;       /* 19* Temporary Receive Buffer Address 0 */
-       volatile u_long _s_trba1;       /* 1a* Temporary Receive Buffer Address 1 */
-       volatile u_long _s_tbwc0;       /* 1b* Temporary Buffer Word Count 0 */
-       volatile u_long _s_tbwc1;       /* 1c* Temporary Buffer Word Count 1 */
-       volatile u_long _s_addr0;       /* 1d* Address Generator 0 */
-       volatile u_long _s_addr1;       /* 1e* Address Generator 1 */
-       volatile u_long _s_llfa;        /* 1f* Last Link Field Address */
-       volatile u_long _s_ttda;        /* 20* Temp Transmit Descriptor Address */
-       volatile u_long s_cep;          /* 21: CAM Entry Pointer */
-       volatile u_long s_cap2;         /* 22: CAM Address Port 2 */
-       volatile u_long s_cap1;         /* 23: CAM Address Port 1 */
-       volatile u_long s_cap0;         /* 24: CAM Address Port 0 */
-       volatile u_long s_ce;           /* 25: CAM Enable */
-       volatile u_long s_cdp;          /* 26: CAM Descriptor Pointer */
-       volatile u_long s_cdc;          /* 27: CAM Descriptor Count */
-       volatile u_long s_sr;           /* 28: Silicon Revision */
-       volatile u_long s_wt0;          /* 29: Watchdog Timer 0 */
-       volatile u_long s_wt1;          /* 2a: Watchdog Timer 1 */
-       volatile u_long s_rsc;          /* 2b: Receive Sequence Counter */
-       volatile u_long s_crct;         /* 2c: CRC Error Tally */
-       volatile u_long s_faet;         /* 2d: FAE Tally */
-       volatile u_long s_mpt;          /* 2e: Missed Packet Tally */
-       volatile u_long _s_mdt;         /* 2f* Maximum Deferral Timer */
-       volatile u_long _s_rtc;         /* 30* Receive Test Control */
-       volatile u_long _s_ttc;         /* 31* Transmit Test Control */
-       volatile u_long _s_dtc;         /* 32* DMA Test Control */
-       volatile u_long _s_cc0;         /* 33* CAM Comparison 0 */
-       volatile u_long _s_cc1;         /* 34* CAM Comparison 1 */
-       volatile u_long _s_cc2;         /* 35* CAM Comparison 2 */
-       volatile u_long _s_cm;          /* 36* CAM Match */
-       volatile u_long :32;            /* 37* reserved */
-       volatile u_long :32;            /* 38* reserved */
-       volatile u_long _s_rbc;         /* 39* Receiver Byte Count */
-       volatile u_long :32;            /* 3a* reserved */
-       volatile u_long _s_tbo;         /* 3b* Transmitter Backoff Counter */
-       volatile u_long _s_trc;         /* 3c* Transmitter Random Counter */
-       volatile u_long _s_tbm;         /* 3d* Transmitter Backoff Mask */
-       volatile u_long :32;            /* 3e* Reserved */
-       volatile u_long s_dcr2;         /* 3f Data Configuration 2 (AVF) */
-};
-
-/*
- * Register Interpretations
- */
-
-/*
- * The command register is used for issuing commands to the SONIC.
- * With the exception of CR_RST, the bit is reset when the operation
- * completes.
- */
-#define CR_LCAM                0x0200  /* load CAM with descriptor at s_cdp */
-#define CR_RRRA                0x0100  /* read next RRA descriptor at s_rrp */
-#define CR_RST         0x0080  /* software reset */
-#define CR_ST          0x0020  /* start timer */
-#define CR_STP         0x0010  /* stop timer */
-#define CR_RXEN                0x0008  /* receiver enable */
-#define CR_RXDIS       0x0004  /* receiver disable */
-#define CR_TXP         0x0002  /* transmit packets */
-#define CR_HTX         0x0001  /* halt transmission */
-
-/*
- * The data configuration register establishes the SONIC's bus cycle
- * operation.  This register can only be accessed when the SONIC is in
- * reset mode (s_cr.CR_RST is set.)
- */
-#define DCR_EXBUS      0x8000  /* extended bus mode (AVF) */
-#define DCR_LBR                0x2000  /* latched bus retry */
-#define DCR_PO1                0x1000  /* programmable output 1 */
-#define DCR_PO0                0x0800  /* programmable output 0 */
-#define DCR_STERM      0x0400  /* synchronous termination */
-#define DCR_USR1       0x0200  /* reflects USR1 input pin */
-#define DCR_USR0       0x0100  /* reflects USR0 input pin */
-#define DCR_WC1                0x0080  /* wait state control 1 */
-#define DCR_WC0                0x0040  /* wait state control 0 */
-#define DCR_DW         0x0020  /* data width select */
-#define DCR_BMS                0x0010  /* DMA block mode select */
-#define DCR_RFT1       0x0008  /* receive FIFO threshold control 1 */
-#define DCR_RFT0       0x0004  /* receive FIFO threshold control 0 */
-#define DCR_TFT1       0x0002  /* transmit FIFO threshold control 1 */
-#define DCR_TFT0       0x0001  /* transmit FIFO threshold control 0 */
-
-/* data configuration register aliases */
-#define DCR_SYNC       DCR_STERM /* synchronous (memory cycle 2 clocks) */
-#define DCR_ASYNC      0         /* asynchronous (memory cycle 3 clocks) */
-
-#define DCR_WAIT0      0                 /* 0 wait states added */
-#define DCR_WAIT1      DCR_WC0           /* 1 wait state added */
-#define DCR_WAIT2      DCR_WC1           /* 2 wait states added */
-#define DCR_WAIT3      (DCR_WC1|DCR_WC0) /* 3 wait states added */
-
-#define DCR_DW16       0       /* use 16-bit DMA accesses */
-#define DCR_DW32       DCR_DW  /* use 32-bit DMA accesses */
-
-#define DCR_DMAEF      0       /* DMA until TX/RX FIFO has emptied/filled */
-#define DCR_DMABLOCK   DCR_BMS /* DMA until RX/TX threshold crossed */
-
-#define DCR_RFT4       0               /* receive threshold 4 bytes */
-#define DCR_RFT8       DCR_RFT0        /* receive threshold 8 bytes */
-#define DCR_RFT16      DCR_RFT1        /* receive threshold 16 bytes */
-#define DCR_RFT24      (DCR_RFT1|DCR_RFT0) /* receive threshold 24 bytes */
-
-#define DCR_TFT8       0               /* transmit threshold 8 bytes */
-#define DCR_TFT16      DCR_TFT0        /* transmit threshold 16 bytes */
-#define DCR_TFT24      DCR_TFT1        /* transmit threshold 24 bytes */
-#define DCR_TFT28      (DCR_TFT1|DCR_TFT0) /* transmit threshold 28 bytes */
-
-/*
- * The receive control register is used to filter incoming packets and
- * provides status information on packets received.
- * The contents of the register are copied into the RXpkt.status field
- * when a packet is received. RCR_MC - RCR_PRX are then reset.
- */
-#define RCR_ERR                0x8000  /* accept packets with CRC errors */
-#define RCR_RNT                0x4000  /* accept runt (length < 64) packets */
-#define RCR_BRD                0x2000  /* accept broadcast packets */
-#define RCR_PRO                0x1000  /* accept all physical address packets */
-#define RCR_AMC                0x0800  /* accept all multicast packets */
-#define RCR_LB1                0x0400  /* loopback control 1 */
-#define RCR_LB0                0x0200  /* loopback control 0 */
-#define RCR_MC         0x0100  /* multicast packet received */
-#define RCR_BC         0x0080  /* broadcast packet received */
-#define RCR_LPKT       0x0040  /* last packet in RBA (RBWC < EOBC) */
-#define RCR_CRS                0x0020  /* carrier sense activity */
-#define RCR_COL                0x0010  /* collision activity */
-#define RCR_CRC                0x0008  /* CRC error */
-#define RCR_FAE                0x0004  /* frame alignment error */
-#define RCR_LBK                0x0002  /* loopback packet received */
-#define RCR_PRX                0x0001  /* packet received without errors */
-
-/* receiver control register aliases */
-/* the loopback control bits provide the following options */
-#define RCR_LBNONE     0               /* no loopback - normal operation */
-#define RCR_LBMAC      RCR_LB0         /* MAC loopback */
-#define RCR_LBENDEC    RCR_LB1         /* ENDEC loopback */
-#define RCR_LBTRANS    (RCR_LB1|RCR_LB0) /* transceiver loopback */
-
-/*
- * The transmit control register controls the SONIC's transmit operations.
- * TCR_PINT - TCR_EXDIS are loaded from the TXpkt.config field at the
- * start of transmission.  TCR_EXD-TCR_PTX are cleared at the beginning
- * of transmission and updated when the transmission is completed.
- */
-#define TCR_PINT       0x8000  /* interrupt when transmission starts */
-#define TCR_POWC       0x4000  /* program out of window collision timer */
-#define TCR_CRCI       0x2000  /* transmit packet without 4 byte FCS */
-#define TCR_EXDIS      0x1000  /* disable excessive deferral timer */
-#define TCR_EXD                0x0400  /* excessive deferrals occurred (>3.2ms) */
-#define TCR_DEF                0x0200  /* deferred transmissions occurred */
-#define TCR_NCRS       0x0100  /* carrier not present during transmission */
-#define TCR_CRSL       0x0080  /* carrier lost during transmission */
-#define TCR_EXC                0x0040  /* excessive collisions (>16) detected */
-#define TCR_OWC                0x0020  /* out of window (bad) collision occurred */
-#define TCR_PMB                0x0008  /* packet monitored bad - the tansmitted
-                                * packet had a bad source address or CRC */
-#define TCR_FU         0x0004  /* FIFO underrun (memory access failed) */
-#define TCR_BCM                0x0002  /* byte count mismatch (TXpkt.pkt_size
-                                * != sum(TXpkt.frag_size) */
-#define TCR_PTX                0x0001  /* packet transmitted without errors */
-
-/* transmit control register aliases */
-#define TCR_OWCSFD     0        /* start after start of frame delimiter */
-#define TCR_OWCPRE     TCR_POWC /* start after first bit of preamble */
-
-
-/*
- * The interrupt mask register masks the interrupts that
- * are generated from the interrupt status register.
- * All reserved bits should be written with 0.
- */
-#define IMR_BREN       0x4000  /* bus retry occurred enable */
-#define IMR_HBLEN      0x2000  /* heartbeat lost enable */
-#define IMR_LCDEN      0x1000  /* load CAM done interrupt enable */
-#define IMR_PINTEN     0x0800  /* programmable interrupt enable */
-#define IMR_PRXEN      0x0400  /* packet received enable */
-#define IMR_PTXEN      0x0200  /* packet transmitted enable */
-#define IMR_TXEREN     0x0100  /* transmit error enable */
-#define IMR_TCEN       0x0080  /* timer complete enable */
-#define IMR_RDEEN      0x0040  /* receive descriptors exhausted enable */
-#define IMR_RBEEN      0x0020  /* receive buffers exhausted enable */
-#define IMR_RBAEEN     0x0010  /* receive buffer area exceeded enable */
-#define IMR_CRCEN      0x0008  /* CRC tally counter rollover enable */
-#define IMR_FAEEN      0x0004  /* FAE tally counter rollover enable */
-#define IMR_MPEN       0x0002  /* MP tally counter rollover enable */
-#define IMR_RFOEN      0x0001  /* receive FIFO overrun enable */
-
-
-/*
- * The interrupt status register indicates the source of an interrupt when
- * the INT pin goes active.  The interrupt is acknowledged by writing
- * the appropriate bit(s) in this register.
- */
-#define ISR_ALL                0xffff  /* all interrupts */
-#define ISR_BR         0x4000  /* bus retry occurred */
-#define ISR_HBL                0x2000  /* CD heartbeat lost */
-#define ISR_LCD                0x1000  /* load CAM command has completed */
-#define ISR_PINT       0x0800  /* programmed interrupt from TXpkt.config */
-#define ISR_PKTRX      0x0400  /* packet received */
-#define ISR_TXDN       0x0200  /* no remaining packets to be transmitted */
-#define ISR_TXER       0x0100  /* packet transmission caused error */
-#define ISR_TC         0x0080  /* timer complete */
-#define ISR_RDE                0x0040  /* receive descriptors exhausted */
-#define ISR_RBE                0x0020  /* receive buffers exhausted */
-#define ISR_RBAE       0x0010  /* receive buffer area exceeded */
-#define ISR_CRC                0x0008  /* CRC tally counter rollover */
-#define ISR_FAE                0x0004  /* FAE tally counter rollover */
-#define ISR_MP         0x0002  /* MP tally counter rollover */
-#define ISR_RFO                0x0001  /* receive FIFO overrun */
-
-/*
- * The second data configuration register allows additional user defined
- * pins to be controlled.  These bits are only available if s_dcr.DCR_EXBUS
- * is set.
- */
-#define DCR2_EXPO3     0x8000  /* EXUSR3 output */
-#define DCR2_EXPO2     0x4000  /* EXUSR2 output */
-#define DCR2_EXPO1     0x2000  /* EXUSR1 output */
-#define DCR2_EXPO0     0x1000  /* EXUSR0 output */
-#define DCR2_PHL       0x0010  /* extend HOLD signal by 1/2 clock */
-#define DCR2_LRDY      0x0008  /* set latched ready mode */
-#define DCR2_PCM       0x0004  /* packet compress on match */
-#define DCR2_PCNM      0x0002  /* packet compress on mismatch */
-#define DCR2_RJM       0x0001  /* reject on match */
diff --git a/sys/arch/pica/dev/isopccons b/sys/arch/pica/dev/isopccons
deleted file mode 100644 (file)
index 3e0c46d..0000000
+++ /dev/null
@@ -1,651 +0,0 @@
-From owner-netbsd-bugs@NetBSD.ORG Wed Sep 27 16:04:22 1995
-Return-Path: <owner-netbsd-bugs@NetBSD.ORG>
-Received: from outside.enea.se by enea.se (4.1/SMI-4.0)
-       id AA07925; Wed, 27 Sep 95 16:03:52 +0100
-Received: by outside.enea.se (8.6.9/8.6.9) 
-        id QAA01616 for <pefo@enea.se>; 
-        Wed, 27 Sep 1995 16:05:55 +0100
-Received: by outside.enea.se via smap (V1.3)
-       id sma001605; Wed Sep 27 16:05:41 1995
-Received: (from daemon@localhost) by pain.lcs.mit.edu (8.6.9/8.6.9) id HAA24485; Wed, 27 Sep 1995 07:06:52 -0400
-Received: from sun-lamp.pc.cs.cmu.edu by pain.lcs.mit.edu (8.6.9/8.6.9) with ESMTP id GAA24441 for <netbsd-bugs@pain.lcs.mit.edu>; Wed, 27 Sep 1995 06:50:05 -0400
-Received: (from gnats@localhost) by sun-lamp.pc.cs.cmu.edu (8.6.11/8.6.10) id GAA09175; Wed, 27 Sep 1995 06:50:02 -0400
-Resent-Date: Wed, 27 Sep 1995 06:50:02 -0400
-Resent-Message-Id: <199509271050.GAA09175@sun-lamp.pc.cs.cmu.edu>
-Resent-From: gnats@NetBSD.ORG (GNATS Management)
-Resent-To: gnats-admin@sun-lamp.pc.cs.cmu.edu
-Resent-Cc: gnats-admin@sun-lamp.pc.cs.cmu.edu, netbsd-bugs@NetBSD.ORG
-Resent-Reply-To: gnats-bugs@NetBSD.ORG, matthieu@abel.laas.fr
-Received: from abel.laas.fr (root@abel.laas.fr [140.93.0.41]) by sun-lamp.pc.cs.cmu.edu (8.6.11/8.6.10) with ESMTP id GAA09149 for <gnats-bugs@gnats.netbsd.org>; Wed, 27 Sep 1995 06:44:40 -0400
-Received: (from matthieu@localhost) by abel.laas.fr (8.6.12/8.6.9) id LAA07632; Wed, 27 Sep 1995 11:35:35 +0100
-Message-Id: <199509271035.LAA07632@abel.laas.fr>
-Date: Wed, 27 Sep 1995 11:35:35 +0100
-From: Matthieu Herrb <matthieu@abel.laas.fr>
-Reply-To: matthieu@abel.laas.fr
-To: gnats-bugs@gnats.netbsd.org
-X-Send-Pr-Version: 3.95
-Subject: port-i386/1529: iso-latin1 and foreign keyboards support for pccons
-Sender: owner-netbsd-bugs@NetBSD.ORG
-Precedence: list
-X-Loop: netbsd-bugs@NetBSD.ORG
-Status: RO
-
-
->Number:         1529
->Category:       port-i386
->Synopsis:       iso-latin1 and foreign keyboards support for pccons
->Confidential:   no
->Severity:       non-critical
->Priority:       medium
->Responsible:    gnats-admin (GNATS administrator)
->State:          open
->Class:          support
->Submitter-Id:   net
->Arrival-Date:   Wed Sep 27 06:50:01 1995
->Last-Modified:
->Originator:     Matthieu Herrb
->Organization:
-       LAAS/CNRS
-
->Release:        95/9/23
->Environment:
-System: NetBSD bluenote 1.0A NetBSD 1.0A (BLUENOTE) #0: Sun Sep 24 15:48:01 MET 1995 root@bluenote:/usr/src/sys/arch/i386/compile/BLUENOTE i386
-
->Description:
-       The following patches to pccons.c (relative to version 1.89)
-       implement 2 features, selectables by kernel opions:
-       o option DISPLAY_ISO8859 enables the display of iso-latin1
-         character set (instead of the IBM page code 437)
-       o option FRENCH_KBD, GERMAN_KBD or NORVEGIAN_KBD implement
-         support for national keyboards (implies DISPLAY_ISO8859).
-       The support of a new keyboard is easily implemented within
-       this framework.
-       Thanks to Martin Husemann for the german keyboard
-       table. Unfortunatly, I lost the name of the contributor of the
-       norvegian keyboard table.
-
-       Remark: if you don't like the static approach for foreign
-       keyboards, the ISO-latin1 display support can be easily
-       installed alone to be consistent with most X fonts and other
-       ports console drivers.
-
->How-To-Repeat:
-       n/a
->Fix:
-*** pccons.c-1.89      Sat Sep 23 22:51:45 1995
---- pccons.c   Sat Sep 23 22:51:29 1995
-***************
-*** 80,85 ****
---- 80,94 ----
-  
-  #define PCBURST 128
-  
-+ /*
-+  * Non-US keyboards definition
-+  */
-+ #if defined(FRENCH_KBD) || defined(GERMAN_KBD) || defined(NORVEGIAN_KBD)
-+ # define NONUS_KBD
-+ # define DISPLAY_ISO8859
-+ # define NUMERIC_SLASH_FIX
-+ #endif
-+ 
-  static u_short *Crtat;                       /* pointer to backing store */
-  static u_short *crtat;                       /* pointer to current char */
-  static volatile u_char ack, nak;     /* Don't ask. */
-***************
-*** 140,145 ****
---- 149,157 ----
-  #define      FUNC            0x0100  /* function key */
-  #define      KP              0x0200  /* Keypad keys */
-  #define      NONE            0x0400  /* no function */
-+ #ifdef NONUS_KBD
-+ #define ALTGR           0x0040  /* Alt graphic */
-+ #endif
-  
-  static unsigned int addr_6845 = MONO_BASE;
-  
-***************
-*** 827,832 ****
---- 839,866 ----
-       BG_MAGENTA, BG_CYAN, BG_LIGHTGREY
-  };
-  
-+ #ifdef DISPLAY_ISO8859
-+ static u_char iso2ibm437[] =
-+ {
-+            0,     0,     0,     0,     0,     0,     0,     0,
-+            0,     0,     0,     0,     0,     0,     0,     0,
-+            0,     0,     0,     0,     0,     0,     0,     0,
-+            0,     0,     0,     0,     0,     0,     0,     0,
-+         0xff,  0xad,  0x9b,  0x9c,     0,  0x9d,     0,  0x40,
-+         0x6f,  0x63,  0x61,  0xae,     0,     0,     0,     0,
-+         0xf8,  0xf1,  0xfd,  0x33,     0,  0xe6,     0,  0xfa,
-+            0,  0x31,  0x6f,  0xaf,  0xac,  0xab,     0,  0xa8,
-+         0x41,  0x41,  0x41,  0x41,  0x8e,  0x8f,  0x92,  0x80,
-+         0x45,  0x90,  0x45,  0x45,  0x49,  0x49,  0x49,  0x49,
-+         0x81,  0xa5,  0x4f,  0x4f,  0x4f,  0x4f,  0x99,  0x4f,
-+         0x4f,  0x55,  0x55,  0x55,  0x9a,  0x59,     0,  0xe1,
-+         0x85,  0xa0,  0x83,  0x61,  0x84,  0x86,  0x91,  0x87,
-+         0x8a,  0x82,  0x88,  0x89,  0x8d,  0xa1,  0x8c,  0x8b,
-+            0,  0xa4,  0x95,  0xa2,  0x93,  0x6f,  0x94,  0x6f,
-+         0x6f,  0x97,  0xa3,  0x96,  0x81,  0x98,     0,     0
-+ };
-+ #endif
-+ 
-  /*
-   * `pc3' termcap emulation.
-   */
-***************
-*** 946,951 ****
---- 980,989 ----
-                                        * break to do a scroll check.
-                                        */
-                                       for (;;) {
-+ #ifdef DISPLAY_ISO8859
-+                                             if (c & 0x80) 
-+                                                      c = iso2ibm437[c&0x7f];
-+ #endif
-                                               if (vs.so)
-                                                       wrtchar(c, vs.so_at);
-                                               else
-***************
-*** 1260,1265 ****
---- 1298,1304 ----
-  }
-  
-  #define      CODE_SIZE       4               /* Use a max of 4 for now... */
-+ #ifndef NONUS_KBD
-  typedef struct {
-       u_short type;
-       char unshift[CODE_SIZE];
-***************
-*** 1398,1403 ****
---- 1437,1861 ----
-       NONE,   "",             "",             "",             /* 127 */
-  };
-  
-+ #else /* NONUS_KBD */
-+ 
-+ typedef struct {
-+      u_short type;
-+      char unshift[CODE_SIZE];
-+      char shift[CODE_SIZE];
-+      char ctl[CODE_SIZE];
-+      char altgr[CODE_SIZE];
-+ } Scan_def;
-+ 
-+ #ifdef FRENCH_KBD
-+ 
-+ static Scan_def      scan_codes[] = {
-+      NONE,   "",     "",     "",     "",     /* 0 unused */
-+      ASCII,  "\033", "\033", "\033", "\033", /* 1 ESCape */
-+      ASCII,  "&",    "1",    "&",    "",     /* 2 1 */
-+      ASCII,  "é",    "2",    "\211", "~",    /* 3 2 */
-+      ASCII,  "\"",   "3",    "\"",   "#",    /* 4 3 */
-+      ASCII,  "'",    "4",    "'",    "{",    /* 5 4 */
-+      ASCII,  "(",    "5",    "(",    "[",    /* 6 5 */
-+      ASCII,  "-",    "6",    "-",    "|",    /* 7 6 */
-+      ASCII,  "è",    "7",    "\210", "`",    /* 8 7 */
-+      ASCII,  "_",    "8",    "\037", "\\",   /* 9 8 */
-+      ASCII,  "ç",    "9",    "\207", "^",    /* 10 9 */
-+      ASCII,  "à",    "0",    "à",    "@",    /* 11 0 */
-+      ASCII,  ")",    "°",    ")",    "]",    /* 12 - */
-+      ASCII,  "=",    "+",    "+",    "}",    /* 13 = */
-+      ASCII,  "\177", "\177", "\010", "\177", /* 14 backspace */
-+      ASCII,  "\t",   "\177\t", "\t", "\t",   /* 15 tab */
-+      ASCII,  "a",    "A",    "\001", "a",    /* 16 q */
-+      ASCII,  "z",    "Z",    "\032", "z",    /* 17 w */
-+      ASCII,  "e",    "E",    "\005", "e",    /* 18 e */
-+      ASCII,  "r",    "R",    "\022", "r",    /* 19 r */
-+      ASCII,  "t",    "T",    "\024", "t",    /* 20 t */
-+      ASCII,  "y",    "Y",    "\031", "y",    /* 21 y */
-+      ASCII,  "u",    "U",    "\025", "u",    /* 22 u */
-+      ASCII,  "i",    "I",    "\011", "i",    /* 23 i */
-+      ASCII,  "o",    "O",    "\017", "o",    /* 24 o */
-+      ASCII,  "p",    "P",    "\020", "p",    /* 25 p */
-+      NONE,   "",     "",     "",     "",     /* 26 [ */
-+      ASCII,  "$",    "£",    "$",    "$",    /* 27 ] */
-+      ASCII,  "\r",   "\r",   "\n",   "\r",   /* 28 return */
-+      CTL,    "",     "",     "",     "",     /* 29 control */
-+      ASCII,  "q",    "Q",    "\021", "q",    /* 30 a */
-+      ASCII,  "s",    "S",    "\023", "s",    /* 31 s */
-+      ASCII,  "d",    "D",    "\004", "d",    /* 32 d */
-+      ASCII,  "f",    "F",    "\006", "f",    /* 33 f */
-+      ASCII,  "g",    "G",    "\007", "g",    /* 34 g */
-+      ASCII,  "h",    "H",    "\010", "h",    /* 35 h */
-+      ASCII,  "j",    "J",    "\n",   "j",    /* 36 j */
-+      ASCII,  "k",    "K",    "\013", "k",    /* 37 k */
-+      ASCII,  "l",    "L",    "\014", "l",    /* 38 l */
-+      ASCII,  "m",    "M",    "\r",   "m",    /* 39 ; */
-+      ASCII,  "ù",    "%",    "\231", "ù",    /* 40 ' */
-+      ASCII,  "²",    "",     "²",    "²",    /* 41 ` */
-+      SHIFT,  "",     "",     "",     "",     /* 42 shift */
-+      ASCII,  "*",    "µ",    "*",    "*",    /* 43 \ */
-+      ASCII,  "w",    "W",    "\027", "w",    /* 44 z */
-+      ASCII,  "x",    "X",    "\030", "x",    /* 45 x */
-+      ASCII,  "c",    "C",    "\003", "c",    /* 46 c */
-+      ASCII,  "v",    "V",    "\026", "v",    /* 47 v */
-+      ASCII,  "b",    "B",    "\002", "b",    /* 48 b */
-+      ASCII,  "n",    "N",    "\016", "n",    /* 49 n */
-+      ASCII,  ",",    "?",    ",",    ",",    /* 50 m */
-+      ASCII,  ";",    ".",    ";",    ";",    /* 51 , */
-+      ASCII,  ":",    "/",    "\037", ":",    /* 52 . */
-+      ASCII,  "!",    "¶",    "!",    "!",    /* 53 / */
-+      SHIFT,  "",     "",     "",     "",     /* 54 shift */
-+      KP,     "*",    "*",    "*",    "*",    /* 55 kp * */
-+      ALT,    "",     "",     "",     "",     /* 56 alt */
-+      ASCII,  " ",    " ",    "\000", " ",    /* 57 space */
-+      CAPS,   "",     "",     "",     "",     /* 58 caps */
-+      FUNC,   "\033[M",       "\033[Y",       "\033[k",       "", /* 59 f1 */
-+      FUNC,   "\033[N",       "\033[Z",       "\033[l",       "", /* 60 f2 */
-+      FUNC,   "\033[O",       "\033[a",       "\033[m",       "", /* 61 f3 */
-+      FUNC,   "\033[P",       "\033[b",       "\033[n",       "", /* 62 f4 */
-+      FUNC,   "\033[Q",       "\033[c",       "\033[o",       "", /* 63 f5 */
-+      FUNC,   "\033[R",       "\033[d",       "\033[p",       "", /* 64 f6 */
-+      FUNC,   "\033[S",       "\033[e",       "\033[q",       "", /* 65 f7 */
-+      FUNC,   "\033[T",       "\033[f",       "\033[r",       "", /* 66 f8 */
-+      FUNC,   "\033[U",       "\033[g",       "\033[s",       "", /* 67 f9 */
-+      FUNC,   "\033[V",       "\033[h",       "\033[t",       "", /* 68 f10 */
-+      NUM,    "",             "",             "",             "", /* 69 num lock */
-+      SCROLL, "",             "",             "",             "", /* 70 scroll lock */
-+      KP,     "7",            "\033[H",       "7",    "",     /* 71 kp 7 */
-+      KP,     "8",            "\033[A",       "8",    "",     /* 72 kp 8 */
-+      KP,     "9",            "\033[I",       "9",    "",     /* 73 kp 9 */
-+      KP,     "-",            "-",            "-",    "",     /* 74 kp - */
-+      KP,     "4",            "\033[D",       "4",    "",     /* 75 kp 4 */
-+      KP,     "5",            "\033[E",       "5",    "",     /* 76 kp 5 */
-+      KP,     "6",            "\033[C",       "6",    "",     /* 77 kp 6 */
-+      KP,     "+",            "+",            "+",    "",     /* 78 kp + */
-+      KP,     "1",            "\033[F",       "1",    "",     /* 79 kp 1 */
-+      KP,     "2",            "\033[B",       "2",    "",     /* 80 kp 2 */
-+      KP,     "3",            "\033[G",       "3",    "",     /* 81 kp 3 */
-+      KP,     "0",            "\033[L",       "0",    "",     /* 82 kp 0 */
-+      KP,     ".",            "\177",         ".",    "",     /* 83 kp . */
-+      NONE,   "",             "",             "",     "",     /* 84 0 */
-+      NONE,   "100",          "",             "",     "",     /* 85 0 */
-+      ASCII,  "<",            ">",            "<",    "<",    /* 86 < > */
-+      FUNC,   "\033[W",       "\033[i",       "\033[u","",    /* 87 f11 */
-+      FUNC,   "\033[X",       "\033[j",       "\033[v","",    /* 88 f12 */
-+      NONE,   "102",          "",             "",     "",     /* 89 0 */
-+      NONE,   "103",          "",             "",     "",     /* 90 0 */
-+      NONE,   "",             "",             "",     "",     /* 91 0 */
-+      NONE,   "",             "",             "",     "",     /* 92 0 */
-+      NONE,   "",             "",             "",     "",     /* 93 0 */
-+      NONE,   "",             "",             "",     "",     /* 94 0 */
-+      NONE,   "",             "",             "",     "",     /* 95 0 */
-+      NONE,   "",             "",             "",     "",     /* 96 0 */
-+      NONE,   "",             "",             "",     "",     /* 97 0 */
-+      NONE,   "",             "",             "",     "",     /* 98 0 */
-+      NONE,   "",             "",             "",     "",     /* 99 0 */
-+      NONE,   "",             "",             "",     "",     /* 100 */
-+      NONE,   "",             "",             "",     "",     /* 101 */
-+      NONE,   "",             "",             "",     "",     /* 102 */
-+      NONE,   "",             "",             "",     "",     /* 103 */
-+      NONE,   "",             "",             "",     "",     /* 104 */
-+      NONE,   "",             "",             "",     "",     /* 105 */
-+      NONE,   "",             "",             "",     "",     /* 106 */
-+      NONE,   "",             "",             "",     "",     /* 107 */
-+      NONE,   "",             "",             "",     "",     /* 108 */
-+      NONE,   "",             "",             "",     "",     /* 109 */
-+      NONE,   "",             "",             "",     "",     /* 110 */
-+      NONE,   "",             "",             "",     "",     /* 111 */
-+      NONE,   "",             "",             "",     "",     /* 112 */
-+      NONE,   "",             "",             "",     "",     /* 113 */
-+      NONE,   "",             "",             "",     "",     /* 114 */
-+      NONE,   "",             "",             "",     "",     /* 115 */
-+      NONE,   "",             "",             "",     "",     /* 116 */
-+      NONE,   "",             "",             "",     "",     /* 117 */
-+      NONE,   "",             "",             "",     "",     /* 118 */
-+      NONE,   "",             "",             "",     "",     /* 119 */
-+      NONE,   "",             "",             "",     "",     /* 120 */
-+      NONE,   "",             "",             "",     "",     /* 121 */
-+      NONE,   "",             "",             "",     "",     /* 122 */
-+      NONE,   "",             "",             "",     "",     /* 123 */
-+      NONE,   "",             "",             "",     "",     /* 124 */
-+      NONE,   "",             "",             "",     "",     /* 125 */
-+      NONE,   "",             "",             "",     "",     /* 126 */
-+      NONE,   "",             "",             "",     "",     /* 127 */
-+ };
-+ 
-+ #endif /* FRENCH_KBD */
-+ 
-+ #ifdef GERMAN_KBD
-+ 
-+ static Scan_def      scan_codes[] = {
-+      NONE,   "",     "",     "",     "",     /* 0 unused */
-+      ASCII,  "\033", "\033", "\033", "\033", /* 1 ESCape */
-+      ASCII,  "1",    "!",    "!",    "",     /* 2 1 */
-+      ASCII,  "2",    "\"",   "\"",   "\xb2", /* 3 2 */
-+      ASCII,  "3",    "\xa7", "\xa7", "\xb3", /* 4 3 */
-+      ASCII,  "4",    "$",    "$",    "",     /* 5 4 */
-+      ASCII,  "5",    "%",    "%",    "",     /* 6 5 */
-+      ASCII,  "6",    "&",    "&",    "",     /* 7 6 */
-+      ASCII,  "7",    "/",    "/",    "{",    /* 8 7 */
-+      ASCII,  "8",    "(",    "(",    "[",    /* 9 8 */
-+      ASCII,  "9",    ")",    ")",    "]",    /* 10 9 */
-+      ASCII,  "0",    "=",    "=",    "}",    /* 11 0 */
-+      ASCII,  "\xdf","?",     "?",    "\\",   /* 12 - */
-+      ASCII,  "'",    "`",    "`",    "",     /* 13 = */
-+      ASCII,  "\177", "\177", "\010", "\177", /* 14 backspace */
-+      ASCII,  "\t",   "\177\t", "\t", "\t",   /* 15 tab */
-+      ASCII,  "q",    "Q",    "\021", "@",    /* 16 q */
-+      ASCII,  "w",    "W",    "\027", "w",    /* 17 w */
-+      ASCII,  "e",    "E",    "\005", "e",    /* 18 e */
-+      ASCII,  "r",    "R",    "\022", "r",    /* 19 r */
-+      ASCII,  "t",    "T",    "\024", "t",    /* 20 t */
-+      ASCII,  "z",    "Z",    "\032", "z",    /* 21 y */
-+      ASCII,  "u",    "U",    "\025", "u",    /* 22 u */
-+      ASCII,  "i",    "I",    "\011", "i",    /* 23 i */
-+      ASCII,  "o",    "O",    "\017", "o",    /* 24 o */
-+      ASCII,  "p",    "P",    "\020", "p",    /* 25 p */
-+      ASCII,  "\xfc", "\xdc", "\xfc", "\xdc", /* 26 [ */
-+      ASCII,  "+",    "*",    "+",    "~",    /* 27 ] */
-+      ASCII,  "\r",   "\r",   "\n",   "\r",   /* 28 return */
-+      CTL,    "",     "",     "",     "",     /* 29 control */
-+      ASCII,  "a",    "A",    "\001", "a",    /* 30 a */
-+      ASCII,  "s",    "S",    "\023", "s",    /* 31 s */
-+      ASCII,  "d",    "D",    "\004", "d",    /* 32 d */
-+      ASCII,  "f",    "F",    "\006", "f",    /* 33 f */
-+      ASCII,  "g",    "G",    "\007", "g",    /* 34 g */
-+      ASCII,  "h",    "H",    "\010", "h",    /* 35 h */
-+      ASCII,  "j",    "J",    "\n",   "j",    /* 36 j */
-+      ASCII,  "k",    "K",    "\013", "k",    /* 37 k */
-+      ASCII,  "l",    "L",    "\014", "l",    /* 38 l */
-+      ASCII,  "\xf6", "\xd6", "\xf6", "\xd6", /* 39 ; */
-+      ASCII,  "\xe4", "\xc4", "\xe4", "\xc4", /* 40 ' */
-+      ASCII,  "\136", "\370", "\136", "\370", /* 41 ` */
-+      SHIFT,  "",     "",     "",     "",     /* 42 shift */
-+      ASCII,  "#",    "'",    "#",    "'",    /* 43 \ */
-+      ASCII,  "y",    "Y",    "\x19", "y",    /* 44 z */
-+      ASCII,  "x",    "X",    "\030", "x",    /* 45 x */
-+      ASCII,  "c",    "C",    "\003", "c",    /* 46 c */
-+      ASCII,  "v",    "V",    "\026", "v",    /* 47 v */
-+      ASCII,  "b",    "B",    "\002", "b",    /* 48 b */
-+      ASCII,  "n",    "N",    "\016", "n",    /* 49 n */
-+      ASCII,  "m",    "M",    "\r",   "m",    /* 50 m */
-+      ASCII,  ",",    ";",    ",",    ";",    /* 51 , */
-+      ASCII,  ".",    ":",    ".",    ":",    /* 52 . */
-+      ASCII,  "-",    "_",    "-",    "_",    /* 53 / */
-+      SHIFT,  "",     "",     "",     "",     /* 54 shift */
-+      KP,     "*",    "*",    "*",    "*",    /* 55 kp * */
-+      ALT,    "",     "",     "",     "",     /* 56 alt */
-+      ASCII,  " ",    " ",    "\000", " ",    /* 57 space */
-+      CAPS,   "",     "",     "",     "",     /* 58 caps */
-+      FUNC,   "\033[M",       "\033[Y",       "\033[k",       "", /* 59 f1 */
-+      FUNC,   "\033[N",       "\033[Z",       "\033[l",       "", /* 60 f2 */
-+      FUNC,   "\033[O",       "\033[a",       "\033[m",       "", /* 61 f3 */
-+      FUNC,   "\033[P",       "\033[b",       "\033[n",       "", /* 62 f4 */
-+      FUNC,   "\033[Q",       "\033[c",       "\033[o",       "", /* 63 f5 */
-+      FUNC,   "\033[R",       "\033[d",       "\033[p",       "", /* 64 f6 */
-+      FUNC,   "\033[S",       "\033[e",       "\033[q",       "", /* 65 f7 */
-+      FUNC,   "\033[T",       "\033[f",       "\033[r",       "", /* 66 f8 */
-+      FUNC,   "\033[U",       "\033[g",       "\033[s",       "", /* 67 f9 */
-+      FUNC,   "\033[V",       "\033[h",       "\033[t",       "", /* 68 f10 */
-+      NUM,    "",             "",             "",             "", /* 69 num lock */
-+      SCROLL, "",             "",             "",             "", /* 70 scroll lock */
-+      KP,     "7",            "\033[H",       "7",    "",     /* 71 kp 7 */
-+      KP,     "8",            "\033[A",       "8",    "",     /* 72 kp 8 */
-+      KP,     "9",            "\033[I",       "9",    "",     /* 73 kp 9 */
-+      KP,     "-",            "-",            "-",    "",     /* 74 kp - */
-+      KP,     "4",            "\033[D",       "4",    "",     /* 75 kp 4 */
-+      KP,     "5",            "\033[E",       "5",    "",     /* 76 kp 5 */
-+      KP,     "6",            "\033[C",       "6",    "",     /* 77 kp 6 */
-+      KP,     "+",            "+",            "+",    "",     /* 78 kp + */
-+      KP,     "1",            "\033[F",       "1",    "",     /* 79 kp 1 */
-+      KP,     "2",            "\033[B",       "2",    "",     /* 80 kp 2 */
-+      KP,     "3",            "\033[G",       "3",    "",     /* 81 kp 3 */
-+      KP,     "0",            "\033[L",       "0",    "",     /* 82 kp 0 */
-+      KP,     ",",            "\177",         ",",    "",     /* 83 kp . */
-+      NONE,   "",             "",             "",     "",     /* 84 0 */
-+      NONE,   "100",          "",             "",     "",     /* 85 0 */
-+      ASCII,  "<",            ">",            "<",    "|",    /* 86 < > */
-+      FUNC,   "\033[W",       "\033[i",       "\033[u","",    /* 87 f11 */
-+      FUNC,   "\033[X",       "\033[j",       "\033[v","",    /* 88 f12 */
-+      NONE,   "102",          "",             "",     "",     /* 89 0 */
-+      NONE,   "103",          "",             "",     "",     /* 90 0 */
-+      NONE,   "",             "",             "",     "",     /* 91 0 */
-+      NONE,   "",             "",             "",     "",     /* 92 0 */
-+      NONE,   "",             "",             "",     "",     /* 93 0 */
-+      NONE,   "",             "",             "",     "",     /* 94 0 */
-+      NONE,   "",             "",             "",     "",     /* 95 0 */
-+      NONE,   "",             "",             "",     "",     /* 96 0 */
-+      NONE,   "",             "",             "",     "",     /* 97 0 */
-+      NONE,   "",             "",             "",     "",     /* 98 0 */
-+      NONE,   "",             "",             "",     "",     /* 99 0 */
-+      NONE,   "",             "",             "",     "",     /* 100 */
-+      NONE,   "",             "",             "",     "",     /* 101 */
-+      NONE,   "",             "",             "",     "",     /* 102 */
-+      NONE,   "",             "",             "",     "",     /* 103 */
-+      NONE,   "",             "",             "",     "",     /* 104 */
-+      NONE,   "",             "",             "",     "",     /* 105 */
-+      NONE,   "",             "",             "",     "",     /* 106 */
-+      NONE,   "",             "",             "",     "",     /* 107 */
-+      NONE,   "",             "",             "",     "",     /* 108 */
-+      NONE,   "",             "",             "",     "",     /* 109 */
-+      NONE,   "",             "",             "",     "",     /* 110 */
-+      NONE,   "",             "",             "",     "",     /* 111 */
-+      NONE,   "",             "",             "",     "",     /* 112 */
-+      NONE,   "",             "",             "",     "",     /* 113 */
-+      NONE,   "",             "",             "",     "",     /* 114 */
-+      NONE,   "",             "",             "",     "",     /* 115 */
-+      NONE,   "",             "",             "",     "",     /* 116 */
-+      NONE,   "",             "",             "",     "",     /* 117 */
-+      NONE,   "",             "",             "",     "",     /* 118 */
-+      NONE,   "",             "",             "",     "",     /* 119 */
-+      NONE,   "",             "",             "",     "",     /* 120 */
-+      NONE,   "",             "",             "",     "",     /* 121 */
-+      NONE,   "",             "",             "",     "",     /* 122 */
-+      NONE,   "",             "",             "",     "",     /* 123 */
-+      NONE,   "",             "",             "",     "",     /* 124 */
-+      NONE,   "",             "",             "",     "",     /* 125 */
-+      NONE,   "",             "",             "",     "",     /* 126 */
-+      NONE,   "",             "",             "",     "",     /* 127 */
-+ };
-+ 
-+ #endif /* GERMAN_KBD */
-+ 
-+ #ifdef NORVEGIAN_KBD
-+ static Scan_def      scan_codes[] = {
-+      NONE,   "",     "",     "",     "",     /* 0 unused */
-+      ASCII,  "\033", "\033", "\033", "\033", /* 1 ESCape */
-+      ASCII,  "1",    "!",    "",     "¡",    /* 2 1 */
-+      ASCII,  "2",    "\"",   "\000", "@",    /* 3 2 */
-+      ASCII,  "3",    "#",    "",     "£",    /* 4 3 */
-+      ASCII,  "4",    "$",    "",     "$",    /* 5 4 */
-+      ASCII,  "5",    "%",    "\034", "\\",   /* 6 5 */
-+      ASCII,  "6",    "&",    "\034", "|",    /* 7 6 */
-+      ASCII,  "7",    "/",    "\033", "{",    /* 8 7 */
-+      ASCII,  "8",    "(",    "\033", "[",    /* 9 8 */
-+      ASCII,  "9",    ")",    "\035", "]",    /* 10 9 */
-+      ASCII,  "0",    "=",    "\035", "}",    /* 11 0 */
-+      ASCII,  "+",    "?",    "\037", "¿",    /* 12 - */
-+      ASCII,  "\\",   "`",    "\034", "'",    /* 13 = */
-+      ASCII,  "\177", "\177", "\010", "\177", /* 14 backspace */
-+      ASCII,  "\t",   "\177\t", "\t", "\t",   /* 15 tab */
-+      ASCII,  "q",    "Q",    "\021", "q",    /* 16 q */
-+      ASCII,  "w",    "W",    "\027", "w",    /* 17 w */
-+      ASCII,  "e",    "E",    "\005", "ë",    /* 18 e */
-+      ASCII,  "r",    "R",    "\022", "r",    /* 19 r */
-+      ASCII,  "t",    "T",    "\024", "t",    /* 20 t */
-+      ASCII,  "y",    "Y",    "\031", "y",    /* 21 y */
-+      ASCII,  "u",    "U",    "\025", "ü",    /* 22 u */
-+      ASCII,  "i",    "I",    "\011", "i",    /* 23 i */
-+      ASCII,  "o",    "O",    "\017", "ö",    /* 24 o */
-+      ASCII,  "p",    "P",    "\020", "p",    /* 25 p */
-+      ASCII,  "Ã¥",    "Ã…",    "Ãœ",    "ü",    /* 26 [ */
-+      ASCII,  "~",    "^",    "\036", "",     /* 27 ] */
-+      ASCII,  "\r",   "\r",   "\n",   "\r",   /* 28 return */
-+      CTL,    "",     "",     "",     "",     /* 29 control */
-+      ASCII,  "a",    "A",    "\001", "ä",    /* 30 a */
-+      ASCII,  "s",    "S",    "\023", "ß",    /* 31 s */
-+      ASCII,  "d",    "D",    "\004", "d",    /* 32 d */
-+      ASCII,  "f",    "F",    "\006", "f",    /* 33 f */
-+      ASCII,  "g",    "G",    "\007", "g",    /* 34 g */
-+      ASCII,  "h",    "H",    "\010", "h",    /* 35 h */
-+      ASCII,  "j",    "J",    "\n",   "j",    /* 36 j */
-+      ASCII,  "k",    "K",    "\013", "k",    /* 37 k */
-+      ASCII,  "l",    "L",    "\014", "l",    /* 38 l */
-+      ASCII,  "ø",    "Ø",    "Ö",    "ö",    /* 39 ; */
-+      ASCII,  "æ",    "Æ",    "Ä",    "ä",    /* 40 ' */
-+      ASCII,  "|",    "@",    "\034", "§",    /* 41 ` */
-+      SHIFT,  "",     "",     "",     "",     /* 42 shift */
-+      ASCII,  "'",    "*",    "'",    "'",    /* 43 \ */
-+      ASCII,  "z",    "Z",    "\032", "z",    /* 44 z */
-+      ASCII,  "x",    "X",    "\030", "x",    /* 45 x */
-+      ASCII,  "c",    "C",    "\003", "c",    /* 46 c */
-+      ASCII,  "v",    "V",    "\026", "v",    /* 47 v */
-+      ASCII,  "b",    "B",    "\002", "b",    /* 48 b */
-+      ASCII,  "n",    "N",    "\016", "n",    /* 49 n */
-+      ASCII,  "m",    "M",    "\015", "m",    /* 50 m */
-+      ASCII,  ",",    ";",    ",",    ",",    /* 51 , */
-+      ASCII,  ".",    ":",    ".",    ".",    /* 52 . */
-+      ASCII,  "-",    "_",    "\037", "-",    /* 53 / */
-+      SHIFT,  "",     "",     "",     "",     /* 54 shift */
-+      KP,     "*",    "*",    "*",    "*",    /* 55 kp * */
-+      ALT,    "",     "",     "",     "",     /* 56 alt */
-+      ASCII,  " ",    " ",    "\000", " ",    /* 57 space */
-+      CAPS,   "",     "",     "",     "",     /* 58 caps */
-+      FUNC,   "\033[M",       "\033[Y",       "\033[k",       "", /* 59 f1 */
-+      FUNC,   "\033[N",       "\033[Z",       "\033[l",       "", /* 60 f2 */
-+      FUNC,   "\033[O",       "\033[a",       "\033[m",       "", /* 61 f3 */
-+      FUNC,   "\033[P",       "\033[b",       "\033[n",       "", /* 62 f4 */
-+      FUNC,   "\033[Q",       "\033[c",       "\033[o",       "", /* 63 f5 */
-+      FUNC,   "\033[R",       "\033[d",       "\033[p",       "", /* 64 f6 */
-+      FUNC,   "\033[S",       "\033[e",       "\033[q",       "", /* 65 f7 */
-+      FUNC,   "\033[T",       "\033[f",       "\033[r",       "", /* 66 f8 */
-+      FUNC,   "\033[U",       "\033[g",       "\033[s",       "", /* 67 f9 */
-+      FUNC,   "\033[V",       "\033[h",       "\033[t",       "", /* 68 f10 */
-+      NUM,    "",             "",             "",             "", /* 69 num lock */
-+      SCROLL, "",             "",             "",             "", /* 70 scroll lock */
-+      KP,     "7",            "\033[H",       "7",    "",     /* 71 kp 7 */
-+      KP,     "8",            "\033[A",       "8",    "",     /* 72 kp 8 */
-+      KP,     "9",            "\033[I",       "9",    "",     /* 73 kp 9 */
-+      KP,     "-",            "-",            "-",    "",     /* 74 kp - */
-+      KP,     "4",            "\033[D",       "4",    "",     /* 75 kp 4 */
-+      KP,     "5",            "\033[E",       "5",    "",     /* 76 kp 5 */
-+      KP,     "6",            "\033[C",       "6",    "",     /* 77 kp 6 */
-+      KP,     "+",            "+",            "+",    "",     /* 78 kp + */
-+      KP,     "1",            "\033[F",       "1",    "",     /* 79 kp 1 */
-+      KP,     "2",            "\033[B",       "2",    "",     /* 80 kp 2 */
-+      KP,     "3",            "\033[G",       "3",    "",     /* 81 kp 3 */
-+      KP,     "0",            "\033[L",       "0",    "",     /* 82 kp 0 */
-+      KP,     ".",            "\177",         ".",    "",     /* 83 kp . */
-+      NONE,   "",             "",             "",     "",     /* 84 0 */
-+      NONE,   "100",          "",             "",     "",     /* 85 0 */
-+      ASCII,  "<",            ">",            "»",    "«",    /* 86 < > */
-+      FUNC,   "\033[W",       "\033[i",       "\033[u","",    /* 87 f11 */
-+      FUNC,   "\033[X",       "\033[j",       "\033[v","",    /* 88 f12 */
-+      NONE,   "102",          "",             "",     "",     /* 89 0 */
-+      NONE,   "103",          "",             "",     "",     /* 90 0 */
-+      NONE,   "",             "",             "",     "",     /* 91 0 */
-+      NONE,   "",             "",             "",     "",     /* 92 0 */
-+      NONE,   "",             "",             "",     "",     /* 93 0 */
-+      NONE,   "",             "",             "",     "",     /* 94 0 */
-+      NONE,   "",             "",             "",     "",     /* 95 0 */
-+      NONE,   "",             "",             "",     "",     /* 96 0 */
-+      NONE,   "",             "",             "",     "",     /* 97 0 */
-+      NONE,   "",             "",             "",     "",     /* 98 0 */
-+      NONE,   "",             "",             "",     "",     /* 99 0 */
-+      NONE,   "",             "",             "",     "",     /* 100 */
-+      NONE,   "",             "",             "",     "",     /* 101 */
-+      NONE,   "",             "",             "",     "",     /* 102 */
-+      NONE,   "",             "",             "",     "",     /* 103 */
-+      NONE,   "",             "",             "",     "",     /* 104 */
-+      NONE,   "",             "",             "",     "",     /* 105 */
-+      NONE,   "",             "",             "",     "",     /* 106 */
-+      NONE,   "",             "",             "",     "",     /* 107 */
-+      NONE,   "",             "",             "",     "",     /* 108 */
-+      NONE,   "",             "",             "",     "",     /* 109 */
-+      NONE,   "",             "",             "",     "",     /* 110 */
-+      NONE,   "",             "",             "",     "",     /* 111 */
-+      NONE,   "",             "",             "",     "",     /* 112 */
-+      NONE,   "",             "",             "",     "",     /* 113 */
-+      NONE,   "",             "",             "",     "",     /* 114 */
-+      NONE,   "",             "",             "",     "",     /* 115 */
-+      NONE,   "",             "",             "",     "",     /* 116 */
-+      NONE,   "",             "",             "",     "",     /* 117 */
-+      NONE,   "",             "",             "",     "",     /* 118 */
-+      NONE,   "",             "",             "",     "",     /* 119 */
-+      NONE,   "",             "",             "",     "",     /* 120 */
-+      NONE,   "",             "",             "",     "",     /* 121 */
-+      NONE,   "",             "",             "",     "",     /* 122 */
-+      NONE,   "",             "",             "",     "",     /* 123 */
-+      NONE,   "",             "",             "",     "",     /* 124 */
-+      NONE,   "",             "",             "",     "",     /* 125 */
-+      NONE,   "",             "",             "",     "",     /* 126 */
-+      NONE,   "",             "",             "",     "",     /* 127 */
-+ };
-+ #endif
-+ 
-+ /*
-+  * XXXX Add tables for other keyboards here
-+  */
-+ 
-+ #endif
-+ 
-  /*
-   * Get characters from the keyboard.  If none are present, return NULL.
-   */
-***************
-*** 1513,1518 ****
---- 1971,1981 ----
-                       shift_state &= ~SHIFT;
-                       break;
-               case ALT:
-+ #ifdef NONUS_KBD
-+                      if (extended) 
-+                              shift_state &= ~ALTGR;
-+                      else
-+ #endif                    
-                       shift_state &= ~ALT;
-                       break;
-               case CTL:
-***************
-*** 1523,1528 ****
---- 1986,1999 ----
-               /*
-                * make
-                */
-+ #ifdef NUMERIC_SLASH_FIX
-+              /* fix numeric / on non US keyboard */
-+              if (extended && dt == 53) {
-+                      capchar[0] = '/';
-+                      extended = 0;
-+                      return capchar;
-+              }
-+ #endif
-               switch (scan_codes[dt].type) {
-               /*
-                * locking keys
-***************
-*** 1557,1568 ****
---- 2028,2051 ----
-                       shift_state |= SHIFT;
-                       break;
-               case ALT:
-+ #ifdef NONUS_KBD
-+                      if (extended)  
-+                              shift_state |= ALTGR;
-+                      else
-+ #endif
-                       shift_state |= ALT;
-                       break;
-               case CTL:
-                       shift_state |= CTL;
-                       break;
-               case ASCII:
-+ #ifdef NONUS_KBD
-+                      if (shift_state & ALTGR) {
-+                              capchar[0] = scan_codes[dt].altgr[0];
-+                              if (shift_state & CTL) 
-+                                      capchar[0] &= 0x1f;
-+                      } else
-+ #endif
-                       /* control has highest priority */
-                       if (shift_state & CTL)
-                               capchar[0] = scan_codes[dt].ctl[0];
-
->Audit-Trail:
->Unformatted:
-
diff --git a/sys/arch/pica/dev/lpt.c b/sys/arch/pica/dev/lpt.c
deleted file mode 100644 (file)
index 2280969..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-/*     $NetBSD: lpt.c,v 1.30 1995/04/17 12:09:17 cgd Exp $     */
-
-/*
- * Copyright (c) 1993, 1994 Charles Hannum.
- * Copyright (c) 1990 William F. Jolitz, TeleMuse
- * 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 software is a component of "386BSD" developed by 
- *     William F. Jolitz, TeleMuse.
- * 4. Neither the name of the developer nor the name "386BSD"
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS A COMPONENT OF 386BSD DEVELOPED BY WILLIAM F. JOLITZ 
- * AND IS INTENDED FOR RESEARCH AND EDUCATIONAL PURPOSES ONLY. THIS 
- * SOFTWARE SHOULD NOT BE CONSIDERED TO BE A COMMERCIAL PRODUCT. 
- * THE DEVELOPER URGES THAT USERS WHO REQUIRE A COMMERCIAL PRODUCT 
- * NOT MAKE USE OF THIS WORK.
- *
- * FOR USERS WHO WISH TO UNDERSTAND THE 386BSD SYSTEM DEVELOPED
- * BY WILLIAM F. JOLITZ, WE RECOMMEND THE USER STUDY WRITTEN 
- * REFERENCES SUCH AS THE  "PORTING UNIX TO THE 386" SERIES 
- * (BEGINNING JANUARY 1991 "DR. DOBBS JOURNAL", USA AND BEGINNING 
- * JUNE 1991 "UNIX MAGAZIN", GERMANY) BY WILLIAM F. JOLITZ AND 
- * LYNNE GREER JOLITZ, AS WELL AS OTHER BOOKS ON UNIX AND THE 
- * ON-LINE 386BSD USER MANUAL BEFORE USE. A BOOK DISCUSSING THE INTERNALS 
- * OF 386BSD ENTITLED "386BSD FROM THE INSIDE OUT" WILL BE AVAILABLE LATE 1992.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``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 DEVELOPER 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.
- */
-
-/*
- * Device Driver for AT parallel printer port
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/user.h>
-#include <sys/buf.h>
-#include <sys/kernel.h>
-#include <sys/ioctl.h>
-#include <sys/uio.h>
-#include <sys/device.h>
-#include <sys/syslog.h>
-
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-
-#include <dev/isa/lptreg.h>
-
-#define        TIMEOUT         hz*16   /* wait up to 16 seconds for a ready */
-#define        STEP            hz/4
-
-#define        LPTPRI          (PZERO+8)
-#define        LPT_BSIZE       1024
-
-#if !defined(DEBUG) || !defined(notdef)
-#define lprintf
-#else
-#define lprintf                if (lptdebug) printf
-int lptdebug = 1;
-#endif
-
-struct lpt_softc {
-       struct device sc_dev;
-       void *sc_ih;
-
-       size_t sc_count;
-       struct buf *sc_inbuf;
-       u_char *sc_cp;
-       int sc_spinmax;
-       int sc_iobase;
-       u_char sc_state;
-#define        LPT_OPEN        0x01    /* device is open */
-#define        LPT_OBUSY       0x02    /* printer is busy doing output */
-#define        LPT_INIT        0x04    /* waiting to initialize for open */
-       u_char sc_flags;
-#define        LPT_AUTOLF      0x20    /* automatic LF on CR */
-#define        LPT_NOPRIME     0x40    /* don't prime on open */
-       u_char sc_control;
-       u_char sc_laststatus;
-};
-
-int lptprobe __P((struct device *, void *, void *));
-void lptattach __P((struct device *, struct device *, void *));
-int lptintr __P((void *));
-
-struct cfattach lpt_ca = {
-       sizeof(struct lpt_softc), lptprobe, lptattach
-};
-struct cfdriver lpt_cd = {
-       NULL, "lpt", DV_TTY, NULL, 0
-};
-
-#define        LPTUNIT(s)      (minor(s) & 0x1f)
-#define        LPTFLAGS(s)     (minor(s) & 0xe0)
-
-#define        LPS_INVERT      (LPS_SELECT|LPS_NERR|LPS_NBSY|LPS_NACK)
-#define        LPS_MASK        (LPS_SELECT|LPS_NERR|LPS_NBSY|LPS_NACK|LPS_NOPAPER)
-#define        NOT_READY()     ((inb(iobase + lpt_status) ^ LPS_INVERT) & LPS_MASK)
-#define        NOT_READY_ERR() not_ready(inb(iobase + lpt_status), sc)
-static int not_ready __P((u_char, struct lpt_softc *));
-
-static void lptwakeup __P((void *arg));
-static int pushbytes __P((struct lpt_softc *));
-
-/*
- * Internal routine to lptprobe to do port tests of one byte value.
- */
-int
-lpt_port_test(port, data, mask)
-       int port;
-       u_char data, mask;
-{
-       int timeout;
-       u_char temp;
-
-       data &= mask;
-       outb(port, data);
-       timeout = 1000;
-       do {
-               delay(20);
-               temp = inb(port) & mask;
-       } while (temp != data && --timeout);
-       lprintf("lpt: port=0x%x out=0x%x in=0x%x timeout=%d\n", port, data,
-           temp, timeout);
-       return (temp == data);
-}
-
-/*
- * Logic:
- *     1) You should be able to write to and read back the same value
- *        to the data port.  Do an alternating zeros, alternating ones,
- *        walking zero, and walking one test to check for stuck bits.
- *
- *     2) You should be able to write to and read back the same value
- *        to the control port lower 5 bits, the upper 3 bits are reserved
- *        per the IBM PC technical reference manauls and different boards
- *        do different things with them.  Do an alternating zeros, alternating
- *        ones, walking zero, and walking one test to check for stuck bits.
- *
- *        Some printers drag the strobe line down when the are powered off
- *        so this bit has been masked out of the control port test.
- *
- *        XXX Some printers may not like a fast pulse on init or strobe, I
- *        don't know at this point, if that becomes a problem these bits
- *        should be turned off in the mask byte for the control port test.
- *
- *     3) Set the data and control ports to a value of 0
- */
-int
-lptprobe(parent, match, aux)
-       struct device *parent;
-       void *match, *aux;
-{
-       struct confargs *ca = aux;
-       int iobase = (int)BUS_CVTADDR(ca);
-       int port;
-       u_char mask, data;
-       int i;
-
-       if (!BUS_MATCHNAME(ca, "lpt"))
-               return (0);
-
-#ifdef DEBUG
-#define        ABORT   do {printf("lptprobe: mask %x data %x failed\n", mask, data); \
-                   return 0;} while (0)
-#else
-#define        ABORT   return 0
-#endif
-
-       port = iobase + lpt_data;
-       mask = 0xff;
-
-       data = 0x55;                            /* Alternating zeros */
-       if (!lpt_port_test(port, data, mask))
-               ABORT;
-
-       data = 0xaa;                            /* Alternating ones */
-       if (!lpt_port_test(port, data, mask))
-               ABORT;
-
-       for (i = 0; i < CHAR_BIT; i++) {        /* Walking zero */
-               data = ~(1 << i);
-               if (!lpt_port_test(port, data, mask))
-                       ABORT;
-       }
-
-       for (i = 0; i < CHAR_BIT; i++) {        /* Walking one */
-               data = (1 << i);
-               if (!lpt_port_test(port, data, mask))
-                       ABORT;
-       }
-
-       outb(iobase + lpt_data, 0);
-       outb(iobase + lpt_control, 0);
-
-       return 1;
-}
-
-void
-lptattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct lpt_softc *sc = (void *)self;
-       struct confargs *ca = aux;
-       int iobase = (int)BUS_CVTADDR(ca);
-
-       printf("\n");
-
-       sc->sc_iobase = iobase;
-       sc->sc_state = 0;
-       outb(iobase + lpt_control, LPC_NINIT);
-
-       BUS_INTR_ESTABLISH(ca, lptintr, sc);
-}
-
-/*
- * Reset the printer, then wait until it's selected and not busy.
- */
-int
-lptopen(dev, flag)
-       dev_t dev;
-       int flag;
-{
-       int unit = LPTUNIT(dev);
-       u_char flags = LPTFLAGS(dev);
-       struct lpt_softc *sc;
-       int iobase;
-       u_char control;
-       int error;
-       int spin;
-
-       if (unit >= lpt_cd.cd_ndevs)
-               return ENXIO;
-       sc = lpt_cd.cd_devs[unit];
-       if (!sc)
-               return ENXIO;
-
-#ifdef DIAGNOSTIC
-       if (sc->sc_state)
-               printf("%s: stat=0x%x not zero\n", sc->sc_dev.dv_xname,
-                   sc->sc_state);
-#endif
-
-       if (sc->sc_state)
-               return EBUSY;
-
-       sc->sc_state = LPT_INIT;
-       sc->sc_flags = flags;
-       lprintf("%s: open: flags=0x%x\n", sc->sc_dev.dv_xname, flags);
-       iobase = sc->sc_iobase;
-
-       if ((flags & LPT_NOPRIME) == 0) {
-               /* assert INIT for 100 usec to start up printer */
-               outb(iobase + lpt_control, LPC_SELECT);
-               delay(100);
-       }
-
-       control = LPC_SELECT | LPC_NINIT;
-       outb(iobase + lpt_control, control);
-
-       /* wait till ready (printer running diagnostics) */
-       for (spin = 0; NOT_READY_ERR(); spin += STEP) {
-               if (spin >= TIMEOUT) {
-                       sc->sc_state = 0;
-                       return EBUSY;
-               }
-
-               /* wait 1/4 second, give up if we get a signal */
-               if (error = tsleep((caddr_t)sc, LPTPRI | PCATCH, "lptopen",
-                   STEP) != EWOULDBLOCK) {
-                       sc->sc_state = 0;
-                       return error;
-               }
-       }
-
-       control |= LPC_IENABLE;
-       if (flags & LPT_AUTOLF)
-               control |= LPC_AUTOLF;
-       sc->sc_control = control;
-       outb(iobase + lpt_control, control);
-
-       sc->sc_inbuf = geteblk(LPT_BSIZE);
-       sc->sc_count = 0;
-       sc->sc_state = LPT_OPEN;
-
-       lptwakeup(sc);
-
-       lprintf("%s: opened\n", sc->sc_dev.dv_xname);
-       return 0;
-}
-
-int
-not_ready(status, sc)
-       u_char status;
-       struct lpt_softc *sc;
-{
-       u_char new;
-
-       status = (status ^ LPS_INVERT) & LPS_MASK;
-       new = status & ~sc->sc_laststatus;
-       sc->sc_laststatus = status;
-
-       if (new & LPS_SELECT)
-               log(LOG_NOTICE, "%s: offline\n", sc->sc_dev.dv_xname);
-       else if (new & LPS_NOPAPER)
-               log(LOG_NOTICE, "%s: out of paper\n", sc->sc_dev.dv_xname);
-       else if (new & LPS_NERR)
-               log(LOG_NOTICE, "%s: output error\n", sc->sc_dev.dv_xname);
-
-       return status;
-}
-
-void
-lptwakeup(arg)
-       void *arg;
-{
-       struct lpt_softc *sc = arg;
-       int s;
-
-       s = spltty();
-       lptintr(sc);
-       splx(s);
-
-       timeout(lptwakeup, sc, STEP);
-}
-
-/*
- * Close the device, and free the local line buffer.
- */
-lptclose(dev, flag)
-       dev_t dev;
-       int flag;
-{
-       int unit = LPTUNIT(dev);
-       struct lpt_softc *sc = lpt_cd.cd_devs[unit];
-       int iobase = sc->sc_iobase;
-
-       if (sc->sc_count)
-               (void) pushbytes(sc);
-
-       untimeout(lptwakeup, sc);
-
-       outb(iobase + lpt_control, LPC_NINIT);
-       sc->sc_state = 0;
-       outb(iobase + lpt_control, LPC_NINIT);
-       brelse(sc->sc_inbuf);
-
-       lprintf("%s: closed\n", sc->sc_dev.dv_xname);
-       return 0;
-}
-
-int
-pushbytes(sc)
-       struct lpt_softc *sc;
-{
-       int iobase = sc->sc_iobase;
-       int error;
-
-       int s;
-
-       while (sc->sc_count > 0) {
-               /* if the printer is ready for a char, give it one */
-               if ((sc->sc_state & LPT_OBUSY) == 0) {
-                       lprintf("%s: write %d\n", sc->sc_dev.dv_xname,
-                           sc->sc_count);
-                       s = spltty();
-                       (void) lptintr(sc);
-                       splx(s);
-               }
-               if (error = tsleep((caddr_t)sc, LPTPRI | PCATCH,
-                   "lptwrite2", 0))
-                       return error;
-       }
-       return 0;
-}
-
-/* 
- * Copy a line from user space to a local buffer, then call putc to get the
- * chars moved to the output queue.
- */
-lptwrite(dev, uio)
-       dev_t dev;
-       struct uio *uio;
-{
-       struct lpt_softc *sc = lpt_cd.cd_devs[LPTUNIT(dev)];
-       size_t n;
-       int error = 0;
-
-       while (n = min(LPT_BSIZE, uio->uio_resid)) {
-               uiomove(sc->sc_cp = sc->sc_inbuf->b_data, n, uio);
-               sc->sc_count = n;
-               error = pushbytes(sc);
-               if (error) {
-                       /*
-                        * Return accurate residual if interrupted or timed
-                        * out.
-                        */
-                       uio->uio_resid += sc->sc_count;
-                       sc->sc_count = 0;
-                       return error;
-               }
-       }
-       return 0;
-}
-
-/*
- * Handle printer interrupts which occur when the printer is ready to accept
- * another char.
- */
-int
-lptintr(arg)
-       void *arg;
-{
-       struct lpt_softc *sc = arg;
-       int iobase = sc->sc_iobase;
-
-#if 0
-       if ((sc->sc_state & LPT_OPEN) == 0)
-               return 0;
-#endif
-
-       /* is printer online and ready for output */
-       if (NOT_READY() && NOT_READY_ERR())
-               return 0;
-
-       if (sc->sc_count) {
-               u_char control = sc->sc_control;
-               /* send char */
-               outb(iobase + lpt_data, *sc->sc_cp++);
-               outb(iobase + lpt_control, control | LPC_STROBE);
-               sc->sc_count--;
-               outb(iobase + lpt_control, control);
-               sc->sc_state |= LPT_OBUSY;
-       } else
-               sc->sc_state &= ~LPT_OBUSY;
-
-       if (sc->sc_count == 0) {
-               /* none, wake up the top half to get more */
-               wakeup((caddr_t)sc);
-       }
-
-       return 1;
-}
-
-int
-lptioctl(dev, cmd, data, flag)
-       dev_t dev;
-       u_long cmd;
-       caddr_t data;
-       int flag;
-{
-       int error = 0;
-
-       switch (cmd) {
-       default:
-               error = ENODEV;
-       }
-
-       return error;
-}
diff --git a/sys/arch/pica/dev/pccons.c b/sys/arch/pica/dev/pccons.c
deleted file mode 100644 (file)
index f7ee077..0000000
+++ /dev/null
@@ -1,2225 +0,0 @@
-/*     $NetBSD: pccons.c,v 1.89 1995/05/04 19:35:20 cgd Exp $  */
-
-/*-
- * Copyright (c) 1993, 1994, 1995 Charles Hannum.  All rights reserved.
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz and Don Ahn.
- *
- * Copyright (c) 1994 Charles Hannum.
- * Copyright (c) 1992, 1993 Erik Forsberg.
- *
- * 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.
- *
- *     @(#)pccons.c    5.11 (Berkeley) 5/21/91
- */
-
-/*
- * code to work keyboard & display for PC-style console
- */
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/ioctl.h>
-#include <sys/proc.h>
-#include <sys/user.h>
-#include <sys/ioctl.h>
-#include <sys/select.h>
-#include <sys/tty.h>
-#include <sys/uio.h>
-#include <sys/callout.h>
-#include <sys/syslog.h>
-#include <sys/vnode.h>
-#include <sys/device.h>
-#include <sys/file.h>
-
-#include <dev/cons.h>
-
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-#include <machine/display.h>
-#include <machine/pccons.h>
-#include <pica/pica/pica.h>
-
-#include <dev/isa/isavar.h>
-#include <machine/kbdreg.h>
-
-#define        XFREE86_BUG_COMPAT
-
-#ifndef BEEP_FREQ
-#define BEEP_FREQ 1600
-#endif
-#ifndef BEEP_TIME
-#define BEEP_TIME (hz/5)
-#endif
-
-#define PCBURST 128
-
-static u_short *Crtat;                 /* pointer to backing store */
-static u_short *crtat;                 /* pointer to current char */
-static u_char async, kernel, polling;  /* Really, you don't want to know. */
-static u_char lock_state = 0x00,       /* all off */
-             old_lock_state = 0xff,
-             typematic_rate = 0xff,    /* don't update until set by user */
-             old_typematic_rate = 0xff;
-static u_short cursor_shape = 0xffff,  /* don't update until set by user */
-              old_cursor_shape = 0xffff;
-int pc_xmode = 0;
-
-/*
- *  Keyboard output queue.
- */
-int    kb_oq_put = 0;
-int    kb_oq_get = 0;
-u_char kb_oq[8];
-
-#define        PCUNIT(x)       (minor(x))
-
-static struct video_state {
-       int     cx, cy;         /* escape parameters */
-       int     row, col;       /* current cursor position */
-       int     nrow, ncol, nchr;       /* current screen geometry */
-       u_char  state;          /* parser state */
-#define        VSS_ESCAPE      1
-#define        VSS_EBRACE      2
-#define        VSS_EPARAM      3
-       char    so;             /* in standout mode? */
-       char    color;          /* color or mono display */
-       char    at;             /* normal attributes */
-       char    so_at;          /* standout attributes */
-} vs;
-
-struct pc_softc {
-       struct  device sc_dev;
-       struct  tty *sc_tty;
-};
-
-struct pms_softc {             /* driver status information */
-       struct device sc_dev;
-
-       struct clist sc_q;
-       struct selinfo sc_rsel;
-       u_char sc_state;        /* mouse driver state */
-#define        PMS_OPEN        0x01    /* device is open */
-#define        PMS_ASLP        0x02    /* waiting for mouse data */
-       u_char sc_status;       /* mouse button status */
-       int sc_x, sc_y;         /* accumulated motion in the X,Y axis */
-};
-
-int pcmatch __P((struct device *, void *, void *));
-void pcattach __P((struct device *, struct device *, void *));
-int pcintr __P((void *));
-
-struct cfattach pc_ca = {
-        sizeof(struct pc_softc), pcmatch, pcattach
-};
-struct cfdriver pc_cd = {
-       NULL, "pc", DV_TTY, NULL, 0
-};
-
-int pmsprobe __P((struct device *, void *, void *));
-void pmsattach __P((struct device *, struct device *, void *));
-int pmsintr __P((void *));
-
-struct cfattach pms_ca = {
-       sizeof(struct pms_softc), pmsprobe, pmsattach
-};
-struct cfdriver pms_cd = {
-       NULL, "pms", DV_TTY, NULL, 0
-};
-
-#define        PMSUNIT(dev)    (minor(dev))
-
-#define        COL             80
-#define        ROW             25
-#define        CHR             2
-
-/*
- * DANGER WIL ROBINSON -- the values of SCROLL, NUM, CAPS, and ALT are
- * important.
- */
-#define        SCROLL          0x0001  /* stop output */
-#define        NUM             0x0002  /* numeric shift  cursors vs. numeric */
-#define        CAPS            0x0004  /* caps shift -- swaps case of letter */
-#define        SHIFT           0x0008  /* keyboard shift */
-#define        CTL             0x0010  /* control shift  -- allows ctl function */
-#define        ASCII           0x0020  /* ascii code for this key */
-#define        ALTGR           0x0040  /* alt graphic */
-#define        ALT             0x0080  /* alternate shift -- alternate chars */
-#define        FUNC            0x0100  /* function key */
-#define        KP              0x0200  /* Keypad keys */
-#define        NONE            0x0400  /* no function */
-
-static unsigned int addr_6845 = MONO_BASE;
-
-char *sget __P((void));
-void sput __P((u_char *, int));
-
-void   pcstart();
-int    pcparam();
-char   partab[];
-
-extern pcopen(dev_t, int, int, struct proc *);
-
-#define        KBD_DELAY \
-               DELAY(10);
-
-static inline int
-kbd_wait_output()
-{
-       u_int i;
-
-       for (i = 100000; i; i--)
-               if ((inb(KBSTATP) & KBS_IBF) == 0) {
-                       KBD_DELAY;
-                       return 1;
-               }
-       return 0;
-}
-
-static inline int
-kbd_wait_input()
-{
-       u_int i;
-
-       for (i = 100000; i; i--)
-               if ((inb(KBSTATP) & KBS_DIB) != 0) {
-                       KBD_DELAY;
-                       return 1;
-               }
-       return 0;
-}
-
-static inline void
-kbd_flush_input()
-{
-       u_char c;
-
-       while (c = inb(KBSTATP) & 0x03)
-               if ((c & KBS_DIB) == KBS_DIB) {
-                       /* XXX - delay is needed to prevent some keyboards from
-                          wedging when the system boots */
-                       delay(6);
-                       (void) inb(KBDATAP);
-               }
-}
-
-
-#if 1
-/*
- * Get the current command byte.
- */
-static u_char
-kbc_get8042cmd()
-{
-
-       if (!kbd_wait_output())
-               return -1;
-       outb(KBCMDP, K_RDCMDBYTE);
-       if (!kbd_wait_input())
-               return -1;
-       return inb(KBDATAP);
-}
-#endif
-
-/*
- * Pass command byte to keyboard controller (8042).
- */
-static int
-kbc_put8042cmd(val)
-       u_char val;
-{
-
-       if (!kbd_wait_output())
-               return 0;
-       outb(KBCMDP, K_LDCMDBYTE);
-       if (!kbd_wait_output())
-               return 0;
-       outb(KBOUTP, val);
-       return 1;
-}
-
-/*
- * Pass command to keyboard itself
- */
-int
-kbd_cmd(val, polling)
-       u_char val;
-       u_char polling;
-{
-       u_int retries = 3;
-       register u_int i;
-
-       if(!polling) {
-               i = spltty();
-               if(kb_oq_get == kb_oq_put) {
-                       outb(KBOUTP, val);
-               }
-               kb_oq[kb_oq_put] = val;
-               kb_oq_put = (kb_oq_put + 1) & 7;
-               splx(i);
-               return(1);
-       }
-       else do {
-               if (!kbd_wait_output())
-                       return 0;
-               outb(KBOUTP, val);
-               for (i = 100000; i; i--) {
-                       if (inb(KBSTATP) & KBS_DIB) {
-                               register u_char c;
-
-                               KBD_DELAY;
-                               c = inb(KBDATAP);
-                               if (c == KBR_ACK || c == KBR_ECHO) {
-                                       return 1;
-                               }
-                               if (c == KBR_RESEND) {
-                                       break;
-                               }
-#ifdef DIAGNOSTIC
-                               printf("kbd_cmd: input char %x lost\n", c);
-#endif
-                       }
-               }
-       } while (--retries);
-       return 0;
-}
-
-void
-set_cursor_shape()
-{
-       register int iobase = addr_6845;
-
-       outb(iobase, 10);
-       outb(iobase+1, cursor_shape >> 8);
-       outb(iobase, 11);
-       outb(iobase+1, cursor_shape);
-       old_cursor_shape = cursor_shape;
-}
-
-void
-get_cursor_shape()
-{
-       register int iobase = addr_6845;
-
-       outb(iobase, 10);
-       cursor_shape = inb(iobase+1) << 8;
-       outb(iobase, 11);
-       cursor_shape |= inb(iobase+1);
-
-       /*
-        * real 6845's, as found on, MDA, Hercules or CGA cards, do
-        * not support reading the cursor shape registers. the 6845
-        * tri-states it's data bus. This is _normally_ read by the
-        * cpu as either 0x00 or 0xff.. in which case we just use
-        * a line cursor.
-        */
-       if (cursor_shape == 0x0000 || cursor_shape == 0xffff)
-               cursor_shape = 0x0b10;
-       else
-               cursor_shape &= 0x1f1f;
-}
-
-void
-do_async_update(poll)
-       u_char poll;
-{
-       int pos;
-       static int old_pos = -1;
-
-       async = 0;
-
-       if (lock_state != old_lock_state) {
-               old_lock_state = lock_state;
-               if (!kbd_cmd(KBC_MODEIND, poll) ||
-                   !kbd_cmd(lock_state, poll)) {
-                       printf("pc: timeout updating leds\n");
-                       (void) kbd_cmd(KBC_ENABLE, poll);
-               }
-       }
-       if (typematic_rate != old_typematic_rate) {
-               old_typematic_rate = typematic_rate;
-               if (!kbd_cmd(KBC_TYPEMATIC, poll) ||
-                   !kbd_cmd(typematic_rate, poll)) {
-                       printf("pc: timeout updating typematic rate\n");
-                       (void) kbd_cmd(KBC_ENABLE, poll);
-               }
-       }
-
-       if (pc_xmode > 0)
-               return;
-
-       pos = crtat - Crtat;
-       if (pos != old_pos) {
-               register int iobase = addr_6845;
-               outb(iobase, 14);
-               outb(iobase+1, pos >> 8);
-               outb(iobase, 15);
-               outb(iobase+1, pos);
-               old_pos = pos;
-       }
-       if (cursor_shape != old_cursor_shape)
-               set_cursor_shape();
-}
-
-void
-async_update()
-{
-
-       if (kernel || polling) {
-               if (async)
-                       untimeout(do_async_update, NULL);
-               do_async_update(1);
-       } else {
-               if (async)
-                       return;
-               async = 1;
-               timeout(do_async_update, NULL, 1);
-       }
-}
-
-/*
- * these are both bad jokes
- */
-int
-pcmatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata, *aux;
-{
-       struct confargs *ca = aux;
-       u_int i;
-
-       /* Make shure we're looking for this type of device */
-       if(!BUS_MATCHNAME(ca, "pc"))
-               return(0);
-
-       /* Enable interrupts and keyboard, etc. */
-       if (!kbc_put8042cmd(CMDBYTE)) {
-               printf("pcmatch: command error\n");
-               return 0;
-       }
-
-#if 1
-       /* Flush any garbage. */
-       kbd_flush_input();
-       /* Reset the keyboard. */
-       if (!kbd_cmd(KBC_RESET, 1)) {
-               printf("pcmatch: reset error %d\n", 1);
-               goto lose;
-       }
-       for (i = 600000; i; i--)
-               if ((inb(KBSTATP) & KBS_DIB) != 0) {
-                       KBD_DELAY;
-                       break;
-               }
-       if (i == 0 || inb(KBDATAP) != KBR_RSTDONE) {
-               printf("pcmatch: reset error %d\n", 2);
-               goto lose;
-       }
-       /*
-        * Some keyboards seem to leave a second ack byte after the reset.
-        * This is kind of stupid, but we account for them anyway by just
-        * flushing the buffer.
-        */
-       kbd_flush_input();
-       /* Just to be sure. */
-       if (!kbd_cmd(KBC_ENABLE, 1)) {
-               printf("pcmatch: reset error %d\n", 3);
-               goto lose;
-       }
-
-       /*
-        * Some keyboard/8042 combinations do not seem to work if the keyboard
-        * is set to table 1; in fact, it would appear that some keyboards just
-        * ignore the command altogether.  So by default, we use the AT scan
-        * codes and have the 8042 translate them.  Unfortunately, this is
-        * known to not work on some PS/2 machines.  We try desparately to deal
-        * with this by checking the (lack of a) translate bit in the 8042 and
-        * attempting to set the keyboard to XT mode.  If this all fails, well,
-        * tough luck.
-        *
-        * XXX It would perhaps be a better choice to just use AT scan codes
-        * and not bother with this.
-        */
-       if (kbc_get8042cmd() & KC8_TRANS) {
-               /* The 8042 is translating for us; use AT codes. */
-               if (!kbd_cmd(KBC_SETTABLE, 1) || !kbd_cmd(2, 1)) {
-                       printf("pcmatch: reset error %d\n", 4);
-                       goto lose;
-               }
-       } else {
-               /* Stupid 8042; set keyboard to XT codes. */
-               if (!kbd_cmd(KBC_SETTABLE, 1) || !kbd_cmd(1, 1)) {
-                       printf("pcmatch: reset error %d\n", 5);
-                       goto lose;
-               }
-       }
-
-lose:
-       /*
-        * Technically, we should probably fail the match.  But we'll be nice
-        * and allow keyboard-less machines to boot with the console.
-        */
-#endif
-
-       return 1;
-}
-
-void
-pcattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct confargs *ca = aux;
-       struct pc_softc *sc = (void *)self;
-
-       printf(": %s\n", vs.color ? "color" : "mono");
-       do_async_update(1);
-
-       BUS_INTR_ESTABLISH(ca, pcintr, (void *)(long)sc);
-}
-
-int
-pcopen(dev, flag, mode, p)
-       dev_t dev;
-       int flag, mode;
-       struct proc *p;
-{
-       struct pc_softc *sc;
-       int unit = PCUNIT(dev);
-       struct tty *tp;
-
-       if (unit >= pc_cd.cd_ndevs)
-               return ENXIO;
-       sc = pc_cd.cd_devs[unit];
-       if (sc == 0)
-               return ENXIO;
-
-       if (!sc->sc_tty) {
-               tp = sc->sc_tty = ttymalloc();
-       }
-       else {
-               tp = sc->sc_tty;
-       }
-
-       tp->t_oproc = pcstart;
-       tp->t_param = pcparam;
-       tp->t_dev = dev;
-       if ((tp->t_state & TS_ISOPEN) == 0) {
-               tp->t_state |= TS_WOPEN;
-               ttychars(tp);
-               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 = TTYDEF_SPEED;
-               pcparam(tp, &tp->t_termios);
-               ttsetwater(tp);
-       } else if (tp->t_state&TS_XCLUDE && p->p_ucred->cr_uid != 0)
-               return EBUSY;
-       tp->t_state |= TS_CARR_ON;
-
-       return ((*linesw[tp->t_line].l_open)(dev, tp));
-}
-
-int
-pcclose(dev, flag, mode, p)
-       dev_t dev;
-       int flag, mode;
-       struct proc *p;
-{
-       struct pc_softc *sc = pc_cd.cd_devs[PCUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-
-       (*linesw[tp->t_line].l_close)(tp, flag);
-       ttyclose(tp);
-#ifdef notyet /* XXX */
-       ttyfree(tp);
-#endif
-       return(0);
-}
-
-int
-pcread(dev, uio, flag)
-       dev_t dev;
-       struct uio *uio;
-       int flag;
-{
-       struct pc_softc *sc = pc_cd.cd_devs[PCUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-
-       return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
-}
-
-int
-pcwrite(dev, uio, flag)
-       dev_t dev;
-       struct uio *uio;
-       int flag;
-{
-       struct pc_softc *sc = pc_cd.cd_devs[PCUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-
-       return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
-}
-
-struct tty *
-pctty(dev)
-       dev_t dev;
-{
-       struct pc_softc *sc = pc_cd.cd_devs[PCUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-
-       return (tp);
-}
-
-/*
- * Got a console receive interrupt -
- * the console processor wants to give us a character.
- * Catch the character, and see who it goes to.
- */
-int
-pcintr(arg)
-       void *arg;
-{
-       struct pc_softc *sc = arg;
-       register struct tty *tp = sc->sc_tty;
-       u_char *cp;
-
-       if ((inb(KBSTATP) & KBS_DIB) == 0)
-               return 0;
-       if (polling)
-               return 1;
-       do {
-               cp = sget();
-               if (!tp || (tp->t_state & TS_ISOPEN) == 0)
-                       return 1;
-               if (cp)
-                       do
-                               (*linesw[tp->t_line].l_rint)(*cp++, tp);
-                       while (*cp);
-       } while (inb(KBSTATP) & KBS_DIB);
-       return 1;
-}
-
-int
-pcioctl(dev, cmd, data, flag, p)
-       dev_t dev;
-       u_long cmd;
-       caddr_t data;
-       int flag;
-       struct proc *p;
-{
-       struct pc_softc *sc = pc_cd.cd_devs[PCUNIT(dev)];
-       struct tty *tp = sc->sc_tty;
-       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 CONSOLE_X_MODE_ON:
-               pc_xmode_on();
-               return 0;
-       case CONSOLE_X_MODE_OFF:
-               pc_xmode_off();
-               return 0;
-       case CONSOLE_X_BELL:
-               /*
-                * If set, data is a pointer to a length 2 array of
-                * integers.  data[0] is the pitch in Hz and data[1]
-                * is the duration in msec.
-                */
-               if (data)
-                       sysbeep(((int*)data)[0],
-                               (((int*)data)[1] * hz) / 1000);
-               else
-                       sysbeep(BEEP_FREQ, BEEP_TIME);
-               return 0;
-       case CONSOLE_SET_TYPEMATIC_RATE: {
-               u_char  rate;
-
-               if (!data)
-                       return EINVAL;
-               rate = *((u_char *)data);
-               /*
-                * Check that it isn't too big (which would cause it to be
-                * confused with a command).
-                */
-               if (rate & 0x80)
-                       return EINVAL;
-               typematic_rate = rate;
-               async_update();
-               return 0;
-       }
-       default:
-               return ENOTTY;
-       }
-
-#ifdef DIAGNOSTIC
-       panic("pcioctl: impossible");
-#endif
-}
-
-void
-pcstart(tp)
-       struct tty *tp;
-{
-       struct clist *cl;
-       int s, len, n;
-       u_char buf[PCBURST];
-
-       s = spltty();
-       if (tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))
-               goto out;
-       tp->t_state |= TS_BUSY;
-       splx(s);
-       /*
-        * We need to do this outside spl since it could be fairly
-        * expensive and we don't want our serial ports to overflow.
-        */
-       cl = &tp->t_outq;
-       len = q_to_b(cl, buf, PCBURST);
-       sput(buf, len);
-       s = spltty();
-       tp->t_state &= ~TS_BUSY;
-       if (cl->c_cc) {
-               tp->t_state |= TS_TIMEOUT;
-               timeout(ttrstrt, tp, 1);
-       }
-       if (cl->c_cc <= tp->t_lowat) {
-               if (tp->t_state & TS_ASLEEP) {
-                       tp->t_state &= ~TS_ASLEEP;
-                       wakeup(cl);
-               }
-               selwakeup(&tp->t_wsel);
-       }
-out:
-       splx(s);
-}
-
-void
-pcstop(tp, flag)
-       struct tty *tp;
-       int flag;
-{
-
-}
-
-void
-pccnprobe(cp)
-       struct consdev *cp;
-{
-       int maj;
-
-       /* locate the major number */
-       for (maj = 0; maj < nchrdev; maj++)
-               if (cdevsw[maj].d_open == pcopen)
-                       break;
-
-       /* initialize required fields */
-       cp->cn_dev = makedev(maj, 0);
-       cp->cn_pri = CN_INTERNAL;
-}
-
-/* ARGSUSED */
-void
-pccninit(cp)
-       struct consdev *cp;
-{
-
-       /*
-        * For now, don't screw with it.
-        */
-       /* crtat = 0; */
-}
-
-/* ARGSUSED */
-void
-pccnputc(dev, c)
-       dev_t dev;
-       char c;
-{
-       u_char oldkernel = kernel;
-
-       kernel = 1;
-       if (c == '\n')
-               sput("\r\n", 2);
-       else
-               sput(&c, 1);
-       kernel = oldkernel;
-}
-
-/* ARGSUSED */
-pccngetc(dev)
-       dev_t dev;
-{
-       register char *cp;
-
-       if (pc_xmode > 0)
-               return 0;
-
-       do {
-               /* wait for byte */
-               while ((inb(KBSTATP) & KBS_DIB) == 0);
-               /* see if it's worthwhile */
-               cp = sget();
-       } while (!cp);
-       if (*cp == '\r')
-               return '\n';
-       return *cp;
-}
-
-void
-pccnpollc(dev, on)
-       dev_t dev;
-       int on;
-{
-
-       polling = on;
-       if (!on) {
-               int unit;
-               struct pc_softc *sc;
-               int s;
-
-               /*
-                * If disabling polling on a device that's been configured,
-                * make sure there are no bytes left in the FIFO, holding up
-                * the interrupt line.  Otherwise we won't get any further
-                * interrupts.
-                */
-               unit = PCUNIT(dev);
-               if (pc_cd.cd_ndevs > unit) {
-                       sc = pc_cd.cd_devs[unit];
-                       if (sc != 0) {
-                               s = spltty();
-                               pcintr(sc);
-                               splx(s);
-                       }
-               }
-       }
-}      
-
-/*
- * Set line parameters.
- */
-int
-pcparam(tp, t)
-       struct tty *tp;
-       struct termios *t;
-{
-
-       tp->t_ispeed = t->c_ispeed;
-       tp->t_ospeed = t->c_ospeed;
-       tp->t_cflag = t->c_cflag;
-       return 0;
-}
-
-#define        wrtchar(c, at) do {\
-       char *cp = (char *)crtat; *cp++ = (c); *cp = (at); crtat++; vs.col++; \
-} while (0)
-
-/* translate ANSI color codes to standard pc ones */
-static char fgansitopc[] = {
-       FG_BLACK, FG_RED, FG_GREEN, FG_BROWN, FG_BLUE,
-       FG_MAGENTA, FG_CYAN, FG_LIGHTGREY
-};
-
-static char bgansitopc[] = {
-       BG_BLACK, BG_RED, BG_GREEN, BG_BROWN, BG_BLUE,
-       BG_MAGENTA, BG_CYAN, BG_LIGHTGREY
-};
-
-static u_char iso2ibm437[] =
-{     
-            0,     0,     0,     0,     0,     0,     0,     0,
-            0,     0,     0,     0,     0,     0,     0,     0,
-            0,     0,     0,     0,     0,     0,     0,     0,
-            0,     0,     0,     0,     0,     0,     0,     0,
-         0xff,  0xad,  0x9b,  0x9c,     0,  0x9d,     0,  0x40,
-         0x6f,  0x63,  0x61,  0xae,     0,     0,     0,     0,
-         0xf8,  0xf1,  0xfd,  0x33,     0,  0xe6,     0,  0xfa,
-            0,  0x31,  0x6f,  0xaf,  0xac,  0xab,     0,  0xa8,
-         0x41,  0x41,  0x41,  0x41,  0x8e,  0x8f,  0x92,  0x80,
-         0x45,  0x90,  0x45,  0x45,  0x49,  0x49,  0x49,  0x49,
-         0x81,  0xa5,  0x4f,  0x4f,  0x4f,  0x4f,  0x99,  0x4f,
-         0x4f,  0x55,  0x55,  0x55,  0x9a,  0x59,     0,  0xe1,
-         0x85,  0xa0,  0x83,  0x61,  0x84,  0x86,  0x91,  0x87,
-         0x8a,  0x82,  0x88,  0x89,  0x8d,  0xa1,  0x8c,  0x8b,
-            0,  0xa4,  0x95,  0xa2,  0x93,  0x6f,  0x94,  0x6f,
-         0x6f,  0x97,  0xa3,  0x96,  0x81,  0x98,     0,     0
-};
-
-/*
- * `pc3' termcap emulation.
- */
-void
-sput(cp, n)
-       u_char *cp;
-       int n;
-{
-       u_char c, scroll = 0;
-
-       if (pc_xmode > 0)
-               return;
-
-       if (crtat == 0) {
-               u_short volatile *cp;
-               u_short was;
-               unsigned cursorat;
-
-               cp = (u_short *)CGA_BUF;
-               was = *cp;
-               *cp = (u_short) 0xA55A;
-               if (*cp != 0xA55A) {
-                       cp = (u_short *)MONO_BUF;
-                       addr_6845 = MONO_BASE;
-                       vs.color = 0;
-               } else {
-                       *cp = was;
-                       addr_6845 = CGA_BASE;
-                       vs.color = 1;
-               }
-
-               /* Extract cursor location */
-               outb(addr_6845, 14);
-               cursorat = inb(addr_6845+1) << 8;
-               outb(addr_6845, 15);
-               cursorat |= inb(addr_6845+1);
-
-#ifdef FAT_CURSOR
-               cursor_shape = 0x0012;
-#else
-               get_cursor_shape();
-#endif
-
-               Crtat = (u_short *)cp;
-               crtat = (u_short *)(cp + cursorat);
-
-               vs.ncol = COL;
-               vs.nrow = ROW;
-               vs.nchr = COL * ROW;
-               vs.at = FG_LIGHTGREY | BG_BLACK;
-
-               if (vs.color == 0)
-                       vs.so_at = FG_BLACK | BG_LIGHTGREY;
-               else
-                       vs.so_at = FG_YELLOW | BG_BLACK;
-
-               fillw((vs.at << 8) | ' ', crtat, vs.nchr - cursorat);
-       }
-
-       while (n--) {
-               if (!(c = *cp++))
-                       continue;
-
-               switch (c) {
-               case 0x1B:
-                       if (vs.state >= VSS_ESCAPE) {
-                               wrtchar(c, vs.so_at); 
-                               vs.state = 0;
-                               goto maybe_scroll;
-                       } else
-                               vs.state = VSS_ESCAPE;
-                       break;
-
-               case '\t': {
-                       int inccol = 8 - (vs.col & 7);
-                       crtat += inccol;
-                       vs.col += inccol;
-               }
-               maybe_scroll:
-                       if (vs.col >= COL) {
-                               vs.col -= COL;
-                               scroll = 1;
-                       }
-                       break;
-
-               case '\010':
-                       if (crtat <= Crtat)
-                               break;
-                       --crtat;
-                       if (--vs.col < 0)
-                               vs.col += COL;  /* non-destructive backspace */
-                       break;
-
-               case '\r':
-                       crtat -= vs.col;
-                       vs.col = 0;
-                       break;
-
-               case '\n':
-                       crtat += vs.ncol;
-                       scroll = 1;
-                       break;
-
-               default:
-               bypass:
-                       switch (vs.state) {
-                       case 0:
-                               if (c == '\a')
-                                       sysbeep(BEEP_FREQ, BEEP_TIME);
-                               else {
-                                       /*
-                                        * If we're outputting multiple printed
-                                        * characters, just blast them to the
-                                        * screen until we reach the end of the
-                                        * buffer or a control character.  This
-                                        * saves time by short-circuiting the
-                                        * switch.
-                                        * If we reach the end of the line, we
-                                        * break to do a scroll check.
-                                        */
-                                       for (;;) {
-                                               if (c & 0x80)
-                                                       c = iso2ibm437[c&0x7f];
-
-                                               if (vs.so)
-                                                       wrtchar(c, vs.so_at);
-                                               else
-                                                       wrtchar(c, vs.at);
-                                               if (vs.col >= vs.ncol) {
-                                                       vs.col = 0;
-                                                       scroll = 1;
-                                                       break;
-                                               }
-                                               if (!n || (c = *cp) < ' ')
-                                                       break;
-                                               n--, cp++;
-                                       }
-                               }
-                               break;
-                       case VSS_ESCAPE:
-                               if (c == '[') { /* Start ESC [ sequence */
-                                       vs.cx = vs.cy = 0;
-                                       vs.state = VSS_EBRACE;
-                               } else if (c == 'c') { /* Clear screen & home */
-                                       fillw((vs.at << 8) | ' ', Crtat,
-                                           vs.nchr);
-                                       crtat = Crtat;
-                                       vs.col = 0;
-                                       vs.state = 0;
-                               } else { /* Invalid, clear state */
-                                       wrtchar(c, vs.so_at); 
-                                       vs.state = 0;
-                                       goto maybe_scroll;
-                               }
-                               break;
-                       default: /* VSS_EBRACE or VSS_EPARAM */
-                               switch (c) {
-                                       int pos;
-                               case 'm':
-                                       if (!vs.cx)
-                                               vs.so = 0;
-                                       else
-                                               vs.so = 1;
-                                       vs.state = 0;
-                                       break;
-                               case 'A': { /* back cx rows */
-                                       int cx = vs.cx;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else
-                                               cx %= vs.nrow;
-                                       pos = crtat - Crtat;
-                                       pos -= vs.ncol * cx;
-                                       if (pos < 0)
-                                               pos += vs.nchr;
-                                       crtat = Crtat + pos;
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'B': { /* down cx rows */
-                                       int cx = vs.cx;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else
-                                               cx %= vs.nrow;
-                                       pos = crtat - Crtat;
-                                       pos += vs.ncol * cx;
-                                       if (pos >= vs.nchr) 
-                                               pos -= vs.nchr;
-                                       crtat = Crtat + pos;
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'C': { /* right cursor */
-                                       int cx = vs.cx,
-                                           col = vs.col;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else
-                                               cx %= vs.ncol;
-                                       pos = crtat - Crtat;
-                                       pos += cx;
-                                       col += cx;
-                                       if (col >= vs.ncol) {
-                                               pos -= vs.ncol;
-                                               col -= vs.ncol;
-                                       }
-                                       vs.col = col;
-                                       crtat = Crtat + pos;
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'D': { /* left cursor */
-                                       int cx = vs.cx,
-                                           col = vs.col;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else
-                                               cx %= vs.ncol;
-                                       pos = crtat - Crtat;
-                                       pos -= cx;
-                                       col -= cx;
-                                       if (col < 0) {
-                                               pos += vs.ncol;
-                                               col += vs.ncol;
-                                       }
-                                       vs.col = col;
-                                       crtat = Crtat + pos;
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'J': /* Clear ... */
-                                       switch (vs.cx) {
-                                       case 0:
-                                               /* ... to end of display */
-                                               fillw((vs.at << 8) | ' ', crtat,
-                                                   Crtat + vs.nchr - crtat);
-                                               break;
-                                       case 1:
-                                               /* ... to next location */
-                                               fillw((vs.at << 8) | ' ', Crtat,
-                                                   crtat - Crtat + 1);
-                                               break;
-                                       case 2:
-                                               /* ... whole display */
-                                               fillw((vs.at << 8) | ' ', Crtat,
-                                                   vs.nchr);
-                                               break;
-                                       }
-                                       vs.state = 0;
-                                       break;
-                               case 'K': /* Clear line ... */
-                                       switch (vs.cx) {
-                                       case 0:
-                                               /* ... current to EOL */
-                                               fillw((vs.at << 8) | ' ', crtat,
-                                                   vs.ncol - vs.col);
-                                               break;
-                                       case 1:
-                                               /* ... beginning to next */
-                                               fillw((vs.at << 8) | ' ',
-                                                   crtat - vs.col,
-                                                   vs.col + 1);
-                                               break;
-                                       case 2:
-                                               /* ... entire line */
-                                               fillw((vs.at << 8) | ' ',
-                                                   crtat - vs.col, vs.ncol);
-                                               break;
-                                       }
-                                       vs.state = 0;
-                                       break;
-                               case 'f': /* in system V consoles */
-                               case 'H': { /* Cursor move */
-                                       int cx = vs.cx,
-                                           cy = vs.cy;
-                                       if (!cx || !cy) {
-                                               crtat = Crtat;
-                                               vs.col = 0;
-                                       } else {
-                                               if (cx > vs.nrow)
-                                                       cx = vs.nrow;
-                                               if (cy > vs.ncol)
-                                                       cy = vs.ncol;
-                                               crtat = Crtat +
-                                                   (cx - 1) * vs.ncol + cy - 1;
-                                               vs.col = cy - 1;
-                                       }
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'M': { /* delete cx rows */
-                                       u_short *crtAt = crtat - vs.col;
-                                       int cx = vs.cx,
-                                           row = (crtAt - Crtat) / vs.ncol,
-                                           nrow = vs.nrow - row;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else if (cx > nrow)
-                                               cx = nrow;
-                                       if (cx < nrow)
-                                               bcopy(crtAt + vs.ncol * cx,
-                                                   crtAt, vs.ncol * (nrow -
-                                                   cx) * CHR);
-                                       fillw((vs.at << 8) | ' ',
-                                           crtAt + vs.ncol * (nrow - cx),
-                                           vs.ncol * cx);
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'S': { /* scroll up cx lines */
-                                       int cx = vs.cx;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else if (cx > vs.nrow)
-                                               cx = vs.nrow;
-                                       if (cx < vs.nrow)
-                                               bcopy(Crtat + vs.ncol * cx,
-                                                   Crtat, vs.ncol * (vs.nrow -
-                                                   cx) * CHR);
-                                       fillw((vs.at << 8) | ' ',
-                                           Crtat + vs.ncol * (vs.nrow - cx),
-                                           vs.ncol * cx);
-                                       /* crtat -= vs.ncol * cx; /* XXX */
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'L': { /* insert cx rows */
-                                       u_short *crtAt = crtat - vs.col;
-                                       int cx = vs.cx,
-                                           row = (crtAt - Crtat) / vs.ncol,
-                                           nrow = vs.nrow - row;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else if (cx > nrow)
-                                               cx = nrow;
-                                       if (cx < nrow)
-                                               bcopy(crtAt,
-                                                   crtAt + vs.ncol * cx,
-                                                   vs.ncol * (nrow - cx) *
-                                                   CHR);
-                                       fillw((vs.at << 8) | ' ', crtAt,
-                                           vs.ncol * cx);
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case 'T': { /* scroll down cx lines */
-                                       int cx = vs.cx;
-                                       if (cx <= 0)
-                                               cx = 1;
-                                       else if (cx > vs.nrow)
-                                               cx = vs.nrow;
-                                       if (cx < vs.nrow)
-                                               bcopy(Crtat,
-                                                   Crtat + vs.ncol * cx,
-                                                   vs.ncol * (vs.nrow - cx) *
-                                                   CHR);
-                                       fillw((vs.at << 8) | ' ', Crtat,
-                                           vs.ncol * cx);
-                                       /* crtat += vs.ncol * cx; /* XXX */
-                                       vs.state = 0;
-                                       break;
-                               }
-                               case ';': /* Switch params in cursor def */
-                                       vs.state = VSS_EPARAM;
-                                       break;
-                               case 'r':
-                                       vs.so_at = (vs.cx & FG_MASK) |
-                                           ((vs.cy << 4) & BG_MASK);
-                                       vs.state = 0;
-                                       break;
-                               case 'x': /* set attributes */
-                                       switch (vs.cx) {
-                                       case 0:
-                                               vs.at = FG_LIGHTGREY | BG_BLACK;
-                                               break;
-                                       case 1:
-                                               /* ansi background */
-                                               if (!vs.color)
-                                                       break;
-                                               vs.at &= FG_MASK;
-                                               vs.at |= bgansitopc[vs.cy & 7];
-                                               break;
-                                       case 2:
-                                               /* ansi foreground */
-                                               if (!vs.color)
-                                                       break;
-                                               vs.at &= BG_MASK;
-                                               vs.at |= fgansitopc[vs.cy & 7];
-                                               break;
-                                       case 3:
-                                               /* pc text attribute */
-                                               if (vs.state >= VSS_EPARAM)
-                                                       vs.at = vs.cy;
-                                               break;
-                                       }
-                                       vs.state = 0;
-                                       break;
-                                       
-                               default: /* Only numbers valid here */
-                                       if ((c >= '0') && (c <= '9')) {
-                                               if (vs.state >= VSS_EPARAM) {
-                                                       vs.cy *= 10;
-                                                       vs.cy += c - '0';
-                                               } else {
-                                                       vs.cx *= 10;
-                                                       vs.cx += c - '0';
-                                               }
-                                       } else
-                                               vs.state = 0;
-                                       break;
-                               }
-                               break;
-                       }
-               }
-               if (scroll) {
-                       scroll = 0;
-                       /* scroll check */
-                       if (crtat >= Crtat + vs.nchr) {
-                               if (!kernel) {
-                                       int s = spltty();
-                                       if (lock_state & SCROLL)
-                                               tsleep((caddr_t)&lock_state,
-                                                   PUSER, "pcputc", 0);
-                                       splx(s);
-                               }
-                               bcopy(Crtat + vs.ncol, Crtat,
-                                   (vs.nchr - vs.ncol) * CHR);
-                               fillw((vs.at << 8) | ' ',
-                                   Crtat + vs.nchr - vs.ncol, vs.ncol);
-                               crtat -= vs.ncol;
-                       }
-               }
-       }
-       async_update();
-}
-
-#define        CODE_SIZE       4               /* Use a max of 4 for now... */
-typedef struct {
-       u_short type;
-       char unshift[CODE_SIZE];
-       char shift[CODE_SIZE];
-       char ctl[CODE_SIZE];
-       char altgr[CODE_SIZE];
-} Scan_def;
-
-static Scan_def        us_scan_codes[] = {
-    NONE,     "",         "",         "",         "",    /* 0 unused */
-    ASCII,    "\033",     "\033",     "\033",     "",    /* 1 ESCape */
-    ASCII,    "1",        "!",        "!",        "",    /* 2 1 */
-    ASCII,    "2",        "@",        "\000",     "",    /* 3 2 */
-    ASCII,    "3",        "#",        "#",        "",    /* 4 3 */
-    ASCII,    "4",        "$",        "$",        "",    /* 5 4 */
-    ASCII,    "5",        "%",        "%",        "",    /* 6 5 */
-    ASCII,    "6",        "^",        "\036",     "",    /* 7 6 */
-    ASCII,    "7",        "&",        "&",        "",    /* 8 7 */
-    ASCII,    "8",        "*",        "\010",     "",    /* 9 8 */
-    ASCII,    "9",        "(",        "(",        "",    /* 10 9 */
-    ASCII,    "0",        ")",        ")",        "",    /* 11 0 */
-    ASCII,    "-",        "_",        "\037",     "",    /* 12 - */
-    ASCII,    "=",        "+",        "+",        "",    /* 13 = */
-    ASCII,    "\177",     "\177",     "\010",     "",    /* 14 backspace */
-    ASCII,    "\t",       "\177\t",   "\t",       "",    /* 15 tab */
-    ASCII,    "q",        "Q",        "\021",     "",    /* 16 q */
-    ASCII,    "w",        "W",        "\027",     "",    /* 17 w */
-    ASCII,    "e",        "E",        "\005",     "",    /* 18 e */
-    ASCII,    "r",        "R",        "\022",     "",    /* 19 r */
-    ASCII,    "t",        "T",        "\024",     "",    /* 20 t */
-    ASCII,    "y",        "Y",        "\031",     "",    /* 21 y */
-    ASCII,    "u",        "U",        "\025",     "",    /* 22 u */
-    ASCII,    "i",        "I",        "\011",     "",    /* 23 i */
-    ASCII,    "o",        "O",        "\017",     "",    /* 24 o */
-    ASCII,    "p",        "P",        "\020",     "",    /* 25 p */
-    ASCII,    "[",        "{",        "\033",     "",    /* 26 [ */
-    ASCII,    "]",        "}",        "\035",     "",    /* 27 ] */
-    ASCII,    "\r",       "\r",       "\n",       "",    /* 28 return */
-    CTL,      "",         "",         "",         "",    /* 29 control */
-    ASCII,    "a",        "A",        "\001",     "",    /* 30 a */
-    ASCII,    "s",        "S",        "\023",     "",    /* 31 s */
-    ASCII,    "d",        "D",        "\004",     "",    /* 32 d */
-    ASCII,    "f",        "F",        "\006",     "",    /* 33 f */
-    ASCII,    "g",        "G",        "\007",     "",    /* 34 g */
-    ASCII,    "h",        "H",        "\010",     "",    /* 35 h */
-    ASCII,    "j",        "J",        "\n",       "",    /* 36 j */
-    ASCII,    "k",        "K",        "\013",     "",    /* 37 k */
-    ASCII,    "l",        "L",        "\014",     "",    /* 38 l */
-    ASCII,    ";",        ":",        ";",        "",    /* 39 ; */
-    ASCII,    "'",        "\"",       "'",        "",    /* 40 ' */
-    ASCII,    "`",        "~",        "`",        "",    /* 41 ` */
-    SHIFT,    "",         "",         "",         "",    /* 42 shift */
-    ASCII,    "\\",       "|",        "\034",     "",    /* 43 \ */
-    ASCII,    "z",        "Z",        "\032",     "",    /* 44 z */
-    ASCII,    "x",        "X",        "\030",     "",    /* 45 x */
-    ASCII,    "c",        "C",        "\003",     "",    /* 46 c */
-    ASCII,    "v",        "V",        "\026",     "",    /* 47 v */
-    ASCII,    "b",        "B",        "\002",     "",    /* 48 b */
-    ASCII,    "n",        "N",        "\016",     "",    /* 49 n */
-    ASCII,    "m",        "M",        "\r",       "",    /* 50 m */
-    ASCII,    ",",        "<",        "<",        "",    /* 51 , */
-    ASCII,    ".",        ">",        ">",        "",    /* 52 . */
-    ASCII,    "/",        "?",        "\037",     "",    /* 53 / */
-    SHIFT,    "",         "",         "",         "",    /* 54 shift */
-    KP,       "*",        "*",        "*",        "",    /* 55 kp * */
-    ALT,      "",         "",         "",         "",    /* 56 alt */
-    ASCII,    " ",        " ",        "\000",     "",    /* 57 space */
-    CAPS,     "",         "",         "",         "",    /* 58 caps */
-    FUNC,     "\033[M",   "\033[Y",   "\033[k",   "",    /* 59 f1 */
-    FUNC,     "\033[N",   "\033[Z",   "\033[l",   "",    /* 60 f2 */
-    FUNC,     "\033[O",   "\033[a",   "\033[m",   "",    /* 61 f3 */
-    FUNC,     "\033[P",   "\033[b",   "\033[n",   "",    /* 62 f4 */
-    FUNC,     "\033[Q",   "\033[c",   "\033[o",   "",    /* 63 f5 */
-    FUNC,     "\033[R",   "\033[d",   "\033[p",   "",    /* 64 f6 */
-    FUNC,     "\033[S",   "\033[e",   "\033[q",   "",    /* 65 f7 */
-    FUNC,     "\033[T",   "\033[f",   "\033[r",   "",    /* 66 f8 */
-    FUNC,     "\033[U",   "\033[g",   "\033[s",   "",    /* 67 f9 */
-    FUNC,     "\033[V",   "\033[h",   "\033[t",   "",    /* 68 f10 */
-    NUM,      "",         "",         "",        "",    /* 69 num lock */
-    SCROLL,   "",         "",         "",         "",    /* 70 scroll lock */
-    KP,       "7",        "\033[H",   "7",        "",    /* 71 kp 7 */
-    KP,       "8",        "\033[A",   "8",        "",    /* 72 kp 8 */
-    KP,       "9",        "\033[I",   "9",        "",    /* 73 kp 9 */
-    KP,       "-",        "-",        "-",        "",    /* 74 kp - */
-    KP,       "4",        "\033[D",   "4",        "",    /* 75 kp 4 */
-    KP,       "5",        "\033[E",   "5",        "",    /* 76 kp 5 */
-    KP,       "6",        "\033[C",   "6",        "",    /* 77 kp 6 */
-    KP,       "+",        "+",        "+",        "",    /* 78 kp + */
-    KP,       "1",        "\033[F",   "1",        "",    /* 79 kp 1 */
-    KP,       "2",        "\033[B",   "2",        "",    /* 80 kp 2 */
-    KP,       "3",        "\033[G",   "3",        "",    /* 81 kp 3 */
-    KP,       "0",        "\033[L",   "0",        "",    /* 82 kp 0 */
-    KP,       ".",        "\177",     ".",        "",    /* 83 kp . */
-    NONE,     "",         "",         "",         "",    /* 84 0 */
-    NONE,     "100",      "",         "",         "",    /* 85 0 */
-    NONE,     "101",      "",         "",         "",    /* 86 0 */
-    FUNC,     "\033[W",   "\033[i",   "\033[u",   "",    /* 87 f11 */
-    FUNC,     "\033[X",   "\033[j",   "\033[v",   "",    /* 88 f12 */
-    NONE,     "102",      "",         "",         "",    /* 89 0 */
-    NONE,     "103",      "",         "",         "",    /* 90 0 */
-    NONE,     "",         "",         "",         "",    /* 91 0 */
-    NONE,     "",         "",         "",         "",    /* 92 0 */
-    NONE,     "",         "",         "",         "",    /* 93 0 */
-    NONE,     "",         "",         "",         "",    /* 94 0 */
-    NONE,     "",         "",         "",         "",    /* 95 0 */
-    NONE,     "",         "",         "",         "",    /* 96 0 */
-    NONE,     "",         "",         "",         "",    /* 97 0 */
-    NONE,     "",         "",         "",         "",    /* 98 0 */
-    NONE,     "",         "",         "",         "",    /* 99 0 */
-    NONE,     "",         "",         "",         "",    /* 100 */
-    NONE,     "",         "",         "",         "",    /* 101 */
-    NONE,     "",         "",         "",         "",    /* 102 */
-    NONE,     "",         "",         "",         "",    /* 103 */
-    NONE,     "",         "",         "",         "",    /* 104 */
-    NONE,     "",         "",         "",         "",    /* 105 */
-    NONE,     "",         "",         "",         "",    /* 106 */
-    NONE,     "",         "",         "",         "",    /* 107 */
-    NONE,     "",         "",         "",         "",    /* 108 */
-    NONE,     "",         "",         "",         "",    /* 109 */
-    NONE,     "",         "",         "",         "",    /* 110 */
-    NONE,     "",         "",         "",         "",    /* 111 */
-    NONE,     "",         "",         "",         "",    /* 112 */
-    NONE,     "",         "",         "",         "",    /* 113 */
-    NONE,     "",         "",         "",         "",    /* 114 */
-    NONE,     "",         "",         "",         "",    /* 115 */
-    NONE,     "",         "",         "",         "",    /* 116 */
-    NONE,     "",         "",         "",         "",    /* 117 */
-    NONE,     "",         "",         "",         "",    /* 118 */
-    NONE,     "",         "",         "",         "",    /* 119 */
-    NONE,     "",         "",         "",         "",    /* 120 */
-    NONE,     "",         "",         "",         "",    /* 121 */
-    NONE,     "",         "",         "",         "",    /* 122 */
-    NONE,     "",         "",         "",         "",    /* 123 */
-    NONE,     "",         "",         "",         "",    /* 124 */
-    NONE,     "",         "",         "",         "",    /* 125 */
-    NONE,     "",         "",         "",         "",    /* 126 */
-    NONE,     "",         "",         "",         "",    /* 127 */
-};
-
-static Scan_def  sw_scan_codes[] = {
-    NONE,     "",       "",       "",       "",     /* 0 unused */  
-    ASCII,    "\033",   "\033",   "\033",   "\033", /* 1 ESCape */  
-    ASCII,    "1",      "!",      "",       "\241", /* 2 1 */
-    ASCII,    "2",      "\"",     "\000",   "@",    /* 3 2 */
-    ASCII,    "3",      "#",      "",       "\243", /* 4 3 */
-    ASCII,    "4",      "$",      "",       "$",    /* 5 4 */
-    ASCII,    "5",      "%",      "\034",   "\\",   /* 6 5 */
-    ASCII,    "6",      "&",      "\034",   "|",    /* 7 6 */
-    ASCII,    "7",      "/",      "\033",   "{",    /* 8 7 */
-    ASCII,    "8",      "(",      "\036",   "[",    /* 9 8 */
-    ASCII,    "9",      ")",      "\035",   "]",    /* 10 9 */
-    ASCII,    "0",      "=",      "\035",   "}",    /* 11 0 */
-    ASCII,    "+",      "?",      "\037",   "\\",   /* 12 - */
-    ASCII,    "'",      "`",      "\034",   "'",    /* 13 = */
-    ASCII,    "\177",   "\177",   "\010",   "\177", /* 14 backspace */ 
-    ASCII,    "\t",     "\177\t", "\t",     "\t",   /* 15 tab */    
-    ASCII,    "q",      "Q",      "\021",   "q",    /* 16 q */
-    ASCII,    "w",      "W",      "\027",   "w",    /* 17 w */
-    ASCII,    "e",      "E",      "\005",   "\353", /* 18 e */
-    ASCII,    "r",      "R",      "\022",   "r",    /* 19 r */
-    ASCII,    "t",      "T",      "\024",   "t",    /* 20 t */
-    ASCII,    "y",      "Y",      "\031",   "y",    /* 21 y */
-    ASCII,    "u",      "U",      "\025",   "\374", /* 22 u */
-    ASCII,    "i",      "I",      "\011",   "i",    /* 23 i */
-    ASCII,    "o",      "O",      "\017",   "\364", /* 24 o */
-    ASCII,    "p",      "P",      "\020",   "p",    /* 25 p */
-    ASCII,    "\345",   "\305",   "\334",   "\374", /* 26 [ */
-    ASCII,    "~",      "^",      "\036",   "",     /* 27 ] */
-    ASCII,    "\r",     "\r",     "\n",     "\r",   /* 28 return */ 
-    CTL,      "",       "",       "",       "",     /* 29 control */
-    ASCII,    "a",      "A",      "\001",   "\344", /* 30 a */
-    ASCII,    "s",      "S",      "\023",   "\337", /* 31 s */
-    ASCII,    "d",      "D",      "\004",   "d",    /* 32 d */
-    ASCII,    "f",      "F",      "\006",   "f",    /* 33 f */
-    ASCII,    "g",      "G",      "\007",   "g",    /* 34 g */
-    ASCII,    "h",      "H",      "\010",   "h",    /* 35 h */
-    ASCII,    "j",      "J",      "\n",     "j",    /* 36 j */
-    ASCII,    "k",      "K",      "\013",   "k",    /* 37 k */
-    ASCII,    "l",      "L",      "\014",   "l",    /* 38 l */
-    ASCII,    "\366",   "\326",   "\326",   "\366", /* 39 ; */
-    ASCII,    "\344",   "\304",   "\304",   "\344", /* 40 ' */
-    ASCII,    "|",      "@",      "\034",   "\247", /* 41 ` */
-    SHIFT,    "",       "",       "",       "",     /* 42 shift */
-    ASCII,    "'",      "*",      "'",      "'",    /* 43 \ */
-    ASCII,    "z",      "Z",      "\032",   "z",    /* 44 z */
-    ASCII,    "x",      "X",      "\030",   "x",    /* 45 x */
-    ASCII,    "c",      "C",      "\003",   "c",    /* 46 c */
-    ASCII,    "v",      "V",      "\026",   "v",    /* 47 v */
-    ASCII,    "b",      "B",      "\002",   "b",    /* 48 b */
-    ASCII,    "n",      "N",      "\016",   "n",    /* 49 n */
-    ASCII,    "m",      "M",      "\015",   "m",    /* 50 m */
-    ASCII,    ",",      ";",      ",",      ",",    /* 51 , */
-    ASCII,    ".",      ":",      ".",      ".",    /* 52 . */
-    ASCII,    "-",      "_",      "\037",   "-",    /* 53 / */
-    SHIFT,    "",       "",       "",       "",     /* 54 shift */
-    KP,       "*",      "*",      "*",      "*",    /* 55 kp * */
-    ALT,      "",       "",       "",       "",     /* 56 alt */
-    ASCII,    " ",      " ",      "\000",   " ",    /* 57 space */
-    CAPS,     "",       "",       "",       "",     /* 58 caps */
-    FUNC,     "\033[M", "\033[Y", "\033[k", "",     /* 59 f1 */
-    FUNC,     "\033[N", "\033[Z", "\033[l", "",     /* 60 f2 */
-    FUNC,     "\033[O", "\033[a", "\033[m", "",     /* 61 f3 */
-    FUNC,     "\033[P", "\033[b", "\033[n", "",     /* 62 f4 */
-    FUNC,     "\033[Q", "\033[c", "\033[o", "",     /* 63 f5 */
-    FUNC,     "\033[R", "\033[d", "\033[p", "",     /* 64 f6 */
-    FUNC,     "\033[S", "\033[e", "\033[q", "",     /* 65 f7 */
-    FUNC,     "\033[T", "\033[f", "\033[r", "",     /* 66 f8 */
-    FUNC,     "\033[U", "\033[g", "\033[s", "",     /* 67 f9 */
-    FUNC,     "\033[V", "\033[h", "\033[t", "",     /* 68 f10 */
-    NUM,      "",       "",       "",       "",     /* 69 num lo */
-    SCROLL,   "",       "",       "",       "",     /* 70 scroll */
-    KP,       "7",      "\033[H", "7",      "",     /* 71 kp 7 */
-    KP,       "8",      "\033[A", "8",      "",     /* 72 kp 8 */
-    KP,       "9",      "\033[I", "9",      "",     /* 73 kp 9 */
-    KP,       "-",      "-",      "-",      "",     /* 74 kp - */
-    KP,       "4",      "\033[D", "4",      "",     /* 75 kp 4 */
-    KP,       "5",      "\033[E", "5",      "",     /* 76 kp 5 */
-    KP,       "6",      "\033[C", "6",      "",     /* 77 kp 6 */
-    KP,       "+",      "+",      "+",      "",     /* 78 kp + */
-    KP,       "1",      "\033[F", "1",      "",     /* 79 kp 1 */
-    KP,       "2",      "\033[B", "2",      "",     /* 80 kp 2 */
-    KP,       "3",      "\033[G", "3",      "",     /* 81 kp 3 */
-    KP,       "0",      "\033[L", "0",      "",     /* 82 kp 0 */
-    KP,       ".",      "\177",   ".",      "",     /* 83 kp . */
-    NONE,     "",       "",       "",       "",     /* 84 0 */
-    NONE,     "100",    "",       "",       "",     /* 85 0 */
-    ASCII,    "<",      ">",      "\273",   "|",    /* 86 < > */
-    FUNC,     "\033[W", "\033[i", "\033[u", "",     /* 87 f11 */
-    FUNC,     "\033[X", "\033[j", "\033[v", "",     /* 88 f12 */
-    NONE,     "102",    "",       "",       "",     /* 89 0 */
-    NONE,     "103",    "",       "",       "",     /* 90 0 */
-    NONE,     "",       "",       "",       "",     /* 91 0 */
-    NONE,     "",       "",       "",       "",     /* 92 0 */
-    NONE,     "",       "",       "",       "",     /* 93 0 */
-    NONE,     "",       "",       "",       "",     /* 94 0 */
-    NONE,     "",       "",       "",       "",     /* 95 0 */
-    NONE,     "",       "",       "",       "",     /* 96 0 */
-    NONE,     "",       "",       "",       "",     /* 97 0 */
-    NONE,     "",       "",       "",       "",     /* 98 0 */
-    NONE,     "",       "",       "",       "",     /* 99 0 */
-    NONE,     "",       "",       "",       "",     /* 100 */
-    NONE,     "",       "",       "",       "",     /* 101 */
-    NONE,     "",       "",       "",       "",     /* 102 */
-    NONE,     "",       "",       "",       "",     /* 103 */
-    NONE,     "",       "",       "",       "",     /* 104 */
-    NONE,     "",       "",       "",       "",     /* 105 */
-    NONE,     "",       "",       "",       "",     /* 106 */
-    NONE,     "",       "",       "",       "",     /* 107 */
-    NONE,     "",       "",       "",       "",     /* 108 */
-    NONE,     "",       "",       "",       "",     /* 109 */
-    NONE,     "",       "",       "",       "",     /* 110 */
-    NONE,     "",       "",       "",       "",     /* 111 */
-    NONE,     "",       "",       "",       "",     /* 112 */
-    NONE,     "",       "",       "",       "",     /* 113 */
-    NONE,     "",       "",       "",       "",     /* 114 */
-    NONE,     "",       "",       "",       "",     /* 115 */
-    NONE,     "",       "",       "",       "",     /* 116 */
-    NONE,     "",       "",       "",       "",     /* 117 */
-    NONE,     "",       "",       "",       "",     /* 118 */
-    NONE,     "",       "",       "",       "",     /* 119 */
-    NONE,     "",       "",       "",       "",     /* 120 */
-    NONE,     "",       "",       "",       "",     /* 121 */
-    NONE,     "",       "",       "",       "",     /* 122 */
-    NONE,     "",       "",       "",       "",     /* 123 */
-    NONE,     "",       "",       "",       "",     /* 124 */
-    NONE,     "",       "",       "",       "",     /* 125 */
-    NONE,     "",       "",       "",       "",     /* 126 */
-    NONE,     "",       "",       "",       "",     /* 127 */
-};
-
-
-/*
- * Get characters from the keyboard.  If none are present, return NULL.
- */
-
-Scan_def *scan_codes = us_scan_codes;
-
-char *
-sget()
-{
-       u_char dt;
-       static u_char extended = 0, shift_state = 0;
-       static u_char capchar[2];
-
-top:
-       KBD_DELAY;
-       dt = inb(KBDATAP);
-
-       switch (dt) {
-       case KBR_ACK: case KBR_ECHO:
-               kb_oq_get = (kb_oq_get + 1) & 7;
-               if(kb_oq_get != kb_oq_put) {
-                       outb(KBOUTP, kb_oq[kb_oq_get]);
-               }
-               goto loop;
-       case KBR_RESEND:
-               outb(KBOUTP, kb_oq[kb_oq_get]);
-               goto loop;
-       }
-
-       if (pc_xmode > 0) {
-#if defined(DDB) && defined(XSERVER_DDB)
-               /* F12 enters the debugger while in X mode */
-               if (dt == 88)
-                       Debugger();
-#endif
-               capchar[0] = dt;
-               capchar[1] = 0;
-               /*
-                * Check for locking keys.
-                *
-                * XXX Setting the LEDs this way is a bit bogus.  What if the
-                * keyboard has been remapped in X?
-                */
-               switch ((scan_codes+(dt & 0x7f))->type) {
-               case NUM:
-                       if (dt & 0x80) {
-                               shift_state &= ~NUM;
-                               break;
-                       }
-                       if (shift_state & NUM)
-                               break;
-                       shift_state |= NUM;
-                       lock_state ^= NUM;
-                       async_update();
-                       break;
-               case CAPS:
-                       if (dt & 0x80) {
-                               shift_state &= ~CAPS;
-                               break;
-                       }
-                       if (shift_state & CAPS)
-                               break;
-                       shift_state |= CAPS;
-                       lock_state ^= CAPS;
-                       async_update();
-                       break;
-               case SCROLL:
-                       if (dt & 0x80) {
-                               shift_state &= ~SCROLL;
-                               break;
-                       }
-                       if (shift_state & SCROLL)
-                               break;
-                       shift_state |= SCROLL;
-                       lock_state ^= SCROLL;
-                       if ((lock_state & SCROLL) == 0)
-                               wakeup((caddr_t)&lock_state);
-                       async_update();
-                       break;
-               }
-               return capchar;
-       }
-
-       switch (dt) {
-       case KBR_EXTENDED:
-               extended = 1;
-               goto loop;
-       }
-
-#ifdef DEBUG
-       /*
-        * Check for cntl-alt-esc.
-        */
-       if ((dt == 1) && (shift_state & (CTL | ALT)) == (CTL | ALT)) {
-               mdbpanic();
-               dt |= 0x80;     /* discard esc (ddb discarded ctl-alt) */
-       }
-#endif
-
-       /*
-        * Check for make/break.
-        */
-       if (dt & 0x80) {
-               /*
-                * break
-                */
-               dt &= 0x7f;
-               switch ((scan_codes+dt)->type) {
-               case NUM:
-                       shift_state &= ~NUM;
-                       break;
-               case CAPS:
-                       shift_state &= ~CAPS;
-                       break;
-               case SCROLL:
-                       shift_state &= ~SCROLL;
-                       break;
-               case SHIFT:
-                       shift_state &= ~SHIFT;
-                       break;
-               case ALT:
-                       if (extended)
-                               shift_state &= ~ALTGR;
-                       else
-                               shift_state &= ~ALT;
-                       break;
-               case CTL:
-                       shift_state &= ~CTL;
-                       break;
-               }
-       } else {
-               /*
-                * make
-                */
-               switch ((scan_codes+dt)->type) {
-               /*
-                * locking keys
-                */
-               case NUM:
-                       if (shift_state & NUM)
-                               break;
-                       shift_state |= NUM;
-                       lock_state ^= NUM;
-                       async_update();
-                       break;
-               case CAPS:
-                       if (shift_state & CAPS)
-                               break;
-                       shift_state |= CAPS;
-                       lock_state ^= CAPS;
-                       async_update();
-                       break;
-               case SCROLL:
-                       if (shift_state & SCROLL)
-                               break;
-                       shift_state |= SCROLL;
-                       lock_state ^= SCROLL;
-                       if ((lock_state & SCROLL) == 0)
-                               wakeup((caddr_t)&lock_state);
-                       async_update();
-                       break;
-               /*
-                * non-locking keys
-                */
-               case SHIFT:
-                       shift_state |= SHIFT;
-                       break;
-               case ALT:
-                       if (extended)
-                               shift_state |= ALTGR;
-                       else
-                               shift_state |= ALT;
-                       break;
-               case CTL:
-                       shift_state |= CTL;
-                       break;
-               case ASCII:
-                       if (shift_state & ALTGR) {
-                               capchar[0] = (scan_codes+dt)->altgr[0];
-                               if (shift_state & CTL)
-                                       capchar[0] &= 0x1f;
-                       }
-                       else if (shift_state & CTL)
-                               capchar[0] = (scan_codes+dt)->ctl[0];
-                       else if (shift_state & SHIFT)
-                               capchar[0] = (scan_codes+dt)->shift[0];
-
-                       else
-                               capchar[0] = (scan_codes+dt)->unshift[0];
-                       if ((lock_state & CAPS) && capchar[0] >= 'a' &&
-                           capchar[0] <= 'z') {
-                               capchar[0] -= ('a' - 'A');
-                       }
-                       capchar[0] |= (shift_state & ALT);
-                       extended = 0;
-                       return capchar;
-               case NONE:
-printf("keycode %d\n",dt);
-                       break;
-               case FUNC: {
-                       char *more_chars;
-                       if (shift_state & SHIFT)
-                               more_chars = (scan_codes+dt)->shift;
-                       else if (shift_state & CTL)
-                               more_chars = (scan_codes+dt)->ctl;
-                       else
-                               more_chars = (scan_codes+dt)->unshift;
-                       extended = 0;
-                       return more_chars;
-               }
-               case KP: {
-                       char *more_chars;
-                       if (shift_state & (SHIFT | CTL) ||
-                           (lock_state & NUM) == 0 || extended)
-                               more_chars = (scan_codes+dt)->shift;
-                       else
-                               more_chars = (scan_codes+dt)->unshift;
-                       extended = 0;
-                       return more_chars;
-               }
-               }
-       }
-
-       extended = 0;
-loop:
-       if ((inb(KBSTATP) & KBS_DIB) == 0)
-               return 0;
-       goto top;
-}
-
-int
-pcmmap(dev, offset, nprot)
-       dev_t dev;
-       int offset;
-       int nprot;
-{
-
-       if (offset >= 0xa0000 && offset < 0xc0000)
-               return pica_btop(PICA_P_LOCAL_VIDEO + offset);
-       if (offset >= 0x0000 && offset < 0x10000)
-               return pica_btop(PICA_P_LOCAL_VIDEO_CTRL + offset);
-       if (offset >= 0x40000000 && offset < 0x40800000)
-               return pica_btop(PICA_P_LOCAL_VIDEO + offset - 0x40000000);
-       return -1;
-}
-
-pc_xmode_on()
-{
-       if (pc_xmode)
-               return;
-       pc_xmode = 1;
-
-#ifdef XFREE86_BUG_COMPAT
-       /* If still unchanged, get current shape. */
-       if (cursor_shape == 0xffff)
-               get_cursor_shape();
-#endif
-}
-
-pc_xmode_off()
-{
-       if (pc_xmode == 0)
-               return;
-       pc_xmode = 0;
-
-#ifdef XFREE86_BUG_COMPAT
-       /* XXX It would be hard to justify why the X server doesn't do this. */
-       set_cursor_shape();
-#endif
-       async_update();
-}
-/*     $NetBSD: pms.c,v 1.21 1995/04/18 02:25:18 mycroft Exp $ */
-
-#include <machine/mouse.h>
-
-/* status bits */
-#define        PMS_OBUF_FULL   0x01
-#define        PMS_IBUF_FULL   0x02
-
-/* controller commands */
-#define        PMS_INT_ENABLE  0x47    /* enable controller interrupts */
-#define        PMS_INT_DISABLE 0x65    /* disable controller interrupts */
-#define        PMS_AUX_ENABLE  0xa7    /* enable auxiliary port */
-#define        PMS_AUX_DISABLE 0xa8    /* disable auxiliary port */
-#define        PMS_MAGIC_1     0xa9    /* XXX */
-
-#define        PMS_8042_CMD    0x65
-
-/* mouse commands */
-#define        PMS_SET_SCALE11 0xe6    /* set scaling 1:1 */
-#define        PMS_SET_SCALE21 0xe7    /* set scaling 2:1 */
-#define        PMS_SET_RES     0xe8    /* set resolution */
-#define        PMS_GET_SCALE   0xe9    /* get scaling factor */
-#define        PMS_SET_STREAM  0xea    /* set streaming mode */
-#define        PMS_SET_SAMPLE  0xf3    /* set sampling rate */
-#define        PMS_DEV_ENABLE  0xf4    /* mouse on */
-#define        PMS_DEV_DISABLE 0xf5    /* mouse off */
-#define        PMS_RESET       0xff    /* reset */
-
-#define        PMS_CHUNK       128     /* chunk size for read */
-#define        PMS_BSIZE       1020    /* buffer size */
-
-
-static inline void
-pms_dev_cmd(value)
-       u_char value;
-{
-       kbd_flush_input();
-       outb(KBCMDP, 0xd4);
-       kbd_flush_input();
-       outb(KBDATAP, value);
-}
-
-static inline void
-pms_aux_cmd(value)
-       u_char value;
-{
-       kbd_flush_input();
-       outb(KBCMDP, value);
-}
-
-static inline void
-pms_pit_cmd(value)
-       u_char value;
-{
-       kbd_flush_input();
-       outb(KBCMDP, 0x60);
-       kbd_flush_input();
-       outb(KBDATAP, value);
-}
-
-int
-pmsprobe(parent, match, aux)
-       struct device *parent;
-       void *match, *aux;
-{
-       struct confargs *ca = aux;
-       u_char x;
-
-       /* Make shure we're looking for this type of device */
-       if(!BUS_MATCHNAME(ca, "pms"))
-               return(0);
-
-       pms_dev_cmd(KBC_RESET);
-       pms_aux_cmd(PMS_MAGIC_1);
-       delay(10000);
-       x = inb(KBDATAP);
-       pms_pit_cmd(PMS_INT_DISABLE);
-       if (x & 0x04)
-               return 0;
-
-       return 1;
-}
-
-void
-pmsattach(parent, self, aux)
-       struct device *parent, *self;
-       void *aux;
-{
-       struct pms_softc *sc = (void *)self;
-       struct confargs *ca = aux;
-
-       printf("\n");
-
-       /* Other initialization was done by pmsprobe. */
-       sc->sc_state = 0;
-
-       BUS_INTR_ESTABLISH(ca, pmsintr, (void *)(long)sc);
-}
-
-int
-pmsopen(dev, flag)
-       dev_t dev;
-       int flag;
-{
-       int unit = PMSUNIT(dev);
-       struct pms_softc *sc;
-
-       if (unit >= pms_cd.cd_ndevs)
-               return ENXIO;
-       sc = pms_cd.cd_devs[unit];
-       if (!sc)
-               return ENXIO;
-
-       if (sc->sc_state & PMS_OPEN)
-               return EBUSY;
-
-       if (clalloc(&sc->sc_q, PMS_BSIZE, 0) == -1)
-               return ENOMEM;
-
-       sc->sc_state |= PMS_OPEN;
-       sc->sc_status = 0;
-       sc->sc_x = sc->sc_y = 0;
-
-       /* Enable interrupts. */
-       pms_dev_cmd(PMS_DEV_ENABLE);
-       pms_aux_cmd(PMS_AUX_ENABLE);
-       pms_dev_cmd(PMS_SET_RES);
-       pms_dev_cmd(3);         /* 8 counts/mm */
-       pms_dev_cmd(PMS_SET_SCALE21);
-#if 0
-       pms_dev_cmd(PMS_SET_SAMPLE);
-       pms_dev_cmd(100);       /* 100 samples/sec */
-       pms_dev_cmd(PMS_SET_STREAM);
-#endif
-       pms_pit_cmd(PMS_INT_ENABLE);
-
-       return 0;
-}
-
-int
-pmsclose(dev, flag)
-       dev_t dev;
-       int flag;
-{
-       struct pms_softc *sc = pms_cd.cd_devs[PMSUNIT(dev)];
-
-       /* Disable interrupts. */
-       pms_dev_cmd(PMS_DEV_DISABLE);
-       pms_pit_cmd(PMS_INT_DISABLE);
-       pms_aux_cmd(PMS_AUX_DISABLE);
-
-       sc->sc_state &= ~PMS_OPEN;
-
-       clfree(&sc->sc_q);
-
-       return 0;
-}
-
-int
-pmsread(dev, uio, flag)
-       dev_t dev;
-       struct uio *uio;
-       int flag;
-{
-       struct pms_softc *sc = pms_cd.cd_devs[PMSUNIT(dev)];
-       int s;
-       int error;
-       size_t length;
-       u_char buffer[PMS_CHUNK];
-
-       /* Block until mouse activity occured. */
-
-       s = spltty();
-       while (sc->sc_q.c_cc == 0) {
-               if (flag & IO_NDELAY) {
-                       splx(s);
-                       return EWOULDBLOCK;
-               }
-               sc->sc_state |= PMS_ASLP;
-               if (error = tsleep((caddr_t)sc, PZERO | PCATCH, "pmsrea", 0)) {
-                       sc->sc_state &= ~PMS_ASLP;
-                       splx(s);
-                       return error;
-               }
-       }
-       splx(s);
-
-       /* Transfer as many chunks as possible. */
-
-       while (sc->sc_q.c_cc > 0 && uio->uio_resid > 0) {
-               length = min(sc->sc_q.c_cc, uio->uio_resid);
-               if (length > sizeof(buffer))
-                       length = sizeof(buffer);
-
-               /* Remove a small chunk from the input queue. */
-               (void) q_to_b(&sc->sc_q, buffer, length);
-
-               /* Copy the data to the user process. */
-               if (error = uiomove(buffer, length, uio))
-                       break;
-       }
-
-       return error;
-}
-
-int
-pmsioctl(dev, cmd, addr, flag)
-       dev_t dev;
-       u_long cmd;
-       caddr_t addr;
-       int flag;
-{
-       struct pms_softc *sc = pms_cd.cd_devs[PMSUNIT(dev)];
-       struct mouseinfo info;
-       int s;
-       int error;
-
-       switch (cmd) {
-       case MOUSEIOCREAD:
-               s = spltty();
-
-               info.status = sc->sc_status;
-               if (sc->sc_x || sc->sc_y)
-                       info.status |= MOVEMENT;
-
-               if (sc->sc_x > 127)
-                       info.xmotion = 127;
-               else if (sc->sc_x < -127)
-                       /* Bounding at -127 avoids a bug in XFree86. */
-                       info.xmotion = -127;
-               else
-                       info.xmotion = sc->sc_x;
-
-               if (sc->sc_y > 127)
-                       info.ymotion = 127;
-               else if (sc->sc_y < -127)
-                       info.ymotion = -127;
-               else
-                       info.ymotion = sc->sc_y;
-
-               /* Reset historical information. */
-               sc->sc_x = sc->sc_y = 0;
-               sc->sc_status &= ~BUTCHNGMASK;
-               ndflush(&sc->sc_q, sc->sc_q.c_cc);
-
-               splx(s);
-               error = copyout(&info, addr, sizeof(struct mouseinfo));
-               break;
-
-       default:
-               error = EINVAL;
-               break;
-       }
-
-       return error;
-}
-
-/* Masks for the first byte of a packet */
-#define PS2LBUTMASK 0x01
-#define PS2RBUTMASK 0x02
-#define PS2MBUTMASK 0x04
-
-int
-pmsintr(arg)
-       void *arg;
-{
-       struct pms_softc *sc = arg;
-       static int state = 0;
-       static u_char buttons;
-       u_char changed;
-       u_char mbutt;
-       static char dx, dy;
-       u_char buffer[5];
-
-       if ((sc->sc_state & PMS_OPEN) == 0) {
-               /* Interrupts are not expected.  Discard the byte. */
-               kbd_flush_input();
-               return 0;
-       }
-
-       switch (state) {
-
-       case 0:
-               buttons = inb(KBDATAP);
-               if ((buttons & 0xc0) == 0)
-                       ++state;
-               break;
-
-       case 1:
-               dx = inb(KBDATAP);
-               /* Bounding at -127 avoids a bug in XFree86. */
-               dx = (dx == -128) ? -127 : dx;
-               ++state;
-               break;
-
-       case 2:
-               dy = inb(KBDATAP);
-               dy = (dy == -128) ? -127 : dy;
-               state = 0;
-
-               mbutt = buttons;
-               buttons = ((buttons & PS2LBUTMASK) << 2) |
-                         ((buttons & (PS2RBUTMASK | PS2MBUTMASK)) >> 1);
-               changed = ((buttons ^ sc->sc_status) & BUTSTATMASK) << 3;
-               sc->sc_status = buttons | (sc->sc_status & ~BUTSTATMASK) | changed;
-
-               if (dx || dy || changed) {
-                       /* Update accumulated movements. */
-                       sc->sc_x += dx;
-                       sc->sc_y += dy;
-
-                       /* Add this event to the queue. */
-                       buffer[0] = 0x80 | (mbutt & BUTSTATMASK);
-                       if(dx < 0)
-                               buffer[0] |= 0x10;
-                       buffer[1] = dx & 0x7f;
-                       if(dy < 0)
-                               buffer[0] |= 0x20;
-                       buffer[2] = dy & 0x7f;
-                       buffer[3] = buffer[4] = 0;
-                       (void) b_to_q(buffer, sizeof buffer, &sc->sc_q);
-
-                       if (sc->sc_state & PMS_ASLP) {
-                               sc->sc_state &= ~PMS_ASLP;
-                               wakeup((caddr_t)sc);
-                       }
-                       selwakeup(&sc->sc_rsel);
-               }
-
-               break;
-       }
-
-       return -1;
-}
-
-int
-pmsselect(dev, rw, p)
-       dev_t dev;
-       int rw;
-       struct proc *p;
-{
-       struct pms_softc *sc = pms_cd.cd_devs[PMSUNIT(dev)];
-       int s;
-       int ret;
-
-       if (rw == FWRITE)
-               return 0;
-
-       s = spltty();
-       if (!sc->sc_q.c_cc) {
-               selrecord(p, &sc->sc_rsel);
-               ret = 0;
-       } else
-               ret = 1;
-       splx(s);
-
-       return ret;
-}
diff --git a/sys/arch/pica/dev/scsi.h b/sys/arch/pica/dev/scsi.h
deleted file mode 100644 (file)
index ce58fb1..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)scsi.h        8.1 (Berkeley) 6/10/93
- *      $Id: scsi.h,v 1.1.1.1 1995/10/18 10:39:09 deraadt Exp $
- *
- * scsi.h --
- *
- *     Common declarations for SCSI command formaters. This file only covers
- *     definitions pertaining to the SCSI common command set that are
- *     common to all SCSI device types (ie disk, tapes, WORM, printers, etc).
- *     Some of the references from the proceedings of the
- *     1984 Mini/Micro Northeast conference might help in understanding SCSI. 
- *
- * from: Header: /sprite/src/kernel/dev/RCS/scsi.h,
- *     v 9.1 90/02/13 23:11:24 jhh Exp  SPRITE (Berkeley)
- * $Id: scsi.h,v 1.1.1.1 1995/10/18 10:39:09 deraadt Exp $
- */
-
-#ifndef _SCSI_H
-#define _SCSI_H
-
-/*
- * "Standard" SCSI Commands.
- * SCSI commands are divided into 8 groups as follows:
- *     Group0  (0x00 - 0x1f).  Basic commands. 6 bytes long
- *     Group1  (0x20 - 0x3f).  Extended command. 10 bytes.
- *     Group2  (0x40 - 0x5f).  Reserved.
- *     Group2  (0x60 - 0x7f).  Reserved.
- *     Group2  (0x80 - 0x9f).  Reserved.
- *     Group2  (0xa0 - 0xbf).  Reserved.
- *     Group6  (0xc0 - 0xdf).  Vendor Unique
- *     Group7  (0xe0 - 0xff).  Vendor Unique
- */
-
-/*
- * Scsi Group0 commands all are 6 bytes and have a format according to 
- * struct ScsiGroup0Cmd.
- */
-#define SCSI_TEST_UNIT_READY   0x00
-#define SCSI_REZERO_UNIT       0x01
-#define SCSI_REWIND            0x01
-#define SCSI_REQUEST_SENSE     0x03
-#define        SCSI_FORMAT_UNIT        0x04
-#define        SCSI_READ_BLOCK_LIMITS  0x05
-#define SCSI_REASSIGN_BLOCKS   0x07
-#define SCSI_READ              0x08
-#define SCSI_WRITE             0x0a
-#define SCSI_SEEK              0x0b
-#define        SCSI_TRACK_SELECT       0x0b
-#define        SCSI_READ_REVERSE       0x0f
-#define SCSI_WRITE_EOF         0x10
-#define SCSI_SPACE             0x11
-#define SCSI_INQUIRY           0x12
-#define SCSI_VERIFY            0x13
-#define        SCSI_READ_BUFFER        0x14
-#define SCSI_MODE_SELECT       0x15
-#define        SCSI_RESERVE_UNIT       0x16
-#define        SCSI_RELEASE_UNIT       0x17
-#define SCSI_COPY              0x18
-#define SCSI_ERASE_TAPE                0x19
-#define SCSI_MODE_SENSE                0x1a
-#define SCSI_START_STOP                0x1b
-#define        SCSI_LOAD_UNLOAD        0x1b
-#define        SCSI_RECV_DIAG_RESULTS  0x1c
-#define SCSI_SEND_DIAGNOSTIC   0x1d
-#define SCSI_PREVENT_ALLOW     0x1e
-
-/*
- * Group1 commands are all 10 bytes and have a format according to
- * struct ScsiGroup1Cmd.
- */
-#define SCSI_READ_CAPACITY     0x25    
-#define        SCSI_READ_EXT           0x28
-#define        SCSI_WRITE_EXT          0x2a
-#define        SCSI_SEEK_EXT           0x2b
-#define        SCSI_WRITE_VERIFY       0x2e
-#define        SCSI_VERIFY_EXT         0x2f
-#define        SCSI_SEARCH_HIGH        0x30
-#define SCSI_SEARCH_EQUAL      0x31
-#define        SCSI_SEARCH_LOW         0x32
-#define        SCSI_SET_LIMITS         0x33
-#define        SCSI_COMPARE            0x39
-#define        SCSI_COPY_VERIFY        0x3a
-
-/*
- * Control byte flags for Group0 and Group1 commands.
- *
- * SCSI_CTRL_LINK - This is used to prevent a bus free phase between commands.
- *     If the command terminates successfully, a SCSI_LINKED_CMD_COMPLETE
- *     message is returned instead of the normal SCSI_COMMAND_COMPLETE message. *      The last command in a chain should not have this bit set
- *     (and consequently gets a normal SCSI_COMMAND_COMPLETE message).
- * SCSI_CTRL_LINK_FLAG - This bit should only set when SCSI_CTRL_LINK is set and
- *     causes a SCSI_LINKED_FLAGED_CMD_COMPLETE to be returned instead of
- *     a SCSI_LINKED_CMD_COMPLETE.
- */
-#define SCSI_CTRL_LINK         0x01    /* Link commands (no bus free phase) */
-#define SCSI_CTRL_LINK_INTR    0x02    /* Interrupt after linked command */
-
-/*
- * The standard group0 6-byte SCSI control block.  Note that the 
- * fields between highAddr and blockCount inclusive are command dependent.
- * The definitions Addr and BlockCount cover most of the commands we will
- * use.
- */
-typedef struct ScsiGroup0Cmd {
-       u_char  command;                /* command code, defined below.  The
-                                        * upper three bits of this are zero
-                                        * to indicate the control block is
-                                        * only 6 bytes long */
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-       u_char  highAddr        :5;     /* High bits of address */
-#else
-       u_char  highAddr        :5;     /* High bits of address */
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-#endif
-       u_char  midAddr;                /* Middle bits of address */
-       u_char  lowAddr;                /* Low bits of address */
-       u_char  blockCount;             /* Blocks to transfer */
-       u_char  control;                /* See flags for common bits */
-} ScsiGroup0Cmd;
-
-/*
- * Format of a SCSI_START_STOP command. This is a group 0 command, but
- * the command contents are different.
- */
-typedef struct ScsiStartStopCmd {
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  command;                /* command code, defined below.  The
-                                        * upper three bits of this are zero
-                                        * to indicate the control block is
-                                        * only 6 bytes long */
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-       u_char  pad1            :4;     /* Reserved */
-       u_char  immed           :1;     /* Immediate status bit */
-       u_char  pad2;                   /* Reserved */
-       u_char  pad3;                   /* Reserved */
-       u_char  pad4            :6;     /* Reserved */
-       u_char  loadEject       :1;     /* Load or eject medium */
-       u_char  start           :1;     /* Start or stop medium */
-       u_char  control;                /* See flags for common bits */
-#else
-       u_char  command;                /* command code, defined below.  The
-                                        * upper three bits of this are zero
-                                        * to indicate the control block is
-                                        * only 6 bytes long */
-       u_char  immed           :1;     /* Immediate status bit */
-       u_char  pad1            :4;     /* Reserved */
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-       u_char  pad2;                   /* Reserved */
-       u_char  pad3;                   /* Reserved */
-       u_char  start           :1;     /* Start or stop medium */
-       u_char  loadEject       :1;     /* Load or eject medium */
-       u_char  pad4            :6;     /* Reserved */
-       u_char  control;                /* See flags for common bits */
-#endif
-} ScsiStartStopCmd;
-
-/*
- * The standard group1 10-byte SCSI control block.  Note that the 
- * fields between highAddr and blockCount inclusive are command dependent.
- * The definitions Addr and BlockCount cover most of the commands we will
- * use.
- */
-typedef struct ScsiGroup1Cmd {
-       u_char  command;                /* command code, defined below.  The
-                                        * upper three bits of this are zero
-                                        * to indicate the control block is
-                                        * only 6 bytes long */
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-       u_char  pad1            :5;     /* Reserved */
-#else
-       u_char  pad1            :5;     /* Reserved */
-       u_char  unitNumber      :3;     /* Logical Unit (LUN) to which to
-                                        * pass the command.  The device
-                                        * has already been selected using
-                                        * the "targetID" bit. */
-#endif
-       u_char  highAddr;               /* High bits of address */
-       u_char  midHighAddr;            /* Middle high bits of address */
-       u_char  midLowAddr;             /* Middle low bits of address */
-       u_char  lowAddr;                /* Low bits of address */
-       u_char  pad2;                   /* Reserved */
-       u_char  highBlockCount; /* High bits of blocks to transfer */
-       u_char  lowBlockCount;  /* Low bits of blocks to transfer */
-       u_char  control;                /* See flags for common bits */
-} ScsiGroup1Cmd;
-
-/*
- * SCSI status completion information.
- * This is returned by the device when a command completes. 
- */
-#define        SCSI_STATUS_CHECKCOND   0x02    /* Check Condition (ie., read sense) */
-#define        SCSI_STATUS_CONDMET     0x04    /* Condition Met (ie., search worked) */
-#define        SCSI_STATUS_BUSY        0x08
-#define        SCSI_STATUS_INTERMED    0x10    /* Intermediate status sent */
-#define        SCSI_STATUS_EXT         0x80    /* Extended status valid */
-
-/*
- * Sense information provided after some errors.  This is divided into
- * two kinds, classes 0-6, and class 7.  This is 30 bytes big to allow
- * for the drive specific sense bytes that follow the standard 4 byte header.
- *
- * For extended sense, this buffer may be cast into another type.  Also
- * The actual size of the sense data returned is used to detect what
- * kind of tape drive is out there.  Kludgy, but true.
- */
-typedef struct ScsiClass0Sense {
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  valid           :1;     /* Sense data is valid */
-       u_char  error           :7;     /* 3 bits class and 4 bits code */
-#else
-       u_char  error           :7;     /* 3 bits class and 4 bits code */
-       u_char  valid           :1;     /* Sense data is valid */
-#endif
-       u_char  highAddr;               /* High byte of block address */
-       u_char  midAddr;                /* Middle byte of block address */
-       u_char  lowAddr;                /* Low byte of block address */
-       u_char  sense[26];              /* Target specific sense data */
-} ScsiClass0Sense;
-
-/*
- * Definitions for errors in the sense data.  The error field is specified
- * as a 3 bit class and 4 bit code, but it is easier to treat it as a
- * single 7 bit field.
- */
-#define SCSI_NO_SENSE_DATA             0x00
-#define SCSI_NOT_READY                 0x04
-#define SCSI_NOT_LOADED                        0x09
-#define SCSI_INSUF_CAPACITY            0x0a
-#define SCSI_HARD_DATA_ERROR           0x11
-#define SCSI_WRITE_PROTECT             0x17
-#define SCSI_CORRECTABLE_ERROR         0x18
-#define SCSI_FILE_MARK                 0x1c
-#define SCSI_INVALID_COMMAND           0x20
-#define SCSI_UNIT_ATTENTION            0x30
-#define SCSI_END_OF_MEDIA              0x34
-
-/*
- * The standard "extended" sense data returned by SCSI devices.  This
- * has an error field of 0x70, for a "class 7" error.
- */
-typedef struct ScsiClass7Sense {
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  valid           :1;     /* Sense data is valid */
-       u_char  error7          :7;     /* == 0x70 */
-       u_char  pad1;                   /* Also "segment number" for copy */
-       u_char  fileMark        :1;     /* File mark on device */
-       u_char  endOfMedia      :1;     /* End of media reached */
-       u_char  badBlockLen     :1;     /* Block length mis-match (Exabyte) */
-       u_char  pad2            :1;
-       u_char  key             :4;     /* Sense keys defined below */
-       u_char  info1;                  /* Information byte 1 */
-       u_char  info2;                  /* Information byte 2 */
-       u_char  info3;                  /* Information byte 3 */
-       u_char  info4;                  /* Information byte 4 */
-       u_char  length;                 /* Number of additional info bytes */
-#else
-       u_char  error7          :7;     /* == 0x70 */
-       u_char  valid           :1;     /* Sense data is valid */
-       u_char  pad1;                   /* Also "segment number" for copy */
-       u_char  key             :4;     /* Sense keys defined below */
-       u_char  pad2            :1;
-       u_char  badBlockLen     :1;     /* Block length mis-match (Exabyte) */
-       u_char  endOfMedia      :1;     /* End of media reached */
-       u_char  fileMark        :1;     /* File mark on device */
-       u_char  info1;                  /* Information byte 1 */
-       u_char  info2;                  /* Information byte 2 */
-       u_char  info3;                  /* Information byte 3 */
-       u_char  info4;                  /* Information byte 4 */
-       u_char  length;                 /* Number of additional info bytes */
-#endif
-} ScsiClass7Sense;                     /* 8 Bytes */
-
-/*
- * Key values for standardized sense class 7. 
- */
-#define SCSI_CLASS7_NO_SENSE           0
-#define SCSI_CLASS7_RECOVERABLE                1
-#define SCSI_CLASS7_NOT_READY          2
-#define SCSI_CLASS7_MEDIA_ERROR                3
-#define SCSI_CLASS7_HARDWARE_ERROR     4
-#define SCSI_CLASS7_ILLEGAL_REQUEST    5
-
-/*
- * These seem to have different meanings to different vendors....
- */
-#define SCSI_CLASS7_MEDIA_CHANGE       6
-#define SCSI_CLASS7_UNIT_ATTN          6
-
-#define SCSI_CLASS7_WRITE_PROTECT      7
-#define SCSI_CLASS7_BLANK_CHECK                8
-#define SCSI_CLASS7_VENDOR             9
-#define SCSI_CLASS7_POWER_UP_FAILURE   10
-#define SCSI_CLASS7_ABORT              11
-#define SCSI_CLASS7_EQUAL              12
-#define SCSI_CLASS7_OVERFLOW           13
-#define SCSI_CLASS7_RESERVED_14                14
-#define SCSI_CLASS7_RESERVED_15                15
-
-/*
- * Data return by the SCSI inquiry command. 
- */
-typedef struct ScsiInquiryData {
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  type;           /* Peripheral Device type. See below. */
-       u_char  rmb:1;          /* Removable Medium bit. */
-       u_char  qualifier:7;    /* Device type qualifier. */
-       u_char  version;        /* Version info. */
-       u_char  reserved:4;     /* reserved. */
-       u_char  format:4;       /* Response format. */
-       u_char  length;         /* length of data returned. */
-       u_char  reserved2[2];   /* Reserved */
-       u_char  flags;          /* SCSI II flags (see below) */
-       u_char  vendorID[8];    /* Vendor ID (ASCII) */
-       u_char  productID[16];  /* Product ID (ASCII) */
-       u_char  revLevel[4];    /* Revision level (ASCII) */
-       u_char  revData[8];     /* Revision data (ASCII) */
-#else
-       u_char  type;           /* Peripheral Device type. See below. */
-       u_char  qualifier:7;    /* Device type qualifier. */
-       u_char  rmb:1;          /* Removable Medium bit. */
-       u_char  version;        /* Version info. */
-       u_char  format:4;       /* Response format. */
-       u_char  reserved:4;     /* reserved. */
-       u_char  length;         /* length of data returned. */
-       u_char  reserved2[2];   /* Reserved */
-       u_char  flags;          /* SCSI II flags (see below) */
-       u_char  vendorID[8];    /* Vendor ID (ASCII) */
-       u_char  productID[16];  /* Product ID (ASCII) */
-       u_char  revLevel[4];    /* Revision level (ASCII) */
-       u_char  revData[8];     /* Revision data (ASCII) */
-#endif
-} ScsiInquiryData;
-
-/*
- * The SCSI Peripheral type ID codes as return by the SCSI_INQUIRY command.
- *
- * SCSI_DISK_TYPE - Direct Access Device.
- * SCSI_TAPE_TYPE - Sequential Access Device.
- * SCSI_PRINTER_TYPE - Printer Device.
- * SCSI_HOST_TYPE - Processor Device.
- * SCSI_WORM_TYPE - Write-Once Read-Multiple Device.
- * SCSI_ROM_TYPE - Read-Only Direct Access Device.
- * SCSI_SCANNER_TYPE - Scanner device.
- * SCSI_OPTICAL_MEM_TYPE - Optical memory device.
- * SCSI_MEDIUM_CHANGER_TYPE - Medium changer device.
- * SCSI_COMMUNICATIONS_TYPE - Communications device.
- * SCSI_NODEVICE_TYPE - Logical Unit not present or implemented.
- *
- * Note that codes 0xa-0x7e are reserved and 0x80-0xff are vendor unique.
- */
-#define        SCSI_DISK_TYPE                  0
-#define        SCSI_TAPE_TYPE                  1
-#define        SCSI_PRINTER_TYPE               2
-#define        SCSI_HOST_TYPE                  3
-#define        SCSI_WORM_TYPE                  4
-#define        SCSI_ROM_TYPE                   5
-#define        SCSI_SCANNER_TYPE               6
-#define        SCSI_OPTICAL_MEM_TYPE           7
-#define        SCSI_MEDIUM_CHANGER_TYPE        8
-#define        SCSI_COMMUNICATIONS_TYPE        9
-#define        SCSI_NODEVICE_TYPE              0x7f
-
-/*
- * The SCSI I & II inquiry flags.
- *
- * SCSI_REL_ADR - Relative addressing supported.
- * SCSI_WIDE_32 - 32 bit wide SCSI bus transfers supported.
- * SCSI_WIDE_16 - 16 bit wide SCSI bus transfers supported.
- * SCSI_SYNC - Synchronous data transfers supported.
- * SCSI_LINKED - Linked commands supported.
- * SCSI_CMD_QUEUE - Tagged command queuing supported.
- * SCSI_SOFT_RESET - Soft RESET alternative suported.
- */
-#define SCSI_REL_ADR           0x80
-#define SCSI_WIDE_32           0x40
-#define SCSI_WIDE_16           0x20
-#define SCSI_SYNC              0x10
-#define SCSI_LINKED            0x08
-#define SCSI_CMD_QUEUE         0x02
-#define SCSI_SOFT_RESET                0x01
-
-/*
- * Standard header for SCSI_MODE_SENSE and SCSI_MODE_SELECT commands for tapes.
- */
-typedef struct ScsiTapeModeSelectHdr {
-       u_char  len;            /* length */
-       u_char  media;          /* media type */
-#if BYTE_ORDER == BIG_ENDIAN
-       u_char  writeprot:1;    /* Write protected media */
-       u_char  bufferedMode:3; /* Type of buffer to be done. */
-       u_char  speed:4;        /* Drive speed. */
-#else
-       u_char  speed:4;        /* Drive speed. */
-       u_char  bufferedMode:3; /* Type of buffer to be done. */
-       u_char  writeprot:1;    /* Write protected media */
-#endif
-       u_char  length;         /* Block descriptor length. */
-       u_char  density;        /* tape density code */
-       u_char  blocks_2;       /* number of blocks (MSB) */
-       u_char  blocks_1;       /* number of blocks */
-       u_char  blocks_0;       /* number of blocks (LSB) */
-       u_char  reserved;       /* */
-       u_char  block_size2;    /* Tape block size (MSB) */
-       u_char  block_size1;    /* Tape block size */
-       u_char  block_size0;    /* Tape block size (LSB) */
-       u_char  vendor[6];      /* vendor specific data */
-} ScsiTapeModeSelectHdr;
-
-/*
- * Definitions of SCSI messages.
- *
- * SCSI_COMMAND_COMPLETE - After a command has completed, successfully
- *     or not, this is returned to the host from the target.
- *
- * SCSI_EXTENDED_MSG - Indicates that a multi-byte message is being sent.
- *
- * The following messages are used with connect/disconnect:
- * SCSI_SAVE_DATA_POINTER - Sent from target to host to request saving
- *     of current DMA address and count.  Indicates a pending dis-connect.
- * SCSI_RESTORE_POINTER - Sent from the target to the host to request
- *     restoring pointers saved before a disconnect
- * SCSI_DISCONNECT - Sent from the target to the host to disconnect.
- * SCSI_ABORT - Sent from the host to the target to abort current request.
- * SCSI_MESSAGE_REJECT -  Indicates receipt, by either host or target, of
- *     an unimplemented message.
- * SCSI_NO_OP - Sent from host to target if it has no real message to send.
- * SCSI_MESSAGE_PARITY_ERROR - Sent from host to target on message parity error
- * SCSI_BUS_RESET - Sent from host to target to reset all current I/O
- *
- * SCSI_IDENTIFY - The low order two bits of this message type indicate
- *     the Logical Unit of the Target which is requesting a reconnect.
- * SCSI_DIS_REC_IDENTIFY - Sent from the host to a target to indicate
- *     is supports connect/dis-connect
- *     
- */
-#define SCSI_COMMAND_COMPLETE          0x00
-#define SCSI_EXTENDED_MSG              0x01
-#define SCSI_SAVE_DATA_POINTER         0x02
-#define SCSI_RESTORE_POINTERS          0x03
-#define SCSI_DISCONNECT                        0x04
-#define SCSI_ABORT                     0x06
-#define SCSI_MESSAGE_REJECT            0x07
-#define SCSI_NO_OP                     0x08
-#define SCSI_MESSAGE_PARITY_ERROR      0x09
-#define SCSI_LINKED_CMD_COMPLETE       0x0A
-#define SCSI_LINKED_FLAGED_CMD_COMPLETE        0x0B
-#define SCSI_BUS_RESET                 0x0C
-
-#define SCSI_IDENTIFY                  0x80
-#define SCSI_DIS_REC_IDENTIFY          0xc0
-
-/*
- * Extended message types (2nd byte of SCSI_EXTENDED_MSG).
- */
-#define SCSI_MODIFY_DATA_PTR           0x00
-#define SCSI_SYNCHRONOUS_XFER          0x01
-#define SCSI_EXTENDED_IDENTIFY         0x02 /* only in SCSI I */
-#define SCSI_WIDE_XFER                 0x03
-
-/*
- * Driver ioctl's for various scsi operations.
- */
-#ifndef _IOCTL_
-#include <sys/ioctl.h>
-#endif
-
-/*
- * Control for SCSI "format" mode.
- *
- * "Format" mode allows a privileged process to issue direct SCSI
- * commands to a drive (it is intended primarily to allow on-line
- * formatting).  SDIOCSFORMAT with a non-zero arg will put the drive
- * into format mode; a zero arg will take it out.  When in format
- * mode, only the process that issued the SDIOCFORMAT can read or
- * write the drive.
- *
- * In format mode, process is expected to
- *     - do SDIOCSCSICOMMAND to supply cdb for next SCSI op
- *     - do read or write as appropriate for cdb
- *     - if i/o error, optionally do SDIOCSENSE to get completion
- *       status and sense data from last scsi operation.
- */
-
-struct scsi_fmt_cdb {
-       int     len;            /* cdb length (in bytes) */
-       u_char  cdb[28];        /* cdb to use on next read/write */
-};
-
-struct scsi_fmt_sense {
-       u_int   status;         /* completion status of last op */
-       u_char  sense[32];      /* sense data (if any) from last op */
-};
-
-#define        SDIOCSFORMAT            _IOW('S', 0x1, int)
-#define        SDIOCGFORMAT            _IOR('S', 0x2, int)
-#define        SDIOCSCSICOMMAND        _IOW('S', 0x3, struct scsi_fmt_cdb)
-#define        SDIOCSENSE              _IOR('S', 0x4, struct scsi_fmt_sense)
-
-#ifdef _KERNEL
-/*
- * Routines.
- */
-extern void scsiGroup0Cmd();
-extern void scsiGroup1Cmd();
-#endif /* _KERNEL */
-
-#endif /* _SCSI_H */
diff --git a/sys/arch/pica/include/ansi.h b/sys/arch/pica/include/ansi.h
deleted file mode 100644 (file)
index 59add98..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*     $OpenBSD: ansi.h,v 1.2 1996/06/06 23:06:29 deraadt Exp $        */
-/*     $NetBSD: ansi.h,v 1.5 1994/10/26 21:09:33 cgd Exp $     */
-
-/*-
- * Copyright (c) 1990, 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.
- *
- *     @(#)ansi.h      8.2 (Berkeley) 1/4/94
- */
-
-#ifndef        _ANSI_H_
-#define        _ANSI_H_
-
-/*
- * Types which are fundamental to the implementation and may appear in
- * more than one standard header are defined here.  Standard headers
- * then use:
- *     #ifdef  _BSD_SIZE_T_
- *     typedef _BSD_SIZE_T_ size_t;
- *     #undef  _BSD_SIZE_T_
- *     #endif
- */
-#define        _BSD_CLOCK_T_   unsigned long           /* clock() */
-#define        _BSD_PTRDIFF_T_ int                     /* ptr1 - ptr2 */
-#define        _BSD_SIZE_T_    unsigned int            /* sizeof() */
-#define        _BSD_SSIZE_T_   int                     /* byte count or error */
-#define        _BSD_TIME_T_    long                    /* time() */
-#define        _BSD_VA_LIST_   char *                  /* va_list */
-
-/*
- * Runes (wchar_t) is declared to be an ``int'' instead of the more natural
- * ``unsigned long'' or ``long''.  Two things are happening here.  It is not
- * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,
- * it looks like 10646 will be a 31 bit standard.  This means that if your
- * ints cannot hold 32 bits, you will be in trouble.  The reason an int was
- * chosen over a long is that the is*() and to*() routines take ints (says
- * ANSI C), but they use _RUNE_T_ instead of int.  By changing it here, you
- * lose a bit of ANSI conformance, but your programs will still work.
- *    
- * Note that _WCHAR_T_ and _RUNE_T_ must be of the same type.  When wchar_t
- * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains
- * defined for ctype.h.
- */
-#define        _BSD_WCHAR_T_   int                     /* wchar_t */
-#define        _BSD_RUNE_T_    int                     /* rune_t */
-
-#endif /* _ANSI_H_ */
diff --git a/sys/arch/pica/include/asm.h b/sys/arch/pica/include/asm.h
deleted file mode 100644 (file)
index 5b3683f..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*      $OpenBSD: asm.h,v 1.2 1996/06/06 23:06:30 deraadt Exp $        */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     Copyright (C) 1989 Digital Equipment Corporation.
- *     Permission to use, copy, modify, and distribute this software and
- *     its documentation for any purpose and without fee is hereby granted,
- *     provided that the above copyright notice appears in all copies.
- *     Digital Equipment Corporation makes no representations about the
- *     suitability of this software for any purpose.  It is provided "as is"
- *     without express or implied warranty.
- */
-
-#ifndef _MACHASMDEFS
-#define _MACHASMDEFS
-
-#include <machine/regdef.h>
-
-#define        ABICALLS
-
-#define RCSID(x)
-
-#define _C_LABEL(x) x
-
-/*
- * Define -pg profile entry code.
- */
-#if defined(GPROF) || defined(PROF)
-#define        MCOUNT  .set noreorder; \
-               .set noat; \
-               move $1,$31; \
-               jal _mcount; \
-               subu sp,sp,8; \
-               .set reorder; \
-               .set at;
-#else
-#define        MCOUNT
-#endif
-
-/*
- * LEAF(x)
- *
- *     Declare a leaf routine.
- */
-#define LEAF(x) \
-       .globl x; \
-       .ent x, 0; \
-x: ; \
-       .frame sp, 0, ra; \
-       MCOUNT
-
-/*
- * NLEAF(x)
- *
- *     Declare a non-profiled leaf routine.
- */
-#define NLEAF(x) \
-       .globl x; \
-       .ent x, 0; \
-x: ; \
-       .frame sp, 0, ra
-
-/*
- * ALEAF -- declare alternate entry to a leaf routine.
- */
-#define        ALEAF(x)                                        \
-       .globl  x;                                      \
-x:
-
-/*
- * NON_LEAF(x)
- *
- *     Declare a non-leaf routine (a routine that makes other C calls).
- */
-#define NON_LEAF(x, fsize, retpc) \
-       .globl x; \
-       .ent x, 0; \
-x: ; \
-       .frame sp, fsize, retpc; \
-       MCOUNT
-
-/*
- * NNON_LEAF(x)
- *
- *     Declare a non-profiled non-leaf routine
- *     (a routine that makes other C calls).
- */
-#define NNON_LEAF(x, fsize, retpc) \
-       .globl x; \
-       .ent x, 0; \
-x: ; \
-       .frame sp, fsize, retpc
-
-/*
- * END(x)
- *
- *     Mark end of a procedure.
- */
-#define END(x) \
-       .end x
-
-#define STAND_FRAME_SIZE       24
-#define STAND_RA_OFFSET                20
-
-/*
- * Macros to panic and printf from assembly language.
- */
-#define PANIC(msg) \
-       la      a0, 9f; \
-       jal     panic; \
-       MSG(msg)
-
-#define        PRINTF(msg) \
-       la      a0, 9f; \
-       jal     printf; \
-       MSG(msg)
-
-#define        MSG(msg) \
-       .rdata; \
-9:     .asciiz msg; \
-       .text
-
-#define ASMSTR(str) \
-       .asciiz str; \
-       .align  3
-
-#endif /* _MACHASMDEFS */
diff --git a/sys/arch/pica/include/autoconf.h b/sys/arch/pica/include/autoconf.h
deleted file mode 100644 (file)
index a65e08c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*     $OpenBSD: autoconf.h,v 1.2 1996/06/06 23:06:31 deraadt Exp $    */
-/*     $NetBSD: autoconf.h,v 1.1 1995/02/13 23:07:31 cgd Exp $ */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-/*
- * Machine-dependent structures of autoconfiguration
- */
-
-struct confargs;
-
-typedef int (*intr_handler_t) __P((void *));
-
-struct abus {
-       struct  device *ab_dv;          /* back-pointer to device */
-       int     ab_type;                /* bus type (see below) */
-       void    (*ab_intr_establish)    /* bus's set-handler function */
-                   __P((struct confargs *, intr_handler_t, void *));
-       void    (*ab_intr_disestablish) /* bus's unset-handler function */
-                   __P((struct confargs *));
-       caddr_t (*ab_cvtaddr)           /* convert slot/offset to address */
-                   __P((struct confargs *));
-       int     (*ab_matchname)         /* see if name matches driver */
-                   __P((struct confargs *, char *));
-};
-
-#define        BUS_MAIN        1               /* mainbus */
-#define        BUS_PICA        2               /* PICA Bus */
-#define        BUS_ASIC        3               /* IOCTL ASIC; under TurboChannel */
-#define        BUS_TCDS        4               /* TCDS ASIC; under TurboChannel */
-
-#define        BUS_INTR_ESTABLISH(ca, handler, val)                            \
-           (*(ca)->ca_bus->ab_intr_establish)((ca), (handler), (val))
-#define        BUS_INTR_DISESTABLISH(ca)                                       \
-           (*(ca)->ca_bus->ab_intr_establish)(ca)
-#define        BUS_CVTADDR(ca)                                                 \
-           (*(ca)->ca_bus->ab_cvtaddr)(ca)
-#define        BUS_MATCHNAME(ca, name)                                         \
-           (*(ca)->ca_bus->ab_matchname)((ca), (name))
-
-struct confargs {
-       char    *ca_name;               /* Device name. */
-       int     ca_slot;                /* Device slot. */
-       int     ca_offset;              /* Offset into slot. */
-       struct  abus *ca_bus;           /* bus device resides on. */
-};
-
-void   set_clockintr __P((void (*)(struct clockframe *)));
-void   set_iointr __P((void (*)(void *, int)));
-int    badaddr                 __P((void *, u_int64_t));
diff --git a/sys/arch/pica/include/bsd-aout.h b/sys/arch/pica/include/bsd-aout.h
deleted file mode 100644 (file)
index df9ab03..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*     $OpenBSD: bsd-aout.h,v 1.2 1996/06/06 23:06:32 deraadt Exp $    */
-
-/* bsd-aout.h
-
-   4.4bsd a.out format, for backwards compatibility...  */
-
-#ifndef __MACHINE_BSD_AOUT_H__
-#define __MACHINE_BSD_AOUT_H__
-#define BSD_OMAGIC  0407            /* old impure format */
-#define BSD_NMAGIC  0410            /* read-only text */
-#define BSD_ZMAGIC  0413            /* demand load format */
-
-struct bsd_aouthdr {
-#if BYTE_ORDER == BIG_ENDIAN
-  u_short a_mid;          /* machine ID */
-  u_short a_magic;        /* magic number */
-#else
-  u_short a_magic;        /* magic number */
-  u_short a_mid;          /* machine ID */
-#endif
-  u_long  a_text;         /* text segment size */
-  u_long  a_data;         /* initialized data size */
-  u_long  a_bss;          /* uninitialized data size */
-  u_long  a_syms;         /* symbol table size */
-  u_long  a_entry;        /* entry point */
-  u_long  a_trsize;       /* text relocation size */
-  u_long  a_drsize;       /* data relocation size */
-};
-
-#ifndef _KERNEL
-#define _AOUT_INCLUDE_
-#include <nlist.h>
-#endif /* _KERNEL */
-#endif /* __MACHINE_BSD_AOUT_H__ */
diff --git a/sys/arch/pica/include/bus.h b/sys/arch/pica/include/bus.h
deleted file mode 100644 (file)
index 21a3d42..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*     $OpenBSD: bus.h,v 1.2 1996/06/06 23:06:33 deraadt Exp $ */
-/*     $NetBSD: bus.h,v 1.2 1996/04/05 23:59:37 thorpej 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.
- */
-
-#ifndef _PICA_BUS_H_
-#define _PICA_BUS_H_
-
-#include <machine/pio.h>
-
-/*
- * I/O addresses (in bus space)
- */
-typedef u_long bus_io_addr_t;
-typedef u_long bus_io_size_t;
-
-/*
- * Memory addresses (in bus space)
- */
-typedef u_long bus_mem_addr_t;
-typedef u_long bus_mem_size_t;
-
-/*
- * Access methods for bus resources, I/O space, and memory space.
- */
-typedef void *bus_chipset_tag_t;
-typedef u_long bus_io_handle_t;
-typedef caddr_t bus_mem_handle_t;
-
-#define bus_io_map(t, port, size, iohp)                                        \
-    (*iohp = port, 0)
-#define bus_io_unmap(t, ioh, size)
-
-#define        bus_io_read_1(t, h, o)          inb((h) + (o))
-#define        bus_io_read_2(t, h, o)          inw((h) + (o))
-#define        bus_io_read_4(t, h, o)          inl((h) + (o))
-#if 0 /* Cause a link error for bus_io_read_8 */
-#define        bus_io_read_8(t, h, o)          !!! bus_io_read_8 unimplemented !!!
-#endif
-
-#define        bus_io_read_multi_1(t, h, o, a, c)      \
-                                       insb((h) + (o), (a), (c))
-#define        bus_io_read_multi_2(t, h, o, a, c)      \
-                                       insw((h) + (o), (a), (c))
-#define        bus_io_read_multi_4(t, h, o, a, c)      \
-                                       insl((h) + (o), (a), (c))
-#if 0 /* Cause a link error for bus_io_read_multi_8 */
-#define        bus_io_read_multi_8(t, h, o, a, c)      \
-                               !!! bus_io_read_multi_8 unimplemented !!!
-#endif
-
-#define        bus_io_write_1(t, h, o, v)      outb((h) + (o), (v))
-#define        bus_io_write_2(t, h, o, v)      outw((h) + (o), (v))
-#define        bus_io_write_4(t, h, o, v)      outl((h) + (o), (v))
-#if 0 /* Cause a link error for bus_io_write_8 */
-#define        bus_io_write_8(t, h, o, v)      !!! bus_io_write_8 unimplemented !!!
-#endif
-
-#define        bus_io_write_multi_1(t, h, o, a, c)     \
-                                       outsb((h) + (o), (a), (c))
-#define        bus_io_write_multi_2(t, h, o, a, c)     \
-                                       outsw((h) + (o), (a), (c))
-#define        bus_io_write_multi_4(t, h, o, a, c)     \
-                                       outsl((h) + (o), (a), (c))
-#if 0 /* Cause a link error for bus_io_write_multi_8 */
-#define        bus_io_write_multi_8(t, h, o, a, c)     \
-                               !!! bus_io_write_multi_8 unimplimented !!!
-#endif
-
-int    bus_mem_map __P((bus_chipset_tag_t t, bus_mem_addr_t bpa,
-           bus_mem_size_t size, int cacheable, bus_mem_handle_t *mhp));
-void   bus_mem_unmap __P((bus_chipset_tag_t t, bus_mem_handle_t memh,
-           bus_mem_size_t size));
-
-#define        bus_mem_read_1(t, h, o)         (*(volatile u_int8_t *)((h) + (o)))
-#define        bus_mem_read_2(t, h, o)         (*(volatile u_int16_t *)((h) + (o)))
-#define        bus_mem_read_4(t, h, o)         (*(volatile u_int32_t *)((h) + (o)))
-#define        bus_mem_read_8(t, h, o)         (*(volatile u_int64_t *)((h) + (o)))
-
-#define        bus_mem_write_1(t, h, o, v)                                     \
-    ((void)(*(volatile u_int8_t *)((h) + (o)) = (v)))
-#define        bus_mem_write_2(t, h, o, v)                                     \
-    ((void)(*(volatile u_int16_t *)((h) + (o)) = (v)))
-#define        bus_mem_write_4(t, h, o, v)                                     \
-    ((void)(*(volatile u_int32_t *)((h) + (o)) = (v)))
-#define        bus_mem_write_8(t, h, o, v)                                     \
-    ((void)(*(volatile u_int64_t *)((h) + (o)) = (v)))
-
-/* These are extensions to the general NetBSD bus interface.  */
-#define bus_to_host_2(t, v) (v)
-#define bus_to_host_4(t, v) (v)
-#define bus_to_host_8(t, v) (v)
-
-#define bus_from_host_2(t, v) (v)
-#define bus_from_host_4(t, v) (v)
-#define bus_from_host_8(t, v) (v)
-
-#endif /* _PICA_BUS_H_ */
diff --git a/sys/arch/pica/include/cdefs.h b/sys/arch/pica/include/cdefs.h
deleted file mode 100644 (file)
index 335a97b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*     $OpenBSD: cdefs.h,v 1.2 1996/06/06 23:06:34 deraadt Exp $       */
-/*     $NetBSD: cdefs.h,v 1.3 1995/05/03 06:04:54 mellon Exp $ */
-
-/*
- * Copyright (c) 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#ifndef _MACHINE_CDEFS_H_
-#define        _MACHINE_CDEFS_H_
-
-#define        _C_LABEL(x)     _STRING(x)
-
-#define        __indr_references(sym,msg)      /* nothing */
-#define        __warn_references(sym,msg)      /* nothing */
-
-#endif /* !_MACHINE_CDEFS_H_ */
diff --git a/sys/arch/pica/include/cpu.h b/sys/arch/pica/include/cpu.h
deleted file mode 100644 (file)
index 881313c..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*     $OpenBSD: cpu.h,v 1.3 1996/06/07 21:25:17 deraadt Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell and Rick Macklem.
- *
- * 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.
- *
- *     Copyright (C) 1989 Digital Equipment Corporation.
- *     Permission to use, copy, modify, and distribute this software and
- *     its documentation for any purpose and without fee is hereby granted,
- *     provided that the above copyright notice appears in all copies.
- *     Digital Equipment Corporation makes no representations about the
- *     suitability of this software for any purpose.  It is provided "as is"
- *     without express or implied warranty.
- *
- *     from: @(#)cpu.h 8.4 (Berkeley) 1/4/94
- */
-
-#ifndef _CPU_H_
-#define _CPU_H_
-
-#define KUSEG_ADDR             0x0
-#define CACHED_MEMORY_ADDR     0x80000000
-#define UNCACHED_MEMORY_ADDR   0xa0000000
-#define KSEG2_ADDR             0xc0000000
-#define MAX_MEM_ADDR           0xbe000000
-#define        RESERVED_ADDR           0xbfc80000
-
-#define        CACHED_TO_PHYS(x)       ((unsigned)(x) & 0x1fffffff)
-#define        PHYS_TO_CACHED(x)       ((unsigned)(x) | CACHED_MEMORY_ADDR)
-#define        UNCACHED_TO_PHYS(x)     ((unsigned)(x) & 0x1fffffff)
-#define        PHYS_TO_UNCACHED(x)     ((unsigned)(x) | UNCACHED_MEMORY_ADDR)
-#define VA_TO_CINDEX(x)        ((unsigned)(x) & 0xffffff | CACHED_MEMORY_ADDR)
-
-#define CODE_START             0x80080000
-
-#ifdef _KERNEL
-/*
- * The bits in the cause register.
- *
- *     CR_BR_DELAY     Exception happened in branch delay slot.
- *     CR_COP_ERR              Coprocessor error.
- *     CR_IP           Interrupt pending bits defined below.
- *     CR_EXC_CODE     The exception type (see exception codes below).
- */
-#define CR_BR_DELAY            0x80000000
-#define CR_COP_ERR             0x30000000
-#define CR_EXC_CODE            0x0000007C
-#define CR_IP                  0x0000FF00
-#define CR_EXC_CODE_SHIFT      2
-
-/*
- * The bits in the status register.  All bits are active when set to 1.
- */
-#define SR_COP_USABILITY       0xf0000000
-#define SR_COP_0_BIT           0x10000000
-#define SR_COP_1_BIT           0x20000000
-#define SR_RP                  0x08000000
-#define SR_FR_32               0x04000000
-#define SR_RE                  0x02000000
-#define SR_BOOT_EXC_VEC                0x00400000
-#define SR_TLB_SHUTDOWN                0x00200000
-#define SR_SOFT_RESET          0x00100000
-#define SR_DIAG_CH             0x00040000
-#define SR_DIAG_CE             0x00020000
-#define SR_DIAG_PE             0x00010000
-#define SR_KX                  0x00000080
-#define SR_SX                  0x00000040
-#define SR_UX                  0x00000020
-#define SR_KSU_MASK            0x00000018
-#define SR_KSU_USER            0x00000010
-#define SR_KSU_SUPER           0x00000008
-#define SR_KSU_KERNEL          0x00000000
-#define SR_ERL                 0x00000004
-#define SR_EXL                 0x00000002
-#define SR_INT_ENAB            0x00000001
-/*#define SR_INT_MASK          0x0000ff00*/
-
-/*
- * The interrupt masks.
- * If a bit in the mask is 1 then the interrupt is enabled (or pending).
- */
-#define INT_MASK               0x7f00
-#define INT_MASK_5             0x8000  /* Not used (on chip timer) */
-#define INT_MASK_4             0x4000
-#define INT_MASK_3             0x2000
-#define INT_MASK_2             0x1000
-#define INT_MASK_1             0x0800
-#define INT_MASK_0             0x0400
-#define HARD_INT_MASK          0x7c00
-#define SOFT_INT_MASK_1                0x0200
-#define SOFT_INT_MASK_0                0x0100
-
-/*
- * The bits in the context register.
- */
-#define CNTXT_PTE_BASE         0xFF800000
-#define CNTXT_BAD_VPN2         0x007FFFF0
-
-/*
- * Location of exception vectors.
- */
-#define RESET_EXC_VEC          0xBFC00000
-#define TLB_MISS_EXC_VEC       0x80000000
-#define XTLB_MISS_EXC_VEC      0x80000080
-#define CACHE_ERR_EXC_VEC      0x80000100
-#define GEN_EXC_VEC            0x80000180
-
-/*
- * Coprocessor 0 registers:
- */
-#define COP_0_TLB_INDEX                $0
-#define COP_0_TLB_RANDOM       $1
-#define COP_0_TLB_LO0          $2
-#define COP_0_TLB_LO1          $3
-#define COP_0_TLB_CONTEXT      $4
-#define COP_0_TLB_PG_MASK      $5
-#define COP_0_TLB_WIRED                $6
-#define COP_0_BAD_VADDR                $8
-#define COP_0_TLB_HI           $10
-#define COP_0_STATUS_REG       $12
-#define COP_0_CAUSE_REG                $13
-#define COP_0_EXC_PC           $14
-#define COP_0_PRID             $15
-#define COP_0_CONFIG           $16
-#define COP_0_LLADDR           $17
-#define COP_0_WATCH_LO         $18
-#define COP_0_WATCH_HI         $19
-#define COP_0_TLB_XCONTEXT     $20
-#define COP_0_ECC              $26
-#define COP_0_CACHE_ERR                $27
-#define COP_0_TAG_LO           $28
-#define COP_0_TAG_HI           $29
-#define COP_0_ERROR_PC         $30
-
-/*
- * Values for the code field in a break instruction.
- */
-#define BREAK_INSTR            0x0000000d
-#define BREAK_VAL_MASK         0x03ff0000
-#define BREAK_VAL_SHIFT                16
-#define BREAK_KDB_VAL          512
-#define BREAK_SSTEP_VAL                513
-#define BREAK_BRKPT_VAL                514
-#define BREAK_SOVER_VAL                515
-#define BREAK_KDB      (BREAK_INSTR | (BREAK_KDB_VAL << BREAK_VAL_SHIFT))
-#define BREAK_SSTEP    (BREAK_INSTR | (BREAK_SSTEP_VAL << BREAK_VAL_SHIFT))
-#define BREAK_BRKPT    (BREAK_INSTR | (BREAK_BRKPT_VAL << BREAK_VAL_SHIFT))
-#define BREAK_SOVER    (BREAK_INSTR | (BREAK_SOVER_VAL << BREAK_VAL_SHIFT))
-
-/*
- * Mininum and maximum cache sizes.
- */
-#define MIN_CACHE_SIZE         (16 * 1024)
-#define MAX_CACHE_SIZE         (256 * 1024)
-
-/*
- * The floating point version and status registers.
- */
-#define        FPC_ID                  $0
-#define        FPC_CSR                 $31
-
-/*
- * The floating point coprocessor status register bits.
- */
-#define FPC_ROUNDING_BITS              0x00000003
-#define FPC_ROUND_RN                   0x00000000
-#define FPC_ROUND_RZ                   0x00000001
-#define FPC_ROUND_RP                   0x00000002
-#define FPC_ROUND_RM                   0x00000003
-#define FPC_STICKY_BITS                        0x0000007c
-#define FPC_STICKY_INEXACT             0x00000004
-#define FPC_STICKY_UNDERFLOW           0x00000008
-#define FPC_STICKY_OVERFLOW            0x00000010
-#define FPC_STICKY_DIV0                        0x00000020
-#define FPC_STICKY_INVALID             0x00000040
-#define FPC_ENABLE_BITS                        0x00000f80
-#define FPC_ENABLE_INEXACT             0x00000080
-#define FPC_ENABLE_UNDERFLOW           0x00000100
-#define FPC_ENABLE_OVERFLOW            0x00000200
-#define FPC_ENABLE_DIV0                        0x00000400
-#define FPC_ENABLE_INVALID             0x00000800
-#define FPC_EXCEPTION_BITS             0x0003f000
-#define FPC_EXCEPTION_INEXACT          0x00001000
-#define FPC_EXCEPTION_UNDERFLOW                0x00002000
-#define FPC_EXCEPTION_OVERFLOW         0x00004000
-#define FPC_EXCEPTION_DIV0             0x00008000
-#define FPC_EXCEPTION_INVALID          0x00010000
-#define FPC_EXCEPTION_UNIMPL           0x00020000
-#define FPC_COND_BIT                   0x00800000
-#define FPC_FLUSH_BIT                  0x01000000
-#define FPC_MBZ_BITS                   0xfe7c0000
-
-/*
- * Constants to determine if have a floating point instruction.
- */
-#define OPCODE_SHIFT           26
-#define OPCODE_C1              0x11
-
-/*
- * The low part of the TLB entry.
- */
-#define VMTLB_PF_NUM           0x3fffffc0
-#define VMTLB_ATTR_MASK                0x00000038
-#define VMTLB_MOD_BIT          0x00000004
-#define VMTLB_VALID_BIT                0x00000002
-#define VMTLB_GLOBAL_BIT       0x00000001
-
-#define VMTLB_PHYS_PAGE_SHIFT  6
-
-/*
- * The high part of the TLB entry.
- */
-#define VMTLB_VIRT_PAGE_NUM    0xffffe000
-#define VMTLB_PID              0x000000ff
-#define VMTLB_PID_SHIFT                0
-#define VMTLB_VIRT_PAGE_SHIFT  12
-
-/*
- * The number of TLB entries and the first one that write random hits.
- */
-#define VMNUM_TLB_ENTRIES      48
-#define VMWIRED_ENTRIES                8
-
-/*
- * The number of process id entries.
- */
-#define        VMNUM_PIDS              256
-
-/*
- * TLB probe return codes.
- */
-#define VMTLB_NOT_FOUND                0
-#define VMTLB_FOUND            1
-#define VMTLB_FOUND_WITH_PATCH 2
-#define VMTLB_PROBE_ERROR      3
-
-/*
- * Kernel virtual address for user page table entries
- * (i.e., the address for the context register).
- */
-#define VMPTE_BASE             0xFF800000
-
-#endif /* _KERNEL */
-
-/*
- * Exported definitions unique to pica/mips cpu support.
- */
-
-/*
- * definitions of cpu-dependent requirements
- * referenced in generic code
- */
-#define        COPY_SIGCODE            /* copy sigcode above user stack in exec */
-
-#define        cpu_wait(p)             /* nothing */
-#define cpu_set_init_frame(p, fp) /* nothing */
-#define cpu_swapout(p)         panic("cpu_swapout: can't get here");
-
-#ifndef _LOCORE
-/*
- * Arguments to hardclock and gatherstats encapsulate the previous
- * machine state in an opaque clockframe.
- */
-struct clockframe {
-       int     pc;     /* program counter at time of interrupt */
-       int     sr;     /* status register at time of interrupt */
-};
-
-#define        CLKF_USERMODE(framep)   ((framep)->sr & SR_KSU_USER)
-#define        CLKF_BASEPRI(framep)    ((~(framep)->sr & (INT_MASK|SR_INT_ENAB)) == 0)
-#define        CLKF_PC(framep)         ((framep)->pc)
-#define        CLKF_INTR(framep)       (0)
-
-/*
- * Preempt the current process if in interrupt from user mode,
- * or after the current trap/syscall if in system mode.
- */
-#define        need_resched()  { want_resched = 1; aston(); }
-
-/*
- * Give a profiling tick to the current process when the user profiling
- * buffer pages are invalid.  On the PICA, request an ast to send us
- * through trap, marking the proc as needing a profiling tick.
- */
-#define        need_proftick(p)        { (p)->p_flag |= P_OWEUPC; aston(); }
-
-/*
- * Notify the current process (p) that it has a signal pending,
- * process as soon as possible.
- */
-#define        signotify(p)    aston()
-
-#define aston()                (astpending = 1)
-
-int    astpending;     /* need to trap before returning to user mode */
-int    want_resched;   /* resched() was called */
-
-/*
- * CPU identification, from PRID register.
- */
-union cpuprid {
-       int     cpuprid;
-       struct {
-#if BYTE_ORDER == BIG_ENDIAN
-               u_int   pad1:16;        /* reserved */
-               u_int   cp_imp:8;       /* implementation identifier */
-               u_int   cp_majrev:4;    /* major revision identifier */
-               u_int   cp_minrev:4;    /* minor revision identifier */
-#else
-               u_int   cp_minrev:4;    /* minor revision identifier */
-               u_int   cp_majrev:4;    /* major revision identifier */
-               u_int   cp_imp:8;       /* implementation identifier */
-               u_int   pad1:16;        /* reserved */
-#endif
-       } cpu;
-};
-
-/*
- * CTL_MACHDEP definitions.
- */
-#define        CPU_CONSDEV             1       /* dev_t: console terminal device */
-#define        CPU_MAXID               2       /* number of valid machdep ids */
-
-#define CTL_MACHDEP_NAMES { \
-       { 0, 0 }, \
-       { "console_device", CTLTYPE_STRUCT }, \
-}
-
-#endif /* !_LOCORE */
-
-/*
- * MIPS CPU types (cp_imp).
- */
-#define        MIPS_R2000      0x01    /* MIPS R2000 CPU               ISA I   */
-#define        MIPS_R3000      0x02    /* MIPS R3000 CPU               ISA I   */
-#define        MIPS_R6000      0x03    /* MIPS R6000 CPU               ISA II  */
-#define        MIPS_R4000      0x04    /* MIPS R4000/4400 CPU          ISA III */
-#define MIPS_R3LSI     0x05    /* LSI Logic R3000 derivate     ISA I   */
-#define        MIPS_R6000A     0x06    /* MIPS R6000A CPU              ISA II  */
-#define        MIPS_R3IDT      0x07    /* IDT R3000 derivate           ISA I   */
-#define        MIPS_R10000     0x09    /* MIPS R10000/T5 CPU           ISA IV  */
-#define        MIPS_R4200      0x0a    /* MIPS R4200 CPU (ICE)         ISA III */
-#define MIPS_UNKC1     0x0b    /* unnanounced product cpu      ISA III */
-#define MIPS_UNKC2     0x0c    /* unnanounced product cpu      ISA III */
-#define        MIPS_R8000      0x10    /* MIPS R8000 Blackbird/TFP     ISA IV  */
-#define        MIPS_R4600      0x20    /* QED R4600 Orion              ISA III */
-#define        MIPS_R3SONY     0x21    /* Sony R3000 based CPU         ISA I   */
-#define        MIPS_R3TOSH     0x22    /* Toshiba R3000 based CPU      ISA I   */
-#define        MIPS_R3NKK      0x23    /* NKK R3000 based CPU          ISA I   */
-
-/*
- * MIPS FPU types
- */
-#define        MIPS_SOFT       0x00    /* Software emulation           ISA I   */
-#define        MIPS_R2360      0x01    /* MIPS R2360 FPC               ISA I   */
-#define        MIPS_R2010      0x02    /* MIPS R2010 FPC               ISA I   */
-#define        MIPS_R3010      0x03    /* MIPS R3010 FPC               ISA I   */
-#define        MIPS_R6010      0x04    /* MIPS R6010 FPC               ISA II  */
-#define        MIPS_R4010      0x05    /* MIPS R4000/R4400 FPC         ISA II  */
-#define MIPS_R31LSI    0x06    /* LSI Logic derivate           ISA I   */
-#define        MIPS_R10010     0x09    /* MIPS R10000/T5 FPU           ISA IV  */
-#define        MIPS_R4210      0x0a    /* MIPS R4200 FPC (ICE)         ISA III */
-#define MIPS_UNKF1     0x0b    /* unnanounced product cpu      ISA III */
-#define        MIPS_R8000      0x10    /* MIPS R8000 Blackbird/TFP     ISA IV  */
-#define        MIPS_R4600      0x20    /* QED R4600 Orion              ISA III */
-#define        MIPS_R3SONY     0x21    /* Sony R3000 based FPU         ISA I   */
-#define        MIPS_R3TOSH     0x22    /* Toshiba R3000 based FPU      ISA I   */
-#define        MIPS_R3NKK      0x23    /* NKK R3000 based FPU          ISA I   */
-
-#if defined(_KERNEL) && !defined(_LOCORE)
-union  cpuprid cpu_id;
-union  cpuprid fpu_id;
-u_int  machPrimaryDataCacheSize;
-u_int  machPrimaryInstCacheSize;
-u_int  machPrimaryDataCacheLSize;
-u_int  machPrimaryInstCacheLSize;
-u_int  machCacheAliasMask;
-extern struct intr_tab intr_tab[];
-#endif
-
-/*
- * Enable realtime clock (always enabled).
- */
-#define        enablertclock()
-
-#endif /* _CPU_H_ */
diff --git a/sys/arch/pica/include/disklabel.h b/sys/arch/pica/include/disklabel.h
deleted file mode 100644 (file)
index 40e9134..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*     $OpenBSD: disklabel.h,v 1.2 1996/06/06 23:06:36 deraadt Exp $   */
-/*     $NetBSD: disklabel.h,v 1.2 1995/01/18 06:37:55 mellon Exp $     */
-
-/*
- * Copyright (c) 1994 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.
- * 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 _MACHINE_DISKLABEL_H_
-#define _MACHINE_DISKLABEL_H_
-
-#define        LABELSECTOR     0                       /* sector containing label */
-#define        LABELOFFSET     64                      /* offset of label in sector */
-#define        MAXPARTITIONS   8                       /* number of partitions */
-#define        RAW_PART        2                       /* raw partition: xx?c */
-
-/* DOS partition table -- used when the system is booted from a dos
- * partition. This is the case on NT systems.
- */
-#define        DOSBBSECTOR     0               /* DOS boot block relative sector # */
-#define        DOSPARTOFF      446
-#define        NDOSPART        4
-
-struct dos_partition {
-       unsigned char   dp_flag;        /* bootstrap flags */
-       unsigned char   dp_shd;         /* starting head */
-       unsigned char   dp_ssect;       /* starting sector */
-       unsigned char   dp_scyl;        /* starting cylinder */
-       unsigned char   dp_typ;         /* partition type (see below) */
-       unsigned char   dp_ehd;         /* end head */
-       unsigned char   dp_esect;       /* end sector */
-       unsigned char   dp_ecyl;        /* end cylinder */
-       unsigned long   dp_start;       /* absolute starting sector number */
-       unsigned long   dp_size;        /* partition size in sectors */
-} dos_partitions[NDOSPART];
-
-/* Known DOS partition types. */
-#define        DOSPTYP_386BSD  0xa5            /* 386BSD partition type */
-#define DOSPTYP_NETBSD DOSPTYP_386BSD  /* NetBSD partition type (XXX) */
-
-#include <sys/dkbad.h>
-struct cpu_disklabel {
-       struct dos_partition dosparts[NDOSPART];
-       struct dkbad bad;
-};
-
-/* Isolate the relevant bits to get sector and cylinder. */
-#define        DPSECT(s)       ((s) & 0x3f)
-#define        DPCYL(c, s)     ((c) + (((s) & 0xc0) << 2))
-
-#ifdef _KERNEL
-struct disklabel;
-int    bounds_check_with_label __P((struct buf *, struct disklabel *, int));
-#endif
-
-#endif /* _MACHINE_DISKLABEL_H_ */
diff --git a/sys/arch/pica/include/display.h b/sys/arch/pica/include/display.h
deleted file mode 100644 (file)
index 06ab051..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*     $OpenBSD: display.h,v 1.2 1996/06/06 23:06:36 deraadt Exp $     */
-
-/*
- * IBM PC display definitions
- *
- */
-
-/* Color attributes for foreground text */
-
-#define        FG_BLACK                   0
-#define        FG_BLUE                    1
-#define        FG_GREEN                   2
-#define        FG_CYAN                    3
-#define        FG_RED                     4
-#define        FG_MAGENTA                 5
-#define        FG_BROWN                   6
-#define        FG_LIGHTGREY               7
-#define        FG_DARKGREY                8
-#define        FG_LIGHTBLUE               9
-#define        FG_LIGHTGREEN             10
-#define        FG_LIGHTCYAN              11
-#define        FG_LIGHTRED               12
-#define        FG_LIGHTMAGENTA           13
-#define        FG_YELLOW                 14
-#define        FG_WHITE                  15
-#define        FG_BLINK                0x80
-#define        FG_MASK                 0x8f
-
-/* Color attributes for text background */
-
-#define        BG_BLACK                0x00
-#define        BG_BLUE                 0x10
-#define        BG_GREEN                0x20
-#define        BG_CYAN                 0x30
-#define        BG_RED                  0x40
-#define        BG_MAGENTA              0x50
-#define        BG_BROWN                0x60
-#define        BG_LIGHTGREY            0x70
-#define        BG_MASK                 0x70
-
-/* Monochrome attributes for foreground text */
-
-#define        FG_UNDERLINE            0x01
-#define        FG_INTENSE              0x08
-
-/* Monochrome attributes for text background */
-
-#define        BG_INTENSE              0x10
diff --git a/sys/arch/pica/include/ecoff.h b/sys/arch/pica/include/ecoff.h
deleted file mode 100644 (file)
index b8d6091..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*     $OpenBSD: ecoff.h,v 1.3 1996/05/30 16:59:54 pefo Exp $  */
-/*     $NetBSD: ecoff.h,v 1.4 1995/06/16 02:07:33 mellon Exp $ */
-
-/*
- * Copyright (c) 1994 Adam Glass
- * 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 Adam Glass.
- * 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 Adam Glass ``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 Adam Glass 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 ECOFF_LDPGSZ 4096
-
-#define ECOFF_PAD
-
-#define ECOFF_MACHDEP \
-        u_long ea_gprmask; \
-        u_long ea_cprmask[4]; \
-        u_long ea_gp_value
-
-#define ECOFF_MAGIC_MIPSEL 0x0162
-#define ECOFF_BADMAG(ex) ((ex)->f.f_magic != ECOFF_MAGIC_MIPSEL)
-
-#define ECOFF_SEGMENT_ALIGNMENT(eap) ((eap)->ea_vstamp < 23 ? 8 : 16)
-
-struct ecoff_symhdr {
-        int16_t         sh_magic;
-        int16_t         sh_vstamp;
-        int32_t         sh_linemax;
-        int32_t         sh_densenummax;
-        int32_t         sh_procmax;
-        int32_t         sh_lsymmax;
-        int32_t         sh_optsymmax;
-        int32_t         sh_auxxymmax;
-        int32_t         sh_lstrmax;
-        int32_t         sh_estrmax;
-        int32_t         sh_fdmax;
-        int32_t         sh_rfdmax;
-        int32_t         sh_esymmax;
-        long            sh_linesize;
-        long            sh_lineoff;
-        long            sh_densenumoff;
-        long            sh_procoff; 
-        long            sh_lsymoff;
-        long            sh_optsymoff;
-        long            sh_auxsymoff;
-        long            sh_lstroff;
-        long            sh_estroff;
-        long            sh_fdoff;
-        long            sh_rfdoff;
-        long            sh_esymoff;
-};      
-
-struct ecoff_extsym {  
-        long            es_value;
-        int             es_strindex;
-        unsigned        es_type:6;
-        unsigned        es_class:5;
-        unsigned        :1;
-        unsigned        es_symauxindex:20;  
-        unsigned        es_jmptbl:1;
-        unsigned        es_cmain:1;
-        unsigned        es_weakext:1;
-        unsigned        :29;
-        int             es_indexfld; 
-};
-
diff --git a/sys/arch/pica/include/elf.h b/sys/arch/pica/include/elf.h
deleted file mode 100644 (file)
index acdbbed..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*     $OpenBSD: elf.h,v 1.2 1996/06/06 23:06:38 deraadt Exp $ */
-/*     $NetBSD: elf.h,v 1.2 1995/03/28 18:19:14 jtc Exp $      */
-
-/*
- * Copyright (c) 1994 Ted Lemon
- *
- * 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.
- *
- */
-
-#ifndef __MACHINE_ELF_H__
-#define __MACHINE_ELF_H__
-
-/* ELF executable header... */
-struct ehdr {
-  char elf_magic [4];          /* Elf magic number... */
-  unsigned long magic [3];     /* Magic number... */
-  unsigned short type;         /* Object file type... */
-  unsigned short machine;      /* Machine ID... */
-  unsigned long version;       /* File format version... */
-  unsigned long entry;         /* Entry point... */
-  unsigned long phoff;         /* Program header table offset... */
-  unsigned long shoff;         /* Section header table offset... */
-  unsigned long flags;         /* Processor-specific flags... */
-  unsigned short ehsize;       /* Elf header size in bytes... */
-  unsigned short phsize;       /* Program header size... */
-  unsigned short phcount;      /* Program header count... */
-  unsigned short shsize;       /* Section header size... */
-  unsigned short shcount;      /* Section header count... */
-  unsigned short shstrndx;     /* Section header string table index... */
-};
-
-/* Program header... */
-struct phdr {
-  unsigned long type;          /* Segment type... */
-  unsigned long offset;                /* File offset... */
-  unsigned long vaddr;         /* Virtual address... */
-  unsigned long paddr;         /* Physical address... */
-  unsigned long filesz;                /* Size of segment in file... */
-  unsigned long memsz;         /* Size of segment in memory... */
-  unsigned long flags;         /* Segment flags... */
-  unsigned long align;         /* Alighment, file and memory... */
-};
-
-/* Section header... */
-struct shdr {
-  unsigned long name;          /* Offset into string table of section name */
-  unsigned long type;          /* Type of section... */
-  unsigned long flags;         /* Section flags... */
-  unsigned long addr;          /* Section virtual address at execution... */
-  unsigned long offset;                /* Section file offset... */
-  unsigned long size;          /* Section size... */
-  unsigned long link;          /* Link to another section... */
-  unsigned long info;          /* Additional section info... */
-  unsigned long align;         /* Section alignment... */
-  unsigned long esize;         /* Entry size if section holds table... */
-};
-
-/* Symbol table entry... */
-struct sym {
-  unsigned long name;          /* Index into strtab of symbol name. */
-  unsigned long value;         /* Section offset, virt addr or common align. */
-  unsigned long size;          /* Size of object referenced. */
-  unsigned type    : 4;                /* Symbol type (e.g., function, data)... */
-  unsigned binding : 4;                /* Symbol binding (e.g., global, local)... */
-  unsigned char other;         /* Unused. */
-  unsigned short shndx;                /* Section containing symbol. */
-};
-
-/* Values for program header type field */
-
-#define PT_NULL         0               /* Program header table entry unused */
-#define PT_LOAD         1               /* Loadable program segment */
-#define PT_DYNAMIC      2               /* Dynamic linking information */
-#define PT_INTERP       3               /* Program interpreter */
-#define PT_NOTE         4               /* Auxiliary information */
-#define PT_SHLIB        5               /* Reserved, unspecified semantics */
-#define PT_PHDR         6               /* Entry for header table itself */
-#define PT_LOPROC       0x70000000      /* Processor-specific */
-#define PT_HIPROC       0x7FFFFFFF      /* Processor-specific */
-#define PT_MIPS_REGINFO        PT_LOPROC       /* Mips reginfo section... */
-
-/* Program segment permissions, in program header flags field */
-
-#define PF_X            (1 << 0)        /* Segment is executable */
-#define PF_W            (1 << 1)        /* Segment is writable */
-#define PF_R            (1 << 2)        /* Segment is readable */
-#define PF_MASKPROC     0xF0000000      /* Processor-specific reserved bits */
-
-/* Reserved section indices... */
-#define SHN_UNDEF      0
-#define SHN_ABS                0xfff1
-#define SHN_COMMON     0xfff2
-#define SHN_MIPS_ACOMMON 0xfff0
-
-/* Symbol bindings... */
-#define STB_LOCAL      0
-#define STB_GLOBAL     1
-#define STB_WEAK       2
-
-/* Symbol types... */
-#define STT_NOTYPE     0
-#define        STT_OBJECT      1
-#define STT_FUNC       2
-#define        STT_SECTION     3
-#define STT_FILE       4
-
-#define ELF_HDR_SIZE   (sizeof (struct ehdr))
-#ifdef _KERNEL
-int     pmax_elf_makecmds __P((struct proc *, struct exec_package *));
-#endif /* _KERNEL */
-#endif /* __MACHINE_ELF_H__ */
diff --git a/sys/arch/pica/include/endian.h b/sys/arch/pica/include/endian.h
deleted file mode 100644 (file)
index 25566c7..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*     $OpenBSD: endian.h,v 1.3 1996/06/06 23:06:38 deraadt Exp $      */
-/*     $NetBSD: endian.h,v 1.4 1994/10/26 21:09:38 cgd Exp $   */
-
-/*
- * Copyright (c) 1987, 1991, 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.
- *
- *     @(#)endian.h    8.1 (Berkeley) 6/11/93
- */
-
-#ifndef _ENDIAN_H_
-#define        _ENDIAN_H_
-
-/*
- * Define _NOQUAD if the compiler does NOT support 64-bit integers.
- */
-/* #define _NOQUAD */
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define        LITTLE_ENDIAN   1234    /* LSB first: i386, vax */
-#define        BIG_ENDIAN      4321    /* MSB first: 68000, ibm, net */
-#define        PDP_ENDIAN      3412    /* LSB first in word, MSW first in long */
-
-#define        BYTE_ORDER      LITTLE_ENDIAN   /* ``... Beautiful SPIIIIM!'' */
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-unsigned long  htonl __P((unsigned long));
-unsigned short htons __P((unsigned short));
-unsigned long  ntohl __P((unsigned long));
-unsigned short ntohs __P((unsigned short));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- */
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define        ntohl(x)        (x)
-#define        ntohs(x)        (x)
-#define        htonl(x)        (x)
-#define        htons(x)        (x)
-
-#define        NTOHL(x)        (x)
-#define        NTOHS(x)        (x)
-#define        HTONL(x)        (x)
-#define        HTONS(x)        (x)
-
-#else
-
-#define        NTOHL(x)        (x) = ntohl((u_long)x)
-#define        NTOHS(x)        (x) = ntohs((u_short)x)
-#define        HTONL(x)        (x) = htonl((u_long)x)
-#define        HTONS(x)        (x) = htons((u_short)x)
-#endif
-#endif /* ! _POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
diff --git a/sys/arch/pica/include/exec.h b/sys/arch/pica/include/exec.h
deleted file mode 100644 (file)
index 88cb0cf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*     $OpenBSD: exec.h,v 1.4 1996/06/06 23:06:39 deraadt Exp $        */
-/*     $NetBSD: exec.h,v 1.5 1994/10/26 21:09:39 cgd Exp $     */
-
-/*-
- * Copyright (c) 1992, 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.
- *
- *     @(#)exec.h      8.1 (Berkeley) 6/10/93
- */
-
-#define        __LDPGSZ        4096
-
-/*
- *  Define what exec "formats" we should handle.
- */
-#define NATIVE_EXEC_ELF
-#define        EXEC_SCRIPT
-
-#define ELF_TARG_CLASS         ELFCLASS32
-#define ELF_TARG_DATA          ELFDATA2LSB
-#define ELF_TARG_MACH          EM_MIPS
-
-/*
- *  This is what we want nlist(3) to handle.
- */
-#define DO_AOUT                        /* support a.out */
-#define DO_ELF                 /* support ELF */
-#define DO_ECOFF               /* support ECOFF */
-
diff --git a/sys/arch/pica/include/float.h b/sys/arch/pica/include/float.h
deleted file mode 100644 (file)
index 2381312..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*     $OpenBSD: float.h,v 1.2 1996/06/06 23:06:40 deraadt Exp $       */
-/*     $NetBSD: float.h,v 1.7 1995/06/20 20:45:50 jtc Exp $    */
-
-/*
- * Copyright (c) 1989, 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.
- *
- *     @(#)float.h     8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _PMAX_FLOAT_H_
-#define _PMAX_FLOAT_H_
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-extern int __flt_rounds();
-__END_DECLS
-
-#define FLT_RADIX      2               /* b */
-#define FLT_ROUNDS     __flt_rounds()
-
-#define FLT_MANT_DIG   24              /* p */
-#define FLT_EPSILON    1.19209290E-07F /* b**(1-p) */
-#define FLT_DIG                6               /* floor((p-1)*log10(b))+(b == 10) */
-#define FLT_MIN_EXP    -125            /* emin */
-#define FLT_MIN                1.17549435E-38F /* b**(emin-1) */
-#define FLT_MIN_10_EXP -37             /* ceil(log10(b**(emin-1))) */
-#define FLT_MAX_EXP    128             /* emax */
-#define FLT_MAX                3.40282347E+38F /* (1-b**(-p))*b**emax */
-#define FLT_MAX_10_EXP 38              /* floor(log10((1-b**(-p))*b**emax)) */
-
-#define DBL_MANT_DIG   53
-#define DBL_EPSILON    2.2204460492503131E-16
-#define DBL_DIG                15
-#define DBL_MIN_EXP    -1021
-#define DBL_MIN                2.225073858507201E-308
-#define DBL_MIN_10_EXP -307
-#define DBL_MAX_EXP    1024
-#define DBL_MAX                1.797693134862316E+308
-#define DBL_MAX_10_EXP 308
-
-#define LDBL_MANT_DIG  DBL_MANT_DIG
-#define LDBL_EPSILON   DBL_EPSILON
-#define LDBL_DIG       DBL_DIG
-#define LDBL_MIN_EXP   DBL_MIN_EXP
-#define LDBL_MIN       DBL_MIN
-#define LDBL_MIN_10_EXP        DBL_MIN_10_EXP
-#define LDBL_MAX_EXP   DBL_MAX_EXP
-#define LDBL_MAX       DBL_MAX
-#define LDBL_MAX_10_EXP        DBL_MAX_10_EXP
-
-#endif /* _PMAX_FLOAT_H_ */
diff --git a/sys/arch/pica/include/ieeefp.h b/sys/arch/pica/include/ieeefp.h
deleted file mode 100644 (file)
index d33b628..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*     $OpenBSD: ieeefp.h,v 1.2 1996/06/06 23:06:41 deraadt Exp $      */
-
-/* 
- * Written by J.T. Conklin, Apr 11, 1995
- * Public domain.
- */
-
-#ifndef _MIPS_IEEEFP_H_
-#define _MIPS_IEEEFP_H_
-
-typedef int fp_except;
-#define FP_X_IMP       0x01    /* imprecise (loss of precision) */
-#define FP_X_UFL       0x02    /* underflow exception */
-#define FP_X_OFL       0x04    /* overflow exception */
-#define FP_X_DZ                0x08    /* divide-by-zero exception */
-#define FP_X_INV       0x10    /* invalid operation exception */
-
-typedef enum {
-    FP_RN=0,                   /* round to nearest representable number */
-    FP_RZ=1,                   /* round to zero (truncate) */
-    FP_RP=2,                   /* round toward positive infinity */
-    FP_RM=3                    /* round toward negative infinity */
-} fp_rnd;
-
-#endif /* _MIPS_IEEEFP_H_ */
diff --git a/sys/arch/pica/include/kbdreg.h b/sys/arch/pica/include/kbdreg.h
deleted file mode 100644 (file)
index 6c890fe..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*     $OpenBSD: kbdreg.h,v 1.2 1996/06/06 23:06:42 deraadt Exp $      */
-
-/*
- * Keyboard definitions
- *
- */
-
-#define        KBSTATP         (PICA_SYS_KBD + 0x61)   /* controller status port (I) */
-#define         KBS_DIB        0x01    /* data in buffer */
-#define         KBS_IBF        0x02    /* input buffer low */
-#define         KBS_WARM       0x04    /* input buffer low */
-#define         KBS_OCMD       0x08    /* output buffer has command */
-#define         KBS_NOSEC      0x10    /* security lock not engaged */
-#define         KBS_TERR       0x20    /* transmission error */
-#define         KBS_RERR       0x40    /* receive error */
-#define         KBS_PERR       0x80    /* parity error */
-
-#define        KBCMDP          (PICA_SYS_KBD + 0x61)   /* controller port (O) */
-#define        KBDATAP         (PICA_SYS_KBD + 0x60)   /* data port (I) */
-#define        KBOUTP          (PICA_SYS_KBD + 0x60)   /* data port (O) */
-
-#define        K_RDCMDBYTE     0x20
-#define        K_LDCMDBYTE     0x60
-
-#define        KC8_TRANS       0x40    /* convert to old scan codes */
-#define        KC8_MDISABLE    0x20    /* disable mouse */
-#define        KC8_KDISABLE    0x10    /* disable keyboard */
-#define        KC8_IGNSEC      0x08    /* ignore security lock */
-#define        KC8_CPU         0x04    /* exit from protected mode reset */
-#define        KC8_MENABLE     0x02    /* enable mouse interrupt */
-#define        KC8_KENABLE     0x01    /* enable keyboard interrupt */
-#define        CMDBYTE         (KC8_TRANS|KC8_CPU|KC8_MENABLE|KC8_KENABLE)
-
-/* keyboard commands */
-#define        KBC_RESET       0xFF    /* reset the keyboard */
-#define        KBC_RESEND      0xFE    /* request the keyboard resend the last byte */
-#define        KBC_SETDEFAULT  0xF6    /* resets keyboard to its power-on defaults */
-#define        KBC_DISABLE     0xF5    /* as per KBC_SETDEFAULT, but also disable key scanning */
-#define        KBC_ENABLE      0xF4    /* enable key scanning */
-#define        KBC_TYPEMATIC   0xF3    /* set typematic rate and delay */
-#define        KBC_SETTABLE    0xF0    /* set scancode translation table */
-#define        KBC_MODEIND     0xED    /* set mode indicators (i.e. LEDs) */
-#define        KBC_ECHO        0xEE    /* request an echo from the keyboard */
-
-/* keyboard responses */
-#define        KBR_EXTENDED    0xE0    /* extended key sequence */
-#define        KBR_RESEND      0xFE    /* needs resend of command */
-#define        KBR_ACK         0xFA    /* received a valid command */
-#define        KBR_OVERRUN     0x00    /* flooded */
-#define        KBR_FAILURE     0xFD    /* diagnosic failure */
-#define        KBR_BREAK       0xF0    /* break code prefix - sent on key release */
-#define        KBR_RSTDONE     0xAA    /* reset complete */
-#define        KBR_ECHO        0xEE    /* echo response */
diff --git a/sys/arch/pica/include/kcore.h b/sys/arch/pica/include/kcore.h
deleted file mode 100644 (file)
index fcb380b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*     $OpenBSD: kcore.h,v 1.1 1996/05/16 11:53:41 pefo Exp $  */
-/*     $NetBSD: kcore.h,v 1.1 1996/03/10 21:55:18 leo Exp $    */
-
-/*
- * Copyright (c) 1996 Leo Weppelman.
- * 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 Leo Weppelman.
- * 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 _MIPS_KCORE_H_
-#define        _MIPS_KCORE_H_
-
-#define        NPHYS_RAM_SEGS  8
-
-typedef struct cpu_kcore_hdr {
-       vm_offset_t     kernel_pa;      /* Phys. address of kernel VA 0 */
-       int             mmutype;
-       phys_ram_seg_t  ram_segs[NPHYS_RAM_SEGS];
-} cpu_kcore_hdr_t;
-
-#endif /* _MIPS_KCORE_H_ */
diff --git a/sys/arch/pica/include/kdbparam.h b/sys/arch/pica/include/kdbparam.h
deleted file mode 100644 (file)
index b77f9b9..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*     $OpenBSD: kdbparam.h,v 1.2 1996/06/06 23:06:44 deraadt Exp $    */
-/*     $NetBSD: kdbparam.h,v 1.4 1994/10/26 21:09:42 cgd Exp $ */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)kdbparam.h  8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Machine dependent definitions for kdb.
- */
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define kdbshorten(w)  ((w) & 0xFFFF)
-#define        kdbbyte(w)      ((w) & 0xFF)
-#define        kdbitol(a,b)    ((long)(((b) << 16) | ((a) & 0xFFFF)))
-#define        kdbbtol(a)      ((long)(a))
-#endif
-
-#define LPRMODE                "%R"
-#define OFFMODE                "+%R"
-
-#define        SETBP(ins)      BREAK_BRKPT
-
-/* return the program counter value modified if we are in a delay slot */
-#define        kdbgetpc(pcb)           (kdbvar[kdbvarchk('t')] < 0 ? \
-       (pcb).pcb_regs[34] + 4 : (pcb).pcb_regs[34])
-#define        kdbishiddenreg(p)       ((p) >= &kdbreglist[33])
-#define        kdbisbreak(type)        (((type) & CR_EXC_CODE) == 0x24)
-
-/* check for address wrap around */
-#define        kdbaddrwrap(addr,newaddr)       (((addr)^(newaddr)) >> 31)
-
-/* declare machine dependent routines defined in kadb.c */
-void   kdbprinttrap __P((unsigned, unsigned));
-void   kdbsetsstep __P((void));
-void   kdbclrsstep __P((void));
-void   kdbreadc __P((char *));
-void   kdbwrite __P((char *, int));
-void   kdbprintins __P((int, long));
-void   kdbstacktrace __P((int));
-char   *kdbmalloc __P((int));
diff --git a/sys/arch/pica/include/limits.h b/sys/arch/pica/include/limits.h
deleted file mode 100644 (file)
index 4bad604..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*     $OpenBSD: limits.h,v 1.2 1996/06/06 23:06:45 deraadt Exp $      */
-/*     $NetBSD: limits.h,v 1.8 1995/03/28 18:19:16 jtc Exp $   */
-
-/*
- * Copyright (c) 1988, 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.
- *
- *     @(#)limits.h    8.3 (Berkeley) 1/4/94
- */
-
-#define        CHAR_BIT        8               /* number of bits in a char */
-#define        MB_LEN_MAX      6               /* Allow 31 bit UTF2 */
-
-#ifdef _KERNEL
-#define        CLK_TCK         100             /* ticks per second */
-#endif
-
-/*
- * According to ANSI (section 2.2.4.2), the values below must be usable by
- * #if preprocessing directives.  Additionally, the expression must have the
- * same type as would an expression that is an object of the corresponding
- * type converted according to the integral promotions.  The subtraction for
- * INT_MIN and LONG_MIN is so the value is not unsigned; 2147483648 is an
- * unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
- * These numbers work for pcc as well.  The UINT_MAX and ULONG_MAX values
- * are written as hex so that GCC will be quiet about large integer constants.
- */
-#define        SCHAR_MAX       127             /* min value for a signed char */
-#define        SCHAR_MIN       (-128)          /* max value for a signed char */
-
-#define        UCHAR_MAX       255             /* max value for an unsigned char */
-#define        CHAR_MAX        127             /* max value for a char */
-#define        CHAR_MIN        (-128)          /* min value for a char */
-
-#define        USHRT_MAX       65535           /* max value for an unsigned short */
-#define        SHRT_MAX        32767           /* max value for a short */
-#define        SHRT_MIN        (-32768)        /* min value for a short */
-
-#define        UINT_MAX        0xffffffff      /* max value for an unsigned int */
-#define        INT_MAX         2147483647      /* max value for an int */
-#define        INT_MIN         (-2147483647-1) /* min value for an int */
-
-#define        ULONG_MAX       0xffffffff      /* max value for an unsigned long */
-#define        LONG_MAX        2147483647      /* max value for a long */
-#define        LONG_MIN        (-2147483647-1) /* min value for a long */
-
-#if !defined(_ANSI_SOURCE)
-#define        SSIZE_MAX       INT_MAX         /* max value for a ssize_t */
-
-#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
-#define        SIZE_T_MAX      UINT_MAX        /* max value for a size_t */
-
-/* GCC requires that quad constants be written as expressions. */
-#define        UQUAD_MAX       ((u_quad_t)0-1) /* max value for a uquad_t */
-                                       /* max value for a quad_t */
-#define        QUAD_MAX        ((quad_t)(UQUAD_MAX >> 1))
-#define        QUAD_MIN        (-QUAD_MAX-1)   /* min value for a quad_t */
-
-#endif /* !_POSIX_SOURCE && !_XOPEN_SOURCE */
-#endif /* !_ANSI_SOURCE */
-
-#if (!defined(_ANSI_SOURCE)&&!defined(_POSIX_SOURCE)) || defined(_XOPEN_SOURCE)
-#define LONG_BIT       32
-#define WORD_BIT       32
-
-#define DBL_DIG                15
-#define DBL_MAX                1.797693134862316E+308
-#define DBL_MIN                2.225073858507201E-308
-
-#define FLT_DIG                6
-#define FLT_MAX                3.40282347E+38F
-#define FLT_MIN                1.17549435E-38F
-#endif
diff --git a/sys/arch/pica/include/mips_opcode.h b/sys/arch/pica/include/mips_opcode.h
deleted file mode 100644 (file)
index 4ff925b..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*      $OpenBSD: mips_opcode.h,v 1.2 1996/06/06 23:06:50 deraadt Exp $        */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)mips_opcode.h 8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Define the instruction formats and opcode values for the
- * MIPS instruction set.
- */
-
-/*
- * Define the instruction formats.
- */
-typedef union {
-       unsigned word;
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-       struct {
-               unsigned imm: 16;
-               unsigned rt: 5;
-               unsigned rs: 5;
-               unsigned op: 6;
-       } IType;
-
-       struct {
-               unsigned target: 26;
-               unsigned op: 6;
-       } JType;
-
-       struct {
-               unsigned func: 6;
-               unsigned shamt: 5;
-               unsigned rd: 5;
-               unsigned rt: 5;
-               unsigned rs: 5;
-               unsigned op: 6;
-       } RType;
-
-       struct {
-               unsigned func: 6;
-               unsigned fd: 5;
-               unsigned fs: 5;
-               unsigned ft: 5;
-               unsigned fmt: 4;
-               unsigned : 1;           /* always '1' */
-               unsigned op: 6;         /* always '0x11' */
-       } FRType;
-#endif
-} InstFmt;
-
-/*
- * Values for the 'op' field.
- */
-#define OP_SPECIAL     000
-#define OP_BCOND       001
-#define OP_J           002
-#define        OP_JAL          003
-#define OP_BEQ         004
-#define OP_BNE         005
-#define OP_BLEZ                006
-#define OP_BGTZ                007
-
-#define OP_ADDI                010
-#define OP_ADDIU       011
-#define OP_SLTI                012
-#define OP_SLTIU       013
-#define OP_ANDI                014
-#define OP_ORI         015
-#define OP_XORI                016
-#define OP_LUI         017
-
-#define OP_COP0                020
-#define OP_COP1                021
-#define OP_COP2                022
-#define OP_COP3                023
-#define        OP_BEQL         024
-#define        OP_BNEL         025
-#define        OP_BLEZL        026
-#define        OP_BGTZL        027
-
-#define        OP_DADDI        030
-#define        OP_DADDIU       031
-#define        OP_LDL          032
-#define        OP_LDR          033
-
-#define        OP_LB           040
-#define        OP_LH           041
-#define OP_LWL         042
-#define OP_LW          043
-#define OP_LBU         044
-#define OP_LHU         045
-#define OP_LWR         046
-#define        OP_LHU          045
-#define        OP_LWR          046
-#define        OP_LWU          047
-
-#define OP_SB          050
-#define OP_SH          051
-#define OP_SWL         052
-#define OP_SW          053
-#define        OP_SDL          054
-#define        OP_SDR          055
-#define OP_SWR         056
-#define        OP_CACHE        057
-
-#define OP_LL          060
-#define OP_LWC1                061
-#define OP_LWC2                062
-#define OP_LWC3                063
-#define        OP_LLD          064
-#define        OP_LD           067
-
-#define OP_SC          070
-#define OP_SWC1                071
-#define OP_SWC2                072
-#define OP_SWC3                073
-#define        OP_SCD          074
-#define        OP_SD           077
-
-/*
- * Values for the 'func' field when 'op' == OP_SPECIAL.
- */
-#define OP_SLL         000
-#define OP_SRL         002
-#define OP_SRA         003
-#define OP_SLLV                004
-#define OP_SRLV                006
-#define OP_SRAV                007
-
-#define OP_JR          010
-#define OP_JALR                011
-#define OP_SYSCALL     014
-#define OP_BREAK       015
-#define        OP_SYNC         017
-
-#define OP_MFHI                020
-#define OP_MTHI                021
-#define OP_MFLO                022
-#define OP_MTLO                023
-#define        OP_DSLLV        024
-#define        OP_DSRLV        026
-#define        OP_DSRAV        027
-
-#define OP_MULT                030
-#define OP_MULTU       031
-#define OP_DIV         032
-#define OP_DIVU                033
-#define        OP_DMULT        034
-#define        OP_DMULTU       035
-#define        OP_DDIV         036
-#define        OP_DDIVU        037
-
-
-#define OP_ADD         040
-#define OP_ADDU                041
-#define OP_SUB         042
-#define OP_SUBU                043
-#define OP_AND         044
-#define OP_OR          045
-#define OP_XOR         046
-#define OP_NOR         047
-
-#define OP_SLT         052
-#define OP_SLTU                053
-#define        OP_DADD         054
-#define        OP_DADDU        055
-#define        OP_DSUB         056
-#define        OP_DSUBU        057
-
-#define        OP_TGE          060
-#define        OP_TGEU         061
-#define        OP_TLT          062
-#define        OP_TLTU         063
-#define        OP_TEQ          064
-#define        OP_TNE          066
-
-#define        OP_DSLL         070
-#define        OP_DSRL         072
-#define        OP_DSRA         073
-#define        OP_DSLL32       074
-#define        OP_DSRL32       076
-#define        OP_DSRA32       077
-
-/*
- * Values for the 'func' field when 'op' == OP_BCOND.
- */
-#define OP_BLTZ                000
-#define OP_BGEZ                001
-#define        OP_BLTZL        002
-#define        OP_BGEZL        003
-
-#define        OP_TGEI         010
-#define        OP_TGEIU        011
-#define        OP_TLTI         012
-#define        OP_TLTIU        013
-#define        OP_TEQI         014
-#define        OP_TNEI         016
-
-#define OP_BLTZAL      020
-#define        OP_BLTZAL       020
-#define OP_BGEZAL      021
-#define OP_BLTZALL     022
-#define        OP_BGEZALL      023
-
-/*
- * Values for the 'rs' field when 'op' == OP_COPz.
- */
-#define OP_MF          000
-#define        OP_DMF          001
-#define OP_MT          004
-#define        OP_DMT          005
-#define OP_BCx         010
-#define OP_BCy         014
-#define OP_CF          002
-#define OP_CT          006
-
-/*
- * Values for the 'rt' field when 'op' == OP_COPz.
- */
-#define COPz_BC_TF_MASK        0x01
-#define COPz_BC_TRUE   0x01
-#define COPz_BC_FALSE  0x00
-#define COPz_BCL_TF_MASK       0x02
-#define COPz_BCL_TRUE  0x02
-#define COPz_BCL_FALSE 0x00
diff --git a/sys/arch/pica/include/mouse.h b/sys/arch/pica/include/mouse.h
deleted file mode 100644 (file)
index 366cb5e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*     $OpenBSD: mouse.h,v 1.2 1996/06/06 23:06:52 deraadt Exp $       */
-/*     $NetBSD: mouse.h,v 1.4 1994/10/27 04:16:10 cgd Exp $    */
-
-/*-
- * Copyright (c) 1992, 1993 Erik Forsberg.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY ``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 I 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 _MOUSE_H_
-#define _MOUSE_H_
-
-struct mouseinfo {
-       unsigned char status;
-       char xmotion, ymotion;
-};
-
-#define BUTSTATMASK    0x07    /* Any mouse button down if any bit set */
-#define BUTCHNGMASK    0x38    /* Any mouse button changed if any bit set */
-
-#define BUT3STAT       0x01    /* Button 3 down if set */
-#define BUT2STAT       0x02    /* Button 2 down if set */
-#define BUT1STAT       0x04    /* Button 1 down if set */
-#define BUT3CHNG       0x08    /* Button 3 changed if set */
-#define BUT2CHNG       0x10    /* Button 2 changed if set */
-#define BUT1CHNG       0x20    /* Button 1 changed if set */
-#define MOVEMENT       0x40    /* Mouse movement detected */
-
-/* Ioctl definitions */
-
-#define MOUSEIOC        ('M'<<8)
-#define MOUSEIOCREAD   (MOUSEIOC|60)
-
-#endif /* !_MOUSE_H_ */
diff --git a/sys/arch/pica/include/param.h b/sys/arch/pica/include/param.h
deleted file mode 100644 (file)
index 23cc08d..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*      $OpenBSD: param.h,v 1.4 1996/06/06 23:06:53 deraadt Exp $ */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: machparam.h 1.11 89/08/14
- *     from: @(#)param.h       8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Machine dependent constants for Acer Labs PICA_61.
- */
-#define        MACHINE      "pica"
-#define MACHINE_ARCH "mips"
-#define MID_PICA MID_PMAX /* For the moment */
-#define MID_MACHINE  MID_PICA
-
-/*
- * Round p (pointer or byte index) up to a correctly-aligned value for all
- * data types (int, long, ...).   The result is u_int and must be cast to
- * any desired pointer type.
- */
-#define        ALIGNBYTES      7
-#define        ALIGN(p)        (((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
-
-#define        NBPG            4096            /* bytes/page */
-#define        PGOFSET         (NBPG-1)        /* byte offset into page */
-#define        PGSHIFT         12              /* LOG2(NBPG) */
-#define        NPTEPG          (NBPG/4)
-
-#define NBSEG          0x400000        /* bytes/segment */
-#define        SEGOFSET        (NBSEG-1)       /* byte offset into segment */
-#define        SEGSHIFT        22              /* LOG2(NBSEG) */
-
-#define        KERNBASE        0x80000000      /* start of kernel virtual */
-#define        KERNTEXTOFF     0x80080000      /* start of kernel text for kvm_mkdb */
-#define        BTOPKERNBASE    ((u_long)KERNBASE >> PGSHIFT)
-
-#define        DEV_BSIZE       512
-#define        DEV_BSHIFT      9               /* log2(DEV_BSIZE) */
-#define BLKDEV_IOSIZE  2048
-#define        MAXPHYS         (64 * 1024)     /* max raw I/O transfer size */
-
-#define        CLSIZE          1
-#define        CLSIZELOG2      0
-
-/* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
-#define        SSIZE           1               /* initial stack size/NBPG */
-#define        SINCR           1               /* increment of stack/NBPG */
-
-#define        UPAGES          2               /* pages of u-area */
-#define        UADDR           0xffffc000      /* address of u */
-#define USPACE         (UPAGES*NBPG)   /* size of u-area in bytes */
-#define        UVPN            (UADDR>>PGSHIFT)/* virtual page number of u */
-#define        KERNELSTACK     (UADDR+UPAGES*NBPG)     /* top of kernel stack */
-
-/*
- * Constants related to network buffer management.
- * MCLBYTES must be no larger than CLBYTES (the software page size), and,
- * on machines that exchange pages of input or output buffers with mbuf
- * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
- * of the hardware page size.
- */
-#define        MSIZE           128             /* size of an mbuf */
-#define        MCLBYTES        2048            /* enough for whole Ethernet packet */
-#define        MCLSHIFT        10
-#define        MCLOFSET        (MCLBYTES - 1)
-#ifndef NMBCLUSTERS
-#ifdef GATEWAY
-#define        NMBCLUSTERS     2048            /* map size, max cluster allocation */
-#else
-#define        NMBCLUSTERS     1024            /* map size, max cluster allocation */
-#endif
-#endif
-
-/*
- * Size of kernel malloc arena in CLBYTES-sized logical pages
- */ 
-#ifndef NKMEMCLUSTERS
-#define        NKMEMCLUSTERS   (512*1024/CLBYTES)
-#endif
-
-/* pages ("clicks") (4096 bytes) to disk blocks */
-#define        ctod(x) ((x) << (PGSHIFT - DEV_BSHIFT))
-#define        dtoc(x) ((x) >> (PGSHIFT - DEV_BSHIFT))
-
-/* pages to bytes */
-#define        ctob(x) ((x) << PGSHIFT)
-#define btoc(x) (((x) + PGOFSET) >> PGSHIFT)
-
-/* bytes to disk blocks */
-#define        btodb(x)        ((x) >> DEV_BSHIFT)
-#define dbtob(x)       ((x) << DEV_BSHIFT)
-
-/*
- * Map a ``block device block'' to a file system block.
- * This should be device dependent, and should use the bsize
- * field from the disk label.
- * For now though just use DEV_BSIZE.
- */
-#define        bdbtofsb(bn)    ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
-
-/*
- * Mach derived conversion macros
- */
-#define pica_round_page(x)     ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
-#define pica_trunc_page(x)     ((unsigned)(x) & ~(NBPG-1))
-#define pica_btop(x)           ((unsigned)(x) >> PGSHIFT)
-#define pica_ptob(x)           ((unsigned)(x) << PGSHIFT)
-
-#ifdef _KERNEL
-#ifndef _LOCORE
-extern int (*Mach_splnet)(), (*Mach_splbio)(), (*Mach_splimp)(),
-          (*Mach_spltty)(), (*Mach_splclock)(), (*Mach_splstatclock)();
-#define        splnet()        ((*Mach_splnet)())
-#define        splbio()        ((*Mach_splbio)())
-#define        splimp()        ((*Mach_splimp)())
-#define        spltty()        ((*Mach_spltty)())
-#define        splclock()      ((*Mach_splclock)())
-#define        splstatclock()  ((*Mach_splstatclock)())
-
-/*
- *   Delay is based on an assumtion that each time in the loop
- *   takes 3 clocks. Three is for branch and subtract in the delay slot.
- */
-extern int cpuspeed;
-#define        DELAY(n)        { register int N = cpuspeed * (n); while ((N -= 3) > 0); }
-#endif
-
-#else /* !_KERNEL */
-#define        DELAY(n)        { register int N = (n); while (--N > 0); }
-#endif /* !_KERNEL */
diff --git a/sys/arch/pica/include/pcb.h b/sys/arch/pica/include/pcb.h
deleted file mode 100644 (file)
index 717ed86..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*      $OpenBSD: pcb.h,v 1.2 1996/06/06 23:06:55 deraadt Exp $        */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: pcb.h 1.13 89/04/23
- *     from: @(#)pcb.h 8.1 (Berkeley) 6/10/93
- */
-
-/*
- * PICA process control block
- */
-struct pcb
-{
-       int     pcb_regs[71];   /* saved CPU and floating point registers */
-       label_t pcb_context;    /* kernel context for resume */
-       int     pcb_onfault;    /* for copyin/copyout faults */
-       void    *pcb_segtab;    /* copy of pmap pm_segtab */
-};
-
-/*
- * The pcb is augmented with machine-dependent additional data for
- * core dumps. For the PICA, there is nothing to add.
- */
-struct md_coredump {
-       long    md_pad[8];
-};
diff --git a/sys/arch/pica/include/pccons.h b/sys/arch/pica/include/pccons.h
deleted file mode 100644 (file)
index ab377b9..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*     $OpenBSD: pccons.h,v 1.3 1996/06/06 23:06:56 deraadt Exp $      */
-
-/*
- * pccons.h -- pccons ioctl definitions
- *
- */
-
-#ifndef _PCCONS_H_
-#define _PCCONS_H_
-
-#include <sys/ioctl.h>
-
-#define CONSOLE_X_MODE_ON              _IO('t',121)
-#define CONSOLE_X_MODE_OFF             _IO('t',122)
-#define CONSOLE_X_BELL                 _IOW('t',123,int[2])
-#define CONSOLE_SET_TYPEMATIC_RATE     _IOW('t',124,u_char)
-
-#endif /* _PCCONS_H_ */
diff --git a/sys/arch/pica/include/pio.h b/sys/arch/pica/include/pio.h
deleted file mode 100644 (file)
index d56e7b8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*     $OpenBSD: pio.h,v 1.3 1996/06/06 23:06:57 deraadt Exp $ */
-/*     $NetBSD: pio.h,v 1.11 1995/04/22 03:59:59 mycroft Exp $ */
-
-/*
- * Copyright (c) 1995 Per Fogelstrom.  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 Charles M. Hannum.
- * 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.
- */
-
-/*
- * I/O macros.
- */
-
-#define        outb(a,v)       (*(volatile unsigned char*)(a) = (v))
-#define        outw(a,v)       (*(volatile unsigned short*)(a) = (v))
-#define        out16(a,v)      outw(a,v)
-#define        outl(a,v)       (*(volatile unsigned int*)(a) = (v))
-#define        out32(a,v)      outl(a,v)
-#define        inb(a)          (*(volatile unsigned char*)(a))
-#define        inw(a)          (*(volatile unsigned short*)(a))
-#define        in16(a)         inw(a)
-#define        inl(a)          (*(volatile unsigned int*)(a))
-#define        in32(a)         inl(a)
-
diff --git a/sys/arch/pica/include/pmap.h b/sys/arch/pica/include/pmap.h
deleted file mode 100644 (file)
index d53fa0c..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*      $OpenBSD: pmap.h,v 1.3 1996/06/06 23:06:59 deraadt Exp $ */
-
-/* 
- * Copyright (c) 1987 Carnegie-Mellon University
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)pmap.h        8.1 (Berkeley) 6/10/93
- */
-
-#ifndef        _PMAP_MACHINE_
-#define        _PMAP_MACHINE_
-
-/*
- * The user address space is 2Gb (0x0 - 0x80000000).
- * User programs are laid out in memory as follows:
- *                     address
- *     USRTEXT         0x00001000
- *     USRDATA         USRTEXT + text_size
- *     USRSTACK        0x7FFFFFFF
- *
- * The user address space is mapped using a two level structure where
- * virtual address bits 30..22 are used to index into a segment table which
- * points to a page worth of PTEs (4096 page can hold 1024 PTEs).
- * Bits 21..12 are then used to index a PTE which describes a page within 
- * a segment.
- *
- * The wired entries in the TLB will contain the following:
- *     0-1     (UPAGES)        for curproc user struct and kernel stack.
- *
- * Note: The kernel doesn't use the same data structures as user programs.
- * All the PTE entries are stored in a single array in Sysmap which is
- * dynamically allocated at boot time.
- */
-
-#define pica_trunc_seg(x)      ((vm_offset_t)(x) & ~SEGOFSET)
-#define pica_round_seg(x)      (((vm_offset_t)(x) + SEGOFSET) & ~SEGOFSET)
-#define pmap_segmap(m, v)      ((m)->pm_segtab->seg_tab[((v) >> SEGSHIFT)])
-
-#define PMAP_SEGTABSIZE                512
-
-union pt_entry;
-
-struct segtab {
-       union pt_entry  *seg_tab[PMAP_SEGTABSIZE];
-};
-
-/*
- * Machine dependent pmap structure.
- */
-typedef struct pmap {
-       int                     pm_count;       /* pmap reference count */
-       simple_lock_data_t      pm_lock;        /* lock on pmap */
-       struct pmap_statistics  pm_stats;       /* pmap statistics */
-       int                     pm_tlbpid;      /* address space tag */
-       u_int                   pm_tlbgen;      /* TLB PID generation number */
-       struct segtab           *pm_segtab;     /* pointers to pages of PTEs */
-} *pmap_t;
-
-/*
- * Defines for pmap_attributes[phys_mach_page];
- */
-#define PMAP_ATTR_MOD  0x01    /* page has been modified */
-#define PMAP_ATTR_REF  0x02    /* page has been referenced */
-
-#ifdef _KERNEL
-extern char *pmap_attributes;          /* reference and modify bits */
-extern struct pmap kernel_pmap_store;
-
-#define pmap_resident_count(pmap)       ((pmap)->pm_stats.resident_count)
-#define        pmap_wired_count(pmap)          ((pmap)->pm_stats.wired_count)
-#define pmap_kernel() (&kernel_pmap_store)
-
-#define PMAP_PREFER(pa, va)             pmap_prefer((pa), (va))
-
-#endif /* _KERNEL */
-
-#endif /* _PMAP_MACHINE_ */
diff --git a/sys/arch/pica/include/proc.h b/sys/arch/pica/include/proc.h
deleted file mode 100644 (file)
index 4cdb693..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*     $OpenBSD: proc.h,v 1.2 1996/06/06 23:07:00 deraadt Exp $        */
-/*     $NetBSD: proc.h,v 1.4 1994/10/26 21:09:52 cgd Exp $     */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)proc.h      8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Machine-dependent part of the proc structure for DEC Station.
- */
-struct mdproc {
-       int     *md_regs;               /* registers on current frame */
-       int     md_flags;               /* machine-dependent flags */
-       int     md_upte[UPAGES];        /* ptes for mapping u page */
-       int     md_ss_addr;             /* single step address for ptrace */
-       int     md_ss_instr;            /* single step instruction for ptrace */
-};
-
-/* md_flags */
-#define        MDP_FPUSED      0x0001  /* floating point coprocessor used */
diff --git a/sys/arch/pica/include/profile.h b/sys/arch/pica/include/profile.h
deleted file mode 100644 (file)
index 821922e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*      $OpenBSD: profile.h,v 1.4 1996/06/06 23:07:01 deraadt Exp $    */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)profile.h     8.1 (Berkeley) 6/10/93
- */
-
-#define        _MCOUNT_DECL static void ___mcount
-
-#define        MCOUNT \
-       __asm(".globl _mcount;" \
-       "_mcount:;" \
-       ".set noreorder;" \
-       ".set noat;" \
-       "sw $4,8($29);" \
-       "sw $5,12($29);" \
-       "sw $6,16($29);" \
-       "sw $7,20($29);" \
-       "sw $1,0($29);" \
-       "sw $31,4($29);" \
-       "move $5,$31;" \
-       "jal ___mcount;" \
-       "move $4,$1;" \
-       "lw $4,8($29);" \
-       "lw $5,12($29);" \
-       "lw $6,16($29);" \
-       "lw $7,20($29);" \
-       "lw $31,4($29);" \
-       "lw $1,0($29);" \
-       "addu $29,$29,8;" \
-       "j $31;" \
-       "move $31,$1;" \
-       ".set reorder;" \
-       ".set at");
-
-#ifdef _KERNEL
-/*
- * The following two macros do splhigh and splx respectively.
- * They have to be defined this way because these are real
- * functions on the PICA, and we do not want to invoke mcount
- * recursively.
- */
-#define        MCOUNT_ENTER    s = _splhigh()
-
-#define        MCOUNT_EXIT     _splx(s)
-#endif /* _KERNEL */
diff --git a/sys/arch/pica/include/psl.h b/sys/arch/pica/include/psl.h
deleted file mode 100644 (file)
index 0eb7d5b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*      $OpenBSD: psl.h,v 1.3 1996/06/10 09:22:11 pefo Exp $   */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)psl.h 8.1 (Berkeley) 6/10/93
- */
-
-#include <machine/cpu.h>
-
-#define        PSL_LOWIPL      (INT_MASK | SR_INT_ENAB)
-
-#define        PSL_USERSET (   \
-       SR_KSU_USER |   \
-       SR_INT_ENAB |   \
-       SR_EXL      |   \
-       INT_MASK)
-
-#define        PSL_USERCLR (   \
-       SR_COP_USABILITY |      \
-       SR_BOOT_EXC_VEC |       \
-       SR_TLB_SHUTDOWN |       \
-       SR_PARITY_ERR | \
-       SR_CACHE_MISS | \
-       SR_PARITY_ZERO |        \
-       SR_SWAP_CACHES |        \
-       SR_ISOL_CACHES |        \
-       SR_KU_CUR |     \
-       SR_INT_ENA_CUR |        \
-       SR_MBZ)
-
-/*
- * Macros to decode processor status word.
- */
-#define        USERMODE(ps)    (((ps) & SR_KSU_MASK) == SR_KSU_USER)
-#define        BASEPRI(ps)     (((ps) & (INT_MASK | SR_INT_ENA_PREV)) \
-                       == (INT_MASK | SR_INT_ENA_PREV))
diff --git a/sys/arch/pica/include/pte.h b/sys/arch/pica/include/pte.h
deleted file mode 100644 (file)
index 20fc65d..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*      $OpenBSD: pte.h,v 1.3 1996/06/06 23:07:04 deraadt Exp $        */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: pte.h 1.11 89/09/03
- *     from: @(#)pte.h 8.1 (Berkeley) 6/10/93
- */
-
-/*
- * R4000 hardware page table entry
- */
-
-#ifndef _LOCORE
-struct pte {
-#if BYTE_ORDER == BIG_ENDIAN
-unsigned int   pg_prot:2,              /* SW: access control */
-               pg_pfnum:24,            /* HW: core page frame number or 0 */
-               pg_attr:3,              /* HW: cache attribute */
-               pg_m:1,                 /* HW: modified (dirty) bit */
-               pg_v:1,                 /* HW: valid bit */
-               pg_g:1;                 /* HW: ignore pid bit */
-#endif
-#if BYTE_ORDER == LITTLE_ENDIAN
-unsigned int   pg_g:1,                 /* HW: ignore pid bit */
-               pg_v:1,                 /* HW: valid bit */
-               pg_m:1,                 /* HW: modified (dirty) bit */
-               pg_attr:3,                      /* HW: cache attribute */
-               pg_pfnum:24,            /* HW: core page frame number or 0 */
-               pg_prot:2;              /* SW: access control */
-#endif
-};
-
-/*
- * Structure defining an tlb entry data set.
- */
-
-struct tlb {
-       int     tlb_mask;
-       int     tlb_hi;
-       int     tlb_lo0;
-       int     tlb_lo1;
-};
-
-typedef union pt_entry {
-       unsigned int    pt_entry;       /* for copying, etc. */
-       struct pte      pt_pte;         /* for getting to bits by name */
-} pt_entry_t;  /* Mach page table entry */
-#endif /* _LOCORE */
-
-#define        PT_ENTRY_NULL   ((pt_entry_t *) 0)
-
-#define PG_WIRED       0x80000000      /* SW */
-#define PG_RO          0x40000000      /* SW */
-
-#define        PG_SVPN         0xfffff000      /* Software page no mask */
-#define        PG_HVPN         0xffffe000      /* Hardware page no mask */
-#define        PG_ODDPG        0x00001000      /* Odd even pte entry */
-#define        PG_ASID         0x000000ff      /* Address space ID */
-#define        PG_G            0x00000001      /* HW */
-#define        PG_V            0x00000002
-#define        PG_NV           0x00000000
-#define        PG_M            0x00000004
-#define        PG_ATTR         0x0000003f
-#define        PG_UNCACHED     0x00000010
-#define        PG_CACHED       0x00000018
-#define        PG_CACHEMODE    0x00000038
-#define        PG_ROPAGE       (PG_V | PG_RO | PG_CACHED) /* Write protected */
-#define        PG_RWPAGE       (PG_V | PG_M | PG_CACHED)  /* Not wr-prot not clean */
-#define        PG_CWPAGE       (PG_V | PG_CACHED)         /* Not wr-prot but clean */
-#define        PG_IOPAGE       (PG_G | PG_V | PG_M | PG_UNCACHED)
-#define        PG_FRAME        0x3fffffc0
-#define PG_SHIFT       6
-#define vad_to_pfn(x) (((unsigned)(x) >> PG_SHIFT) & PG_FRAME)
-#define pfn_to_vad(x) (((x) & PG_FRAME) << PG_SHIFT)
-#define vad_to_vpn(x) ((unsigned)(x) & PG_SVPN)
-#define vpn_to_vad(x) ((x) & PG_SVPN)
-/* User viritual to pte page entry */
-#define uvtopte(adr) (((adr) >> PGSHIFT) & (NPTEPG -1))
-
-#define        PG_SIZE_4K      0x00000000
-#define        PG_SIZE_16K     0x00006000
-#define        PG_SIZE_64K     0x0001e000
-#define        PG_SIZE_256K    0x0007e000
-#define        PG_SIZE_1M      0x001fe000
-#define        PG_SIZE_4M      0x007fe000
-#define        PG_SIZE_16M     0x01ffe000
-
-#if defined(_KERNEL) && !defined(_LOCORE)
-/*
- * Kernel virtual address to page table entry and visa versa.
- */
-#define        kvtopte(va) \
-       (Sysmap + (((vm_offset_t)(va) - VM_MIN_KERNEL_ADDRESS) >> PGSHIFT))
-#define        ptetokv(pte) \
-       ((((pt_entry_t *)(pte) - Sysmap) << PGSHIFT) + VM_MIN_KERNEL_ADDRESS)
-
-extern pt_entry_t *Sysmap;             /* kernel pte table */
-extern u_int Sysmapsize;               /* number of pte's in Sysmap */
-#endif
diff --git a/sys/arch/pica/include/ptrace.h b/sys/arch/pica/include/ptrace.h
deleted file mode 100644 (file)
index 3d78034..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*      $OpenBSD: ptrace.h,v 1.3 1996/06/06 23:07:06 deraadt Exp $     */
-
-/*
- * Copyright (c) 1992, 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.
- *
- *     from: @(#)ptrace.h      8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Machine dependent trace commands.
- *
- */
-
-#define        PT_GETREGS       (PT_FIRSTMACH+0)
-#define        PT_SETREGS       (PT_FIRSTMACH+1)
-#define        PT_STEP          (PT_FIRSTMACH+2)
diff --git a/sys/arch/pica/include/reg.h b/sys/arch/pica/include/reg.h
deleted file mode 100644 (file)
index 3f8361d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*     $OpenBSD: reg.h,v 1.3 1996/06/06 23:07:07 deraadt Exp $ */
-/*     $NetBSD: reg.h,v 1.6 1995/12/20 02:00:27 jonathan Exp $ */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: reg.h 1.1 90/07/09
- *     @(#)reg.h       8.2 (Berkeley) 1/11/94
- */
-
-#ifndef _MACHINE_REG_H_
-#define _MACHINE_REG_H_
-/*
- * Location of the users' stored
- * registers relative to ZERO.
- * Usage is p->p_regs[XX].
- *
- * must be visible to assembly code.
- */
-#include <machine/regnum.h>
-
-/*
- * Register set accessible via /proc/$pid/reg
- */
-struct reg {
-        int     r_regs[71];    /* numbered as above */
-};
-#endif /*_MACHINE_REG_H_*/
diff --git a/sys/arch/pica/include/regdef.h b/sys/arch/pica/include/regdef.h
deleted file mode 100644 (file)
index b30530a..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*     $OpenBSD: regdef.h,v 1.2 1996/06/06 23:07:09 deraadt Exp $      */
-/*     $NetBSD: regdef.h,v 1.4 1994/10/26 21:09:58 cgd Exp $   */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell. This file is derived from the MIPS RISC
- * Architecture book by Gerry Kane.
- *
- * 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.
- *
- *     @(#)regdef.h    8.1 (Berkeley) 6/10/93
- */
-
-#define zero   $0      /* always zero */
-#define AT     $at     /* assembler temp */
-#define v0     $2      /* return value */
-#define v1     $3
-#define a0     $4      /* argument registers */
-#define a1     $5
-#define a2     $6
-#define a3     $7
-#define t0     $8      /* temp registers (not saved across subroutine calls) */
-#define t1     $9
-#define t2     $10
-#define t3     $11
-#define t4     $12
-#define t5     $13
-#define t6     $14
-#define t7     $15
-#define s0     $16     /* saved across subroutine calls (callee saved) */
-#define s1     $17
-#define s2     $18
-#define s3     $19
-#define s4     $20
-#define s5     $21
-#define s6     $22
-#define s7     $23
-#define t8     $24     /* two more temp registers */
-#define t9     $25
-#define k0     $26     /* kernel temporary */
-#define k1     $27
-#define gp     $28     /* global pointer */
-#define sp     $29     /* stack pointer */
-#define s8     $30     /* one more callee saved */
-#define ra     $31     /* return address */
diff --git a/sys/arch/pica/include/regnum.h b/sys/arch/pica/include/regnum.h
deleted file mode 100644 (file)
index 903d63d..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*     $OpenBSD: regnum.h,v 1.2 1996/06/06 23:07:10 deraadt Exp $      */
-/*     $NetBSD: reg.h,v 1.5 1995/01/18 06:40:12 mellon Exp $   */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: reg.h 1.1 90/07/09
- *     @(#)reg.h       8.2 (Berkeley) 1/11/94
- */
-
-/*
- * Location of the users' stored
- * registers relative to ZERO.
- * Usage is p->p_regs[XX].
- */
-#define ZERO   0
-#define AST    1
-#define V0     2
-#define V1     3
-#define A0     4
-#define A1     5
-#define A2     6
-#define A3     7
-#define T0     8
-#define T1     9
-#define T2     10
-#define T3     11
-#define T4     12
-#define T5     13
-#define T6     14
-#define T7     15
-#define S0     16
-#define S1     17
-#define S2     18
-#define S3     19
-#define S4     20
-#define S5     21
-#define S6     22
-#define S7     23
-#define T8     24
-#define T9     25
-#define K0     26
-#define K1     27
-#define GP     28
-#define SP     29
-#define S8     30
-#define RA     31
-#define        SR      32
-#define        PS      SR      /* alias for SR */
-#define MULLO  33
-#define MULHI  34
-#define BADVADDR 35
-#define CAUSE  36
-#define        PC      37
-
-#define FPBASE 38
-#define F0     (FPBASE+0)
-#define F1     (FPBASE+1)
-#define F2     (FPBASE+2)
-#define F3     (FPBASE+3)
-#define F4     (FPBASE+4)
-#define F5     (FPBASE+5)
-#define F6     (FPBASE+6)
-#define F7     (FPBASE+7)
-#define F8     (FPBASE+8)
-#define F9     (FPBASE+9)
-#define F10    (FPBASE+10)
-#define F11    (FPBASE+11)
-#define F12    (FPBASE+12)
-#define F13    (FPBASE+13)
-#define F14    (FPBASE+14)
-#define F15    (FPBASE+15)
-#define F16    (FPBASE+16)
-#define F17    (FPBASE+17)
-#define F18    (FPBASE+18)
-#define F19    (FPBASE+19)
-#define F20    (FPBASE+20)
-#define F21    (FPBASE+21)
-#define F22    (FPBASE+22)
-#define F23    (FPBASE+23)
-#define F24    (FPBASE+24)
-#define F25    (FPBASE+25)
-#define F26    (FPBASE+26)
-#define F27    (FPBASE+27)
-#define F28    (FPBASE+28)
-#define F29    (FPBASE+29)
-#define F30    (FPBASE+30)
-#define F31    (FPBASE+31)
-#define        FSR     (FPBASE+32)
-
-#ifdef IPCREG
-#define        NIPCREG (FSR + 1)
-int ipcreg[NIPCREG] = {
-       ZERO, AST, V0, V1, A0, A1, A2, A3, T0, T1, T2, T3, T4, T5, T6, T7,
-       S0, S1, S2, S3, S4, S5, S6, S7, T8, T9, K0, K1, GP, SP, S8, RA,
-       SR, MULLO, MULHI, BADVADDR, CAUSE, PC,
-       F0, F1, F2, F3, F4, F5, F6, F7,
-       F8, F9, F10, F11, F12, F13, F14, F15,
-       F16, F17, F18, F19, F20, F21, F22, F23,
-       F24, F25, F26, F27, F28, F29, F30, F31, FSR,
-};
-#endif
diff --git a/sys/arch/pica/include/reloc.h b/sys/arch/pica/include/reloc.h
deleted file mode 100644 (file)
index df72d15..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*      $OpenBSD: reloc.h,v 1.3 1996/06/06 23:07:12 deraadt Exp $      */
-
-/*-
- * Copyright (c) 1992, 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.
- *
- *     from: @(#)reloc.h       8.1 (Berkeley) 6/10/93
- *     from: Header: reloc.h,v 1.6 92/06/20 09:59:37 torek Exp
- */
-
-#if 0
-/*
- * MIPS relocation types.
- */
-enum reloc_type {
-       MIPS_RELOC_32,          /* 32-bit absolute */
-       MIPS_RELOC_JMP,         /* 26-bit absolute << 2 | high 4 bits of pc */
-       MIPS_RELOC_WDISP16,     /* 16-bit signed pc-relative << 2 */
-       MIPS_RELOC_HI16,        /* 16-bit absolute << 16 */
-       MIPS_RELOC_HI16_S,      /* 16-bit absolute << 16 (+1 if needed) */
-       MIPS_RELOC_LO16,        /* 16-bit absolute */
-};
-
-/*
- * MIPS relocation info.
- *
- * Symbol-relative relocation is done by:
- *     1. start with the value r_addend,
- *     2. locate the appropriate symbol and if defined, add symbol value,
- *     3. if pc relative, subtract pc,
- *     4. if the reloc_type is MIPS_RELOC_HI16_S and the result bit 15 is set,
- *             add 0x00010000,
- *     5. shift down 2 or 16 if necessary.
- * The resulting value is then to be stuffed into the appropriate bits
- * in the object (the low 16, or the low 26 bits).
- */
-struct reloc_info_pica {
-       u_long  r_address;      /* relocation addr (offset in segment) */
-       u_int   r_index:24,     /* segment (r_extern==0) or symbol index */
-               r_extern:1,     /* if set, r_index is symbol index */
-               :2;             /* unused */
-       enum reloc_type r_type:5; /* relocation type, from above */
-       long    r_addend;       /* value to add to symbol value */
-};
-
-#define relocation_info reloc_info_pica
-#endif
diff --git a/sys/arch/pica/include/setjmp.h b/sys/arch/pica/include/setjmp.h
deleted file mode 100644 (file)
index c8dc964..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/*     $OpenBSD: setjmp.h,v 1.2 1996/06/06 23:07:13 deraadt Exp $      */
-/*     $NetBSD: setjmp.h,v 1.1 1994/12/20 10:37:05 cgd Exp $   */
-
-/*
- * machine/setjmp.h: machine dependent setjmp-related information.
- */
-
-#define        _JBLEN  83              /* size, in longs, of a jmp_buf */
diff --git a/sys/arch/pica/include/signal.h b/sys/arch/pica/include/signal.h
deleted file mode 100644 (file)
index 3b878ef..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*     $OpenBSD: signal.h,v 1.2 1996/06/06 23:07:15 deraadt Exp $      */
-/*     $NetBSD: signal.h,v 1.6 1995/01/18 06:42:01 mellon Exp $        */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)signal.h    8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Machine-dependent signal definitions
- */
-
-typedef int sig_atomic_t;
-
-#ifndef _ANSI_SOURCE
-/*
- * Information pushed on stack when a signal is delivered.
- * This is used by the kernel to restore state following
- * execution of the signal handler.  It is also made available
- * to the handler to allow it to restore state properly if
- * a non-standard exit is performed.
- */
-struct sigcontext {
-       int     sc_onstack;     /* sigstack state to restore */
-       int     sc_mask;        /* signal mask to restore */
-       int     sc_pc;          /* pc at time of signal */
-       int     sc_regs[32];    /* processor regs 0 to 31 */
-       int     mullo, mulhi;   /* mullo and mulhi registers... */
-       int     sc_fpused;      /* fp has been used */
-       int     sc_fpregs[33];  /* fp regs 0 to 31 and csr */
-       int     sc_fpc_eir;     /* floating point exception instruction reg */
-       int     xxx[8];         /* XXX reserved */ 
-};
-
-#endif /* !_ANSI_SOURCE */
diff --git a/sys/arch/pica/include/stdarg.h b/sys/arch/pica/include/stdarg.h
deleted file mode 100644 (file)
index 14a6405..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*     $OpenBSD: stdarg.h,v 1.2 1996/06/06 23:07:16 deraadt Exp $      */
-/*     $NetBSD: stdarg.h,v 1.7 1995/03/28 18:19:28 jtc Exp $   */
-
-/*-
- * Copyright (c) 1992, 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.
- *
- *     @(#)stdarg.h    8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _PMAX_STDARG_H_
-#define        _PMAX_STDARG_H_
-
-#include <machine/ansi.h>
-
-typedef _BSD_VA_LIST_  va_list;
-
-#define        __va_promote(type) \
-       (((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
-
-#define        va_start(ap, last) \
-       (ap = ((char *)&(last) + __va_promote(last)))
-
-#ifdef _KERNEL
-#define        va_arg(ap, type) \
-       ((type *)(ap += sizeof(type)))[-1]
-#else
-#define        va_arg(ap, type) \
-       ((type *)(ap += sizeof(type) == sizeof(int) ? sizeof(type) : \
-               sizeof(type) > sizeof(int) ? \
-               (-(int)(ap) & (sizeof(type) - 1)) + sizeof(type) : \
-               (abort(), 0)))[-1]
-#endif
-
-#define        va_end(ap)      ((void) 0)
-
-#endif /* !_PMAX_STDARG_H_ */
diff --git a/sys/arch/pica/include/trap.h b/sys/arch/pica/include/trap.h
deleted file mode 100644 (file)
index 5513663..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*      $OpenBSD: trap.h,v 1.2 1996/06/06 23:07:18 deraadt Exp $       */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: trap.h 1.1 90/07/09
- *     from: @(#)trap.h        8.1 (Berkeley) 6/10/93
- */
-
-/*
- * Trap codes
- * also known in trap.c for name strings
- */
-
-#define T_INT                  0       /* Interrupt pending */
-#define T_TLB_MOD              1       /* TLB modified fault */
-#define T_TLB_LD_MISS          2       /* TLB miss on load or ifetch */
-#define T_TLB_ST_MISS          3       /* TLB miss on a store */
-#define T_ADDR_ERR_LD          4       /* Address error on a load or ifetch */
-#define T_ADDR_ERR_ST          5       /* Address error on a store */
-#define T_BUS_ERR_IFETCH       6       /* Bus error on an ifetch */
-#define T_BUS_ERR_LD_ST                7       /* Bus error on a load or store */
-#define T_SYSCALL              8       /* System call */
-#define T_BREAK                        9       /* Breakpoint */
-#define T_RES_INST             10      /* Reserved instruction exception */
-#define T_COP_UNUSABLE         11      /* Coprocessor unusable */
-#define T_OVFLOW               12      /* Arithmetic overflow */
-#define        T_TRAP                  13      /* Trap instruction */
-#define        T_VCEI                  14      /* Viritual coherency instruction */
-#define        T_FPE                   15      /* Floating point exception */
-#define        T_WATCH                 23      /* Watch address reference */
-#define T_VCED                 31      /* Viritual coherency data */
-
-#define        T_USER                  0x20    /* user-mode flag or'ed with type */
diff --git a/sys/arch/pica/include/types.h b/sys/arch/pica/include/types.h
deleted file mode 100644 (file)
index 543afe4..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*     $OpenBSD: types.h,v 1.4 1996/06/06 23:07:19 deraadt Exp $       */
-/*     $NetBSD: types.h,v 1.10 1995/07/06 03:39:43 cgd Exp $   */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)types.h     8.3 (Berkeley) 1/5/94
- */
-
-#ifndef        _MACHTYPES_H_
-#define        _MACHTYPES_H_
-
-#include <sys/cdefs.h>
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-typedef struct _physadr {
-       int r[1];
-} *physadr;
-
-typedef struct label_t {
-       int val[12];
-} label_t;
-#endif
-
-typedef        unsigned long   vm_offset_t;
-typedef        unsigned long   vm_size_t;
-
-/*
- * Basic integral types.  Omit the typedef if
- * not possible for a machine/compiler combination.
- */
-#define        __BIT_TYPES_DEFINED__
-typedef        __signed char              int8_t;
-typedef        unsigned char            u_int8_t;
-typedef        short                     int16_t;
-typedef        unsigned short          u_int16_t;
-typedef        int                       int32_t;
-typedef        unsigned int            u_int32_t;
-/* LONGLONG */
-typedef        long long                 int64_t;
-/* LONGLONG */
-typedef        unsigned long long      u_int64_t;
-
-typedef int32_t                        register_t;
-
-#define        __BDEVSW_DUMP_OLD_TYPE
-#define        __SWAP_BROKEN
-#define __FORK_BRAINDAMAGE
-
-#endif /* _MACHTYPES_H_ */
diff --git a/sys/arch/pica/include/varargs.h b/sys/arch/pica/include/varargs.h
deleted file mode 100644 (file)
index 4d6cc86..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*     $OpenBSD: varargs.h,v 1.3 1996/06/06 23:07:21 deraadt Exp $     */
-/*     $NetBSD: varargs.h,v 1.8 1995/03/28 18:19:30 jtc Exp $  */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * 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.
- *
- *     @(#)varargs.h   8.2 (Berkeley) 3/22/94
- */
-
-#ifndef _PMAX_VARARGS_H_
-#define        _PMAX_VARARGS_H_
-
-#include <machine/ansi.h>
-
-typedef _BSD_VA_LIST_  va_list;
-
-#define        va_dcl  int va_alist; ...
-
-#define        va_start(ap) \
-       ap = (char *)&va_alist
-
-#ifdef _KERNEL
-#define        va_arg(ap, type) \
-       ((type *)(ap += sizeof(type)))[-1]
-#else
-#define        va_arg(ap, type) \
-       ((type *)(ap += sizeof(type) == sizeof(int) ? sizeof(type) : \
-               sizeof(type) > sizeof(int) ? \
-               (-(int)(ap) & (sizeof(type) - 1)) + sizeof(type) : \
-               (abort(), 0)))[-1]
-#endif
-
-#define        va_end(ap)      ((void) 0)
-
-#endif /* !_PMAX_VARARGS_H_ */
diff --git a/sys/arch/pica/include/vmparam.h b/sys/arch/pica/include/vmparam.h
deleted file mode 100644 (file)
index 9a7b517..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*     $OpenBSD: vmparam.h,v 1.3 1996/06/06 23:07:23 deraadt Exp $     */
-/*     $NetBSD: vmparam.h,v 1.5 1994/10/26 21:10:10 cgd Exp $  */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: Utah Hdr: vmparam.h 1.16 91/01/18
- *     @(#)vmparam.h   8.2 (Berkeley) 4/22/94
- */
-
-/*
- * Machine dependent constants for DEC Station 3100.
- */
-/*
- * USRTEXT is the start of the user text/data space, while USRSTACK
- * is the top (end) of the user stack.  LOWPAGES and HIGHPAGES are
- * the number of pages from the beginning of the P0 region to the
- * beginning of the text and from the beginning of the P1 region to the
- * beginning of the stack respectively.
- */
-#define        USRTEXT         0x00001000
-#define        USRSTACK        0x80000000      /* Start of user stack */
-#define        BTOPUSRSTACK    0x80000         /* btop(USRSTACK) */
-#define        LOWPAGES        0x00001
-#define        HIGHPAGES       0
-
-/*
- * Virtual memory related constants, all in bytes
- */
-#ifndef MAXTSIZ
-#define        MAXTSIZ         (24*1024*1024)          /* max text size */
-#endif
-#ifndef DFLDSIZ
-#define        DFLDSIZ         (32*1024*1024)          /* initial data size limit */
-#endif
-#ifndef MAXDSIZ
-#define        MAXDSIZ         (32*1024*1024)          /* max data size */
-#endif
-#ifndef        DFLSSIZ
-#define        DFLSSIZ         (1024*1024)             /* initial stack size limit */
-#endif
-#ifndef        MAXSSIZ
-#define        MAXSSIZ         MAXDSIZ                 /* max stack size */
-#endif
-
-/*
- * Default sizes of swap allocation chunks (see dmap.h).
- * The actual values may be changed in vminit() based on MAXDSIZ.
- * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024.
- * DMMIN should be at least ctod(1) so that vtod() works.
- * vminit() insures this.
- */
-#define        DMMIN   32                      /* smallest swap allocation */
-#define        DMMAX   4096                    /* largest potential swap allocation */
-
-/*
- * Sizes of the system and user portions of the system page table.
- */
-/* SYSPTSIZE IS SILLY; (really number of buffers for I/O) */
-#define        SYSPTSIZE       1228
-#define        USRPTSIZE       1024
-
-/*
- * PTEs for mapping user space into the kernel for phyio operations.
- * 16 pte's are enough to cover 8 disks * MAXBSIZE.
- */
-#ifndef USRIOSIZE
-#define USRIOSIZE      32
-#endif
-
-/*
- * PTEs for system V style shared memory.
- * This is basically slop for kmempt which we actually allocate (malloc) from.
- */
-#ifndef SHMMAXPGS
-#define SHMMAXPGS      1024            /* 4mb */
-#endif
-
-/*
- * Boundary at which to place first MAPMEM segment if not explicitly
- * specified.  Should be a power of two.  This allows some slop for
- * the data segment to grow underneath the first mapped segment.
- */
-#define MMSEG          0x200000
-
-/*
- * The size of the clock loop.
- */
-#define        LOOPPAGES       (maxfree - firstfree)
-
-/*
- * The time for a process to be blocked before being very swappable.
- * This is a number of seconds which the system takes as being a non-trivial
- * amount of real time.  You probably shouldn't change this;
- * it is used in subtle ways (fractions and multiples of it are, that is, like
- * half of a ``long time'', almost a long time, etc.)
- * It is related to human patience and other factors which don't really
- * change over time.
- */
-#define        MAXSLP          20
-
-/*
- * A swapped in process is given a small amount of core without being bothered
- * by the page replacement algorithm.  Basically this says that if you are
- * swapped in you deserve some resources.  We protect the last SAFERSS
- * pages against paging and will just swap you out rather than paging you.
- * Note that each process has at least UPAGES+CLSIZE pages which are not
- * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this
- * number just means a swapped in process is given around 25k bytes.
- * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81),
- * so we loan each swapped in process memory worth 100$, or just admit
- * that we don't consider it worthwhile and swap it out to disk which costs
- * $30/mb or about $0.75.
- */
-#define        SAFERSS         4               /* nominal ``small'' resident set size
-                                          protected against replacement */
-
-/*
- * DISKRPM is used to estimate the number of paging i/o operations
- * which one can expect from a single disk controller.
- */
-#define        DISKRPM         60
-
-/*
- * Klustering constants.  Klustering is the gathering
- * of pages together for pagein/pageout, while clustering
- * is the treatment of hardware page size as though it were
- * larger than it really is.
- *
- * KLMAX gives maximum cluster size in CLSIZE page (cluster-page)
- * units.  Note that ctod(KLMAX*CLSIZE) must be <= DMMIN in dmap.h.
- * ctob(KLMAX) should also be less than MAXPHYS (in vm_swp.c)
- * unless you like "big push" panics.
- */
-
-#ifdef notdef /* XXX */
-#define        KLMAX   (4/CLSIZE)
-#define        KLSEQL  (2/CLSIZE)              /* in klust if vadvise(VA_SEQL) */
-#define        KLIN    (4/CLSIZE)              /* default data/stack in klust */
-#define        KLTXT   (4/CLSIZE)              /* default text in klust */
-#define        KLOUT   (4/CLSIZE)
-#else
-#define        KLMAX   (1/CLSIZE)
-#define        KLSEQL  (1/CLSIZE)
-#define        KLIN    (1/CLSIZE)
-#define        KLTXT   (1/CLSIZE)
-#define        KLOUT   (1/CLSIZE)
-#endif
-
-/*
- * KLSDIST is the advance or retard of the fifo reclaim for sequential
- * processes data space.
- */
-#define        KLSDIST 3               /* klusters advance/retard for seq. fifo */
-
-/*
- * Paging thresholds (see vm_sched.c).
- * Strategy of 1/19/85:
- *     lotsfree is 512k bytes, but at most 1/4 of memory
- *     desfree is 200k bytes, but at most 1/8 of memory
- */
-#define        LOTSFREE        (512 * 1024)
-#define        LOTSFREEFRACT   4
-#define        DESFREE         (200 * 1024)
-#define        DESFREEFRACT    8
-
-/*
- * There are two clock hands, initially separated by HANDSPREAD bytes
- * (but at most all of user memory).  The amount of time to reclaim
- * a page once the pageout process examines it increases with this
- * distance and decreases as the scan rate rises.
- */
-#define        HANDSPREAD      (2 * 1024 * 1024)
-
-/*
- * The number of times per second to recompute the desired paging rate
- * and poke the pagedaemon.
- */
-#define        RATETOSCHEDPAGING       4
-
-/*
- * Believed threshold (in megabytes) for which interleaved
- * swapping area is desirable.
- */
-#define        LOTSOFMEM       2
-
-#define        mapin(pte, v, pfnum, prot) \
-       (*(int *)(pte) = ((pfnum) << PG_SHIFT) | (prot), MachTLBFlushAddr(v))
-
-/*
- * Mach derived constants
- */
-
-/* user/kernel map constants */
-#define VM_MIN_ADDRESS         ((vm_offset_t)0x00000000)
-#define VM_MAXUSER_ADDRESS     ((vm_offset_t)0x80000000)
-#define VM_MAX_ADDRESS         ((vm_offset_t)0x80000000)
-#define VM_MIN_KERNEL_ADDRESS  ((vm_offset_t)0xC0000000)
-#define VM_MAX_KERNEL_ADDRESS  ((vm_offset_t)0xFFFFC000)
-
-/* virtual sizes (bytes) for various kernel submaps */
-#define VM_MBUF_SIZE           (NMBCLUSTERS*MCLBYTES)
-#define VM_KMEM_SIZE           (NKMEMCLUSTERS*CLBYTES)
-#define VM_PHYS_SIZE           (USRIOSIZE*CLBYTES)
diff --git a/sys/arch/pica/isa/isa.c b/sys/arch/pica/isa/isa.c
deleted file mode 100644 (file)
index dc4a614..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*     $NetBSD: isa.c,v 1.33 1995/06/28 04:30:51 cgd Exp $     */
-
-/*-
- * Copyright (c) 1995 Per Fogelstrom
- * Copyright (c) 1993, 1994 Charles Hannum.
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz and Don Ahn.
- *
- * 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.
- *
- *     @(#)isa.c       7.2 (Berkeley) 5/12/91
- */
-/* 
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
-  Copyright 1988, 1989 by Intel Corporation, Santa Clara, California.
-
-               All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/time.h>
-#include <sys/kernel.h>
-#include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-
-#include <pica/pica/pica.h>
-
-#include <dev/isa/isareg.h>
-#include <dev/isa/isavar.h>
-#include <pica/isa/timerreg.h>
-#include <pica/isa/spkrreg.h>
-
-extern int isa_io_base;
-extern int isa_mem_base;
-
-static int beeping;
-
-#define        isa_outb(x,y)   outb(isa_io_base + (x), y)
-#define        isa_inb(x)      inb(isa_io_base + (x))
-
-void
-sysbeepstop(arg)
-       void *arg;
-{
-       int s;
-
-       /* disable counter 2 */
-       s = splhigh();
-       isa_outb(PITAUX_PORT, isa_inb(PITAUX_PORT) & ~PIT_SPKR);
-       splx(s);
-       beeping = 0;
-}
-
-void
-sysbeep(pitch, period)
-       int pitch, period;
-{
-       static int last_pitch, last_period;
-       int s;
-
-       if (beeping)
-               untimeout(sysbeepstop, 0);
-       if (!beeping || last_pitch != pitch) {
-               s = splhigh();
-               isa_outb(TIMER_MODE, TIMER_SEL2 | TIMER_16BIT | TIMER_SQWAVE);
-               isa_outb(TIMER_CNTR2, TIMER_DIV(pitch) % 256);
-               isa_outb(TIMER_CNTR2, TIMER_DIV(pitch) / 256);
-               isa_outb(PITAUX_PORT, isa_inb(PITAUX_PORT) | PIT_SPKR);
-               splx(s);
-       }
-       last_pitch = pitch;
-       beeping = last_period = period;
-       timeout(sysbeepstop, 0, period);
-}
diff --git a/sys/arch/pica/isa/isa_machdep.h b/sys/arch/pica/isa/isa_machdep.h
deleted file mode 100644 (file)
index 4f6eb4d..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*     $NetBSD: isa_machdep.h,v 1.5 1996/04/11 22:10:11 cgd Exp $      */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * 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.
- *
- *     @(#)isa.h       5.7 (Berkeley) 5/9/91
- */
-
-/*
- * Various pieces of the i386 port want to include this file without
- * or in spite of using isavar.h, and should be fixed.
- */
-
-#ifndef _PICA_ISA_MACHDEP_H_                   /* XXX */
-#define _PICA_ISA_MACHDEP_H_                   /* XXX */
-
-/*
- * XXX THIS FILE IS A MESS.  copyright: berkeley's probably.
- * contents from isavar.h and isareg.h, mostly the latter.
- * perhaps charles's?
- *
- * copyright from berkeley's isa.h which is now dev/isa/isareg.h.
- */
-
-/*
- * Types provided to machine-independent ISA code.
- */
-typedef void *isa_chipset_tag_t;
-
-struct device;                 /* XXX */
-
-/*
- * Functions provided to machine-independent ISA code.
- */
-void   isa_attach_hook __P((struct device *, struct device *,
-           struct isabus_attach_args *));
-void   *isa_intr_establish __P((isa_chipset_tag_t ic, int irq, int type,
-           int level, int (*ih_fun)(void *), void *ih_arg, char *ih_what));
-void   isa_intr_disestablish __P((isa_chipset_tag_t ic, void *handler));
-
-/*
- * ALL OF THE FOLLOWING ARE MACHINE-DEPENDENT, AND SHOULD NOT BE USED
- * BY PORTABLE CODE.
- */
-/*
- * XXX Various seemingly PC-specific constants, some of which may be
- * unnecessary anyway.
- */
-
-/*
- * RAM Physical Address Space (ignoring the above mentioned "hole")
- */
-#define        RAM_BEGIN       0x0000000       /* Start of RAM Memory */
-#define        RAM_END         0x1000000       /* End of RAM Memory */
-#define        RAM_SIZE        (RAM_END - RAM_BEGIN)
-
-/*
- * Oddball Physical Memory Addresses
- */
-#define        COMPAQ_RAMRELOC 0x80c00000      /* Compaq RAM relocation/diag */
-#define        COMPAQ_RAMSETUP 0x80c00002      /* Compaq RAM setup */
-#define        WEITEK_FPU      0xC0000000      /* WTL 2167 */
-#define        CYRIX_EMC       0xC0000000      /* Cyrix EMC */
-
-/*
- * stuff that used to be in pccons.c
- */
-#if 0
-#define        MONO_BASE       0x3B4
-#define        MONO_BUF        0xB0000
-#define        CGA_BASE        0x3D4
-#define        CGA_BUF         0xB8000
-#define        IOPHYSMEM       0xA0000
-#endif
-
-
-/*
- * Interrupt handler chains.  isa_intr_establish() inserts a handler into
- * the list.  The handler is called with its (single) argument.
- */
-
-struct intrhand {
-       int     (*ih_fun)();
-       void    *ih_arg;
-       u_long  ih_count;
-       struct  intrhand *ih_next;
-       int     ih_level;
-       int     ih_irq;
-       char    *ih_what;
-};
-
-/*
- * ISA DMA bounce buffers.
- * XXX should be made partially machine- and bus-mapping-independent.
- *
- * DMA_BOUNCE is the number of pages of low-addressed physical memory
- * to acquire for ISA bounce buffers. If physical memory below 16 MB
- * then DMA_BOUNCE_LOW will be used.
- *
- * isaphysmem is the address of this physical contiguous low memory.
- * isaphysmempgs is the number of pages allocated.
- */
-
-#ifndef DMA_BOUNCE
-#define        DMA_BOUNCE      48              /* number of pages if memory > 16M */
-#endif
-
-#ifndef DMA_BOUNCE_LOW
-#define        DMA_BOUNCE_LOW  16              /* number of pages if memory <= 16M */
-#endif
-
-extern vm_offset_t isaphysmem;
-extern int isaphysmempgs;
-
-
-/*
- * Variables and macros to deal with the ISA I/O hole.
- * XXX These should be converted to machine- and bus-mapping-independent
- * function definitions, invoked through the softc.
- */
-
-extern u_long atdevbase;           /* kernel virtual address of "hole" */
-
-/*
- * Given a kernel virtual address for some location
- * in the "hole" I/O space, return a physical address.
- */
-#define ISA_PHYSADDR(v) ((void *) ((u_long)(v) - atdevbase + IOM_BEGIN))
-
-/*
- * Given a physical address in the "hole",
- * return a kernel virtual address.
- */
-#define ISA_HOLE_VADDR(p)  ((void *) ((u_long)(p) - IOM_BEGIN + atdevbase))
-
-
-/*
- * Miscellanous functions.
- */
-void sysbeep __P((int, int));          /* beep with the system speaker */
-
-#endif /* _I386_ISA_MACHDEP_H_ XXX */
diff --git a/sys/arch/pica/isa/spkrreg.h b/sys/arch/pica/isa/spkrreg.h
deleted file mode 100644 (file)
index af1df50..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*     $NetBSD: spkrreg.h,v 1.2 1994/10/27 04:18:16 cgd Exp $  */
-
-/*
- * PIT port addresses and speaker control values
- */
-
-#define PITAUX_PORT    0x61    /* port of Programmable Peripheral Interface */
-#define PIT_ENABLETMR2 0x01    /* Enable timer/counter 2 */
-#define PIT_SPKRDATA   0x02    /* Direct to speaker */
-
-#define PIT_SPKR       (PIT_ENABLETMR2|PIT_SPKRDATA)
diff --git a/sys/arch/pica/isa/timerreg.h b/sys/arch/pica/isa/timerreg.h
deleted file mode 100644 (file)
index 996834c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*     $NetBSD: timerreg.h,v 1.4 1994/10/27 04:18:17 cgd 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.
- */
-
-/*
- * Register definitions for the Intel 8253 Programmable Interval Timer.
- *
- * This chip has three independent 16-bit down counters that can be
- * read on the fly.  There are three mode registers and three countdown
- * registers.  The countdown registers are addressed directly, via the
- * first three I/O ports.  The three mode registers are accessed via
- * the fourth I/O port, with two bits in the mode byte indicating the
- * register.  (Why are hardware interfaces always so braindead?).
- *
- * To write a value into the countdown register, the mode register
- * is first programmed with a command indicating the which byte of
- * the two byte register is to be modified.  The three possibilities
- * are load msb (TMR_MR_MSB), load lsb (TMR_MR_LSB), or load lsb then
- * msb (TMR_MR_BOTH).
- *
- * To read the current value ("on the fly") from the countdown register,
- * you write a "latch" command into the mode register, then read the stable
- * value from the corresponding I/O port.  For example, you write
- * TMR_MR_LATCH into the corresponding mode register.  Presumably,
- * after doing this, a write operation to the I/O port would result
- * in undefined behavior (but hopefully not fry the chip).
- * Reading in this manner has no side effects.
- *
- * The outputs of the three timers are connected as follows:
- *
- *      timer 0 -> irq 0
- *      timer 1 -> dma chan 0 (for dram refresh)
- *      timer 2 -> speaker (via keyboard controller)
- *
- * Timer 0 is used to call hardclock.
- * Timer 2 is used to generate console beeps.
- */
-
-/*
- * Frequency of all three count-down timers; (TIMER_FREQ/freq) is the
- * appropriate count to generate a frequency of freq hz.
- */
-#ifndef TIMER_FREQ
-#define        TIMER_FREQ      1193182
-#endif
-#define TIMER_DIV(x) ((TIMER_FREQ+(x)/2)/(x))
-
-/*
- * Macros for specifying values to be written into a mode register.
- */
-#define        TIMER_CNTR0     (IO_TIMER1 + 0) /* timer 0 counter port */
-#define        TIMER_CNTR1     (IO_TIMER1 + 1) /* timer 1 counter port */
-#define        TIMER_CNTR2     (IO_TIMER1 + 2) /* timer 2 counter port */
-#define        TIMER_MODE      (IO_TIMER1 + 3) /* timer mode port */
-#define                TIMER_SEL0      0x00    /* select counter 0 */
-#define                TIMER_SEL1      0x40    /* select counter 1 */
-#define                TIMER_SEL2      0x80    /* select counter 2 */
-#define                TIMER_INTTC     0x00    /* mode 0, intr on terminal cnt */
-#define                TIMER_ONESHOT   0x02    /* mode 1, one shot */
-#define                TIMER_RATEGEN   0x04    /* mode 2, rate generator */
-#define                TIMER_SQWAVE    0x06    /* mode 3, square wave */
-#define                TIMER_SWSTROBE  0x08    /* mode 4, s/w triggered strobe */
-#define                TIMER_HWSTROBE  0x0a    /* mode 5, h/w triggered strobe */
-#define                TIMER_LATCH     0x00    /* latch counter for reading */
-#define                TIMER_LSB       0x10    /* r/w counter LSB */
-#define                TIMER_MSB       0x20    /* r/w counter MSB */
-#define                TIMER_16BIT     0x30    /* r/w counter 16 bits, LSB first */
-#define                TIMER_BCD       0x01    /* count in BCD */
-
diff --git a/sys/arch/pica/pica/autoconf.c b/sys/arch/pica/pica/autoconf.c
deleted file mode 100644 (file)
index e6ea9b4..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- * from: Utah Hdr: autoconf.c 1.31 91/01/21
- *
- *     from: @(#)autoconf.c    8.1 (Berkeley) 6/10/93
- *      $Id: autoconf.c,v 1.2 1996/05/01 18:15:48 pefo Exp $
- */
-
-/*
- * Setup the system to run on the current machine.
- *
- * Configure() is called at boot time.  Available
- * devices are determined (from possibilities mentioned in ioconf.c),
- * and the drivers are initialized.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/buf.h>
-#include <sys/disklabel.h>
-#include <sys/conf.h>
-#include <sys/reboot.h>
-#include <sys/device.h>
-
-#include <machine/autoconf.h>
-
-/*
- * The following several variables are related to
- * the configuration process, and are used in initializing
- * the machine.
- */
-int    cold = 1;       /* if 1, still working on cold-start */
-int    cpuspeed = 150; /* approx # instr per usec. */
-extern int pica_boardtype;
-
-/*
- *  Configure all devices found that we know about.
- *  This is done at boot time.
- */
-configure()
-{
-       (void)splhigh();        /* To be really shure.. */
-       if(config_rootfound("mainbus", "mainbus") == 0)
-               panic("no mainbus found");
-       (void)spl0();
-
-#ifdef GENERIC
-       if ((boothowto & RB_ASKNAME) == 0)
-               setroot();
-       setconf();
-#else
-       setroot();
-#endif
-       swapconf();
-       cold = 0;
-}
-
-/*
- * Configure swap space and related parameters.
- */
-swapconf()
-{
-       register struct swdevt *swp;
-       register int nblks;
-
-       for (swp = swdevt; swp->sw_dev != NODEV; swp++) {
-               if (bdevsw[major(swp->sw_dev)].d_psize) {
-                       nblks =
-                         (*bdevsw[major(swp->sw_dev)].d_psize)(swp->sw_dev);
-                       if (nblks != -1 &&
-                           (swp->sw_nblks == 0 || swp->sw_nblks > nblks))
-                               swp->sw_nblks = nblks;
-                       swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
-               }
-       }
-       dumpconf();
-}
-
-#define        DOSWAP                  /* Change swdevt and dumpdev too */
-u_long bootdev;                /* should be dev_t, but not until 32 bits */
-
-static char devname[][2] = {
-       's','d',        /* 0 = sd */
-       'x','x',        /* 1 = unused */
-       'x','x',        /* 2 = unused */
-       'x','x',        /* 3 = unused */
-       'x','x',        /* 4 = unused */
-       'x','x',        /* 5 = unused */
-       'x','x',        /* 6 = unused */
-       'f','d',        /* 7 = floppy */
-};
-
-#define        PARTITIONMASK   0x7
-#define        PARTITIONSHIFT  3
-
-/*
- * Attempt to find the device from which we were booted.
- * If we can do so, and not instructed not to do so,
- * change rootdev to correspond to the load device.
- */
-setroot()
-{
-       int  majdev, mindev, unit, part, controller;
-       dev_t temp, orootdev;
-       struct swdevt *swp;
-
-       if (boothowto & RB_DFLTROOT ||
-           (bootdev & B_MAGICMASK) != B_DEVMAGIC)
-               return;
-       majdev = B_TYPE(bootdev);
-       if (majdev >= sizeof(devname) / sizeof(devname[0]))
-               return;
-       controller = B_CONTROLLER(bootdev);
-       part = B_PARTITION(bootdev);
-       unit = B_UNIT(bootdev);
-
-       mindev = (unit << PARTITIONSHIFT) + part;
-       orootdev = rootdev;
-       rootdev = makedev(majdev, mindev);
-       /*
-        * If the original rootdev is the same as the one
-        * just calculated, don't need to adjust the swap configuration.
-        */
-       if (rootdev == orootdev)
-               return;
-
-       printf("changing root device to %c%c%d%c\n",
-               devname[majdev][0], devname[majdev][1],
-               unit, part + 'a');
-
-#ifdef DOSWAP
-       for (swp = swdevt; swp->sw_dev != NODEV; swp++) {
-               if (majdev == major(swp->sw_dev) &&
-                   (mindev / MAXPARTITIONS) == (minor(swp->sw_dev) / MAXPARTITIONS)) {
-                       temp = swdevt[0].sw_dev;
-                       swdevt[0].sw_dev = swp->sw_dev;
-                       swp->sw_dev = temp;
-                       break;
-               }
-       }
-       if (swp->sw_dev == NODEV)
-               return;
-
-       /*
-        * If dumpdev was the same as the old primary swap
-        * device, move it to the new primary swap device.
-        */
-       if (temp == dumpdev)
-               dumpdev = swdevt[0].sw_dev;
-#endif
-}
-
-/*
- * Look at the string 'cp' and decode the boot device.
- * Boot names look like: scsi()disk(n)rdisk()partition(1)\bsd
- */
-void
-makebootdev(cp)
-       char *cp;
-{
-       int majdev, unit, part, ctrl;
-       char dv[8];
-
-       bootdev = B_DEVMAGIC;
-
-       dv[0] = *cp;
-       ctrl = getpno(&cp);
-       if(*cp++ == ')') {
-               dv[1] = *cp;
-               unit = getpno(&cp);
-
-               for (majdev = 0; majdev < sizeof(devname)/sizeof(devname[0]); majdev++)
-                       if (dv[0] == devname[majdev][0] &&
-                           dv[1] == devname[majdev][1] && cp[0] == ')')
-                               bootdev = MAKEBOOTDEV(majdev, 0, ctrl, unit,0);
-       }
-}
-getpno(cp)
-       char **cp;
-{
-       int val = 0;
-       char *cx = *cp;
-
-       while(*cx && *cx != '(')
-               cx++;
-       if(*cx == '(') {
-               cx++;
-               while(*cx && *cx != ')') {
-                       val = val * 10 + *cx - '0';
-                       cx++;
-               }
-       }
-       *cp = cx;
-       return val;
-}
diff --git a/sys/arch/pica/pica/clock.c b/sys/arch/pica/pica/clock.c
deleted file mode 100644 (file)
index 0ce8e64..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- * from: Utah Hdr: clock.c 1.18 91/01/21
- *
- *     from: @(#)clock.c       8.1 (Berkeley) 6/10/93
- *      $Id: clock.c,v 1.5 1996/06/06 23:07:28 deraadt Exp $
- */
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/device.h>
-
-#include <machine/autoconf.h>
-#include <machine/cpu.h>
-#include <pica/pica/clockvar.h>
-#include <pica/pica/picatype.h>
-
-
-extern int cputype;    /* What kind of cpu we are running on */
-
-/* Definition of the driver for autoconfig. */
-static int     clockmatch __P((struct device *, void *, void *));
-static void    clockattach __P((struct device *, struct device *, void *));
-
-struct cfattach clock_ca = {
-       sizeof(struct clock_softc), clockmatch, clockattach
-};
-struct cfdriver clock_cd = {
-       NULL, "clock", DV_DULL, NULL, 0
-};
-
-void   mcclock_attach __P((struct device *, struct device *, void *));
-
-#define        SECMIN  ((unsigned)60)                  /* seconds per minute */
-#define        SECHOUR ((unsigned)(60*SECMIN))         /* seconds per hour */
-#define        SECDAY  ((unsigned)(24*SECHOUR))        /* seconds per day */
-#define        SECYR   ((unsigned)(365*SECDAY))        /* seconds per common year */
-
-#define        LEAPYEAR(year)  (((year) % 4) == 0)
-
-static int
-clockmatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata;
-       void *aux;
-{
-       struct cfdata *cf = cfdata;
-       struct confargs *ca = aux;
-
-       /* See how many clocks this system has */       
-       switch (cputype) {
-
-       case MIPS_PICA_61:
-               /* make sure that we're looking for this type of device. */
-               if (!BUS_MATCHNAME(ca, "dallas_rtc"))
-                       return (0);
-
-               if (cf->cf_unit >= 1)
-                       return (0);
-
-               break;
-
-       default:
-               panic("unknown CPU");
-       }
-
-       return (1);
-}
-
-static void
-clockattach(parent, self, aux)
-       struct device *parent;
-       struct device *self;
-       void *aux;
-{
-
-       switch (cputype) {
-
-       case MIPS_PICA_61:
-               mcclock_attach(parent, self, aux);
-               break;
-
-       default:
-               panic("clockattach: it didn't get here.  really.");
-       }
-
-
-       /*
-        * establish the clock interrupt; it's a special case
-        */
-       BUS_INTR_ESTABLISH((struct confargs *)aux, (intr_handler_t)hardclock, self);
-
-       printf("\n");
-}
-
-/*
- * Wait "n" microseconds.  This doesn't belong here.  XXX.
- */
-void
-delay(n)
-       int n;
-{
-       DELAY(n);
-}
-
-/*
- * Machine-dependent clock routines.
- *
- * Startrtclock restarts the real-time clock, which provides
- * hardclock interrupts to kern_clock.c.
- *
- * Inittodr initializes the time of day hardware which provides
- * date functions.  Its primary function is to use some file
- * system information in case the hardare clock lost state.
- *
- * Resettodr restores the time of day hardware after a time change.
- */
-
-
-/*
- * Start the real-time and statistics clocks. Leave stathz 0 since there
- * are no other timers available.
- */
-void
-cpu_initclocks()
-{
-       extern int tickadj;
-       struct clock_softc *csc = (struct clock_softc *)clock_cd.cd_devs[0];
-
-       hz = 100;               /* 100 Hz */
-       tick = 1000000 / hz;    /* number of micro-seconds between interrupts */
-
-       /*
-        * Start the clock.
-        */
-       (*csc->sc_init)(csc);
-}
-
-/*
- * We assume newhz is either stathz or profhz, and that neither will
- * change after being set up above.  Could recalculate intervals here
- * but that would be a drag.
- */
-void
-setstatclockrate(newhz)
-       int newhz;
-{
-}
-
-/*
- * This code is defunct after 2099.
- * Will Unix still be here then??
- */
-static short dayyr[12] = {
-       0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
-};
-
-/*
- * Initialze the time of day register, based on the time base which is, e.g.
- * from a filesystem.  Base provides the time to within six months,
- * and the time of year clock (if any) provides the rest.
- */
-void
-inittodr(base)
-       time_t base;
-{
-       struct tod_time c;
-       struct clock_softc *csc = (struct clock_softc *)clock_cd.cd_devs[0];
-       register int days, yr;
-       long deltat;
-       int badbase, s;
-
-       if (base < 5*SECYR) {
-               printf("WARNING: preposterous time in file system");
-               /* read the system clock anyway */
-               base = 6*SECYR + 186*SECDAY + SECDAY/2;
-               badbase = 1;
-       } else
-               badbase = 0;
-
-       /* Read RTC chip registers */ 
-       (*csc->sc_get)(csc, base, &c);
-
-       csc->sc_initted = 1;
-
-       /* simple sanity checks */
-       c.year = c.year+80; /* must be multiple of 4 because chip knows leap */
-       if (c.year < 70 || c.mon < 1 || c.mon > 12 || c.day < 1 ||
-           c.day > 31 || c.hour > 23 || c.min > 59 || c.sec > 59) {
-               /*
-                * Believe the time in the file system for lack of
-                * anything better, resetting the TODR.
-                */
-               time.tv_sec = base;
-               if (!badbase) {
-                       printf("WARNING: preposterous clock chip time\n");
-                       resettodr();
-               }
-               goto bad;
-       }
-       days = 0;
-       for (yr = 70; yr < c.year; yr++)
-               days += LEAPYEAR(yr) ? 366 : 365;
-       days += dayyr[c.mon - 1] + c.day - 1;
-       if (LEAPYEAR(yr) && c.mon > 2)
-               days++;
-       /* now have days since Jan 1, 1970; the rest is easy... */
-       time.tv_sec = days * SECDAY + c.hour * 3600 + c.min * 60 + c.sec;
-
-       if (!badbase) {
-               /*
-                * See if we gained/lost two or more days;
-                * if so, assume something is amiss.
-                */
-               deltat = time.tv_sec - base;
-               if (deltat < 0)
-                       deltat = -deltat;
-               if (deltat < 2 * SECDAY)
-                       return;
-               printf("WARNING: clock %s %d days",
-                   time.tv_sec < base ? "lost" : "gained", deltat / SECDAY);
-       }
-bad:
-       printf(" -- CHECK AND RESET THE DATE!\n");
-}
-
-/*
- * Reset the TODR based on the time value; used when the TODR
- * has a preposterous value and also when the time is reset
- * by the stime system call.  Also called when the TODR goes past
- * TODRZERO + 100*(SECYEAR+2*SECDAY) (e.g. on Jan 2 just after midnight)
- * to wrap the TODR around.
- */
-void
-resettodr()
-{
-       struct tod_time c;
-       struct clock_softc *csc = (struct clock_softc *)clock_cd.cd_devs[0];
-       register int t, t2;
-       int s;
-
-       if(!csc->sc_initted)
-               return;
-
-       /* compute the day of week. 1 is Sunday*/
-       t2 = time.tv_sec / SECDAY;
-       c.dow = (t2 + 5) % 7;   /* 1/1/1970 was thursday */
-
-       /* compute the year */
-       t2 = time.tv_sec / SECDAY;
-       c.year = 69;
-       while (t2 >= 0) {       /* whittle off years */
-               t = t2;
-               c.year++;
-               t2 -= LEAPYEAR(c.year) ? 366 : 365;
-       }
-
-       /* t = month + day; separate */
-       t2 = LEAPYEAR(c.year);
-       for (c.mon = 1; c.mon < 12; c.mon++)
-               if (t < dayyr[c.mon] + (t2 && c.mon > 1))
-                       break;
-
-       c.day = t - dayyr[c.mon - 1] + 1;
-       if (t2 && c.mon > 2)
-               c.day--;
-
-       /* the rest is easy */
-       t = time.tv_sec % SECDAY;
-       c.hour = t / 3600;
-       t %= 3600;
-       c.min = t / 60;
-       c.sec = t % 60;
-       c.year = c.year-80; /* must be multiple of 4 because chip knows leap */
-
-       (*csc->sc_set)(csc, &c);
-}
diff --git a/sys/arch/pica/pica/clock_mc.c b/sys/arch/pica/pica/clock_mc.c
deleted file mode 100644 (file)
index f08f942..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*     $NetBSD: clock_mc.c,v 1.2 1995/06/28 04:30:30 cgd Exp $ */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- * from: Utah Hdr: clock.c 1.18 91/01/21
- *
- *     @(#)clock.c     8.1 (Berkeley) 6/10/93
- */
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/device.h>
-
-#include <machine/autoconf.h>
-#include <machine/pio.h>
-
-#include <pica/pica/clockvar.h>
-#include <pica/pica/picatype.h>
-#include <pica/pica/pica.h>
-#include <dev/ic/mc146818reg.h>
-
-extern u_int   cputype;
-extern int     cpu_int_mask;
-
-void           mcclock_attach __P((struct device *parent,
-                   struct device *self, void *aux));
-static void    mcclock_init __P((struct clock_softc *csc));
-static void    mcclock_get __P((struct clock_softc *csc, time_t base,
-                   struct tod_time *ct));
-static void    mcclock_set __P((struct clock_softc *csc,
-                   struct tod_time *ct));
-
-struct mcclockdata {
-       void    (*mc_write) __P((struct clock_softc *csc, u_int reg,
-                   u_int datum));
-       u_int   (*mc_read) __P((struct clock_softc *csc, u_int reg));
-       void    *mc_addr;
-};
-
-#define        mc146818_write(sc, reg, datum)                                  \
-           (*((struct mcclockdata *)sc->sc_data)->mc_write)(sc, reg, datum)
-#define        mc146818_read(sc, reg)                                          \
-           (*((struct mcclockdata *)sc->sc_data)->mc_read)(sc, reg)
-
-#if defined(MIPS_PICA_61)
-static void    mc_write_pica __P((struct clock_softc *csc, u_int reg,
-                   u_int datum));
-static u_int   mc_read_pica __P((struct clock_softc *csc, u_int reg));
-static struct mcclockdata mcclockdata_pica = { mc_write_pica, mc_read_pica };
-#endif
-
-void
-mcclock_attach(parent, self, aux)
-       struct device *parent;
-       struct device *self;
-       void *aux;
-{
-       struct clock_softc *csc = (struct clock_softc *)self;
-
-       register volatile struct chiptime *c;
-       struct confargs *ca = aux;
-
-       printf(": mc146818 or compatible");
-
-       csc->sc_init = mcclock_init;
-       csc->sc_get = mcclock_get;
-       csc->sc_set = mcclock_set;
-
-        switch (cputype) {
-
-        case MIPS_PICA_61:
-               /* 
-                * XXX should really allocate a new one and copy, or
-                * something.  unlikely we'll have more than one...
-                */
-               csc->sc_data = &mcclockdata_pica;
-               mcclockdata_pica.mc_addr = BUS_CVTADDR(ca);
-               break;
-
-       default:
-               printf("\n");
-               panic("don't know how to set up for other system types.");
-       }
-
-       /* Turn interrupts off, just in case. */
-       mc146818_write(csc, MC_REGB, MC_REGB_BINARY | MC_REGB_24HR);
-}
-
-static void
-mcclock_init(csc)
-       struct clock_softc *csc;
-{
-/* XXX Does not really belong here but for the moment we don't care */
-       out32(PICA_SYS_IT_VALUE, 9); /* 10ms - 1 */
-       /* Enable periodic clock interrupt */
-       out32(PICA_SYS_EXT_IMASK, cpu_int_mask);
-}
-
-/*
- * Get the time of day, based on the clock's value and/or the base value.
- */
-static void
-mcclock_get(csc, base, ct)
-       struct clock_softc *csc;
-       time_t base;
-       struct tod_time *ct;
-{
-       mc_todregs regs;
-       int s;
-
-       s = splclock();
-       MC146818_GETTOD(csc, &regs)
-       splx(s);
-
-       ct->sec = regs[MC_SEC];
-       ct->min = regs[MC_MIN];
-       ct->hour = regs[MC_HOUR];
-       ct->dow = regs[MC_DOW];
-       ct->day = regs[MC_DOM];
-       ct->mon = regs[MC_MONTH];
-       ct->year = regs[MC_YEAR];
-}
-
-/*
- * Reset the TODR based on the time value.
- */
-static void
-mcclock_set(csc, ct)
-       struct clock_softc *csc;
-       struct tod_time *ct;
-{
-       mc_todregs regs;
-       int s;
-
-       s = splclock();
-       MC146818_GETTOD(csc, &regs);
-       splx(s);
-
-       regs[MC_SEC] = ct->sec;
-       regs[MC_MIN] = ct->min;
-       regs[MC_HOUR] = ct->hour;
-       regs[MC_DOW] = ct->dow;
-       regs[MC_DOM] = ct->day;
-       regs[MC_MONTH] = ct->mon;
-       regs[MC_YEAR] = ct->year;
-
-       s = splclock();
-       MC146818_PUTTOD(csc, &regs);
-       splx(s);
-}
-
-
-#if defined(ACER_PICA_61)
-
-static void
-mc_write_pica(csc, reg, datum)
-       struct clock_softc *csc;
-       u_int reg, datum;
-{
-       int i,as;
-
-       as = in32(PICA_SYS_ISA_AS) & 0x80;
-       out32(PICA_SYS_ISA_AS, as | reg);
-       outb(PICA_SYS_CLOCK, datum);
-}
-
-static u_int
-mc_read_pica(csc, reg)
-       struct clock_softc *csc;
-       u_int reg;
-{
-       int i,as;
-
-       as = in32(PICA_SYS_ISA_AS) & 0x80;
-       out32(PICA_SYS_ISA_AS, as | reg);
-       i = inb(PICA_SYS_CLOCK);
-       return(i);
-}
-#endif /*ACER_PICA_61*/
diff --git a/sys/arch/pica/pica/clockvar.h b/sys/arch/pica/pica/clockvar.h
deleted file mode 100644 (file)
index d91b630..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*     $NetBSD: clockvar.h,v 1.1 1995/06/28 02:44:59 cgd Exp $ */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- * Adopted for r4400: Per Fogelstrom
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-/*
- * Definitions for "cpu-independent" clock handling for the r4400.
- */
-
-/*
- * clocktime structure:
- *
- * structure passed to TOY clocks when setting them.  broken out this
- * way, so that the time_t -> field conversion can be shared.
- */
-struct tod_time {
-       int     year;                   /* year - 1900 */
-       int     mon;                    /* month (1 - 12) */
-       int     day;                    /* day (1 - 31) */
-       int     hour;                   /* hour (0 - 23) */
-       int     min;                    /* minute (0 - 59) */
-       int     sec;                    /* second (0 - 59) */
-       int     dow;                    /* day of week (0 - 6; 0 = Sunday) */
-};
-
-/*
- * clockdesc structure:
- *
- * provides clock-specific functions to do necessary operations.
- */
-struct clock_softc {
-       struct  device sc_dev;
-
-       /*
-        * The functions that all types of clock provide.
-        */
-       void    (*sc_attach) __P((struct device *parent, struct device *self,
-                   void *aux));
-       void    (*sc_init) __P((struct clock_softc *csc));
-       void    (*sc_get) __P((struct clock_softc *csc, time_t base,
-                   struct tod_time *ct));
-       void    (*sc_set) __P((struct clock_softc *csc, struct tod_time *ct));
-
-       /*
-        * Private storage for particular clock types.
-        */
-       void    *sc_data;
-
-       /*
-        * Has the time been initialized?
-        */
-       int     sc_initted;
-};
diff --git a/sys/arch/pica/pica/cpu.c b/sys/arch/pica/pica/cpu.c
deleted file mode 100644 (file)
index 9dd2678..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*     $NetBSD: cpu.c,v 1.3 1995/06/28 02:45:01 cgd Exp $      */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Per Fogelstrom
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/param.h>
-#include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/autoconf.h>
-
-
-/* Definition of the driver for autoconfig. */
-static int     cpumatch(struct device *, void *, void *);
-static void    cpuattach(struct device *, struct device *, void *);
-
-struct cfattach cpu_ca = {
-       sizeof(struct device), cpumatch, cpuattach
-};
-struct cfdriver cpu_cd = {
-       NULL, "cpu", DV_DULL, NULL, 0
-};
-
-static int     cpuprint __P((void *, char *pnp));
-
-static int
-cpumatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata;
-       void *aux;
-{
-       struct cfdata *cf = cfdata;
-       struct confargs *ca = aux;
-
-       /* make sure that we're looking for a CPU. */
-       if (strcmp(ca->ca_name, cpu_cd.cd_name) != 0)
-               return (0);
-
-       return (1);
-}
-
-static void
-cpuattach(parent, dev, aux)
-       struct device *parent;
-       struct device *dev;
-       void *aux;
-{
-        struct pcs *p;
-       int needcomma, needrev, i;
-
-       printf(": ");
-
-       switch(cpu_id.cpu.cp_imp) {
-
-       case MIPS_R2000:
-               printf("MIPS R2000 CPU");
-               break;
-       case MIPS_R3000:
-               printf("MIPS R3000 CPU");
-               break;
-       case MIPS_R6000:
-               printf("MIPS R6000 CPU");
-               break;
-       case MIPS_R4000:
-               if(machPrimaryInstCacheSize == 16384)
-                       printf("MIPS R4400 CPU");
-               else
-                       printf("MIPS R4000 CPU");
-               break;
-       case MIPS_R3LSI:
-               printf("LSI Logic R3000 derivate");
-               break;
-       case MIPS_R6000A:
-               printf("MIPS R6000A CPU");
-               break;
-       case MIPS_R3IDT:
-               printf("IDT R3000 derivate");
-               break;
-       case MIPS_R10000:
-               printf("MIPS R10000/T5 CPU");
-               break;
-       case MIPS_R4200:
-               printf("MIPS R4200 CPU (ICE)");
-               break;
-       case MIPS_R8000:
-               printf("MIPS R8000 Blackbird/TFP CPU");
-               break;
-       case MIPS_R4600:
-               printf("QED R4600 Orion CPU");
-               break;
-       case MIPS_R3SONY:
-               printf("Sony R3000 based CPU");
-               break;
-       case MIPS_R3TOSH:
-               printf("Toshiba R3000 based CPU");
-               break;
-       case MIPS_R3NKK:
-               printf("NKK R3000 based CPU");
-               break;
-       case MIPS_UNKC1:
-       case MIPS_UNKC2:
-       default:
-               printf("Unknown CPU type (0x%x)",cpu_id.cpu.cp_imp);
-               break;
-       }
-       printf(" Rev. %d.%d with ", cpu_id.cpu.cp_majrev, cpu_id.cpu.cp_minrev);
-
-
-       switch(fpu_id.cpu.cp_imp) {
-
-       case MIPS_SOFT:
-               printf("Software emulation float");
-               break;
-       case MIPS_R2360:
-               printf("MIPS R2360 FPC");
-               break;
-       case MIPS_R2010:
-               printf("MIPS R2010 FPC");
-               break;
-       case MIPS_R3010:
-               printf("MIPS R3010 FPC");
-               break;
-       case MIPS_R6010:
-               printf("MIPS R6010 FPC");
-               break;
-       case MIPS_R4010:
-               printf("MIPS R4010 FPC");
-               break;
-       case MIPS_R31LSI:
-               printf("FPC");
-               break;
-       case MIPS_R10010:
-               printf("MIPS R10000/T5 FPU");
-               break;
-       case MIPS_R4210:
-               printf("MIPS R4200 FPC (ICE)");
-       case MIPS_R8000:
-               printf("MIPS R8000 Blackbird/TFP");
-               break;
-       case MIPS_R4600:
-               printf("QED R4600 Orion FPC");
-               break;
-       case MIPS_R3SONY:
-               printf("Sony R3000 based FPC");
-               break;
-       case MIPS_R3TOSH:
-               printf("Toshiba R3000 based FPC");
-               break;
-       case MIPS_R3NKK:
-               printf("NKK R3000 based FPC");
-               break;
-       case MIPS_UNKF1:
-       default:
-               printf("Unknown FPU type (0x%x)", fpu_id.cpu.cp_imp);
-               break;
-       }
-       printf(" Rev. %d.%d", fpu_id.cpu.cp_majrev, fpu_id.cpu.cp_minrev);
-       printf("\n");
-
-       printf("        Primary cache size: %dkb Instruction, %dkb Data.\n",
-               machPrimaryInstCacheSize / 1024,
-               machPrimaryDataCacheSize / 1024);
-}
-
diff --git a/sys/arch/pica/pica/cpu_exec.c b/sys/arch/pica/pica/cpu_exec.c
deleted file mode 100644 (file)
index a5cd893..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*     $NetBSD: cpu_exec.c,v 1.4 1995/04/25 19:16:46 mellon Exp $      */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by Ralph
- * Campbell.
- *
- * 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.
- *
- *     @(#)machdep.c   8.3 (Berkeley) 1/12/94
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/vnode.h>
-#include <sys/exec.h>
-#include <sys/resourcevar.h>
-#include <vm/vm.h>
-
-#include <sys/exec_ecoff.h>
-#ifdef COMPAT_09
-#include <machine/bsd-aout.h>
-#endif
-#include <machine/reg.h>
-
-/*
- * cpu_exec_aout_makecmds():
- *     cpu-dependent a.out format hook for execve().
- * 
- * Determine of the given exec package refers to something which we
- * understand and, if so, set up the vmcmds for it.
- *
- */
-int
-cpu_exec_aout_makecmds(p, epp)
-       struct proc *p;
-       struct exec_package *epp;
-{
-       /* If COMPAT_09 is defined, allow loading of old-style 4.4bsd a.out
-          executables. */
-#ifdef COMPAT_09
-       struct bsd_aouthdr *hdr = (struct bsd_aouthdr *)epp -> ep_hdr;
-
-       /* Only handle paged files (laziness). */
-       if (hdr -> a_magic != BSD_ZMAGIC)
-#endif
-               /* If it's not a.out, maybe it's ELF.  (This wants to
-                  be moved up to the machine independent code as soon
-                  as possible.)  XXX */
-#if 0
-               return pmax_elf_makecmds (p, epp);
-#else
-               return ENOEXEC;
-#endif
-
-#ifdef COMPAT_09
-       epp -> ep_taddr = 0x1000;
-       epp -> ep_entry = hdr -> a_entry;
-       epp -> ep_tsize = hdr -> a_text;
-       epp -> ep_daddr = epp -> ep_taddr + hdr -> a_text;
-       epp -> ep_dsize = hdr -> a_data + hdr -> a_bss;
-
-       /*
-        * check if vnode is in open for writing, because we want to
-        * demand-page out of it.  if it is, don't do it, for various
-        * reasons
-        */
-       if ((hdr -> a_text != 0 || hdr -> a_data != 0)
-           && epp->ep_vp->v_writecount != 0) {
-#ifdef DIAGNOSTIC
-               if (epp->ep_vp->v_flag & VTEXT)
-                       panic("exec: a VTEXT vnode has writecount != 0\n");
-#endif
-               return ETXTBSY;
-       }
-       epp->ep_vp->v_flag |= VTEXT;
-
-       /* set up command for text segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr -> a_text,
-           epp->ep_taddr, epp->ep_vp, 0, VM_PROT_READ|VM_PROT_EXECUTE);
-
-       /* set up command for data segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr -> a_data,
-           epp->ep_daddr, epp->ep_vp, hdr -> a_text,
-           VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-       /* set up command for bss segment */
-       NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, hdr -> a_bss,
-           epp->ep_daddr + hdr -> a_data, NULLVP, 0,
-           VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-       return exec_aout_setup_stack(p, epp);
-#endif
-}
-
-#ifdef COMPAT_ULTRIX
-extern struct emul emul_ultrix;
-
-void
-cpu_exec_ecoff_setregs(p, pack, stack, retval)
-       struct proc *p;
-       struct exec_package *pack;
-       u_long stack;
-       register_t *retval;
-{
-       struct ecoff_aouthdr *eap;
-
-       setregs(p, pack, stack, retval);
-       eap = (struct ecoff_aouthdr *)
-           ((caddr_t)pack->ep_hdr + sizeof(struct ecoff_filehdr));
-       p->p_md.md_regs[GP] = eap->ea_gp_value;
-}
-
-/*
- * cpu_exec_ecoff_hook():
- *     cpu-dependent ECOFF format hook for execve().
- * 
- * Do any machine-dependent diddling of the exec package when doing ECOFF.
- *
- */
-int
-cpu_exec_ecoff_hook(p, epp, eap)
-       struct proc *p;
-       struct exec_package *epp;
-       struct ecoff_aouthdr *eap;
-{
-
-       epp->ep_emul = &emul_ultrix;
-       return 0;
-}
-#endif
diff --git a/sys/arch/pica/pica/disksubr.c b/sys/arch/pica/pica/disksubr.c
deleted file mode 100644 (file)
index 44954ae..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*     $NetBSD: disksubr.c,v 1.3 1995/04/22 12:43:22 cgd Exp $ */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Authors: Keith Bostic, Chris G. Demetriou, Per Fogelstrom (R4000)
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/param.h>
-#include <sys/buf.h>
-#include <sys/ioccom.h>
-#include <sys/device.h>
-#include <sys/disklabel.h>
-#include <sys/disk.h>
-
-#include <scsi/scsi_all.h>
-#include <scsi/scsiconf.h>
-
-#include <machine/cpu.h>
-#include <machine/autoconf.h>
-
-extern struct device *bootdv;
-
-/* was this the boot device ? */
-void
-dk_establish(dk, dev)
-       struct disk *dk;
-       struct device *dev;
-{
-}
-
-/*
- * Attempt to read a disk label from a device
- * using the indicated stategy routine.
- * The label must be partly set up before this:
- * secpercyl and anything required in the strategy routine
- * (e.g., sector size) must be filled in before calling us.
- * Returns null on success and an error string on failure.
- */
-char *
-readdisklabel(dev, strat, lp, clp)
-       dev_t dev;
-       void (*strat)();
-       struct disklabel *lp;
-       struct cpu_disklabel *clp;
-{
-       struct buf *bp;
-       struct disklabel *dlp;
-       struct dos_partition *dp = clp->dosparts;
-       char *msg = NULL;
-       int dospartoff = 0;
-       int i;
-
-       /* minimal requirements for archtypal disk label */
-       if (lp->d_secperunit == 0)
-               lp->d_secperunit = 0x1fffffff; 
-       lp->d_npartitions = RAW_PART + 1;
-       for(i = 0; i < RAW_PART; i++) {
-               lp->d_partitions[i].p_size = 0;
-               lp->d_partitions[i].p_offset = 0;
-       }
-       if (lp->d_partitions[RAW_PART].p_size == 0)
-               lp->d_partitions[RAW_PART].p_size = 0x1fffffff;
-       lp->d_partitions[RAW_PART].p_offset = 0;
-
-       /* obtain buffer to probe drive with */
-       bp = geteblk((int)lp->d_secsize);
-       bp->b_dev = dev;
-
-       /* do dos partitions in the process of getting disklabel? */
-       if (dp) {
-               /* read master boot record */
-               bp->b_blkno = DOSBBSECTOR;
-               bp->b_bcount = lp->d_secsize;
-               bp->b_flags = B_BUSY | B_READ;
-               bp->b_resid = 0;
-               (*strat)(bp);
-
-               /* if successful, wander through dos partition table */
-               if (biowait(bp)) {
-                       msg = "dos partition I/O error";
-                       goto done;
-               } else if (*(unsigned int *)(bp->b_data) == 0x8ec033fa) {
-                       /* XXX how do we check veracity/bounds of this? */
-                       bcopy(bp->b_data + DOSPARTOFF, dp, NDOSPART * sizeof(*dp));
-                       for (i = 0; i < NDOSPART; i++, dp++) {
-                               /* is this ours? */
-                               if (dp->dp_size && dp->dp_typ == DOSPTYP_386BSD
-                                   && dospartoff == 0) {
-                                       dospartoff = dp->dp_start;
-
-                                       /* set part a to show NetBSD part */
-                                       lp->d_partitions[0].p_size = dp->dp_size;
-                                       lp->d_partitions[0].p_offset = dp->dp_start;
-                                       lp->d_ntracks = dp->dp_ehd + 1;
-                                       lp->d_nsectors = DPSECT(dp->dp_esect);
-                                       lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors;
-                               }
-                       }
-               }
-                       
-       }
-       /* next, dig out disk label */
-       bp->b_blkno = dospartoff + LABELSECTOR;
-       bp->b_resid = 0;
-       bp->b_bcount = lp->d_secsize;
-       bp->b_flags = B_BUSY | B_READ;
-       (*strat)(bp);  
-
-       /* if successful, locate disk label within block and validate */
-       if (biowait(bp)) {
-               msg = "disk label read error";
-               goto done;
-       }
-
-       dlp = (struct disklabel *)(bp->b_un.b_addr + LABELOFFSET);
-       if (dlp->d_magic == DISKMAGIC) {
-               if (dkcksum(dlp)) {
-                       msg = "NetBSD disk label corrupted";
-                       goto done;
-               }
-               *lp = *dlp;
-               goto done;
-       }
-       msg = "no disk label";
-done:
-       bp->b_flags = B_INVAL | B_AGE | B_READ;
-       brelse(bp);
-       return (msg);
-}
-
-/*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(olp, nlp, openmask, clp)
-       register struct disklabel *olp, *nlp;
-       u_long openmask;
-       struct cpu_disklabel *clp;
-{
-       register i;
-       register struct partition *opp, *npp;
-
-       /* sanity clause */
-       if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-           (nlp->d_secsize % DEV_BSIZE) != 0)
-               return(EINVAL);
-
-#ifdef notdef
-       /* XXX WHY WAS THIS HERE?! */
-       /* special case to allow disklabel to be invalidated */
-       if (nlp->d_magic == 0xffffffff) { 
-               *olp = *nlp;
-               return (0);
-       }
-#endif
-
-       if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-               dkcksum(nlp) != 0)
-               return (EINVAL);
-
-       while ((i = ffs((long)openmask)) != 0) {
-               i--;
-               openmask &= ~(1 << i);
-               if (nlp->d_npartitions <= i)
-                       return (EBUSY);
-               opp = &olp->d_partitions[i];
-               npp = &nlp->d_partitions[i];
-               if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-                       return (EBUSY);
-               /*
-               * Copy internally-set partition information
-               * if new label doesn't include it.             XXX
-               */
-               if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-                       npp->p_fstype = opp->p_fstype;
-                       npp->p_fsize = opp->p_fsize;
-                       npp->p_frag = opp->p_frag;
-                       npp->p_cpg = opp->p_cpg;
-               }
-       }
-       nlp->d_checksum = 0;
-       nlp->d_checksum = dkcksum(nlp);
-       *olp = *nlp;
-       return (0);     
-}
-
-/*
- * Write disk label back to device after modification.
- * this means write out the Rigid disk blocks to represent the 
- * label.  Hope the user was carefull.
- */
-int
-writedisklabel(dev, strat, lp, clp)
-       dev_t dev;
-       void (*strat)();
-       register struct disklabel *lp;
-       struct cpu_disklabel *clp;
-{
-       struct buf *bp; 
-       struct disklabel *dlp;
-       struct dos_partition *dp = clp->dosparts;
-       int error = 0, i;
-       int dospartoff = 0;
-
-       bp = geteblk((int)lp->d_secsize);
-       bp->b_dev = dev;
-
-       /* do dos partitions in the process of getting disklabel? */
-       if (dp) {
-               /* read master boot record */
-               bp->b_blkno = DOSBBSECTOR;
-               bp->b_bcount = lp->d_secsize;
-               bp->b_flags = B_BUSY | B_READ;
-               bp->b_resid = 0;
-               (*strat)(bp);
-
-               if (((error = biowait(bp)) == 0) 
-                  && *(unsigned int *)(bp->b_data) == 0x8ec033fa) {
-                       /* XXX how do we check veracity/bounds of this? */
-                       bcopy(bp->b_data + DOSPARTOFF, dp, NDOSPART * sizeof(*dp));
-                       for (i = 0; i < NDOSPART; i++, dp++) {
-                               /* is this ours? */
-                               if (dp->dp_size && dp->dp_typ == DOSPTYP_386BSD
-                                   && dospartoff == 0) {
-                                       dospartoff = dp->dp_start;
-                               }
-                       }
-               }
-                       
-       }
-       bp->b_blkno = dospartoff + LABELSECTOR;
-       bp->b_resid = 0;
-       bp->b_bcount = lp->d_secsize;
-       bp->b_flags = B_READ;           /* get current label */
-       (*strat)(bp);
-       if (error = biowait(bp))
-               goto done;
-
-       dlp = (struct disklabel *)(bp->b_un.b_addr + LABELOFFSET);
-       *dlp = *lp;     /* struct assignment */
-
-       bp->b_flags = B_WRITE;
-       (*strat)(bp);
-       error = biowait(bp);
-
-done:
-       brelse(bp);
-       return (error); 
-}
-
-
-/* 
- * Determine the size of the transfer, and make sure it is
- * within the boundaries of the partition. Adjust transfer
- * if needed, and signal errors or early completion.
- */
-int
-bounds_check_with_label(bp, lp, wlabel)
-       struct buf *bp;
-       struct disklabel *lp;
-       int wlabel;
-{
-#define dkpart(dev) (minor(dev) & 7)
-
-       struct partition *p = lp->d_partitions + dkpart(bp->b_dev);
-       int labelsect = lp->d_partitions[RAW_PART].p_offset;
-       int maxsz = p->p_size;
-       int sz = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT;
-
-       /* overwriting disk label ? */
-       /* XXX should also protect bootstrap in first 8K */ 
-       if (bp->b_blkno + p->p_offset == LABELSECTOR + labelsect &&
-           (bp->b_flags & B_READ) == 0 && wlabel == 0) {
-               bp->b_error = EROFS;
-               goto bad;
-       }
-
-       /* beyond partition? */ 
-       if (bp->b_blkno < 0 || bp->b_blkno + sz > maxsz) {
-               /* if exactly at end of disk, return an EOF */
-               if (bp->b_blkno == maxsz) {
-                       bp->b_resid = bp->b_bcount;
-                       return(0);
-               }
-               /* or truncate if part of it fits */
-               sz = maxsz - bp->b_blkno;
-               if (sz <= 0) {
-                       bp->b_error = EINVAL;
-                       goto bad;
-               }
-               bp->b_bcount = sz << DEV_BSHIFT;
-       }               
-
-       /* calculate cylinder for disksort to order transfers with */
-       bp->b_resid = (bp->b_blkno + p->p_offset) / lp->d_secpercyl;
-       return(1);
-bad:
-       bp->b_flags |= B_ERROR;
-       return(-1);
-}
diff --git a/sys/arch/pica/pica/fp.S b/sys/arch/pica/pica/fp.S
deleted file mode 100644 (file)
index cf51cec..0000000
+++ /dev/null
@@ -1,3610 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)fp.s  8.1 (Berkeley) 6/10/93
- *      $Id: fp.S,v 1.2 1996/06/06 23:07:32 deraadt Exp $
- */
-
-/*
- * Standard header stuff.
- */
-
-#include <machine/regdef.h>
-#include <machine/asm.h>
-#include <machine/cpu.h>
-
-#include "assym.h"
-
-#define SEXP_INF       0xff
-#define DEXP_INF       0x7ff
-#define SEXP_BIAS      127
-#define DEXP_BIAS      1023
-#define SEXP_MIN       -126
-#define DEXP_MIN       -1022
-#define SEXP_MAX       127
-#define DEXP_MAX       1023
-#define WEXP_MAX       30              /* maximum unbiased exponent for int */
-#define WEXP_MIN       -1              /* minimum unbiased exponent for int */
-#define SFRAC_BITS     23
-#define DFRAC_BITS     52
-#define SIMPL_ONE      0x00800000
-#define DIMPL_ONE      0x00100000
-#define SLEAD_ZEROS    31 - 23
-#define DLEAD_ZEROS    31 - 20
-#define STICKYBIT      1
-#define GUARDBIT       0x80000000
-#define SSIGNAL_NAN    0x00400000
-#define DSIGNAL_NAN    0x00080000
-#define SQUIET_NAN     0x003fffff
-#define DQUIET_NAN0    0x0007ffff
-#define DQUIET_NAN1    0xffffffff
-#define INT_MIN                0x80000000
-#define INT_MAX                0x7fffffff
-
-#define COND_UNORDERED 0x1
-#define COND_EQUAL     0x2
-#define COND_LESS      0x4
-#define COND_SIGNAL    0x8
-
-/*----------------------------------------------------------------------------
- *
- * MachEmulateFP --
- *
- *     Emulate unimplemented floating point operations.
- *     This routine should only be called by MachFPInterrupt().
- *
- *     MachEmulateFP(instr)
- *             unsigned instr;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Floating point registers are modified according to instruction.
- *
- *----------------------------------------------------------------------------
- */
-NON_LEAF(MachEmulateFP, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       sw      ra, STAND_RA_OFFSET(sp)
-/*
- * Decode the FMT field (bits 24-21) and FUNCTION field (bits 5-0).
- */
-       srl     v0, a0, 21 - 2                  # get FMT field
-       and     v0, v0, 0xF << 2                # mask FMT field
-       and     v1, a0, 0x3F                    # mask FUNC field
-       sll     v1, v1, 5                       # align for table lookup
-       bgt     v0, 4 << 2, ill                 # illegal format
-
-       or      v1, v1, v0
-       cfc1    a1, FPC_CSR             # get exception register
-       lw      a3, func_fmt_tbl(v1)            # switch on FUNC & FMT
-       and     a1, a1, ~FPC_EXCEPTION_UNIMPL   # clear exception
-       ctc1    a1, FPC_CSR
-       j       a3
-
-       .rdata
-func_fmt_tbl:
-       .word   add_s           # 0
-       .word   add_d           # 0
-       .word   ill             # 0
-       .word   ill             # 0
-       .word   ill             # 0
-       .word   ill             # 0
-       .word   ill             # 0
-       .word   ill             # 0
-       .word   sub_s           # 1
-       .word   sub_d           # 1
-       .word   ill             # 1
-       .word   ill             # 1
-       .word   ill             # 1
-       .word   ill             # 1
-       .word   ill             # 1
-       .word   ill             # 1
-       .word   mul_s           # 2
-       .word   mul_d           # 2
-       .word   ill             # 2
-       .word   ill             # 2
-       .word   ill             # 2
-       .word   ill             # 2
-       .word   ill             # 2
-       .word   ill             # 2
-       .word   div_s           # 3
-       .word   div_d           # 3
-       .word   ill             # 3
-       .word   ill             # 3
-       .word   ill             # 3
-       .word   ill             # 3
-       .word   ill             # 3
-       .word   ill             # 3
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   ill             # 4
-       .word   abs_s           # 5
-       .word   abs_d           # 5
-       .word   ill             # 5
-       .word   ill             # 5
-       .word   ill             # 5
-       .word   ill             # 5
-       .word   ill             # 5
-       .word   ill             # 5
-       .word   mov_s           # 6
-       .word   mov_d           # 6
-       .word   ill             # 6
-       .word   ill             # 6
-       .word   ill             # 6
-       .word   ill             # 6
-       .word   ill             # 6
-       .word   ill             # 6
-       .word   neg_s           # 7
-       .word   neg_d           # 7
-       .word   ill             # 7
-       .word   ill             # 7
-       .word   ill             # 7
-       .word   ill             # 7
-       .word   ill             # 7
-       .word   ill             # 7
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 8
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 9
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 10
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 11
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 12
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 13
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 14
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 15
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 16
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 17
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 18
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 19
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 20
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 21
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 22
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 23
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 24
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 25
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 26
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 27
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 28
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 29
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 30
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 31
-       .word   ill             # 32
-       .word   cvt_s_d         # 32
-       .word   ill             # 32
-       .word   ill             # 32
-       .word   cvt_s_w         # 32
-       .word   ill             # 32
-       .word   ill             # 32
-       .word   ill             # 32
-       .word   cvt_d_s         # 33
-       .word   ill             # 33
-       .word   ill             # 33
-       .word   ill             # 33
-       .word   cvt_d_w         # 33
-       .word   ill             # 33
-       .word   ill             # 33
-       .word   ill             # 33
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 34
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   ill             # 35
-       .word   cvt_w_s         # 36
-       .word   cvt_w_d         # 36
-       .word   ill             # 36
-       .word   ill             # 36
-       .word   ill             # 36
-       .word   ill             # 36
-       .word   ill             # 36
-       .word   ill             # 36
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 37
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 38
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 39
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 40
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 41
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 42
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 43
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 44
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 45
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 46
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   ill             # 47
-       .word   cmp_s           # 48
-       .word   cmp_d           # 48
-       .word   ill             # 48
-       .word   ill             # 48
-       .word   ill             # 48
-       .word   ill             # 48
-       .word   ill             # 48
-       .word   ill             # 48
-       .word   cmp_s           # 49
-       .word   cmp_d           # 49
-       .word   ill             # 49
-       .word   ill             # 49
-       .word   ill             # 49
-       .word   ill             # 49
-       .word   ill             # 49
-       .word   ill             # 49
-       .word   cmp_s           # 50
-       .word   cmp_d           # 50
-       .word   ill             # 50
-       .word   ill             # 50
-       .word   ill             # 50
-       .word   ill             # 50
-       .word   ill             # 50
-       .word   ill             # 50
-       .word   cmp_s           # 51
-       .word   cmp_d           # 51
-       .word   ill             # 51
-       .word   ill             # 51
-       .word   ill             # 51
-       .word   ill             # 51
-       .word   ill             # 51
-       .word   ill             # 51
-       .word   cmp_s           # 52
-       .word   cmp_d           # 52
-       .word   ill             # 52
-       .word   ill             # 52
-       .word   ill             # 52
-       .word   ill             # 52
-       .word   ill             # 52
-       .word   ill             # 52
-       .word   cmp_s           # 53
-       .word   cmp_d           # 53
-       .word   ill             # 53
-       .word   ill             # 53
-       .word   ill             # 53
-       .word   ill             # 53
-       .word   ill             # 53
-       .word   ill             # 53
-       .word   cmp_s           # 54
-       .word   cmp_d           # 54
-       .word   ill             # 54
-       .word   ill             # 54
-       .word   ill             # 54
-       .word   ill             # 54
-       .word   ill             # 54
-       .word   ill             # 54
-       .word   cmp_s           # 55
-       .word   cmp_d           # 55
-       .word   ill             # 55
-       .word   ill             # 55
-       .word   ill             # 55
-       .word   ill             # 55
-       .word   ill             # 55
-       .word   ill             # 55
-       .word   cmp_s           # 56
-       .word   cmp_d           # 56
-       .word   ill             # 56
-       .word   ill             # 56
-       .word   ill             # 56
-       .word   ill             # 56
-       .word   ill             # 56
-       .word   ill             # 56
-       .word   cmp_s           # 57
-       .word   cmp_d           # 57
-       .word   ill             # 57
-       .word   ill             # 57
-       .word   ill             # 57
-       .word   ill             # 57
-       .word   ill             # 57
-       .word   ill             # 57
-       .word   cmp_s           # 58
-       .word   cmp_d           # 58
-       .word   ill             # 58
-       .word   ill             # 58
-       .word   ill             # 58
-       .word   ill             # 58
-       .word   ill             # 58
-       .word   ill             # 58
-       .word   cmp_s           # 59
-       .word   cmp_d           # 59
-       .word   ill             # 59
-       .word   ill             # 59
-       .word   ill             # 59
-       .word   ill             # 59
-       .word   ill             # 59
-       .word   ill             # 59
-       .word   cmp_s           # 60
-       .word   cmp_d           # 60
-       .word   ill             # 60
-       .word   ill             # 60
-       .word   ill             # 60
-       .word   ill             # 60
-       .word   ill             # 60
-       .word   ill             # 60
-       .word   cmp_s           # 61
-       .word   cmp_d           # 61
-       .word   ill             # 61
-       .word   ill             # 61
-       .word   ill             # 61
-       .word   ill             # 61
-       .word   ill             # 61
-       .word   ill             # 61
-       .word   cmp_s           # 62
-       .word   cmp_d           # 62
-       .word   ill             # 62
-       .word   ill             # 62
-       .word   ill             # 62
-       .word   ill             # 62
-       .word   ill             # 62
-       .word   ill             # 62
-       .word   cmp_s           # 63
-       .word   cmp_d           # 63
-       .word   ill             # 63
-       .word   ill             # 63
-       .word   ill             # 63
-       .word   ill             # 63
-       .word   ill             # 63
-       .word   ill             # 63
-       .text
-
-/*
- * Single precision subtract.
- */
-sub_s:
-       jal     get_ft_fs_s
-       xor     t4, t4, 1                       # negate FT sign bit
-       b       add_sub_s
-/*
- * Single precision add.
- */
-add_s:
-       jal     get_ft_fs_s
-add_sub_s:
-       bne     t1, SEXP_INF, 1f                # is FS an infinity?
-       bne     t5, SEXP_INF, result_fs_s       # if FT is not inf, result=FS
-       bne     t2, zero, result_fs_s           # if FS is NAN, result is FS
-       bne     t6, zero, result_ft_s           # if FT is NAN, result is FT
-       bne     t0, t4, invalid_s               # both infinities same sign?
-       b       result_fs_s                     # result is in FS
-1:
-       beq     t5, SEXP_INF, result_ft_s       # if FT is inf, result=FT
-       bne     t1, zero, 4f                    # is FS a denormalized num?
-       beq     t2, zero, 3f                    # is FS zero?
-       bne     t5, zero, 2f                    # is FT a denormalized num?
-       beq     t6, zero, result_fs_s           # FT is zero, result=FS
-       jal     renorm_fs_s
-       jal     renorm_ft_s
-       b       5f
-2:
-       jal     renorm_fs_s
-       subu    t5, t5, SEXP_BIAS               # unbias FT exponent
-       or      t6, t6, SIMPL_ONE               # set implied one bit
-       b       5f
-3:
-       bne     t5, zero, result_ft_s           # if FT != 0, result=FT
-       bne     t6, zero, result_ft_s
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       bne     v0, FPC_ROUND_RM, 1f    # round to -infinity?
-       or      t0, t0, t4                      # compute result sign
-       b       result_fs_s
-1:
-       and     t0, t0, t4                      # compute result sign
-       b       result_fs_s
-4:
-       bne     t5, zero, 2f                    # is FT a denormalized num?
-       beq     t6, zero, result_fs_s           # FT is zero, result=FS
-       subu    t1, t1, SEXP_BIAS               # unbias FS exponent
-       or      t2, t2, SIMPL_ONE               # set implied one bit
-       jal     renorm_ft_s
-       b       5f
-2:
-       subu    t1, t1, SEXP_BIAS               # unbias FS exponent
-       or      t2, t2, SIMPL_ONE               # set implied one bit
-       subu    t5, t5, SEXP_BIAS               # unbias FT exponent
-       or      t6, t6, SIMPL_ONE               # set implied one bit
-/*
- * Perform the addition.
- */
-5:
-       move    t8, zero                        # no shifted bits (sticky reg)
-       beq     t1, t5, 4f                      # no shift needed
-       subu    v0, t1, t5                      # v0 = difference of exponents
-       move    v1, v0                          # v1 = abs(difference)
-       bge     v0, zero, 1f
-       negu    v1
-1:
-       ble     v1, SFRAC_BITS+2, 2f            # is difference too great?
-       li      t8, STICKYBIT                   # set the sticky bit
-       bge     v0, zero, 1f                    # check which exp is larger
-       move    t1, t5                          # result exp is FTs
-       move    t2, zero                        # FSs fraction shifted is zero
-       b       4f
-1:
-       move    t6, zero                        # FTs fraction shifted is zero
-       b       4f
-2:
-       li      t9, 32                          # compute 32 - abs(exp diff)
-       subu    t9, t9, v1
-       bgt     v0, zero, 3f                    # if FS > FT, shift FTs frac
-       move    t1, t5                          # FT > FS, result exp is FTs
-       sll     t8, t2, t9                      # save bits shifted out
-       srl     t2, t2, v1                      # shift FSs fraction
-       b       4f
-3:
-       sll     t8, t6, t9                      # save bits shifted out
-       srl     t6, t6, v1                      # shift FTs fraction
-4:
-       bne     t0, t4, 1f                      # if signs differ, subtract
-       addu    t2, t2, t6                      # add fractions
-       b       norm_s
-1:
-       blt     t2, t6, 3f                      # subtract larger from smaller
-       bne     t2, t6, 2f                      # if same, result=0
-       move    t1, zero                        # result=0
-       move    t2, zero
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       bne     v0, FPC_ROUND_RM, 1f    # round to -infinity?
-       or      t0, t0, t4                      # compute result sign
-       b       result_fs_s
-1:
-       and     t0, t0, t4                      # compute result sign
-       b       result_fs_s
-2:
-       sltu    t9, zero, t8                    # compute t2:zero - t6:t8
-       subu    t8, zero, t8
-       subu    t2, t2, t6                      # subtract fractions
-       subu    t2, t2, t9                      # subtract barrow
-       b       norm_s
-3:
-       move    t0, t4                          # sign of result = FTs
-       sltu    t9, zero, t8                    # compute t6:zero - t2:t8
-       subu    t8, zero, t8
-       subu    t2, t6, t2                      # subtract fractions
-       subu    t2, t2, t9                      # subtract barrow
-       b       norm_s
-
-/*
- * Double precision subtract.
- */
-sub_d:
-       jal     get_ft_fs_d
-       xor     t4, t4, 1                       # negate sign bit
-       b       add_sub_d
-/*
- * Double precision add.
- */
-add_d:
-       jal     get_ft_fs_d
-add_sub_d:
-       bne     t1, DEXP_INF, 1f                # is FS an infinity?
-       bne     t5, DEXP_INF, result_fs_d       # if FT is not inf, result=FS
-       bne     t2, zero, result_fs_d           # if FS is NAN, result is FS
-       bne     t3, zero, result_fs_d
-       bne     t6, zero, result_ft_d           # if FT is NAN, result is FT
-       bne     t7, zero, result_ft_d
-       bne     t0, t4, invalid_d               # both infinities same sign?
-       b       result_fs_d                     # result is in FS
-1:
-       beq     t5, DEXP_INF, result_ft_d       # if FT is inf, result=FT
-       bne     t1, zero, 4f                    # is FS a denormalized num?
-       bne     t2, zero, 1f                    # is FS zero?
-       beq     t3, zero, 3f
-1:
-       bne     t5, zero, 2f                    # is FT a denormalized num?
-       bne     t6, zero, 1f
-       beq     t7, zero, result_fs_d           # FT is zero, result=FS
-1:
-       jal     renorm_fs_d
-       jal     renorm_ft_d
-       b       5f
-2:
-       jal     renorm_fs_d
-       subu    t5, t5, DEXP_BIAS               # unbias FT exponent
-       or      t6, t6, DIMPL_ONE               # set implied one bit
-       b       5f
-3:
-       bne     t5, zero, result_ft_d           # if FT != 0, result=FT
-       bne     t6, zero, result_ft_d
-       bne     t7, zero, result_ft_d
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       bne     v0, FPC_ROUND_RM, 1f    # round to -infinity?
-       or      t0, t0, t4                      # compute result sign
-       b       result_fs_d
-1:
-       and     t0, t0, t4                      # compute result sign
-       b       result_fs_d
-4:
-       bne     t5, zero, 2f                    # is FT a denormalized num?
-       bne     t6, zero, 1f
-       beq     t7, zero, result_fs_d           # FT is zero, result=FS
-1:
-       subu    t1, t1, DEXP_BIAS               # unbias FS exponent
-       or      t2, t2, DIMPL_ONE               # set implied one bit
-       jal     renorm_ft_d
-       b       5f
-2:
-       subu    t1, t1, DEXP_BIAS               # unbias FS exponent
-       or      t2, t2, DIMPL_ONE               # set implied one bit
-       subu    t5, t5, DEXP_BIAS               # unbias FT exponent
-       or      t6, t6, DIMPL_ONE               # set implied one bit
-/*
- * Perform the addition.
- */
-5:
-       move    t8, zero                        # no shifted bits (sticky reg)
-       beq     t1, t5, 4f                      # no shift needed
-       subu    v0, t1, t5                      # v0 = difference of exponents
-       move    v1, v0                          # v1 = abs(difference)
-       bge     v0, zero, 1f
-       negu    v1
-1:
-       ble     v1, DFRAC_BITS+2, 2f            # is difference too great?
-       li      t8, STICKYBIT                   # set the sticky bit
-       bge     v0, zero, 1f                    # check which exp is larger
-       move    t1, t5                          # result exp is FTs
-       move    t2, zero                        # FSs fraction shifted is zero
-       move    t3, zero
-       b       4f
-1:
-       move    t6, zero                        # FTs fraction shifted is zero
-       move    t7, zero
-       b       4f
-2:
-       li      t9, 32
-       bge     v0, zero, 3f                    # if FS > FT, shift FTs frac
-       move    t1, t5                          # FT > FS, result exp is FTs
-       blt     v1, t9, 1f                      # shift right by < 32?
-       subu    v1, v1, t9
-       subu    t9, t9, v1
-       sll     t8, t2, t9                      # save bits shifted out
-       sltu    t9, zero, t3                    # dont lose any one bits
-       or      t8, t8, t9                      # save sticky bit
-       srl     t3, t2, v1                      # shift FSs fraction
-       move    t2, zero
-       b       4f
-1:
-       subu    t9, t9, v1
-       sll     t8, t3, t9                      # save bits shifted out
-       srl     t3, t3, v1                      # shift FSs fraction
-       sll     t9, t2, t9                      # save bits shifted out of t2
-       or      t3, t3, t9                      # and put into t3
-       srl     t2, t2, v1
-       b       4f
-3:
-       blt     v1, t9, 1f                      # shift right by < 32?
-       subu    v1, v1, t9
-       subu    t9, t9, v1
-       sll     t8, t6, t9                      # save bits shifted out
-       srl     t7, t6, v1                      # shift FTs fraction
-       move    t6, zero
-       b       4f
-1:
-       subu    t9, t9, v1
-       sll     t8, t7, t9                      # save bits shifted out
-       srl     t7, t7, v1                      # shift FTs fraction
-       sll     t9, t6, t9                      # save bits shifted out of t2
-       or      t7, t7, t9                      # and put into t3
-       srl     t6, t6, v1
-4:
-       bne     t0, t4, 1f                      # if signs differ, subtract
-       addu    t3, t3, t7                      # add fractions
-       sltu    t9, t3, t7                      # compute carry
-       addu    t2, t2, t6                      # add fractions
-       addu    t2, t2, t9                      # add carry
-       b       norm_d
-1:
-       blt     t2, t6, 3f                      # subtract larger from smaller
-       bne     t2, t6, 2f
-       bltu    t3, t7, 3f
-       bne     t3, t7, 2f                      # if same, result=0
-       move    t1, zero                        # result=0
-       move    t2, zero
-       move    t3, zero
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       bne     v0, FPC_ROUND_RM, 1f    # round to -infinity?
-       or      t0, t0, t4                      # compute result sign
-       b       result_fs_d
-1:
-       and     t0, t0, t4                      # compute result sign
-       b       result_fs_d
-2:
-       beq     t8, zero, 1f                    # compute t2:t3:zero - t6:t7:t8
-       subu    t8, zero, t8
-       sltu    v0, t3, 1                       # compute barrow out
-       subu    t3, t3, 1                       # subtract barrow
-       subu    t2, t2, v0
-1:
-       sltu    v0, t3, t7
-       subu    t3, t3, t7                      # subtract fractions
-       subu    t2, t2, t6                      # subtract fractions
-       subu    t2, t2, v0                      # subtract barrow
-       b       norm_d
-3:
-       move    t0, t4                          # sign of result = FTs
-       beq     t8, zero, 1f                    # compute t6:t7:zero - t2:t3:t8
-       subu    t8, zero, t8
-       sltu    v0, t7, 1                       # compute barrow out
-       subu    t7, t7, 1                       # subtract barrow
-       subu    t6, t6, v0
-1:
-       sltu    v0, t7, t3
-       subu    t3, t7, t3                      # subtract fractions
-       subu    t2, t6, t2                      # subtract fractions
-       subu    t2, t2, v0                      # subtract barrow
-       b       norm_d
-
-/*
- * Single precision multiply.
- */
-mul_s:
-       jal     get_ft_fs_s
-       xor     t0, t0, t4                      # compute sign of result
-       move    t4, t0
-       bne     t1, SEXP_INF, 2f                # is FS an infinity?
-       bne     t2, zero, result_fs_s           # if FS is a NAN, result=FS
-       bne     t5, SEXP_INF, 1f                # FS is inf, is FT an infinity?
-       bne     t6, zero, result_ft_s           # if FT is a NAN, result=FT
-       b       result_fs_s                     # result is infinity
-1:
-       bne     t5, zero, result_fs_s           # inf * zero? if no, result=FS
-       bne     t6, zero, result_fs_s
-       b       invalid_s                       # infinity * zero is invalid
-2:
-       bne     t5, SEXP_INF, 1f                # FS != inf, is FT an infinity?
-       bne     t1, zero, result_ft_s           # zero * inf? if no, result=FT
-       bne     t2, zero, result_ft_s
-       bne     t6, zero, result_ft_s           # if FT is a NAN, result=FT
-       b       invalid_s                       # zero * infinity is invalid
-1:
-       bne     t1, zero, 1f                    # is FS zero?
-       beq     t2, zero, result_fs_s           # result is zero
-       jal     renorm_fs_s
-       b       2f
-1:
-       subu    t1, t1, SEXP_BIAS               # unbias FS exponent
-       or      t2, t2, SIMPL_ONE               # set implied one bit
-2:
-       bne     t5, zero, 1f                    # is FT zero?
-       beq     t6, zero, result_ft_s           # result is zero
-       jal     renorm_ft_s
-       b       2f
-1:
-       subu    t5, t5, SEXP_BIAS               # unbias FT exponent
-       or      t6, t6, SIMPL_ONE               # set implied one bit
-2:
-       addu    t1, t1, t5                      # compute result exponent
-       addu    t1, t1, 9                       # account for binary point
-       multu   t2, t6                          # multiply fractions
-       mflo    t8
-       mfhi    t2
-       b       norm_s
-
-/*
- * Double precision multiply.
- */
-mul_d:
-       jal     get_ft_fs_d
-       xor     t0, t0, t4                      # compute sign of result
-       move    t4, t0
-       bne     t1, DEXP_INF, 2f                # is FS an infinity?
-       bne     t2, zero, result_fs_d           # if FS is a NAN, result=FS
-       bne     t3, zero, result_fs_d
-       bne     t5, DEXP_INF, 1f                # FS is inf, is FT an infinity?
-       bne     t6, zero, result_ft_d           # if FT is a NAN, result=FT
-       bne     t7, zero, result_ft_d
-       b       result_fs_d                     # result is infinity
-1:
-       bne     t5, zero, result_fs_d           # inf * zero? if no, result=FS
-       bne     t6, zero, result_fs_d
-       bne     t7, zero, result_fs_d
-       b       invalid_d                       # infinity * zero is invalid
-2:
-       bne     t5, DEXP_INF, 1f                # FS != inf, is FT an infinity?
-       bne     t1, zero, result_ft_d           # zero * inf? if no, result=FT
-       bne     t2, zero, result_ft_d           # if FS is a NAN, result=FS
-       bne     t3, zero, result_ft_d
-       bne     t6, zero, result_ft_d           # if FT is a NAN, result=FT
-       bne     t7, zero, result_ft_d
-       b       invalid_d                       # zero * infinity is invalid
-1:
-       bne     t1, zero, 2f                    # is FS zero?
-       bne     t2, zero, 1f
-       beq     t3, zero, result_fs_d           # result is zero
-1:
-       jal     renorm_fs_d
-       b       3f
-2:
-       subu    t1, t1, DEXP_BIAS               # unbias FS exponent
-       or      t2, t2, DIMPL_ONE               # set implied one bit
-3:
-       bne     t5, zero, 2f                    # is FT zero?
-       bne     t6, zero, 1f
-       beq     t7, zero, result_ft_d           # result is zero
-1:
-       jal     renorm_ft_d
-       b       3f
-2:
-       subu    t5, t5, DEXP_BIAS               # unbias FT exponent
-       or      t6, t6, DIMPL_ONE               # set implied one bit
-3:
-       addu    t1, t1, t5                      # compute result exponent
-       addu    t1, t1, 12                      # ???
-       multu   t3, t7                          # multiply fractions (low * low)
-       move    t4, t2                          # free up t2,t3 for result
-       move    t5, t3
-       mflo    a3                              # save low order bits
-       mfhi    t8
-       not     v0, t8
-       multu   t4, t7                          # multiply FS(high) * FT(low)
-       mflo    v1
-       mfhi    t3                              # init low result
-       sltu    v0, v0, v1                      # compute carry
-       addu    t8, v1
-       multu   t5, t6                          # multiply FS(low) * FT(high)
-       addu    t3, t3, v0                      # add carry
-       not     v0, t8
-       mflo    v1
-       mfhi    t2
-       sltu    v0, v0, v1
-       addu    t8, v1
-       multu   t4, t6                          # multiply FS(high) * FT(high)
-       addu    t3, v0
-       not     v1, t3
-       sltu    v1, v1, t2
-       addu    t3, t2
-       not     v0, t3
-       mfhi    t2
-       addu    t2, v1
-       mflo    v1
-       sltu    v0, v0, v1
-       addu    t2, v0
-       addu    t3, v1
-       sltu    a3, zero, a3                    # reduce t8,a3 to just t8
-       or      t8, a3
-       b       norm_d
-
-/*
- * Single precision divide.
- */
-div_s:
-       jal     get_ft_fs_s
-       xor     t0, t0, t4                      # compute sign of result
-       move    t4, t0
-       bne     t1, SEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, result_fs_s           # if FS is NAN, result is FS
-       bne     t5, SEXP_INF, result_fs_s       # is FT an infinity?
-       bne     t6, zero, result_ft_s           # if FT is NAN, result is FT
-       b       invalid_s                       # infinity/infinity is invalid
-1:
-       bne     t5, SEXP_INF, 1f                # is FT an infinity?
-       bne     t6, zero, result_ft_s           # if FT is NAN, result is FT
-       move    t1, zero                        # x / infinity is zero
-       move    t2, zero
-       b       result_fs_s
-1:
-       bne     t1, zero, 2f                    # is FS zero?
-       bne     t2, zero, 1f
-       bne     t5, zero, result_fs_s           # FS=zero, is FT zero?
-       beq     t6, zero, invalid_s             # 0 / 0
-       b       result_fs_s                     # result = zero
-1:
-       jal     renorm_fs_s
-       b       3f
-2:
-       subu    t1, t1, SEXP_BIAS               # unbias FS exponent
-       or      t2, t2, SIMPL_ONE               # set implied one bit
-3:
-       bne     t5, zero, 2f                    # is FT zero?
-       bne     t6, zero, 1f
-       or      a1, a1, FPC_EXCEPTION_DIV0 | FPC_STICKY_DIV0
-       and     v0, a1, FPC_ENABLE_DIV0 # trap enabled?
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       li      t1, SEXP_INF                    # result is infinity
-       move    t2, zero
-       b       result_fs_s
-1:
-       jal     renorm_ft_s
-       b       3f
-2:
-       subu    t5, t5, SEXP_BIAS               # unbias FT exponent
-       or      t6, t6, SIMPL_ONE               # set implied one bit
-3:
-       subu    t1, t1, t5                      # compute exponent
-       subu    t1, t1, 3                       # compensate for result position
-       li      v0, SFRAC_BITS+3                # number of bits to divide
-       move    t8, t2                          # init dividend
-       move    t2, zero                        # init result
-1:
-       bltu    t8, t6, 3f                      # is dividend >= divisor?
-2:
-       subu    t8, t8, t6                      # subtract divisor from dividend
-       or      t2, t2, 1                       # remember that we did
-       bne     t8, zero, 3f                    # if not done, continue
-       sll     t2, t2, v0                      # shift result to final position
-       b       norm_s
-3:
-       sll     t8, t8, 1                       # shift dividend
-       sll     t2, t2, 1                       # shift result
-       subu    v0, v0, 1                       # are we done?
-       bne     v0, zero, 1b                    # no, continue
-       b       norm_s
-
-/*
- * Double precision divide.
- */
-div_d:
-       jal     get_ft_fs_d
-       xor     t0, t0, t4                      # compute sign of result
-       move    t4, t0
-       bne     t1, DEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, result_fs_d           # if FS is NAN, result is FS
-       bne     t3, zero, result_fs_d
-       bne     t5, DEXP_INF, result_fs_d       # is FT an infinity?
-       bne     t6, zero, result_ft_d           # if FT is NAN, result is FT
-       bne     t7, zero, result_ft_d
-       b       invalid_d                       # infinity/infinity is invalid
-1:
-       bne     t5, DEXP_INF, 1f                # is FT an infinity?
-       bne     t6, zero, result_ft_d           # if FT is NAN, result is FT
-       bne     t7, zero, result_ft_d
-       move    t1, zero                        # x / infinity is zero
-       move    t2, zero
-       move    t3, zero
-       b       result_fs_d
-1:
-       bne     t1, zero, 2f                    # is FS zero?
-       bne     t2, zero, 1f
-       bne     t3, zero, 1f
-       bne     t5, zero, result_fs_d           # FS=zero, is FT zero?
-       bne     t6, zero, result_fs_d
-       beq     t7, zero, invalid_d             # 0 / 0
-       b       result_fs_d                     # result = zero
-1:
-       jal     renorm_fs_d
-       b       3f
-2:
-       subu    t1, t1, DEXP_BIAS               # unbias FS exponent
-       or      t2, t2, DIMPL_ONE               # set implied one bit
-3:
-       bne     t5, zero, 2f                    # is FT zero?
-       bne     t6, zero, 1f
-       bne     t7, zero, 1f
-       or      a1, a1, FPC_EXCEPTION_DIV0 | FPC_STICKY_DIV0
-       and     v0, a1, FPC_ENABLE_DIV0 # trap enabled?
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # Save exceptions
-       li      t1, DEXP_INF                    # result is infinity
-       move    t2, zero
-       move    t3, zero
-       b       result_fs_d
-1:
-       jal     renorm_ft_d
-       b       3f
-2:
-       subu    t5, t5, DEXP_BIAS               # unbias FT exponent
-       or      t6, t6, DIMPL_ONE               # set implied one bit
-3:
-       subu    t1, t1, t5                      # compute exponent
-       subu    t1, t1, 3                       # compensate for result position
-       li      v0, DFRAC_BITS+3                # number of bits to divide
-       move    t8, t2                          # init dividend
-       move    t9, t3
-       move    t2, zero                        # init result
-       move    t3, zero
-1:
-       bltu    t8, t6, 3f                      # is dividend >= divisor?
-       bne     t8, t6, 2f
-       bltu    t9, t7, 3f
-2:
-       sltu    v1, t9, t7                      # subtract divisor from dividend
-       subu    t9, t9, t7
-       subu    t8, t8, t6
-       subu    t8, t8, v1
-       or      t3, t3, 1                       # remember that we did
-       bne     t8, zero, 3f                    # if not done, continue
-       bne     t9, zero, 3f
-       li      v1, 32                          # shift result to final position
-       blt     v0, v1, 2f                      # shift < 32 bits?
-       subu    v0, v0, v1                      # shift by > 32 bits
-       sll     t2, t3, v0                      # shift upper part
-       move    t3, zero
-       b       norm_d
-2:
-       subu    v1, v1, v0                      # shift by < 32 bits
-       sll     t2, t2, v0                      # shift upper part
-       srl     t9, t3, v1                      # save bits shifted out
-       or      t2, t2, t9                      # and put into upper part
-       sll     t3, t3, v0
-       b       norm_d
-3:
-       sll     t8, t8, 1                       # shift dividend
-       srl     v1, t9, 31                      # save bit shifted out
-       or      t8, t8, v1                      # and put into upper part
-       sll     t9, t9, 1
-       sll     t2, t2, 1                       # shift result
-       srl     v1, t3, 31                      # save bit shifted out
-       or      t2, t2, v1                      # and put into upper part
-       sll     t3, t3, 1
-       subu    v0, v0, 1                       # are we done?
-       bne     v0, zero, 1b                    # no, continue
-       sltu    v0, zero, t9                    # be sure to save any one bits
-       or      t8, t8, v0                      # from the lower remainder
-       b       norm_d
-
-/*
- * Single precision absolute value.
- */
-abs_s:
-       jal     get_fs_s
-       move    t0, zero                        # set sign positive
-       b       result_fs_s
-
-/*
- * Double precision absolute value.
- */
-abs_d:
-       jal     get_fs_d
-       move    t0, zero                        # set sign positive
-       b       result_fs_d
-
-/*
- * Single precision move.
- */
-mov_s:
-       jal     get_fs_s
-       b       result_fs_s
-
-/*
- * Double precision move.
- */
-mov_d:
-       jal     get_fs_d
-       b       result_fs_d
-
-/*
- * Single precision negate.
- */
-neg_s:
-       jal     get_fs_s
-       xor     t0, t0, 1                       # reverse sign
-       b       result_fs_s
-
-/*
- * Double precision negate.
- */
-neg_d:
-       jal     get_fs_d
-       xor     t0, t0, 1                       # reverse sign
-       b       result_fs_d
-
-/*
- * Convert double to single.
- */
-cvt_s_d:
-       jal     get_fs_d
-       bne     t1, DEXP_INF, 1f                # is FS an infinity?
-       li      t1, SEXP_INF                    # convert to single
-       sll     t2, t2, 3                       # convert D fraction to S
-       srl     t8, t3, 32 - 3
-       or      t2, t2, t8
-       b       result_fs_s
-1:
-       bne     t1, zero, 2f                    # is FS zero?
-       bne     t2, zero, 1f
-       beq     t3, zero, result_fs_s           # result=0
-1:
-       jal     renorm_fs_d
-       subu    t1, t1, 3                       # correct exp for shift below
-       b       3f
-2:
-       subu    t1, t1, DEXP_BIAS               # unbias exponent
-       or      t2, t2, DIMPL_ONE               # add implied one bit
-3:
-       sll     t2, t2, 3                       # convert D fraction to S
-       srl     t8, t3, 32 - 3
-       or      t2, t2, t8
-       sll     t8, t3, 3
-       b       norm_noshift_s
-
-/*
- * Convert integer to single.
- */
-cvt_s_w:
-       jal     get_fs_int
-       bne     t2, zero, 1f                    # check for zero
-       move    t1, zero
-       b       result_fs_s
-/*
- * Find out how many leading zero bits are in t2 and put in t9.
- */
-1:
-       move    v0, t2
-       move    t9, zero
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2 the correct number of bits.
- */
-1:
-       subu    t9, t9, SLEAD_ZEROS             # dont count leading zeros
-       li      t1, 23                          # init exponent
-       subu    t1, t1, t9                      # compute exponent
-       beq     t9, zero, 1f
-       li      v0, 32
-       blt     t9, zero, 2f                    # if shift < 0, shift right
-       subu    v0, v0, t9
-       sll     t2, t2, t9                      # shift left
-1:
-       add     t1, t1, SEXP_BIAS               # bias exponent
-       and     t2, t2, ~SIMPL_ONE              # clear implied one bit
-       b       result_fs_s
-2:
-       negu    t9                              # shift right by t9
-       subu    v0, v0, t9
-       sll     t8, t2, v0                      # save bits shifted out
-       srl     t2, t2, t9
-       b       norm_noshift_s
-
-/*
- * Convert single to double.
- */
-cvt_d_s:
-       jal     get_fs_s
-       move    t3, zero
-       bne     t1, SEXP_INF, 1f                # is FS an infinity?
-       li      t1, DEXP_INF                    # convert to double
-       b       result_fs_d
-1:
-       bne     t1, zero, 2f                    # is FS denormalized or zero?
-       beq     t2, zero, result_fs_d           # is FS zero?
-       jal     renorm_fs_s
-       move    t8, zero
-       b       norm_d
-2:
-       addu    t1, t1, DEXP_BIAS - SEXP_BIAS   # bias exponent correctly
-       sll     t3, t2, 32 - 3                  # convert S fraction to D
-       srl     t2, t2, 3
-       b       result_fs_d
-
-/*
- * Convert integer to double.
- */
-cvt_d_w:
-       jal     get_fs_int
-       bne     t2, zero, 1f                    # check for zero
-       move    t1, zero                        # result=0
-       move    t3, zero
-       b       result_fs_d
-/*
- * Find out how many leading zero bits are in t2 and put in t9.
- */
-1:
-       move    v0, t2
-       move    t9, zero
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2 the correct number of bits.
- */
-1:
-       subu    t9, t9, DLEAD_ZEROS             # dont count leading zeros
-       li      t1, DEXP_BIAS + 20              # init exponent
-       subu    t1, t1, t9                      # compute exponent
-       beq     t9, zero, 1f
-       li      v0, 32
-       blt     t9, zero, 2f                    # if shift < 0, shift right
-       subu    v0, v0, t9
-       sll     t2, t2, t9                      # shift left
-1:
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-       move    t3, zero
-       b       result_fs_d
-2:
-       negu    t9                              # shift right by t9
-       subu    v0, v0, t9
-       sll     t3, t2, v0
-       srl     t2, t2, t9
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-       b       result_fs_d
-
-/*
- * Convert single to integer.
- */
-cvt_w_s:
-       jal     get_fs_s
-       bne     t1, SEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, invalid_w             # invalid conversion
-1:
-       bne     t1, zero, 1f                    # is FS zero?
-       beq     t2, zero, result_fs_w           # result is zero
-       move    t2, zero                        # result is an inexact zero
-       b       inexact_w
-1:
-       subu    t1, t1, SEXP_BIAS               # unbias exponent
-       or      t2, t2, SIMPL_ONE               # add implied one bit
-       sll     t3, t2, 32 - 3                  # convert S fraction to D
-       srl     t2, t2, 3
-       b       cvt_w
-
-/*
- * Convert double to integer.
- */
-cvt_w_d:
-       jal     get_fs_d
-       bne     t1, DEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, invalid_w             # invalid conversion
-       bne     t3, zero, invalid_w             # invalid conversion
-1:
-       bne     t1, zero, 2f                    # is FS zero?
-       bne     t2, zero, 1f
-       beq     t3, zero, result_fs_w           # result is zero
-1:
-       move    t2, zero                        # result is an inexact zero
-       b       inexact_w
-2:
-       subu    t1, t1, DEXP_BIAS               # unbias exponent
-       or      t2, t2, DIMPL_ONE               # add implied one bit
-cvt_w:
-       blt     t1, WEXP_MIN, underflow_w       # is exponent too small?
-       li      v0, WEXP_MAX+1
-       bgt     t1, v0, overflow_w              # is exponent too large?
-       bne     t1, v0, 1f                      # special check for INT_MIN
-       beq     t0, zero, overflow_w            # if positive, overflow
-       bne     t2, DIMPL_ONE, overflow_w
-       bne     t3, zero, overflow_w
-       li      t2, INT_MIN                     # result is INT_MIN
-       b       result_fs_w
-1:
-       subu    v0, t1, 20                      # compute amount to shift
-       beq     v0, zero, 2f                    # is shift needed?
-       li      v1, 32
-       blt     v0, zero, 1f                    # if shift < 0, shift right
-       subu    v1, v1, v0                      # shift left
-       sll     t2, t2, v0
-       srl     t9, t3, v1                      # save bits shifted out of t3
-       or      t2, t2, t9                      # and put into t2
-       sll     t3, t3, v0                      # shift FSs fraction
-       b       2f
-1:
-       negu    v0                              # shift right by v0
-       subu    v1, v1, v0
-       sll     t8, t3, v1                      # save bits shifted out
-       sltu    t8, zero, t8                    # dont lose any ones
-       srl     t3, t3, v0                      # shift FSs fraction
-       or      t3, t3, t8
-       sll     t9, t2, v1                      # save bits shifted out of t2
-       or      t3, t3, t9                      # and put into t3
-       srl     t2, t2, v0
-/*
- * round result (t0 is sign, t2 is integer part, t3 is fractional part).
- */
-2:
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 5f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, 5f                    # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, 5f                    # if sign is negative, truncate
-2:
-       beq     t3, zero, 5f                    # if no fraction bits, continue
-       addu    t2, t2, 1                       # add rounding bit
-       blt     t2, zero, overflow_w            # overflow?
-       b       5f
-3:
-       li      v0, GUARDBIT                    # load guard bit for rounding
-       addu    v0, v0, t3                      # add remainder
-       sltu    v1, v0, t3                      # compute carry out
-       beq     v1, zero, 4f                    # if no carry, continue
-       addu    t2, t2, 1                       # add carry to result
-       blt     t2, zero, overflow_w            # overflow?
-4:
-       bne     v0, zero, 5f                    # if rounded remainder is zero
-       and     t2, t2, ~1                      #  clear LSB (round to nearest)
-5:
-       beq     t0, zero, 1f                    # result positive?
-       negu    t2                              # convert to negative integer
-1:
-       beq     t3, zero, result_fs_w           # is result exact?
-/*
- * Handle inexact exception.
- */
-inexact_w:
-       or      a1, a1, FPC_EXCEPTION_INEXACT | FPC_STICKY_INEXACT
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       b       result_fs_w
-
-/*
- * Conversions to integer which overflow will trap (if enabled),
- * or generate an inexact trap (if enabled),
- * or generate an invalid exception.
- */
-overflow_w:
-       or      a1, a1, FPC_EXCEPTION_OVERFLOW | FPC_STICKY_OVERFLOW
-       and     v0, a1, FPC_ENABLE_OVERFLOW
-       bne     v0, zero, fpe_trap
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, inexact_w             # inexact traps enabled?
-       b       invalid_w
-
-/*
- * Conversions to integer which underflow will trap (if enabled),
- * or generate an inexact trap (if enabled),
- * or generate an invalid exception.
- */
-underflow_w:
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-       and     v0, a1, FPC_ENABLE_UNDERFLOW
-       bne     v0, zero, fpe_trap
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, inexact_w             # inexact traps enabled?
-       b       invalid_w
-
-/*
- * Compare single.
- */
-cmp_s:
-       jal     get_cmp_s
-       bne     t1, SEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, unordered             # FS is a NAN
-1:
-       bne     t5, SEXP_INF, 2f                # is FT an infinity?
-       bne     t6, zero, unordered             # FT is a NAN
-2:
-       sll     t1, t1, 23                      # reassemble exp & frac
-       or      t1, t1, t2
-       sll     t5, t5, 23                      # reassemble exp & frac
-       or      t5, t5, t6
-       beq     t0, zero, 1f                    # is FS positive?
-       negu    t1
-1:
-       beq     t4, zero, 1f                    # is FT positive?
-       negu    t5
-1:
-       li      v0, COND_LESS
-       blt     t1, t5, test_cond               # is FS < FT?
-       li      v0, COND_EQUAL
-       beq     t1, t5, test_cond               # is FS == FT?
-       move    v0, zero                        # FS > FT
-       b       test_cond
-
-/*
- * Compare double.
- */
-cmp_d:
-       jal     get_cmp_d
-       bne     t1, DEXP_INF, 1f                # is FS an infinity?
-       bne     t2, zero, unordered
-       bne     t3, zero, unordered             # FS is a NAN
-1:
-       bne     t5, DEXP_INF, 2f                # is FT an infinity?
-       bne     t6, zero, unordered
-       bne     t7, zero, unordered             # FT is a NAN
-2:
-       sll     t1, t1, 20                      # reassemble exp & frac
-       or      t1, t1, t2
-       sll     t5, t5, 20                      # reassemble exp & frac
-       or      t5, t5, t6
-       beq     t0, zero, 1f                    # is FS positive?
-       not     t3                              # negate t1,t3
-       not     t1
-       addu    t3, t3, 1
-       seq     v0, t3, zero                    # compute carry
-       addu    t1, t1, v0
-1:
-       beq     t4, zero, 1f                    # is FT positive?
-       not     t7                              # negate t5,t7
-       not     t5
-       addu    t7, t7, 1
-       seq     v0, t7, zero                    # compute carry
-       addu    t5, t5, v0
-1:
-       li      v0, COND_LESS
-       blt     t1, t5, test_cond               # is FS(MSW) < FT(MSW)?
-       move    v0, zero
-       bne     t1, t5, test_cond               # is FS(MSW) > FT(MSW)?
-       li      v0, COND_LESS
-       bltu    t3, t7, test_cond               # is FS(LSW) < FT(LSW)?
-       li      v0, COND_EQUAL
-       beq     t3, t7, test_cond               # is FS(LSW) == FT(LSW)?
-       move    v0, zero                        # FS > FT
-test_cond:
-       and     v0, v0, a0                      # condition match instruction?
-set_cond:
-       bne     v0, zero, 1f
-       and     a1, a1, ~FPC_COND_BIT   # clear condition bit
-       b       2f
-1:
-       or      a1, a1, FPC_COND_BIT    # set condition bit
-2:
-       ctc1    a1, FPC_CSR             # save condition bit
-       b       done
-
-unordered:
-       and     v0, a0, COND_UNORDERED          # this cmp match unordered?
-       bne     v0, zero, 1f
-       and     a1, a1, ~FPC_COND_BIT   # clear condition bit
-       b       2f
-1:
-       or      a1, a1, FPC_COND_BIT    # set condition bit
-2:
-       and     v0, a0, COND_SIGNAL
-       beq     v0, zero, 1f                    # is this a signaling cmp?
-       or      a1, a1, FPC_EXCEPTION_INVALID | FPC_STICKY_INVALID
-       and     v0, a1, FPC_ENABLE_INVALID
-       bne     v0, zero, fpe_trap
-1:
-       ctc1    a1, FPC_CSR             # save condition bit
-       b       done
-
-/*
- * Determine the amount to shift the fraction in order to restore the
- * normalized position. After that, round and handle exceptions.
- */
-norm_s:
-       move    v0, t2
-       move    t9, zero                        # t9 = num of leading zeros
-       bne     t2, zero, 1f
-       move    v0, t8
-       addu    t9, 32
-1:
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2,t8 the correct number of bits.
- */
-1:
-       subu    t9, t9, SLEAD_ZEROS             # dont count leading zeros
-       subu    t1, t1, t9                      # adjust the exponent
-       beq     t9, zero, norm_noshift_s
-       li      v1, 32
-       blt     t9, zero, 1f                    # if shift < 0, shift right
-       subu    v1, v1, t9
-       sll     t2, t2, t9                      # shift t2,t8 left
-       srl     v0, t8, v1                      # save bits shifted out
-       or      t2, t2, v0
-       sll     t8, t8, t9
-       b       norm_noshift_s
-1:
-       negu    t9                              # shift t2,t8 right by t9
-       subu    v1, v1, t9
-       sll     v0, t8, v1                      # save bits shifted out
-       sltu    v0, zero, v0                    # be sure to save any one bits
-       srl     t8, t8, t9
-       or      t8, t8, v0
-       sll     v0, t2, v1                      # save bits shifted out
-       or      t8, t8, v0
-       srl     t2, t2, t9
-norm_noshift_s:
-       move    t5, t1                          # save unrounded exponent
-       move    t6, t2                          # save unrounded fraction
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 5f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, 5f                    # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, 5f                    # if sign is negative, truncate
-2:
-       beq     t8, zero, 5f                    # if exact, continue
-       addu    t2, t2, 1                       # add rounding bit
-       bne     t2, SIMPL_ONE<<1, 5f            # need to adjust exponent?
-       addu    t1, t1, 1                       # adjust exponent
-       srl     t2, t2, 1                       # renormalize fraction
-       b       5f
-3:
-       li      v0, GUARDBIT                    # load guard bit for rounding
-       addu    v0, v0, t8                      # add remainder
-       sltu    v1, v0, t8                      # compute carry out
-       beq     v1, zero, 4f                    # if no carry, continue
-       addu    t2, t2, 1                       # add carry to result
-       bne     t2, SIMPL_ONE<<1, 4f            # need to adjust exponent?
-       addu    t1, t1, 1                       # adjust exponent
-       srl     t2, t2, 1                       # renormalize fraction
-4:
-       bne     v0, zero, 5f                    # if rounded remainder is zero
-       and     t2, t2, ~1                      #  clear LSB (round to nearest)
-5:
-       bgt     t1, SEXP_MAX, overflow_s        # overflow?
-       blt     t1, SEXP_MIN, underflow_s       # underflow?
-       bne     t8, zero, inexact_s             # is result inexact?
-       addu    t1, t1, SEXP_BIAS               # bias exponent
-       and     t2, t2, ~SIMPL_ONE              # clear implied one bit
-       b       result_fs_s
-
-/*
- * Handle inexact exception.
- */
-inexact_s:
-       addu    t1, t1, SEXP_BIAS               # bias exponent
-       and     t2, t2, ~SIMPL_ONE              # clear implied one bit
-inexact_nobias_s:
-       jal     set_fd_s                        # save result
-       or      a1, a1, FPC_EXCEPTION_INEXACT | FPC_STICKY_INEXACT
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       b       done
-
-/*
- * Overflow will trap (if enabled),
- * or generate an inexact trap (if enabled),
- * or generate an infinity.
- */
-overflow_s:
-       or      a1, a1, FPC_EXCEPTION_OVERFLOW | FPC_STICKY_OVERFLOW
-       and     v0, a1, FPC_ENABLE_OVERFLOW
-       beq     v0, zero, 1f
-       subu    t1, t1, 192                     # bias exponent
-       and     t2, t2, ~SIMPL_ONE              # clear implied one bit
-       jal     set_fd_s                        # save result
-       b       fpe_trap
-1:
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 1f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 2f    # round to +infinity
-       bne     t0, zero, 3f
-1:
-       li      t1, SEXP_MAX                    # result is max finite
-       li      t2, 0x007fffff
-       b       inexact_s
-2:
-       bne     t0, zero, 1b
-3:
-       li      t1, SEXP_MAX + 1                # result is infinity
-       move    t2, zero
-       b       inexact_s
-
-/*
- * In this implementation, "tininess" is detected "after rounding" and
- * "loss of accuracy" is detected as "an inexact result".
- */
-underflow_s:
-       and     v0, a1, FPC_ENABLE_UNDERFLOW
-       beq     v0, zero, 1f
-/*
- * Underflow is enabled so compute the result and trap.
- */
-       addu    t1, t1, 192                     # bias exponent
-       and     t2, t2, ~SIMPL_ONE              # clear implied one bit
-       jal     set_fd_s                        # save result
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-       b       fpe_trap
-/*
- * Underflow is not enabled so compute the result,
- * signal inexact result (if it is) and trap (if enabled).
- */
-1:
-       move    t1, t5                          # get unrounded exponent
-       move    t2, t6                          # get unrounded fraction
-       li      t9, SEXP_MIN                    # compute shift amount
-       subu    t9, t9, t1                      # shift t2,t8 right by t9
-       blt     t9, SFRAC_BITS+2, 3f            # shift all the bits out?
-       move    t1, zero                        # result is inexact zero
-       move    t2, zero
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-/*
- * Now round the zero result.
- * Only need to worry about rounding to +- infinity when the sign matches.
- */
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, inexact_nobias_s      # round to nearest
-       beq     v0, FPC_ROUND_RZ, inexact_nobias_s      # round to zero
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, inexact_nobias_s      # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, inexact_nobias_s      # if sign is negative, truncate
-2:
-       addu    t2, t2, 1                       # add rounding bit
-       b       inexact_nobias_s
-3:
-       li      v1, 32
-       subu    v1, v1, t9
-       sltu    v0, zero, t8                    # be sure to save any one bits
-       sll     t8, t2, v1                      # save bits shifted out
-       or      t8, t8, v0                      # include sticky bits
-       srl     t2, t2, t9
-/*
- * Now round the denormalized result.
- */
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 5f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, 5f                    # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, 5f                    # if sign is negative, truncate
-2:
-       beq     t8, zero, 5f                    # if exact, continue
-       addu    t2, t2, 1                       # add rounding bit
-       b       5f
-3:
-       li      v0, GUARDBIT                    # load guard bit for rounding
-       addu    v0, v0, t8                      # add remainder
-       sltu    v1, v0, t8                      # compute carry out
-       beq     v1, zero, 4f                    # if no carry, continue
-       addu    t2, t2, 1                       # add carry to result
-4:
-       bne     v0, zero, 5f                    # if rounded remainder is zero
-       and     t2, t2, ~1                      #  clear LSB (round to nearest)
-5:
-       move    t1, zero                        # denorm or zero exponent
-       jal     set_fd_s                        # save result
-       beq     t8, zero, done                  # check for exact result
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-       or      a1, a1, FPC_EXCEPTION_INEXACT | FPC_STICKY_INEXACT
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       b       done
-
-/*
- * Determine the amount to shift the fraction in order to restore the
- * normalized position. After that, round and handle exceptions.
- */
-norm_d:
-       move    v0, t2
-       move    t9, zero                        # t9 = num of leading zeros
-       bne     t2, zero, 1f
-       move    v0, t3
-       addu    t9, 32
-       bne     t3, zero, 1f
-       move    v0, t8
-       addu    t9, 32
-1:
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2,t3,t8 the correct number of bits.
- */
-1:
-       subu    t9, t9, DLEAD_ZEROS             # dont count leading zeros
-       subu    t1, t1, t9                      # adjust the exponent
-       beq     t9, zero, norm_noshift_d
-       li      v1, 32
-       blt     t9, zero, 2f                    # if shift < 0, shift right
-       blt     t9, v1, 1f                      # shift by < 32?
-       subu    t9, t9, v1                      # shift by >= 32
-       subu    v1, v1, t9
-       sll     t2, t3, t9                      # shift left by t9
-       srl     v0, t8, v1                      # save bits shifted out
-       or      t2, t2, v0
-       sll     t3, t8, t9
-       move    t8, zero
-       b       norm_noshift_d
-1:
-       subu    v1, v1, t9
-       sll     t2, t2, t9                      # shift left by t9
-       srl     v0, t3, v1                      # save bits shifted out
-       or      t2, t2, v0
-       sll     t3, t3, t9
-       srl     v0, t8, v1                      # save bits shifted out
-       or      t3, t3, v0
-       sll     t8, t8, t9
-       b       norm_noshift_d
-2:
-       negu    t9                              # shift right by t9
-       subu    v1, v1, t9                      #  (known to be < 32 bits)
-       sll     v0, t8, v1                      # save bits shifted out
-       sltu    v0, zero, v0                    # be sure to save any one bits
-       srl     t8, t8, t9
-       or      t8, t8, v0
-       sll     v0, t3, v1                      # save bits shifted out
-       or      t8, t8, v0
-       srl     t3, t3, t9
-       sll     v0, t2, v1                      # save bits shifted out
-       or      t3, t3, v0
-       srl     t2, t2, t9
-norm_noshift_d:
-       move    t5, t1                          # save unrounded exponent
-       move    t6, t2                          # save unrounded fraction (MS)
-       move    t7, t3                          # save unrounded fraction (LS)
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 5f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, 5f                    # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, 5f                    # if sign is negative, truncate
-2:
-       beq     t8, zero, 5f                    # if exact, continue
-       addu    t3, t3, 1                       # add rounding bit
-       bne     t3, zero, 5f                    # branch if no carry
-       addu    t2, t2, 1                       # add carry
-       bne     t2, DIMPL_ONE<<1, 5f            # need to adjust exponent?
-       addu    t1, t1, 1                       # adjust exponent
-       srl     t2, t2, 1                       # renormalize fraction
-       b       5f
-3:
-       li      v0, GUARDBIT                    # load guard bit for rounding
-       addu    v0, v0, t8                      # add remainder
-       sltu    v1, v0, t8                      # compute carry out
-       beq     v1, zero, 4f                    # branch if no carry
-       addu    t3, t3, 1                       # add carry
-       bne     t3, zero, 4f                    # branch if no carry
-       addu    t2, t2, 1                       # add carry to result
-       bne     t2, DIMPL_ONE<<1, 4f            # need to adjust exponent?
-       addu    t1, t1, 1                       # adjust exponent
-       srl     t2, t2, 1                       # renormalize fraction
-4:
-       bne     v0, zero, 5f                    # if rounded remainder is zero
-       and     t3, t3, ~1                      #  clear LSB (round to nearest)
-5:
-       bgt     t1, DEXP_MAX, overflow_d        # overflow?
-       blt     t1, DEXP_MIN, underflow_d       # underflow?
-       bne     t8, zero, inexact_d             # is result inexact?
-       addu    t1, t1, DEXP_BIAS               # bias exponent
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-       b       result_fs_d
-
-/*
- * Handle inexact exception.
- */
-inexact_d:
-       addu    t1, t1, DEXP_BIAS               # bias exponent
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-inexact_nobias_d:
-       jal     set_fd_d                        # save result
-       or      a1, a1, FPC_EXCEPTION_INEXACT | FPC_STICKY_INEXACT
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       b       done
-
-/*
- * Overflow will trap (if enabled),
- * or generate an inexact trap (if enabled),
- * or generate an infinity.
- */
-overflow_d:
-       or      a1, a1, FPC_EXCEPTION_OVERFLOW | FPC_STICKY_OVERFLOW
-       and     v0, a1, FPC_ENABLE_OVERFLOW
-       beq     v0, zero, 1f
-       subu    t1, t1, 1536                    # bias exponent
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-       jal     set_fd_d                        # save result
-       b       fpe_trap
-1:
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 1f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 2f    # round to +infinity
-       bne     t0, zero, 3f
-1:
-       li      t1, DEXP_MAX                    # result is max finite
-       li      t2, 0x000fffff
-       li      t3, 0xffffffff
-       b       inexact_d
-2:
-       bne     t0, zero, 1b
-3:
-       li      t1, DEXP_MAX + 1                # result is infinity
-       move    t2, zero
-       move    t3, zero
-       b       inexact_d
-
-/*
- * In this implementation, "tininess" is detected "after rounding" and
- * "loss of accuracy" is detected as "an inexact result".
- */
-underflow_d:
-       and     v0, a1, FPC_ENABLE_UNDERFLOW
-       beq     v0, zero, 1f
-/*
- * Underflow is enabled so compute the result and trap.
- */
-       addu    t1, t1, 1536                    # bias exponent
-       and     t2, t2, ~DIMPL_ONE              # clear implied one bit
-       jal     set_fd_d                        # save result
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-       b       fpe_trap
-/*
- * Underflow is not enabled so compute the result,
- * signal inexact result (if it is) and trap (if enabled).
- */
-1:
-       move    t1, t5                          # get unrounded exponent
-       move    t2, t6                          # get unrounded fraction (MS)
-       move    t3, t7                          # get unrounded fraction (LS)
-       li      t9, DEXP_MIN                    # compute shift amount
-       subu    t9, t9, t1                      # shift t2,t8 right by t9
-       blt     t9, DFRAC_BITS+2, 3f            # shift all the bits out?
-       move    t1, zero                        # result is inexact zero
-       move    t2, zero
-       move    t3, zero
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-/*
- * Now round the zero result.
- * Only need to worry about rounding to +- infinity when the sign matches.
- */
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, inexact_nobias_d      # round to nearest
-       beq     v0, FPC_ROUND_RZ, inexact_nobias_d      # round to zero
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, inexact_nobias_d      # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, inexact_nobias_d      # if sign is negative, truncate
-2:
-       addu    t3, t3, 1                       # add rounding bit
-       b       inexact_nobias_d
-3:
-       li      v1, 32
-       blt     t9, v1, 1f                      # shift by < 32?
-       subu    t9, t9, v1                      # shift right by >= 32
-       subu    v1, v1, t9
-       sltu    v0, zero, t8                    # be sure to save any one bits
-       sll     t8, t2, v1                      # save bits shifted out
-       or      t8, t8, v0                      # include sticky bits
-       srl     t3, t2, t9
-       move    t2, zero
-       b       2f
-1:
-       subu    v1, v1, t9                      # shift right by t9
-       sltu    v0, zero, t8                    # be sure to save any one bits
-       sll     t8, t3, v1                      # save bits shifted out
-       or      t8, t8, v0                      # include sticky bits
-       srl     t3, t3, t9
-       sll     v0, t2, v1                      # save bits shifted out
-       or      t3, t3, v0
-       srl     t2, t2, t9
-/*
- * Now round the denormalized result.
- */
-2:
-       and     v0, a1, FPC_ROUNDING_BITS       # get rounding mode
-       beq     v0, FPC_ROUND_RN, 3f    # round to nearest
-       beq     v0, FPC_ROUND_RZ, 5f    # round to zero (truncate)
-       beq     v0, FPC_ROUND_RP, 1f    # round to +infinity
-       beq     t0, zero, 5f                    # if sign is positive, truncate
-       b       2f
-1:
-       bne     t0, zero, 5f                    # if sign is negative, truncate
-2:
-       beq     t8, zero, 5f                    # if exact, continue
-       addu    t3, t3, 1                       # add rounding bit
-       bne     t3, zero, 5f                    # if no carry, continue
-       addu    t2, t2, 1                       # add carry
-       b       5f
-3:
-       li      v0, GUARDBIT                    # load guard bit for rounding
-       addu    v0, v0, t8                      # add remainder
-       sltu    v1, v0, t8                      # compute carry out
-       beq     v1, zero, 4f                    # if no carry, continue
-       addu    t3, t3, 1                       # add rounding bit
-       bne     t3, zero, 4f                    # if no carry, continue
-       addu    t2, t2, 1                       # add carry
-4:
-       bne     v0, zero, 5f                    # if rounded remainder is zero
-       and     t3, t3, ~1                      #  clear LSB (round to nearest)
-5:
-       move    t1, zero                        # denorm or zero exponent
-       jal     set_fd_d                        # save result
-       beq     t8, zero, done                  # check for exact result
-       or      a1, a1, FPC_EXCEPTION_UNDERFLOW | FPC_STICKY_UNDERFLOW
-       or      a1, a1, FPC_EXCEPTION_INEXACT | FPC_STICKY_INEXACT
-       and     v0, a1, FPC_ENABLE_INEXACT
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       b       done
-
-/*
- * Signal an invalid operation if the trap is enabled; otherwise,
- * the result is a quiet NAN.
- */
-invalid_s:                                     # trap invalid operation
-       or      a1, a1, FPC_EXCEPTION_INVALID | FPC_STICKY_INVALID
-       and     v0, a1, FPC_ENABLE_INVALID
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       move    t0, zero                        # result is a quiet NAN
-       li      t1, SEXP_INF
-       li      t2, SQUIET_NAN
-       jal     set_fd_s                        # save result (in t0,t1,t2)
-       b       done
-
-/*
- * Signal an invalid operation if the trap is enabled; otherwise,
- * the result is a quiet NAN.
- */
-invalid_d:                                     # trap invalid operation
-       or      a1, a1, FPC_EXCEPTION_INVALID | FPC_STICKY_INVALID
-       and     v0, a1, FPC_ENABLE_INVALID
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       move    t0, zero                        # result is a quiet NAN
-       li      t1, DEXP_INF
-       li      t2, DQUIET_NAN0
-       li      t3, DQUIET_NAN1
-       jal     set_fd_d                        # save result (in t0,t1,t2,t3)
-       b       done
-
-/*
- * Signal an invalid operation if the trap is enabled; otherwise,
- * the result is INT_MAX or INT_MIN.
- */
-invalid_w:                                     # trap invalid operation
-       or      a1, a1, FPC_EXCEPTION_INVALID | FPC_STICKY_INVALID
-       and     v0, a1, FPC_ENABLE_INVALID
-       bne     v0, zero, fpe_trap
-       ctc1    a1, FPC_CSR             # save exceptions
-       bne     t0, zero, 1f
-       li      t2, INT_MAX                     # result is INT_MAX
-       b       result_fs_w
-1:
-       li      t2, INT_MIN                     # result is INT_MIN
-       b       result_fs_w
-
-/*
- * Trap if the hardware should have handled this case.
- */
-fpe_trap:
-       move    a2, a1                          # code = FP CSR
-       ctc1    a1, FPC_CSR             # save exceptions
-       break   0
-
-/*
- * Send an illegal instruction signal to the current process.
- */
-ill:
-       ctc1    a1, FPC_CSR             # save exceptions
-       move    a2, a0                          # code = FP instruction
-       break   0
-
-result_ft_s:
-       move    t0, t4                          # result is FT
-       move    t1, t5
-       move    t2, t6
-result_fs_s:                                   # result is FS
-       jal     set_fd_s                        # save result (in t0,t1,t2)
-       b       done
-
-result_fs_w:
-       jal     set_fd_word                     # save result (in t2)
-       b       done
-
-result_ft_d:
-       move    t0, t4                          # result is FT
-       move    t1, t5
-       move    t2, t6
-       move    t3, t7
-result_fs_d:                                   # result is FS
-       jal     set_fd_d                        # save result (in t0,t1,t2,t3)
-
-done:
-       lw      ra, STAND_RA_OFFSET(sp)
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-END(MachEmulateFP)
-
-/*----------------------------------------------------------------------------
- * get_fs_int --
- *
- *     Read (integer) the FS register (bits 15-11).
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the sign
- *     t2      contains the fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(get_fs_int)
-       srl     a3, a0, 12 - 2                  # get FS field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FS field
-       lw      a3, get_fs_int_tbl(a3)          # switch on register number
-       j       a3
-
-       .rdata
-get_fs_int_tbl:
-       .word   get_fs_int_f0
-       .word   get_fs_int_f2
-       .word   get_fs_int_f4
-       .word   get_fs_int_f6
-       .word   get_fs_int_f8
-       .word   get_fs_int_f10
-       .word   get_fs_int_f12
-       .word   get_fs_int_f14
-       .word   get_fs_int_f16
-       .word   get_fs_int_f18
-       .word   get_fs_int_f20
-       .word   get_fs_int_f22
-       .word   get_fs_int_f24
-       .word   get_fs_int_f26
-       .word   get_fs_int_f28
-       .word   get_fs_int_f30
-       .text
-
-get_fs_int_f0:
-       mfc1    t2, $f0
-       b       get_fs_int_done
-get_fs_int_f2:
-       mfc1    t2, $f2
-       b       get_fs_int_done
-get_fs_int_f4:
-       mfc1    t2, $f4
-       b       get_fs_int_done
-get_fs_int_f6:
-       mfc1    t2, $f6
-       b       get_fs_int_done
-get_fs_int_f8:
-       mfc1    t2, $f8
-       b       get_fs_int_done
-get_fs_int_f10:
-       mfc1    t2, $f10
-       b       get_fs_int_done
-get_fs_int_f12:
-       mfc1    t2, $f12
-       b       get_fs_int_done
-get_fs_int_f14:
-       mfc1    t2, $f14
-       b       get_fs_int_done
-get_fs_int_f16:
-       mfc1    t2, $f16
-       b       get_fs_int_done
-get_fs_int_f18:
-       mfc1    t2, $f18
-       b       get_fs_int_done
-get_fs_int_f20:
-       mfc1    t2, $f20
-       b       get_fs_int_done
-get_fs_int_f22:
-       mfc1    t2, $f22
-       b       get_fs_int_done
-get_fs_int_f24:
-       mfc1    t2, $f24
-       b       get_fs_int_done
-get_fs_int_f26:
-       mfc1    t2, $f26
-       b       get_fs_int_done
-get_fs_int_f28:
-       mfc1    t2, $f28
-       b       get_fs_int_done
-get_fs_int_f30:
-       mfc1    t2, $f30
-get_fs_int_done:
-       srl     t0, t2, 31              # init the sign bit
-       bge     t2, zero, 1f
-       negu    t2
-1:
-       j       ra
-END(get_fs_int)
-
-/*----------------------------------------------------------------------------
- * get_ft_fs_s --
- *
- *     Read (single precision) the FT register (bits 20-16) and
- *     the FS register (bits 15-11) and break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the FS sign
- *     t1      contains the FS (biased) exponent
- *     t2      contains the FS fraction
- *     t4      contains the FT sign
- *     t5      contains the FT (biased) exponent
- *     t6      contains the FT fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(get_ft_fs_s)
-       srl     a3, a0, 17 - 2                  # get FT field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FT field
-       lw      a3, get_ft_s_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-get_ft_s_tbl:
-       .word   get_ft_s_f0
-       .word   get_ft_s_f2
-       .word   get_ft_s_f4
-       .word   get_ft_s_f6
-       .word   get_ft_s_f8
-       .word   get_ft_s_f10
-       .word   get_ft_s_f12
-       .word   get_ft_s_f14
-       .word   get_ft_s_f16
-       .word   get_ft_s_f18
-       .word   get_ft_s_f20
-       .word   get_ft_s_f22
-       .word   get_ft_s_f24
-       .word   get_ft_s_f26
-       .word   get_ft_s_f28
-       .word   get_ft_s_f30
-       .text
-
-get_ft_s_f0:
-       mfc1    t4, $f0
-       b       get_ft_s_done
-get_ft_s_f2:
-       mfc1    t4, $f2
-       b       get_ft_s_done
-get_ft_s_f4:
-       mfc1    t4, $f4
-       b       get_ft_s_done
-get_ft_s_f6:
-       mfc1    t4, $f6
-       b       get_ft_s_done
-get_ft_s_f8:
-       mfc1    t4, $f8
-       b       get_ft_s_done
-get_ft_s_f10:
-       mfc1    t4, $f10
-       b       get_ft_s_done
-get_ft_s_f12:
-       mfc1    t4, $f12
-       b       get_ft_s_done
-get_ft_s_f14:
-       mfc1    t4, $f14
-       b       get_ft_s_done
-get_ft_s_f16:
-       mfc1    t4, $f16
-       b       get_ft_s_done
-get_ft_s_f18:
-       mfc1    t4, $f18
-       b       get_ft_s_done
-get_ft_s_f20:
-       mfc1    t4, $f20
-       b       get_ft_s_done
-get_ft_s_f22:
-       mfc1    t4, $f22
-       b       get_ft_s_done
-get_ft_s_f24:
-       mfc1    t4, $f24
-       b       get_ft_s_done
-get_ft_s_f26:
-       mfc1    t4, $f26
-       b       get_ft_s_done
-get_ft_s_f28:
-       mfc1    t4, $f28
-       b       get_ft_s_done
-get_ft_s_f30:
-       mfc1    t4, $f30
-get_ft_s_done:
-       srl     t5, t4, 23                      # get exponent
-       and     t5, t5, 0xFF
-       and     t6, t4, 0x7FFFFF                # get fraction
-       srl     t4, t4, 31                      # get sign
-       bne     t5, SEXP_INF, 1f                # is it a signaling NAN?
-       and     v0, t6, SSIGNAL_NAN
-       bne     v0, zero, invalid_s
-1:
-       /* fall through to get FS */
-
-/*----------------------------------------------------------------------------
- * get_fs_s --
- *
- *     Read (single precision) the FS register (bits 15-11) and
- *     break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *
- *----------------------------------------------------------------------------
- */
-ALEAF(get_fs_s)
-       srl     a3, a0, 12 - 2                  # get FS field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FS field
-       lw      a3, get_fs_s_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-get_fs_s_tbl:
-       .word   get_fs_s_f0
-       .word   get_fs_s_f2
-       .word   get_fs_s_f4
-       .word   get_fs_s_f6
-       .word   get_fs_s_f8
-       .word   get_fs_s_f10
-       .word   get_fs_s_f12
-       .word   get_fs_s_f14
-       .word   get_fs_s_f16
-       .word   get_fs_s_f18
-       .word   get_fs_s_f20
-       .word   get_fs_s_f22
-       .word   get_fs_s_f24
-       .word   get_fs_s_f26
-       .word   get_fs_s_f28
-       .word   get_fs_s_f30
-       .text
-
-get_fs_s_f0:
-       mfc1    t0, $f0
-       b       get_fs_s_done
-get_fs_s_f2:
-       mfc1    t0, $f2
-       b       get_fs_s_done
-get_fs_s_f4:
-       mfc1    t0, $f4
-       b       get_fs_s_done
-get_fs_s_f6:
-       mfc1    t0, $f6
-       b       get_fs_s_done
-get_fs_s_f8:
-       mfc1    t0, $f8
-       b       get_fs_s_done
-get_fs_s_f10:
-       mfc1    t0, $f10
-       b       get_fs_s_done
-get_fs_s_f12:
-       mfc1    t0, $f12
-       b       get_fs_s_done
-get_fs_s_f14:
-       mfc1    t0, $f14
-       b       get_fs_s_done
-get_fs_s_f16:
-       mfc1    t0, $f16
-       b       get_fs_s_done
-get_fs_s_f18:
-       mfc1    t0, $f18
-       b       get_fs_s_done
-get_fs_s_f20:
-       mfc1    t0, $f20
-       b       get_fs_s_done
-get_fs_s_f22:
-       mfc1    t0, $f22
-       b       get_fs_s_done
-get_fs_s_f24:
-       mfc1    t0, $f24
-       b       get_fs_s_done
-get_fs_s_f26:
-       mfc1    t0, $f26
-       b       get_fs_s_done
-get_fs_s_f28:
-       mfc1    t0, $f28
-       b       get_fs_s_done
-get_fs_s_f30:
-       mfc1    t0, $f30
-get_fs_s_done:
-       srl     t1, t0, 23                      # get exponent
-       and     t1, t1, 0xFF
-       and     t2, t0, 0x7FFFFF                # get fraction
-       srl     t0, t0, 31                      # get sign
-       bne     t1, SEXP_INF, 1f                # is it a signaling NAN?
-       and     v0, t2, SSIGNAL_NAN
-       bne     v0, zero, invalid_s
-1:
-       j       ra
-END(get_ft_fs_s)
-
-/*----------------------------------------------------------------------------
- * get_ft_fs_d --
- *
- *     Read (double precision) the FT register (bits 20-16) and
- *     the FS register (bits 15-11) and break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the FS sign
- *     t1      contains the FS (biased) exponent
- *     t2      contains the FS fraction
- *     t3      contains the FS remaining fraction
- *     t4      contains the FT sign
- *     t5      contains the FT (biased) exponent
- *     t6      contains the FT fraction
- *     t7      contains the FT remaining fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(get_ft_fs_d)
-       srl     a3, a0, 17 - 2                  # get FT field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FT field
-       lw      a3, get_ft_d_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-get_ft_d_tbl:
-       .word   get_ft_d_f0
-       .word   get_ft_d_f2
-       .word   get_ft_d_f4
-       .word   get_ft_d_f6
-       .word   get_ft_d_f8
-       .word   get_ft_d_f10
-       .word   get_ft_d_f12
-       .word   get_ft_d_f14
-       .word   get_ft_d_f16
-       .word   get_ft_d_f18
-       .word   get_ft_d_f20
-       .word   get_ft_d_f22
-       .word   get_ft_d_f24
-       .word   get_ft_d_f26
-       .word   get_ft_d_f28
-       .word   get_ft_d_f30
-       .text
-
-get_ft_d_f0:
-       mfc1    t7, $f0
-       mfc1    t4, $f1
-       b       get_ft_d_done
-get_ft_d_f2:
-       mfc1    t7, $f2
-       mfc1    t4, $f3
-       b       get_ft_d_done
-get_ft_d_f4:
-       mfc1    t7, $f4
-       mfc1    t4, $f5
-       b       get_ft_d_done
-get_ft_d_f6:
-       mfc1    t7, $f6
-       mfc1    t4, $f7
-       b       get_ft_d_done
-get_ft_d_f8:
-       mfc1    t7, $f8
-       mfc1    t4, $f9
-       b       get_ft_d_done
-get_ft_d_f10:
-       mfc1    t7, $f10
-       mfc1    t4, $f11
-       b       get_ft_d_done
-get_ft_d_f12:
-       mfc1    t7, $f12
-       mfc1    t4, $f13
-       b       get_ft_d_done
-get_ft_d_f14:
-       mfc1    t7, $f14
-       mfc1    t4, $f15
-       b       get_ft_d_done
-get_ft_d_f16:
-       mfc1    t7, $f16
-       mfc1    t4, $f17
-       b       get_ft_d_done
-get_ft_d_f18:
-       mfc1    t7, $f18
-       mfc1    t4, $f19
-       b       get_ft_d_done
-get_ft_d_f20:
-       mfc1    t7, $f20
-       mfc1    t4, $f21
-       b       get_ft_d_done
-get_ft_d_f22:
-       mfc1    t7, $f22
-       mfc1    t4, $f23
-       b       get_ft_d_done
-get_ft_d_f24:
-       mfc1    t7, $f24
-       mfc1    t4, $f25
-       b       get_ft_d_done
-get_ft_d_f26:
-       mfc1    t7, $f26
-       mfc1    t4, $f27
-       b       get_ft_d_done
-get_ft_d_f28:
-       mfc1    t7, $f28
-       mfc1    t4, $f29
-       b       get_ft_d_done
-get_ft_d_f30:
-       mfc1    t7, $f30
-       mfc1    t4, $f31
-get_ft_d_done:
-       srl     t5, t4, 20                      # get exponent
-       and     t5, t5, 0x7FF
-       and     t6, t4, 0xFFFFF                 # get fraction
-       srl     t4, t4, 31                      # get sign
-       bne     t5, DEXP_INF, 1f                # is it a signaling NAN?
-       and     v0, t6, DSIGNAL_NAN
-       bne     v0, zero, invalid_d
-1:
-       /* fall through to get FS */
-
-/*----------------------------------------------------------------------------
- * get_fs_d --
- *
- *     Read (double precision) the FS register (bits 15-11) and
- *     break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *     t3      contains the remaining fraction
- *
- *----------------------------------------------------------------------------
- */
-ALEAF(get_fs_d)
-       srl     a3, a0, 12 - 2                  # get FS field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FS field
-       lw      a3, get_fs_d_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-get_fs_d_tbl:
-       .word   get_fs_d_f0
-       .word   get_fs_d_f2
-       .word   get_fs_d_f4
-       .word   get_fs_d_f6
-       .word   get_fs_d_f8
-       .word   get_fs_d_f10
-       .word   get_fs_d_f12
-       .word   get_fs_d_f14
-       .word   get_fs_d_f16
-       .word   get_fs_d_f18
-       .word   get_fs_d_f20
-       .word   get_fs_d_f22
-       .word   get_fs_d_f24
-       .word   get_fs_d_f26
-       .word   get_fs_d_f28
-       .word   get_fs_d_f30
-       .text
-
-get_fs_d_f0:
-       mfc1    t3, $f0
-       mfc1    t0, $f1
-       b       get_fs_d_done
-get_fs_d_f2:
-       mfc1    t3, $f2
-       mfc1    t0, $f3
-       b       get_fs_d_done
-get_fs_d_f4:
-       mfc1    t3, $f4
-       mfc1    t0, $f5
-       b       get_fs_d_done
-get_fs_d_f6:
-       mfc1    t3, $f6
-       mfc1    t0, $f7
-       b       get_fs_d_done
-get_fs_d_f8:
-       mfc1    t3, $f8
-       mfc1    t0, $f9
-       b       get_fs_d_done
-get_fs_d_f10:
-       mfc1    t3, $f10
-       mfc1    t0, $f11
-       b       get_fs_d_done
-get_fs_d_f12:
-       mfc1    t3, $f12
-       mfc1    t0, $f13
-       b       get_fs_d_done
-get_fs_d_f14:
-       mfc1    t3, $f14
-       mfc1    t0, $f15
-       b       get_fs_d_done
-get_fs_d_f16:
-       mfc1    t3, $f16
-       mfc1    t0, $f17
-       b       get_fs_d_done
-get_fs_d_f18:
-       mfc1    t3, $f18
-       mfc1    t0, $f19
-       b       get_fs_d_done
-get_fs_d_f20:
-       mfc1    t3, $f20
-       mfc1    t0, $f21
-       b       get_fs_d_done
-get_fs_d_f22:
-       mfc1    t3, $f22
-       mfc1    t0, $f23
-       b       get_fs_d_done
-get_fs_d_f24:
-       mfc1    t3, $f24
-       mfc1    t0, $f25
-       b       get_fs_d_done
-get_fs_d_f26:
-       mfc1    t3, $f26
-       mfc1    t0, $f27
-       b       get_fs_d_done
-get_fs_d_f28:
-       mfc1    t3, $f28
-       mfc1    t0, $f29
-       b       get_fs_d_done
-get_fs_d_f30:
-       mfc1    t3, $f30
-       mfc1    t0, $f31
-get_fs_d_done:
-       srl     t1, t0, 20                      # get exponent
-       and     t1, t1, 0x7FF
-       and     t2, t0, 0xFFFFF                 # get fraction
-       srl     t0, t0, 31                      # get sign
-       bne     t1, DEXP_INF, 1f                # is it a signaling NAN?
-       and     v0, t2, DSIGNAL_NAN
-       bne     v0, zero, invalid_d
-1:
-       j       ra
-END(get_ft_fs_d)
-
-/*----------------------------------------------------------------------------
- * get_cmp_s --
- *
- *     Read (single precision) the FS register (bits 15-11) and
- *     the FT register (bits 20-16) and break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *     t4      contains the sign
- *     t5      contains the (biased) exponent
- *     t6      contains the fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(get_cmp_s)
-       srl     a3, a0, 12 - 2                  # get FS field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FS field
-       lw      a3, cmp_fs_s_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-cmp_fs_s_tbl:
-       .word   cmp_fs_s_f0
-       .word   cmp_fs_s_f2
-       .word   cmp_fs_s_f4
-       .word   cmp_fs_s_f6
-       .word   cmp_fs_s_f8
-       .word   cmp_fs_s_f10
-       .word   cmp_fs_s_f12
-       .word   cmp_fs_s_f14
-       .word   cmp_fs_s_f16
-       .word   cmp_fs_s_f18
-       .word   cmp_fs_s_f20
-       .word   cmp_fs_s_f22
-       .word   cmp_fs_s_f24
-       .word   cmp_fs_s_f26
-       .word   cmp_fs_s_f28
-       .word   cmp_fs_s_f30
-       .text
-
-cmp_fs_s_f0:
-       mfc1    t0, $f0
-       b       cmp_fs_s_done
-cmp_fs_s_f2:
-       mfc1    t0, $f2
-       b       cmp_fs_s_done
-cmp_fs_s_f4:
-       mfc1    t0, $f4
-       b       cmp_fs_s_done
-cmp_fs_s_f6:
-       mfc1    t0, $f6
-       b       cmp_fs_s_done
-cmp_fs_s_f8:
-       mfc1    t0, $f8
-       b       cmp_fs_s_done
-cmp_fs_s_f10:
-       mfc1    t0, $f10
-       b       cmp_fs_s_done
-cmp_fs_s_f12:
-       mfc1    t0, $f12
-       b       cmp_fs_s_done
-cmp_fs_s_f14:
-       mfc1    t0, $f14
-       b       cmp_fs_s_done
-cmp_fs_s_f16:
-       mfc1    t0, $f16
-       b       cmp_fs_s_done
-cmp_fs_s_f18:
-       mfc1    t0, $f18
-       b       cmp_fs_s_done
-cmp_fs_s_f20:
-       mfc1    t0, $f20
-       b       cmp_fs_s_done
-cmp_fs_s_f22:
-       mfc1    t0, $f22
-       b       cmp_fs_s_done
-cmp_fs_s_f24:
-       mfc1    t0, $f24
-       b       cmp_fs_s_done
-cmp_fs_s_f26:
-       mfc1    t0, $f26
-       b       cmp_fs_s_done
-cmp_fs_s_f28:
-       mfc1    t0, $f28
-       b       cmp_fs_s_done
-cmp_fs_s_f30:
-       mfc1    t0, $f30
-cmp_fs_s_done:
-       srl     t1, t0, 23                      # get exponent
-       and     t1, t1, 0xFF
-       and     t2, t0, 0x7FFFFF                # get fraction
-       srl     t0, t0, 31                      # get sign
-
-       srl     a3, a0, 17 - 2                  # get FT field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FT field
-       lw      a3, cmp_ft_s_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-cmp_ft_s_tbl:
-       .word   cmp_ft_s_f0
-       .word   cmp_ft_s_f2
-       .word   cmp_ft_s_f4
-       .word   cmp_ft_s_f6
-       .word   cmp_ft_s_f8
-       .word   cmp_ft_s_f10
-       .word   cmp_ft_s_f12
-       .word   cmp_ft_s_f14
-       .word   cmp_ft_s_f16
-       .word   cmp_ft_s_f18
-       .word   cmp_ft_s_f20
-       .word   cmp_ft_s_f22
-       .word   cmp_ft_s_f24
-       .word   cmp_ft_s_f26
-       .word   cmp_ft_s_f28
-       .word   cmp_ft_s_f30
-       .text
-
-cmp_ft_s_f0:
-       mfc1    t4, $f0
-       b       cmp_ft_s_done
-cmp_ft_s_f2:
-       mfc1    t4, $f2
-       b       cmp_ft_s_done
-cmp_ft_s_f4:
-       mfc1    t4, $f4
-       b       cmp_ft_s_done
-cmp_ft_s_f6:
-       mfc1    t4, $f6
-       b       cmp_ft_s_done
-cmp_ft_s_f8:
-       mfc1    t4, $f8
-       b       cmp_ft_s_done
-cmp_ft_s_f10:
-       mfc1    t4, $f10
-       b       cmp_ft_s_done
-cmp_ft_s_f12:
-       mfc1    t4, $f12
-       b       cmp_ft_s_done
-cmp_ft_s_f14:
-       mfc1    t4, $f14
-       b       cmp_ft_s_done
-cmp_ft_s_f16:
-       mfc1    t4, $f16
-       b       cmp_ft_s_done
-cmp_ft_s_f18:
-       mfc1    t4, $f18
-       b       cmp_ft_s_done
-cmp_ft_s_f20:
-       mfc1    t4, $f20
-       b       cmp_ft_s_done
-cmp_ft_s_f22:
-       mfc1    t4, $f22
-       b       cmp_ft_s_done
-cmp_ft_s_f24:
-       mfc1    t4, $f24
-       b       cmp_ft_s_done
-cmp_ft_s_f26:
-       mfc1    t4, $f26
-       b       cmp_ft_s_done
-cmp_ft_s_f28:
-       mfc1    t4, $f28
-       b       cmp_ft_s_done
-cmp_ft_s_f30:
-       mfc1    t4, $f30
-cmp_ft_s_done:
-       srl     t5, t4, 23                      # get exponent
-       and     t5, t5, 0xFF
-       and     t6, t4, 0x7FFFFF                # get fraction
-       srl     t4, t4, 31                      # get sign
-       j       ra
-END(get_cmp_s)
-
-/*----------------------------------------------------------------------------
- * get_cmp_d --
- *
- *     Read (double precision) the FS register (bits 15-11) and
- *     the FT register (bits 20-16) and break up into fields.
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Results:
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *     t3      contains the remaining fraction
- *     t4      contains the sign
- *     t5      contains the (biased) exponent
- *     t6      contains the fraction
- *     t7      contains the remaining fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(get_cmp_d)
-       srl     a3, a0, 12 - 2                  # get FS field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FS field
-       lw      a3, cmp_fs_d_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-cmp_fs_d_tbl:
-       .word   cmp_fs_d_f0
-       .word   cmp_fs_d_f2
-       .word   cmp_fs_d_f4
-       .word   cmp_fs_d_f6
-       .word   cmp_fs_d_f8
-       .word   cmp_fs_d_f10
-       .word   cmp_fs_d_f12
-       .word   cmp_fs_d_f14
-       .word   cmp_fs_d_f16
-       .word   cmp_fs_d_f18
-       .word   cmp_fs_d_f20
-       .word   cmp_fs_d_f22
-       .word   cmp_fs_d_f24
-       .word   cmp_fs_d_f26
-       .word   cmp_fs_d_f28
-       .word   cmp_fs_d_f30
-       .text
-
-cmp_fs_d_f0:
-       mfc1    t3, $f0
-       mfc1    t0, $f1
-       b       cmp_fs_d_done
-cmp_fs_d_f2:
-       mfc1    t3, $f2
-       mfc1    t0, $f3
-       b       cmp_fs_d_done
-cmp_fs_d_f4:
-       mfc1    t3, $f4
-       mfc1    t0, $f5
-       b       cmp_fs_d_done
-cmp_fs_d_f6:
-       mfc1    t3, $f6
-       mfc1    t0, $f7
-       b       cmp_fs_d_done
-cmp_fs_d_f8:
-       mfc1    t3, $f8
-       mfc1    t0, $f9
-       b       cmp_fs_d_done
-cmp_fs_d_f10:
-       mfc1    t3, $f10
-       mfc1    t0, $f11
-       b       cmp_fs_d_done
-cmp_fs_d_f12:
-       mfc1    t3, $f12
-       mfc1    t0, $f13
-       b       cmp_fs_d_done
-cmp_fs_d_f14:
-       mfc1    t3, $f14
-       mfc1    t0, $f15
-       b       cmp_fs_d_done
-cmp_fs_d_f16:
-       mfc1    t3, $f16
-       mfc1    t0, $f17
-       b       cmp_fs_d_done
-cmp_fs_d_f18:
-       mfc1    t3, $f18
-       mfc1    t0, $f19
-       b       cmp_fs_d_done
-cmp_fs_d_f20:
-       mfc1    t3, $f20
-       mfc1    t0, $f21
-       b       cmp_fs_d_done
-cmp_fs_d_f22:
-       mfc1    t3, $f22
-       mfc1    t0, $f23
-       b       cmp_fs_d_done
-cmp_fs_d_f24:
-       mfc1    t3, $f24
-       mfc1    t0, $f25
-       b       cmp_fs_d_done
-cmp_fs_d_f26:
-       mfc1    t3, $f26
-       mfc1    t0, $f27
-       b       cmp_fs_d_done
-cmp_fs_d_f28:
-       mfc1    t3, $f28
-       mfc1    t0, $f29
-       b       cmp_fs_d_done
-cmp_fs_d_f30:
-       mfc1    t3, $f30
-       mfc1    t0, $f31
-cmp_fs_d_done:
-       srl     t1, t0, 20                      # get exponent
-       and     t1, t1, 0x7FF
-       and     t2, t0, 0xFFFFF                 # get fraction
-       srl     t0, t0, 31                      # get sign
-
-       srl     a3, a0, 17 - 2                  # get FT field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FT field
-       lw      a3, cmp_ft_d_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-cmp_ft_d_tbl:
-       .word   cmp_ft_d_f0
-       .word   cmp_ft_d_f2
-       .word   cmp_ft_d_f4
-       .word   cmp_ft_d_f6
-       .word   cmp_ft_d_f8
-       .word   cmp_ft_d_f10
-       .word   cmp_ft_d_f12
-       .word   cmp_ft_d_f14
-       .word   cmp_ft_d_f16
-       .word   cmp_ft_d_f18
-       .word   cmp_ft_d_f20
-       .word   cmp_ft_d_f22
-       .word   cmp_ft_d_f24
-       .word   cmp_ft_d_f26
-       .word   cmp_ft_d_f28
-       .word   cmp_ft_d_f30
-       .text
-
-cmp_ft_d_f0:
-       mfc1    t7, $f0
-       mfc1    t4, $f1
-       b       cmp_ft_d_done
-cmp_ft_d_f2:
-       mfc1    t7, $f2
-       mfc1    t4, $f3
-       b       cmp_ft_d_done
-cmp_ft_d_f4:
-       mfc1    t7, $f4
-       mfc1    t4, $f5
-       b       cmp_ft_d_done
-cmp_ft_d_f6:
-       mfc1    t7, $f6
-       mfc1    t4, $f7
-       b       cmp_ft_d_done
-cmp_ft_d_f8:
-       mfc1    t7, $f8
-       mfc1    t4, $f9
-       b       cmp_ft_d_done
-cmp_ft_d_f10:
-       mfc1    t7, $f10
-       mfc1    t4, $f11
-       b       cmp_ft_d_done
-cmp_ft_d_f12:
-       mfc1    t7, $f12
-       mfc1    t4, $f13
-       b       cmp_ft_d_done
-cmp_ft_d_f14:
-       mfc1    t7, $f14
-       mfc1    t4, $f15
-       b       cmp_ft_d_done
-cmp_ft_d_f16:
-       mfc1    t7, $f16
-       mfc1    t4, $f17
-       b       cmp_ft_d_done
-cmp_ft_d_f18:
-       mfc1    t7, $f18
-       mfc1    t4, $f19
-       b       cmp_ft_d_done
-cmp_ft_d_f20:
-       mfc1    t7, $f20
-       mfc1    t4, $f21
-       b       cmp_ft_d_done
-cmp_ft_d_f22:
-       mfc1    t7, $f22
-       mfc1    t4, $f23
-       b       cmp_ft_d_done
-cmp_ft_d_f24:
-       mfc1    t7, $f24
-       mfc1    t4, $f25
-       b       cmp_ft_d_done
-cmp_ft_d_f26:
-       mfc1    t7, $f26
-       mfc1    t4, $f27
-       b       cmp_ft_d_done
-cmp_ft_d_f28:
-       mfc1    t7, $f28
-       mfc1    t4, $f29
-       b       cmp_ft_d_done
-cmp_ft_d_f30:
-       mfc1    t7, $f30
-       mfc1    t4, $f31
-cmp_ft_d_done:
-       srl     t5, t4, 20                      # get exponent
-       and     t5, t5, 0x7FF
-       and     t6, t4, 0xFFFFF                 # get fraction
-       srl     t4, t4, 31                      # get sign
-       j       ra
-END(get_cmp_d)
-
-/*----------------------------------------------------------------------------
- * set_fd_s --
- *
- *     Write (single precision) the FD register (bits 10-6).
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Arguments:
- *     a0      contains the FP instruction
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *
- * set_fd_word --
- *
- *     Write (integer) the FD register (bits 10-6).
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Arguments:
- *     a0      contains the FP instruction
- *     t2      contains the integer
- *
- *----------------------------------------------------------------------------
- */
-LEAF(set_fd_s)
-       sll     t0, t0, 31                      # position sign
-       sll     t1, t1, 23                      # position exponent
-       or      t2, t2, t0
-       or      t2, t2, t1
-ALEAF(set_fd_word)
-       srl     a3, a0, 7 - 2                   # get FD field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FT field
-       lw      a3, set_fd_s_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-set_fd_s_tbl:
-       .word   set_fd_s_f0
-       .word   set_fd_s_f2
-       .word   set_fd_s_f4
-       .word   set_fd_s_f6
-       .word   set_fd_s_f8
-       .word   set_fd_s_f10
-       .word   set_fd_s_f12
-       .word   set_fd_s_f14
-       .word   set_fd_s_f16
-       .word   set_fd_s_f18
-       .word   set_fd_s_f20
-       .word   set_fd_s_f22
-       .word   set_fd_s_f24
-       .word   set_fd_s_f26
-       .word   set_fd_s_f28
-       .word   set_fd_s_f30
-       .text
-
-set_fd_s_f0:
-       mtc1    t2, $f0
-       j       ra
-set_fd_s_f2:
-       mtc1    t2, $f2
-       j       ra
-set_fd_s_f4:
-       mtc1    t2, $f4
-       j       ra
-set_fd_s_f6:
-       mtc1    t2, $f6
-       j       ra
-set_fd_s_f8:
-       mtc1    t2, $f8
-       j       ra
-set_fd_s_f10:
-       mtc1    t2, $f10
-       j       ra
-set_fd_s_f12:
-       mtc1    t2, $f12
-       j       ra
-set_fd_s_f14:
-       mtc1    t2, $f14
-       j       ra
-set_fd_s_f16:
-       mtc1    t2, $f16
-       j       ra
-set_fd_s_f18:
-       mtc1    t2, $f18
-       j       ra
-set_fd_s_f20:
-       mtc1    t2, $f20
-       j       ra
-set_fd_s_f22:
-       mtc1    t2, $f22
-       j       ra
-set_fd_s_f24:
-       mtc1    t2, $f24
-       j       ra
-set_fd_s_f26:
-       mtc1    t2, $f26
-       j       ra
-set_fd_s_f28:
-       mtc1    t2, $f28
-       j       ra
-set_fd_s_f30:
-       mtc1    t2, $f30
-       j       ra
-END(set_fd_s)
-
-/*----------------------------------------------------------------------------
- * set_fd_d --
- *
- *     Write (double precision) the FT register (bits 10-6).
- *     This is an internal routine used by MachEmulateFP only.
- *
- * Arguments:
- *     a0      contains the FP instruction
- *     t0      contains the sign
- *     t1      contains the (biased) exponent
- *     t2      contains the fraction
- *     t3      contains the remaining fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(set_fd_d)
-       sll     t0, t0, 31                      # set sign
-       sll     t1, t1, 20                      # set exponent
-       or      t0, t0, t1
-       or      t0, t0, t2                      # set fraction
-       srl     a3, a0, 7 - 2                   # get FD field (even regs only)
-       and     a3, a3, 0xF << 2                # mask FD field
-       lw      a3, set_fd_d_tbl(a3)            # switch on register number
-       j       a3
-
-       .rdata
-set_fd_d_tbl:
-       .word   set_fd_d_f0
-       .word   set_fd_d_f2
-       .word   set_fd_d_f4
-       .word   set_fd_d_f6
-       .word   set_fd_d_f8
-       .word   set_fd_d_f10
-       .word   set_fd_d_f12
-       .word   set_fd_d_f14
-       .word   set_fd_d_f16
-       .word   set_fd_d_f18
-       .word   set_fd_d_f20
-       .word   set_fd_d_f22
-       .word   set_fd_d_f24
-       .word   set_fd_d_f26
-       .word   set_fd_d_f28
-       .word   set_fd_d_f30
-       .text
-
-set_fd_d_f0:
-       mtc1    t3, $f0
-       mtc1    t0, $f1
-       j       ra
-set_fd_d_f2:
-       mtc1    t3, $f2
-       mtc1    t0, $f3
-       j       ra
-set_fd_d_f4:
-       mtc1    t3, $f4
-       mtc1    t0, $f5
-       j       ra
-set_fd_d_f6:
-       mtc1    t3, $f6
-       mtc1    t0, $f7
-       j       ra
-set_fd_d_f8:
-       mtc1    t3, $f8
-       mtc1    t0, $f9
-       j       ra
-set_fd_d_f10:
-       mtc1    t3, $f10
-       mtc1    t0, $f11
-       j       ra
-set_fd_d_f12:
-       mtc1    t3, $f12
-       mtc1    t0, $f13
-       j       ra
-set_fd_d_f14:
-       mtc1    t3, $f14
-       mtc1    t0, $f15
-       j       ra
-set_fd_d_f16:
-       mtc1    t3, $f16
-       mtc1    t0, $f17
-       j       ra
-set_fd_d_f18:
-       mtc1    t3, $f18
-       mtc1    t0, $f19
-       j       ra
-set_fd_d_f20:
-       mtc1    t3, $f20
-       mtc1    t0, $f21
-       j       ra
-set_fd_d_f22:
-       mtc1    t3, $f22
-       mtc1    t0, $f23
-       j       ra
-set_fd_d_f24:
-       mtc1    t3, $f24
-       mtc1    t0, $f25
-       j       ra
-set_fd_d_f26:
-       mtc1    t3, $f26
-       mtc1    t0, $f27
-       j       ra
-set_fd_d_f28:
-       mtc1    t3, $f28
-       mtc1    t0, $f29
-       j       ra
-set_fd_d_f30:
-       mtc1    t3, $f30
-       mtc1    t0, $f31
-       j       ra
-END(set_fd_d)
-
-/*----------------------------------------------------------------------------
- * renorm_fs_s --
- *
- * Results:
- *     t1      unbiased exponent
- *     t2      normalized fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(renorm_fs_s)
-/*
- * Find out how many leading zero bits are in t2 and put in t9.
- */
-       move    v0, t2
-       move    t9, zero
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2 the correct number of bits.
- */
-1:
-       subu    t9, t9, SLEAD_ZEROS     # dont count normal leading zeros
-       li      t1, SEXP_MIN
-       subu    t1, t1, t9              # adjust exponent
-       sll     t2, t2, t9
-       j       ra
-END(renorm_fs_s)
-
-/*----------------------------------------------------------------------------
- * renorm_fs_d --
- *
- * Results:
- *     t1      unbiased exponent
- *     t2,t3   normalized fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(renorm_fs_d)
-/*
- * Find out how many leading zero bits are in t2,t3 and put in t9.
- */
-       move    v0, t2
-       move    t9, zero
-       bne     t2, zero, 1f
-       move    v0, t3
-       addu    t9, 32
-1:
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t2,t3 the correct number of bits.
- */
-1:
-       subu    t9, t9, DLEAD_ZEROS     # dont count normal leading zeros
-       li      t1, DEXP_MIN
-       subu    t1, t1, t9              # adjust exponent
-       li      v0, 32
-       blt     t9, v0, 1f
-       subu    t9, t9, v0              # shift fraction left >= 32 bits
-       sll     t2, t3, t9
-       move    t3, zero
-       j       ra
-1:
-       subu    v0, v0, t9              # shift fraction left < 32 bits
-       sll     t2, t2, t9
-       srl     v1, t3, v0
-       or      t2, t2, v1
-       sll     t3, t3, t9
-       j       ra
-END(renorm_fs_d)
-
-/*----------------------------------------------------------------------------
- * renorm_ft_s --
- *
- * Results:
- *     t5      unbiased exponent
- *     t6      normalized fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(renorm_ft_s)
-/*
- * Find out how many leading zero bits are in t6 and put in t9.
- */
-       move    v0, t6
-       move    t9, zero
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t6 the correct number of bits.
- */
-1:
-       subu    t9, t9, SLEAD_ZEROS     # dont count normal leading zeros
-       li      t5, SEXP_MIN
-       subu    t5, t5, t9              # adjust exponent
-       sll     t6, t6, t9
-       j       ra
-END(renorm_ft_s)
-
-/*----------------------------------------------------------------------------
- * renorm_ft_d --
- *
- * Results:
- *     t5      unbiased exponent
- *     t6,t7   normalized fraction
- *
- *----------------------------------------------------------------------------
- */
-LEAF(renorm_ft_d)
-/*
- * Find out how many leading zero bits are in t6,t7 and put in t9.
- */
-       move    v0, t6
-       move    t9, zero
-       bne     t6, zero, 1f
-       move    v0, t7
-       addu    t9, 32
-1:
-       srl     v1, v0, 16
-       bne     v1, zero, 1f
-       addu    t9, 16
-       sll     v0, 16
-1:
-       srl     v1, v0, 24
-       bne     v1, zero, 1f
-       addu    t9, 8
-       sll     v0, 8
-1:
-       srl     v1, v0, 28
-       bne     v1, zero, 1f
-       addu    t9, 4
-       sll     v0, 4
-1:
-       srl     v1, v0, 30
-       bne     v1, zero, 1f
-       addu    t9, 2
-       sll     v0, 2
-1:
-       srl     v1, v0, 31
-       bne     v1, zero, 1f
-       addu    t9, 1
-/*
- * Now shift t6,t7 the correct number of bits.
- */
-1:
-       subu    t9, t9, DLEAD_ZEROS     # dont count normal leading zeros
-       li      t5, DEXP_MIN
-       subu    t5, t5, t9              # adjust exponent
-       li      v0, 32
-       blt     t9, v0, 1f
-       subu    t9, t9, v0              # shift fraction left >= 32 bits
-       sll     t6, t7, t9
-       move    t7, zero
-       j       ra
-1:
-       subu    v0, v0, t9              # shift fraction left < 32 bits
-       sll     t6, t6, t9
-       srl     v1, t7, v0
-       or      t6, t6, v1
-       sll     t7, t7, t9
-       j       ra
-END(renorm_ft_d)
diff --git a/sys/arch/pica/pica/genassym.c b/sys/arch/pica/pica/genassym.c
deleted file mode 100644 (file)
index 9774280..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)genassym.c    8.2 (Berkeley) 9/23/93
- *      $Id: genassym.c,v 1.2 1996/05/15 07:09:11 pefo Exp $
- */
-
-
-#include <sys/param.h>
-#include <sys/buf.h>
-#include <sys/map.h>
-#include <sys/proc.h>
-#include <sys/mbuf.h>
-#include <sys/user.h>
-
-#include <machine/reg.h>
-
-main()
-{
-       register struct proc *p = (struct proc *)0;
-       register struct user *up = (struct user *)0;
-       register struct vmmeter *vm = (struct vmmeter *)0;
-       register int size, s, n;
-
-       printf("#define\tP_FORW %d\n", &p->p_forw);
-       printf("#define\tP_BACK %d\n", &p->p_back);
-       printf("#define\tP_PRIORITY %d\n", &p->p_priority);
-       printf("#define\tP_ADDR %d\n", &p->p_addr);
-       printf("#define\tP_UPTE %d\n", p->p_md.md_upte);
-       printf("#define\tU_PCB_REGS %d\n", up->u_pcb.pcb_regs);
-       printf("#define\tU_PCB_FPREGS %d\n", &up->u_pcb.pcb_regs[F0]);
-       printf("#define\tU_PCB_CONTEXT %d\n", &up->u_pcb.pcb_context);
-       printf("#define\tU_PCB_ONFAULT %d\n", &up->u_pcb.pcb_onfault);
-       printf("#define\tU_PCB_SEGTAB %d\n", &up->u_pcb.pcb_segtab);
-       printf("#define\tVM_MIN_ADDRESS 0x%x\n", VM_MIN_ADDRESS);
-       printf("#define\tVM_MIN_KERNEL_ADDRESS 0x%x\n", VM_MIN_KERNEL_ADDRESS);
-       printf("#define\tV_SWTCH %d\n", &vm->v_swtch);
-       printf("#define\tSIGILL %d\n", SIGILL);
-       printf("#define\tSIGFPE %d\n", SIGFPE);
-       exit(0);
-}
diff --git a/sys/arch/pica/pica/locore.S b/sys/arch/pica/pica/locore.S
deleted file mode 100644 (file)
index d060326..0000000
+++ /dev/null
@@ -1,2882 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Digital Equipment Corporation and Ralph Campbell.
- *
- * 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.
- *
- * Copyright (C) 1989 Digital Equipment Corporation.
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appears in all copies.
- * Digital Equipment Corporation makes no representations about the
- * suitability of this software for any purpose.  It is provided "as is"
- * without express or implied warranty.
- *
- * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/loMem.s,
- *     v 1.1 89/07/11 17:55:04 nelson Exp  SPRITE (DECWRL)
- * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAsm.s,
- *     v 9.2 90/01/29 18:00:39 shirriff Exp  SPRITE (DECWRL)
- * from: Header: /sprite/src/kernel/vm/ds3100.md/vmPmaxAsm.s,
- *     v 1.1 89/07/10 14:27:41 nelson Exp  SPRITE (DECWRL)
- *
- *     from: @(#)locore.s      8.5 (Berkeley) 1/4/94
- *     $Id: locore.S,v 1.5 1996/06/06 23:07:35 deraadt Exp $
- */
-
-/*
- *     Contains code that is the first executed at boot time plus
- *     assembly language support routines.
- */
-
-#include <sys/errno.h>
-#include <sys/syscall.h>
-
-#include <machine/param.h>
-#include <machine/psl.h>
-#include <machine/asm.h>
-#include <machine/cpu.h>
-#include <machine/regnum.h>
-#include <machine/pte.h>
-
-#include "assym.h"
-
-       .set    noreorder
-
-/*
- * Amount to take off of the stack for the benefit of the debugger.
- */
-#define START_FRAME    ((4 * 4) + 4 + 4)
-
-       .globl  start
-start:
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       mtc0    zero, COP_0_CAUSE_REG   # Clear soft interrupts
-
-/*
- * Initialize stack and call machine startup.
- */
-       la      sp, start - START_FRAME
-       la      gp, _gp
-       sw      zero, START_FRAME - 4(sp)       # Zero out old ra for debugger
-       jal     mips_init                       # mips_init(argc, argv, envp)
-       sw      zero, START_FRAME - 8(sp)       # Zero out old fp for debugger
-
-       li      t0, SR_COP_1_BIT                # Disable interrupts and
-       mtc0    t0, COP_0_STATUS_REG    #   enable the fp coprocessor
-       li      sp, KERNELSTACK - START_FRAME   # switch to standard stack
-       mfc0    t0, COP_0_PRID          # read processor ID register
-       nop
-       nop                                     # wait for new status to
-       nop                                     # to be effective
-       nop
-       cfc1    t1, FPC_ID                      # read FPU ID register
-       sw      t0, cpu_id                      # save PRID register
-       sw      t1, fpu_id                      # save FPU ID register
-       jal     main                            # main(regs)
-       move    a0, zero
-/*
- * proc[1] == /etc/init now running here.
- * Restore user registers and return.
- */
-       .set    noat
-       li      v0, SR_EXL
-       mtc0    v0, COP_0_STATUS_REG    # set exeption level bit.
-       lw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       lw      t0, UADDR+U_PCB_REGS+(MULLO * 4)
-       lw      t1, UADDR+U_PCB_REGS+(MULHI * 4)
-       mtlo    t0
-       mthi    t1
-       lw      a0, UADDR+U_PCB_REGS+(PC * 4)
-       lw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       lw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       dmtc0   a0, COP_0_EXC_PC                # set return address
-       li      a0, PSL_USERSET
-       mtc0    a0, COP_0_STATUS_REG    # switch to user mode
-       lw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       lw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       lw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       lw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       lw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       lw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       lw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       lw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       lw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       lw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       lw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       lw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       lw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       lw      s0, UADDR+U_PCB_REGS+(S0 * 4)
-       lw      s1, UADDR+U_PCB_REGS+(S1 * 4)
-       lw      s2, UADDR+U_PCB_REGS+(S2 * 4)
-       lw      s3, UADDR+U_PCB_REGS+(S3 * 4)
-       lw      s4, UADDR+U_PCB_REGS+(S4 * 4)
-       lw      s5, UADDR+U_PCB_REGS+(S5 * 4)
-       lw      s6, UADDR+U_PCB_REGS+(S6 * 4)
-       lw      s7, UADDR+U_PCB_REGS+(S7 * 4)
-       lw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       lw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       lw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       lw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       lw      s8, UADDR+U_PCB_REGS+(S8 * 4)
-       lw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       eret
-       .set    at
-
-/*
- * Primitives
- */
-
-/*
- * This table is indexed by u.u_pcb.pcb_onfault in trap().
- * The reason for using this table rather than storing an address in
- * u.u_pcb.pcb_onfault is simply to make the code faster.
- */
-       .globl  onfault_table
-       .data
-       .align  2
-onfault_table:
-       .word   0               # invalid index number
-#define BADERR         1
-       .word   baderr
-#define COPYERR                2
-       .word   copyerr
-#define FSWBERR                3
-       .word   fswberr
-#define FSWINTRBERR    4
-       .word   fswintrberr
-#ifdef DEBUG
-#define MDBERR         5
-       .word   mdberr
-#endif
-       .text
-
-/*
- * See if access to addr with a len type instruction causes a machine check.
- * len is length of access (1=byte, 2=short, 4=long)
- *
- * badaddr(addr, len)
- *     char *addr;
- *     int len;
- */
-LEAF(badaddr)
-       li      v0, BADERR
-       bne     a1, 1, 2f
-       sw      v0, UADDR+U_PCB_ONFAULT
-       b       5f
-       lbu     v0, (a0)
-2:
-       bne     a1, 2, 4f
-       nop
-       b       5f
-       lhu     v0, (a0)
-4:
-       lw      v0, (a0)
-5:
-       sw      zero, UADDR+U_PCB_ONFAULT
-       j       ra
-       move    v0, zero                # made it w/o errors
-baderr:
-       j       ra
-       li      v0, 1                   # trap sends us here
-END(badaddr)
-
-/*
- * This code is copied the user's stack for returning from signal handlers
- * (see sendsig() and sigreturn()). We have to compute the address
- * of the sigcontext struct for the sigreturn call.
- */
-       .globl  sigcode
-sigcode:
-       addu    a0, sp, 16              # address of sigcontext
-       li      v0, SYS_sigreturn       # sigreturn(scp)
-       syscall
-       break   0                       # just in case sigreturn fails
-       .globl  esigcode
-esigcode:
-
-/*
- * Copy a null terminated string within the kernel address space.
- * Maxlength may be null if count not wanted.
- *     copystr(fromaddr, toaddr, maxlength, &lencopied)
- *             caddr_t fromaddr;
- *             caddr_t toaddr;
- *             u_int maxlength;
- *             u_int *lencopied;
- */
-LEAF(copystr)
-       move    t2, a2                  # Save the number of bytes
-1:
-       lbu     t0, 0(a0)
-       subu    a2, a2, 1
-       beq     t0, zero, 2f
-       sb      t0, 0(a1)
-       addu    a0, a0, 1
-       bne     a2, zero, 1b
-       addu    a1, a1, 1
-2:
-       beq     a3, zero, 3f
-       subu    a2, t2, a2              # compute length copied
-       sw      a2, 0(a3)
-3:
-       j       ra
-       move    v0, zero
-END(copystr)
-
-/*
- * fillw(pat, addr, count)
- */
-LEAF(fillw)
-1:
-       addiu   a2, a2, -1
-       sh      a0, 0(a1)
-       bne     a2,zero, 1b
-       addiu   a1, a1, 2
-
-       jr      ra
-       nop
-END(fillw)
-
-/*
- * Copy a null terminated string from the user address space into
- * the kernel address space.
- *
- *     copyinstr(fromaddr, toaddr, maxlength, &lencopied)
- *             caddr_t fromaddr;
- *             caddr_t toaddr;
- *             u_int maxlength;
- *             u_int *lencopied;
- */
-NON_LEAF(copyinstr, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       sw      ra, STAND_RA_OFFSET(sp)
-       blt     a0, zero, copyerr       # make sure address is in user space
-       li      v0, COPYERR
-       jal     copystr
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lw      ra, STAND_RA_OFFSET(sp)
-       sw      zero, UADDR+U_PCB_ONFAULT
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-       move    v0, zero
-END(copyinstr)
-
-/*
- * Copy a null terminated string from the kernel address space into
- * the user address space.
- *
- *     copyoutstr(fromaddr, toaddr, maxlength, &lencopied)
- *             caddr_t fromaddr;
- *             caddr_t toaddr;
- *             u_int maxlength;
- *             u_int *lencopied;
- */
-NON_LEAF(copyoutstr, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       sw      ra, STAND_RA_OFFSET(sp)
-       blt     a1, zero, copyerr       # make sure address is in user space
-       li      v0, COPYERR
-       jal     copystr
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lw      ra, STAND_RA_OFFSET(sp)
-       sw      zero, UADDR+U_PCB_ONFAULT
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-       move    v0, zero
-END(copyoutstr)
-
-/*
- * Copy specified amount of data from user space into the kernel
- *     copyin(from, to, len)
- *             caddr_t *from;  (user source address)
- *             caddr_t *to;    (kernel destination address)
- *             unsigned len;
- */
-NON_LEAF(copyin, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       sw      ra, STAND_RA_OFFSET(sp)
-       blt     a0, zero, copyerr       # make sure address is in user space
-       li      v0, COPYERR
-       jal     bcopy
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lw      ra, STAND_RA_OFFSET(sp)
-       sw      zero, UADDR+U_PCB_ONFAULT
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-       move    v0, zero
-END(copyin)
-
-/*
- * Copy specified amount of data from kernel to the user space
- *     copyout(from, to, len)
- *             caddr_t *from;  (kernel source address)
- *             caddr_t *to;    (user destination address)
- *             unsigned len;
- */
-NON_LEAF(copyout, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       sw      ra, STAND_RA_OFFSET(sp)
-       blt     a1, zero, copyerr       # make sure address is in user space
-       li      v0, COPYERR
-       jal     bcopy
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lw      ra, STAND_RA_OFFSET(sp)
-       sw      zero, UADDR+U_PCB_ONFAULT
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-       move    v0, zero
-END(copyout)
-
-LEAF(copyerr)
-       lw      ra, STAND_RA_OFFSET(sp)
-       sw      zero, UADDR+U_PCB_ONFAULT
-       addu    sp, sp, STAND_FRAME_SIZE
-       j       ra
-       li      v0, EFAULT              # return error
-END(copyerr)
-
-/*
- * Copy the kernel stack to the new process and save the current context so
- * the new process will return nonzero when it is resumed by cpu_switch().
- *
- *     copykstack(up)
- *             struct user *up;
- */
-LEAF(copykstack)
-       subu    v0, sp, UADDR           # compute offset into stack
-       addu    v0, v0, a0              # v0 = new stack address
-       move    v1, sp                  # v1 = old stack address
-       li      t1, KERNELSTACK
-1:
-       lw      t0, 0(v1)               # copy stack data
-       addu    v1, v1, 4
-       sw      t0, 0(v0)
-       bne     v1, t1, 1b
-       addu    v0, v0, 4
-       /* FALLTHROUGH */
-/*
- * Save registers and state so we can do a longjmp later.
- * Note: this only works if p != curproc since
- * cpu_switch() will copy over pcb_context.
- *
- *     savectx(up)
- *             struct user *up;
- */
-ALEAF(savectx)
-       sw      s0, U_PCB_CONTEXT+0(a0)
-       sw      s1, U_PCB_CONTEXT+4(a0)
-       sw      s2, U_PCB_CONTEXT+8(a0)
-       sw      s3, U_PCB_CONTEXT+12(a0)
-       mfc0    v0, COP_0_STATUS_REG
-       sw      s4, U_PCB_CONTEXT+16(a0)
-       sw      s5, U_PCB_CONTEXT+20(a0)
-       sw      s6, U_PCB_CONTEXT+24(a0)
-       sw      s7, U_PCB_CONTEXT+28(a0)
-       sw      sp, U_PCB_CONTEXT+32(a0)
-       sw      s8, U_PCB_CONTEXT+36(a0)
-       sw      ra, U_PCB_CONTEXT+40(a0)
-       sw      v0, U_PCB_CONTEXT+44(a0)
-       j       ra
-       move    v0, zero
-END(copykstack)
-
-/*
- * 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 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
- * queues.
- */
-/*
- * setrunqueue(p)
- *     proc *p;
- *
- * Call should be made at splclock(), and p->p_stat should be SRUN.
- */
-NON_LEAF(setrunqueue, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       lw      t0, P_BACK(a0)          ## firewall: p->p_back must be 0
-       sw      ra, STAND_RA_OFFSET(sp) ##
-       beq     t0, zero, 1f            ##
-       lbu     t0, P_PRIORITY(a0)      # put on p->p_priority / 4 queue
-       PANIC("setrunqueue")            ##
-1:
-       li      t1, 1                   # compute corresponding bit
-       srl     t0, t0, 2               # compute index into 'whichqs'
-       sll     t1, t1, t0
-       lw      t2, whichqs             # set corresponding bit
-       nop
-       or      t2, t2, t1
-       sw      t2, whichqs
-       sll     t0, t0, 3               # compute index into 'qs'
-       la      t1, qs
-       addu    t0, t0, t1              # t0 = qp = &qs[pri >> 2]
-       lw      t1, P_BACK(t0)          # t1 = qp->ph_rlink
-       sw      t0, P_FORW(a0)          # p->p_forw = qp
-       sw      t1, P_BACK(a0)          # p->p_back = qp->ph_rlink
-       sw      a0, P_FORW(t1)          # p->p_back->p_forw = p;
-       sw      a0, P_BACK(t0)          # qp->ph_rlink = p
-       j       ra
-       addu    sp, sp, STAND_FRAME_SIZE
-END(setrunqueue)
-
-/*
- * Remrq(p)
- *
- * Call should be made at splclock().
- */
-NON_LEAF(remrq, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       lbu     t0, P_PRIORITY(a0)      # get from p->p_priority / 4 queue
-       li      t1, 1                   # compute corresponding bit
-       srl     t0, t0, 2               # compute index into 'whichqs'
-       lw      t2, whichqs             # check corresponding bit
-       sll     t1, t1, t0
-       and     v0, t2, t1
-       sw      ra, STAND_RA_OFFSET(sp) ##
-       bne     v0, zero, 1f            ##
-       lw      v0, P_BACK(a0)          # v0 = p->p_back
-       PANIC("remrq")                  ## it wasnt recorded to be on its q
-1:
-       lw      v1, P_FORW(a0)          # v1 = p->p_forw
-       nop
-       sw      v1, P_FORW(v0)          # p->p_back->p_forw = p->p_forw;
-       sw      v0, P_BACK(v1)          # p->p_forw->p_back = p->r_rlink
-       sll     t0, t0, 3               # compute index into 'qs'
-       la      v0, qs
-       addu    t0, t0, v0              # t0 = qp = &qs[pri >> 2]
-       lw      v0, P_FORW(t0)          # check if queue empty
-       nop
-       bne     v0, t0, 2f              # No. qp->ph_link != qp
-       nop
-       xor     t2, t2, t1              # clear corresponding bit in 'whichqs'
-       sw      t2, whichqs
-2:
-       sw      zero, P_BACK(a0)        ## for firewall checking
-       j       ra
-       addu    sp, sp, STAND_FRAME_SIZE
-END(remrq)
-
-/*
- * switch_exit()
- *
- * At exit of a process, do a cpu_switch for the last time.
- * The mapping of the pcb at p->p_addr has already been deleted,
- * and the memory for the pcb+stack has been freed.
- * All interrupts should be blocked at this point.
- */
-LEAF(switch_exit)
-       la      v1, nullproc                    # save state into garbage proc
-       lw      t0, P_UPTE+0(v1)                # t0 = first u. pte
-       lw      t1, P_UPTE+4(v1)                # t1 = 2nd u. pte
-       li      v0, UADDR                       # v0 = first HI entry
-       mtc0    zero, COP_0_TLB_INDEX   # set the index register
-       dmtc0   v0, COP_0_TLB_HI                # init high entry
-       dmtc0   t0, COP_0_TLB_LO0               # init low entry0
-       dmtc0   t1, COP_0_TLB_LO1               # init low entry1
-       nop
-       tlbwi                                   # Write the TLB entry.
-       nop
-       nop
-       sw      zero, curproc
-       b       cpu_switch
-       li      sp, KERNELSTACK - START_FRAME   # switch to standard stack
-END(switch_exit)
-
-/*
- * When no processes are on the runq, cpu_switch branches to idle
- * to wait for something to come ready.
- * Note: this is really a part of cpu_switch() but defined here for kernel
- * profiling.
- */
-LEAF(idle)
-       li      t0, (INT_MASK | SR_INT_ENAB)
-       mtc0    t0, COP_0_STATUS_REG    # enable all interrupts
-       sw      zero, curproc                   # set curproc NULL for stats
-1:
-       lw      t0, whichqs                     # look for non-empty queue
-       nop
-       beq     t0, zero, 1b
-       nop
-       b       sw1
-       mtc0    zero, COP_0_STATUS_REG  # Disable all interrupts
-END(idle)
-
-/*
- * cpu_switch()
- * Find the highest priority process and resume it.
- */
-NON_LEAF(cpu_switch, STAND_FRAME_SIZE, ra)
-       sw      sp, UADDR+U_PCB_CONTEXT+32      # save old sp
-       subu    sp, sp, STAND_FRAME_SIZE
-       sw      ra, STAND_RA_OFFSET(sp)
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-       lw      t2, cnt+V_SWTCH                 # for statistics
-       lw      t1, whichqs                     # look for non-empty queue
-       sw      s0, UADDR+U_PCB_CONTEXT+0       # do a 'savectx()'
-       sw      s1, UADDR+U_PCB_CONTEXT+4
-       sw      s2, UADDR+U_PCB_CONTEXT+8
-       sw      s3, UADDR+U_PCB_CONTEXT+12
-       mfc0    t0, COP_0_STATUS_REG    # t0 = saved status register
-       sw      s4, UADDR+U_PCB_CONTEXT+16
-       sw      s5, UADDR+U_PCB_CONTEXT+20
-       sw      s6, UADDR+U_PCB_CONTEXT+24
-       sw      s7, UADDR+U_PCB_CONTEXT+28
-       sw      s8, UADDR+U_PCB_CONTEXT+36
-       sw      ra, UADDR+U_PCB_CONTEXT+40      # save return address
-       sw      t0, UADDR+U_PCB_CONTEXT+44      # save status register
-       addu    t2, t2, 1
-       sw      t2, cnt+V_SWTCH
-       beq     t1, zero, idle                  # if none, idle
-       mtc0    zero, COP_0_STATUS_REG  # Disable all interrupts
-sw1:
-       nop                                     # wait for intrs disabled
-       nop
-       nop
-       nop
-       lw      t0, whichqs                     # look for non-empty queue
-       li      t2, -1                          # t2 = lowest bit set
-       beq     t0, zero, idle                  # if none, idle
-       move    t3, t0                          # t3 = saved whichqs
-1:
-       addu    t2, t2, 1
-       and     t1, t0, 1                       # bit set?
-       beq     t1, zero, 1b
-       srl     t0, t0, 1                       # try next bit
-/*
- * Remove process from queue.
- */
-       sll     t0, t2, 3
-       la      t1, qs
-       addu    t0, t0, t1                      # t0 = qp = &qs[highbit]
-       lw      a0, P_FORW(t0)                  # a0 = p = highest pri process
-       nop
-       lw      v0, P_FORW(a0)                  # v0 = p->p_forw
-       bne     t0, a0, 2f                      # make sure something in queue
-       sw      v0, P_FORW(t0)                  # qp->ph_link = p->p_forw;
-       PANIC("cpu_switch")                     # nothing in queue
-2:
-       sw      t0, P_BACK(v0)                  # p->p_forw->p_back = qp
-       bne     v0, t0, 3f                      # queue still not empty
-       sw      zero, P_BACK(a0)                ## for firewall checking
-       li      v1, 1                           # compute bit in 'whichqs'
-       sll     v1, v1, t2
-       xor     t3, t3, v1                      # clear bit in 'whichqs'
-       sw      t3, whichqs
-3:
-/*
- * Switch to new context.
- */
-       sw      zero, want_resched
-       jal     pmap_alloc_tlbpid               # v0 = TLB PID
-       move    s0, a0                          # BDSLOT: save p
-       sw      s0, curproc                     # set curproc
-       lw      t0, P_UPTE+0(s0)                # t0 = first u. pte
-       lw      t1, P_UPTE+4(s0)                # t1 = 2nd u. pte
-       or      v0, v0, UADDR                   # v0 = first HI entry
-/*
- * Resume process indicated by the pte's for its u struct
- * NOTE: This is hard coded to UPAGES == 2.
- * Also, there should be no TLB faults at this point.
- */
-       mtc0    zero, COP_0_TLB_INDEX   # set the index register
-       dmtc0   v0, COP_0_TLB_HI                # init high entry
-       dmtc0   t0, COP_0_TLB_LO0               # init low entry0
-       dmtc0   t1, COP_0_TLB_LO1               # init low entry1
-       nop
-       tlbwi                                   # Write the TLB entry.
-       nop                                     # Delay for effect
-       nop                                     # Delay for effect
-       nop
-       nop
-/*
- * Now running on new u struct.
- * Restore registers and return.
- */
-       lw      v0, UADDR+U_PCB_CONTEXT+44      # restore kernel context
-       lw      ra, UADDR+U_PCB_CONTEXT+40
-       lw      s0, UADDR+U_PCB_CONTEXT+0
-       lw      s1, UADDR+U_PCB_CONTEXT+4
-       lw      s2, UADDR+U_PCB_CONTEXT+8
-       lw      s3, UADDR+U_PCB_CONTEXT+12
-       lw      s4, UADDR+U_PCB_CONTEXT+16
-       lw      s5, UADDR+U_PCB_CONTEXT+20
-       lw      s6, UADDR+U_PCB_CONTEXT+24
-       lw      s7, UADDR+U_PCB_CONTEXT+28
-       lw      sp, UADDR+U_PCB_CONTEXT+32
-       lw      s8, UADDR+U_PCB_CONTEXT+36
-       mtc0    v0, COP_0_STATUS_REG
-       j       ra
-       li      v0, 1                           # possible return to 'savectx()'
-END(cpu_switch)
-
-/*
- * {fu,su},{ibyte,isword,iword}, fetch or store a byte, short or word to
- * user text space.
- * {fu,su},{byte,sword,word}, fetch or store a byte, short or word to
- * user data space.
- */
-LEAF(fuword)
-ALEAF(fuiword)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lw      v0, 0(a0)               # fetch word
-       j       ra
-       sw      zero, UADDR+U_PCB_ONFAULT
-END(fuword)
-
-LEAF(fusword)
-ALEAF(fuisword)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lhu     v0, 0(a0)               # fetch short
-       j       ra
-       sw      zero, UADDR+U_PCB_ONFAULT
-END(fusword)
-
-LEAF(fubyte)
-ALEAF(fuibyte)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lbu     v0, 0(a0)               # fetch byte
-       j       ra
-       sw      zero, UADDR+U_PCB_ONFAULT
-END(fubyte)
-
-LEAF(suword)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       sw      a1, 0(a0)               # store word
-       sw      zero, UADDR+U_PCB_ONFAULT
-       j       ra
-       move    v0, zero
-END(suword)
-
-/*
- * Have to flush instruction cache afterwards.
- */
-LEAF(suiword)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       sw      a1, 0(a0)               # store word
-       sw      zero, UADDR+U_PCB_ONFAULT
-       move    v0, zero
-       b       MachFlushICache         # NOTE: this should not clobber v0!
-       li      a1, 4                   # size of word
-END(suiword)
-
-/*
- * Will have to flush the instruction cache if byte merging is done in hardware.
- */
-LEAF(susword)
-ALEAF(suisword)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       sh      a1, 0(a0)               # store short
-       sw      zero, UADDR+U_PCB_ONFAULT
-       j       ra
-       move    v0, zero
-END(susword)
-
-LEAF(subyte)
-ALEAF(suibyte)
-       blt     a0, zero, fswberr       # make sure address is in user space
-       li      v0, FSWBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       sb      a1, 0(a0)               # store byte
-       sw      zero, UADDR+U_PCB_ONFAULT
-       j       ra
-       move    v0, zero
-END(subyte)
-
-LEAF(fswberr)
-       j       ra
-       li      v0, -1
-END(fswberr)
-
-/*
- * fuswintr and suswintr are just like fusword and susword except that if
- * the page is not in memory or would cause a trap, then we return an error.
- * The important thing is to prevent sleep() and switch().
- */
-LEAF(fuswintr)
-       blt     a0, zero, fswintrberr   # make sure address is in user space
-       li      v0, FSWINTRBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       lhu     v0, 0(a0)               # fetch short
-       j       ra
-       sw      zero, UADDR+U_PCB_ONFAULT
-END(fuswintr)
-
-LEAF(suswintr)
-       blt     a0, zero, fswintrberr   # make sure address is in user space
-       li      v0, FSWINTRBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       sh      a1, 0(a0)               # store short
-       sw      zero, UADDR+U_PCB_ONFAULT
-       j       ra
-       move    v0, zero
-END(suswintr)
-
-LEAF(fswintrberr)
-       j       ra
-       li      v0, -1
-END(fswintrberr)
-
-/*
- * Insert 'p' after 'q'.
- *     _insque(p, q)
- *             caddr_t p, q;
- */
-LEAF(_insque)
-       lw      v0, 0(a1)               # v0 = q->next
-       sw      a1, 4(a0)               # p->prev = q
-       sw      v0, 0(a0)               # p->next = q->next
-       sw      a0, 4(v0)               # q->next->prev = p
-       j       ra
-       sw      a0, 0(a1)               # q->next = p
-END(_insque)
-
-/*
- * Remove item 'p' from queue.
- *     _remque(p)
- *             caddr_t p;
- */
-LEAF(_remque)
-       lw      v0, 0(a0)               # v0 = p->next
-       lw      v1, 4(a0)               # v1 = p->prev
-       nop
-       sw      v0, 0(v1)               # p->prev->next = p->next
-       j       ra
-       sw      v1, 4(v0)               # p->next->prev = p->prev
-END(_remque)
-
-/*
- * This code is copied to the TLB exception vector address to
- * handle TLB translation misses.
- * NOTE: This code must be relocatable and max 32 instructions!!!
- * Don't check for invalid pte's here. We load them as well and
- * let the processor trap to load the correct value after service.
- */
-       .globl  MachTLBMiss
-MachTLBMiss:
-       .set    noat
-       dmfc0   k0, COP_0_BAD_VADDR     # get the virtual address
-       lw      k1, UADDR+U_PCB_SEGTAB          # get the current segment table
-       bltz    k0, 1f                          # kernel address space ->
-       srl     k0, k0, SEGSHIFT - 2            # compute segment table index
-       andi    k0, k0, 0x7fc                   # PMAP_SEGTABSIZ-1
-       addu    k1, k1, k0
-       dmfc0   k0, COP_0_BAD_VADDR     # get the virtual address
-       lw      k1, 0(k1)                       # get pointer to segment map
-       srl     k0, k0, PGSHIFT - 2             # compute segment map index
-       andi    k0, k0, ((NPTEPG/2) - 1) << 3
-       beq     k1, zero, 2f                    # invalid segment map
-       addu    k1, k1, k0                      # index into segment map
-       lw      k0, 0(k1)                       # get page PTE
-       lw      k1, 4(k1)
-       dsll    k0, k0, 34
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO0
-       dsll    k1, k1, 34
-       dsrl    k1, k1, 34
-       dmtc0   k1, COP_0_TLB_LO1
-       nop
-       tlbwr                                   # update TLB
-       nop
-       nop
-       nop
-       nop
-       nop
-       eret
-1:
-       j       MachTLBMissException
-       nop
-2:
-       j       SlowFault
-       nop
-
-       .globl  MachTLBMissEnd
-MachTLBMissEnd:
-       .set    at
-
-/*
- * This code is copied to the general exception vector address to
- * handle all execptions except RESET and TLBMiss.
- * NOTE: This code must be relocatable!!!
- */
-       .globl  MachException
-MachException:
-/*
- * Find out what mode we came from and jump to the proper handler.
- */
-       .set    noat
-       mfc0    k0, COP_0_STATUS_REG    # Get the status register
-       mfc0    k1, COP_0_CAUSE_REG     # Get the cause register value.
-       and     k0, k0, SR_KSU_USER     # test for user mode
-                                               # sneaky but the bits are
-                                               # with us........
-       sll     k0, k0, 3                       # shift user bit for cause index
-       and     k1, k1, CR_EXC_CODE     # Mask out the cause bits.
-       or      k1, k1, k0                      # change index to user table
-1:
-       la      k0, machExceptionTable          # get base of the jump table
-       addu    k0, k0, k1                      # Get the address of the
-                                               #  function entry.  Note that
-                                               #  the cause is already
-                                               #  shifted left by 2 bits so
-                                               #  we dont have to shift.
-       lw      k0, 0(k0)                       # Get the function address
-       nop
-       j       k0                              # Jump to the function.
-       nop
-       .set    at
-       .globl  MachExceptionEnd
-MachExceptionEnd:
-
-/*
- * We couldn't find a TLB entry.
- * Find out what mode we came from and call the appropriate handler.
- */
-SlowFault:
-       .set    noat
-       mfc0    k0, COP_0_STATUS_REG
-       nop
-       and     k0, k0, SR_KSU_USER
-       bne     k0, zero, MachUserGenException
-       nop
-       .set    at
-/*
- * Fall though ...
- */
-
-/*----------------------------------------------------------------------------
- *
- * MachKernGenException --
- *
- *     Handle an exception from kernel mode.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-
-/*
- * The kernel exception stack contains 18 saved general registers,
- * the status register and the multiply lo and high registers.
- * In addition, we set this up for linkage conventions.
- */
-#define KERN_REG_SIZE          (18 * 4)
-#define KERN_REG_OFFSET                (STAND_FRAME_SIZE)
-#define KERN_SR_OFFSET         (STAND_FRAME_SIZE + KERN_REG_SIZE)
-#define KERN_MULT_LO_OFFSET    (STAND_FRAME_SIZE + KERN_REG_SIZE + 4)
-#define KERN_MULT_HI_OFFSET    (STAND_FRAME_SIZE + KERN_REG_SIZE + 8)
-#define        KERN_EXC_FRAME_SIZE     (STAND_FRAME_SIZE + KERN_REG_SIZE + 12)
-
-NNON_LEAF(MachKernGenException, KERN_EXC_FRAME_SIZE, ra)
-       .set    noat
-#ifdef DEBUG
-       la      k0, mdbpcb                      # save registers for mdb
-       sw      s0, (S0 * 4)(k0)
-       sw      s1, (S1 * 4)(k0)
-       sw      s2, (S2 * 4)(k0)
-       sw      s3, (S3 * 4)(k0)
-       sw      s4, (S4 * 4)(k0)
-       sw      s5, (S5 * 4)(k0)
-       sw      s6, (S6 * 4)(k0)
-       sw      s7, (S7 * 4)(k0)
-       sw      s8, (S8 * 4)(k0)
-       sw      gp, (GP * 4)(k0)
-       sw      sp, (SP * 4)(k0)
-#endif
-       subu    sp, sp, KERN_EXC_FRAME_SIZE
-       .mask   0x80000000, (STAND_RA_OFFSET - KERN_EXC_FRAME_SIZE)
-/*
- * Save the relevant kernel registers onto the stack.
- * We don't need to save s0 - s8, sp and gp because
- * the compiler does it for us.
- */
-       sw      AT, KERN_REG_OFFSET + 0(sp)
-       sw      v0, KERN_REG_OFFSET + 4(sp)
-       sw      v1, KERN_REG_OFFSET + 8(sp)
-       sw      a0, KERN_REG_OFFSET + 12(sp)
-       mflo    v0
-       mfhi    v1
-       sw      a1, KERN_REG_OFFSET + 16(sp)
-       sw      a2, KERN_REG_OFFSET + 20(sp)
-       sw      a3, KERN_REG_OFFSET + 24(sp)
-       sw      t0, KERN_REG_OFFSET + 28(sp)
-       mfc0    a0, COP_0_STATUS_REG    # First arg is the status reg.
-       sw      t1, KERN_REG_OFFSET + 32(sp)
-       sw      t2, KERN_REG_OFFSET + 36(sp)
-       sw      t3, KERN_REG_OFFSET + 40(sp)
-       sw      t4, KERN_REG_OFFSET + 44(sp)
-       mfc0    a1, COP_0_CAUSE_REG     # Second arg is the cause reg.
-       sw      t5, KERN_REG_OFFSET + 48(sp)
-       sw      t6, KERN_REG_OFFSET + 52(sp)
-       sw      t7, KERN_REG_OFFSET + 56(sp)
-       sw      t8, KERN_REG_OFFSET + 60(sp)
-       mfc0    a2, COP_0_BAD_VADDR     # Third arg is the fault addr.
-       sw      t9, KERN_REG_OFFSET + 64(sp)
-       sw      ra, KERN_REG_OFFSET + 68(sp)
-       sw      v0, KERN_MULT_LO_OFFSET(sp)
-       sw      v1, KERN_MULT_HI_OFFSET(sp)
-       mfc0    a3, COP_0_EXC_PC                # Fourth arg is the pc.
-       sw      a0, KERN_SR_OFFSET(sp)
-
-       mtc0    zero,COP_0_STATUS_REG   # Set kernel no error level
-/*
- * Call the exception handler.
- */
-       jal     trap
-       sw      a3, STAND_RA_OFFSET(sp)         # for debugging
-/*
- * Restore registers and return from the exception.
- * v0 contains the return address.
- */
-       mtc0    zero,COP_0_STATUS_REG   # Make shure int disabled
-       lw      a0, KERN_SR_OFFSET(sp)
-       lw      t0, KERN_MULT_LO_OFFSET(sp)
-       lw      t1, KERN_MULT_HI_OFFSET(sp)
-       mtc0    a0, COP_0_STATUS_REG    # Restore the SR, disable intrs
-       mtlo    t0
-       mthi    t1
-       dmtc0   v0, COP_0_EXC_PC                # set return address
-       lw      AT, KERN_REG_OFFSET + 0(sp)
-       lw      v0, KERN_REG_OFFSET + 4(sp)
-       lw      v1, KERN_REG_OFFSET + 8(sp)
-       lw      a0, KERN_REG_OFFSET + 12(sp)
-       lw      a1, KERN_REG_OFFSET + 16(sp)
-       lw      a2, KERN_REG_OFFSET + 20(sp)
-       lw      a3, KERN_REG_OFFSET + 24(sp)
-       lw      t0, KERN_REG_OFFSET + 28(sp)
-       lw      t1, KERN_REG_OFFSET + 32(sp)
-       lw      t2, KERN_REG_OFFSET + 36(sp)
-       lw      t3, KERN_REG_OFFSET + 40(sp)
-       lw      t4, KERN_REG_OFFSET + 44(sp)
-       lw      t5, KERN_REG_OFFSET + 48(sp)
-       lw      t6, KERN_REG_OFFSET + 52(sp)
-       lw      t7, KERN_REG_OFFSET + 56(sp)
-       lw      t8, KERN_REG_OFFSET + 60(sp)
-       lw      t9, KERN_REG_OFFSET + 64(sp)
-       lw      ra, KERN_REG_OFFSET + 68(sp)
-       addu    sp, sp, KERN_EXC_FRAME_SIZE
-       eret                                    #  exception.
-       .set    at
-END(MachKernGenException)
-
-/*----------------------------------------------------------------------------
- *
- * MachUserGenException --
- *
- *     Handle an exception from user mode.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-NNON_LEAF(MachUserGenException, STAND_FRAME_SIZE, ra)
-       .set    noat
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-/*
- * Save all of the registers except for the kernel temporaries in u.u_pcb.
- */
-       sw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       sw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       sw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       sw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       mflo    v0
-       sw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       sw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       sw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       sw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       mfhi    v1
-       sw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       sw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       sw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       sw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       mfc0    a0, COP_0_STATUS_REG    # First arg is the status reg.
-       sw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       sw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       sw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       sw      s0, UADDR+U_PCB_REGS+(S0 * 4)
-       mfc0    a1, COP_0_CAUSE_REG     # Second arg is the cause reg.
-       sw      s1, UADDR+U_PCB_REGS+(S1 * 4)
-       sw      s2, UADDR+U_PCB_REGS+(S2 * 4)
-       sw      s3, UADDR+U_PCB_REGS+(S3 * 4)
-       sw      s4, UADDR+U_PCB_REGS+(S4 * 4)
-       mfc0    a2, COP_0_BAD_VADDR     # Third arg is the fault addr
-       sw      s5, UADDR+U_PCB_REGS+(S5 * 4)
-       sw      s6, UADDR+U_PCB_REGS+(S6 * 4)
-       sw      s7, UADDR+U_PCB_REGS+(S7 * 4)
-       sw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       mfc0    a3, COP_0_EXC_PC                # Fourth arg is the pc.
-       sw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       sw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       sw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       sw      s8, UADDR+U_PCB_REGS+(S8 * 4)
-       li      sp, KERNELSTACK - STAND_FRAME_SIZE      # switch to kernel SP
-       sw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       sw      v0, UADDR+U_PCB_REGS+(MULLO * 4)
-       sw      v1, UADDR+U_PCB_REGS+(MULHI * 4)
-       sw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       la      gp, _gp                         # switch to kernel GP
-       sw      a3, UADDR+U_PCB_REGS+(PC * 4)
-       sw      a3, STAND_RA_OFFSET(sp)         # for debugging
-       .set    at
-# Turn off fpu and enter kernel mode
-       and     t0, a0, ~(SR_COP_1_BIT | SR_EXL | SR_KSU_MASK | SR_INT_ENAB)
-       .set    noat
-/*
- * Call the exception handler.
- */
-       jal     trap
-       mtc0    t0, COP_0_STATUS_REG
-/*
- * Restore user registers and return.
- * First disable interrupts and set exeption level.
- */
-       mtc0    zero, COP_0_STATUS_REG  # disable int
-       nop
-       nop
-       nop
-       li      v0, SR_EXL
-       mtc0    v0, COP_0_STATUS_REG    # set exeption level
-
-       lw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       lw      t0, UADDR+U_PCB_REGS+(MULLO * 4)
-       lw      t1, UADDR+U_PCB_REGS+(MULHI * 4)
-       mtc0    a0, COP_0_STATUS_REG    # still exeption level
-       mtlo    t0
-       mthi    t1
-       lw      a0, UADDR+U_PCB_REGS+(PC * 4)
-       lw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       lw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       dmtc0   a0, COP_0_EXC_PC                # set return address
-       lw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       lw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       lw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       lw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       lw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       lw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       lw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       lw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       lw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       lw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       lw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       lw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       lw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       lw      s0, UADDR+U_PCB_REGS+(S0 * 4)
-       lw      s1, UADDR+U_PCB_REGS+(S1 * 4)
-       lw      s2, UADDR+U_PCB_REGS+(S2 * 4)
-       lw      s3, UADDR+U_PCB_REGS+(S3 * 4)
-       lw      s4, UADDR+U_PCB_REGS+(S4 * 4)
-       lw      s5, UADDR+U_PCB_REGS+(S5 * 4)
-       lw      s6, UADDR+U_PCB_REGS+(S6 * 4)
-       lw      s7, UADDR+U_PCB_REGS+(S7 * 4)
-       lw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       lw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       lw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       lw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       lw      s8, UADDR+U_PCB_REGS+(S8 * 4)
-       lw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       eret
-       .set    at
-END(MachUserGenException)
-
-/*----------------------------------------------------------------------------
- *
- * MachKernIntr --
- *
- *     Handle an interrupt from kernel mode.
- *     Interrupts use the standard kernel stack.
- *     switch_exit sets up a kernel stack after exit so interrupts won't fail.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-#define KINTR_REG_OFFSET       (STAND_FRAME_SIZE)
-#define KINTR_SR_OFFSET                (STAND_FRAME_SIZE + KERN_REG_SIZE)
-#define KINTR_MULT_LO_OFFSET   (STAND_FRAME_SIZE + KERN_REG_SIZE + 4)
-#define KINTR_MULT_HI_OFFSET   (STAND_FRAME_SIZE + KERN_REG_SIZE + 8)
-#define KINTR_MULT_GP_OFFSET   (STAND_FRAME_SIZE + KERN_REG_SIZE + 12)
-#define        KINTR_FRAME_SIZE        (STAND_FRAME_SIZE + KERN_REG_SIZE + 16)
-
-NNON_LEAF(MachKernIntr, KINTR_FRAME_SIZE, ra)
-       .set    noat
-       subu    sp, sp, KINTR_FRAME_SIZE        # allocate stack frame
-       .mask   0x80000000, (STAND_RA_OFFSET - KINTR_FRAME_SIZE)
-/*
- * Save the relevant kernel registers onto the stack.
- * We don't need to save s0 - s8, sp and gp because
- * the compiler does it for us.
- */
-       sw      AT, KINTR_REG_OFFSET + 0(sp)
-       sw      v0, KINTR_REG_OFFSET + 4(sp)
-       sw      v1, KINTR_REG_OFFSET + 8(sp)
-       sw      a0, KINTR_REG_OFFSET + 12(sp)
-       mflo    v0
-       mfhi    v1
-       sw      a1, KINTR_REG_OFFSET + 16(sp)
-       sw      a2, KINTR_REG_OFFSET + 20(sp)
-       sw      a3, KINTR_REG_OFFSET + 24(sp)
-       sw      t0, KINTR_REG_OFFSET + 28(sp)
-       mfc0    a0, COP_0_STATUS_REG    # First arg is the status reg.
-       sw      t1, KINTR_REG_OFFSET + 32(sp)
-       sw      t2, KINTR_REG_OFFSET + 36(sp)
-       sw      t3, KINTR_REG_OFFSET + 40(sp)
-       sw      t4, KINTR_REG_OFFSET + 44(sp)
-       mfc0    a1, COP_0_CAUSE_REG     # Second arg is the cause reg.
-       sw      t5, KINTR_REG_OFFSET + 48(sp)
-       sw      t6, KINTR_REG_OFFSET + 52(sp)
-       sw      t7, KINTR_REG_OFFSET + 56(sp)
-       sw      t8, KINTR_REG_OFFSET + 60(sp)
-       mfc0    a2, COP_0_EXC_PC                # Third arg is the pc.
-       sw      t9, KINTR_REG_OFFSET + 64(sp)
-       sw      ra, KINTR_REG_OFFSET + 68(sp)
-       sw      v0, KINTR_MULT_LO_OFFSET(sp)
-       sw      v1, KINTR_MULT_HI_OFFSET(sp)
-       sw      a0, KINTR_SR_OFFSET(sp)
-
-       mtc0    zero, COP_0_STATUS_REG  # Reset exl, trap possible.
-/*
- * Call the interrupt handler.
- */
-       jal     interrupt
-       sw      a2, STAND_RA_OFFSET(sp)         # for debugging
-/*
- * Restore registers and return from the interrupt.
- */
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupt
-       lw      a0, KINTR_SR_OFFSET(sp)
-       lw      t0, KINTR_MULT_LO_OFFSET(sp)
-       lw      t1, KINTR_MULT_HI_OFFSET(sp)
-       mtc0    a0, COP_0_STATUS_REG    # Restore the SR, disable intrs
-       mtlo    t0
-       mthi    t1
-       lw      a0, STAND_RA_OFFSET(sp)
-       lw      AT, KINTR_REG_OFFSET + 0(sp)
-       lw      v0, KINTR_REG_OFFSET + 4(sp)
-       dmtc0   a0, COP_0_EXC_PC                # set return address
-       lw      v1, KINTR_REG_OFFSET + 8(sp)
-       lw      a0, KINTR_REG_OFFSET + 12(sp)
-       lw      a1, KINTR_REG_OFFSET + 16(sp)
-       lw      a2, KINTR_REG_OFFSET + 20(sp)
-       lw      a3, KINTR_REG_OFFSET + 24(sp)
-       lw      t0, KINTR_REG_OFFSET + 28(sp)
-       lw      t1, KINTR_REG_OFFSET + 32(sp)
-       lw      t2, KINTR_REG_OFFSET + 36(sp)
-       lw      t3, KINTR_REG_OFFSET + 40(sp)
-       lw      t4, KINTR_REG_OFFSET + 44(sp)
-       lw      t5, KINTR_REG_OFFSET + 48(sp)
-       lw      t6, KINTR_REG_OFFSET + 52(sp)
-       lw      t7, KINTR_REG_OFFSET + 56(sp)
-       lw      t8, KINTR_REG_OFFSET + 60(sp)
-       lw      t9, KINTR_REG_OFFSET + 64(sp)
-       lw      ra, KINTR_REG_OFFSET + 68(sp)
-       addu    sp, sp, KINTR_FRAME_SIZE
-       eret                                    #  interrupt.
-       .set    at
-END(MachKernIntr)
-
-/*----------------------------------------------------------------------------
- *
- * MachUserIntr --
- *
- *     Handle an interrupt from user mode.
- *     Note: we save minimal state in the u.u_pcb struct and use the standard
- *     kernel stack since there has to be a u page if we came from user mode.
- *     If there is a pending software interrupt, then save the remaining state
- *     and call softintr(). This is all because if we call switch() inside
- *     interrupt(), not all the user registers have been saved in u.u_pcb.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-NNON_LEAF(MachUserIntr, STAND_FRAME_SIZE, ra)
-       .set    noat
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-/*
- * Save the relevant user registers into the u.u_pcb struct.
- * We don't need to save s0 - s8 because
- * the compiler does it for us.
- */
-       sw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       sw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       sw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       sw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       mflo    v0
-       mfhi    v1
-       sw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       sw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       sw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       sw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       mfc0    a0, COP_0_STATUS_REG    # First arg is the status reg.
-       sw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       sw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       sw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       sw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       mfc0    a1, COP_0_CAUSE_REG     # Second arg is the cause reg.
-       sw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       sw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       sw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       sw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       mfc0    a2, COP_0_EXC_PC                # Third arg is the pc.
-       sw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       sw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       sw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       sw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       li      sp, KERNELSTACK - STAND_FRAME_SIZE      # switch to kernel SP
-       sw      v0, UADDR+U_PCB_REGS+(MULLO * 4)
-       sw      v1, UADDR+U_PCB_REGS+(MULHI * 4)
-       sw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       sw      a2, UADDR+U_PCB_REGS+(PC * 4)
-       la      gp, _gp                         # switch to kernel GP
-# Turn off fpu and enter kernel mode
-       .set    at
-       and     t0, a0, ~(SR_COP_1_BIT | SR_EXL | SR_INT_ENAB | SR_KSU_MASK)
-       .set    noat
-       mtc0    t0, COP_0_STATUS_REG
-/*
- * Call the interrupt handler.
- */
-       jal     interrupt
-       sw      a2, STAND_RA_OFFSET(sp)         # for debugging
-/*
- * Restore registers and return from the interrupt.
- */
-       mtc0    zero, COP_0_STATUS_REG
-       nop
-       nop
-       nop
-       li      v0, SR_EXL
-       mtc0    v0, COP_0_STATUS_REG    # set exeption level bit.
-
-       lw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       lw      v0, astpending                  # any pending interrupts?
-       mtc0    a0, COP_0_STATUS_REG    # Restore the SR, disable intrs
-       bne     v0, zero, 1f                    # dont restore, call softintr
-       lw      t0, UADDR+U_PCB_REGS+(MULLO * 4)
-       lw      t1, UADDR+U_PCB_REGS+(MULHI * 4)
-       lw      a0, UADDR+U_PCB_REGS+(PC * 4)
-       lw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       lw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       dmtc0   a0, COP_0_EXC_PC                # set return address
-       lw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       lw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       lw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       lw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       lw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       mtlo    t0
-       mthi    t1
-       lw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       lw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       lw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       lw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       lw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       lw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       lw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       lw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       lw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       lw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       lw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       lw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       lw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       eret                                    #  interrupt.
-
-1:
-/*
- * We have pending software interrupts; save remaining user state in u.u_pcb.
- */
-       sw      s0, UADDR+U_PCB_REGS+(S0 * 4)
-       sw      s1, UADDR+U_PCB_REGS+(S1 * 4)
-       sw      s2, UADDR+U_PCB_REGS+(S2 * 4)
-       sw      s3, UADDR+U_PCB_REGS+(S3 * 4)
-       sw      s4, UADDR+U_PCB_REGS+(S4 * 4)
-       sw      s5, UADDR+U_PCB_REGS+(S5 * 4)
-       sw      s6, UADDR+U_PCB_REGS+(S6 * 4)
-       sw      s7, UADDR+U_PCB_REGS+(S7 * 4)
-       sw      s8, UADDR+U_PCB_REGS+(S8 * 4)
-       li      t0, HARD_INT_MASK | SR_INT_ENAB
-/*
- * Call the software interrupt handler.
- */
-       jal     softintr
-       mtc0    t0, COP_0_STATUS_REG    # enable interrupts (spl0)
-/*
- * Restore user registers and return. NOTE: interrupts are enabled.
- */
-       mtc0    zero, COP_0_STATUS_REG
-       nop
-       nop
-       nop
-       li      v0, SR_EXL
-       mtc0    v0, COP_0_STATUS_REG    # set exeption level bit.
-
-       lw      a0, UADDR+U_PCB_REGS+(SR * 4)
-       lw      t0, UADDR+U_PCB_REGS+(MULLO * 4)
-       lw      t1, UADDR+U_PCB_REGS+(MULHI * 4)
-       mtc0    a0, COP_0_STATUS_REG    # this should disable interrupts
-       mtlo    t0
-       mthi    t1
-       lw      a0, UADDR+U_PCB_REGS+(PC * 4)
-       lw      AT, UADDR+U_PCB_REGS+(AST * 4)
-       lw      v0, UADDR+U_PCB_REGS+(V0 * 4)
-       dmtc0   a0, COP_0_EXC_PC                # set return address
-       lw      v1, UADDR+U_PCB_REGS+(V1 * 4)
-       lw      a0, UADDR+U_PCB_REGS+(A0 * 4)
-       lw      a1, UADDR+U_PCB_REGS+(A1 * 4)
-       lw      a2, UADDR+U_PCB_REGS+(A2 * 4)
-       lw      a3, UADDR+U_PCB_REGS+(A3 * 4)
-       lw      t0, UADDR+U_PCB_REGS+(T0 * 4)
-       lw      t1, UADDR+U_PCB_REGS+(T1 * 4)
-       lw      t2, UADDR+U_PCB_REGS+(T2 * 4)
-       lw      t3, UADDR+U_PCB_REGS+(T3 * 4)
-       lw      t4, UADDR+U_PCB_REGS+(T4 * 4)
-       lw      t5, UADDR+U_PCB_REGS+(T5 * 4)
-       lw      t6, UADDR+U_PCB_REGS+(T6 * 4)
-       lw      t7, UADDR+U_PCB_REGS+(T7 * 4)
-       lw      s0, UADDR+U_PCB_REGS+(S0 * 4)
-       lw      s1, UADDR+U_PCB_REGS+(S1 * 4)
-       lw      s2, UADDR+U_PCB_REGS+(S2 * 4)
-       lw      s3, UADDR+U_PCB_REGS+(S3 * 4)
-       lw      s4, UADDR+U_PCB_REGS+(S4 * 4)
-       lw      s5, UADDR+U_PCB_REGS+(S5 * 4)
-       lw      s6, UADDR+U_PCB_REGS+(S6 * 4)
-       lw      s7, UADDR+U_PCB_REGS+(S7 * 4)
-       lw      t8, UADDR+U_PCB_REGS+(T8 * 4)
-       lw      t9, UADDR+U_PCB_REGS+(T9 * 4)
-       lw      gp, UADDR+U_PCB_REGS+(GP * 4)
-       lw      sp, UADDR+U_PCB_REGS+(SP * 4)
-       lw      s8, UADDR+U_PCB_REGS+(S8 * 4)
-       lw      ra, UADDR+U_PCB_REGS+(RA * 4)
-       eret
-       .set    at
-END(MachUserIntr)
-
-/*----------------------------------------------------------------------------
- *
- * MachTLBMInvalidException --
- *
- *     Handle a TLB invalid exception from kernel mode in kernel space.
- *     The BaddVAddr, Context, and EntryHi registers contain the failed
- *     virtual address.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-NLEAF(MachTLBInvalidException)
-       .set    noat
-       dmfc0   k0, COP_0_BAD_VADDR     # get the fault address
-       li      k1, VM_MIN_KERNEL_ADDRESS       # compute index
-       subu    k0, k0, k1
-       lw      k1, Sysmapsize                  # index within range?
-       srl     k0, k0, PGSHIFT
-       sltu    k1, k0, k1
-       beq     k1, zero, sys_stk_chk           # No. check for valid stack
-       lw      k1, Sysmap
-
-       sll     k0, k0, 2                       # compute offset from index
-       tlbp                                    # Probe the invalid entry
-       addu    k1, k1, k0
-       and     k0, k0, 4                       # check even/odd page
-       bne     k0, zero, KernTLBIOdd
-       nop
-
-       mfc0    k0, COP_0_TLB_INDEX
-       nop
-       bltz    k0, sys_stk_chk
-       sltiu   k0, k0, 8
-
-       bne     k0, zero, sys_stk_chk
-       lw      k0, 0(k1)                       # get PTE entry
-
-       dsll    k0, k0, 34                      # get rid of "wired" bit
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO0               # load PTE entry
-       and     k0, k0, PG_V                    # check for valid entry
-       beq     k0, zero, MachKernGenException  # PTE invalid
-       lw      k0, 4(k1)                       # get odd PTE entry
-       dsll    k0, k0, 34
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO1               # load PTE entry
-       nop
-       tlbwi                                   # write TLB
-       nop
-       nop
-       nop
-       nop
-       nop
-       eret
-
-KernTLBIOdd:
-       mfc0    k0, COP_0_TLB_INDEX
-       nop
-       bltz    k0, sys_stk_chk
-       sltiu   k0, k0, 8
-
-       bne     k0, zero, sys_stk_chk
-       lw      k0, 0(k1)                       # get PTE entry
-
-       dsll    k0, k0, 34                      # get rid of wired bit
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO1               # save PTE entry
-       and     k0, k0, PG_V                    # check for valid entry
-       beq     k0, zero, MachKernGenException  # PTE invalid
-       lw      k0, -4(k1)                      # get even PTE entry
-       dsll    k0, k0, 34
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO0               # save PTE entry
-       nop
-       tlbwi                                   # update TLB
-       nop
-       nop
-       nop
-       nop
-       nop
-       eret
-END(MachTLBInvalidException)
-
-/*----------------------------------------------------------------------------
- *
- * MachTLBMissException --
- *
- *     Handle a TLB miss exception from kernel mode in kernel space.
- *     The BaddVAddr, Context, and EntryHi registers contain the failed
- *     virtual address.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-NLEAF(MachTLBMissException)
-       .set    noat
-       dmfc0   k0, COP_0_BAD_VADDR     # get the fault address
-       li      k1, VM_MIN_KERNEL_ADDRESS       # compute index
-       subu    k0, k0, k1
-       lw      k1, Sysmapsize                  # index within range?
-       srl     k0, k0, PGSHIFT
-       sltu    k1, k0, k1
-       beq     k1, zero, sys_stk_chk           # No. check for valid stack
-       lw      k1, Sysmap
-       srl     k0, k0, 1
-       sll     k0, k0, 3                       # compute offset from index
-       addu    k1, k1, k0
-       lw      k0, 0(k1)                       # get PTE entry
-       lw      k1, 4(k1)                       # get odd PTE entry
-       dsll    k0, k0, 34                      # get rid of "wired" bit
-       dsrl    k0, k0, 34
-       dmtc0   k0, COP_0_TLB_LO0               # load PTE entry
-       dsll    k1, k1, 34
-       dsrl    k1, k1, 34
-       dmtc0   k1, COP_0_TLB_LO1               # load PTE entry
-       nop
-       tlbwr                                   # write TLB
-       nop
-       nop
-       nop
-       nop
-       nop
-       eret
-
-sys_stk_chk:
-       subu    k0, sp, UADDR + 0x200           # check to see if we have a
-       sltiu   k0, UPAGES*NBPG - 0x200         #  valid kernel stack
-       bne     k0, zero, MachKernGenException  # Go panic
-       nop
-
-       la      a0, start - START_FRAME - 8     # set sp to a valid place
-       sw      sp, 24(a0)
-       move    sp, a0
-       la      a0, 1f
-       mfc0    a2, COP_0_STATUS_REG
-       mfc0    a3, COP_0_CAUSE_REG
-       dmfc0   a1, COP_0_EXC_PC
-       sw      a2, 16(sp)
-       sw      a3, 20(sp)
-       move    a2, ra
-       jal     printf
-       dmfc0   a3, COP_0_BAD_VADDR
-       .data
-1:
-       .asciiz "ktlbmiss: PC %x RA %x ADR %x\nSR %x CR %x SP %x\n"
-       .text
-
-       la      sp, start - START_FRAME         # set sp to a valid place
-       PANIC("kernel stack overflow")
-       .set    at
-END(MachTLBMissException)
-
-/*
- * Set/clear software interrupt routines.
- */
-
-LEAF(setsoftclock)
-       mfc0    v0, COP_0_CAUSE_REG     # read cause register
-       nop
-       or      v0, v0, SOFT_INT_MASK_0 # set soft clock interrupt
-       mtc0    v0, COP_0_CAUSE_REG     # save it
-       j       ra
-       nop
-END(setsoftclock)
-
-LEAF(clearsoftclock)
-       mfc0    v0, COP_0_CAUSE_REG     # read cause register
-       nop
-       and     v0, v0, ~SOFT_INT_MASK_0        # clear soft clock interrupt
-       mtc0    v0, COP_0_CAUSE_REG     # save it
-       j       ra
-       nop
-END(clearsoftclock)
-
-LEAF(setsoftnet)
-       mfc0    v0, COP_0_CAUSE_REG     # read cause register
-       nop
-       or      v0, v0, SOFT_INT_MASK_1 # set soft net interrupt
-       mtc0    v0, COP_0_CAUSE_REG     # save it
-       j       ra
-       nop
-END(setsoftnet)
-
-LEAF(clearsoftnet)
-       mfc0    v0, COP_0_CAUSE_REG     # read cause register
-       nop
-       and     v0, v0, ~SOFT_INT_MASK_1        # clear soft net interrupt
-       mtc0    v0, COP_0_CAUSE_REG     # save it
-       j       ra
-       nop
-END(clearsoftnet)
-
-/*
- * Set/change interrupt priority routines.
- */
-
-LEAF(MachEnableIntr)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       nop
-       or      v0, v0, SR_INT_ENAB
-       mtc0    v0, COP_0_STATUS_REG    # enable all interrupts
-       j       ra
-       nop
-END(MachEnableIntr)
-
-LEAF(spl0)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       nop
-       or      t0, v0, (INT_MASK | SR_INT_ENAB)
-       mtc0    t0, COP_0_STATUS_REG    # enable all interrupts
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(spl0)
-
-LEAF(splsoftclock)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~SOFT_INT_MASK_0    # disable soft clock
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(splsoftclock)
-
-LEAF(splsoftnet)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(splsoftnet)
-
-LEAF(Mach_spl0)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_0|SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl0)
-
-LEAF(Mach_spl1)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_1|SOFT_INT_MASK_0|SOFT_INT_MASK_1)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl1)
-
-LEAF(Mach_spl2)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_2|SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl2)
-
-LEAF(Mach_spl3)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_3|SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl3)
-
-LEAF(Mach_spl4)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_4|SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl4)
-
-LEAF(Mach_spl5)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~(INT_MASK_5|SOFT_INT_MASK_1|SOFT_INT_MASK_0)
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(Mach_spl5)
-
-/*
- * We define an alternate entry point after mcount is called so it
- * can be used in mcount without causeing a recursive loop.
- */
-LEAF(splhigh)
-ALEAF(_splhigh)
-       mfc0    v0, COP_0_STATUS_REG    # read status register
-       li      t0, ~SR_INT_ENAB        # disable all interrupts
-       and     t0, t0, v0
-       mtc0    t0, COP_0_STATUS_REG    # save it
-       nop                                     # 3 ins to disable
-       j       ra
-       and     v0, v0, (INT_MASK | SR_INT_ENAB)
-END(splhigh)
-
-/*
- * Restore saved interrupt mask.
- */
-LEAF(splx)
-ALEAF(_splx)
-       mfc0    v0, COP_0_STATUS_REG
-       li      t0, ~(INT_MASK | SR_INT_ENAB)
-       and     t0, t0, v0
-       or      t0, t0, a0
-       mtc0    t0, COP_0_STATUS_REG
-       nop                                     # 3 ins to disable
-       j       ra
-       nop
-END(splx)
-
-/*----------------------------------------------------------------------------
- *
- * wbflush --
- *
- *     Return when the write buffer is empty.
- *
- *     wbflush()
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(wbflush)
-       nop
-       sync
-       j       ra
-       nop
-END(wbflush)
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBWriteIndexed --
- *
- *     Write the given entry into the TLB at the given index.
- *
- *     MachTLBWriteIndexed(index, tlb)
- *             unsigned index;
- *             tlb *tlb;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     TLB entry set.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBWriteIndexed)
-       mfc0    v1, COP_0_STATUS_REG    # Save the status register.
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       nop
-       lw      a2, 8(a1)
-       lw      a3, 12(a1)
-       dmfc0   t0, COP_0_TLB_HI                # Save the current PID.
-
-       dmtc0   a2, COP_0_TLB_LO0               # Set up entry low0.
-       dmtc0   a3, COP_0_TLB_LO1               # Set up entry low1.
-       lw      a2, 0(a1)
-       lw      a3, 4(a1)
-       mtc0    a0, COP_0_TLB_INDEX     # Set the index.
-       dmtc0   a2, COP_0_TLB_PG_MASK   # Set up entry mask.
-       dmtc0   a3, COP_0_TLB_HI                # Set up entry high.
-       nop
-       tlbwi                                   # Write the TLB
-       nop
-       nop
-       nop                                     # Delay for effect
-       nop
-
-       dmtc0   t0, COP_0_TLB_HI                # Restore the PID.
-       nop
-       dmtc0   zero, COP_0_TLB_PG_MASK # Default mask value.
-       j       ra
-       mtc0    v1, COP_0_STATUS_REG    # Restore the status register
-END(MachTLBWriteIndexed)
-
-/*--------------------------------------------------------------------------
- *
- * MachSetPID --
- *
- *     Write the given pid into the TLB pid reg.
- *
- *     MachSetPID(pid)
- *             int pid;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     PID set in the entry hi register.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachSetPID)
-       dmtc0   a0, COP_0_TLB_HI                # Write the hi reg value
-       j       ra
-       nop
-END(MachSetPID)
-
-/*--------------------------------------------------------------------------
- *
- * MachSetWIRED --
- *
- *     Write the given value into the TLB wired reg.
- *
- *     MachSetPID(wired)
- *             int wired;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     WIRED set in the wired register.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachSetWIRED)
-       mtc0    a0, COP_0_TLB_WIRED
-       j       ra
-       nop
-END(MachSetWIRED)
-
-/*--------------------------------------------------------------------------
- *
- * MachGetWIRED --
- *
- *     Get the value from the TLB wired reg.
- *
- *     MachGetWIRED(void)
- *
- * Results:
- *     Value of wired reg.
- *
- * Side effects:
- *     None.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachGetWIRED)
-       mfc0    v0, COP_0_TLB_WIRED
-       j       ra
-       nop
-END(MachGetWIRED)
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBFlush --
- *
- *     Flush the "random" entries from the TLB.
- *     Uses "wired" register to determine what register to start with.
- *
- *     MachTLBFlush()
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     The TLB is flushed.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBFlush)
-       mfc0    v1, COP_0_STATUS_REG    # Save the status register.
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       mfc0    t1, COP_0_TLB_WIRED
-       li      t2, VMNUM_TLB_ENTRIES
-       li      v0, CACHED_MEMORY_ADDR  # invalid address
-       dmfc0   t0, COP_0_TLB_HI                # Save the PID
-
-       dmtc0   v0, COP_0_TLB_HI                # Mark entry high as invalid
-       dmtc0   zero, COP_0_TLB_LO0     # Zero out low entry0.
-       dmtc0   zero, COP_0_TLB_LO1     # Zero out low entry1.
-       mtc0    zero, COP_0_TLB_PG_MASK # Zero out mask entry.
-/*
- * Align the starting value (t1) and the upper bound (t2).
- */
-1:
-       mtc0    t1, COP_0_TLB_INDEX     # Set the index register.
-       addu    t1, t1, 1                       # Increment index.
-       tlbwi                                   # Write the TLB entry.
-       nop
-       nop
-       bne     t1, t2, 1b
-       nop
-
-       dmtc0   t0, COP_0_TLB_HI                # Restore the PID
-       j       ra
-       mtc0    v1, COP_0_STATUS_REG    # Restore the status register
-END(MachTLBFlush)
-
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBFlushAddr --
- *
- *     Flush any TLB entries for the given address and TLB PID.
- *
- *     MachTLBFlushAddr(TLBhi)
- *             unsigned TLBhi;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     The process's page is flushed from the TLB.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBFlushAddr)
-       mfc0    v1, COP_0_STATUS_REG    # Save the status register.
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       nop
-       li      v0, (PG_HVPN | PG_ASID)
-       and     a0, a0, v0                      # Make shure valid hi value.
-       dmfc0   t0, COP_0_TLB_HI                # Get current PID
-       dmtc0   a0, COP_0_TLB_HI                # look for addr & PID
-       nop
-       nop
-       nop
-       tlbp                                    # Probe for the entry.
-       nop
-       nop                                     # Delay for effect
-       nop
-       mfc0    v0, COP_0_TLB_INDEX     # See what we got
-       li      t1, CACHED_MEMORY_ADDR  # Load invalid entry.
-       bltz    v0, 1f                          # index < 0 => !found
-       nop
-       dmtc0   t1, COP_0_TLB_HI                # Mark entry high as invalid
-
-       dmtc0   zero, COP_0_TLB_LO0     # Zero out low entry.
-       dmtc0   zero, COP_0_TLB_LO1     # Zero out low entry.
-       nop
-       tlbwi
-       nop
-       nop
-       nop
-       nop
-1:
-       dmtc0   t0, COP_0_TLB_HI                # restore PID
-       j       ra
-       mtc0    v1, COP_0_STATUS_REG    # Restore the status register
-END(MachTLBFlushAddr)
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBUpdate --
- *
- *     Update the TLB if highreg is found; otherwise, enter the data.
- *
- *     MachTLBUpdate(virpageadr, lowregx)
- *             unsigned virpageadr, lowregx;
- *
- * Results:
- *     < 0 if loaded >= 0 if updated.
- *
- * Side effects:
- *     None.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBUpdate)
-       mfc0    v1, COP_0_STATUS_REG    # Save the status register.
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       and     t1, a0, 0x1000                  # t1 = Even/Odd flag
-       li      v0, (PG_HVPN | PG_ASID)
-       and     a0, a0, v0
-       dmfc0   t0, COP_0_TLB_HI                # Save current PID
-       dmtc0   a0, COP_0_TLB_HI                # Init high reg
-       and     a2, a1, PG_G                    # Copy global bit
-       nop
-       nop
-       tlbp                                    # Probe for the entry.
-       dsll    a1, a1, 34
-       dsrl    a1, a1, 34
-       bne     t1, zero, 2f                    # Decide even odd
-       mfc0    v0, COP_0_TLB_INDEX     # See what we got
-# EVEN
-       nop
-       bltz    v0, 1f                          # index < 0 => !found
-       nop
-
-       tlbr                                    # update, read entry first
-       nop
-       nop
-       nop
-       dmtc0   a1, COP_0_TLB_LO0               # init low reg0.
-       nop
-       tlbwi                                   # update slot found
-       b       4f
-       nop
-1:
-       mtc0    zero, COP_0_TLB_PG_MASK # init mask.
-       dmtc0   a0, COP_0_TLB_HI                # init high reg.
-       dmtc0   a1, COP_0_TLB_LO0               # init low reg0.
-       dmtc0   a2, COP_0_TLB_LO1               # init low reg1.
-       nop
-       tlbwr                                   # enter into a random slot
-       b       4f
-       nop
-# ODD
-2:
-       nop
-       bltz    v0, 3f                          # index < 0 => !found
-       nop
-
-       tlbr                                    # read the entry first
-       nop
-       nop
-       nop
-       dmtc0   a1, COP_0_TLB_LO1               # init low reg1.
-       nop
-       tlbwi                                   # update slot found
-       b       4f
-       nop
-3:
-       mtc0    zero, COP_0_TLB_PG_MASK # init mask.
-       dmtc0   a0, COP_0_TLB_HI                # init high reg.
-       dmtc0   a2, COP_0_TLB_LO0               # init low reg0.
-       dmtc0   a1, COP_0_TLB_LO1               # init low reg1.
-       nop
-       tlbwr                                   # enter into a random slot
-
-4:                                             # Make shure pipeline
-       nop                                     # advances before we
-       nop                                     # uses the tlb.
-       nop
-       nop
-       dmtc0   t0, COP_0_TLB_HI                # restore PID
-       j       ra
-       mtc0    v1, COP_0_STATUS_REG    # Restore the status register
-END(MachTLBUpdate)
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBRead --
- *
- *     Read the TLB entry.
- *
- *     MachTLBRead(entry, tlb)
- *             unsigned entry;
- *             struct tlb *tlb;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     tlb will contain the TLB entry found.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBRead)
-       mfc0    v1, COP_0_STATUS_REG    # Save the status register.
-       mtc0    zero, COP_0_STATUS_REG  # Disable interrupts
-       nop
-       nop
-       nop
-       dmfc0   t0, COP_0_TLB_HI                # Get current PID
-
-       mtc0    a0, COP_0_TLB_INDEX     # Set the index register
-       nop
-       tlbr                                    # Read from the TLB
-       nop
-       nop
-       nop
-       mfc0    t2, COP_0_TLB_PG_MASK   # fetch the hi entry
-       dmfc0   t3, COP_0_TLB_HI                # fetch the hi entry
-       dmfc0   t4, COP_0_TLB_LO0               # See what we got
-       dmfc0   t5, COP_0_TLB_LO1               # See what we got
-       dmtc0   t0, COP_0_TLB_HI                # restore PID
-       nop
-       nop
-       nop                                     # wait for PID active
-       mtc0    v1, COP_0_STATUS_REG    # Restore the status register
-       sw      t2, 0(a1)
-       sw      t3, 4(a1)
-       sw      t4, 8(a1)
-       j       ra
-       sw      t5, 12(a1)
-END(MachTLBRead)
-
-/*--------------------------------------------------------------------------
- *
- * MachTLBGetPID --
- *
- *     MachTLBGetPID()
- *
- * Results:
- *     Returns the current TLB pid reg.
- *
- * Side effects:
- *     None.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MachTLBGetPID)
-       dmfc0   v0, COP_0_TLB_HI                # get PID
-       j       ra
-       and     v0, v0, VMTLB_PID               # mask off PID
-END(MachTLBGetPID)
-
-
-/*----------------------------------------------------------------------------
- *
- * MachSwitchFPState --
- *
- *     Save the current state into 'from' and restore it from 'to'.
- *
- *     MachSwitchFPState(from, to)
- *             struct proc *from;
- *             struct user *to;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachSwitchFPState)
-       mfc0    t1, COP_0_STATUS_REG    # Save old SR
-       li      t0, SR_COP_1_BIT                # enable the coprocessor
-       mtc0    t0, COP_0_STATUS_REG
-
-       beq     a0, zero, 1f                    # skip save if NULL pointer
-       nop
-/*
- * First read out the status register to make sure that all FP operations
- * have completed.
- */
-       lw      a0, P_ADDR(a0)                  # get pointer to pcb for proc
-       cfc1    t0, FPC_CSR             # stall til FP done
-       cfc1    t0, FPC_CSR             # now get status
-       li      t3, ~SR_COP_1_BIT
-       lw      t2, U_PCB_REGS+(PS * 4)(a0)     # get CPU status register
-       sw      t0, U_PCB_FPREGS+(32 * 4)(a0)   # save FP status
-       and     t2, t2, t3                      # clear COP_1 enable bit
-       sw      t2, U_PCB_REGS+(PS * 4)(a0)     # save new status register
-/*
- * Save the floating point registers.
- */
-       swc1    $f0, U_PCB_FPREGS+(0 * 4)(a0)
-       swc1    $f1, U_PCB_FPREGS+(1 * 4)(a0)
-       swc1    $f2, U_PCB_FPREGS+(2 * 4)(a0)
-       swc1    $f3, U_PCB_FPREGS+(3 * 4)(a0)
-       swc1    $f4, U_PCB_FPREGS+(4 * 4)(a0)
-       swc1    $f5, U_PCB_FPREGS+(5 * 4)(a0)
-       swc1    $f6, U_PCB_FPREGS+(6 * 4)(a0)
-       swc1    $f7, U_PCB_FPREGS+(7 * 4)(a0)
-       swc1    $f8, U_PCB_FPREGS+(8 * 4)(a0)
-       swc1    $f9, U_PCB_FPREGS+(9 * 4)(a0)
-       swc1    $f10, U_PCB_FPREGS+(10 * 4)(a0)
-       swc1    $f11, U_PCB_FPREGS+(11 * 4)(a0)
-       swc1    $f12, U_PCB_FPREGS+(12 * 4)(a0)
-       swc1    $f13, U_PCB_FPREGS+(13 * 4)(a0)
-       swc1    $f14, U_PCB_FPREGS+(14 * 4)(a0)
-       swc1    $f15, U_PCB_FPREGS+(15 * 4)(a0)
-       swc1    $f16, U_PCB_FPREGS+(16 * 4)(a0)
-       swc1    $f17, U_PCB_FPREGS+(17 * 4)(a0)
-       swc1    $f18, U_PCB_FPREGS+(18 * 4)(a0)
-       swc1    $f19, U_PCB_FPREGS+(19 * 4)(a0)
-       swc1    $f20, U_PCB_FPREGS+(20 * 4)(a0)
-       swc1    $f21, U_PCB_FPREGS+(21 * 4)(a0)
-       swc1    $f22, U_PCB_FPREGS+(22 * 4)(a0)
-       swc1    $f23, U_PCB_FPREGS+(23 * 4)(a0)
-       swc1    $f24, U_PCB_FPREGS+(24 * 4)(a0)
-       swc1    $f25, U_PCB_FPREGS+(25 * 4)(a0)
-       swc1    $f26, U_PCB_FPREGS+(26 * 4)(a0)
-       swc1    $f27, U_PCB_FPREGS+(27 * 4)(a0)
-       swc1    $f28, U_PCB_FPREGS+(28 * 4)(a0)
-       swc1    $f29, U_PCB_FPREGS+(29 * 4)(a0)
-       swc1    $f30, U_PCB_FPREGS+(30 * 4)(a0)
-       swc1    $f31, U_PCB_FPREGS+(31 * 4)(a0)
-
-1:
-/*
- *  Restore the floating point registers.
- */
-       lw      t0, U_PCB_FPREGS+(32 * 4)(a1)   # get status register
-       lwc1    $f0, U_PCB_FPREGS+(0 * 4)(a1)
-       lwc1    $f1, U_PCB_FPREGS+(1 * 4)(a1)
-       lwc1    $f2, U_PCB_FPREGS+(2 * 4)(a1)
-       lwc1    $f3, U_PCB_FPREGS+(3 * 4)(a1)
-       lwc1    $f4, U_PCB_FPREGS+(4 * 4)(a1)
-       lwc1    $f5, U_PCB_FPREGS+(5 * 4)(a1)
-       lwc1    $f6, U_PCB_FPREGS+(6 * 4)(a1)
-       lwc1    $f7, U_PCB_FPREGS+(7 * 4)(a1)
-       lwc1    $f8, U_PCB_FPREGS+(8 * 4)(a1)
-       lwc1    $f9, U_PCB_FPREGS+(9 * 4)(a1)
-       lwc1    $f10, U_PCB_FPREGS+(10 * 4)(a1)
-       lwc1    $f11, U_PCB_FPREGS+(11 * 4)(a1)
-       lwc1    $f12, U_PCB_FPREGS+(12 * 4)(a1)
-       lwc1    $f13, U_PCB_FPREGS+(13 * 4)(a1)
-       lwc1    $f14, U_PCB_FPREGS+(14 * 4)(a1)
-       lwc1    $f15, U_PCB_FPREGS+(15 * 4)(a1)
-       lwc1    $f16, U_PCB_FPREGS+(16 * 4)(a1)
-       lwc1    $f17, U_PCB_FPREGS+(17 * 4)(a1)
-       lwc1    $f18, U_PCB_FPREGS+(18 * 4)(a1)
-       lwc1    $f19, U_PCB_FPREGS+(19 * 4)(a1)
-       lwc1    $f20, U_PCB_FPREGS+(20 * 4)(a1)
-       lwc1    $f21, U_PCB_FPREGS+(21 * 4)(a1)
-       lwc1    $f22, U_PCB_FPREGS+(22 * 4)(a1)
-       lwc1    $f23, U_PCB_FPREGS+(23 * 4)(a1)
-       lwc1    $f24, U_PCB_FPREGS+(24 * 4)(a1)
-       lwc1    $f25, U_PCB_FPREGS+(25 * 4)(a1)
-       lwc1    $f26, U_PCB_FPREGS+(26 * 4)(a1)
-       lwc1    $f27, U_PCB_FPREGS+(27 * 4)(a1)
-       lwc1    $f28, U_PCB_FPREGS+(28 * 4)(a1)
-       lwc1    $f29, U_PCB_FPREGS+(29 * 4)(a1)
-       lwc1    $f30, U_PCB_FPREGS+(30 * 4)(a1)
-       lwc1    $f31, U_PCB_FPREGS+(31 * 4)(a1)
-
-       and     t0, t0, ~FPC_EXCEPTION_BITS
-       ctc1    t0, FPC_CSR
-       nop
-
-       mtc0    t1, COP_0_STATUS_REG    # Restore the status register.
-       j       ra
-       nop
-END(MachSwitchFPState)
-
-/*----------------------------------------------------------------------------
- *
- * MachSaveCurFPState --
- *
- *     Save the current floating point coprocessor state.
- *
- *     MachSaveCurFPState(p)
- *             struct proc *p;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     machFPCurProcPtr is cleared.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachSaveCurFPState)
-       lw      a0, P_ADDR(a0)                  # get pointer to pcb for proc
-       mfc0    t1, COP_0_STATUS_REG    # Disable interrupts and
-       li      t0, SR_COP_1_BIT                #  enable the coprocessor
-       mtc0    t0, COP_0_STATUS_REG
-       sw      zero, machFPCurProcPtr          # indicate state has been saved
-/*
- * First read out the status register to make sure that all FP operations
- * have completed.
- */
-       lw      t2, U_PCB_REGS+(PS * 4)(a0)     # get CPU status register
-       li      t3, ~SR_COP_1_BIT
-       and     t2, t2, t3                      # clear COP_1 enable bit
-       cfc1    t0, FPC_CSR             # stall til FP done
-       cfc1    t0, FPC_CSR             # now get status
-       sw      t2, U_PCB_REGS+(PS * 4)(a0)     # save new status register
-       sw      t0, U_PCB_FPREGS+(32 * 4)(a0)   # save FP status
-/*
- * Save the floating point registers.
- */
-       swc1    $f0, U_PCB_FPREGS+(0 * 4)(a0)
-       swc1    $f1, U_PCB_FPREGS+(1 * 4)(a0)
-       swc1    $f2, U_PCB_FPREGS+(2 * 4)(a0)
-       swc1    $f3, U_PCB_FPREGS+(3 * 4)(a0)
-       swc1    $f4, U_PCB_FPREGS+(4 * 4)(a0)
-       swc1    $f5, U_PCB_FPREGS+(5 * 4)(a0)
-       swc1    $f6, U_PCB_FPREGS+(6 * 4)(a0)
-       swc1    $f7, U_PCB_FPREGS+(7 * 4)(a0)
-       swc1    $f8, U_PCB_FPREGS+(8 * 4)(a0)
-       swc1    $f9, U_PCB_FPREGS+(9 * 4)(a0)
-       swc1    $f10, U_PCB_FPREGS+(10 * 4)(a0)
-       swc1    $f11, U_PCB_FPREGS+(11 * 4)(a0)
-       swc1    $f12, U_PCB_FPREGS+(12 * 4)(a0)
-       swc1    $f13, U_PCB_FPREGS+(13 * 4)(a0)
-       swc1    $f14, U_PCB_FPREGS+(14 * 4)(a0)
-       swc1    $f15, U_PCB_FPREGS+(15 * 4)(a0)
-       swc1    $f16, U_PCB_FPREGS+(16 * 4)(a0)
-       swc1    $f17, U_PCB_FPREGS+(17 * 4)(a0)
-       swc1    $f18, U_PCB_FPREGS+(18 * 4)(a0)
-       swc1    $f19, U_PCB_FPREGS+(19 * 4)(a0)
-       swc1    $f20, U_PCB_FPREGS+(20 * 4)(a0)
-       swc1    $f21, U_PCB_FPREGS+(21 * 4)(a0)
-       swc1    $f22, U_PCB_FPREGS+(22 * 4)(a0)
-       swc1    $f23, U_PCB_FPREGS+(23 * 4)(a0)
-       swc1    $f24, U_PCB_FPREGS+(24 * 4)(a0)
-       swc1    $f25, U_PCB_FPREGS+(25 * 4)(a0)
-       swc1    $f26, U_PCB_FPREGS+(26 * 4)(a0)
-       swc1    $f27, U_PCB_FPREGS+(27 * 4)(a0)
-       swc1    $f28, U_PCB_FPREGS+(28 * 4)(a0)
-       swc1    $f29, U_PCB_FPREGS+(29 * 4)(a0)
-       swc1    $f30, U_PCB_FPREGS+(30 * 4)(a0)
-       swc1    $f31, U_PCB_FPREGS+(31 * 4)(a0)
-
-       mtc0    t1, COP_0_STATUS_REG    # Restore the status register.
-       j       ra
-       nop
-END(MachSaveCurFPState)
-
-/*----------------------------------------------------------------------------
- *
- * MachFPTrap --
- *
- *     Handle a floating point Trap.
- *
- *     MachFPTrap(statusReg, causeReg, pc)
- *             unsigned statusReg;
- *             unsigned causeReg;
- *             unsigned pc;
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------------
- */
-NON_LEAF(MachFPTrap, STAND_FRAME_SIZE, ra)
-       subu    sp, sp, STAND_FRAME_SIZE
-       mfc0    t0, COP_0_STATUS_REG
-       sw      ra, STAND_RA_OFFSET(sp)
-       .mask   0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
-
-       or      t1, t0, SR_COP_1_BIT
-       mtc0    t1, COP_0_STATUS_REG
-       nop
-       nop
-       nop
-       nop
-       cfc1    t1, FPC_CSR     # stall til FP done
-       cfc1    t1, FPC_CSR     # now get status
-       nop
-       sll     t2, t1, (31 - 17)       # unimplemented operation?
-       bgez    t2, 3f                  # no, normal trap
-       nop
-/*
- * We got an unimplemented operation trap so
- * fetch the instruction, compute the next PC and emulate the instruction.
- */
-       bgez    a1, 1f                  # Check the branch delay bit.
-       nop
-/*
- * The instruction is in the branch delay slot so the branch will have to
- * be emulated to get the resulting PC.
- */
-       sw      a2, STAND_FRAME_SIZE + 8(sp)
-       li      a0, UADDR+U_PCB_REGS            # first arg is ptr to CPU registers
-       move    a1, a2                          # second arg is instruction PC
-       move    a2, t1                          # third arg is floating point CSR
-       jal     MachEmulateBranch               # compute PC after branch
-       move    a3, zero                        # fourth arg is FALSE
-/*
- * Now load the floating-point instruction in the branch delay slot
- * to be emulated.
- */
-       lw      a2, STAND_FRAME_SIZE + 8(sp)    # restore EXC pc
-       b       2f
-       lw      a0, 4(a2)                       # a0 = coproc instruction
-/*
- * This is not in the branch delay slot so calculate the resulting
- * PC (epc + 4) into v0 and continue to MachEmulateFP().
- */
-1:
-       lw      a0, 0(a2)                       # a0 = coproc instruction
-       addu    v0, a2, 4                       # v0 = next pc
-2:
-       sw      v0, UADDR+U_PCB_REGS+(PC * 4)   # save new pc
-/*
- * Check to see if the instruction to be emulated is a floating-point
- * instruction.
- */
-       srl     a3, a0, OPCODE_SHIFT
-       beq     a3, OPCODE_C1, 4f               # this should never fail
-       nop
-/*
- * Send a floating point exception signal to the current process.
- */
-3:
-       lw      a0, curproc                     # get current process
-       cfc1    a2, FPC_CSR             # code = FP execptions
-       ctc1    zero, FPC_CSR           # Clear exceptions
-       jal     trapsignal
-       li      a1, SIGFPE
-       b       FPReturn
-       nop
-
-/*
- * Finally, we can call MachEmulateFP() where a0 is the instruction to emulate.
- */
-4:
-       jal     MachEmulateFP
-       nop
-
-/*
- * Turn off the floating point coprocessor and return.
- */
-FPReturn:
-       mfc0    t0, COP_0_STATUS_REG
-       lw      ra, STAND_RA_OFFSET(sp)
-       and     t0, t0, ~SR_COP_1_BIT
-       mtc0    t0, COP_0_STATUS_REG
-       j       ra
-       addu    sp, sp, STAND_FRAME_SIZE
-END(MachFPTrap)
-
-/*----------------------------------------------------------------------------
- *
- * MachConfigCache --
- *
- *     Size the caches.
- *     NOTE: should only be called from mach_init().
- *
- * Results:
- *             None.
- *
- * Side effects:
- *     The size of the data cache is stored into machPrimaryDataCacheSize.
- *     The size of instruction cache is stored into machPrimaryInstCacheSize.
- *     Alignment mask for cache aliasing test is stored in machCacheAliasMask.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachConfigCache)
-       mfc0    v0, COP_0_CONFIG                # Get configuration register
-       nop
-       srl     t1, v0, 9                       # Get I cache size.
-       and     t1, 3
-       li      t2, 4096
-       sllv    t2, t2, t1
-       sw      t2, machPrimaryDataCacheSize
-       addiu   t2, -1
-       and     t2, ~(NBPG - 1)
-       sw      t2, machCacheAliasMask
-
-       and     t2, v0, 0x20
-       srl     t2, t2, 1
-       addu    t2, t2, 16
-       sw      t2, machPrimaryDataCacheLSize
-
-       srl     t1, v0, 6                       # Get I cache size.
-       and     t1, 3
-       li      t2, 4096
-       sllv    t2, t2, t1
-       sw      t2, machPrimaryInstCacheSize
-
-       and     t2, v0, 0x10
-       addu    t2, t2, 16
-       sw      t2, machPrimaryInstCacheLSize
-       j       ra
-       nop
-END(MachConfigCache)
-
-/*----------------------------------------------------------------------------
- *
- * MachFlushCache --
- *
- *     Flush the caches. Assumes a line size of 16 bytes for speed.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     The contents of the caches is flushed.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachFlushCache)
-       lw      t1, machPrimaryInstCacheSize
-       lw      t2, machPrimaryDataCacheSize
- #     lw      t3, machPrimaryInstCacheLSize
- #     lw      t4, machPrimaryDataCacheLSize
-/*
- * Flush the instruction cache.
- */
-       li      t0, CACHED_MEMORY_ADDR
-       addu    t1, t0, t1              # End address
-       subu    t1, t1, 128
-1:
-       cache   0, 0(t0)
-       cache   0, 16(t0)
-       cache   0, 32(t0)
-       cache   0, 48(t0)
-       cache   0, 64(t0)
-       cache   0, 80(t0)
-       cache   0, 96(t0)
-       cache   0, 112(t0)
-       bne     t0, t1, 1b
-       addu    t0, t0, 128
-
-/*
- * Flush the data cache.
- */
-       li      t0, CACHED_MEMORY_ADDR
-       addu    t1, t0, t2              # End address
-       subu    t1, t1, 128
-1:
-       cache   1, 0(t0)
-       cache   1, 16(t0)
-       cache   1, 32(t0)
-       cache   1, 48(t0)
-       cache   1, 64(t0)
-       cache   1, 80(t0)
-       cache   1, 96(t0)
-       cache   1, 112(t0)
-       bne     t0, t1, 1b
-       addu    t0, t0, 128
-
-       j       ra
-       nop
-END(MachFlushCache)
-
-/*----------------------------------------------------------------------------
- *
- * MachFlushICache --
- *
- *     void MachFlushICache(addr, len)
- *             vm_offset_t addr, len;
- *
- *     Flush instruction cache for range of addr to addr + len - 1.
- *     The address can be any valid address so long as no TLB misses occur.
- *     Assumes a cache line size of 16 bytes for speed.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     The contents of the cache is flushed.
- *     Must not touch v0.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachFlushICache)
-       addu    a1, 127         # Align
-       srl     a1, a1, 7       # Number of unrolled loops
-1:
-       cache   0, 0(a0)
-       cache   0, 16(a0)
-       cache   0, 32(a0)
-       cache   0, 48(a0)
-       cache   0, 64(a0)
-       cache   0, 80(a0)
-       cache   0, 96(a0)
-       cache   0, 112(a0)
-       addu    a1, -1
-       bne     a1, zero, 1b
-       addu    a0, 128
-
-       j       ra
-       nop
-END(MachFlushICache)
-
-/*----------------------------------------------------------------------------
- *
- * MachFlushDCache --
- *
- *     void MachFlushDCache(addr, len)
- *             vm_offset_t addr, len;
- *
- *     Flush data cache for index range of addr to addr + len - 1.
- *     The address is reduced to a kseg0 index.
- *     
- * Results:
- *     None.
- *
- * Side effects:
- *     The contents of the cache is written back to primary memory.
- *     The cache line is invalidated.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachFlushDCache)
-       lw      a2, machPrimaryDataCacheSize
-       addiu   a2, -1
-       and     a0, a0, a2
-       addu    a1, 127         # Align
-       li      a2, 0x80000000
-       addu    a0, a0, a2
-       addu    a1, a1, a0
-       and     a0, a0, -128
-       subu    a1, a1, a0
-       srl     a1, a1, 7       # Compute number of cache lines
-1:
-       cache   1, 0(a0)
-       cache   1, 16(a0)
-       cache   1, 32(a0)
-       cache   1, 48(a0)
-       cache   1, 64(a0)
-       cache   1, 80(a0)
-       cache   1, 96(a0)
-       cache   1, 112(a0)
-       addu    a1, -1
-       bne     a1, zero, 1b
-       addu    a0, 128
-
-       j       ra
-       nop
-END(MachFlushDCache)
-
-/*----------------------------------------------------------------------------
- *
- * MachHitFlushDCache --
- *
- *     void MachHitFlushDCache(addr, len)
- *             vm_offset_t addr, len;
- *
- *     Flush data cache for range of addr to addr + len - 1.
- *     The address can be any valid viritual address as long
- *     as no TLB invalid traps occur. Only lines with matching
- *     addr is flushed.
- *     
- * Results:
- *     None.
- *
- * Side effects:
- *     The contents of the cache is written back to primary memory.
- *     The cache line is invalidated.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachHitFlushDCache)
-       beq     a1, zero, 2f
-       addu    a1, 127         # Align
-       addu    a1, a1, a0
-       and     a0, a0, -128
-       subu    a1, a1, a0
-       srl     a1, a1, 7       # Compute number of cache lines
-1:
-       cache   0x15, 0(a0)
-       cache   0x15, 16(a0)
-       cache   0x15, 32(a0)
-       cache   0x15, 48(a0)
-       cache   0x15, 64(a0)
-       cache   0x15, 80(a0)
-       cache   0x15, 96(a0)
-       cache   0x15, 112(a0)
-       addu    a1, -1
-       bne     a1, zero, 1b
-       addu    a0, 128
-
-2:
-       j       ra
-       nop
-END(MachHitFlushDCache)
-/*----------------------------------------------------------------------------
- *
- * MachInvalidateDCache --
- *
- *     void MachFlushDCache(addr, len)
- *             vm_offset_t addr, len;
- *
- *     Flush data cache for range of addr to addr + len - 1.
- *     The address can be any valid address as long as no TLB misses occur.
- *     (Be sure to use cached K0SEG kernel addresses or mapped addresses)
- * Results:
- *     None.
- *
- * Side effects:
- *     The cache line is invalidated.
- *
- *----------------------------------------------------------------------------
- */
-LEAF(MachInvalidateDCache)
-       addu    a1, a1, a0                      # compute ending address
-1:
-       addu    a0, a0, 4
-       bne     a0, a1, 1b
-       cache   0x11,-4(a0)
-
-       j       ra
-       nop
-END(MachInvalidateDCache)
-
-#ifdef DEBUG
-/*
- * Read a long and return it.
- * Note: addresses can be unaligned!
- *
- * long
-L* mdbpeek(addr)
-L*     caddt_t addr;
-L* {
-L*     return (*(long *)addr);
-L* }
- */
-LEAF(mdbpeek)
-       li      v0, MDBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       and     v0, a0, 3               # unaligned address?
-       bne     v0, zero, 1f
-       nop
-       b       2f
-       lw      v0, (a0)                # aligned access
-1:
-       lwr     v0, 0(a0)               # get next 4 bytes (unaligned)
-       lwl     v0, 3(a0)
-2:
-       j       ra                      # made it w/o errors
-       sw      zero, UADDR+U_PCB_ONFAULT
-mdberr:
-       li      v0, 1                   # trap sends us here
-       sw      v0, mdbmkfault
-       j       ra
-       nop
-END(mdbpeek)
-
-/*
- * Write a long to 'addr'.
- * Note: addresses can be unaligned!
- *
-L* void
-L* mdbpoke(addr, value)
-L*     caddt_t addr;
-L*     long value;
-L* {
-L*     *(long *)addr = value;
-L* }
- */
-LEAF(mdbpoke)
-       li      v0, MDBERR
-       sw      v0, UADDR+U_PCB_ONFAULT
-       and     v0, a0, 3               # unaligned address?
-       bne     v0, zero, 1f
-       nop
-       b       2f
-       sw      a1, (a0)                # aligned access
-1:
-       swr     a1, 0(a0)               # store next 4 bytes (unaligned)
-       swl     a1, 3(a0)
-       and     a0, a0, ~3              # align address for cache flush
-2:
-       sw      zero, UADDR+U_PCB_ONFAULT
-       b       MachFlushICache         # flush instruction cache
-       li      a1, 8
-END(mdbpoke)
-
-/*
- * Save registers and state so we can do a 'mdbreset' (like longjmp) later.
- * Always returns zero.
- *
-L* int mdb_savearea[11];
-L*
-L* int
-L* mdbsetexit()
-L* {
-L*     mdb_savearea[0] = 0;
-L*     return (0);
-L* }
- */
-       .comm   mdb_savearea, (11 * 4)
-
-LEAF(mdbsetexit)
-       la      a0, mdb_savearea
-       sw      s0, 0(a0)
-       sw      s1, 4(a0)
-       sw      s2, 8(a0)
-       sw      s3, 12(a0)
-       sw      s4, 16(a0)
-       sw      s5, 20(a0)
-       sw      s6, 24(a0)
-       sw      s7, 28(a0)
-       sw      sp, 32(a0)
-       sw      s8, 36(a0)
-       sw      ra, 40(a0)
-       j       ra
-       move    v0, zero
-END(mdbsetexit)
-
-/*
- * Restore registers and state (like longjmp) and return x.
- *
-L* int
-L* mdbreset(x)
-L* {
-L*     return (x);
-L* }
- */
-LEAF(mdbreset)
-       la      v0, mdb_savearea
-       lw      ra, 40(v0)
-       lw      s0, 0(v0)
-       lw      s1, 4(v0)
-       lw      s2, 8(v0)
-       lw      s3, 12(v0)
-       lw      s4, 16(v0)
-       lw      s5, 20(v0)
-       lw      s6, 24(v0)
-       lw      s7, 28(v0)
-       lw      sp, 32(v0)
-       lw      s8, 36(v0)
-       j       ra
-       move    v0, a0
-END(mdbreset)
-
-/*
- * Trap into the debugger.
- *
-L* void
-L* mdbpanic()
-L* {
-L* }
- */
-LEAF(mdbpanic)
-       break   BREAK_SOVER_VAL
-       j       ra
-       nop
-END(mdbpanic)
-#endif /* DEBUG */
-
-#ifdef DEBUG
-LEAF(cpu_getregs)
-       sw      sp, 0(a0)
-       sw      ra, 4(a0)
-       j       ra
-       sw      s8, 8(a0)
-END(cpu_getregs)
-#endif /* DEBUG */
-
-/*
- * Interrupt counters for vmstat.
- * XXX These aren't used yet.
- */
-       .data
-       .globl intrcnt
-       .globl eintrcnt
-       .globl intrnames
-       .globl eintrnames
-intrnames:
-       .asciiz "spur"
-       .asciiz "hil"
-       .asciiz "lev2"
-       .asciiz "lev3"
-       .asciiz "lev4"
-       .asciiz "lev5"
-       .asciiz "dma"
-       .asciiz "clock"
-       .asciiz "statclock"
-       .asciiz "nmi"
-eintrnames:
-       .align  2
-intrcnt:
-       .word   0,0,0,0,0,0,0,0,0,0
-eintrcnt:
diff --git a/sys/arch/pica/pica/machdep.c b/sys/arch/pica/pica/machdep.c
deleted file mode 100644 (file)
index 25ec8a2..0000000
+++ /dev/null
@@ -1,1170 +0,0 @@
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department, The Mach Operating System project at
- * Carnegie-Mellon University and Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)machdep.c     8.3 (Berkeley) 1/12/94
- *      $Id: machdep.c,v 1.10 1996/07/27 11:40:49 deraadt Exp $
- */
-
-/* from: Utah Hdr: machdep.c 1.63 91/04/24 */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/signalvar.h>
-#include <sys/kernel.h>
-#include <sys/map.h>
-#include <sys/proc.h>
-#include <sys/buf.h>
-#include <sys/reboot.h>
-#include <sys/conf.h>
-#include <sys/file.h>
-#include <sys/clist.h>
-#include <sys/callout.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/msgbuf.h>
-#include <sys/ioctl.h>
-#include <sys/tty.h>
-#include <sys/user.h>
-#include <sys/exec.h>
-#include <sys/sysctl.h>
-#include <sys/mount.h>
-#include <sys/syscallargs.h>
-#ifdef SYSVSHM
-#include <sys/shm.h>
-#endif
-#ifdef SYSVSEM
-#include <sys/sem.h>
-#endif
-#ifdef SYSVMSG
-#include <sys/msg.h>
-#endif
-
-#include <vm/vm_kern.h>
-
-#include <machine/cpu.h>
-#include <machine/reg.h>
-#include <machine/pio.h>
-#include <machine/psl.h>
-#include <machine/pte.h>
-#include <machine/autoconf.h>
-
-#include <sys/exec_ecoff.h>
-
-#include <dev/cons.h>
-
-#include <pica/pica/pica.h>
-#include <pica/pica/picatype.h>
-
-#include <asc.h>
-
-#if NASC > 0
-#include <pica/dev/ascreg.h>
-#endif
-
-extern struct consdev *cn_tab;
-
-/* the following is used externally (sysctl_hw) */
-char   machine[] = "pica";     /* cpu "architecture" */
-char   cpu_model[30];
-
-vm_map_t buffer_map;
-
-/*
- * Declare these as initialized data so we can patch them.
- */
-int    nswbuf = 0;
-#ifdef NBUF
-int    nbuf = NBUF;
-#else
-int    nbuf = 0;
-#endif
-#ifdef BUFPAGES
-int    bufpages = BUFPAGES;
-#else
-int    bufpages = 0;
-#endif
-int    msgbufmapped = 0;       /* set when safe to use msgbuf */
-int    maxmem;                 /* max memory per process */
-int    physmem;                /* max supported memory, changes to actual */
-int    memcfg;                 /* memory config register */
-int    brdcfg;                 /* motherboard config register */
-int    cpucfg;                 /* Value of processor config register */
-int    cputype;                /* Mother board type */
-int    ncpu = 1;               /* At least one cpu in the system */
-int    isa_io_base;            /* Base address of ISA io port space */
-int    isa_mem_base;           /* Base address of ISA memory space */
-
-extern int Mach_spl0(), Mach_spl1(), Mach_spl2(), Mach_spl3();
-extern int Mach_spl4(), Mach_spl5(), splhigh();
-int    (*Mach_splnet)() = splhigh;
-int    (*Mach_splbio)() = splhigh;
-int    (*Mach_splimp)() = splhigh;
-int    (*Mach_spltty)() = splhigh;
-int    (*Mach_splclock)() = splhigh;
-int    (*Mach_splstatclock)() = splhigh;
-
-void vid_print_string(const char *str);
-void vid_putchar(dev_t dev, char c);
-
-
-/*
- * safepri is a safe priority for sleep to set for a spin-wait
- * during autoconfiguration or after a panic.
- */
-int    safepri = PSL_LOWIPL;
-
-struct user *proc0paddr;
-struct proc nullproc;          /* for use by swtch_exit() */
-
-/*
- * Do all the stuff that locore normally does before calling main().
- * Process arguments passed to us by the BIOS.
- * Reset mapping and set up mapping to hardware and init "wired" reg.
- * Return the first page address following the system.
- */
-mips_init(argc, argv, code)
-       int argc;
-       char *argv[];
-       u_int code;
-{
-       register char *cp;
-       register int i;
-       register unsigned firstaddr;
-       register caddr_t v;
-       caddr_t start;
-       struct tlb tlb;
-       extern char edata[], end[];
-       extern char MachTLBMiss[], MachTLBMissEnd[];
-       extern char MachException[], MachExceptionEnd[];
-
-       /* clear the BSS segment in NetBSD code */
-       v = (caddr_t)pica_round_page(end);
-       bzero(edata, v - edata);
-
-       /* check what model platform we are running on */
-       cputype = ACER_PICA_61; /* FIXME find systemtype */
-
-       /*
-        * Get config register now as mapped from BIOS since we are
-        * going to demap these addresses later. We want as may TLB
-        * entries as possible to do something useful :-).
-        */
-
-       switch (cputype) {
-       case ACER_PICA_61:      /* ALI PICA 61 */
-               memcfg = in32(PICA_MEMORY_SIZE_REG);
-               brdcfg = in32(PICA_CONFIG_REG);
-               isa_io_base = PICA_V_ISA_IO;
-               isa_mem_base = PICA_V_ISA_MEM;
-               break;
-       default:
-               memcfg = -1;
-               break;
-       }
-
-       /* look at argv[0] and compute bootdev */
-       makebootdev(argv[0]);
-
-       /*
-        * Look at arguments passed to us and compute boothowto.
-        */
-#ifdef GENERIC
-       boothowto = RB_SINGLE | RB_ASKNAME;
-#else
-       boothowto = RB_SINGLE;
-#endif
-#ifdef KADB
-       boothowto |= RB_KDB;
-#endif
-       if (argc > 1) {
-               for (i = 1; i < argc; i++) {
-                       if(strncmp("OSLOADOPTIONS=",argv[i],14) == 0) {
-                               for (cp = argv[i]+14; *cp; cp++) {
-                                       switch (*cp) {
-                                       case 'a': /* autoboot */
-                                               boothowto &= ~RB_SINGLE;
-                                               break;
-
-                                       case 'd': /* use compiled in default root */
-                                               boothowto |= RB_DFLTROOT;
-                                               break;
-
-                                       case 'm': /* mini root present in memory */
-                                               boothowto |= RB_MINIROOT;
-                                               break;
-
-                                       case 'n': /* ask for names */
-                                               boothowto |= RB_ASKNAME;
-                                               break;
-
-                                       case 'N': /* don't ask for names */
-                                               boothowto &= ~RB_ASKNAME;
-                                               break;
-                                       }
-
-                               }
-                       }
-               }
-       }
-
-#ifdef MFS
-       /*
-        * Check to see if a mini-root was loaded into memory. It resides
-        * at the start of the next page just after the end of BSS.
-        */
-       if (boothowto & RB_MINIROOT) {
-               boothowto |= RB_DFLTROOT;
-               v += mfs_initminiroot(v);
-       }
-#endif
-
-       /*
-        * Now its time to abandon the BIOS and be self supplying.
-        * Start with cleaning out the TLB. Bye bye Microsoft....
-        */
-       MachSetWIRED(0);
-       MachTLBFlush();
-       MachSetWIRED(VMWIRED_ENTRIES);
-
-       /*
-        * Set up mapping for hardware the way we want it!
-        */
-
-       tlb.tlb_mask = PG_SIZE_256K;
-       tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_IO_BASE);
-       tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_IO_BASE) | PG_IOPAGE;
-       tlb.tlb_lo1 = vad_to_pfn(PICA_P_INT_SOURCE) | PG_IOPAGE;
-       MachTLBWriteIndexed(1, &tlb);
-
-       tlb.tlb_mask = PG_SIZE_1M;
-       tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO_CTRL);
-       tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL) | PG_IOPAGE;
-       tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO_CTRL + PICA_S_LOCAL_VIDEO_CTRL/2) | PG_IOPAGE;
-       MachTLBWriteIndexed(2, &tlb);
-       
-       tlb.tlb_mask = PG_SIZE_1M;
-       tlb.tlb_hi = vad_to_vpn(PICA_V_EXTND_VIDEO_CTRL);
-       tlb.tlb_lo0 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL) | PG_IOPAGE;
-       tlb.tlb_lo1 = vad_to_pfn(PICA_P_EXTND_VIDEO_CTRL + PICA_S_EXTND_VIDEO_CTRL/2) | PG_IOPAGE;
-       MachTLBWriteIndexed(3, &tlb);
-       
-       tlb.tlb_mask = PG_SIZE_4M;
-       tlb.tlb_hi = vad_to_vpn(PICA_V_LOCAL_VIDEO);
-       tlb.tlb_lo0 = vad_to_pfn(PICA_P_LOCAL_VIDEO) | PG_IOPAGE;
-       tlb.tlb_lo1 = vad_to_pfn(PICA_P_LOCAL_VIDEO + PICA_S_LOCAL_VIDEO/2) | PG_IOPAGE;
-       MachTLBWriteIndexed(4, &tlb);
-       
-       tlb.tlb_mask = PG_SIZE_16M;
-       tlb.tlb_hi = vad_to_vpn(PICA_V_ISA_IO);
-       tlb.tlb_lo0 = vad_to_pfn(PICA_P_ISA_IO) | PG_IOPAGE;
-       tlb.tlb_lo1 = vad_to_pfn(PICA_P_ISA_MEM) | PG_IOPAGE;
-       MachTLBWriteIndexed(5, &tlb);
-       
-       /*
-        * Init mapping for u page(s) for proc[0], pm_tlbpid 1.
-        */
-       v = (caddr_t)((int)v+3 & -4);
-       start = v;
-       curproc->p_addr = proc0paddr = (struct user *)v;
-       curproc->p_md.md_regs = proc0paddr->u_pcb.pcb_regs;
-       firstaddr = CACHED_TO_PHYS(v);
-       for (i = 0; i < UPAGES; i+=2) {
-               tlb.tlb_mask = PG_SIZE_4K;
-               tlb.tlb_hi = vad_to_vpn((UADDR + (i << PGSHIFT))) | 1;
-               tlb.tlb_lo0 = vad_to_pfn(firstaddr) | PG_V | PG_M | PG_CACHED;
-               tlb.tlb_lo1 = vad_to_pfn(firstaddr + NBPG) | PG_V | PG_M | PG_CACHED;
-               curproc->p_md.md_upte[i] = tlb.tlb_lo0;
-               curproc->p_md.md_upte[i+1] = tlb.tlb_lo1;
-               MachTLBWriteIndexed(i,&tlb);
-               firstaddr += NBPG * 2;
-       }
-       v += UPAGES * NBPG;
-       v = (caddr_t)((int)v+3 & -4);
-       MachSetPID(1);
-
-       /*
-        * init nullproc for swtch_exit().
-        * init mapping for u page(s), pm_tlbpid 0
-        * This could be used for an idle process.
-        */
-       nullproc.p_addr = (struct user *)v;
-       nullproc.p_md.md_regs = nullproc.p_addr->u_pcb.pcb_regs;
-       bcopy("nullproc", nullproc.p_comm, sizeof("nullproc"));
-       firstaddr = CACHED_TO_PHYS(v);
-       for (i = 0; i < UPAGES; i+=2) {
-               nullproc.p_md.md_upte[i] = vad_to_pfn(firstaddr) | PG_V | PG_M | PG_CACHED;
-               nullproc.p_md.md_upte[i+1] = vad_to_pfn(firstaddr + NBPG) | PG_V | PG_M | PG_CACHED;
-               firstaddr += NBPG * 2;
-       }
-       v += UPAGES * NBPG;
-
-       /* clear pages for u areas */
-       bzero(start, v - start);
-
-       /*
-        * Copy down exception vector code.
-        */
-       if (MachTLBMissEnd - MachTLBMiss > 0x80)
-               panic("startup: TLB code too large");
-       bcopy(MachTLBMiss, (char *)TLB_MISS_EXC_VEC,
-               MachTLBMissEnd - MachTLBMiss);
-       bcopy(MachException, (char *)GEN_EXC_VEC,
-               MachExceptionEnd - MachException);
-
-       /*
-        * Clear out the I and D caches.
-        */
-       cpucfg = MachConfigCache();
-       MachFlushCache();
-
-       /* check what model platform we are running on */
-       switch (cputype) {
-       case ACER_PICA_61:      /* ALI PICA 61 */
-               /*
-                * Set up interrupt handling and I/O addresses.
-                */
-#if 0 /* XXX FIXME */
-               Mach_splnet = Mach_spl1;
-               Mach_splbio = Mach_spl0;
-               Mach_splimp = Mach_spl1;
-               Mach_spltty = Mach_spl2;
-               Mach_splstatclock = Mach_spl3;
-#endif
-               strcpy(cpu_model, "PICA_61");
-               break;
-
-       default:
-               printf("kernel not configured for systype 0x%x\n", i);
-               boot(RB_HALT | RB_NOSYNC);
-       }
-
-       /*
-        * Find out how much memory is available.
-        */
-
-       switch (cputype) {
-       case ACER_PICA_61:      /* ALI PICA 61 */
-               /*
-                * Size is determined from the memory config register.
-                *  d0-d2 = bank 0 size (sim id)
-                *  d3-d5 = bank 1 size
-                *  d6 = bus width. (doubels memory size)
-                */
-               if((memcfg & 7) <= 5)
-                       physmem = 2097152 << (memcfg & 7);
-               if(((memcfg >> 3) & 7) <= 5)
-                       physmem += 2097152 << ((memcfg >> 3) & 7);
-
-               if((memcfg & 0x40) == 0)
-                       physmem += physmem;     /* 128 bit config */
-
-               physmem = btoc(physmem);
-               break;
-
-       default:
-               physmem = btoc((u_int)v - KERNBASE);
-               cp = (char *)PHYS_TO_UNCACHED(physmem << PGSHIFT);
-               while (cp < (char *)MAX_MEM_ADDR) {
-                       if (badaddr(cp, 4))
-                               break;
-                       i = *(int *)cp;
-                       *(int *)cp = 0xa5a5a5a5;
-                       /*
-                        * Data will persist on the bus if we read it right away
-                        * Have to be tricky here.
-                        */
-                       ((int *)cp)[4] = 0x5a5a5a5a;
-                       wbflush();
-                       if (*(int *)cp != 0xa5a5a5a5)
-                               break;
-                       *(int *)cp = i;
-                       cp += NBPG;
-                       physmem++;
-               }
-               break;
-       }
-
-       maxmem = physmem;
-
-       /*
-        * Initialize error message buffer (at end of core).
-        */
-       maxmem -= btoc(sizeof (struct msgbuf));
-       msgbufp = (struct msgbuf *)(PHYS_TO_CACHED(maxmem << PGSHIFT));
-       msgbufmapped = 1;
-
-       /*
-        * Allocate space for system data structures.
-        * The first available kernel virtual address is in "v".
-        * As pages of kernel virtual memory are allocated, "v" is incremented.
-        *
-        * These data structures are allocated here instead of cpu_startup()
-        * because physical memory is directly addressable. We don't have
-        * to map these into virtual address space.
-        */
-       start = v;
-
-#define        valloc(name, type, num) \
-           (name) = (type *)v; v = (caddr_t)((name)+(num))
-#define        valloclim(name, type, num, lim) \
-           (name) = (type *)v; v = (caddr_t)((lim) = ((name)+(num)))
-#ifdef REAL_CLISTS
-       valloc(cfree, struct cblock, nclist);
-#endif
-       valloc(callout, struct callout, ncallout);
-       valloc(swapmap, struct map, nswapmap = maxproc * 2);
-#ifdef SYSVSHM
-       valloc(shmsegs, struct shmid_ds, shminfo.shmmni);
-#endif
-#ifdef SYSVSEM
-       valloc(sema, struct semid_ds, seminfo.semmni);
-       valloc(sem, struct sem, seminfo.semmns);
-       /* This is pretty disgusting! */
-       valloc(semu, int, (seminfo.semmnu * seminfo.semusz) / sizeof(int));
-#endif
-#ifdef SYSVMSG
-       valloc(msgpool, char, msginfo.msgmax);
-       valloc(msgmaps, struct msgmap, msginfo.msgseg);
-       valloc(msghdrs, struct msg, msginfo.msgtql);
-       valloc(msqids, struct msqid_ds, msginfo.msgmni);
-#endif
-
-       /*
-        * Determine how many buffers to allocate.
-        * We allocate more buffer space than the BSD standard of
-        * using 10% of memory for the first 2 Meg, 5% of remaining.
-        * We just allocate a flat 10%. Ensure a minimum of 16 buffers.
-        * We allocate 1/2 as many swap buffer headers as file i/o buffers.
-        */
-       if (bufpages == 0)
-               bufpages = physmem / 10 / CLSIZE;
-       if (nbuf == 0) {
-               nbuf = bufpages;
-               if (nbuf < 16)
-                       nbuf = 16;
-       }
-       if (nswbuf == 0) {
-               nswbuf = (nbuf / 2) &~ 1;       /* force even */
-               if (nswbuf > 256)
-                       nswbuf = 256;           /* sanity */
-       }
-       valloc(swbuf, struct buf, nswbuf);
-       valloc(buf, struct buf, nbuf);
-
-       /*
-        * Clear allocated memory.
-        */
-       bzero(start, v - start);
-
-       /*
-        * Initialize the virtual memory system.
-        */
-       pmap_bootstrap((vm_offset_t)v);
-}
-
-/*
- * Console initialization: called early on from main,
- * before vm init or startup.  Do enough configuration
- * to choose and initialize a console.
- */
-void
-consinit()
-{
-       static int initted;
-
-       if (initted)
-               return;
-       initted = 1;
-       cninit();
-}
-
-/*
- * cpu_startup: allocate memory for variable-sized tables,
- * initialize cpu, and do autoconfiguration.
- */
-void
-cpu_startup()
-{
-       register unsigned i;
-       register caddr_t v;
-       int base, residual;
-       vm_offset_t minaddr, maxaddr;
-       vm_size_t size;
-#ifdef DEBUG
-       extern int pmapdebug;
-       int opmapdebug = pmapdebug;
-
-       pmapdebug = 0;          /* Shut up pmap debug during bootstrap */
-#endif
-
-       /*
-        * Good {morning,afternoon,evening,night}.
-        */
-       printf(version);
-       printf("real mem = %d\n", ctob(physmem));
-
-       /*
-        * Allocate virtual address space for file I/O buffers.
-        * Note they are different than the array of headers, 'buf',
-        * and usually occupy more virtual memory than physical.
-        */
-       size = MAXBSIZE * nbuf;
-       buffer_map = kmem_suballoc(kernel_map, (vm_offset_t *)&buffers,
-                                  &maxaddr, size, TRUE);
-       minaddr = (vm_offset_t)buffers;
-       if (vm_map_find(buffer_map, vm_object_allocate(size), (vm_offset_t)0,
-                       &minaddr, size, FALSE) != KERN_SUCCESS)
-               panic("startup: cannot allocate buffers");
-       base = bufpages / nbuf;
-       residual = bufpages % nbuf;
-       for (i = 0; i < nbuf; i++) {
-               vm_size_t curbufsize;
-               vm_offset_t curbuf;
-
-               /*
-                * First <residual> buffers get (base+1) physical pages
-                * allocated for them.  The rest get (base) physical pages.
-                *
-                * The rest of each buffer occupies virtual space,
-                * but has no physical memory allocated for it.
-                */
-               curbuf = (vm_offset_t)buffers + i * MAXBSIZE;
-               curbufsize = CLBYTES * (i < residual ? base+1 : base);
-               vm_map_pageable(buffer_map, curbuf, curbuf+curbufsize, FALSE);
-               vm_map_simplify(buffer_map, curbuf);
-       }
-       /*
-        * Allocate a submap for exec arguments.  This map effectively
-        * limits the number of processes exec'ing at any time.
-        */
-       exec_map = kmem_suballoc(kernel_map, &minaddr, &maxaddr,
-                                16 * NCARGS, TRUE);
-       /*
-        * Allocate a submap for physio
-        */
-       phys_map = kmem_suballoc(kernel_map, &minaddr, &maxaddr,
-                                VM_PHYS_SIZE, TRUE);
-
-       /*
-        * Finally, allocate mbuf pool.  Since mclrefcnt is an off-size
-        * we use the more space efficient malloc in place of kmem_alloc.
-        */
-       mclrefcnt = (char *)malloc(NMBCLUSTERS+CLBYTES/MCLBYTES,
-                                  M_MBUF, M_NOWAIT);
-       bzero(mclrefcnt, NMBCLUSTERS+CLBYTES/MCLBYTES);
-       mb_map = kmem_suballoc(kernel_map, (vm_offset_t *)&mbutl, &maxaddr,
-                              VM_MBUF_SIZE, FALSE);
-       /*
-        * Initialize callouts
-        */
-       callfree = callout;
-       for (i = 1; i < ncallout; i++)
-               callout[i-1].c_next = &callout[i];
-       callout[i-1].c_next = NULL;
-
-#ifdef DEBUG
-       pmapdebug = opmapdebug;
-#endif
-       printf("avail mem = %d\n", ptoa(cnt.v_free_count));
-       printf("using %d buffers containing %d bytes of memory\n",
-               nbuf, bufpages * CLBYTES);
-       /*
-        * Set up CPU-specific registers, cache, etc.
-        */
-       initcpu();
-
-       /*
-        * Set up buffers, so they can be used to read disk labels.
-        */
-       bufinit();
-
-       /*
-        * Configure the system.
-        */
-       if (boothowto & RB_CONFIG) {
-#ifdef BOOT_CONFIG
-               user_config();
-#else
-               printf("kernel does not support -c; continuing..\n");
-#endif
-       }
-       configure();
-}
-
-/*
- * machine dependent system variables.
- */
-cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
-       int *name;
-       u_int namelen;
-       void *oldp;
-       size_t *oldlenp;
-       void *newp;
-       size_t newlen;
-       struct proc *p;
-{
-       dev_t consdev;
-
-       /* all sysctl names at this level are terminal */
-       if (namelen != 1)
-               return (ENOTDIR);               /* overloaded */
-
-       switch (name[0]) {
-       case CPU_CONSDEV:
-               if (cn_tab != NULL)
-                       consdev = cn_tab->cn_dev;
-               else
-                       consdev = NODEV;
-               return (sysctl_rdstruct(oldp, oldlenp, newp, &consdev,
-                   sizeof consdev));
-       default:
-               return (EOPNOTSUPP);
-       }
-       /* NOTREACHED */
-}
-
-/*
- * Set registers on exec.
- * Clear all registers except sp, pc.
- */
-void
-setregs(p, pack, stack, retval)
-       register struct proc *p;
-       struct exec_package *pack;
-       u_long stack;
-       register_t *retval;
-{
-       extern struct proc *machFPCurProcPtr;
-
-       bzero((caddr_t)p->p_md.md_regs, (FSR + 1) * sizeof(int));
-       p->p_md.md_regs[SP] = stack;
-       p->p_md.md_regs[PC] = pack->ep_entry & ~3;
-       p->p_md.md_regs[T9] = pack->ep_entry & ~3; /* abicall req */
-       p->p_md.md_regs[PS] = PSL_USERSET;
-       p->p_md.md_flags & ~MDP_FPUSED;
-       if (machFPCurProcPtr == p)
-               machFPCurProcPtr = (struct proc *)0;
-       p->p_md.md_ss_addr = 0;
-}
-
-/*
- * WARNING: code in locore.s assumes the layout shown for sf_signum
- * thru sf_handler so... don't screw with them!
- */
-struct sigframe {
-       int     sf_signum;              /* signo for handler */
-       int     sf_code;                /* additional info for handler */
-       struct  sigcontext *sf_scp;     /* context ptr for handler */
-       sig_t   sf_handler;             /* handler addr for u_sigc */
-       struct  sigcontext sf_sc;       /* actual context */
-};
-
-#ifdef DEBUG
-int sigdebug = 0;
-int sigpid = 0;
-#define SDB_FOLLOW     0x01
-#define SDB_KSTACK     0x02
-#define SDB_FPSTATE    0x04
-#endif
-
-/*
- * Send an interrupt to process.
- */
-void
-sendsig(catcher, sig, mask, code)
-       sig_t catcher;
-       int sig, mask;
-       u_long code;
-{
-       register struct proc *p = curproc;
-       register struct sigframe *fp;
-       register int *regs;
-       register struct sigacts *psp = p->p_sigacts;
-       int oonstack, fsize;
-       struct sigcontext ksc;
-       extern char sigcode[], esigcode[];
-
-       regs = p->p_md.md_regs;
-       oonstack = psp->ps_sigstk.ss_flags & SA_ONSTACK;
-       /*
-        * Allocate and validate space for the signal handler
-        * context. Note that if the stack is in data space, the
-        * call to grow() is a nop, and the copyout()
-        * will fail if the process has not already allocated
-        * the space with a `brk'.
-        */
-       fsize = sizeof(struct sigframe);
-       if ((psp->ps_flags & SAS_ALTSTACK) &&
-           (psp->ps_sigstk.ss_flags & SA_ONSTACK) == 0 &&
-           (psp->ps_sigonstack & sigmask(sig))) {
-               fp = (struct sigframe *)(psp->ps_sigstk.ss_sp +
-                                        psp->ps_sigstk.ss_size - fsize);
-               psp->ps_sigstk.ss_flags |= SA_ONSTACK;
-       } else
-               fp = (struct sigframe *)(regs[SP] - fsize);
-       if ((unsigned)fp <= USRSTACK - ctob(p->p_vmspace->vm_ssize)) 
-               (void)grow(p, (unsigned)fp);
-#ifdef DEBUG
-       if ((sigdebug & SDB_FOLLOW) ||
-           (sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
-               printf("sendsig(%d): sig %d ssp %x usp %x scp %x\n",
-                      p->p_pid, sig, &oonstack, fp, &fp->sf_sc);
-#endif
-       /*
-        * Build the signal context to be used by sigreturn.
-        */
-       ksc.sc_onstack = oonstack;
-       ksc.sc_mask = mask;
-       ksc.sc_pc = regs[PC];
-       ksc.mullo = regs[MULLO];
-       ksc.mulhi = regs[MULHI];
-       ksc.sc_regs[ZERO] = 0xACEDBADE;         /* magic number */
-       bcopy((caddr_t)&regs[1], (caddr_t)&ksc.sc_regs[1],
-               sizeof(ksc.sc_regs) - sizeof(int));
-       ksc.sc_fpused = p->p_md.md_flags & MDP_FPUSED;
-       if (ksc.sc_fpused) {
-               extern struct proc *machFPCurProcPtr;
-
-               /* if FPU has current state, save it first */
-               if (p == machFPCurProcPtr)
-                       MachSaveCurFPState(p);
-               bcopy((caddr_t)&p->p_md.md_regs[F0], (caddr_t)ksc.sc_fpregs,
-                       sizeof(ksc.sc_fpregs));
-       }
-       if (copyout((caddr_t)&ksc, (caddr_t)&fp->sf_sc, sizeof(ksc))) {
-               /*
-                * Process has trashed its stack; give it an illegal
-                * instruction to halt it in its tracks.
-                */
-               SIGACTION(p, SIGILL) = SIG_DFL;
-               sig = sigmask(SIGILL);
-               p->p_sigignore &= ~sig;
-               p->p_sigcatch &= ~sig;
-               p->p_sigmask &= ~sig;
-               psignal(p, SIGILL);
-               return;
-       }
-       /* 
-        * Build the argument list for the signal handler.
-        */
-       regs[A0] = sig;
-       regs[A1] = code;
-       regs[A2] = (int)&fp->sf_sc;
-       regs[A3] = (int)catcher;
-
-       regs[PC] = (int)catcher;
-       regs[T9] = (int)catcher;
-       regs[SP] = (int)fp;
-       /*
-        * Signal trampoline code is at base of user stack.
-        */
-       regs[RA] = (int)PS_STRINGS - (esigcode - sigcode);
-#ifdef DEBUG
-       if ((sigdebug & SDB_FOLLOW) ||
-           (sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
-               printf("sendsig(%d): sig %d returns\n",
-                      p->p_pid, sig);
-#endif
-}
-
-/*
- * System call to cleanup state after a signal
- * has been taken.  Reset signal mask and
- * stack state from context left by sendsig (above).
- * Return to previous pc and psl as specified by
- * context left by sendsig. Check carefully to
- * make sure that the user has not modified the
- * psl to gain improper priviledges or to cause
- * a machine fault.
- */
-/* ARGSUSED */
-sys_sigreturn(p, v, retval)
-       struct proc *p;
-       void *v;
-       register_t *retval;
-{
-       struct sys_sigreturn_args /* {
-               syscallarg(struct sigcontext *) sigcntxp;
-       } */ *uap = v;
-       register struct sigcontext *scp;
-       register int *regs;
-       struct sigcontext ksc;
-       int error;
-
-       scp = SCARG(uap, sigcntxp);
-#ifdef DEBUG
-       if (sigdebug & SDB_FOLLOW)
-               printf("sigreturn: pid %d, scp %x\n", p->p_pid, scp);
-#endif
-       regs = p->p_md.md_regs;
-       /*
-        * Test and fetch the context structure.
-        * We grab it all at once for speed.
-        */
-       error = copyin((caddr_t)scp, (caddr_t)&ksc, sizeof(ksc));
-       if (error || ksc.sc_regs[ZERO] != 0xACEDBADE) {
-#ifdef DEBUG
-               if (!(sigdebug & SDB_FOLLOW))
-                       printf("sigreturn: pid %d, scp %x\n", p->p_pid, scp);
-               printf("  old sp %x ra %x pc %x\n",
-                       regs[SP], regs[RA], regs[PC]);
-               printf("  new sp %x ra %x pc %x err %d z %x\n",
-                       ksc.sc_regs[SP], ksc.sc_regs[RA], ksc.sc_regs[PC],
-                       error, ksc.sc_regs[ZERO]);
-#endif
-               return (EINVAL);
-       }
-       scp = &ksc;
-       /*
-        * Restore the user supplied information
-        */
-       if (scp->sc_onstack & 01)
-               p->p_sigacts->ps_sigstk.ss_flags |= SA_ONSTACK;
-       else
-               p->p_sigacts->ps_sigstk.ss_flags &= ~SA_ONSTACK;
-       p->p_sigmask = scp->sc_mask &~ sigcantmask;
-       regs[PC] = scp->sc_pc;
-       regs[MULLO] = scp->mullo;
-       regs[MULHI] = scp->mulhi;
-       bcopy((caddr_t)&scp->sc_regs[1], (caddr_t)&regs[1],
-               sizeof(scp->sc_regs) - sizeof(int));
-       if (scp->sc_fpused)
-               bcopy((caddr_t)scp->sc_fpregs, (caddr_t)&p->p_md.md_regs[F0],
-                       sizeof(scp->sc_fpregs));
-       return (EJUSTRETURN);
-}
-
-int    waittime = -1;
-
-void
-boot(howto)
-       register int howto;
-{
-
-       /* take a snap shot before clobbering any registers */
-       if (curproc)
-               savectx(curproc->p_addr, 0);
-
-#ifdef DEBUG
-       if (panicstr)
-               stacktrace();
-#endif
-
-       boothowto = howto;
-       if ((howto & RB_NOSYNC) == 0 && waittime < 0) {
-               extern struct proc proc0;
-               /* fill curproc with live object */
-               if (curproc == NULL)
-                       curproc = &proc0;
-               /*
-                * Synchronize the disks....
-                */
-               waittime = 0;
-               vfs_shutdown();
-
-               /*
-                * If we've been adjusting the clock, the todr
-                * will be out of synch; adjust it now.
-                */
-               resettodr();
-       }
-       (void) splhigh();               /* extreme priority */
-       if (howto & RB_HALT)
-               printf("System halted.\n");
-       else {
-               if (howto & RB_DUMP)
-                       dumpsys();
-               printf("System restart.\n");
-       }
-       while(1); /* Forever */
-       /*NOTREACHED*/
-}
-
-int    dumpmag = (int)0x8fca0101;      /* magic number for savecore */
-int    dumpsize = 0;           /* also for savecore */
-long   dumplo = 0;
-
-dumpconf()
-{
-       int nblks;
-
-       dumpsize = physmem;
-       if (dumpdev != NODEV && bdevsw[major(dumpdev)].d_psize) {
-               nblks = (*bdevsw[major(dumpdev)].d_psize)(dumpdev);
-               if (dumpsize > btoc(dbtob(nblks - dumplo)))
-                       dumpsize = btoc(dbtob(nblks - dumplo));
-               else if (dumplo == 0)
-                       dumplo = nblks - btodb(ctob(physmem));
-       }
-       /*
-        * Don't dump on the first CLBYTES (why CLBYTES?)
-        * in case the dump device includes a disk label.
-        */
-       if (dumplo < btodb(CLBYTES))
-               dumplo = btodb(CLBYTES);
-}
-
-/*
- * Doadump comes here after turning off memory management and
- * getting on the dump stack, either when called above, or by
- * the auto-restart code.
- */
-dumpsys()
-{
-       int error;
-
-       msgbufmapped = 0;
-       if (dumpdev == NODEV)
-               return;
-       /*
-        * For dumps during autoconfiguration,
-        * if dump device has already configured...
-        */
-       if (dumpsize == 0)
-               dumpconf();
-       if (dumplo < 0)
-               return;
-       printf("\ndumping to dev %x, offset %d\n", dumpdev, dumplo);
-       printf("dump ");
-       switch (error = (*bdevsw[major(dumpdev)].d_dump)(dumpdev)) {
-
-       case ENXIO:
-               printf("device bad\n");
-               break;
-
-       case EFAULT:
-               printf("device not ready\n");
-               break;
-
-       case EINVAL:
-               printf("area improper\n");
-               break;
-
-       case EIO:
-               printf("i/o error\n");
-               break;
-
-       default:
-               printf("error %d\n", error);
-               break;
-
-       case 0:
-               printf("succeeded\n");
-       }
-}
-
-/*
- * Return the best possible estimate of the time in the timeval
- * to which tvp points.  Unfortunately, we can't read the hardware registers.
- * We guarantee that the time will be greater than the value obtained by a
- * previous call.
- */
-void
-microtime(tvp)
-       register struct timeval *tvp;
-{
-       int s = splclock();
-       static struct timeval lasttime;
-
-       *tvp = time;
-#ifdef notdef
-       tvp->tv_usec += clkread();
-       while (tvp->tv_usec > 1000000) {
-               tvp->tv_sec++;
-               tvp->tv_usec -= 1000000;
-       }
-#endif
-       if (tvp->tv_sec == lasttime.tv_sec &&
-           tvp->tv_usec <= lasttime.tv_usec &&
-           (tvp->tv_usec = lasttime.tv_usec + 1) > 1000000) {
-               tvp->tv_sec++;
-               tvp->tv_usec -= 1000000;
-       }
-       lasttime = *tvp;
-       splx(s);
-}
-
-initcpu()
-{
-
-       /*
-        * Disable all interrupts. New masks will be set up
-        * during system configuration
-        */
-       out16(PICA_SYS_LB_IE,0x000);
-       out32(PICA_SYS_EXT_IMASK, 0x00);
-
-       spl0();         /* safe to turn interrupts on now */
-}
-
-/*
- * Convert an ASCII string into an integer.
- */
-int
-atoi(s)
-       char *s;
-{
-       int c;
-       unsigned base = 10, d;
-       int neg = 0, val = 0;
-
-       if (s == 0 || (c = *s++) == 0)
-               goto out;
-
-       /* skip spaces if any */
-       while (c == ' ' || c == '\t')
-               c = *s++;
-
-       /* parse sign, allow more than one (compat) */
-       while (c == '-') {
-               neg = !neg;
-               c = *s++;
-       }
-
-       /* parse base specification, if any */
-       if (c == '0') {
-               c = *s++;
-               switch (c) {
-               case 'X':
-               case 'x':
-                       base = 16;
-                       c = *s++;
-                       break;
-               case 'B':
-               case 'b':
-                       base = 2;
-                       c = *s++;
-                       break;
-               default:
-                       base = 8;
-               }
-       }
-
-       /* parse number proper */
-       for (;;) {
-               if (c >= '0' && c <= '9')
-                       d = c - '0';
-               else if (c >= 'a' && c <= 'z')
-                       d = c - 'a' + 10;
-               else if (c >= 'A' && c <= 'Z')
-                       d = c - 'A' + 10;
-               else
-                       break;
-               val *= base;
-               val += d;
-               c = *s++;
-       }
-       if (neg)
-               val = -val;
-out:
-       return val;     
-}
-
-/*
- * This code is temporary for debugging at startup
- */
-
-static int vid_xpos=0, vid_ypos=0;
-
-static void 
-vid_wrchar(char c)
-{
-       volatile unsigned short *video;
-
-       video = (unsigned short *)(0xe08b8000) + vid_ypos * 80 + vid_xpos;
-       *video = (*video & 0xff00) | 0x0f00 | (unsigned short)c;
-}
-
-static void
-vid_scroll()
-{
-       volatile unsigned short *video;
-       int i;
-
-       video = (unsigned short *)(0xe08b8000);
-       for(i = 0; i < 80 * 24; i++) {
-               *video = *(video + 80);
-               video++;
-       }
-       for(i = 0; i < 80; i++) {
-               *video = *video & 0xff00 | ' ';
-               video++;
-       }
-}
-void
-vid_print_string(const char *str)
-{
-       unsigned char c;
-
-       while(c = *str++) {
-               vid_putchar((dev_t)0, c);
-       }
-}
-
-void
-vid_putchar(dev_t dev, char c)
-{
-       switch(c) {
-       case '\n':
-               vid_xpos = 0;
-               if(vid_ypos == 24)
-                       vid_scroll();
-               else
-                       vid_ypos++;
-               DELAY(500000);
-               break;
-
-       case '\r':
-               vid_xpos = 0;
-               break;
-
-       case '\t':
-               do {
-                       vid_putchar(dev, ' ');
-               } while(vid_xpos & 7);
-               break;
-
-       default:
-               vid_wrchar(c);
-               vid_xpos++;
-               if(vid_xpos == 80) {
-                       vid_xpos = 0;
-                       vid_putchar(dev, '\n');
-               }
-       }
-}
diff --git a/sys/arch/pica/pica/mainbus.c b/sys/arch/pica/pica/mainbus.c
deleted file mode 100644 (file)
index 10a5ca7..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*     $NetBSD: mainbus.c,v 1.3 1995/06/28 02:45:10 cgd Exp $  */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/device.h>
-#include <sys/reboot.h>
-
-#include <pica/pica/picatype.h>
-#include <machine/autoconf.h>
-
-struct mainbus_softc {
-       struct  device sc_dv;
-       struct  abus sc_bus;
-};
-
-/* Definition of the mainbus driver. */
-static int     mbmatch __P((struct device *, void *, void *));
-static void    mbattach __P((struct device *, struct device *, void *));
-static int     mbprint __P((void *, char *));
-
-struct cfattach mainbus_ca = {
-       sizeof(struct device), mbmatch, mbattach
-};
-struct cfdriver mainbus_cd = {
-       NULL, "mainbus", DV_DULL, NULL, 0
-};
-
-void   mb_intr_establish __P((struct confargs *, int (*)(void *), void *));
-void   mb_intr_disestablish __P((struct confargs *));
-caddr_t        mb_cvtaddr __P((struct confargs *));
-int    mb_matchname __P((struct confargs *, char *));
-
-static int
-mbmatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata;
-       void *aux;
-{
-       struct cfdata *cf = cfdata;
-
-       /*
-        * Only one mainbus, but some people are stupid...
-        */     
-       if (cf->cf_unit > 0)
-               return(0);
-
-       /*
-        * That one mainbus is always here.
-        */
-       return(1);
-}
-
-static void
-mbattach(parent, self, aux)
-       struct device *parent;
-       struct device *self;
-       void *aux;
-{
-       struct mainbus_softc *sc = (struct mainbus_softc *)self;
-       struct confargs nca;
-       extern int cputype, ncpus;
-
-       printf("\n");
-
-       sc->sc_bus.ab_dv = (struct device *)sc;
-       sc->sc_bus.ab_type = BUS_MAIN;
-       sc->sc_bus.ab_intr_establish = mb_intr_establish;
-       sc->sc_bus.ab_intr_disestablish = mb_intr_disestablish;
-       sc->sc_bus.ab_cvtaddr = mb_cvtaddr;
-       sc->sc_bus.ab_matchname = mb_matchname;
-
-       /*
-        * Try to find and attach all of the CPUs in the machine.
-        * ( Right now only one CPU so code is simple )
-        */
-
-       nca.ca_name = "cpu";
-       nca.ca_slot = 0;
-       nca.ca_offset = 0;
-       nca.ca_bus = &sc->sc_bus;
-       config_found(self, &nca, mbprint);
-
-       if (cputype == ACER_PICA_61) {
-               /* we have a PICA bus! */
-               nca.ca_name = "pica";
-               nca.ca_slot = 0;
-               nca.ca_offset = 0;
-               nca.ca_bus = &sc->sc_bus;
-               config_found(self, &nca, mbprint);
-       }
-       if (cputype == ACER_PICA_61) {
-               /* we have an ISA bus! */
-               nca.ca_name = "isa";
-               nca.ca_slot = 0;
-               nca.ca_offset = 0;
-               nca.ca_bus = &sc->sc_bus;
-               config_found(self, &nca, mbprint);
-       }
-}
-
-static int
-mbprint(aux, pnp)
-       void *aux;
-       char *pnp;
-{
-
-       if (pnp)
-               return (QUIET);
-       return (UNCONF);
-}
-
-void
-mb_intr_establish(ca, handler, val)
-       struct confargs *ca;
-       int (*handler) __P((void *));
-       void *val;
-{
-
-       panic("can never mb_intr_establish");
-}
-
-void
-mb_intr_disestablish(ca)
-       struct confargs *ca;
-{
-
-       panic("can never mb_intr_disestablish");
-}
-
-caddr_t
-mb_cvtaddr(ca)
-       struct confargs *ca;
-{
-
-       return (NULL);
-}
-
-int
-mb_matchname(ca, name)
-       struct confargs *ca;
-       char *name;
-{
-
-       return (strcmp(name, ca->ca_name) == 0);
-}
diff --git a/sys/arch/pica/pica/mem.c b/sys/arch/pica/pica/mem.c
deleted file mode 100644 (file)
index 6061529..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*     $NetBSD: mem.c,v 1.6 1995/04/10 11:55:03 mycroft Exp $  */
-
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1982, 1986, 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     @(#)mem.c       8.3 (Berkeley) 1/12/94
- */
-
-/*
- * Memory special file
- */
-
-#include <sys/param.h>
-#include <sys/conf.h>
-#include <sys/buf.h>
-#include <sys/msgbuf.h>
-#include <sys/systm.h>
-#include <sys/uio.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-
-#include <vm/vm.h>
-
-extern vm_offset_t avail_end;
-caddr_t zeropage;
-
-/*ARGSUSED*/
-int
-mmopen(dev, flag, mode)
-       dev_t dev;
-       int flag, mode;
-{
-
-       return (0);
-}
-
-/*ARGSUSED*/
-int
-mmclose(dev, flag, mode)
-       dev_t dev;
-       int flag, mode;
-{
-
-       return (0);
-}
-
-/*ARGSUSED*/
-int
-mmrw(dev, uio, flags)
-       dev_t dev;
-       struct uio *uio;
-       int flags;
-{
-       register vm_offset_t o, v;
-       register int c;
-       register struct iovec *iov;
-       int error = 0;
-
-       while (uio->uio_resid > 0 && error == 0) {
-               iov = uio->uio_iov;
-               if (iov->iov_len == 0) {
-                       uio->uio_iov++;
-                       uio->uio_iovcnt--;
-                       if (uio->uio_iovcnt < 0)
-                               panic("mmrw");
-                       continue;
-               }
-               switch (minor(dev)) {
-
-/* minor device 0 is physical memory */
-               case 0:
-                       v = uio->uio_offset;
-                       c = iov->iov_len;
-                       if (v + c > ctob(physmem))
-                               return (EFAULT);
-                       v += CACHED_MEMORY_ADDR;
-                       error = uiomove((caddr_t)v, c, uio);
-                       continue;
-
-/* minor device 1 is kernel memory */
-               case 1:
-                       v = uio->uio_offset;
-                       c = min(iov->iov_len, MAXPHYS);
-                       if (v < CACHED_MEMORY_ADDR)
-                               return (EFAULT);
-                       if (v + c > PHYS_TO_CACHED(avail_end +
-                                                       sizeof (struct msgbuf)) &&
-                           (v < KSEG2_ADDR ||
-                           !kernacc((caddr_t)v, c,
-                           uio->uio_rw == UIO_READ ? B_READ : B_WRITE)))
-                               return (EFAULT);
-
-                       error = uiomove((caddr_t)v, c, uio);
-                       continue;
-
-/* minor device 2 is EOF/RATHOLE */
-               case 2:
-                       if (uio->uio_rw == UIO_WRITE)
-                               uio->uio_resid = 0;
-                       return (0);
-
-/* minor device 12 (/dev/zero) is source of nulls on read, rathole on write */
-               case 12:
-                       if (uio->uio_rw == UIO_WRITE) {
-                               c = iov->iov_len;
-                               break;
-                       }
-                       if (zeropage == NULL) {
-                               zeropage = (caddr_t)
-                                   malloc(CLBYTES, M_TEMP, M_WAITOK);
-                               bzero(zeropage, CLBYTES);
-                       }
-                       c = min(iov->iov_len, CLBYTES);
-                       error = uiomove(zeropage, c, uio);
-                       continue;
-
-               default:
-                       return (ENXIO);
-               }
-               if (error)
-                       break;
-               iov->iov_base += c;
-               iov->iov_len -= c;
-               uio->uio_offset += c;
-               uio->uio_resid -= c;
-       }
-       return (error);
-}
-
-int
-mmmmap(dev, off, prot)
-       dev_t dev;
-       int off, prot;
-{
-
-       return (EOPNOTSUPP);
-}
diff --git a/sys/arch/pica/pica/minidebug.c b/sys/arch/pica/pica/minidebug.c
deleted file mode 100644 (file)
index 18d6422..0000000
+++ /dev/null
@@ -1,1110 +0,0 @@
-/*-
- * Copyright (c) 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)kadb.c        8.1 (Berkeley) 6/10/93
- *      $Id: minidebug.c,v 1.3 1996/06/06 23:07:41 deraadt Exp $
- */
-
-/*
- * Define machine dependent primitives for mdb.
- */
-
-#include <sys/types.h>
-#include <machine/pte.h>
-#include <vm/vm_prot.h>
-#undef SP
-#include <machine/cpu.h>
-#include <machine/reg.h>
-#include <machine/pcb.h>
-#include <machine/trap.h>
-#include <machine/mips_opcode.h>
-
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-void pica_dump_tlb(int, int);
-
-static char *op_name[64] = {
-/* 0 */        "spec", "bcond","j",    "jal",  "beq",  "bne",  "blez", "bgtz",
-/* 8 */        "addi", "addiu","slti", "sltiu","andi", "ori",  "xori", "lui",
-/*16 */        "cop0", "cop1", "cop2", "cop3", "beql", "bnel", "blezl","bgtzl",
-/*24 */        "daddi","daddiu","ldl", "ldr",  "op34", "op35", "op36", "op37",
-/*32 */        "lb",   "lh",   "lwl",  "lw",   "lbu",  "lhu",  "lwr",  "lwu",
-/*40 */        "sb",   "sh",   "swl",  "sw",   "sdl",  "sdr",  "swr",  "cache",
-/*48 */        "ll",   "lwc1", "lwc2", "lwc3", "lld",  "ldc1", "ldc2", "ld",
-/*56 */        "sc",   "swc1", "swc2", "swc3", "scd",  "sdc1", "sdc2", "sd"
-};
-
-static char *spec_name[64] = {
-/* 0 */        "sll",  "spec01","srl", "sra",  "sllv", "spec05","srlv","srav",
-/* 8 */        "jr",   "jalr", "spec12","spec13","syscall","break","spec16","sync",
-/*16 */        "mfhi", "mthi", "mflo", "mtlo", "dsllv","spec25","dsrlv","dsrav",
-/*24 */        "mult", "multu","div",  "divu", "dmult","dmultu","ddiv","ddivu",
-/*32 */        "add",  "addu", "sub",  "subu", "and",  "or",   "xor",  "nor",
-/*40 */        "spec50","spec51","slt","sltu", "dadd","daddu","dsub","dsubu",
-/*48 */        "tge","tgeu","tlt","tltu","teq","spec65","tne","spec67",
-/*56 */        "dsll","spec71","dsrl","dsra","dsll32","spec75","dsrl32","dsra32"
-};
-
-static char *bcond_name[32] = {
-/* 0 */        "bltz", "bgez", "bltzl", "bgezl", "?", "?", "?", "?",
-/* 8 */        "tgei", "tgeiu", "tlti", "tltiu", "teqi", "?", "tnei", "?",
-/*16 */        "bltzal", "bgezal", "bltzall", "bgezall", "?", "?", "?", "?",
-/*24 */        "?", "?", "?", "?", "?", "?", "?", "?",
-};
-
-static char *cop1_name[64] = {
-/* 0 */        "fadd", "fsub", "fmpy", "fdiv", "fsqrt","fabs", "fmov", "fneg",
-/* 8 */        "fop08","fop09","fop0a","fop0b","fop0c","fop0d","fop0e","fop0f",
-/*16 */        "fop10","fop11","fop12","fop13","fop14","fop15","fop16","fop17",
-/*24 */        "fop18","fop19","fop1a","fop1b","fop1c","fop1d","fop1e","fop1f",
-/*32 */        "fcvts","fcvtd","fcvte","fop23","fcvtw","fop25","fop26","fop27",
-/*40 */        "fop28","fop29","fop2a","fop2b","fop2c","fop2d","fop2e","fop2f",
-/*48 */        "fcmp.f","fcmp.un","fcmp.eq","fcmp.ueq","fcmp.olt","fcmp.ult",
-       "fcmp.ole","fcmp.ule",
-/*56 */        "fcmp.sf","fcmp.ngle","fcmp.seq","fcmp.ngl","fcmp.lt","fcmp.nge",
-       "fcmp.le","fcmp.ngt"
-};
-
-static char *fmt_name[16] = {
-       "s",    "d",    "e",    "fmt3",
-       "w",    "fmt5", "fmt6", "fmt7",
-       "fmt8", "fmt9", "fmta", "fmtb",
-       "fmtc", "fmtd", "fmte", "fmtf"
-};
-
-static char *reg_name[32] = {
-       "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
-       "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
-       "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
-       "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra"
-};
-
-static char *c0_opname[64] = {
-       "c0op00","tlbr",  "tlbwi", "c0op03","c0op04","c0op05","tlbwr", "c0op07",
-       "tlbp",  "c0op11","c0op12","c0op13","c0op14","c0op15","c0op16","c0op17",
-       "rfe",   "c0op21","c0op22","c0op23","c0op24","c0op25","c0op26","c0op27",
-       "eret","c0op31","c0op32","c0op33","c0op34","c0op35","c0op36","c0op37",
-       "c0op40","c0op41","c0op42","c0op43","c0op44","c0op45","c0op46","c0op47",
-       "c0op50","c0op51","c0op52","c0op53","c0op54","c0op55","c0op56","c0op57",
-       "c0op60","c0op61","c0op62","c0op63","c0op64","c0op65","c0op66","c0op67",
-       "c0op70","c0op71","c0op72","c0op73","c0op74","c0op75","c0op77","c0op77",
-};
-
-static char *c0_reg[32] = {
-       "index","random","tlblo0","tlblo1","context","tlbmask","wired","c0r7",
-       "badvaddr","count","tlbhi","c0r11","sr","cause","epc",  "prid",
-       "config","lladr","watchlo","watchhi","xcontext","c0r21","c0r22","c0r23",
-       "c0r24","c0r25","ecc","cacheerr","taglo","taghi","errepc","c0r31"
-};
-
-extern char *trap_type[];
-
-struct pcb mdbpcb;
-int mdbmkfault;
-
-#define MAXBRK 10
-struct brk {
-       int     inst;
-       int     addr;
-} brk_tab[MAXBRK];
-
-/*
- * Mini debugger for kernel.
- */
-int gethex(u_int *val, u_int dotval)
-{
-       u_int c;
-
-       *val = 0;
-       while((c = cngetc()) != '\e' && c != '\n') {
-               if(c >= '0' && c <= '9') {
-                       *val = (*val << 4) + c - '0';
-                       cnputc(c);
-               }
-               else if(c >= 'a' && c <= 'f') {
-                       *val = (*val << 4) + c - 'a' + 10;
-                       cnputc(c);
-               }
-               else if(c == '\b') {
-                       *val = *val >> 4;
-                       printf("\b \b");
-               }
-               else if(c == ',') {
-                       cnputc(c);
-                       return(c);
-               }
-               else if(c == '.') {
-                       *val = dotval;;
-                       cnputc(c);
-               }
-       }
-       return(c);
-}
-
-void dump(u_int *addr, u_int size)
-{
-       int     cnt;
-
-       cnt = 0;
-
-       size = (size + 3) / 4;
-       while(size--) {
-               if((cnt++ & 3) == 0)
-                       printf("\n%08x: ",(int)addr);
-               printf("%08x ",*addr++);
-       }
-}
-
-void print_regs()
-{
-       printf("\n");
-       printf("T0-7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
-               mdbpcb.pcb_regs[T0],mdbpcb.pcb_regs[T1],
-               mdbpcb.pcb_regs[T2],mdbpcb.pcb_regs[T3],
-               mdbpcb.pcb_regs[T4],mdbpcb.pcb_regs[T5],
-               mdbpcb.pcb_regs[T6],mdbpcb.pcb_regs[T7]);
-       printf("T8-9 %08x %08x     A0-4 %08x %08x %08x %08x\n",
-               mdbpcb.pcb_regs[T8],mdbpcb.pcb_regs[T9],
-               mdbpcb.pcb_regs[A0],mdbpcb.pcb_regs[A1],
-               mdbpcb.pcb_regs[A2],mdbpcb.pcb_regs[A3]);
-       printf("S0-7 %08x %08x %08x %08x %08x %08x %08x %08x\n",
-               mdbpcb.pcb_regs[S0],mdbpcb.pcb_regs[S1],
-               mdbpcb.pcb_regs[S2],mdbpcb.pcb_regs[S3],
-               mdbpcb.pcb_regs[S4],mdbpcb.pcb_regs[S5],
-               mdbpcb.pcb_regs[S6],mdbpcb.pcb_regs[S7]);
-       printf("  S8 %08x     V0-1 %08x %08x       GP %08x       SP %08x\n",
-               mdbpcb.pcb_regs[S8],mdbpcb.pcb_regs[V0],
-               mdbpcb.pcb_regs[V1],mdbpcb.pcb_regs[GP],
-               mdbpcb.pcb_regs[SP]);
-       printf("  AT %08x       PC %08x       RA %08x       SR %08x",
-               mdbpcb.pcb_regs[AST],mdbpcb.pcb_regs[PC],
-               mdbpcb.pcb_regs[RA],mdbpcb.pcb_regs[SR]);
-}
-
-set_break(va)
-{
-       int i;
-
-       va = va & ~3;
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr == 0) {
-                       brk_tab[i].addr = va;
-                       brk_tab[i].inst = *(u_int *)va;
-                       return;
-               }
-       }
-       printf(" Break table full!!");
-}
-
-del_break(va)
-{
-       int i;
-
-       va = va & ~3;
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr == va) {
-                       brk_tab[i].addr = 0;
-                       return;
-               }
-       }
-       printf(" Break to remove not found!!");
-}
-
-break_insert()
-{
-       int i;
-
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr != 0) {
-                       brk_tab[i].inst = *(u_int *)brk_tab[i].addr;
-                       *(u_int *)brk_tab[i].addr = BREAK_BRKPT;
-                       MachFlushDCache(brk_tab[i].addr,4);
-                       MachFlushICache(brk_tab[i].addr,4);
-               }
-       }
-}
-
-break_restore()
-{
-       int i;
-
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr != 0) {
-                       *(u_int *)brk_tab[i].addr = brk_tab[i].inst;
-                       MachFlushDCache(brk_tab[i].addr,4);
-                       MachFlushICache(brk_tab[i].addr,4);
-               }
-       }
-}
-
-break_find(va)
-{
-       int i;
-
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr == va) {
-                       return(i);
-               }
-       }
-       return(-1);
-}
-
-prt_break()
-{
-       int i;
-
-       for(i = 0; i < MAXBRK; i++) {
-               if(brk_tab[i].addr != 0) {
-                       printf("\n    %08x\t", brk_tab[i].addr);
-                       mdbprintins(brk_tab[i].inst, brk_tab[i].addr);
-               }
-       }
-}
-mdb(causeReg, vadr, p, kernelmode)
-{
-       int c;
-       int newaddr;
-       int size;
-       int cause;
-static int ssandrun;   /* Single step and run flag (when cont at brk) */
-
-       splhigh();
-       cause = (causeReg & CR_EXC_CODE) >> CR_EXC_CODE_SHIFT;
-       newaddr = (int)(mdbpcb.pcb_regs[PC]);
-       switch(cause) {
-       case T_BREAK:
-               if(*(int *)newaddr == BREAK_SOVER) {
-                       break_restore();
-                       mdbpcb.pcb_regs[PC] += 4;
-                       printf("\nStop break (panic)\n# ");
-                       printf("    %08x\t",newaddr);
-                       mdbprintins(*(int *)newaddr, newaddr);
-                       printf("\n# ");
-                       break;
-               }
-               if(*(int *)newaddr == BREAK_BRKPT) {
-                       break_restore();
-                       printf("\rBRK %08x\t",newaddr);
-                       if(mdbprintins(*(int *)newaddr, newaddr)) {
-                               newaddr += 4;
-                               printf("\n    %08x\t",newaddr);
-                               mdbprintins(*(int *)newaddr, newaddr);
-                       }
-                       printf("\n# ");
-                       break;
-               }
-               if(mdbclrsstep(causeReg)) {
-                       if(ssandrun) { /* Step over bp before free run */
-                               ssandrun = 0;
-                               break_insert();
-                               return(TRUE);
-                       }
-                       printf("\r    %08x\t",newaddr);
-                       if(mdbprintins(*(int *)newaddr, newaddr)) {
-                               newaddr += 4;
-                               printf("\n    %08x\t",newaddr);
-                               mdbprintins(*(int *)newaddr, newaddr);
-                       }
-                       printf("\n# ");
-               }
-               break;
-
-       default:
-               printf("\n-- %s --\n# ",trap_type[cause]);
-       }
-       ssandrun = 0;
-       break_restore();
-
-       while(c = cngetc()) {
-               switch(c) {
-               case 'T':
-                       trapDump("Debugger");
-                       break;
-               case 'b':
-                       printf("break-");
-                       c = cngetc();
-                       switch(c) {
-                       case 's':
-                               printf("set at ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c != '\e') {
-                                       set_break(newaddr);
-                               }
-                               break;
-
-                       case 'd':
-                               printf("delete at ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c != '\e') {
-                                       del_break(newaddr);
-                               }
-                               break;
-
-                       case 'p':
-                               printf("print");
-                               prt_break();
-                               break;
-                       }
-                       break;
-
-               case 'r':
-                       print_regs();
-                       break;
-
-               case 'I':
-                       printf("Instruction at ");
-                       c = gethex(&newaddr, newaddr);
-                       while(c != '\e') {
-                               printf("\n    %08x\t",newaddr);
-                               mdbprintins(*(int *)newaddr, newaddr);
-                               newaddr += 4;
-                               c = cngetc();
-                       }
-                       break;
-
-               case 'c':
-                       printf("continue");
-                       if(break_find((int)(mdbpcb.pcb_regs[PC])) >= 0) {
-                               ssandrun = 1;
-                               mdbsetsstep();
-                       }
-                       else {
-                               break_insert();
-                       }
-                       return(TRUE);
-
-               case 's':
-                       set_break(mdbpcb.pcb_regs[PC] + 8);
-                       return(TRUE);
-               case ' ':
-                       mdbsetsstep();
-                       return(TRUE);
-
-               case 'd':
-                       printf("dump ");
-                       c = gethex(&newaddr, newaddr);
-                       if(c == ',') {
-                               c = gethex(&size,256);
-                       }
-                       else {
-                               size = 16;
-                       }
-                       if(c == '\n' && newaddr != 0) {
-                               dump((u_int *)newaddr, size);
-                               newaddr += size;
-                       }
-                       break;
-
-               case 'm':
-                       printf("mod ");
-                       c = gethex(&newaddr, newaddr);
-                       while(c == ',') {
-                               c = gethex(&size, 0);
-                               if(c != '\e')
-                                       *((u_int *)newaddr)++ = size;
-                       }
-                       break;
-
-               case 'i':
-                       printf("in-");
-                       c = cngetc();
-                       switch(c) {
-                       case 'b':
-                               printf("byte ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == '\n') {
-                                       printf("= %02x",
-                                               *(u_char *)newaddr);    
-                               }
-                               break;
-                       case 'h':
-                               printf("halfword ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == '\n') {
-                                       printf("= %04x",
-                                               *(u_short *)newaddr);   
-                               }
-                               break;
-                       case 'w':
-                               printf("word ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == '\n') {
-                                       printf("= %08x",
-                                               *(u_int *)newaddr);     
-                               }
-                               break;
-                       }
-                       break;
-
-               case 'o':
-                       printf("out-");
-                       c = cngetc();
-                       switch(c) {
-                       case 'b':
-                               printf("byte ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == ',') {
-                                       c = gethex(&size, 0);
-                                       if(c == '\n') {
-                                               *(u_char *)newaddr = size;      
-                                       }
-                               }
-                               break;
-                       case 'h':
-                               printf("halfword ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == ',') {
-                                       c = gethex(&size, 0);
-                                       if(c == '\n') {
-                                               *(u_short *)newaddr = size;     
-                                       }
-                               }
-                               break;
-                       case 'w':
-                               printf("word ");
-                               c = gethex(&newaddr, newaddr);
-                               if(c == ',') {
-                                       c = gethex(&size, 0);
-                                       if(c == '\n') {
-                                               *(u_int *)newaddr = size;       
-                                       }
-                               }
-                               break;
-                       }
-                       break;
-
-               case 't':
-                       printf("tlb-dump\n");
-                       pica_dump_tlb(0,23);
-                       (void)cngetc();
-                       pica_dump_tlb(24,47);
-                       break;
-
-               case 'f':
-                       printf("flush-");
-                       c = cngetc();
-                       switch(c) {
-                       case 't':
-                               printf("tlb");
-                               MachTLBFlush();
-                               break;
-
-                       case 'c':
-                               printf("cache");
-                               MachFlushCache();
-                               break;
-                       }
-                       break;
-                       
-               default:
-                       cnputc('\a');
-                       break;
-               }
-               printf("\n# ");
-       }
-}
-
-u_int mdb_ss_addr;
-u_int mdb_ss_instr;
-
-mdbsetsstep()
-{
-       register u_int va;
-       register int *locr0 = mdbpcb.pcb_regs;
-       int i;
-
-       /* compute next address after current location */
-       if(mdbpeek(locr0[PC]) != 0) {
-               va = MachEmulateBranch(locr0, locr0[PC], 0, mdbpeek(locr0[PC]));
-       }
-       else {
-               va = locr0[PC] + 4;
-       }
-       if (mdb_ss_addr) {
-               printf("mdbsetsstep: breakpoint already set at %x (va %x)\n",
-                       mdb_ss_addr, va);
-               return;
-       }
-       mdb_ss_addr = va;
-
-       if ((int)va < 0) {
-               /* kernel address */
-               mdb_ss_instr = mdbpeek(va);
-               mdbpoke((caddr_t)va, BREAK_SSTEP);
-               MachFlushDCache(va,4);
-               MachFlushICache(va,4);
-               return;
-       }
-}
-
-mdbclrsstep(cr)
-       int cr;
-{
-       register u_int pc, va;
-       u_int instr;
-
-       /* fix pc if break instruction is in the delay slot */
-       pc = mdbpcb.pcb_regs[PC];
-       if (cr < 0)
-               pc += 4;
-
-       /* check to be sure its the one we are expecting */
-       va = mdb_ss_addr;
-       if (!va || va != pc)
-               return(FALSE);
-
-       /* read break instruction */
-       instr = mdbpeek(va);
-       if (instr != BREAK_SSTEP)
-               return(FALSE);
-
-       if ((int)va < 0) {
-               /* kernel address */
-               mdbpoke((caddr_t)va, mdb_ss_instr);
-               MachFlushDCache(va,4);
-               MachFlushICache(va,4);
-               mdb_ss_addr = 0;
-               return(TRUE);
-       }
-
-       printf("can't clear break at %x\n", va);
-       mdb_ss_addr = 0;
-       return(FALSE);
-}
-
-void
-mdbreadc(lp)
-       char *lp;
-{
-       int c;
-
-       c = cngetc();
-       if (c == '\r')
-               c = '\n';
-       *lp = c;
-}
-
-void
-mdbwrite(lp, len)
-       char *lp;
-       int len;
-{
-       while (len-- > 0)
-               cnputc(*lp++);
-}
-
-/* ARGSUSED */
-mdbprintins(ins, mdbdot)
-{
-       InstFmt i;
-       int delay = 0;
-
-       i.word = ins;
-
-       switch (i.JType.op) {
-       case OP_SPECIAL:
-               if (i.word == 0) {
-                       printf("nop");
-                       break;
-               }
-               if (i.RType.func == OP_ADDU && i.RType.rt == 0) {
-                       printf("move\t%s,%s",
-                               reg_name[i.RType.rd],
-                               reg_name[i.RType.rs]);
-                       break;
-               }
-               printf("%s", spec_name[i.RType.func]);
-               switch (i.RType.func) {
-               case OP_SLL:
-               case OP_SRL:
-               case OP_SRA:
-               case OP_DSLL:
-               case OP_DSRL:
-               case OP_DSRA:
-               case OP_DSLL32:
-               case OP_DSRL32:
-               case OP_DSRA32:
-                       printf("\t%s,%s,%d",
-                               reg_name[i.RType.rd],
-                               reg_name[i.RType.rt],
-                               i.RType.shamt);
-                       break;
-
-               case OP_SLLV:
-               case OP_SRLV:
-               case OP_SRAV:
-               case OP_DSLLV:
-               case OP_DSRLV:
-               case OP_DSRAV:
-                       printf("\t%s,%s,%s",
-                               reg_name[i.RType.rd],
-                               reg_name[i.RType.rt],
-                               reg_name[i.RType.rs]);
-                       break;
-
-               case OP_MFHI:
-               case OP_MFLO:
-                       printf("\t%s", reg_name[i.RType.rd]);
-                       break;
-
-               case OP_JR:
-               case OP_JALR:
-                       delay = 1;
-                       /* FALLTHROUGH */
-               case OP_MTLO:
-               case OP_MTHI:
-                       printf("\t%s", reg_name[i.RType.rs]);
-                       break;
-
-               case OP_MULT:
-               case OP_MULTU:
-               case OP_DMULT:
-               case OP_DMULTU:
-               case OP_DIV:
-               case OP_DIVU:
-               case OP_DDIV:
-               case OP_DDIVU:
-                       printf("\t%s,%s",
-                               reg_name[i.RType.rs],
-                               reg_name[i.RType.rt]);
-                       break;
-
-               case OP_SYSCALL:
-               case OP_SYNC:
-                       break;
-
-               case OP_BREAK:
-                       printf("\t%d", (i.RType.rs << 5) | i.RType.rt);
-                       break;
-
-               default:
-                       printf("\t%s,%s,%s",
-                               reg_name[i.RType.rd],
-                               reg_name[i.RType.rs],
-                               reg_name[i.RType.rt]);
-               };
-               break;
-
-       case OP_BCOND:
-               printf("%s\t%s,", bcond_name[i.IType.rt],
-                       reg_name[i.IType.rs]);
-               goto pr_displ;
-
-       case OP_BLEZ:
-       case OP_BLEZL:
-       case OP_BGTZ:
-       case OP_BGTZL:
-               printf("%s\t%s,", op_name[i.IType.op],
-                       reg_name[i.IType.rs]);
-               goto pr_displ;
-
-       case OP_BEQ:
-       case OP_BEQL:
-               if (i.IType.rs == 0 && i.IType.rt == 0) {
-                       printf("b\t");
-                       goto pr_displ;
-               }
-               /* FALLTHROUGH */
-       case OP_BNE:
-       case OP_BNEL:
-               printf("%s\t%s,%s,", op_name[i.IType.op],
-                       reg_name[i.IType.rs],
-                       reg_name[i.IType.rt]);
-       pr_displ:
-               delay = 1;
-               printf("0x%08x", mdbdot + 4 + ((short)i.IType.imm << 2));
-               break;
-
-       case OP_COP0:
-               switch (i.RType.rs) {
-               case OP_BCx:
-               case OP_BCy:
-                       printf("bc0%c\t",
-                               "ft"[i.RType.rt & COPz_BC_TF_MASK]);
-                       goto pr_displ;
-
-               case OP_MT:
-                       printf("mtc0\t%s,%s",
-                               reg_name[i.RType.rt],
-                               c0_reg[i.RType.rd]);
-                       break;
-
-               case OP_DMT:
-                       printf("dmtc0\t%s,%s",
-                               reg_name[i.RType.rt],
-                               c0_reg[i.RType.rd]);
-                       break;
-
-               case OP_MF:
-                       printf("mfc0\t%s,%s",
-                               reg_name[i.RType.rt],
-                               c0_reg[i.RType.rd]);
-                       break;
-
-               case OP_DMF:
-                       printf("dmfc0\t%s,%s",
-                               reg_name[i.RType.rt],
-                               c0_reg[i.RType.rd]);
-                       break;
-
-               default:
-                       printf("%s", c0_opname[i.FRType.func]);
-               };
-               break;
-
-       case OP_COP1:
-               switch (i.RType.rs) {
-               case OP_BCx:
-               case OP_BCy:
-                       printf("bc1%c\t",
-                               "ft"[i.RType.rt & COPz_BC_TF_MASK]);
-                       goto pr_displ;
-
-               case OP_MT:
-                       printf("mtc1\t%s,f%d",
-                               reg_name[i.RType.rt],
-                               i.RType.rd);
-                       break;
-
-               case OP_MF:
-                       printf("mfc1\t%s,f%d",
-                               reg_name[i.RType.rt],
-                               i.RType.rd);
-                       break;
-
-               case OP_CT:
-                       printf("ctc1\t%s,f%d",
-                               reg_name[i.RType.rt],
-                               i.RType.rd);
-                       break;
-
-               case OP_CF:
-                       printf("cfc1\t%s,f%d",
-                               reg_name[i.RType.rt],
-                               i.RType.rd);
-                       break;
-
-               default:
-                       printf("%s.%s\tf%d,f%d,f%d",
-                               cop1_name[i.FRType.func],
-                               fmt_name[i.FRType.fmt],
-                               i.FRType.fd, i.FRType.fs, i.FRType.ft);
-               };
-               break;
-
-       case OP_J:
-       case OP_JAL:
-               printf("%s\t", op_name[i.JType.op]);
-               printf("0x%8x",(mdbdot & 0xF0000000) | (i.JType.target << 2));
-               delay = 1;
-               break;
-
-       case OP_LWC1:
-       case OP_SWC1:
-               printf("%s\tf%d,", op_name[i.IType.op],
-                       i.IType.rt);
-               goto loadstore;
-
-       case OP_LB:
-       case OP_LH:
-       case OP_LW:
-       case OP_LD:
-       case OP_LBU:
-       case OP_LHU:
-       case OP_LWU:
-       case OP_SB:
-       case OP_SH:
-       case OP_SW:
-       case OP_SD:
-               printf("%s\t%s,", op_name[i.IType.op],
-                       reg_name[i.IType.rt]);
-       loadstore:
-               printf("%d(%s)", (short)i.IType.imm,
-                       reg_name[i.IType.rs]);
-               break;
-
-       case OP_ORI:
-       case OP_XORI:
-               if (i.IType.rs == 0) {
-                       printf("li\t%s,0x%x",
-                               reg_name[i.IType.rt],
-                               i.IType.imm);
-                       break;
-               }
-               /* FALLTHROUGH */
-       case OP_ANDI:
-               printf("%s\t%s,%s,0x%x", op_name[i.IType.op],
-                       reg_name[i.IType.rt],
-                       reg_name[i.IType.rs],
-                       i.IType.imm);
-               break;
-
-       case OP_LUI:
-               printf("%s\t%s,0x%x", op_name[i.IType.op],
-                       reg_name[i.IType.rt],
-                       i.IType.imm);
-               break;
-
-       case OP_ADDI:
-       case OP_DADDI:
-       case OP_ADDIU:
-       case OP_DADDIU:
-               if (i.IType.rs == 0) {
-                       printf("li\t%s,%d",
-                               reg_name[i.IType.rt],
-                               (short)i.IType.imm);
-                       break;
-               }
-               /* FALLTHROUGH */
-       default:
-               printf("%s\t%s,%s,%d", op_name[i.IType.op],
-                       reg_name[i.IType.rt],
-                       reg_name[i.IType.rs],
-                       (short)i.IType.imm);
-       }
-       return(delay);
-}
-
-#define MIPS_JR_RA     0x03e00008      /* instruction code for jr ra */
-
-#if 0
-/*
- * Print a stack backtrace.
- */
-void
-mdbstacktrace(printlocals)
-       int printlocals;
-{
-       u_int pc, sp, ra, va, subr;
-       int a0, a1, a2, a3;
-       u_int instr, mask;
-       InstFmt i;
-       int more, stksize;
-       extern MachKernGenException();
-       extern MachUserGenException();
-       extern MachKernIntr();
-       extern MachUserIntr();
-       extern setsoftclock();
-
-       /* get initial values from the exception frame */
-       sp = mdbpcb.pcb_regs[SP];
-       pc = mdbpcb.pcb_regs[PC];
-       ra = mdbpcb.pcb_regs[RA];
-       a0 = mdbpcb.pcb_regs[A0];
-       a1 = mdbpcb.pcb_regs[A1];
-       a2 = mdbpcb.pcb_regs[A2];
-       a3 = mdbpcb.pcb_regs[A3];
-
-loop:
-       /* check for current PC in the kernel interrupt handler code */
-       if (pc >= (u_int)MachKernIntr && pc < (u_int)MachUserIntr) {
-               /* NOTE: the offsets depend on the code in locore.s */
-               printf("interupt\n");
-               a0 = mdbchkget(sp + 36, DSP);
-               a1 = mdbchkget(sp + 40, DSP);
-               a2 = mdbchkget(sp + 44, DSP);
-               a3 = mdbchkget(sp + 48, DSP);
-               pc = mdbchkget(sp + 20, DSP);
-               ra = mdbchkget(sp + 92, DSP);
-               sp = mdbchkget(sp + 100, DSP);
-       }
-
-       /* check for current PC in the exception handler code */
-       if (pc >= 0x80000000 && pc < (u_int)setsoftclock) {
-               ra = 0;
-               subr = 0;
-               goto done;
-       }
-       /*
-        * Find the beginning of the current subroutine by scanning backwards
-        * from the current PC for the end of the previous subroutine.
-        */
-       va = pc - sizeof(int);
-       while ((instr = mdbchkget(va, ISP)) != MIPS_JR_RA)
-               va -= sizeof(int);
-       va += 2 * sizeof(int);  /* skip back over branch & delay slot */
-       /* skip over nulls which might separate .o files */
-       while ((instr = mdbchkget(va, ISP)) == 0)
-               va += sizeof(int);
-       subr = va;
-
-       /* scan forwards to find stack size and any saved registers */
-       stksize = 0;
-       more = 3;
-       mask = 0;
-       for (; more; va += sizeof(int), more = (more == 3) ? 3 : more - 1) {
-               /* stop if hit our current position */
-               if (va >= pc)
-                       break;
-               instr = mdbchkget(va, ISP);
-               i.word = instr;
-               switch (i.JType.op) {
-               case OP_SPECIAL:
-                       switch (i.RType.func) {
-                       case OP_JR:
-                       case OP_JALR:
-                               more = 2; /* stop after next instruction */
-                               break;
-
-                       case OP_SYSCALL:
-                       case OP_BREAK:
-                               more = 1; /* stop now */
-                       };
-                       break;
-
-               case OP_BCOND:
-               case OP_J:
-               case OP_JAL:
-               case OP_BEQ:
-               case OP_BNE:
-               case OP_BLEZ:
-               case OP_BGTZ:
-                       more = 2; /* stop after next instruction */
-                       break;
-
-               case OP_COP0:
-               case OP_COP1:
-               case OP_COP2:
-               case OP_COP3:
-                       switch (i.RType.rs) {
-                       case OP_BCx:
-                       case OP_BCy:
-                               more = 2; /* stop after next instruction */
-                       };
-                       break;
-
-               case OP_SW:
-                       /* look for saved registers on the stack */
-                       if (i.IType.rs != 29)
-                               break;
-                       /* only restore the first one */
-                       if (mask & (1 << i.IType.rt))
-                               break;
-                       mask |= 1 << i.IType.rt;
-                       switch (i.IType.rt) {
-                       case 4: /* a0 */
-                               a0 = mdbchkget(sp + (short)i.IType.imm, DSP);
-                               break;
-
-                       case 5: /* a1 */
-                               a1 = mdbchkget(sp + (short)i.IType.imm, DSP);
-                               break;
-
-                       case 6: /* a2 */
-                               a2 = mdbchkget(sp + (short)i.IType.imm, DSP);
-                               break;
-
-                       case 7: /* a3 */
-                               a3 = mdbchkget(sp + (short)i.IType.imm, DSP);
-                               break;
-
-                       case 31: /* ra */
-                               ra = mdbchkget(sp + (short)i.IType.imm, DSP);
-                       }
-                       break;
-
-               case OP_ADDI:
-               case OP_ADDIU:
-                       /* look for stack pointer adjustment */
-                       if (i.IType.rs != 29 && i.IType.rt != 29)
-                               break;
-                       stksize = (short)i.IType.imm;
-               }
-       }
-
-done:
-       printf("%x+%x ", subr, pc - subr); /* XXX */
-       printf("(%x,%x,%x,%x)\n", a0, a1, a2, a3);
-
-       if (ra) {
-               pc = ra;
-               sp -= stksize;
-               goto loop;
-       }
-}
-#endif
-
-/*
- * Very simple memory allocator for mdb.
- */
-char *
-mdbmalloc(size)
-       int size;
-{
-       static char buffer[4096];
-       static char *bufp = buffer;
-       char *p;
-
-       /* round size up to sizeof(int) */
-       size = (size + sizeof(int) - 1) & ~(sizeof(int) - 1);
-       p = bufp;
-       bufp = p + size;
-       return (p);
-}
-
-/*
- *     Dump TLB contents.
- */
-void pica_dump_tlb(int first,int last)
-{
-       int tlbno;
-       struct tlb tlb;
-
-       tlbno = first;
-
-       while(tlbno <= last) {
-               MachTLBRead(tlbno, &tlb);
-               if(tlb.tlb_lo0 & PG_V || tlb.tlb_lo1 & PG_V) {
-                       printf("TLB %2d vad 0x%08x ", tlbno, tlb.tlb_hi);
-               }
-               else {
-                       printf("TLB*%2d vad 0x%08x ", tlbno, tlb.tlb_hi);
-               }
-               printf("0=0x%08x ", pfn_to_vad(tlb.tlb_lo0));
-               printf("%c", tlb.tlb_lo0 & PG_M ? 'M' : ' ');
-               printf("%c", tlb.tlb_lo0 & PG_G ? 'G' : ' ');
-               printf(" atr %x ", (tlb.tlb_lo0 >> 3) & 7);
-               printf("1=0x%08x ", pfn_to_vad(tlb.tlb_lo1));
-               printf("%c", tlb.tlb_lo1 & PG_M ? 'M' : ' ');
-               printf("%c", tlb.tlb_lo1 & PG_G ? 'G' : ' ');
-               printf(" atr %x ", (tlb.tlb_lo1 >> 3) & 7);
-               printf(" sz=%x\n", tlb.tlb_mask);
-
-               tlbno++;
-       }
-}
diff --git a/sys/arch/pica/pica/pica.c b/sys/arch/pica/pica/pica.c
deleted file mode 100644 (file)
index b912dd4..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*     $NetBSD: tc.c,v 1.2 1995/03/08 00:39:05 cgd Exp $       */
-
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- * 
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/param.h>
-#include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-
-#include <pica/pica/pica.h>
-#include <pica/pica/picatype.h>
-
-struct pica_softc {
-       struct  device sc_dv;
-       struct  abus sc_bus;
-       struct  pica_dev *sc_devs;
-};
-
-/* Definition of the driver for autoconfig. */
-int    picamatch(struct device *, void *, void *);
-void   picaattach(struct device *, struct device *, void *);
-int    picaprint(void *, char *);
-
-struct cfattach pica_ca = {
-       sizeof(struct device), picamatch, picaattach
-};
-struct cfdriver pica_cd = {
-       NULL, "pica", DV_DULL, NULL, 0
-};
-
-void   pica_intr_establish __P((struct confargs *, int (*)(void *), void *));
-void   pica_intr_disestablish __P((struct confargs *));
-caddr_t        pica_cvtaddr __P((struct confargs *));
-int    pica_matchname __P((struct confargs *, char *));
-int    pica_iointr __P((void *));
-int    pica_clkintr __P((unsigned, unsigned, unsigned, unsigned));
-
-extern int cputype;
-
-/*
- *  Interrupt dispatch table.
- */
-struct pica_int_desc int_table[] = {
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  0 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  1 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  2 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  3 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  4 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  5 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  6 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  7 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  8 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /*  9 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 10 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 11 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 12 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 13 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 14 */
-       {0, pica_intrnull, (void *)NULL, 0 },  /* 15 */
-};
-
-struct pica_dev {
-       struct confargs ps_ca;
-       u_int           ps_mask;
-       intr_handler_t  ps_handler;
-       void            *ps_base;
-};
-#ifdef ACER_PICA_61
-struct pica_dev acer_pica_61_cpu[] = {
-       {{ "dallas_rtc",0, 0, },
-          0,                    pica_intrnull, (void *)PICA_SYS_CLOCK, },
-       {{ "lpt",       1, 0, },
-          PICA_SYS_LB_IE_PAR1,  pica_intrnull, (void *)PICA_SYS_PAR1, },
-       {{ "fdc",       2, 0, },
-          PICA_SYS_LB_IE_FLOPPY,pica_intrnull, (void *)PICA_SYS_FLOPPY, },
-       {{ NULL,        3, NULL, },
-          0, pica_intrnull, (void *)NULL, },
-       {{ NULL,        4, NULL, },
-          0, pica_intrnull, (void *)NULL, },
-       {{ "sonic",     5, 0, },
-          PICA_SYS_LB_IE_SONIC, pica_intrnull, (void *)PICA_SYS_SONIC, },
-       {{ "asc",       6, 0, },
-          PICA_SYS_LB_IE_SCSI,  pica_intrnull, (void *)PICA_SYS_SCSI, },
-       {{ "pc",        7, 0, },
-          PICA_SYS_LB_IE_KBD,   pica_intrnull, (void *)PICA_SYS_KBD, },
-       {{ "pms",       8, NULL, },
-          PICA_SYS_LB_IE_MOUSE, pica_intrnull, (void *)PICA_SYS_KBD, },
-       {{ "com",       9, 0, },
-          PICA_SYS_LB_IE_COM1,  pica_intrnull, (void *)PICA_SYS_COM1, },
-       {{ "com",      10, 0, },
-          PICA_SYS_LB_IE_COM2,  pica_intrnull, (void *)PICA_SYS_COM2, },
-       {{ NULL,       -1, NULL, },
-          0, NULL, (void *)NULL, },
-};
-#endif
-
-struct pica_dev *pica_cpu_devs[] = {
-        NULL,                   /* Unused */
-#ifdef ACER_PICA_61
-        acer_pica_61_cpu,       /* Acer PICA */
-#else
-       NULL,
-#endif
-};
-int npica_cpu_devs = sizeof pica_cpu_devs / sizeof pica_cpu_devs[0];
-
-int local_int_mask = 0;        /* Local interrupt enable mask */
-
-int
-picamatch(parent, cfdata, aux)
-       struct device *parent;
-       void *cfdata;
-       void *aux;
-{
-       struct cfdata *cf = cfdata;
-       struct confargs *ca = aux;
-
-        /* Make sure that we're looking for a PICA. */
-        if (strcmp(ca->ca_name, pica_cd.cd_name) != 0)
-                return (0);
-
-        /* Make sure that unit exists. */
-       if (cf->cf_unit != 0 ||
-           cputype > npica_cpu_devs || pica_cpu_devs[cputype] == NULL)
-               return (0);
-
-       return (1);
-}
-
-void
-picaattach(parent, self, aux)
-       struct device *parent;
-       struct device *self;
-       void *aux;
-{
-       struct pica_softc *sc = (struct pica_softc *)self;
-       struct confargs *nca;
-       int i;
-
-       printf("\n");
-
-       /* keep our CPU device description handy */
-       sc->sc_devs = pica_cpu_devs[cputype];
-
-       /* set up interrupt handlers */
-       set_intr(INT_MASK_1, pica_iointr, 2);
-
-       sc->sc_bus.ab_dv = (struct device *)sc;
-       sc->sc_bus.ab_type = BUS_PICA;
-       sc->sc_bus.ab_intr_establish = pica_intr_establish;
-       sc->sc_bus.ab_intr_disestablish = pica_intr_disestablish;
-       sc->sc_bus.ab_cvtaddr = pica_cvtaddr;
-       sc->sc_bus.ab_matchname = pica_matchname;
-
-       /* Initialize PICA Dma */
-       picaDmaInit();
-       /* Try to configure each PICA attached device */
-       for (i = 0; sc->sc_devs[i].ps_ca.ca_slot >= 0; i++) {
-
-               if(sc->sc_devs[i].ps_ca.ca_name == NULL)
-                       continue; /* Empty slot */
-
-               nca = &sc->sc_devs[i].ps_ca;
-               nca->ca_bus = &sc->sc_bus;
-
-               /* Tell the autoconfig machinery we've found the hardware. */
-               config_found(self, nca, picaprint);
-       }
-}
-
-int
-picaprint(aux, pnp)
-       void *aux;
-       char *pnp;
-{
-       struct confargs *ca = aux;
-
-        if (pnp)
-                printf("%s at %s", ca->ca_name, pnp);
-        printf(" slot %ld offset 0x%lx", ca->ca_slot, ca->ca_offset);
-        return (UNCONF);
-}
-
-caddr_t
-pica_cvtaddr(ca)
-       struct confargs *ca;
-{
-       struct pica_softc *sc = pica_cd.cd_devs[0];
-
-       return(sc->sc_devs[ca->ca_slot].ps_base + ca->ca_offset);
-
-}
-
-void
-pica_intr_establish(ca, handler, val)
-       struct confargs *ca;
-       intr_handler_t handler;
-       void *val;
-{
-       struct pica_softc *sc = pica_cd.cd_devs[0];
-
-       int slot;
-
-       slot = ca->ca_slot;
-       if(slot == 0) {         /* Slot 0 is special, clock */
-               set_intr(INT_MASK_4, pica_clkintr, 1);
-       }
-
-       if(int_table[slot].int_mask != 0) {
-               panic("pica intr already set");
-       }
-       else {
-               int_table[slot].int_mask = sc->sc_devs[slot].ps_mask;;
-               local_int_mask |= int_table[slot].int_mask;
-               int_table[slot].int_hand = handler;
-               int_table[slot].param = val;
-       }
-       out16(PICA_SYS_LB_IE, local_int_mask);
-}
-
-void
-pica_intr_disestablish(ca)
-       struct confargs *ca;
-{
-       struct pica_softc *sc = pica_cd.cd_devs[0];
-
-       int slot;
-
-       slot = ca->ca_slot;
-       if(slot = 0) {          /* Slot 0 is special, clock */
-       }
-       else {
-               local_int_mask &= ~int_table[slot].int_mask;
-               int_table[slot].int_mask = 0;
-               int_table[slot].int_hand = pica_intrnull;
-               int_table[slot].param = (void *)NULL;
-       }
-}
-
-int
-pica_matchname(ca, name)
-       struct confargs *ca;
-       char *name;
-{
-
-       return (strcmp(name, ca->ca_name) == 0);
-}
-
-int
-pica_intrnull(val)
-       void *val;
-{
-
-       panic("uncaught PICA intr for slot %d\n", val);
-}
-
-/*
- *   Handle pica i/o interrupt.
- */
-int
-pica_iointr(val)
-       void *val;
-{
-       int vector;
-
-       while((vector = inb(PVIS) >> 2) != 0) {
-               (*int_table[vector].int_hand)(int_table[vector].param);
-       }
-       return(~0);  /* Dont reenable */
-}
-
-/*
- * Handle pica interval clock interrupt.
- */
-int
-pica_clkintr(mask, pc, statusReg, causeReg)
-       unsigned mask;
-       unsigned pc;
-       unsigned statusReg;
-       unsigned causeReg;
-{
-       struct clockframe cf;
-       int temp;
-
-       temp = inw(PICA_SYS_IT_STAT);
-       cf.pc = pc;
-       cf.sr = statusReg;
-       hardclock(&cf);
-
-       /* Re-enable clock interrupts */
-       splx(INT_MASK_4 | SR_INT_ENAB);
-
-       return(~INT_MASK_4); /* Keep clock interrupts enabled */
-}
-
diff --git a/sys/arch/pica/pica/pica.h b/sys/arch/pica/pica/pica.h
deleted file mode 100644 (file)
index c8e2a88..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * The Mach Operating System project at Carnegie-Mellon University,
- * Ralph Campbell and Rick Macklem.
- *
- * 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.
- *
- *     from: @(#)pica.h        8.1 (Berkeley) 6/10/93
- *      $Id: pica.h,v 1.2 1995/12/16 13:05:20 deraadt Exp $
- */
-
-/*
- * HISTORY
- * Log:        pica.h,v
- *     Created, from the ALI specs:
- */
-/*
- *     File: pica.h
- *     Author: Per Fogelstrom
- *     Date:   1/95
- *
- */
-
-#ifndef        MIPS_PICA_H
-#define        MIPS_PICA_H 1
-
-/*
- * PICA's Physical address space
- */
-
-#define PICA_PHYS_MIN          0x00000000      /* 256 Meg */
-#define PICA_PHYS_MAX          0x0fffffff
-
-/*
- * Memory map
- */
-
-#define PICA_PHYS_MEMORY_START 0x00000000
-#define PICA_PHYS_MEMORY_END   0x0fffffff      /* 256 Meg in 8 slots */
-
-#define PICA_MEMORY_SIZE_REG   0xe00fffe0      /* Memory size register */
-#define        PICA_CONFIG_REG         0xe00ffff0      /* Hardware config reg  */
-
-/*
- * I/O map
- */
-
-#define        PICA_P_LOCAL_IO_BASE    0x80000000      /* I/O Base address */
-#define        PICA_V_LOCAL_IO_BASE    0xe0000000
-#define        PICA_S_LOCAL_IO_BASE    0x00040000      /* Size */
-#define PVLB PICA_V_LOCAL_IO_BASE
-#define        PICA_SYS_TL_BASE        (PVLB+0x0018)   /* DMA transl. table base */
-#define        PICA_SYS_TL_LIMIT       (PVLB+0x0020)   /* DMA transl. table limit */
-#define        PICA_SYS_TL_IVALID      (PVLB+0x0028)   /* DMA transl. cache inval */
-#define        PICA_SYS_DMA0_REGS      (PVLB+0x0100)   /* DMA ch0 base address */
-#define        PICA_SYS_DMA1_REGS      (PVLB+0x0120)   /* DMA ch0 base address */
-#define        PICA_SYS_DMA2_REGS      (PVLB+0x0140)   /* DMA ch0 base address */
-#define        PICA_SYS_DMA3_REGS      (PVLB+0x0160)   /* DMA ch0 base address */
-#define        PICA_SYS_IT_VALUE       (PVLB+0x0228)   /* Interval timer reload */
-#define        PICA_SYS_IT_STAT        (PVLB+0x0230)   /* Interval timer count */
-#define        PICA_SYS_EXT_IMASK      (PVLB+0x00e8)   /* External int enable mask */
-#define        PICA_SYS_SONIC          (PVLB+0x1000)   /* SONIC base address */
-#define        PICA_SYS_SCSI           (PVLB+0x2000)   /* SCSI base address */
-#define        PICA_SYS_FLOPPY         (PVLB+0x3000)   /* Floppy base address */
-#define        PICA_SYS_CLOCK          (PVLB+0x4000)   /* Clock base address */
-#define        PICA_SYS_KBD            (PVLB+0x5000)   /* Keybrd/mouse base address */
-#define        PICA_SYS_COM1           (PVLB+0x6000)   /* Com port 1 */
-#define        PICA_SYS_COM2           (PVLB+0x7000)   /* Com port 2 */
-#define        PICA_SYS_PAR1           (PVLB+0x8000)   /* Parallel port 1 */
-#define        PICA_SYS_NVRAM          (PVLB+0x9000)   /* Unprotected NV-ram */
-#define        PICA_SYS_PNVRAM         (PVLB+0xa000)   /* Protected NV-ram */
-#define        PICA_SYS_NVPROM         (PVLB+0xb000)   /* Read only NV-ram */
-#define        PICA_SYS_SOUND          (PVLB+0xc000)   /* Sound port */
-
-#define        PICA_SYS_ISA_AS         (PICA_V_ISA_IO+0x70)
-
-#define        PICA_P_DRAM_CONF        0x800e0000      /* Dram config registers */
-#define        PICA_V_DRAM_CONF        0xe00e0000
-#define        PICA_S_DRAM_CONF        0x00020000
-
-#define        PICA_P_INT_SOURCE       0xf0000000      /* Interrupt src registers */
-#define        PICA_V_INT_SOURCE       PICA_V_LOCAL_IO_BASE+PICA_S_LOCAL_IO_BASE
-#define        PICA_S_INT_SOURCE       0x00001000
-#define PVIS PICA_V_INT_SOURCE
-#define        PICA_SYS_LB_IS          (PVIS+0x0000)   /* Local bus int source */
-#define        PICA_SYS_LB_IE          (PVIS+0x0002)   /* Local bus int enables */
-#define PICA_SYS_LB_IE_PAR1    0x0001          /* Parallel port enable */
-#define        PICA_SYS_LB_IE_FLOPPY   0x0002          /* Floppy ctrl enable */
-#define        PICA_SYS_LB_IE_SOUND    0x0004          /* Sound port enable */
-#define        PICA_SYS_LB_IE_VIDEO    0x0008          /* Video int enable */
-#define        PICA_SYS_LB_IE_SONIC    0x0010          /* Ethernet ctrl enable */
-#define        PICA_SYS_LB_IE_SCSI     0x0020          /* Scsi crtl enable */
-#define PICA_SYS_LB_IE_KBD     0x0040          /* Keyboard ctrl enable */
-#define PICA_SYS_LB_IE_MOUSE   0x0080          /* Mouse ctrl enable */
-#define        PICA_SYS_LB_IE_COM1     0x0100          /* Serial port 1 enable */
-#define        PICA_SYS_LB_IE_COM2     0x0200          /* Serial port 2 enable */
-
-#define        PICA_P_LOCAL_VIDEO_CTRL 0x60000000      /* Local video control */
-#define        PICA_V_LOCAL_VIDEO_CTRL 0xe0200000
-#define        PICA_S_LOCAL_VIDEO_CTRL 0x00200000
-
-#define        PICA_P_EXTND_VIDEO_CTRL 0x60200000      /* Extended video control */
-#define        PICA_V_EXTND_VIDEO_CTRL 0xe0400000
-#define        PICA_S_EXTND_VIDEO_CTRL 0x00200000
-
-#define        PICA_P_LOCAL_VIDEO      0x40000000      /* Local video memory */
-#define        PICA_V_LOCAL_VIDEO      0xe0800000
-#define        PICA_S_LOCAL_VIDEO      0x00800000
-
-#define        PICA_P_ISA_IO           0x90000000      /* ISA I/O control */
-#define        PICA_V_ISA_IO           0xe2000000
-#define        PICA_S_ISA_IO           0x01000000
-
-#define        PICA_P_ISA_MEM          0x91000000      /* ISA Memory control */
-#define        PICA_V_ISA_MEM          0xe3000000
-#define        PICA_S_ISA_MEM          0x01000000
-
-/*
- *  Addresses used by various display drivers.
- */
-#define MONO_BASE      (PICA_V_LOCAL_VIDEO_CTRL + 0x3B4)
-#define MONO_BUF       (PICA_V_LOCAL_VIDEO + 0xB0000)
-#define CGA_BASE       (PICA_V_LOCAL_VIDEO_CTRL + 0x3D4)
-#define CGA_BUF                (PICA_V_LOCAL_VIDEO + 0xB8000)
-
-/*
- *  Interrupt vector descriptor for device on pica bus.
- */
-struct pica_int_desc {
-       int             int_mask;       /* Mask used in PICA_SYS_LB_IE */
-       intr_handler_t  int_hand;       /* Interrupt handler */
-       void            *param;         /* Parameter to send to handler */
-       int             spl_mask;       /* Spl mask for interrupt */
-};
-
-int    pica_intrnull __P((void *));
-#endif /* MIPS_PICA_H */
diff --git a/sys/arch/pica/pica/picatype.h b/sys/arch/pica/pica/picatype.h
deleted file mode 100644 (file)
index b5f215e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * The Mach Operating System project at Carnegie-Mellon University,
- * Ralph Campbell and Rick Macklem.
- *
- * 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.
- *
- *     from: @(#)picatype.h    8.1 (Berkeley) 6/10/93
- *      $Id: picatype.h,v 1.1.1.1 1995/10/18 10:39:19 deraadt Exp $
- */
-
-/*
- * Mother board type byte of "systype" environment variable.
- */
-#define        MIPS_PICA_61    0x1     /* Acer Labs Pica 61 */
-#define        ACER_PICA_61    0x1     /* Acer Labs Pica 61 */
diff --git a/sys/arch/pica/pica/pmap.c b/sys/arch/pica/pica/pmap.c
deleted file mode 100644 (file)
index 3ef2129..0000000
+++ /dev/null
@@ -1,1632 +0,0 @@
-/* 
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- *     from: @(#)pmap.c        8.4 (Berkeley) 1/26/94
- *      $Id: pmap.c,v 1.4 1996/06/06 23:07:44 deraadt Exp $
- */
-
-/*
- *     Manages physical address maps.
- *
- *     In addition to hardware address maps, this
- *     module is called upon to provide software-use-only
- *     maps which may or may not be stored in the same
- *     form as hardware maps.  These pseudo-maps are
- *     used to store intermediate results from copy
- *     operations to and from address spaces.
- *
- *     Since the information managed by this module is
- *     also stored by the logical address mapping module,
- *     this module may throw away valid virtual-to-physical
- *     mappings at almost any time.  However, invalidations
- *     of virtual-to-physical mappings must be done as
- *     requested.
- *
- *     In order to cope with hardware architectures which
- *     make virtual-to-physical map invalidates expensive,
- *     this module may delay invalidate or reduced protection
- *     operations until such time as they are actually
- *     necessary.  This module is given full information as
- *     to which processors are currently using which maps,
- *     and to when physical maps must be made correct.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/user.h>
-#include <sys/buf.h>
-#ifdef SYSVSHM
-#include <sys/shm.h>
-#endif
-
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-#include <vm/vm_pageout.h>
-
-#include <machine/cpu.h>
-#include <machine/pte.h>
-
-extern vm_page_t vm_page_alloc1 __P((void));
-extern void vm_page_free1 __P((vm_page_t));
-
-/*
- * For each vm_page_t, there is a list of all currently valid virtual
- * mappings of that page.  An entry is a pv_entry_t, the list is pv_table.
- * XXX really should do this as a part of the higher level code.
- */
-typedef struct pv_entry {
-       struct pv_entry *pv_next;       /* next pv_entry */
-       struct pmap     *pv_pmap;       /* pmap where mapping lies */
-       vm_offset_t     pv_va;          /* virtual address for mapping */
-       int             pv_flags;       /* Some flags for the mapping */
-} *pv_entry_t;
-#define        PV_UNCACHED     0x0001          /* Page is mapped unchached */
-
-/*
- * Local pte bits used only here
- */
-#define PG_RO          0x40000000
-#define        PG_WIRED        0x80000000
-
-pv_entry_t     pv_table;       /* array of entries, one per page */
-int    pmap_remove_pv();
-
-#define pa_index(pa)           atop((pa) - first_phys_addr)
-#define pa_to_pvh(pa)          (&pv_table[pa_index(pa)])
-
-#ifdef DEBUG
-struct {
-       int kernel;     /* entering kernel mapping */
-       int user;       /* entering user mapping */
-       int ptpneeded;  /* needed to allocate a PT page */
-       int pwchange;   /* no mapping change, just wiring or protection */
-       int wchange;    /* no mapping change, just wiring */
-       int mchange;    /* was mapped but mapping to different page */
-       int managed;    /* a managed page */
-       int firstpv;    /* first mapping for this PA */
-       int secondpv;   /* second mapping for this PA */
-       int ci;         /* cache inhibited */
-       int unmanaged;  /* not a managed page */
-       int flushes;    /* cache flushes */
-       int cachehit;   /* new entry forced valid entry out */
-} enter_stats;
-struct {
-       int calls;
-       int removes;
-       int flushes;
-       int pidflushes; /* HW pid stolen */
-       int pvfirst;
-       int pvsearch;
-} remove_stats;
-
-int pmapdebug = 0;
-#define PDB_FOLLOW     0x0001
-#define PDB_INIT       0x0002
-#define PDB_ENTER      0x0004
-#define PDB_REMOVE     0x0008
-#define PDB_CREATE     0x0010
-#define PDB_PTPAGE     0x0020
-#define PDB_PVENTRY    0x0040
-#define PDB_BITS       0x0080
-#define PDB_COLLECT    0x0100
-#define PDB_PROTECT    0x0200
-#define PDB_TLBPID     0x0400
-#define PDB_PARANOIA   0x2000
-#define PDB_WIRING     0x4000
-#define PDB_PVDUMP     0x8000
-
-#endif /* DEBUG */
-
-struct pmap    kernel_pmap_store;
-
-vm_offset_t            avail_start;    /* PA of first available physical page */
-vm_offset_t    avail_end;      /* PA of last available physical page */
-vm_size_t      mem_size;       /* memory size in bytes */
-vm_offset_t    virtual_avail;  /* VA of first avail page (after kernel bss)*/
-vm_offset_t    virtual_end;    /* VA of last avail page (end of kernel AS) */
-#ifdef ATTR
-char           *pmap_attributes;       /* reference and modify bits */
-#endif
-struct segtab  *free_segtab;           /* free list kept locally */
-u_int          tlbpid_gen = 1;         /* TLB PID generation count */
-int            tlbpid_cnt = 2;         /* next available TLB PID */
-pt_entry_t     *Sysmap;                /* kernel pte table */
-u_int          Sysmapsize;             /* number of pte's in Sysmap */
-
-/*
- *     Bootstrap the system enough to run with virtual memory.
- *     firstaddr is the first unused kseg0 address (not page aligned).
- */
-void
-pmap_bootstrap(firstaddr)
-       vm_offset_t firstaddr;
-{
-       register int i;
-       register pt_entry_t *spte;
-       vm_offset_t start = firstaddr;
-       extern int maxmem, physmem;
-
-#define        valloc(name, type, num) \
-           (name) = (type *)firstaddr; firstaddr = (vm_offset_t)((name)+(num))
-       /*
-        * Allocate a PTE table for the kernel.
-        * The '1024' comes from PAGER_MAP_SIZE in vm_pager_init().
-        * This should be kept in sync.
-        * We also reserve space for kmem_alloc_pageable() for vm_fork().
-        */
-       Sysmapsize = (VM_KMEM_SIZE + VM_MBUF_SIZE + VM_PHYS_SIZE +
-               nbuf * MAXBSIZE + 16 * NCARGS) / NBPG + 1024 + 256;
-#ifdef SYSVSHM
-       Sysmapsize += shminfo.shmall;
-#endif
-       valloc(Sysmap, pt_entry_t, Sysmapsize);
-#ifdef ATTR
-       valloc(pmap_attributes, char, physmem);
-#endif
-       /*
-        * Allocate memory for pv_table.
-        * This will allocate more entries than we really need.
-        * We could do this in pmap_init when we know the actual
-        * phys_start and phys_end but its better to use kseg0 addresses
-        * rather than kernel virtual addresses mapped through the TLB.
-        */
-       i = maxmem - pica_btop(CACHED_TO_PHYS(firstaddr));
-       valloc(pv_table, struct pv_entry, i);
-
-       /*
-        * Clear allocated memory.
-        */
-       firstaddr = pica_round_page(firstaddr);
-       bzero((caddr_t)start, firstaddr - start);
-
-       avail_start = CACHED_TO_PHYS(firstaddr);
-       avail_end = pica_ptob(maxmem);
-       mem_size = avail_end - avail_start;
-
-       virtual_avail = VM_MIN_KERNEL_ADDRESS;
-       virtual_end = VM_MIN_KERNEL_ADDRESS + Sysmapsize * NBPG;
-       /* XXX need to decide how to set cnt.v_page_size */
-
-       simple_lock_init(&pmap_kernel()->pm_lock);
-       pmap_kernel()->pm_count = 1;
-
-       /*
-        * The R4?00 stores only one copy of the Global bit in the
-        * translation lookaside buffer for each 2 page entry. 
-        * Thus invalid entrys must have the Global bit set so
-        * when Entry LO and Entry HI G bits are anded together
-        * they will produce a global bit to store in the tlb.
-        */
-       for(i = 0, spte = Sysmap; i < Sysmapsize; i++, spte++)
-               spte->pt_entry = PG_G;
-}
-
-/*
- * Bootstrap memory allocator. This function allows for early dynamic
- * memory allocation until the virtual memory system has been bootstrapped.
- * After that point, either kmem_alloc or malloc should be used. This
- * function works by stealing pages from the (to be) managed page pool,
- * stealing virtual address space, then mapping the pages and zeroing them.
- *
- * It should be used from pmap_bootstrap till vm_page_startup, afterwards
- * it cannot be used, and will generate a panic if tried. Note that this
- * memory will never be freed, and in essence it is wired down.
- */
-void *
-pmap_bootstrap_alloc(size)
-       int size;
-{
-       vm_offset_t val;
-       extern boolean_t vm_page_startup_initialized;
-
-       if (vm_page_startup_initialized)
-               panic("pmap_bootstrap_alloc: called after startup initialized");
-
-       val = PHYS_TO_CACHED(avail_start);
-       size = round_page(size);
-       avail_start += size;
-
-       blkclr((caddr_t)val, size);
-       return ((void *)val);
-}
-
-/*
- *     Initialize the pmap module.
- *     Called by vm_init, to initialize any structures that the pmap
- *     system needs to map virtual memory.
- */
-void
-pmap_init(phys_start, phys_end)
-       vm_offset_t phys_start, phys_end;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_INIT))
-               printf("pmap_init(%x, %x)\n", phys_start, phys_end);
-#endif
-}
-
-/*
- *     Create and return a physical map.
- *
- *     If the size specified for the map
- *     is zero, the map is an actual physical
- *     map, and may be referenced by the
- *     hardware.
- *
- *     If the size specified is non-zero,
- *     the map will be used in software only, and
- *     is bounded by that size.
- */
-pmap_t
-pmap_create(size)
-       vm_size_t size;
-{
-       register pmap_t pmap;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
-               printf("pmap_create(%x)\n", size);
-#endif
-       /*
-        * Software use map does not need a pmap
-        */
-       if (size)
-               return (NULL);
-
-       /* XXX: is it ok to wait here? */
-       pmap = (pmap_t) malloc(sizeof *pmap, M_VMPMAP, M_WAITOK);
-#ifdef notifwewait
-       if (pmap == NULL)
-               panic("pmap_create: cannot allocate a pmap");
-#endif
-       bzero(pmap, sizeof(*pmap));
-       pmap_pinit(pmap);
-       return (pmap);
-}
-
-/*
- * Initialize a preallocated and zeroed pmap structure,
- * such as one in a vmspace structure.
- */
-void
-pmap_pinit(pmap)
-       register struct pmap *pmap;
-{
-       register int i;
-       int s;
-       extern struct vmspace vmspace0;
-       extern struct user *proc0paddr;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
-               printf("pmap_pinit(%x)\n", pmap);
-#endif
-       simple_lock_init(&pmap->pm_lock);
-       pmap->pm_count = 1;
-       if (free_segtab) {
-               s = splimp();
-               pmap->pm_segtab = free_segtab;
-               free_segtab = *(struct segtab **)free_segtab;
-               pmap->pm_segtab->seg_tab[0] = NULL;
-               splx(s);
-       } else {
-               register struct segtab *stp;
-               vm_page_t mem;
-               void pmap_zero_page();
-
-               mem = vm_page_alloc1();
-               pmap_zero_page(VM_PAGE_TO_PHYS(mem));
-               pmap->pm_segtab = stp = (struct segtab *)
-                       PHYS_TO_CACHED(VM_PAGE_TO_PHYS(mem));
-               i = NBPG / sizeof(struct segtab);
-               s = splimp();
-               while (--i != 0) {
-                       stp++;
-                       *(struct segtab **)stp = free_segtab;
-                       free_segtab = stp;
-               }
-               splx(s);
-       }
-#ifdef DIAGNOSTIC
-       for (i = 0; i < PMAP_SEGTABSIZE; i++)
-               if (pmap->pm_segtab->seg_tab[i] != 0)
-                       panic("pmap_pinit: pm_segtab != 0");
-#endif
-       if (pmap == &vmspace0.vm_pmap) {
-               /*
-                * The initial process has already been allocated a TLBPID
-                * in mach_init().
-                */
-               pmap->pm_tlbpid = 1;
-               pmap->pm_tlbgen = tlbpid_gen;
-               proc0paddr->u_pcb.pcb_segtab = (void *)pmap->pm_segtab;
-       } else {
-               pmap->pm_tlbpid = 0;
-               pmap->pm_tlbgen = 0;
-       }
-}
-
-/*
- *     Retire the given physical map from service.
- *     Should only be called if the map contains
- *     no valid mappings.
- */
-void
-pmap_destroy(pmap)
-       register pmap_t pmap;
-{
-       int count;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
-               printf("pmap_destroy(%x)\n", pmap);
-#endif
-       if (pmap == NULL)
-               return;
-
-       simple_lock(&pmap->pm_lock);
-       count = --pmap->pm_count;
-       simple_unlock(&pmap->pm_lock);
-       if (count == 0) {
-               pmap_release(pmap);
-               free((caddr_t)pmap, M_VMPMAP);
-       }
-}
-
-/*
- * Release any resources held by the given physical map.
- * Called when a pmap initialized by pmap_pinit is being released.
- * Should only be called if the map contains no valid mappings.
- */
-void
-pmap_release(pmap)
-       register pmap_t pmap;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
-               printf("pmap_release(%x)\n", pmap);
-#endif
-
-       if (pmap->pm_segtab) {
-               register pt_entry_t *pte;
-               register int i;
-               int s;
-#ifdef DIAGNOSTIC
-               register int j;
-#endif
-
-               for (i = 0; i < PMAP_SEGTABSIZE; i++) {
-                       /* get pointer to segment map */
-                       pte = pmap->pm_segtab->seg_tab[i];
-                       if (!pte)
-                               continue;
-#ifdef DIAGNOSTIC
-                       for (j = 0; j < NPTEPG; j++) {
-                               if ((pte+j)->pt_entry)
-                                       panic("pmap_release: segmap not empty");
-                       }
-#endif
-                       MachHitFlushDCache(pte, PAGE_SIZE);
-                       vm_page_free1(
-                               PHYS_TO_VM_PAGE(CACHED_TO_PHYS(pte)));
-                       pmap->pm_segtab->seg_tab[i] = NULL;
-               }
-               s = splimp();
-               *(struct segtab **)pmap->pm_segtab = free_segtab;
-               free_segtab = pmap->pm_segtab;
-               splx(s);
-               pmap->pm_segtab = NULL;
-       }
-}
-
-/*
- *     Add a reference to the specified pmap.
- */
-void
-pmap_reference(pmap)
-       pmap_t pmap;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_reference(%x)\n", pmap);
-#endif
-       if (pmap != NULL) {
-               simple_lock(&pmap->pm_lock);
-               pmap->pm_count++;
-               simple_unlock(&pmap->pm_lock);
-       }
-}
-
-/*
- *     Remove the given range of addresses from the specified map.
- *
- *     It is assumed that the start and end are properly
- *     rounded to the page size.
- */
-void
-pmap_remove(pmap, sva, eva)
-       register pmap_t pmap;
-       vm_offset_t sva, eva;
-{
-       register vm_offset_t nssva;
-       register pt_entry_t *pte;
-       unsigned entry;
-       int flush;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_REMOVE|PDB_PROTECT))
-               printf("pmap_remove(%x, %x, %x)\n", pmap, sva, eva);
-       remove_stats.calls++;
-#endif
-       if (pmap == NULL)
-               return;
-
-       if (!pmap->pm_segtab) {
-               register pt_entry_t *pte;
-
-               /* remove entries from kernel pmap */
-#ifdef DIAGNOSTIC
-               if (sva < VM_MIN_KERNEL_ADDRESS || eva > virtual_end)
-                       panic("pmap_remove: kva not in range");
-#endif
-               pte = kvtopte(sva);
-               for (; sva < eva; sva += NBPG, pte++) {
-                       entry = pte->pt_entry;
-                       if (!(entry & PG_V))
-                               continue;
-                       if (entry & PG_WIRED)
-                               pmap->pm_stats.wired_count--;
-                       pmap->pm_stats.resident_count--;
-                       if(pmap_remove_pv(pmap, sva, pfn_to_vad(entry))) {
-                               MachFlushDCache(sva, PAGE_SIZE);
-                       }
-#ifdef ATTR
-                       pmap_attributes[atop(pfn_to_vad(entry))] = 0;
-#endif
-                       /*
-                        * Flush the TLB for the given address.
-                        */
-                       pte->pt_entry = PG_NV | PG_G; /* See above about G bit */
-                       MachTLBFlushAddr(sva);
-#ifdef DEBUG
-                       remove_stats.flushes++;
-
-#endif
-               }
-               return;
-       }
-
-#ifdef DIAGNOSTIC
-       if (eva > VM_MAXUSER_ADDRESS)
-               panic("pmap_remove: uva not in range");
-#endif
-       while (sva < eva) {
-               nssva = pica_trunc_seg(sva) + NBSEG;
-               if (nssva == 0 || nssva > eva)
-                       nssva = eva;
-               /*
-                * If VA belongs to an unallocated segment,
-                * skip to the next segment boundary.
-                */
-               if (!(pte = pmap_segmap(pmap, sva))) {
-                       sva = nssva;
-                       continue;
-               }
-               /*
-                * Invalidate every valid mapping within this segment.
-                */
-               pte += uvtopte(sva);
-               for (; sva < nssva; sva += NBPG, pte++) {
-                       entry = pte->pt_entry;
-                       if (!(entry & PG_V))
-                               continue;
-                       if (entry & PG_WIRED)
-                               pmap->pm_stats.wired_count--;
-                       pmap->pm_stats.resident_count--;
-                       if(pmap_remove_pv(pmap, sva, pfn_to_vad(entry))) {
-                               MachFlushDCache(sva, PAGE_SIZE);
-                       }
-#ifdef ATTR
-                       pmap_attributes[atop(pfn_to_vad(entry))] = 0;
-#endif
-                       pte->pt_entry = PG_NV;
-                       /*
-                        * Flush the TLB for the given address.
-                        */
-                       if (pmap->pm_tlbgen == tlbpid_gen) {
-                               MachTLBFlushAddr(sva | (pmap->pm_tlbpid <<
-                                       VMTLB_PID_SHIFT));
-#ifdef DEBUG
-                               remove_stats.flushes++;
-#endif
-                       }
-               }
-       }
-}
-
-/*
- *     pmap_page_protect:
- *
- *     Lower the permission for all mappings to a given page.
- */
-void
-pmap_page_protect(pa, prot)
-       vm_offset_t pa;
-       vm_prot_t prot;
-{
-       register pv_entry_t pv;
-       register vm_offset_t va;
-       int s;
-
-#ifdef DEBUG
-       if ((pmapdebug & (PDB_FOLLOW|PDB_PROTECT)) ||
-           prot == VM_PROT_NONE && (pmapdebug & PDB_REMOVE))
-               printf("pmap_page_protect(%x, %x)\n", pa, prot);
-#endif
-       if (!IS_VM_PHYSADDR(pa))
-               return;
-
-       switch (prot) {
-       case VM_PROT_READ|VM_PROT_WRITE:
-       case VM_PROT_ALL:
-               break;
-
-       /* copy_on_write */
-       case VM_PROT_READ:
-       case VM_PROT_READ|VM_PROT_EXECUTE:
-               pv = pa_to_pvh(pa);
-               s = splimp();
-               /*
-                * Loop over all current mappings setting/clearing as appropos.
-                */
-               if (pv->pv_pmap != NULL) {
-                       for (; pv; pv = pv->pv_next) {
-                               extern vm_offset_t pager_sva, pager_eva;
-
-                               va = pv->pv_va;
-
-                               /*
-                                * XXX don't write protect pager mappings
-                                */
-                               if (va >= pager_sva && va < pager_eva)
-                                       continue;
-                               pmap_protect(pv->pv_pmap, va, va + PAGE_SIZE,
-                                       prot);
-                       }
-               }
-               splx(s);
-               break;
-
-       /* remove_all */
-       default:
-               pv = pa_to_pvh(pa);
-               s = splimp();
-               while (pv->pv_pmap != NULL) {
-                       pmap_remove(pv->pv_pmap, pv->pv_va,
-                                   pv->pv_va + PAGE_SIZE);
-               }
-               splx(s);
-       }
-}
-
-/*
- *     Set the physical protection on the
- *     specified range of this map as requested.
- */
-void
-pmap_protect(pmap, sva, eva, prot)
-       register pmap_t pmap;
-       vm_offset_t sva, eva;
-       vm_prot_t prot;
-{
-       register vm_offset_t nssva;
-       register pt_entry_t *pte;
-       register unsigned entry;
-       u_int p;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_PROTECT))
-               printf("pmap_protect(%x, %x, %x, %x)\n", pmap, sva, eva, prot);
-#endif
-       if (pmap == NULL)
-               return;
-
-       if ((prot & VM_PROT_READ) == VM_PROT_NONE) {
-               pmap_remove(pmap, sva, eva);
-               return;
-       }
-
-       p = (prot & VM_PROT_WRITE) ? PG_M : PG_RO;
-
-       if (!pmap->pm_segtab) {
-               /*
-                * Change entries in kernel pmap.
-                * This will trap if the page is writeable (in order to set
-                * the dirty bit) even if the dirty bit is already set. The
-                * optimization isn't worth the effort since this code isn't
-                * executed much. The common case is to make a user page
-                * read-only.
-                */
-#ifdef DIAGNOSTIC
-               if (sva < VM_MIN_KERNEL_ADDRESS || eva > virtual_end)
-                       panic("pmap_protect: kva not in range");
-#endif
-               pte = kvtopte(sva);
-               for (; sva < eva; sva += NBPG, pte++) {
-                       entry = pte->pt_entry;
-                       if (!(entry & PG_V))
-                               continue;
-                       entry = (entry & ~(PG_M | PG_RO)) | p;
-                       pte->pt_entry = entry;
-                       /*
-                        * Update the TLB if the given address is in the cache.
-                        */
-                       MachTLBUpdate(sva, entry);
-               }
-               return;
-       }
-
-#ifdef DIAGNOSTIC
-       if (eva > VM_MAXUSER_ADDRESS)
-               panic("pmap_protect: uva not in range");
-#endif
-       while (sva < eva) {
-               nssva = pica_trunc_seg(sva) + NBSEG;
-               if (nssva == 0 || nssva > eva)
-                       nssva = eva;
-               /*
-                * If VA belongs to an unallocated segment,
-                * skip to the next segment boundary.
-                */
-               if (!(pte = pmap_segmap(pmap, sva))) {
-                       sva = nssva;
-                       continue;
-               }
-               /*
-                * Change protection on every valid mapping within this segment.
-                */
-               pte += (sva >> PGSHIFT) & (NPTEPG - 1);
-               for (; sva < nssva; sva += NBPG, pte++) {
-                       entry = pte->pt_entry;
-                       if (!(entry & PG_V))
-                               continue;
-                       entry = (entry & ~(PG_M | PG_RO)) | p;
-                       pte->pt_entry = entry;
-                       /*
-                        * Update the TLB if the given address is in the cache.
-                        */
-                       if (pmap->pm_tlbgen == tlbpid_gen)
-                               MachTLBUpdate(sva | (pmap->pm_tlbpid <<
-                                       VMTLB_PID_SHIFT), entry);
-               }
-       }
-}
-
-/*
- *     Return RO protection of page.
- */
-int
-pmap_is_page_ro(pmap, va, entry)
-       pmap_t      pmap;
-       vm_offset_t va;
-       int         entry;
-{
-       return(entry & PG_RO);
-}
-
-/*
- *     pmap_page_cache:
- *
- *     Change all mappings of a page to cached/uncached.
- */
-void
-pmap_page_cache(pa,mode)
-       vm_offset_t pa;
-{
-       register pv_entry_t pv;
-       register pt_entry_t *pte;
-       register vm_offset_t va;
-       register unsigned entry;
-       register unsigned newmode;
-       int s;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_ENTER))
-               printf("pmap_page_uncache(%x)\n", pa);
-#endif
-       if (!IS_VM_PHYSADDR(pa))
-               return;
-
-       newmode = mode & PV_UNCACHED ? PG_UNCACHED : PG_CACHED;
-       pv = pa_to_pvh(pa);
-       s = splimp();
-       while (pv) {
-               pv->pv_flags = (pv->pv_flags & ~PV_UNCACHED) | mode;
-               if (!pv->pv_pmap->pm_segtab) {
-               /*
-                * Change entries in kernel pmap.
-                */
-                       pte = kvtopte(pv->pv_va);
-                       entry = pte->pt_entry;
-                       if (entry & PG_V) {
-                               entry = (entry & ~PG_CACHEMODE) | newmode;
-                               pte->pt_entry = entry;
-                               MachTLBUpdate(pv->pv_va, entry);
-                       }
-               }
-               else {
-                       if (pte = pmap_segmap(pv->pv_pmap, pv->pv_va)) {
-                               pte += (pv->pv_va >> PGSHIFT) & (NPTEPG - 1);
-                               entry = pte->pt_entry;
-                               if (entry & PG_V) {
-                                       entry = (entry & ~PG_CACHEMODE) | newmode;
-                                       pte->pt_entry = entry;
-                                       if (pv->pv_pmap->pm_tlbgen == tlbpid_gen)
-                                               MachTLBUpdate(pv->pv_va | (pv->pv_pmap->pm_tlbpid <<
-                                                       VMTLB_PID_SHIFT), entry);
-                               }
-                       }
-               }
-               pv = pv->pv_next;
-       }
-
-       splx(s);
-}
-
-/*
- *     Insert the given physical page (p) at
- *     the specified virtual address (v) in the
- *     target physical map with the protection requested.
- *
- *     If specified, the page will be wired down, meaning
- *     that the related pte can not be reclaimed.
- *
- *     NB:  This is the only routine which MAY NOT lazy-evaluate
- *     or lose information.  That is, this routine must actually
- *     insert this page into the given map NOW.
- */
-void
-pmap_enter(pmap, va, pa, prot, wired)
-       register pmap_t pmap;
-       vm_offset_t va;
-       register vm_offset_t pa;
-       vm_prot_t prot;
-       boolean_t wired;
-{
-       register pt_entry_t *pte;
-       register u_int npte;
-       register int i, j;
-       vm_page_t mem;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_ENTER))
-               printf("pmap_enter(%x, %x, %x, %x, %x)\n",
-                      pmap, va, pa, prot, wired);
-#endif
-#ifdef DIAGNOSTIC
-       if (!pmap)
-               panic("pmap_enter: pmap");
-       if (!pmap->pm_segtab) {
-               enter_stats.kernel++;
-               if (va < VM_MIN_KERNEL_ADDRESS || va >= virtual_end)
-                       panic("pmap_enter: kva");
-       } else {
-               enter_stats.user++;
-               if (va >= VM_MAXUSER_ADDRESS)
-                       panic("pmap_enter: uva");
-       }
-       if (pa & 0x80000000)
-               panic("pmap_enter: pa");
-       if (!(prot & VM_PROT_READ))
-               panic("pmap_enter: prot");
-#endif
-
-       if (IS_VM_PHYSADDR(pa)) {
-               register pv_entry_t pv, npv;
-               int s;
-
-               if (!(prot & VM_PROT_WRITE))
-                       npte = PG_ROPAGE;
-               else {
-                       register vm_page_t mem;
-
-                       mem = PHYS_TO_VM_PAGE(pa);
-                       if ((int)va < 0) {
-                               /*
-                                * Don't bother to trap on kernel writes,
-                                * just record page as dirty.
-                                */
-                               npte = PG_RWPAGE;
-                               mem->flags &= ~PG_CLEAN;
-                       } else
-#ifdef ATTR
-                               if ((pmap_attributes[atop(pa)] &
-                                   PMAP_ATTR_MOD) || !(mem->flags & PG_CLEAN))
-#else
-                               if (!(mem->flags & PG_CLEAN))
-#endif
-                                       npte = PG_RWPAGE;
-                               else
-                                       npte = PG_CWPAGE;
-               }
-
-#ifdef DEBUG
-               enter_stats.managed++;
-#endif
-               /*
-                * Enter the pmap and virtual address into the
-                * physical to virtual map table.
-                */
-               pv = pa_to_pvh(pa);
-               s = splimp();
-#ifdef DEBUG
-               if (pmapdebug & PDB_ENTER)
-                       printf("pmap_enter: pv %x: was %x/%x/%x\n",
-                              pv, pv->pv_va, pv->pv_pmap, pv->pv_next);
-#endif
-               if (pv->pv_pmap == NULL) {
-                       /*
-                        * No entries yet, use header as the first entry
-                        */
-#ifdef DEBUG
-                       if (pmapdebug & PDB_PVENTRY)
-                               printf("pmap_enter: first pv: pmap %x va %x\n",
-                                       pmap, va);
-                       enter_stats.firstpv++;
-#endif
-                       pv->pv_va = va;
-                       pv->pv_flags = 0;
-                       pv->pv_pmap = pmap;
-                       pv->pv_next = NULL;
-               } else {
-                       if (!(pv->pv_flags & PV_UNCACHED)) {
-                       /*
-                        * There is at least one other VA mapping this page.
-                        * Check if they are cache index compatible. If not
-                        * remove all mappings, flush the cache and set page
-                        * to be mapped uncached. Caching will be restored
-                        * when pages are mapped compatible again. NOT!
-                        */
-                               for (npv = pv; npv; npv = npv->pv_next) {
-                                       /*
-                                        * Check cache aliasing incompatibility
-                                        */
-                                       if((npv->pv_va & machCacheAliasMask) != (va & machCacheAliasMask)) {
-                                               printf("pmap_enter: creating uncached mapping 0x%x, 0x%x.\n",npv->pv_va, va);
-                                               pmap_page_cache(pa,PV_UNCACHED);
-                                               MachFlushDCache(pv->pv_va, PAGE_SIZE);
-                                               npte = (npte & ~PG_CACHEMODE) | PG_UNCACHED;
-                                               break;
-                                       }
-                               }
-                       }
-                       else {
-                               npte = (npte & ~PG_CACHEMODE) | PG_UNCACHED;
-                       }
-                       /*
-                        * There is at least one other VA mapping this page.
-                        * Place this entry after the header.
-                        *
-                        * Note: the entry may already be in the table if
-                        * we are only changing the protection bits.
-                        */
-                       for (npv = pv; npv; npv = npv->pv_next) {
-                               if (pmap == npv->pv_pmap && va == npv->pv_va) {
-#ifdef DIAGNOSTIC
-                                       unsigned entry;
-
-                                       if (!pmap->pm_segtab)
-                                               entry = kvtopte(va)->pt_entry;
-                                       else {
-                                               pte = pmap_segmap(pmap, va);
-                                               if (pte) {
-                                                       pte += (va >> PGSHIFT) &
-                                                           (NPTEPG - 1);
-                                                       entry = pte->pt_entry;
-                                               } else
-                                                       entry = 0;
-                                       }
-                                       if (!(entry & PG_V) ||
-                                           pfn_to_vad(entry) != pa)
-                                               printf(
-                       "pmap_enter: found va %x pa %x in pv_table but != %x\n",
-                                                       va, pa, entry);
-#endif
-                                       goto fnd;
-                               }
-                       }
-#ifdef DEBUG
-                       if (pmapdebug & PDB_PVENTRY)
-                               printf("pmap_enter: new pv: pmap %x va %x\n",
-                                       pmap, va);
-#endif
-                       /* can this cause us to recurse forever? */
-                       npv = (pv_entry_t)
-                               malloc(sizeof *npv, M_VMPVENT, M_NOWAIT);
-                       npv->pv_va = va;
-                       npv->pv_pmap = pmap;
-                       npv->pv_next = pv->pv_next;
-                       npv->pv_flags = pv->pv_flags;
-                       pv->pv_next = npv;
-#ifdef DEBUG
-                       if (!npv->pv_next)
-                               enter_stats.secondpv++;
-#endif
-               fnd:
-                       ;
-               }
-               splx(s);
-       } else {
-               /*
-                * Assumption: if it is not part of our managed memory
-                * then it must be device memory which may be volitile.
-                */
-#ifdef DEBUG
-               enter_stats.unmanaged++;
-#endif
-               npte = (prot & VM_PROT_WRITE) ? (PG_IOPAGE & ~PG_G) : (PG_IOPAGE& ~(PG_G | PG_M));
-       }
-
-       /*
-        * The only time we need to flush the cache is if we
-        * execute from a physical address and then change the data.
-        * This is the best place to do this.
-        * pmap_protect() and pmap_remove() are mostly used to switch
-        * between R/W and R/O pages.
-        * NOTE: we only support cache flush for read only text.
-        */
-       if (prot == (VM_PROT_READ | VM_PROT_EXECUTE))
-               MachFlushICache(PHYS_TO_CACHED(pa), PAGE_SIZE);
-
-       if (!pmap->pm_segtab) {
-               /* enter entries into kernel pmap */
-               pte = kvtopte(va);
-               npte |= vad_to_pfn(pa) | PG_ROPAGE | PG_G;
-               if (wired) {
-                       pmap->pm_stats.wired_count++;
-                       npte |= PG_WIRED;
-               }
-               if (!(pte->pt_entry & PG_V)) {
-                       pmap->pm_stats.resident_count++;
-               } else {
-#ifdef DIAGNOSTIC
-                       if (pte->pt_entry & PG_WIRED)
-                               panic("pmap_enter: kernel wired");
-#endif
-               }
-               /*
-                * Update the same virtual address entry.
-                */
-               j = MachTLBUpdate(va, npte);
-               pte->pt_entry = npte;
-               return;
-       }
-
-       if (!(pte = pmap_segmap(pmap, va))) {
-               mem = vm_page_alloc1();
-               pmap_zero_page(VM_PAGE_TO_PHYS(mem));
-               pmap_segmap(pmap, va) = pte = (pt_entry_t *)
-                       PHYS_TO_CACHED(VM_PAGE_TO_PHYS(mem));
-#ifdef DIAGNOSTIC
-               for (i = 0; i < NPTEPG; i++) {
-                       if ((pte+i)->pt_entry)
-                               panic("pmap_enter: new segmap not empty");
-               }
-#endif
-       }
-       pte += (va >> PGSHIFT) & (NPTEPG - 1);
-
-       /*
-        * Now validate mapping with desired protection/wiring.
-        * Assume uniform modified and referenced status for all
-        * MIPS pages in a MACH page.
-        */
-       npte |= vad_to_pfn(pa);
-       if (wired) {
-               pmap->pm_stats.wired_count++;
-               npte |= PG_WIRED;
-       }
-#ifdef DEBUG
-       if (pmapdebug & PDB_ENTER) {
-               printf("pmap_enter: new pte %x", npte);
-               if (pmap->pm_tlbgen == tlbpid_gen)
-                       printf(" tlbpid %d", pmap->pm_tlbpid);
-               printf("\n");
-       }
-#endif
-       if (!(pte->pt_entry & PG_V)) {
-               pmap->pm_stats.resident_count++;
-       }
-       pte->pt_entry = npte;
-       if (pmap->pm_tlbgen == tlbpid_gen)
-               j = MachTLBUpdate(va | (pmap->pm_tlbpid <<
-                       VMTLB_PID_SHIFT), npte);
-}
-
-/*
- *     Routine:        pmap_change_wiring
- *     Function:       Change the wiring attribute for a map/virtual-address
- *                     pair.
- *     In/out conditions:
- *                     The mapping must already exist in the pmap.
- */
-void
-pmap_change_wiring(pmap, va, wired)
-       register pmap_t pmap;
-       vm_offset_t va;
-       boolean_t wired;
-{
-       register pt_entry_t *pte;
-       u_int p;
-       register int i;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_WIRING))
-               printf("pmap_change_wiring(%x, %x, %x)\n", pmap, va, wired);
-#endif
-       if (pmap == NULL)
-               return;
-
-       p = wired ? PG_WIRED : 0;
-
-       /*
-        * Don't need to flush the TLB since PG_WIRED is only in software.
-        */
-       if (!pmap->pm_segtab) {
-               /* change entries in kernel pmap */
-#ifdef DIAGNOSTIC
-               if (va < VM_MIN_KERNEL_ADDRESS || va >= virtual_end)
-                       panic("pmap_change_wiring");
-#endif
-               pte = kvtopte(va);
-       } else {
-               if (!(pte = pmap_segmap(pmap, va)))
-                       return;
-               pte += (va >> PGSHIFT) & (NPTEPG - 1);
-       }
-
-       if (!(pte->pt_entry & PG_WIRED) && p)
-               pmap->pm_stats.wired_count++;
-       else if ((pte->pt_entry & PG_WIRED) && !p)
-               pmap->pm_stats.wired_count--;
-
-       if (pte->pt_entry & PG_V)
-               pte->pt_entry = (pte->pt_entry & ~PG_WIRED) | p;
-}
-
-/*
- *     Routine:        pmap_extract
- *     Function:
- *             Extract the physical page address associated
- *             with the given map/virtual_address pair.
- */
-vm_offset_t
-pmap_extract(pmap, va)
-       register pmap_t pmap;
-       vm_offset_t va;
-{
-       register vm_offset_t pa;
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_extract(%x, %x) -> ", pmap, va);
-#endif
-
-       if (!pmap->pm_segtab) {
-#ifdef DIAGNOSTIC
-               if (va < VM_MIN_KERNEL_ADDRESS || va >= virtual_end)
-                       panic("pmap_extract");
-#endif
-               pa = pfn_to_vad(kvtopte(va)->pt_entry);
-       } else {
-               register pt_entry_t *pte;
-
-               if (!(pte = pmap_segmap(pmap, va)))
-                       pa = 0;
-               else {
-                       pte += (va >> PGSHIFT) & (NPTEPG - 1);
-                       pa = pfn_to_vad(pte->pt_entry);
-               }
-       }
-       if (pa)
-               pa |= va & PGOFSET;
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_extract: pa %x\n", pa);
-#endif
-       return (pa);
-}
-
-/*
- *     Copy the range specified by src_addr/len
- *     from the source map to the range dst_addr/len
- *     in the destination map.
- *
- *     This routine is only advisory and need not do anything.
- */
-void
-pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr)
-       pmap_t dst_pmap;
-       pmap_t src_pmap;
-       vm_offset_t dst_addr;
-       vm_size_t len;
-       vm_offset_t src_addr;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_copy(%x, %x, %x, %x, %x)\n",
-                      dst_pmap, src_pmap, dst_addr, len, src_addr);
-#endif
-}
-
-/*
- *     Require that all active physical maps contain no
- *     incorrect entries NOW.  [This update includes
- *     forcing updates of any address map caching.]
- *
- *     Generally used to insure that a thread about
- *     to run will see a semantically correct world.
- */
-void
-pmap_update()
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_update()\n");
-#endif
-}
-
-/*
- *     Routine:        pmap_collect
- *     Function:
- *             Garbage collects the physical map system for
- *             pages which are no longer used.
- *             Success need not be guaranteed -- that is, there
- *             may well be pages which are not referenced, but
- *             others may be collected.
- *     Usage:
- *             Called by the pageout daemon when pages are scarce.
- */
-void
-pmap_collect(pmap)
-       pmap_t pmap;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_collect(%x)\n", pmap);
-#endif
-}
-
-/*
- *     pmap_zero_page zeros the specified (machine independent)
- *     page.
- */
-void
-pmap_zero_page(phys)
-       vm_offset_t phys;
-{
-       register int *p, *end;
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_zero_page(%x)\n", phys);
-#endif
-/*XXX FIXME Not very sophisticated */
-       MachFlushCache();
-       p = (int *)PHYS_TO_CACHED(phys);
-       end = p + PAGE_SIZE / sizeof(int);
-       do {
-               p[0] = 0;
-               p[1] = 0;
-               p[2] = 0;
-               p[3] = 0;
-               p += 4;
-       } while (p != end);
-/*XXX FIXME Not very sophisticated */
-       MachFlushCache();
-}
-
-/*
- *     pmap_copy_page copies the specified (machine independent)
- *     page.
- */
-void
-pmap_copy_page(src, dst)
-       vm_offset_t src, dst;
-{
-       register int *s, *d, *end;
-       register int tmp0, tmp1, tmp2, tmp3;
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_copy_page(%x, %x)\n", src, dst);
-#endif
-/*XXX FIXME Not very sophisticated */
-       MachFlushCache();
-       s = (int *)PHYS_TO_CACHED(src);
-       d = (int *)PHYS_TO_CACHED(dst);
-       end = s + PAGE_SIZE / sizeof(int);
-       do {
-               tmp0 = s[0];
-               tmp1 = s[1];
-               tmp2 = s[2];
-               tmp3 = s[3];
-               d[0] = tmp0;
-               d[1] = tmp1;
-               d[2] = tmp2;
-               d[3] = tmp3;
-               s += 4;
-               d += 4;
-       } while (s != end);
-/*XXX FIXME Not very sophisticated */
-       MachFlushCache();
-}
-
-/*
- *     Routine:        pmap_pageable
- *     Function:
- *             Make the specified pages (by pmap, offset)
- *             pageable (or not) as requested.
- *
- *             A page which is not pageable may not take
- *             a fault; therefore, its page table entry
- *             must remain valid for the duration.
- *
- *             This routine is merely advisory; pmap_enter
- *             will specify that these pages are to be wired
- *             down (or not) as appropriate.
- */
-void
-pmap_pageable(pmap, sva, eva, pageable)
-       pmap_t          pmap;
-       vm_offset_t     sva, eva;
-       boolean_t       pageable;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_pageable(%x, %x, %x, %x)\n",
-                      pmap, sva, eva, pageable);
-#endif
-}
-
-/*
- *     Clear the modify bits on the specified physical page.
- */
-void
-pmap_clear_modify(pa)
-       vm_offset_t pa;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_clear_modify(%x)\n", pa);
-#endif
-#ifdef ATTR
-       pmap_attributes[atop(pa)] &= ~PMAP_ATTR_MOD;
-#endif
-}
-
-/*
- *     pmap_clear_reference:
- *
- *     Clear the reference bit on the specified physical page.
- */
-void
-pmap_clear_reference(pa)
-       vm_offset_t pa;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_clear_reference(%x)\n", pa);
-#endif
-#ifdef ATTR
-       pmap_attributes[atop(pa)] &= ~PMAP_ATTR_REF;
-#endif
-}
-
-/*
- *     pmap_is_referenced:
- *
- *     Return whether or not the specified physical page is referenced
- *     by any physical maps.
- */
-boolean_t
-pmap_is_referenced(pa)
-       vm_offset_t pa;
-{
-#ifdef ATTR
-       return (pmap_attributes[atop(pa)] & PMAP_ATTR_REF);
-#else
-       return (FALSE);
-#endif
-}
-
-/*
- *     pmap_is_modified:
- *
- *     Return whether or not the specified physical page is modified
- *     by any physical maps.
- */
-boolean_t
-pmap_is_modified(pa)
-       vm_offset_t pa;
-{
-#ifdef ATTR
-       return (pmap_attributes[atop(pa)] & PMAP_ATTR_MOD);
-#else
-       return (FALSE);
-#endif
-}
-
-vm_offset_t
-pmap_phys_address(ppn)
-       int ppn;
-{
-
-#ifdef DEBUG
-       if (pmapdebug & PDB_FOLLOW)
-               printf("pmap_phys_address(%x)\n", ppn);
-#endif
-       return (pica_ptob(ppn));
-}
-
-/*
- * Miscellaneous support routines
- */
-
-/*
- * Allocate a hardware PID and return it.
- * It takes almost as much or more time to search the TLB for a
- * specific PID and flush those entries as it does to flush the entire TLB.
- * Therefore, when we allocate a new PID, we just take the next number. When
- * we run out of numbers, we flush the TLB, increment the generation count
- * and start over. PID zero is reserved for kernel use.
- * This is called only by switch().
- */
-int
-pmap_alloc_tlbpid(p)
-       register struct proc *p;
-{
-       register pmap_t pmap;
-       register int id;
-
-       pmap = &p->p_vmspace->vm_pmap;
-       if (pmap->pm_tlbgen != tlbpid_gen) {
-               id = tlbpid_cnt;
-               if (id == VMNUM_PIDS) {
-                       MachTLBFlush();
-                       /* reserve tlbpid_gen == 0 to alway mean invalid */
-                       if (++tlbpid_gen == 0)
-                               tlbpid_gen = 1;
-                       id = 1;
-               }
-               tlbpid_cnt = id + 1;
-               pmap->pm_tlbpid = id;
-               pmap->pm_tlbgen = tlbpid_gen;
-       } else
-               id = pmap->pm_tlbpid;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_TLBPID)) {
-               if (curproc)
-                       printf("pmap_alloc_tlbpid: curproc %d '%s' ",
-                               curproc->p_pid, curproc->p_comm);
-               else
-                       printf("pmap_alloc_tlbpid: curproc <none> ");
-               printf("segtab %x tlbpid %d pid %d '%s'\n",
-                       pmap->pm_segtab, id, p->p_pid, p->p_comm);
-       }
-#endif
-       return (id);
-}
-
-/*
- * Remove a physical to virtual address translation.
- * Returns TRUE if it was the last mapping and cached, else FALSE.
- */
-int
-pmap_remove_pv(pmap, va, pa)
-       pmap_t pmap;
-       vm_offset_t va, pa;
-{
-       register pv_entry_t pv, npv;
-       int s, last;
-
-#ifdef DEBUG
-       if (pmapdebug & (PDB_FOLLOW|PDB_PVENTRY))
-               printf("pmap_remove_pv(%x, %x, %x)\n", pmap, va, pa);
-#endif
-       /*
-        * Remove page from the PV table (raise IPL since we
-        * may be called at interrupt time).
-        */
-       if (!IS_VM_PHYSADDR(pa))
-               return(TRUE);
-       pv = pa_to_pvh(pa);
-       s = splimp();
-       /*
-        * If it is the first entry on the list, it is actually
-        * in the header and we must copy the following entry up
-        * to the header.  Otherwise we must search the list for
-        * the entry.  In either case we free the now unused entry.
-        */
-       if (pmap == pv->pv_pmap && va == pv->pv_va) {
-               last = (pv->pv_flags & PV_UNCACHED) ? FALSE : TRUE;
-               npv = pv->pv_next;
-               if (npv) {
-                       *pv = *npv;
-                       free((caddr_t)npv, M_VMPVENT);
-               } else
-                       pv->pv_pmap = NULL;
-#ifdef DEBUG
-               remove_stats.pvfirst++;
-#endif
-       } else {
-               last = FALSE;
-               for (npv = pv->pv_next; npv; pv = npv, npv = npv->pv_next) {
-#ifdef DEBUG
-                       remove_stats.pvsearch++;
-#endif
-                       if (pmap == npv->pv_pmap && va == npv->pv_va)
-                               goto fnd;
-               }
-#ifdef DIAGNOSTIC
-               printf("pmap_remove_pv(%x, %x, %x) not found\n", pmap, va, pa);
-               panic("pmap_remove_pv");
-#endif
-       fnd:
-               pv->pv_next = npv->pv_next;
-               free((caddr_t)npv, M_VMPVENT);
-       }
-       splx(s);
-       return(last);
-}
-
-/*
- *     vm_page_alloc1:
- *
- *     Allocate and return a memory cell with no associated object.
- */
-vm_page_t
-vm_page_alloc1()
-{
-       register vm_page_t      mem;
-       int             spl;
-
-       spl = splimp();                         /* XXX */
-       simple_lock(&vm_page_queue_free_lock);
-       if (vm_page_queue_free.tqh_first == NULL) {
-               simple_unlock(&vm_page_queue_free_lock);
-               splx(spl);
-               return (NULL);
-       }
-
-       mem = vm_page_queue_free.tqh_first;
-       TAILQ_REMOVE(&vm_page_queue_free, mem, pageq);
-
-       cnt.v_free_count--;
-       simple_unlock(&vm_page_queue_free_lock);
-       splx(spl);
-
-       mem->flags = PG_BUSY | PG_CLEAN | PG_FAKE;
-       mem->wire_count = 0;
-
-       /*
-        *      Decide if we should poke the pageout daemon.
-        *      We do this if the free count is less than the low
-        *      water mark, or if the free count is less than the high
-        *      water mark (but above the low water mark) and the inactive
-        *      count is less than its target.
-        *
-        *      We don't have the counts locked ... if they change a little,
-        *      it doesn't really matter.
-        */
-
-       if (cnt.v_free_count < cnt.v_free_min ||
-           (cnt.v_free_count < cnt.v_free_target &&
-            cnt.v_inactive_count < cnt.v_inactive_target))
-               thread_wakeup((void *)&vm_pages_needed);
-       return (mem);
-}
-
-/*
- *     vm_page_free1:
- *
- *     Returns the given page to the free list,
- *     disassociating it with any VM object.
- *
- *     Object and page must be locked prior to entry.
- */
-void
-vm_page_free1(mem)
-       register vm_page_t      mem;
-{
-
-       if (mem->flags & PG_ACTIVE) {
-               TAILQ_REMOVE(&vm_page_queue_active, mem, pageq);
-               mem->flags &= ~PG_ACTIVE;
-               cnt.v_active_count--;
-       }
-
-       if (mem->flags & PG_INACTIVE) {
-               TAILQ_REMOVE(&vm_page_queue_inactive, mem, pageq);
-               mem->flags &= ~PG_INACTIVE;
-               cnt.v_inactive_count--;
-       }
-
-       if (!(mem->flags & PG_FICTITIOUS)) {
-               int     spl;
-
-               spl = splimp();
-               simple_lock(&vm_page_queue_free_lock);
-               TAILQ_INSERT_TAIL(&vm_page_queue_free, mem, pageq);
-
-               cnt.v_free_count++;
-               simple_unlock(&vm_page_queue_free_lock);
-               splx(spl);
-       }
-}
-
-/*
- * Find first virtual address >= *vap that doesn't cause
- * a cache alias conflict.
- */
-void
-pmap_prefer(foff, vap)
-       register vm_offset_t foff;
-       register vm_offset_t *vap;
-{
-       register vm_offset_t    va = *vap;
-       register long           m, d;
-
-       m = 0x10000;            /* Max aliased cache size */
-
-       d = foff - va;
-       d &= (m-1);
-       *vap = va + d;
-}
-
diff --git a/sys/arch/pica/pica/process_machdep.c b/sys/arch/pica/pica/process_machdep.c
deleted file mode 100644 (file)
index 8d62d1e..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1994 Adam Glass   
- * Copyright (c) 1993 The Regents of the University of California.
- * Copyright (c) 1993 Jan-Simon Pendry
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- *
- * From:
- *     Id: procfs_i386.c,v 4.1 1993/12/17 10:47:45 jsp Rel
- *
- *     $Id: process_machdep.c,v 1.2 1996/05/01 18:16:20 pefo Exp $
- */
-
-/*
- * This file may seem a bit stylized, but that so that it's easier to port.
- * Functions to be implemented here are:
- *
- * process_read_regs(proc, regs)
- *     Get the current user-visible register set from the process
- *     and copy it into the regs structure (<machine/reg.h>).
- *     The process is stopped at the time read_regs is called.
- *
- * process_write_regs(proc, regs)
- *     Update the current register set from the passed in regs
- *     structure.  Take care to avoid clobbering special CPU
- *     registers or privileged bits in the PSL.
- *     The process is stopped at the time write_regs is called.
- *
- * process_sstep(proc)
- *     Arrange for the process to trap after executing a single instruction.
- *
- * process_set_pc(proc)
- *     Set the process's program counter.
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/time.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/user.h>
-#include <sys/vnode.h>
-#include <sys/ptrace.h>
-#include <machine/psl.h>
-#include <machine/reg.h>
-
-int
-process_read_regs(p, regs)
-       struct proc *p;
-       struct reg *regs;
-{
-       bcopy((caddr_t)p->p_md.md_regs, (caddr_t)regs, sizeof(struct reg));
-       return (0);
-}
-
-int
-process_write_regs(p, regs)
-       struct proc *p;
-       struct reg *regs;
-{
-       bcopy((caddr_t)regs, (caddr_t)p->p_md.md_regs, sizeof(struct reg));
-/*XXX Clear to user set bits!! */
-       return (0);
-}
-
-int
-process_sstep(p, sstep)
-       struct proc *p;
-{
-       if(sstep)
-               cpu_singlestep(p);
-       return (0);
-}
-
-int
-process_set_pc(p, addr)
-       struct proc *p;
-       caddr_t addr;
-{
-       p->p_md.md_regs[PC] = (int)addr;
-       return (0);
-}
-
diff --git a/sys/arch/pica/pica/swapgeneric.c b/sys/arch/pica/pica/swapgeneric.c
deleted file mode 100644 (file)
index c013286..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*     $NetBSD: swapgeneric.c,v 1.3 1995/03/24 15:03:02 cgd Exp $      */
-
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * 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.
- *
- *     @(#)swapgeneric.c       5.5 (Berkeley) 5/9/91
- */
-
-#include <sys/param.h>
-#include <sys/conf.h>
-#include <sys/buf.h>
-#include <sys/systm.h>
-#include <sys/reboot.h>
-#include <sys/device.h>
-#include <sys/disklabel.h>
-
-#include <machine/pte.h>
-
-/*
- * Generic configuration;  all in one
- */
-dev_t  rootdev = NODEV;
-dev_t  argdev = NODEV;
-dev_t  dumpdev = NODEV;
-int    nswap;
-struct swdevt swdevt[] = {
-       { NODEV,        1,      0 },
-       { NODEV,        0,      0 },
-};
-long   dumplo;
-int    dmmin, dmmax, dmtext;
-
-#include "sd.h"
-#if NSD > 0
-extern struct cfdriver sd_cd;
-#endif
-#include "fdc.h"
-#if NFDC > 0
-extern struct cfdriver fd_cd;
-#endif
-
-struct genericconf {
-       struct cfdriver *gc_driver;
-       char *gc_name;
-       dev_t gc_major;
-} genericconf[] = {
-#if NSD > 0
-       { &sd_cd,  "sd",  0 },
-#endif
-#if NFDC > 0
-       { &fd_cd,  "fd",  7 },
-#endif
-       { 0 }
-};
-
-extern int ffs_mountroot();
-int (*mountroot)() = ffs_mountroot;
-
-setconf()
-{
-       register struct genericconf *gc;
-       int unit, swaponroot = 0;
-
-       if (rootdev != NODEV)
-               goto doswap;
-
-       if (genericconf[0].gc_driver == 0)
-               goto verybad;
-
-       if (boothowto & RB_ASKNAME) {
-               char name[128];
-retry:
-               printf("root device? ");
-               gets(name);
-
-               if (strcmp(name, "halt") == 0)
-                       boot(RB_HALT);
-                       
-               for (gc = genericconf; gc->gc_driver; gc++)
-                       if (gc->gc_name[0] == name[0] &&
-                           gc->gc_name[1] == name[1])
-                               goto gotit;
-               goto bad;
-gotit:
-               if (name[3] == '*') {
-                       name[3] = name[4];
-                       swaponroot++;
-               }
-               if (name[2] >= '0' && name[2] <= '7' && name[3] == 0) {
-                       unit = name[2] - '0';
-                       goto found;
-               }
-               printf("bad/missing unit number\n");
-bad:
-               printf("use:\n");       
-               for (gc = genericconf; gc->gc_driver; gc++)
-                       printf("\t%s%%d\n", gc->gc_name);
-               printf("\thalt\n");
-               goto retry;
-       }
-       unit = 0;
-       for (gc = genericconf; gc->gc_driver; gc++) {
-               if (gc->gc_driver->cd_ndevs > unit &&
-                   gc->gc_driver->cd_devs[unit]) {
-                       printf("root on %s0\n", gc->gc_name);
-                       goto found;
-               }
-       }
-verybad:
-       printf("no suitable root\n");
-       boot(RB_HALT);
-
-found:
-       rootdev = makedev(gc->gc_major, unit * MAXPARTITIONS);
-doswap:
-       swdevt[0].sw_dev = argdev = dumpdev =
-           makedev(major(rootdev), minor(rootdev) + 1);
-       /* swap size and dumplo set during autoconfigure */
-       if (swaponroot)
-               rootdev = dumpdev;
-}
-
-gets(cp)
-       char *cp;
-{
-       register char *lp;
-       register c;
-
-       lp = cp;
-       for (;;) {
-               c = cngetc() & 0177;
-               switch (c) {
-               case '\n':
-               case '\r':
-                       cnputc(c);
-                       *lp++ = '\0';
-                       return;
-               case '\b':
-               case '\177':
-                       if (lp > cp) {
-                               printf("\b \b");
-                               lp--;
-                       }
-                       continue;
-               case '#':
-                       cnputc(c);
-                       lp--;
-                       if (lp < cp)
-                               lp = cp;
-                       continue;
-               case '@':
-               case 'u'&037:
-                       cnputc(c);
-                       cnputc('\n');
-                       lp = cp;
-                       continue;
-               default:
-                       cnputc(c);
-                       *lp++ = c;
-               }
-       }
-}
diff --git a/sys/arch/pica/pica/sys_machdep.c b/sys/arch/pica/pica/sys_machdep.c
deleted file mode 100644 (file)
index cc9986a..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*     $NetBSD: sys_machdep.c,v 1.6 1994/10/26 21:10:42 cgd Exp $      */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)sys_machdep.c       8.1 (Berkeley) 6/10/93
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <sys/proc.h>
-#include <sys/uio.h>
-#include <sys/kernel.h>
-#include <sys/mtio.h>
-#include <sys/buf.h>
-#include <sys/trace.h>
-
-#include <sys/mount.h>
-#include <sys/syscallargs.h>
-
-#ifdef TRACE
-int    nvualarm;
-
-vtrace(p, uap, retval)
-       struct proc *p;
-       register struct vtrace_args /* {
-               syscallarg(int) request;
-               syscallarg(int) value;
-       } */ *uap;
-       register_t *retval;
-{
-       int vdoualarm();
-
-       switch (SCARG(uap, request)) {
-
-       case VTR_DISABLE:               /* disable a trace point */
-       case VTR_ENABLE:                /* enable a trace point */
-               if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS)
-                       return (EINVAL);
-               *retval = traceflags[SCARG(uap, value)];
-               traceflags[SCARG(uap, value)] = SCARG(uap, request);
-               break;
-
-       case VTR_VALUE:         /* return a trace point setting */
-               if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS)
-                       return (EINVAL);
-               *retval = traceflags[SCARG(uap, value)];
-               break;
-
-       case VTR_UALARM:        /* set a real-time ualarm, less than 1 min */
-               if (SCARG(uap, value) <= 0 || SCARG(uap, value) > 60 * hz ||
-                   nvualarm > 5)
-                       return (EINVAL);
-               nvualarm++;
-               timeout(vdoualarm, (caddr_t)p->p_pid, SCARG(uap, value));
-               break;
-
-       case VTR_STAMP:
-               trace(TR_STAMP, SCARG(uap, value), p->p_pid);
-               break;
-       }
-       return (0);
-}
-
-vdoualarm(arg)
-       int arg;
-{
-       register struct proc *p;
-
-       p = pfind(arg);
-       if (p)
-               psignal(p, 16);
-       nvualarm--;
-}
-#endif
-
-sys_sysarch(p, v, retval)
-       struct proc *p;
-       void *v;
-       register_t *retval;
-{
-       struct sys_sysarch_args /* {
-               syscallarg(int) op;
-               syscallarg(char *) parms;
-       } */ *uap = v;
-       int error = 0;
-
-       switch(SCARG(uap, op)) {
-       default:
-               error = EINVAL;
-               break;
-       }
-       return(error);
-}
diff --git a/sys/arch/pica/pica/trap.c b/sys/arch/pica/pica/trap.c
deleted file mode 100644 (file)
index acbbd65..0000000
+++ /dev/null
@@ -1,1560 +0,0 @@
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- * from: Utah Hdr: trap.c 1.32 91/04/06
- *
- *     from: @(#)trap.c        8.5 (Berkeley) 1/11/94
- *      $Id: trap.c,v 1.7 1996/06/06 23:07:46 deraadt Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/kernel.h>
-#include <sys/signalvar.h>
-#include <sys/syscall.h>
-#include <sys/user.h>
-#include <sys/buf.h>
-#include <sys/device.h>
-#ifdef KTRACE
-#include <sys/ktrace.h>
-#endif
-#include <net/netisr.h>
-
-#include <machine/trap.h>
-#include <machine/psl.h>
-#include <machine/reg.h>
-#include <machine/cpu.h>
-#include <machine/pio.h>
-#include <machine/autoconf.h>
-#include <machine/pte.h>
-#include <machine/pmap.h>
-#include <machine/mips_opcode.h>
-
-#include <vm/vm.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-
-#include <pica/pica/pica.h>
-
-#include <sys/cdefs.h>
-#include <sys/syslog.h>
-
-struct proc *machFPCurProcPtr;         /* pointer to last proc to use FP */
-
-extern void MachKernGenException();
-extern void MachUserGenException();
-extern void MachKernIntr();
-extern void MachUserIntr();
-extern void MachTLBModException();
-extern void MachTLBInvalidException();
-extern unsigned MachEmulateBranch();
-
-void (*machExceptionTable[])() = {
-/*
- * The kernel exception handlers.
- */
-       MachKernIntr,                   /* external interrupt */
-       MachKernGenException,           /* TLB modification */
-       MachTLBInvalidException,        /* TLB miss (load or instr. fetch) */
-       MachTLBInvalidException,        /* TLB miss (store) */
-       MachKernGenException,           /* address error (load or I-fetch) */
-       MachKernGenException,           /* address error (store) */
-       MachKernGenException,           /* bus error (I-fetch) */
-       MachKernGenException,           /* bus error (load or store) */
-       MachKernGenException,           /* system call */
-       MachKernGenException,           /* breakpoint */
-       MachKernGenException,           /* reserved instruction */
-       MachKernGenException,           /* coprocessor unusable */
-       MachKernGenException,           /* arithmetic overflow */
-       MachKernGenException,           /* trap exception */
-       MachKernGenException,           /* viritual coherence exception inst */
-       MachKernGenException,           /* floating point exception */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* watch exception */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* reserved */
-       MachKernGenException,           /* viritual coherence exception data */
-/*
- * The user exception handlers.
- */
-       MachUserIntr,                   /*  0 */
-       MachUserGenException,           /*  1 */
-       MachUserGenException,           /*  2 */
-       MachUserGenException,           /*  3 */
-       MachUserGenException,           /*  4 */
-       MachUserGenException,           /*  5 */
-       MachUserGenException,           /*  6 */
-       MachUserGenException,           /*  7 */
-       MachUserGenException,           /*  8 */
-       MachUserGenException,           /*  9 */
-       MachUserGenException,           /* 10 */
-       MachUserGenException,           /* 11 */
-       MachUserGenException,           /* 12 */
-       MachUserGenException,           /* 13 */
-       MachUserGenException,           /* 14 */
-       MachUserGenException,           /* 15 */
-       MachUserGenException,           /* 16 */
-       MachUserGenException,           /* 17 */
-       MachUserGenException,           /* 18 */
-       MachUserGenException,           /* 19 */
-       MachUserGenException,           /* 20 */
-       MachUserGenException,           /* 21 */
-       MachUserGenException,           /* 22 */
-       MachUserGenException,           /* 23 */
-       MachUserGenException,           /* 24 */
-       MachUserGenException,           /* 25 */
-       MachUserGenException,           /* 26 */
-       MachUserGenException,           /* 27 */
-       MachUserGenException,           /* 28 */
-       MachUserGenException,           /* 29 */
-       MachUserGenException,           /* 20 */
-       MachUserGenException,           /* 31 */
-};
-
-char   *trap_type[] = {
-       "external interrupt",
-       "TLB modification",
-       "TLB miss (load or instr. fetch)",
-       "TLB miss (store)",
-       "address error (load or I-fetch)",
-       "address error (store)",
-       "bus error (I-fetch)",
-       "bus error (load or store)",
-       "system call",
-       "breakpoint",
-       "reserved instruction",
-       "coprocessor unusable",
-       "arithmetic overflow",
-       "trap",
-       "viritual coherency instruction",
-       "floating point",
-       "reserved 16",
-       "reserved 17",
-       "reserved 18",
-       "reserved 19",
-       "reserved 20",
-       "reserved 21",
-       "reserved 22",
-       "watch",
-       "reserved 24",
-       "reserved 25",
-       "reserved 26",
-       "reserved 27",
-       "reserved 28",
-       "reserved 29",
-       "reserved 30",
-       "viritual coherency data",
-};
-
-struct {
-       int     int_mask;
-       int     (*int_hand)();
-} cpu_int_tab[8];
-
-int cpu_int_mask;      /* External cpu interrupt mask */
-
-#ifdef DEBUG
-#define TRAPSIZE       10
-struct trapdebug {             /* trap history buffer for debugging */
-       u_int   status;
-       u_int   cause;
-       u_int   vadr;
-       u_int   pc;
-       u_int   ra;
-       u_int   sp;
-       u_int   code;
-} trapdebug[TRAPSIZE], *trp = trapdebug;
-#endif /* DEBUG */
-
-#ifdef DEBUG   /* stack trace code, also useful for DDB one day */
-extern void stacktrace();
-extern void logstacktrace();
-
-/* extern functions printed by name in stack backtraces */
-extern void idle(), cpu_switch(), splx(), wbflush();
-extern void MachTLBMiss();
-#endif /* DEBUG */
-
-static void pica_errintr();
-extern const struct callback *callv;
-extern volatile struct chiptime *Mach_clock_addr;
-extern u_long intrcnt[];
-
-/*
- * Handle an exception.
- * Called from MachKernGenException() or MachUserGenException()
- * when a processor trap occurs.
- * In the case of a kernel trap, we return the pc where to resume if
- * ((struct pcb *)UADDR)->pcb_onfault is set, otherwise, return old pc.
- */
-unsigned
-trap(statusReg, causeReg, vadr, pc, args)
-       unsigned statusReg;     /* status register at time of the exception */
-       unsigned causeReg;      /* cause register at time of exception */
-       unsigned vadr;          /* address (if any) the fault occured on */
-       unsigned pc;            /* program counter where to continue */
-{
-       register int type, i;
-       unsigned ucode = 0;
-       register struct proc *p = curproc;
-       u_quad_t sticks;
-       vm_prot_t ftype;
-       extern unsigned onfault_table[];
-
-#ifdef DEBUG
-       trp->status = statusReg;
-       trp->cause = causeReg;
-       trp->vadr = vadr;
-       trp->pc = pc;
-       trp->ra = !USERMODE(statusReg) ? ((int *)&args)[19] :
-               p->p_md.md_regs[RA];
-       trp->sp = (int)&args;
-       trp->code = 0;
-       if (++trp == &trapdebug[TRAPSIZE])
-               trp = trapdebug;
-#endif
-
-       cnt.v_trap++;
-       type = (causeReg & CR_EXC_CODE) >> CR_EXC_CODE_SHIFT;
-       if (USERMODE(statusReg)) {
-               type |= T_USER;
-               sticks = p->p_sticks;
-       }
-
-       /*
-        * Enable hardware interrupts if they were on before.
-        * We only respond to software interrupts when returning to user mode.
-        */
-       if (statusReg & SR_INT_ENAB)
-               splx((statusReg & HARD_INT_MASK) | SR_INT_ENAB);
-
-       switch (type) {
-       case T_TLB_MOD:
-               /* check for kernel address */
-               if ((int)vadr < 0) {
-                       register pt_entry_t *pte;
-                       register unsigned entry;
-                       register vm_offset_t pa;
-
-                       pte = kvtopte(vadr);
-                       entry = pte->pt_entry;
-#ifdef DIAGNOSTIC
-                       if (!(entry & PG_V) || (entry & PG_M))
-                               panic("trap: ktlbmod: invalid pte");
-#endif
-                       if (pmap_is_page_ro(pmap_kernel(), pica_trunc_page(vadr), entry)) {
-                               /* write to read only page in the kernel */
-                               ftype = VM_PROT_WRITE;
-                               goto kernel_fault;
-                       }
-                       entry |= PG_M;
-                       pte->pt_entry = entry;
-                       vadr &= ~PGOFSET;
-                       MachTLBUpdate(vadr, entry);
-                       pa = pfn_to_vad(entry);
-#ifdef ATTR
-                       pmap_attributes[atop(pa)] |= PMAP_ATTR_MOD;
-#else
-                       if (!IS_VM_PHYSADDR(pa))
-                               panic("trap: ktlbmod: unmanaged page");
-                       PHYS_TO_VM_PAGE(pa)->flags &= ~PG_CLEAN;
-#endif
-                       return (pc);
-               }
-               /* FALLTHROUGH */
-
-       case T_TLB_MOD+T_USER:
-           {
-               register pt_entry_t *pte;
-               register unsigned entry;
-               register vm_offset_t pa;
-               pmap_t pmap = &p->p_vmspace->vm_pmap;
-
-               if (!(pte = pmap_segmap(pmap, vadr)))
-                       panic("trap: utlbmod: invalid segmap");
-               pte += (vadr >> PGSHIFT) & (NPTEPG - 1);
-               entry = pte->pt_entry;
-#ifdef DIAGNOSTIC
-               if (!(entry & PG_V) || (entry & PG_M)) {
-                       panic("trap: utlbmod: invalid pte");
-               }
-#endif
-               if (pmap_is_page_ro(pmap, pica_trunc_page(vadr), entry)) {
-                       /* write to read only page */
-                       ftype = VM_PROT_WRITE;
-                       goto dofault;
-               }
-               entry |= PG_M;
-               pte->pt_entry = entry;
-               vadr = (vadr & ~PGOFSET) |
-                       (pmap->pm_tlbpid << VMTLB_PID_SHIFT);
-               MachTLBUpdate(vadr, entry);
-               pa = pfn_to_vad(entry);
-#ifdef ATTR
-               pmap_attributes[atop(pa)] |= PMAP_ATTR_MOD;
-#else
-               if (!IS_VM_PHYSADDR(pa)) {
-                       panic("trap: utlbmod: unmanaged page");
-               }
-               PHYS_TO_VM_PAGE(pa)->flags &= ~PG_CLEAN;
-#endif
-               if (!USERMODE(statusReg))
-                       return (pc);
-               goto out;
-           }
-
-       case T_TLB_LD_MISS:
-       case T_TLB_ST_MISS:
-               ftype = (type == T_TLB_ST_MISS) ? VM_PROT_WRITE : VM_PROT_READ;
-               /* check for kernel address */
-               if ((int)vadr < 0) {
-                       register vm_offset_t va;
-                       int rv;
-
-               kernel_fault:
-                       va = trunc_page((vm_offset_t)vadr);
-                       rv = vm_fault(kernel_map, va, ftype, FALSE);
-                       if (rv == KERN_SUCCESS)
-                               return (pc);
-                       if (i = ((struct pcb *)UADDR)->pcb_onfault) {
-                               ((struct pcb *)UADDR)->pcb_onfault = 0;
-                               return (onfault_table[i]);
-                       }
-                       goto err;
-               }
-               /*
-                * It is an error for the kernel to access user space except
-                * through the copyin/copyout routines.
-                */
-               if ((i = ((struct pcb *)UADDR)->pcb_onfault) == 0)
-                       goto err;
-               /* check for fuswintr() or suswintr() getting a page fault */
-               if (i == 4)
-                       return (onfault_table[i]);
-               goto dofault;
-
-       case T_TLB_LD_MISS+T_USER:
-               ftype = VM_PROT_READ;
-               goto dofault;
-
-       case T_TLB_ST_MISS+T_USER:
-               ftype = VM_PROT_WRITE;
-       dofault:
-           {
-               register vm_offset_t va;
-               register struct vmspace *vm;
-               register vm_map_t map;
-               int rv;
-
-               vm = p->p_vmspace;
-               map = &vm->vm_map;
-               va = trunc_page((vm_offset_t)vadr);
-               rv = vm_fault(map, va, ftype, FALSE);
-#ifdef VMFAULT_TRACE
-               printf("vm_fault(%x (pmap %x), %x (%x), %x, %d) -> %x at pc %x\n",
-                      map, &vm->vm_pmap, va, vadr, ftype, FALSE, rv, pc);
-#endif
-               /*
-                * If this was a stack access we keep track of the maximum
-                * accessed stack size.  Also, if vm_fault gets a protection
-                * failure it is due to accessing the stack region outside
-                * the current limit and we need to reflect that as an access
-                * error.
-                */
-               if ((caddr_t)va >= vm->vm_maxsaddr) {
-                       if (rv == KERN_SUCCESS) {
-                               unsigned nss;
-
-                               nss = clrnd(btoc(USRSTACK-(unsigned)va));
-                               if (nss > vm->vm_ssize)
-                                       vm->vm_ssize = nss;
-                       } else if (rv == KERN_PROTECTION_FAILURE)
-                               rv = KERN_INVALID_ADDRESS;
-               }
-               if (rv == KERN_SUCCESS) {
-                       if (!USERMODE(statusReg))
-                               return (pc);
-                       goto out;
-               }
-               if (!USERMODE(statusReg)) {
-                       if (i = ((struct pcb *)UADDR)->pcb_onfault) {
-                               ((struct pcb *)UADDR)->pcb_onfault = 0;
-                               return (onfault_table[i]);
-                       }
-                       goto err;
-               }
-               ucode = vadr;
-               i = SIGSEGV;
-               break;
-           }
-
-       case T_ADDR_ERR_LD+T_USER:      /* misaligned or kseg access */
-       case T_ADDR_ERR_ST+T_USER:      /* misaligned or kseg access */
-       case T_BUS_ERR_IFETCH+T_USER:   /* BERR asserted to cpu */
-       case T_BUS_ERR_LD_ST+T_USER:    /* BERR asserted to cpu */
-               i = SIGBUS;
-               break;
-
-       case T_SYSCALL+T_USER:
-           {
-               register int *locr0 = p->p_md.md_regs;
-               register struct sysent *callp;
-               unsigned int code;
-               int numsys;
-               struct args {
-                       int i[8];
-               } args;
-               int rval[2];
-
-               cnt.v_syscall++;
-               /* compute next PC after syscall instruction */
-               if ((int)causeReg < 0)
-                       locr0[PC] = MachEmulateBranch(locr0, pc, 0, 0);
-               else
-                       locr0[PC] += 4;
-               callp = p->p_emul->e_sysent;
-               numsys = p->p_emul->e_nsysent;
-               code = locr0[V0];
-               switch (code) {
-               case SYS_syscall:
-                       /*
-                        * Code is first argument, followed by actual args.
-                        */
-                       code = locr0[A0];
-                       if (code >= numsys)
-                               callp += p->p_emul->e_nosys; /* (illegal) */
-                       else
-                               callp += code;
-                       i = callp->sy_argsize / sizeof(int);
-                       args.i[0] = locr0[A1];
-                       args.i[1] = locr0[A2];
-                       args.i[2] = locr0[A3];
-                       if (i > 3) {
-                               i = copyin((caddr_t)(locr0[SP] +
-                                               4 * sizeof(int)),
-                                       (caddr_t)&args.i[3],
-                                       (u_int)(i - 3) * sizeof(int));
-                               if (i) {
-                                       locr0[V0] = i;
-                                       locr0[A3] = 1;
-#ifdef SYSCALL_DEBUG
-                                       scdebug_call(p, code, args.i);
-#endif
-#ifdef KTRACE
-                                       if (KTRPOINT(p, KTR_SYSCALL))
-                                               ktrsyscall(p->p_tracep, code,
-                                                       callp->sy_argsize,
-                                                       args.i);
-#endif
-                                       goto done;
-                               }
-                       }
-                       break;
-
-               case SYS___syscall:
-                       /*
-                        * Like syscall, but code is a quad, so as to maintain
-                        * quad alignment for the rest of the arguments.
-                        */
-                       code = locr0[A0 + _QUAD_LOWWORD];
-                       if (code >= numsys)
-                               callp += p->p_emul->e_nosys; /* (illegal) */
-                       else
-                               callp += code; 
-                       i = callp->sy_argsize / sizeof(int);
-                       args.i[0] = locr0[A2];
-                       args.i[1] = locr0[A3];
-                       if (i > 2) {
-                               i = copyin((caddr_t)(locr0[SP] +
-                                               4 * sizeof(int)),
-                                       (caddr_t)&args.i[2],
-                                       (u_int)(i - 2) * sizeof(int));
-                               if (i) {
-                                       locr0[V0] = i;
-                                       locr0[A3] = 1;
-#ifdef SYSCALL_DEBUG
-                                       scdebug_call(p, code, args.i);
-#endif
-#ifdef KTRACE
-                                       if (KTRPOINT(p, KTR_SYSCALL))
-                                               ktrsyscall(p->p_tracep, code,
-                                                       callp->sy_argsize,
-                                                       args.i);
-#endif
-                                       goto done;
-                               }
-                       }
-                       break;
-
-               default:
-                       if (code >= numsys)
-                               callp += p->p_emul->e_nosys; /* (illegal) */
-                       else
-                               callp += code;
-                       i = callp->sy_narg;
-                       args.i[0] = locr0[A0];
-                       args.i[1] = locr0[A1];
-                       args.i[2] = locr0[A2];
-                       args.i[3] = locr0[A3];
-                       if (i > 4) {
-                               i = copyin((caddr_t)(locr0[SP] +
-                                               4 * sizeof(int)),
-                                       (caddr_t)&args.i[4],
-                                       (u_int)(i - 4) * sizeof(int));
-                               if (i) {
-                                       locr0[V0] = i;
-                                       locr0[A3] = 1;
-#ifdef SYSCALL_DEBUG
-                                       scdebug_call(p, code, args.i);
-#endif
-#ifdef KTRACE
-                                       if (KTRPOINT(p, KTR_SYSCALL))
-                                               ktrsyscall(p->p_tracep, code,
-                                                       callp->sy_argsize,
-                                                       args.i);
-#endif
-                                       goto done;
-                               }
-                       }
-               }
-#ifdef SYSCALL_DEBUG
-               scdebug_call(p, code, args.i);
-#endif
-#ifdef KTRACE
-               if (KTRPOINT(p, KTR_SYSCALL))
-                       ktrsyscall(p->p_tracep, code, callp->sy_argsize, args.i);
-#endif
-               rval[0] = 0;
-               rval[1] = locr0[V1];
-#ifdef DEBUG
-               if (trp == trapdebug)
-                       trapdebug[TRAPSIZE - 1].code = code;
-               else
-                       trp[-1].code = code;
-#endif
-               i = (*callp->sy_call)(p, &args, rval);
-               /*
-                * Reinitialize proc pointer `p' as it may be different
-                * if this is a child returning from fork syscall.
-                */
-               p = curproc;
-               locr0 = p->p_md.md_regs;
-#ifdef DEBUG
-               { int s;
-               s = splhigh();
-               trp->status = statusReg;
-               trp->cause = causeReg;
-               trp->vadr = locr0[SP];
-               trp->pc = locr0[PC];
-               trp->ra = locr0[RA];
-               trp->code = -code;
-               if (++trp == &trapdebug[TRAPSIZE])
-                       trp = trapdebug;
-               splx(s);
-               }
-#endif
-               switch (i) {
-               case 0:
-                       locr0[V0] = rval[0];
-                       locr0[V1] = rval[1];
-                       locr0[A3] = 0;
-                       break;
-
-               case ERESTART:
-                       locr0[PC] = pc;
-                       break;
-
-               case EJUSTRETURN:
-                       break;  /* nothing to do */
-
-               default:
-                       locr0[V0] = i;
-                       locr0[A3] = 1;
-               }
-               if(code == SYS_ptrace)
-                       MachFlushCache();
-       done:
-#ifdef SYSCALL_DEBUG
-               scdebug_ret(p, code, i, rval);
-#endif
-#ifdef KTRACE
-               if (KTRPOINT(p, KTR_SYSRET))
-                       ktrsysret(p->p_tracep, code, i, rval[0]);
-#endif
-               goto out;
-           }
-
-       case T_BREAK+T_USER:
-           {
-               register unsigned va, instr;
-               struct uio uio;
-               struct iovec iov;
-
-               /* compute address of break instruction */
-               va = pc;
-               if ((int)causeReg < 0)
-                       va += 4;
-
-               /* read break instruction */
-               instr = fuiword((caddr_t)va);
-#if 0
-               printf("trap: %s (%d) breakpoint %x at %x: (adr %x ins %x)\n",
-                       p->p_comm, p->p_pid, instr, pc,
-                       p->p_md.md_ss_addr, p->p_md.md_ss_instr); /* XXX */
-#endif
-               if (p->p_md.md_ss_addr != va || instr != BREAK_SSTEP) {
-                       i = SIGTRAP;
-                       break;
-               }
-
-               /*
-                * Restore original instruction and clear BP
-                */
-               iov.iov_base = (caddr_t)&p->p_md.md_ss_instr;
-               iov.iov_len = sizeof(int); 
-               uio.uio_iov = &iov;
-               uio.uio_iovcnt = 1; 
-               uio.uio_offset = (off_t)va;
-               uio.uio_resid = sizeof(int);
-               uio.uio_segflg = UIO_SYSSPACE;
-               uio.uio_rw = UIO_WRITE;
-               uio.uio_procp = curproc;
-               i = procfs_domem(p, p, NULL, &uio);
-               MachFlushCache();
-
-               if (i < 0)
-                       printf("Warning: can't restore instruction at %x: %x\n",
-                               p->p_md.md_ss_addr, p->p_md.md_ss_instr);
-
-               p->p_md.md_ss_addr = 0;
-               i = SIGTRAP;
-               break;
-           }
-
-       case T_RES_INST+T_USER:
-               i = SIGILL;
-               break;
-
-       case T_COP_UNUSABLE+T_USER:
-               if ((causeReg & CR_COP_ERR) != 0x10000000) {
-                       i = SIGILL;     /* only FPU instructions allowed */
-                       break;
-               }
-               MachSwitchFPState(machFPCurProcPtr, p->p_md.md_regs);
-               machFPCurProcPtr = p;
-               p->p_md.md_regs[PS] |= SR_COP_1_BIT;
-               p->p_md.md_flags |= MDP_FPUSED;
-               goto out;
-
-       case T_FPE:
-#ifdef DEBUG
-               trapDump("fpintr");
-#else
-               printf("FPU Trap: PC %x CR %x SR %x\n",
-                       pc, causeReg, statusReg);
-               goto err;
-#endif
-
-       case T_FPE+T_USER:
-               MachFPTrap(statusReg, causeReg, pc);
-               goto out;
-
-       case T_OVFLOW+T_USER:
-               i = SIGFPE;
-               break;
-
-       case T_ADDR_ERR_LD:     /* misaligned access */
-       case T_ADDR_ERR_ST:     /* misaligned access */
-       case T_BUS_ERR_LD_ST:   /* BERR asserted to cpu */
-               if (i = ((struct pcb *)UADDR)->pcb_onfault) {
-                       ((struct pcb *)UADDR)->pcb_onfault = 0;
-                       return (onfault_table[i]);
-               }
-               /* FALLTHROUGH */
-
-       default:
-       err:
-#ifdef DEBUG
-           {
-               extern struct pcb mdbpcb;
-
-               if (USERMODE(statusReg))
-                       mdbpcb = p->p_addr->u_pcb;
-               else {
-                       mdbpcb.pcb_regs[ZERO] = 0;
-                       mdbpcb.pcb_regs[AST] = ((int *)&args)[2];
-                       mdbpcb.pcb_regs[V0] = ((int *)&args)[3];
-                       mdbpcb.pcb_regs[V1] = ((int *)&args)[4];
-                       mdbpcb.pcb_regs[A0] = ((int *)&args)[5];
-                       mdbpcb.pcb_regs[A1] = ((int *)&args)[6];
-                       mdbpcb.pcb_regs[A2] = ((int *)&args)[7];
-                       mdbpcb.pcb_regs[A3] = ((int *)&args)[8];
-                       mdbpcb.pcb_regs[T0] = ((int *)&args)[9];
-                       mdbpcb.pcb_regs[T1] = ((int *)&args)[10];
-                       mdbpcb.pcb_regs[T2] = ((int *)&args)[11];
-                       mdbpcb.pcb_regs[T3] = ((int *)&args)[12];
-                       mdbpcb.pcb_regs[T4] = ((int *)&args)[13];
-                       mdbpcb.pcb_regs[T5] = ((int *)&args)[14];
-                       mdbpcb.pcb_regs[T6] = ((int *)&args)[15];
-                       mdbpcb.pcb_regs[T7] = ((int *)&args)[16];
-                       mdbpcb.pcb_regs[T8] = ((int *)&args)[17];
-                       mdbpcb.pcb_regs[T9] = ((int *)&args)[18];
-                       mdbpcb.pcb_regs[RA] = ((int *)&args)[19];
-                       mdbpcb.pcb_regs[MULLO] = ((int *)&args)[21];
-                       mdbpcb.pcb_regs[MULHI] = ((int *)&args)[22];
-                       mdbpcb.pcb_regs[PC] = pc;
-                       mdbpcb.pcb_regs[SR] = statusReg;
-                       bzero((caddr_t)&mdbpcb.pcb_regs[F0], 33 * sizeof(int));
-               }
-               if (mdb(causeReg, vadr, p, !USERMODE(statusReg)))
-                       return (mdbpcb.pcb_regs[PC]);
-           }
-#else
-#ifdef DEBUG
-               stacktrace();
-               trapDump("trap");
-#endif
-#endif
-               panic("trap");
-       }
-       p->p_md.md_regs[PC] = pc;
-       p->p_md.md_regs[CAUSE] = causeReg;
-       p->p_md.md_regs[BADVADDR] = vadr;
-       trapsignal(p, i, ucode);
-out:
-       /*
-        * Note: we should only get here if returning to user mode.
-        */
-       /* take pending signals */
-       while ((i = CURSIG(p)) != 0)
-               postsig(i);
-       p->p_priority = p->p_usrpri;
-       astpending = 0;
-       if (want_resched) {
-               int s;
-
-               /*
-                * Since we are curproc, clock will normally just change
-                * our priority without moving us from one queue to another
-                * (since the running process is not on a queue.)
-                * If that happened after we put ourselves on the run queue
-                * but before we switched, we might not be on the queue
-                * indicated by our priority.
-                */
-               s = splstatclock();
-               setrunqueue(p);
-               p->p_stats->p_ru.ru_nivcsw++;
-               mi_switch();
-               splx(s);
-               while ((i = CURSIG(p)) != 0)
-                       postsig(i);
-       }
-
-       /*
-        * If profiling, charge system time to the trapped pc.
-        */
-       if (p->p_flag & P_PROFIL) {
-               extern int psratio;
-
-               addupc_task(p, pc, (int)(p->p_sticks - sticks) * psratio);
-       }
-
-       curpriority = p->p_priority;
-       return (pc);
-}
-
-/*
- * Handle an interrupt.
- * Called from MachKernIntr() or MachUserIntr()
- * Note: curproc might be NULL.
- */
-interrupt(statusReg, causeReg, pc, what, args)
-       unsigned statusReg;     /* status register at time of the exception */
-       unsigned causeReg;      /* cause register at time of exception */
-       unsigned pc;            /* program counter where to continue */
-{
-       register unsigned mask;
-       register int i;
-       struct clockframe cf;
-
-#ifdef DEBUG
-       trp->status = statusReg;
-       trp->cause = causeReg;
-       trp->vadr = 0;
-       trp->pc = pc;
-       trp->ra = 0;
-       trp->sp = (int)&args;
-       trp->code = 0;
-       if (++trp == &trapdebug[TRAPSIZE])
-               trp = trapdebug;
-#endif
-
-       cnt.v_intr++;
-       mask = causeReg & statusReg;    /* pending interrupts & enable mask */
-
-       /*
-        *  Check off all enabled interrupts. Called interrupt routine
-        *  returns mask of interrupts to reenable.
-        */
-       for(i = 0; i < 5; i++) {
-               if(cpu_int_tab[i].int_mask & mask) {
-                       causeReg &= (*cpu_int_tab[i].int_hand)(mask, pc, statusReg, causeReg);
-               }
-       }
-       /*
-        *  Reenable all non served hardware levels.
-        */
-       splx((statusReg & ~causeReg & HARD_INT_MASK) | SR_INT_ENAB);
-
-
-       if (mask & SOFT_INT_MASK_0) {
-               clearsoftclock();
-               cnt.v_soft++;
-               softclock();
-       }
-       /*
-        *  Process network interrupt if we trapped or will very soon
-        */
-       if ((mask & SOFT_INT_MASK_1) ||
-           netisr && (statusReg & SOFT_INT_MASK_1)) {
-               clearsoftnet();
-               cnt.v_soft++;
-               intrcnt[1]++;
-#ifdef INET
-               if (netisr & (1 << NETISR_ARP)) {
-                       netisr &= ~(1 << NETISR_ARP);
-                       arpintr();
-               }
-               if (netisr & (1 << NETISR_IP)) {
-                       netisr &= ~(1 << NETISR_IP);
-                       ipintr();
-               }
-#endif
-#ifdef NS
-               if (netisr & (1 << NETISR_NS)) {
-                       netisr &= ~(1 << NETISR_NS);
-                       nsintr();
-               }
-#endif
-#ifdef ISO
-               if (netisr & (1 << NETISR_ISO)) {
-                       netisr &= ~(1 << NETISR_ISO);
-                       clnlintr();
-               }
-#endif
-#include "ppp.h"
-#if NPPP > 0
-               if(netisr & (1 << NETISR_PPP)) {
-                       netisr &= ~(1 << NETISR_PPP);
-                       pppintr();
-               }
-#endif
-       }
-       if (mask & SOFT_INT_MASK_0) {
-               clearsoftclock();
-               intrcnt[0]++;
-               cnt.v_soft++;
-               softclock();
-       }
-}
-
-
-set_intr(mask, int_hand, prio)
-       int     mask;
-       int     (*int_hand)();
-       int     prio;
-{
-       if(prio > 4)
-               panic("set_intr: to high priority");
-
-       if(cpu_int_tab[prio].int_mask != 0)
-               panic("set_intr: int already set");
-
-       cpu_int_tab[prio].int_hand = int_hand;
-       cpu_int_tab[prio].int_mask = mask;
-       cpu_int_mask |= mask >> 10;
-
-       /*
-        *  Update external interrupt mask but dont enable clock.
-        */
-       out32(PICA_SYS_EXT_IMASK, cpu_int_mask & (~INT_MASK_4 >> 10));
-}
-
-/*
- * This is called from MachUserIntr() if astpending is set.
- * This is very similar to the tail of trap().
- */
-softintr(statusReg, pc)
-       unsigned statusReg;     /* status register at time of the exception */
-       unsigned pc;            /* program counter where to continue */
-{
-       register struct proc *p = curproc;
-       int sig;
-
-       cnt.v_soft++;
-       /* take pending signals */
-       while ((sig = CURSIG(p)) != 0)
-               postsig(sig);
-       p->p_priority = p->p_usrpri;
-       astpending = 0;
-       if (p->p_flag & P_OWEUPC) {
-               p->p_flag &= ~P_OWEUPC;
-               ADDUPROF(p);
-       }
-       if (want_resched) {
-               int s;
-
-               /*
-                * Since we are curproc, clock will normally just change
-                * our priority without moving us from one queue to another
-                * (since the running process is not on a queue.)
-                * If that happened after we put ourselves on the run queue
-                * but before we switched, we might not be on the queue
-                * indicated by our priority.
-                */
-               s = splstatclock();
-               setrunqueue(p);
-               p->p_stats->p_ru.ru_nivcsw++;
-               mi_switch();
-               splx(s);
-               while ((sig = CURSIG(p)) != 0)
-                       postsig(sig);
-       }
-       curpriority = p->p_priority;
-}
-
-#ifdef DEBUG
-trapDump(msg)
-       char *msg;
-{
-       register int i;
-       int s;
-
-       s = splhigh();
-       printf("trapDump(%s)\n", msg);
-       for (i = 0; i < TRAPSIZE; i++) {
-               if (trp == trapdebug)
-                       trp = &trapdebug[TRAPSIZE - 1];
-               else
-                       trp--;
-               if (trp->cause == 0)
-                       break;
-               printf("%s: ADR %x PC %x CR %x SR %x\n",
-                       trap_type[(trp->cause & CR_EXC_CODE) >>
-                               CR_EXC_CODE_SHIFT],
-                       trp->vadr, trp->pc, trp->cause, trp->status);
-               printf("   RA %x SP %x code %d\n", trp->ra, trp->sp, trp->code);
-       }
-       splx(s);
-}
-#endif
-
-/*
- *----------------------------------------------------------------------
- *
- * MemErrorInterrupts --
- *   pica_errintr - for the ACER PICA_61
- *
- *     Handler an interrupt for the control register.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-static void
-pica_errintr()
-{
-#if 0
-       volatile u_short *sysCSRPtr =
-               (u_short *)PHYS_TO_UNCACHED(KN01_SYS_CSR);
-       u_short csr;
-
-       csr = *sysCSRPtr;
-
-       if (csr & KN01_CSR_MERR) {
-               printf("Memory error at 0x%x\n",
-                       *(unsigned *)PHYS_TO_UNCACHED(KN01_SYS_ERRADR));
-               panic("Mem error interrupt");
-       }
-       *sysCSRPtr = (csr & ~KN01_CSR_MBZ) | 0xff;
-#endif
-}
-
-
-/*
- * Return the resulting PC as if the branch was executed.
- */
-unsigned
-MachEmulateBranch(regsPtr, instPC, fpcCSR, allowNonBranch)
-       unsigned *regsPtr;
-       unsigned instPC;
-       unsigned fpcCSR;
-       int allowNonBranch;
-{
-       InstFmt inst;
-       unsigned retAddr;
-       int condition;
-
-#define GetBranchDest(InstPtr, inst) \
-       ((unsigned)InstPtr + 4 + ((short)inst.IType.imm << 2))
-
-
-       if(allowNonBranch == 0) {
-               inst = *(InstFmt *)instPC;
-       }
-       else {
-               inst = *(InstFmt *)&allowNonBranch;
-       }
-#if 0
-       printf("regsPtr=%x PC=%x Inst=%x fpcCsr=%x\n", regsPtr, instPC,
-               inst.word, fpcCSR); /* XXX */
-#endif
-       switch ((int)inst.JType.op) {
-       case OP_SPECIAL:
-               switch ((int)inst.RType.func) {
-               case OP_JR:
-               case OP_JALR:
-                       retAddr = regsPtr[inst.RType.rs];
-                       break;
-
-               default:
-                       if (!allowNonBranch)
-                               panic("MachEmulateBranch: Non-branch");
-                       retAddr = instPC + 4;
-                       break;
-               }
-               break;
-
-       case OP_BCOND:
-               switch ((int)inst.IType.rt) {
-               case OP_BLTZ:
-               case OP_BLTZL:
-               case OP_BLTZAL:
-               case OP_BLTZALL:
-                       if ((int)(regsPtr[inst.RType.rs]) < 0)
-                               retAddr = GetBranchDest(instPC, inst);
-                       else
-                               retAddr = instPC + 8;
-                       break;
-
-               case OP_BGEZ:
-               case OP_BGEZL:
-               case OP_BGEZAL:
-               case OP_BGEZALL:
-                       if ((int)(regsPtr[inst.RType.rs]) >= 0)
-                               retAddr = GetBranchDest(instPC, inst);
-                       else
-                               retAddr = instPC + 8;
-                       break;
-
-               default:
-                       panic("MachEmulateBranch: Bad branch cond");
-               }
-               break;
-
-       case OP_J:
-       case OP_JAL:
-               retAddr = (inst.JType.target << 2) | 
-                       ((unsigned)instPC & 0xF0000000);
-               break;
-
-       case OP_BEQ:
-       case OP_BEQL:
-               if (regsPtr[inst.RType.rs] == regsPtr[inst.RType.rt])
-                       retAddr = GetBranchDest(instPC, inst);
-               else
-                       retAddr = instPC + 8;
-               break;
-
-       case OP_BNE:
-       case OP_BNEL:
-               if (regsPtr[inst.RType.rs] != regsPtr[inst.RType.rt])
-                       retAddr = GetBranchDest(instPC, inst);
-               else
-                       retAddr = instPC + 8;
-               break;
-
-       case OP_BLEZ:
-       case OP_BLEZL:
-               if ((int)(regsPtr[inst.RType.rs]) <= 0)
-                       retAddr = GetBranchDest(instPC, inst);
-               else
-                       retAddr = instPC + 8;
-               break;
-
-       case OP_BGTZ:
-       case OP_BGTZL:
-               if ((int)(regsPtr[inst.RType.rs]) > 0)
-                       retAddr = GetBranchDest(instPC, inst);
-               else
-                       retAddr = instPC + 8;
-               break;
-
-       case OP_COP1:
-               switch (inst.RType.rs) {
-               case OP_BCx:
-               case OP_BCy:
-                       if ((inst.RType.rt & COPz_BC_TF_MASK) == COPz_BC_TRUE)
-                               condition = fpcCSR & FPC_COND_BIT;
-                       else
-                               condition = !(fpcCSR & FPC_COND_BIT);
-                       if (condition)
-                               retAddr = GetBranchDest(instPC, inst);
-                       else
-                               retAddr = instPC + 8;
-                       break;
-
-               default:
-                       if (!allowNonBranch)
-                               panic("MachEmulateBranch: Bad coproc branch instruction");
-                       retAddr = instPC + 4;
-               }
-               break;
-
-       default:
-               if (!allowNonBranch)
-                       panic("MachEmulateBranch: Non-branch instruction");
-               retAddr = instPC + 4;
-       }
-#if 0
-       printf("Target addr=%x\n", retAddr); /* XXX */
-#endif
-       return (retAddr);
-}
-
-/*
- * This routine is called by procxmt() to single step one instruction.
- * We do this by storing a break instruction after the current instruction,
- * resuming execution, and then restoring the old instruction.
- */
-cpu_singlestep(p)
-       register struct proc *p;
-{
-       register unsigned va;
-       register int *locr0 = p->p_md.md_regs;
-       int i;
-       int bpinstr = BREAK_SSTEP;
-       int curinstr;
-       struct uio uio;
-       struct iovec iov;
-
-       /*
-        * Fetch what's at the current location.
-        */
-       iov.iov_base = (caddr_t)&curinstr;
-       iov.iov_len = sizeof(int); 
-       uio.uio_iov = &iov;
-       uio.uio_iovcnt = 1; 
-       uio.uio_offset = (off_t)locr0[PC];
-       uio.uio_resid = sizeof(int);
-       uio.uio_segflg = UIO_SYSSPACE;
-       uio.uio_rw = UIO_READ;
-       uio.uio_procp = curproc;
-       procfs_domem(curproc, p, NULL, &uio);
-
-       /* compute next address after current location */
-       if(curinstr != 0) {
-               va = MachEmulateBranch(locr0, locr0[PC], locr0[FSR], curinstr);
-       }
-       else {
-               va = locr0[PC] + 4;
-       }
-       if (p->p_md.md_ss_addr) {
-               printf("SS %s (%d): breakpoint already set at %x (va %x)\n",
-                       p->p_comm, p->p_pid, p->p_md.md_ss_addr, va); /* XXX */
-               return (EFAULT);
-       }
-       p->p_md.md_ss_addr = va;
-       /*
-        * Fetch what's at the current location.
-        */
-       iov.iov_base = (caddr_t)&p->p_md.md_ss_instr;
-       iov.iov_len = sizeof(int); 
-       uio.uio_iov = &iov;
-       uio.uio_iovcnt = 1; 
-       uio.uio_offset = (off_t)va;
-       uio.uio_resid = sizeof(int);
-       uio.uio_segflg = UIO_SYSSPACE;
-       uio.uio_rw = UIO_READ;
-       uio.uio_procp = curproc;
-       procfs_domem(curproc, p, NULL, &uio);
-
-       /*
-        * Store breakpoint instruction at the "next" location now.
-        */
-       iov.iov_base = (caddr_t)&bpinstr;
-       iov.iov_len = sizeof(int); 
-       uio.uio_iov = &iov;
-       uio.uio_iovcnt = 1; 
-       uio.uio_offset = (off_t)va;
-       uio.uio_resid = sizeof(int);
-       uio.uio_segflg = UIO_SYSSPACE;
-       uio.uio_rw = UIO_WRITE;
-       uio.uio_procp = curproc;
-       i = procfs_domem(curproc, p, NULL, &uio);
-       MachFlushCache();
-
-       if (i < 0)
-               return (EFAULT);
-#if 0
-       printf("SS %s (%d): breakpoint set at %x: %x (pc %x) br %x\n",
-               p->p_comm, p->p_pid, p->p_md.md_ss_addr,
-               p->p_md.md_ss_instr, locr0[PC], curinstr); /* XXX */
-#endif
-       return (0);
-}
-
-#ifdef DEBUG
-kdbpeek(addr)
-{
-       if (addr & 3) {
-               printf("kdbpeek: unaligned address %x\n", addr);
-               return (-1);
-       }
-       return (*(int *)addr);
-}
-#endif
-
-#ifdef DEBUG
-#define MIPS_JR_RA     0x03e00008      /* instruction code for jr ra */
-
-/* forward */
-char *fn_name(unsigned addr);
-void stacktrace_subr __P((int, int, int, int, void (*)(const char*, ...)));
-
-/*
- * Print a stack backtrace.
- */
-void
-stacktrace(a0, a1, a2, a3)
-       int a0, a1, a2, a3;
-{
-       stacktrace_subr(a0, a1, a2, a3, printf);
-}
-
-void
-logstacktrace(a0, a1, a2, a3)
-       int a0, a1, a2, a3;
-{
-       stacktrace_subr(a0, a1, a2, a3, addlog);
-}
-
-void
-stacktrace_subr(a0, a1, a2, a3, printfn)
-       int a0, a1, a2, a3;
-       void (*printfn) __P((const char*, ...));
-{
-       unsigned pc, sp, fp, ra, va, subr;
-       unsigned instr, mask;
-       InstFmt i;
-       int more, stksize;
-       int regs[3];
-       extern setsoftclock();
-       extern char start[], edata[];
-       unsigned int frames =  0;
-
-       cpu_getregs(regs);
-
-       /* get initial values from the exception frame */
-       sp = regs[0];
-       pc = regs[1];
-       ra = 0;
-       fp = regs[2];
-
-/* Jump here when done with a frame, to start a new one */
-loop:
-       ra = 0;
-
-/* Jump here after a nonstandard (interrupt handler) frame */
-specialframe:
-       stksize = 0;
-       subr = 0;
-       if      (frames++ > 100) {
-               (*printfn)("\nstackframe count exceeded\n");
-               /* return breaks stackframe-size heuristics with gcc -O2 */
-               goto finish;    /*XXX*/
-       }
-
-       /* check for bad SP: could foul up next frame */
-       if (sp & 3 || sp < 0x80000000) {
-               (*printfn)("SP 0x%x: not in kernel\n", sp);
-               ra = 0;
-               subr = 0;
-               goto done;
-       }
-
-       /* Backtraces should contine through interrupts from kernel mode */
-       if (pc >= (unsigned)MachKernIntr && pc < (unsigned)MachUserIntr) {
-               /* NOTE: the offsets depend on the code in locore.s */
-               (*printfn)("MachKernIntr+%x: (%x, %x ,%x) -------\n",
-                      pc-(unsigned)MachKernIntr, a0, a1, a2);
-               a0 = kdbpeek(sp + 36);
-               a1 = kdbpeek(sp + 40);
-               a2 = kdbpeek(sp + 44);
-               a3 = kdbpeek(sp + 48);
-
-               pc = kdbpeek(sp + 20);  /* exc_pc - pc at time of exception */
-               ra = kdbpeek(sp + 92);  /* ra at time of exception */
-               sp = sp + 108;
-               goto specialframe;
-       }
-
-
-# define Between(x, y, z) \
-               ( ((x) <= (y)) && ((y) < (z)) )
-# define pcBetween(a,b) \
-               Between((unsigned)a, pc, (unsigned)b)
-
-       /*
-        * Check for current PC in  exception handler code that don't
-        * have a preceding "j ra" at the tail of the preceding function. 
-        * Depends on relative ordering of functions in locore.
-        */
-       if (pcBetween(MachKernGenException, MachUserGenException))
-               subr = (unsigned) MachKernGenException;
-       else if (pcBetween(MachUserGenException,MachKernIntr))
-               subr = (unsigned) MachUserGenException;
-       else if (pcBetween(MachKernIntr, MachUserIntr))
-               subr = (unsigned) MachKernIntr;
-       else if (pcBetween(MachUserIntr, MachTLBInvalidException))
-               subr = (unsigned) MachUserIntr;
-       else if (pcBetween(splx, wbflush))
-               subr = (unsigned) splx;
-       else if (pcBetween(cpu_switch, fuword))
-               subr = (unsigned) cpu_switch;
-       else if (pcBetween(idle, cpu_switch))   {
-               subr = (unsigned) idle;
-               ra = 0;
-               goto done;
-       }
-       else if (pc >= (unsigned)MachTLBMiss && pc < (unsigned)setsoftclock) {
-               (*printfn)("<<locore>>");
-               goto done;
-       }
-
-       /* check for bad PC */
-       if (pc & 3 || pc < 0x80000000 || pc >= (unsigned)edata) {
-               (*printfn)("PC 0x%x: not in kernel\n", pc);
-               ra = 0;
-               goto done;
-       }
-
-       /*
-        * Find the beginning of the current subroutine by scanning backwards
-        * from the current PC for the end of the previous subroutine.
-        */
-       if (!subr) {
-               va = pc - sizeof(int);
-               while ((instr = kdbpeek(va)) != MIPS_JR_RA)
-               va -= sizeof(int);
-               va += 2 * sizeof(int);  /* skip back over branch & delay slot */
-               /* skip over nulls which might separate .o files */
-               while ((instr = kdbpeek(va)) == 0)
-                       va += sizeof(int);
-               subr = va;
-       }
-
-       /*
-        * Jump here for locore entry pointsn for which the preceding
-        * function doesn't end in "j ra"
-        */
-stackscan:
-       /* scan forwards to find stack size and any saved registers */
-       stksize = 0;
-       more = 3;
-       mask = 0;
-       for (va = subr; more; va += sizeof(int),
-                             more = (more == 3) ? 3 : more - 1) {
-               /* stop if hit our current position */
-               if (va >= pc)
-                       break;
-               instr = kdbpeek(va);
-               i.word = instr;
-               switch (i.JType.op) {
-               case OP_SPECIAL:
-                       switch (i.RType.func) {
-                       case OP_JR:
-                       case OP_JALR:
-                               more = 2; /* stop after next instruction */
-                               break;
-
-                       case OP_SYSCALL:
-                       case OP_BREAK:
-                               more = 1; /* stop now */
-                       };
-                       break;
-
-               case OP_BCOND:
-               case OP_J:
-               case OP_JAL:
-               case OP_BEQ:
-               case OP_BNE:
-               case OP_BLEZ:
-               case OP_BGTZ:
-                       more = 2; /* stop after next instruction */
-                       break;
-
-               case OP_COP0:
-               case OP_COP1:
-               case OP_COP2:
-               case OP_COP3:
-                       switch (i.RType.rs) {
-                       case OP_BCx:
-                       case OP_BCy:
-                               more = 2; /* stop after next instruction */
-                       };
-                       break;
-
-               case OP_SW:
-                       /* look for saved registers on the stack */
-                       if (i.IType.rs != 29)
-                               break;
-                       /* only restore the first one */
-                       if (mask & (1 << i.IType.rt))
-                               break;
-                       mask |= (1 << i.IType.rt);
-                       switch (i.IType.rt) {
-                       case 4: /* a0 */
-                               a0 = kdbpeek(sp + (short)i.IType.imm);
-                               break;
-
-                       case 5: /* a1 */
-                               a1 = kdbpeek(sp + (short)i.IType.imm);
-                               break;
-
-                       case 6: /* a2 */
-                               a2 = kdbpeek(sp + (short)i.IType.imm);
-                               break;
-
-                       case 7: /* a3 */
-                               a3 = kdbpeek(sp + (short)i.IType.imm);
-                               break;
-
-                       case 30: /* fp */
-                               fp = kdbpeek(sp + (short)i.IType.imm);
-                               break;
-
-                       case 31: /* ra */
-                               ra = kdbpeek(sp + (short)i.IType.imm);
-                       }
-                       break;
-
-               case OP_ADDI:
-               case OP_ADDIU:
-                       /* look for stack pointer adjustment */
-                       if (i.IType.rs != 29 || i.IType.rt != 29)
-                               break;
-                       stksize = - ((short)i.IType.imm);
-               }
-       }
-
-done:
-       (*printfn)("%s+%x (%x,%x,%x,%x) ra %x sz %d\n",
-               fn_name(subr), pc - subr, a0, a1, a2, a3, ra, stksize);
-
-       if (ra) {
-               if (pc == ra && stksize == 0)
-                       (*printfn)("stacktrace: loop!\n");
-               else {
-                       pc = ra;
-                       sp += stksize;
-                       ra = 0;
-                       goto loop;
-               }
-       } else {
-finish:
-               if (curproc)
-                       (*printfn)("User-level: pid %d\n", curproc->p_pid);
-               else
-                       (*printfn)("User-level: curproc NULL\n");
-       }
-}
-
-/*
- * Functions ``special'' enough to print by name
- */
-#ifdef __STDC__
-#define Name(_fn)  { (void*)_fn, # _fn }
-#else
-#define Name(_fn) { _fn, "_fn"}
-#endif
-static struct { void *addr; char *name;} names[] = {
-       Name(interrupt),
-       Name(trap),
-       Name(MachKernGenException),
-       Name(MachUserGenException),
-       Name(MachKernIntr),
-       Name(MachUserIntr),
-       Name(splx),
-       Name(idle),
-       Name(cpu_switch),
-       {0, 0}
-};
-
-/*
- * Map a function address to a string name, if known; or a hex string.
- */
-char *
-fn_name(unsigned addr)
-{
-       static char buf[17];
-       int i = 0;
-
-       for (i = 0; names[i].name; i++)
-               if (names[i].addr == (void*)addr)
-                       return (names[i].name);
-       sprintf(buf, "%x", addr);
-       return (buf);
-}
-
-#endif /* DEBUG */
diff --git a/sys/arch/pica/pica/vm_machdep.c b/sys/arch/pica/pica/vm_machdep.c
deleted file mode 100644 (file)
index d6063d1..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright (c) 1988 University of Utah.
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * 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.
- *
- * from: Utah Hdr: vm_machdep.c 1.21 91/04/06
- *
- *     from: @(#)vm_machdep.c  8.3 (Berkeley) 1/4/94
- *      $Id: vm_machdep.c,v 1.3 1996/05/15 07:09:12 pefo Exp $
- */
-
-
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/buf.h>
-#include <sys/vnode.h>
-#include <sys/user.h>
-
-#include <vm/vm.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_page.h>
-#if 0
-#include <vm/vm_object.h>
-#endif
-
-#include <machine/pte.h>
-#include <machine/cpu.h>
-
-vm_offset_t kmem_alloc_wait_align();
-
-/*
- * Finish a fork operation, with process p2 nearly set up.
- * Copy and update the kernel stack and pcb, making the child
- * ready to run, and marking it so that it can return differently
- * than the parent.  Returns 1 in the child process, 0 in the parent.
- * We currently double-map the user area so that the stack is at the same
- * address in each process; in the future we will probably relocate
- * the frame pointers on the stack after copying.
- */
-cpu_fork(p1, p2)
-       register struct proc *p1, *p2;
-{
-       register struct user *up = p2->p_addr;
-       register pt_entry_t *pte;
-       register int i;
-       extern struct proc *machFPCurProcPtr;
-
-       p2->p_md.md_regs = up->u_pcb.pcb_regs;
-       p2->p_md.md_flags = p1->p_md.md_flags & MDP_FPUSED;
-
-       /*
-        * Cache the PTEs for the user area in the machine dependent
-        * part of the proc struct so cpu_switch() can quickly map in
-        * the user struct and kernel stack. Note: if the virtual address
-        * translation changes (e.g. swapout) we have to update this.
-        */
-       pte = kvtopte(up);
-       for (i = 0; i < UPAGES; i++) {
-               p2->p_md.md_upte[i] = pte->pt_entry & ~(PG_G | PG_RO | PG_WIRED);
-               pte++;
-       }
-
-       /*
-        * Copy floating point state from the FP chip if this process
-        * has state stored there.
-        */
-       if (p1 == machFPCurProcPtr)
-               MachSaveCurFPState(p1);
-
-       /*
-        * Copy pcb and stack from proc p1 to p2. 
-        * We do this as cheaply as possible, copying only the active
-        * part of the stack.  The stack and pcb need to agree;
-        */
-       p2->p_addr->u_pcb = p1->p_addr->u_pcb;
-       /* cache segtab for ULTBMiss() */
-       p2->p_addr->u_pcb.pcb_segtab = (void *)p2->p_vmspace->vm_pmap.pm_segtab;
-
-       /*
-        * Arrange for a non-local goto when the new process
-        * is started, to resume here, returning nonzero from setjmp.
-        */
-#ifdef DIAGNOSTIC
-       if (p1 != curproc)
-               panic("cpu_fork: curproc");
-#endif
-       if (copykstack(up)) {
-               /*
-                * Return 1 in child.
-                */
-               return (1);
-       }
-       return (0);
-}
-
-/*
- * Finish a swapin operation.
- * We neded to update the cached PTEs for the user area in the
- * machine dependent part of the proc structure.
- */
-void
-cpu_swapin(p)
-       register struct proc *p;
-{
-       register struct user *up = p->p_addr;
-       register pt_entry_t *pte;
-       register int i;
-
-       /*
-        * Cache the PTEs for the user area in the machine dependent
-        * part of the proc struct so cpu_switch() can quickly map in
-        * the user struct and kernel stack.
-        */
-       pte = kvtopte(up);
-       for (i = 0; i < UPAGES; i++) {
-               p->p_md.md_upte[i] = pte->pt_entry & ~(PG_G | PG_RO | PG_WIRED);
-               pte++;
-       }
-}
-
-/*
- * cpu_exit is called as the last action during exit.
- * We release the address space and machine-dependent resources,
- * including the memory for the user structure and kernel stack.
- * Once finished, we call switch_exit, which switches to a temporary
- * pcb and stack and never returns.  We block memory allocation
- * until switch_exit has made things safe again.
- */
-void cpu_exit(p)
-       struct proc *p;
-{
-       extern struct proc *machFPCurProcPtr;
-
-       if (machFPCurProcPtr == p)
-               machFPCurProcPtr = (struct proc *)0;
-
-       vmspace_free(p->p_vmspace);
-
-       (void) splhigh();
-       kmem_free(kernel_map, (vm_offset_t)p->p_addr, ctob(UPAGES));
-       switch_exit();
-       /* NOTREACHED */
-}
-
-/*
- * Dump the machine specific header information at the start of a core dump.
- */
-cpu_coredump(p, vp, cred, core)
-       struct proc *p;
-       struct vnode *vp;
-       struct ucred *cred;
-       struct core *core;
-{
-       extern struct proc *machFPCurProcPtr;
-
-       /*
-        * Copy floating point state from the FP chip if this process
-        * has state stored there.
-        */
-       if (p == machFPCurProcPtr)
-               MachSaveCurFPState(p);
-
-       return (vn_rdwr(UIO_WRITE, vp, (caddr_t)p->p_addr, ctob(UPAGES),
-           (off_t)0, UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, cred, (int *)NULL,
-           p));
-}
-
-/*
- * Move pages from one kernel virtual address to another.
- * Both addresses are assumed to reside in the Sysmap,
- * and size must be a multiple of CLSIZE.
- */
-void
-pagemove(from, to, size)
-       register caddr_t from, to;
-       size_t size;
-{
-       register pt_entry_t *fpte, *tpte;
-
-       if (size % CLBYTES)
-               panic("pagemove");
-       fpte = kvtopte(from);
-       tpte = kvtopte(to);
-       if(((int)from & machCacheAliasMask) != ((int)to & machCacheAliasMask)) {
-               MachHitFlushDCache(from, size);
-       }
-       while (size > 0) {
-               MachTLBFlushAddr(from);
-               MachTLBUpdate(to, *fpte);
-               *tpte++ = *fpte;
-               fpte->pt_entry = PG_NV | PG_G;
-               fpte++;
-               size -= NBPG;
-               from += NBPG;
-               to += NBPG;
-       }
-}
-
-extern vm_map_t phys_map;
-
-/*
- * Map an IO request into kernel virtual address space.  Requests fall into
- * one of five catagories:
- *
- *     B_PHYS|B_UAREA: User u-area swap.
- *                     Address is relative to start of u-area (p_addr).
- *     B_PHYS|B_PAGET: User page table swap.
- *                     Address is a kernel VA in usrpt (Usrptmap).
- *     B_PHYS|B_DIRTY: Dirty page push.
- *                     Address is a VA in proc2's address space.
- *     B_PHYS|B_PGIN:  Kernel pagein of user pages.
- *                     Address is VA in user's address space.
- *     B_PHYS:         User "raw" IO request.
- *                     Address is VA in user's address space.
- *
- * All requests are (re)mapped into kernel VA space via the phys_map
- */
-void
-vmapbuf(bp, len)
-       struct buf *bp;
-       vm_size_t len;
-{
-       register caddr_t addr;
-       register vm_size_t sz;
-       struct proc *p;
-       int off;
-       vm_offset_t kva;
-       register vm_offset_t pa;
-
-       if ((bp->b_flags & B_PHYS) == 0)
-               panic("vmapbuf");
-       addr = bp->b_saveaddr = bp->b_un.b_addr;
-       off = (int)addr & PGOFSET;
-       p = bp->b_proc;
-       sz = round_page(off + len);
-       kva = kmem_alloc_wait_align(phys_map, sz, (vm_size_t)addr & machCacheAliasMask);
-       bp->b_un.b_addr = (caddr_t) (kva + off);
-       sz = atop(sz);
-       while (sz--) {
-               pa = pmap_extract(vm_map_pmap(&p->p_vmspace->vm_map),
-                       (vm_offset_t)addr);
-               if (pa == 0)
-                       panic("vmapbuf: null page frame");
-               pmap_enter(vm_map_pmap(phys_map), kva, trunc_page(pa),
-                       VM_PROT_READ|VM_PROT_WRITE, TRUE);
-               addr += PAGE_SIZE;
-               kva += PAGE_SIZE;
-       }
-}
-
-/*
- * Free the io map PTEs associated with this IO operation.
- * We also invalidate the TLB entries and restore the original b_addr.
- */
-void
-vunmapbuf(bp, len)
-       struct buf *bp;
-       vm_size_t len;
-{
-       register caddr_t addr = bp->b_un.b_addr;
-       register vm_size_t sz;
-       vm_offset_t kva;
-
-       if ((bp->b_flags & B_PHYS) == 0)
-               panic("vunmapbuf");
-       sz = round_page(len + ((int)addr & PGOFSET));
-       kva = (vm_offset_t)((int)addr & ~PGOFSET);
-       kmem_free_wakeup(phys_map, kva, sz);
-       bp->b_un.b_addr = bp->b_saveaddr;
-       bp->b_saveaddr = NULL;
-}
-
-
-/*
- *     SAVE_HINT:
- *
- *     Saves the specified entry as the hint for
- *     future lookups.  Performs necessary interlocks.
- */
-#define        SAVE_HINT(map,value) \
-               simple_lock(&(map)->hint_lock); \
-               (map)->hint = (value); \
-               simple_unlock(&(map)->hint_lock);
-
-
-/*
- *     kmem_alloc_upage:
- *
- *     Allocate pageable memory to the kernel's address map.
- *     map must be "kernel_map" below.
- *     (Currently only used when allocating U pages).
- */
-vm_offset_t
-kmem_alloc_upage(map, size)
-       vm_map_t                map;
-       register vm_size_t      size;
-{
-       vm_offset_t             addr;
-       register int            result;
-
-
-       size = round_page(size);
-
-       addr = vm_map_min(map);
-       result = vm_map_find_U(map, NULL, (vm_offset_t) 0,
-                               &addr, size, TRUE);
-       if (result != KERN_SUCCESS) {
-               return(0);
-       }
-
-       return(addr);
-}
-
-/*
- *     vm_map_find finds an unallocated region in the target address
- *     map with the given length aligned on U viritual address.
- *     The search is defined to be first-fit from the specified address;
- *     the region found is returned in the same parameter.
- *
- */
-int
-vm_map_find_U(map, object, offset, addr, length, find_space)
-       vm_map_t        map;
-       vm_object_t     object;
-       vm_offset_t     offset;
-       vm_offset_t     *addr;          /* IN/OUT */
-       vm_size_t       length;
-       boolean_t       find_space;
-{
-       register vm_offset_t    start;
-       int                     result;
-
-       start = *addr;
-       vm_map_lock(map);
-       if (find_space) {
-               if (vm_map_findspace_align(map, start, length, addr, 0)) {
-                       vm_map_unlock(map);
-                       return (KERN_NO_SPACE);
-               }
-               start = *addr;
-       }
-       result = vm_map_insert(map, object, offset, start, start + length);
-       vm_map_unlock(map);
-       return (result);
-}
-
-/*
- * Find sufficient space for `length' bytes in the given map, starting at
- * `start'.  The map must be locked.  Returns 0 on success, 1 on no space.
- */
-int
-vm_map_findspace_align(map, start, length, addr, align)
-       register vm_map_t map;
-       register vm_offset_t start;
-       vm_size_t length;
-       vm_offset_t *addr;
-       vm_size_t align;
-{
-       register vm_map_entry_t entry, next;
-       register vm_offset_t end;
-
-       if (start < map->min_offset)
-               start = map->min_offset;
-       if (start > map->max_offset)
-               return (1);
-
-       /*
-        * Look for the first possible address; if there's already
-        * something at this address, we have to start after it.
-        */
-       if (start == map->min_offset) {
-               if ((entry = map->first_free) != &map->header)
-                       start = entry->end;
-       } else {
-               vm_map_entry_t tmp;
-               if (vm_map_lookup_entry(map, start, &tmp))
-                       start = tmp->end;
-               entry = tmp;
-       }
-
-       /*
-        * Look through the rest of the map, trying to fit a new region in
-        * the gap between existing regions, or after the very last region.
-        */
-       for (;; start = (entry = next)->end) {
-               /*
-                * Find the end of the proposed new region.  Be sure we didn't
-                * go beyond the end of the map, or wrap around the address;
-                * if so, we lose.  Otherwise, if this is the last entry, or
-                * if the proposed new region fits before the next entry, we
-                * win.
-                */
-               start = ((start + NBPG -1) & ~(NBPG - 1)); /* Paranoia */
-               if((start & machCacheAliasMask) <= align) {
-                       start += align - (start & machCacheAliasMask);
-               }
-               else {
-                       start = ((start + machCacheAliasMask) & ~machCacheAliasMask);
-                       start += align;
-               }
-                       
-               end = start + length;
-               if (end > map->max_offset || end < start)
-                       return (1);
-               next = entry->next;
-               if (next == &map->header || next->start >= end)
-                       break;
-       }
-       SAVE_HINT(map, entry);
-       *addr = start;
-       return (0);
-}
-
-/*
- *     kmem_alloc_wait_align
- *
- *     Allocates pageable memory from a sub-map of the kernel.  If the submap
- *     has no room, the caller sleeps waiting for more memory in the submap.
- *
- */
-vm_offset_t
-kmem_alloc_wait_align(map, size, align)
-       vm_map_t        map;
-       vm_size_t       size;
-       vm_size_t       align;
-{
-       vm_offset_t     addr;
-
-       size = round_page(size);
-
-       for (;;) {
-               /*
-                * To make this work for more than one map,
-                * use the map's lock to lock out sleepers/wakers.
-                */
-               vm_map_lock(map);
-               if (vm_map_findspace_align(map, 0, size, &addr, align) == 0)
-                       break;
-               /* no space now; see if we can ever get space */
-               if (vm_map_max(map) - vm_map_min(map) < size) {
-                       vm_map_unlock(map);
-                       return (0);
-               }
-               assert_wait(map, TRUE);
-               vm_map_unlock(map);
-               thread_block();
-       }
-       vm_map_insert(map, NULL, (vm_offset_t)0, addr, addr + size);
-       vm_map_unlock(map);
-       return (addr);
-}
diff --git a/sys/arch/pica/stand/Makefile b/sys/arch/pica/stand/Makefile
deleted file mode 100644 (file)
index a7dd638..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#      $NetBSD: Makefile,v 1.5 1995/01/18 06:53:36 mellon Exp $
-#      @(#)Makefile    8.3 (Berkeley) 2/16/94
-
-DESTDIR=
-STAND= ../../stand
-#VPATH=        ${STAND}
-
-# RELOC=80200000 allows for boot prog up to 1D0000 (1900544) bytes long
-RELOC= 80200000
-
-S=      ../../..
-
-DEFS= -DSTANDALONE -DDEBUG
-CFLAGS=        -O2 ${INCPATH} ${DEFS}
-AFLAGS=        -O2 ${INCPATH} ${DEFS} -DLOCORE
-
-.PATH: ${S}/arch/${MACHINE_ARCH}/${MACHINE_ARCH}
-.PATH: ${S}/stand ${S}/lib/libsa
-
-#INCPATH=-I. -I/sys
-INCPATH=-I${.CURDIR} -I${.CURDIR}/../.. -I${S} -I${S}/lib/libsa
-
-### find out what to use for libkern
-.include "$S/lib/libkern/Makefile.inc"
-LIBKERN= ${KERNLIB}
-#KERNLIB= ${.CURDIR}/../compile/libkern.a
-
-.include "$S/lib/libsa/Makefile.inc"
-LIBSA=  ${SA_LIB}
-
-# not yet: need to write libsa/Makefile.inc first
-LIBS=  ${.OBJDIR}/libdrive.a ${.CURDIR}/libsa/libsa.a  ${KERNLIB}
-#LIBS= libdrive.a libsa/libsa.a ../../libkern/obj/libkern.a 
-
-DRIVERS= rz.c
-SRCS=  ${DRIVERS}
-#STUFF=        callvec.c devopen.c getenv.c gets.c strcmp.c
-STUFF=
-
-ALL=   boot
-
-.s.o:
-       ${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
-           ${AS} -o ${.TARGET}
-
-all: ${ALL}
-
-boot: ${LIBS}
-
-#libsa/libsa.a::
-#      cd libsa; make
-
-${.OBJDIR}/libdrive.a: conf.o ${DRIVERS:.c=.o}
-       ar crv $@ $?
-       ranlib $@
-
-# depend on DEFS
-
-#before other deps on bootconf.o
-bootconf.o: conf.o
-       rm -f bootconf.c
-       ln -s ${.CURDIR}/conf.c bootconf.c
-       ${CC} -c ${CFLAGS} -DBOOT bootconf.c
-       rm -f bootconf.c
-
-
-# bootable from real disks
-
-boot:  start.o boot.o bootconf.o filesystem.o ${LIBS}
-       /usr/gnu/ld -N -Ttext ${RELOC} -e __start start.o boot.o bootconf.o filesystem.o ${LIBS} -o boot.elf
-       elf2ecoff boot.elf boot
-
-start.o: ${.CURDIR}/start.S
-
-#      ${CPP} -E ${CFLAGS:M-[ID]*} -DLOCORE ${AINC} ${.IMPSRC} | \
-#          ${AS} -o ${.TARGET}
-
-mkboot: ${.CURDIR}/mkboot.c
-       ${CC} ${CFLAGS} -o mkboot ${.CURDIR}/mkboot.c
-
-# utilities
-
-clean::
-       rm -f .depend *.o *.exe *.i errs make.out core*
-       rm -f a.out ${ALL}
-       rm -f libdrive.a
-       cd libsa; make cleandir
-
-install:
-
-depend: ${SRCS}
-       mkdep ${INCPATH} ${DEFS} ${SRCS}
-       cd libsa; make depend
-
-.include <bsd.dep.mk>
-.include <bsd.obj.mk>
diff --git a/sys/arch/pica/stand/boot.c b/sys/arch/pica/stand/boot.c
deleted file mode 100644 (file)
index 170f6f9..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*     $NetBSD: boot.c,v 1.6 1995/06/28 10:22:32 jonathan Exp $        */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)boot.c      8.1 (Berkeley) 6/10/93
- */
-
-#include <sys/param.h>
-#include <sys/exec.h>
-#include <stand.h>
-
-
-char   line[1024];
-
-/*
- * This gets arguments from the PROM, calls other routines to open
- * and load the program to boot, and then transfers execution to that
- * new program.
- * Argv[0] should be something like "rz(0,0,0)vmunix" on a DECstation 3100.
- * Argv[0,1] should be something like "boot 5/rz0/vmunix" on a DECstation 5000.
- * The argument "-a" means vmunix should do an automatic reboot.
- */
-int
-main(argc, argv)
-       int argc;
-       char **argv;
-{
-       char *cp;
-       int   ask, entry;
-       int   i;
-
-       ask = 1;
-
-       for(i = 0; i < argc; i++)
-               printf("Arg %d:%s\n",i,argv[i]);
-
-       do {
-               printf("Boot: ");
-               if (ask) {
-                       gets(line);
-                       cp = line;
-                       argv[0] = cp;
-                       argc = 1;
-               } else
-                       printf("%s\n", cp);
-       } while(ask && line[0] == '\0');
-
-       entry = loadfile(cp);
-       if (entry == -1) {
-               gets(line);
-               return 0;
-       }
-
-       printf("Starting at 0x%x\n\n", entry);
-       ((void (*)())entry)(argc, argv, 0, 0);
-}
-
-/*
- * Open 'filename', read in program and return the entry point or -1 if error.
- */
-loadfile(fname)
-       register char *fname;
-{
-       struct devices *dp;
-       int fd, i, n;
-       struct exec aout;
-
-       if ((fd = open(fname, 0)) < 0) {
-               printf("open(%s) failed: %d\n", fname, errno);
-               goto err;
-       }
-
-       /* read the exec header */
-       i = read(fd, (char *)&aout, sizeof(aout));
-
-cerr:
-       (void) close(fd);
-err:
-       printf("Can't boot '%s'\n", fname);
-       return (-1);
-}
diff --git a/sys/arch/pica/stand/conf.c b/sys/arch/pica/stand/conf.c
deleted file mode 100644 (file)
index cecbc70..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*     $NetBSD: conf.c,v 1.5 1995/01/18 06:53:39 mellon Exp $  */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)conf.c      8.1 (Berkeley) 6/10/93
- */
-
-#include <stand.h>
-
-int    errno;
-
-extern void    nullsys();
-extern int     nodev(), noioctl();
-
-int    rzstrategy(), rzopen();
-#ifdef SMALL
-#define rzclose 0
-#else  /*!SMALL*/
-int     rzclose();
-#endif /*!SMALL*/
-
-#define        rzioctl         noioctl
-
-#ifndef BOOT
-int    tzstrategy(), tzopen(), tzclose();
-#endif
-#define        tzioctl         noioctl
-
-
-struct devsw devsw[] = {
-       { "rz", rzstrategy,     rzopen, rzclose,        rzioctl }, /*0*/
-#ifndef BOOT
-       { "tz", tzstrategy,     tzopen, tzclose,        tzioctl }, /*1*/
-#endif
-};
-
-int    ndevs = (sizeof(devsw)/sizeof(devsw[0]));
diff --git a/sys/arch/pica/stand/filesystem.c b/sys/arch/pica/stand/filesystem.c
deleted file mode 100644 (file)
index 514e6e8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*     $NetBSD: filesystem.c,v 1.2 1995/02/16 02:33:05 cgd Exp $       */
-
-/*
- * Copyright (c) 1993 Philip A. Nelson.
- * 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 Philip A. Nelson.
- * 4. The name of Philip A. Nelson may not be used to endorse or promote
- *    products derived from this software without specific prior written
- *    permission.
- *
- * THIS SOFTWARE IS PROVIDED BY PHILIP NELSON ``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 PHILIP NELSON 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.
- *
- *     filesystem.c
- */
-
-#include <lib/libsa/stand.h>
-#include <lib/libsa/ufs.h>
-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);
-
diff --git a/sys/arch/pica/stand/libsa/Makefile b/sys/arch/pica/stand/libsa/Makefile
deleted file mode 100644 (file)
index d147171..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#      $NetBSD: Makefile,v 1.5 1995/01/18 06:53:51 mellon Exp $
-#      @(#)Makefile    8.2 (Berkeley) 2/16/94
-
-LIB=   sa
-SRCS=  alloc.c bcopy.c bzero.c close.c dev.c disklabel.c getfile.c \
-       getputchar.c ioctl.c lseek.c open.c printf.c read.c ufs.c write.c \
-       devopen.c getenv.c gets.c strcat.c strcmp.c strcpy.c strlen.c
-
-.PATH: ../../../../lib/libsa ../../../../lib/libkern
-NOPROFILE=noprofile
-
-.include <bsd.lib.mk>
-
-CFLAGS=-O2 -I../../include -I/sys -DSMALL
diff --git a/sys/arch/pica/stand/libsa/devopen.c b/sys/arch/pica/stand/libsa/devopen.c
deleted file mode 100644 (file)
index 79b35f8..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*     $NetBSD: devopen.c,v 1.5 1995/01/18 06:53:54 mellon Exp $       */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)devopen.c   8.1 (Berkeley) 6/10/93
- */
-
-#include <lib/libsa/stand.h>
-
-/*
- * Decode the string 'fname', open the device and return the remaining
- * file name if any.
- */
-devopen(f, fname, file)
-       struct open_file *f;
-       const char *fname;
-       char **file;    /* out */
-{
-       register char *cp;
-       register char *ncp;
-       register struct devsw *dp;
-       register int c, i;
-       int ctlr = 0, unit = 0, part = 0;
-       char namebuf[20];
-       int rc;
-
-       cp = fname;
-       ncp = namebuf;
-
-               /* expect a string like 'rz(0,0,0)vmunix' */
-               while ((c = *cp) != '\0') {
-                       if (c == '(') {
-                               cp++;
-                               break;
-                       }
-                       if (ncp < namebuf + sizeof(namebuf) - 1)
-                               *ncp++ = c;
-                       cp++;
-               }
-
-               /* get controller number */
-               if ((c = *cp) >= '0' && c <= '9') {
-                       ctlr = c - '0';
-                       c = *++cp;
-               }
-
-               if (c == ',') {
-                       /* get SCSI device number */
-                       if ((c = *++cp) >= '0' && c <= '9') {
-                               unit = c - '0';
-                               c = *++cp;
-                       }
-
-                       if (c == ',') {
-                               /* get partition number */
-                               if ((c = *++cp) >= '0' && c <= '9') {
-                                       part = c - '0';
-                                       c = *++cp;
-                               }
-                       }
-               }
-               if (c != ')')
-                       return (ENXIO);
-               cp++;
-       *ncp = '\0';
-
-#ifdef SMALL
-       if (strcmp (namebuf, "rz")) {
-               printf ("Unknown device: %s\n", namebuf);
-               return ENXIO;
-       }
-       dp = devsw;
-       i = 0;
-#else
-       for (dp = devsw, i = 0; i < ndevs; dp++, i++)
-               if (dp->dv_name && strcmp(namebuf, dp->dv_name) == 0)
-                       goto fnd;
-       printf("Unknown device '%s'\nKnown devices are:", namebuf);
-       for (dp = devsw, i = 0; i < ndevs; dp++, i++)
-               if (dp->dv_name)
-                       printf(" %s", dp->dv_name);
-       printf("\n");
-       return (ENXIO);
-
-fnd:
-#endif
-       rc = (dp->dv_open)(f, ctlr, unit, part);
-       if (rc)
-               return (rc);
-
-       f->f_dev = dp;
-       if (file && *cp != '\0')
-               *file = cp;
-       return (0);
-}
diff --git a/sys/arch/pica/stand/libsa/getenv.c b/sys/arch/pica/stand/libsa/getenv.c
deleted file mode 100644 (file)
index 7e063cd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*     $NetBSD: getenv.c,v 1.5 1995/01/18 06:53:55 mellon Exp $        */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)getenv.c    8.1 (Berkeley) 6/10/93
- */
-
-char *
-getenv(s)
-       char *s;
-{
-}
diff --git a/sys/arch/pica/stand/libsa/getputchar.c b/sys/arch/pica/stand/libsa/getputchar.c
deleted file mode 100644 (file)
index dbfae22..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*     $NetBSD: getenv.c,v 1.5 1995/01/18 06:53:55 mellon Exp $        */
-
-/*-
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- *     @(#)getenv.c    8.1 (Berkeley) 6/10/93
- */
-
-getchar()
-{
-       char buf[4];
-       int  cnt;
-
-       if(Bios_Read(0, &buf, 1, &cnt) != 0)
-               return(-1);
-       return(buf[0] & 255);
-}
-
-putchar(c)
-char c;
-{
-       char buf[4];
-       int  cnt;
-
-       if(c == '\n') {
-               buf[0] = '\r';
-               buf[1] = c;
-               cnt = 2;
-       }
-       else {
-               buf[0] = c;
-               cnt = 1;
-       }
-       if(Bios_Write(1, &buf, cnt, &cnt) != 0)
-               return(-1);
-       return(0);
-}
diff --git a/sys/arch/pica/stand/rz.c b/sys/arch/pica/stand/rz.c
deleted file mode 100644 (file)
index 1094aef..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*     $NetBSD: rz.c,v 1.6 1995/06/28 10:22:35 jonathan Exp $  */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Van Jacobson of Lawrence Berkeley Laboratory and Ralph Campbell.
- *
- * 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.
- *
- *     @(#)rz.c        8.1 (Berkeley) 6/10/93
- */
-
-#include <stdarg.h>
-
-#include <stand.h>
-#include <sys/param.h>
-#include <sys/disklabel.h>
-
-struct rz_softc {
-       int     sc_fd;                  /* PROM file id */
-       int     sc_ctlr;                /* controller number */
-       int     sc_unit;                /* disk unit number */
-       int     sc_part;                /* disk partition number */
-       struct  disklabel sc_label;     /* disk label for this disk */
-};
-
-int
-rzstrategy(devdata, rw, bn, reqcnt, addr, cnt)
-       void *devdata;
-       int rw;
-       daddr_t bn;
-       u_int reqcnt;
-       char *addr;
-       u_int *cnt;     /* out: number of bytes transfered */
-{
-       register struct rz_softc *sc = (struct rz_softc *)devdata;
-       register int part = sc->sc_part;
-       register struct partition *pp = &sc->sc_label.d_partitions[part];
-       register int s;
-       long offset;
-
-       offset = bn * DEV_BSIZE;
-
-#ifdef DEBUG
-/*XXX*/printf("rz:%x %d\n", offset, reqcnt);
-#endif
-
-       /*
-        * Partial-block transfers not handled.
-        */
-       if (reqcnt & (DEV_BSIZE - 1)) {
-               *cnt = 0;
-               return (EINVAL);
-       }
-
-       offset += pp->p_offset * DEV_BSIZE;
-
-       if (Bios_Seek(sc->sc_fd, &offset, 0) != 0)
-               return (EIO);
-       s = Bios_Read(sc->sc_fd, addr, reqcnt, &reqcnt);
-       if (s != 0)
-               return (EIO);
-
-       *cnt = reqcnt;
-       return (0);
-}
-
-int
-rzopen(struct open_file *f, ...)
-{
-       int ctlr, unit, part;
-
-       struct rz_softc *sc;
-       struct disklabel *lp;
-       int i, fd;
-       char *msg;
-       char buf[DEV_BSIZE];
-       int cnt;
-       static char device[] = "scsi()disk(0)rdisk()";
-       va_list ap;
-
-       va_start(ap, f);
-
-       ctlr = va_arg(ap, int);
-       unit = va_arg(ap, int);
-       part = va_arg(ap, int);
-       if (unit >= 8 || part >= 8)
-               return (ENXIO);
-#if 0
-       device[5] = '0' + unit;
-#endif
-       /* NOTE: only support reads for now */
-
-       i = Bios_Open(device, 0, &fd);
-       if (i != 0) {
-               printf("boot init failed error code %d\n", i);
-               return (ENXIO);
-       }
-
-       sc = alloc(sizeof(struct rz_softc));
-       bzero(sc, sizeof(struct rz_softc));
-       f->f_devdata = (void *)sc;
-
-       sc->sc_fd = fd;
-       sc->sc_ctlr = ctlr;
-       sc->sc_unit = unit;
-       sc->sc_part = part;
-
-       /* try to read disk label and partition table information */
-       lp = &sc->sc_label;
-       lp->d_secsize = DEV_BSIZE;
-       lp->d_secpercyl = 1;
-       lp->d_npartitions = MAXPARTITIONS;
-       lp->d_partitions[part].p_offset = 0;
-       lp->d_partitions[part].p_size = 0x7fffffff;
-       i = rzstrategy(sc, F_READ, (daddr_t)LABELSECTOR, DEV_BSIZE, buf, &cnt);
-       if (i || cnt != DEV_BSIZE) {
-               printf("rz%d: error reading disk label\n", unit);
-               goto bad;
-       } else {
-               msg = getdisklabel(buf, lp);
-               if (msg) {
-                       printf("rz%d: %s\n", unit, msg);
-                       goto bad;
-               }
-       }
-
-       if (part >= lp->d_npartitions || lp->d_partitions[part].p_size == 0) {
-       bad:
-#ifndef SMALL
-               free(sc, sizeof(struct rz_softc));
-#endif
-               return (ENXIO);
-       }
-       return (0);
-}
-
-#ifndef SMALL
-rzclose(f)
-       struct open_file *f;
-{
-       free(f->f_devdata, sizeof(struct rz_softc));
-       f->f_devdata = (void *)0;
-       return (0);
-}
-#endif
diff --git a/sys/arch/pica/stand/start.S b/sys/arch/pica/stand/start.S
deleted file mode 100644 (file)
index 09114a9..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*     $NetBSD: start.S,v 1.1 1995/01/18 06:19:01 mellon Exp $ */
-
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Ralph Campbell.
- *
- * 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.
- *
- */
-
-/*
- * start.S -
- *
- *     Contains code that is the first executed at boot time.
- */
-
-#include <machine/regdef.h>
-#include <machine/cpu.h>
-#include <machine/asm.h>
-
-/*
- * Frame required for the debugger (if we have any)
- */
-#define START_FRAME    ((4 * 4) + 4 + 4)
-
-       .globl  __start
-__start:
-       .set    noreorder
-#ifdef __GP_SUPPORT__
-       la      gp, _C_LABEL (_gp)
-#endif
-       la      sp, __start - START_FRAME               # Stack below program
-       sw      zero, START_FRAME - 4(sp)       # Zero out old ra for debugger
-       sw      zero, START_FRAME - 8(sp)       # Zero out old fp for debugger
-       move    s0, a0                          # save argc
-       move    s1, a1                          # save argv
-
-       la      a0, _C_LABEL (edata)                    # clear BSS
-       la      a1, _C_LABEL (end)
-       jal     _C_LABEL(bzero)                 # bzero(edata, end - edata)
-       subu    a1, a1, a0
-
-       move    a0, s0                          # restore argc
-       jal     _C_LABEL(main)                  # main(argc, argv)
-       move    a1, s1                          # restore argv
-
-       j       _C_LABEL(Bios_Restart)          # restart...
-       nop
-
-/* dummy routine for gcc2 */
-       .globl  _C_LABEL(__main)
-_C_LABEL(__main):
-       j       ra
-       nop
-
-#define Bios_Call(Name,Offset) \
-LEAF(Name);                    \
-       lw      v0,0x80001020;  \
-       lw      v0,Offset(v0);  \
-       jr      v0      ;       \
-       nop             ;       \
-       END(Name)
-
-Bios_Call(Bios_Load,                   0x00)
-Bios_Call(Bios_Invoke,                 0x04)
-Bios_Call(Bios_Execute,                        0x08)
-Bios_Call(Bios_Halt,                   0x0c)
-Bios_Call(Bios_PowerDown,              0x10)
-Bios_Call(Bios_Restart,                        0x14)
-Bios_Call(Bios_Reboot,                 0x18)
-Bios_Call(Bios_EnterInteractiveMode,   0x1c)
-Bios_Call(Bios_Unused1,                        0x20)
-Bios_Call(Bios_GetPeer,                        0x24)
-Bios_Call(Bios_GetChild,               0x28)
-Bios_Call(Bios_GetParent,              0x2c)
-Bios_Call(Bios_GetConfigurationData,   0x30)
-Bios_Call(Bios_AddChild,               0x34)
-Bios_Call(Bios_DeleteComponent,                0x38)
-Bios_Call(Bios_GetComponent,           0x3c)
-Bios_Call(Bios_SaveConfiguration,      0x40)
-Bios_Call(Bios_GetSystemId,            0x44)
-Bios_Call(Bios_GetMemoryDescriptor,    0x48)
-Bios_Call(Bios_Unused2,                        0x4c)
-Bios_Call(Bios_GetTime,                        0x50)
-Bios_Call(Bios_GetRelativeTime,                0x54)
-Bios_Call(Bios_GetDirectoryEntry,      0x58)
-Bios_Call(Bios_Open,                   0x5c)
-Bios_Call(Bios_Close,                  0x60)
-Bios_Call(Bios_Read,                   0x64)
-Bios_Call(Bios_GetReadStatus,          0x68)
-Bios_Call(Bios_Write,                  0x6c)
-Bios_Call(Bios_Seek,                   0x70)
-Bios_Call(Bios_Mount,                  0x74)
-Bios_Call(Bios_GetEnvironmentVariable, 0x78)
-Bios_Call(Bios_SetEnvironmentVariable, 0x7c)
-Bios_Call(Bios_GetFileInformation,     0x80)
-Bios_Call(Bios_SetFileInformation,     0x84)
-Bios_Call(Bios_FlushAllCaches,         0x88)
-Bios_Call(Bios_TestUnicodeCharacter,   0x8c)
-Bios_Call(Bios_GetDisplayStatus,       0x90)