diff options
40 files changed, 1130 insertions, 782 deletions
diff --git a/sys/arch/sun3/conf/COYOTE b/sys/arch/sun3/conf/COYOTE index 1532b65d83e..75e44ccb5db 100644 --- a/sys/arch/sun3/conf/COYOTE +++ b/sys/arch/sun3/conf/COYOTE @@ -1,5 +1,5 @@ # -# $OpenBSD: COYOTE,v 1.1 1996/11/12 00:01:47 kstailey Exp $ +# $OpenBSD: COYOTE,v 1.2 1996/11/23 07:54:46 kstailey Exp $ # # @@ -17,10 +17,13 @@ include "std.sun3" maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support -#makeoptions DEBUG="-g" # symbols for kgdb + nm + +# Debugging options. Uncomment either this: options DDB +# ... or these two: (for KGDB on another machine) +#makeoptions DEBUG="-g" # symbols for kgdb + nm +#options KGDB # Filesystem options options NFSCLIENT # nfs client support @@ -69,7 +72,7 @@ ms0 at zsc0 channel 1 # mouse # # Lance Ethernet (only onboard) -le0 at obio0 addr ? level ? +le0 at obio0 addr 0x120000 level 3 # # Frame buffer devices diff --git a/sys/arch/sun3/conf/DISKLESS b/sys/arch/sun3/conf/DISKLESS index 263d7634919..70701fa8be7 100644 --- a/sys/arch/sun3/conf/DISKLESS +++ b/sys/arch/sun3/conf/DISKLESS @@ -16,7 +16,6 @@ options HAVECACHE # Sun3/260 VAC maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support # Debugging options. Uncomment either this: diff --git a/sys/arch/sun3/conf/FOUR_TTYS b/sys/arch/sun3/conf/FOUR_TTYS index 52025702396..272fbfa1eaf 100644 --- a/sys/arch/sun3/conf/FOUR_TTYS +++ b/sys/arch/sun3/conf/FOUR_TTYS @@ -16,7 +16,6 @@ options HAVECACHE # Sun3/260 VAC maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support # Debugging options. Uncomment either this: diff --git a/sys/arch/sun3/conf/GENERIC b/sys/arch/sun3/conf/GENERIC index 43ddc262554..8cc69d47d87 100644 --- a/sys/arch/sun3/conf/GENERIC +++ b/sys/arch/sun3/conf/GENERIC @@ -16,7 +16,6 @@ options HAVECACHE # Sun3/260 VAC maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support # Debugging options. Uncomment either this: @@ -78,18 +77,28 @@ ms0 at zsc0 channel 1 # mouse # # Intel Ethernet (onboard, or VME) -ie0 at obio0 addr ? level ? +ie0 at obio0 addr 0x0C0000 level 3 ie1 at vmes0 addr 0xffe88000 level 3 vect 0x75 # Lance Ethernet (only onboard) -le0 at obio0 addr ? level ? +le0 at obio0 addr 0x120000 level 3 # # Disk and tape devices # # Sun3 "si" SCSI controller (NCR 5380) -si0 at obio0 addr ? level ? +# This driver has several flags which may be enabled by OR'ing +# the values and using the "flags" directive. (PR#1929) +# Valid flags are: +# +# 0x01 Use DMA (may be polled) +# 0x02 Use DMA completion interrupts +# 0x04 Allow disconnect/reselect +# +# E.g. "flags 0x07" would enable DMA, interrupts, and reselect. +# Note: these values are quite a bit paranoid... +si0 at obio0 addr 0x140000 level 2 si0 at vmes0 addr 0xff200000 level 2 vect 0x40 si1 at vmes0 addr 0xff204000 level 2 vect 0x41 diff --git a/sys/arch/sun3/conf/GENERIC_KGDB b/sys/arch/sun3/conf/GENERIC_KGDB index 268cbcbd0de..840f2b5b9ff 100644 --- a/sys/arch/sun3/conf/GENERIC_KGDB +++ b/sys/arch/sun3/conf/GENERIC_KGDB @@ -16,7 +16,6 @@ options HAVECACHE # Sun3/260 VAC maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support # Debugging options. Uncomment either this: diff --git a/sys/arch/sun3/conf/Makefile.sun3 b/sys/arch/sun3/conf/Makefile.sun3 index a59fd9a88d3..7c128c0a4de 100644 --- a/sys/arch/sun3/conf/Makefile.sun3 +++ b/sys/arch/sun3/conf/Makefile.sun3 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.sun3,v 1.43 1996/02/29 20:57:38 cgd Exp $ +# $NetBSD: Makefile.sun3,v 1.51 1996/09/09 21:07:08 mycroft Exp $ # Makefile for NetBSD # @@ -7,7 +7,7 @@ # Most changes should be made in the machine description # /sys/arch/sun3/conf/``machineid'' # after which you should do -# config machineid +# config machineid # Machine generic makefile changes should be made in # /sys/arch/sun3/conf/Makefile.sun3 # after which config should be rerun for all machines of that type. @@ -21,24 +21,33 @@ # DEBUG is set to -g if debugging. # PROF is set to -pg if profiling. -AS?= as CC?= cc -CPP?= cpp LD?= ld -STRIP?= strip -d -TOUCH?= touch -f -c +MKDEP?= mkdep +STRIP?= strip # source tree is located via $S relative to the compilation directory -S= ../../../.. -SUN3= ../.. - -INCLUDES= -I. -I$S/arch -I$S -CPPFLAGS= ${INCLUDES} ${IDENT} -D_KERNEL -Dmc68020 -Dsun3 -CFLAGS= ${DEBUG} -O2 -Werror -msoft-float +.ifndef S +S!= cd ../../../..; pwd +.endif +SUN3= $S/arch/sun3 + +# Override CPP defaults entirely, so cross-compilation works. +INCLUDES= -I. -I$S/arch -I$S -nostdinc +XDEFS= -undef -D__NetBSD__ -Dm68k -Dmc68000 +CPPFLAGS= ${INCLUDES} ${IDENT} ${PARAM} -D_KERNEL \ + -Dmc68020 -Dsun3 ${XDEFS} +CWARNFLAGS= -Werror # -Wall -Wstrict-prototypes -Wmissing-prototypes +CFLAGS= ${DEBUG} ${CWARNFLAGS} -O2 -msoft-float AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE LINKFLAGS= -N -Ttext 0E004000 -e start +STRIPFLAGS= -d -# What to use for libkern: +HOSTED_CC= ${CC} +HOSTED_CPPFLAGS=${CPPFLAGS:S/^-nostdinc$//} +HOSTED_CFLAGS= ${CFLAGS} + +### find out what to use for libkern .include "$S/lib/libkern/Makefile.inc" .ifndef PROF LIBKERN= ${KERNLIB} @@ -54,19 +63,13 @@ LIBCOMPAT= ${COMPATLIB} 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. +# compile rules: rules are named ${TYPE}_${SUFFIX} where TYPE is NORMAL or +# HOSTED}, and SUFFIX is the file suffix, capitalized (e.g. C for a .c file). NORMAL_C= ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c $< -NORMAL_C_C= ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} ${PARAM} -c $< - -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= ${CC} ${AFLAGS} ${CPPFLAGS} ${PARAM} -c $< + +HOSTED_C= ${HOSTED_CC} ${HOSTED_CFLAGS} ${HOSTED_CPPFLAGS} -c $< %OBJS @@ -92,7 +95,7 @@ DEBUG?= LINKFLAGS+= -X SYSTEM_LD_TAIL+=; \ echo cp $@ $@.gdb; rm -f $@.gdb; cp $@ $@.gdb; \ - echo ${STRIP} $@; ${STRIP} $@ + echo ${STRIP} ${STRIPFLAGS} $@; ${STRIP} ${STRIPFLAGS} $@ .else LINKFLAGS+= -S .endif @@ -106,14 +109,14 @@ genassym: genassym.o ${CC} -o $@ genassym.o genassym.o: ${SUN3}/sun3/genassym.c - ${NORMAL_C_C} + ${HOSTED_C} param.c: $S/conf/param.c rm -f param.c cp $S/conf/param.c . param.o: param.c Makefile - ${NORMAL_C_C} + ${NORMAL_C} ioconf.o: ioconf.c ${NORMAL_C} @@ -124,11 +127,11 @@ newvers: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP} clean:: - rm -f eddep *bsd bsd.gdb tags *.[io] [a-z]*.s \ + rm -f eddep *netbsd netbsd.gdb tags *.[io] [a-z]*.s \ [Ee]rrs linterrs makelinks genassym genassym.o assym.h lint: - @lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} ${PARAM} -UKGDB \ + @lint -hbxncez -DGENERIC -Dvolatile= ${CPPFLAGS} -UKGDB \ ${SUN3}/sun3/Locore.c ${CFILES} ${SUN3}/sun3/swapgeneric.c \ ioconf.c param.c | \ grep -v 'static function .* unused' @@ -148,15 +151,24 @@ SRCS= ${SUN3}/sun3/locore.s \ param.c ioconf.c ${CFILES} ${SFILES} depend:: .depend .depend: ${SRCS} assym.h param.c - mkdep ${AFLAGS} ${CPPFLAGS} ${SUN3}/sun3/locore.s - mkdep -a ${CFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES} - mkdep -a ${AFLAGS} ${CPPFLAGS} ${SFILES} - mkdep -a ${CFLAGS} ${CPPFLAGS} ${PARAM} ${SUN3}/sun3/genassym.c + ${MKDEP} ${AFLAGS} ${CPPFLAGS} param.c ioconf.c ${CFILES} + ${MKDEP} -a ${HOSTED_CFLAGS} ${HOSTED_CPPFLAGS} \ + ${SUN3}/sun3/genassym.c + +# XXX - see below +# ${MKDEP} -a ${APPFLAGS} ${SUN3}/sun3/locore.s +# ${MKDEP} -a ${APPFLAGS} ${SFILES} +# +# For cross-compilation, the "gcc -M" mkdep script is convenient, +# but that does not correctly make rules from *.s files. The +# easiest compromise is to just list those dependencies here. +locore.o: assym.h machine/trap.h m68k/trap.h +copy.o: assym.h $S/sys/errno.h # depend on root or device configuration autoconf.o conf.o: Makefile - + # depend on network or filesystem configuration uipc_proto.o vfs_conf.o: Makefile diff --git a/sys/arch/sun3/conf/RAMDISK b/sys/arch/sun3/conf/RAMDISK index cd2cffeb47b..733c66e3601 100644 --- a/sys/arch/sun3/conf/RAMDISK +++ b/sys/arch/sun3/conf/RAMDISK @@ -17,9 +17,6 @@ options HAVECACHE # Sun3/260 VAC # Needs to be set per system. i.e change these as you see fit maxusers 2 -# Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging - # Debugging options. Uncomment either this: #options DDB # ... or these two: (for KGDB on another machine) diff --git a/sys/arch/sun3/conf/SMD_TEST b/sys/arch/sun3/conf/SMD_TEST index a3587672ee1..0f6eab813e7 100644 --- a/sys/arch/sun3/conf/SMD_TEST +++ b/sys/arch/sun3/conf/SMD_TEST @@ -16,7 +16,6 @@ options HAVECACHE # Sun3/260 VAC maxusers 4 # Standard system options -options SWAPPAGER, VNODEPAGER, DEVPAGER # paging options KTRACE # system call tracing support # Debugging options. Uncomment either this: diff --git a/sys/arch/sun3/conf/files.sun3 b/sys/arch/sun3/conf/files.sun3 index d8e9006bd90..6556ae46e84 100644 --- a/sys/arch/sun3/conf/files.sun3 +++ b/sys/arch/sun3/conf/files.sun3 @@ -1,4 +1,4 @@ -# $NetBSD: files.sun3,v 1.24 1996/05/07 01:30:18 thorpej Exp $ +# $NetBSD: files.sun3,v 1.26 1996/10/29 19:58:14 gwr Exp $ # # sun3-specific configuration info @@ -34,7 +34,7 @@ file arch/sun3/sun3/vm_machdep.c file arch/sun3/dev/idprom.c -include "../../m68k/fpe/files.fpe" +include "arch/m68k/fpe/files.fpe" file arch/m68k/m68k/copy.s file dev/cons.c @@ -137,8 +137,6 @@ device cgfour: sunfb attach cgfour at obmem file arch/sun3/dev/cg4.c cgfour needs-flag -file arch/sun3/dev/bt_subr.c cgfour - # # VME # diff --git a/sys/arch/sun3/conf/std.sun3 b/sys/arch/sun3/conf/std.sun3 index 2274f33b012..5f3be8d1363 100644 --- a/sys/arch/sun3/conf/std.sun3 +++ b/sys/arch/sun3/conf/std.sun3 @@ -1,4 +1,4 @@ -# $NetBSD: std.sun3,v 1.15.4.1 1996/08/19 23:35:12 gwr Exp $ +# $NetBSD: std.sun3,v 1.19 1996/11/19 21:04:50 gwr Exp $ # Standard information for sun3's. machine sun3 m68k @@ -18,14 +18,17 @@ vmel0 at mainbus? # Devices that should be present in any Sun3 kernel. # OBIO -zsc0 at obio? addr ? -zsc1 at obio? addr ? -eeprom0 at obio? addr ? -clock0 at obio? addr ? -memerr0 at obio? addr ? -intreg0 at obio? addr ? +zsc0 at obio0 addr 0x000000 +zsc1 at obio0 addr 0x020000 +eeprom0 at obio0 addr 0x040000 +clock0 at obio0 addr 0x060000 +memerr0 at obio0 addr 0x080000 +intreg0 at obio0 addr 0x0A0000 # Standard defines +options EXEC_AOUT +options EXEC_SCRIPT +options SWAPPAGER, VNODEPAGER, DEVPAGER # XXX - Still needed? options NEWCONFIG diff --git a/sys/arch/sun3/dev/cg4.c b/sys/arch/sun3/dev/cg4.c index 7c3be6c1e63..1116c81c998 100644 --- a/sys/arch/sun3/dev/cg4.c +++ b/sys/arch/sun3/dev/cg4.c @@ -47,12 +47,19 @@ /* * color display (cg4) driver. * - * Does not handle interrupts, even though they can occur. + * Credits, history: + * Gordon Ross created this driver based on the cg3 driver from + * the sparc port as distributed in BSD 4.4 Lite, but included + * support for only the "type B" adapter (Brooktree DACs). + * Ezra Story added support for the "type A" (AMD DACs). * - * XXX should defer colormap updates to vertical retrace interrupts + * Todo: + * Make this driver handle video interrupts. + * Defer colormap updates to vertical retrace interrupts. */ #include <sys/param.h> +#include <sys/systm.h> #include <sys/device.h> #include <sys/ioctl.h> #include <sys/malloc.h> @@ -71,16 +78,30 @@ #include "btvar.h" #include "cg4reg.h" +#define CG4_MMAP_SIZE (CG4_OVERLAY_SIZE + CG4_ENABLE_SIZE + CG4_PIXMAP_SIZE) + extern unsigned char cpu_machine_id; +#define CMAP_SIZE 256 +struct soft_cmap { + u_char r[CMAP_SIZE]; + u_char g[CMAP_SIZE]; + u_char b[CMAP_SIZE]; +}; + /* per-display variables */ struct cg4_softc { struct device sc_dev; /* base device */ struct fbdevice sc_fb; /* frame buffer device */ - volatile struct bt_regs *sc_bt; /* Brooktree registers */ - int sc_phys; /* display RAM (phys addr) */ + int sc_cg4type; /* A or B */ + void *sc_va_cmap; /* Colormap h/w (mapped KVA) */ + int sc_pa_overlay; /* phys. addr. of overlay plane */ + int sc_pa_enable; /* phys. addr. of enable plane */ + int sc_pa_pixmap; /* phys. addr. of color plane */ int sc_blanked; /* true if blanked */ - union bt_cmap sc_cmap; /* Brooktree color map */ + + union bt_cmap *sc_btcm; /* Brooktree color map */ + struct soft_cmap sc_cmap; /* Generic soft colormap. */ }; /* autoconfiguration driver */ @@ -98,19 +119,25 @@ struct cfdriver cgfour_cd = { /* frame buffer generic driver */ int cg4open(), cg4close(), cg4mmap(); -static int cg4gattr __P((struct fbdevice *, struct fbgattr *)); -static int cg4gvideo __P((struct fbdevice *, int *)); -static int cg4svideo __P((struct fbdevice *, int *)); +static int cg4gattr __P((struct fbdevice *, struct fbgattr *)); +static int cg4gvideo __P((struct fbdevice *, int *)); +static int cg4svideo __P((struct fbdevice *, int *)); static int cg4getcmap __P((struct fbdevice *, struct fbcmap *)); static int cg4putcmap __P((struct fbdevice *, struct fbcmap *)); -static struct fbdriver cg4fbdriver = { +static void cg4a_init __P((struct cg4_softc *)); +static void cg4a_svideo __P((struct cg4_softc *, int)); +static void cg4a_ldcmap __P((struct cg4_softc *)); + +static void cg4b_init __P((struct cg4_softc *)); +static void cg4b_svideo __P((struct cg4_softc *, int)); +static void cg4b_ldcmap __P((struct cg4_softc *)); + +static struct fbdriver cg4_fbdriver = { cg4open, cg4close, cg4mmap, cg4gattr, cg4gvideo, cg4svideo, cg4getcmap, cg4putcmap }; -static void cg4loadcmap __P((struct cg4_softc *, int, int)); - /* * Match a cg4. */ @@ -120,31 +147,39 @@ cg4match(parent, vcf, args) void *vcf, *args; { struct confargs *ca = args; - int paddr, x; + int paddr; - /* XXX - Huge hack due to lack of probe info... */ + /* XXX: Huge hack due to lack of probe info... */ + /* XXX: Machines that might have a cg4 (gag). */ + /* XXX: Need info on the "P4" register... */ switch (cpu_machine_id) { - /* Machines that might have a cg4 (gag). */ - case SUN3_MACH_50: - case SUN3_MACH_60: + case SUN3_MACH_110: + /* XXX: Assume type A. */ + if (ca->ca_paddr == -1) + ca->ca_paddr = CG4A_DEF_BASE; + if (bus_peek(ca->ca_bustype, ca->ca_paddr, 1) == -1) + return (0); + if (bus_peek(BUS_OBIO, CG4A_OBIO_CMAP, 1) == -1) + return (0); break; - default: - return (0); - } - - if (ca->ca_paddr == -1) - ca->ca_paddr = 0xFF200000; - paddr = ca->ca_paddr; - x = bus_peek(ca->ca_bustype, paddr, 1); - if (x == -1) - return (0); + case SUN3_MACH_60: + /* XXX: Assume type A. */ + if (ca->ca_paddr == -1) + ca->ca_paddr = CG4B_DEF_BASE; + paddr = ca->ca_paddr; + if (bus_peek(ca->ca_bustype, paddr, 1) == -1) + return (0); + /* Make sure we're color */ + paddr += CG4B_OFF_PIXMAP; + if (bus_peek(ca->ca_bustype, paddr, 1) == -1) + return (0); + break; - paddr += CG4REG_PIXMAP; - x = bus_peek(ca->ca_bustype, paddr, 1); - if (x == -1) + default: return (0); + } return (1); } @@ -161,10 +196,18 @@ cg4attach(parent, self, args) struct fbdevice *fb = &sc->sc_fb; struct confargs *ca = args; struct fbtype *fbt; - volatile struct bt_regs *bt; - int i; - fb->fb_driver = &cg4fbdriver; + /* XXX: should do better than this... */ + switch (cpu_machine_id) { + case SUN3_MACH_110: + sc->sc_cg4type = CG4_TYPE_A; + break; + case SUN3_MACH_60: + default: + sc->sc_cg4type = CG4_TYPE_B; + } + + fb->fb_driver = &cg4_fbdriver; fb->fb_private = sc; fb->fb_name = sc->sc_dev.dv_xname; @@ -177,28 +220,29 @@ cg4attach(parent, self, args) fbt->fb_height = 900; fbt->fb_size = CG4_MMAP_SIZE; - sc->sc_phys = ca->ca_paddr; - sc->sc_bt = bt = (volatile struct bt_regs *) - bus_mapin(ca->ca_bustype, ca->ca_paddr, - sizeof(struct bt_regs *)); - - /* grab initial (current) color map */ - bt->bt_addr = 0; - for (i = 0; i < (256 * 3 / 4); i++) - sc->sc_cmap.cm_chip[i] = bt->bt_cmap; - - /* - * BT458 chip initialization as described in Brooktree's - * 1993 Graphics and Imaging Product Databook (DB004-1/93). - */ - bt->bt_addr = 0x04; /* select read mask register */ - bt->bt_ctrl = 0xff; /* all planes on */ - bt->bt_addr = 0x05; /* select blink mask register */ - bt->bt_ctrl = 0x00; /* all planes non-blinking */ - bt->bt_addr = 0x06; /* select command register */ - bt->bt_ctrl = 0x43; /* palette enabled, overlay planes enabled */ - bt->bt_addr = 0x07; /* select test register */ - bt->bt_ctrl = 0x00; /* set test mode */ + switch (sc->sc_cg4type) { + case CG4_TYPE_A: /* Sun3/110 */ + sc->sc_va_cmap = bus_mapin(BUS_OBIO, CG4A_OBIO_CMAP, + sizeof(struct amd_regs)); + sc->sc_pa_overlay = ca->ca_paddr + CG4A_OFF_OVERLAY; + sc->sc_pa_enable = ca->ca_paddr + CG4A_OFF_ENABLE; + sc->sc_pa_pixmap = ca->ca_paddr + CG4A_OFF_PIXMAP; + sc->sc_btcm = NULL; + cg4a_init(sc); + break; + + case CG4_TYPE_B: /* Sun3/60 */ + default: + sc->sc_va_cmap = (struct bt_regs *) + bus_mapin(ca->ca_bustype, ca->ca_paddr, + sizeof(struct bt_regs *)); + sc->sc_pa_overlay = ca->ca_paddr + CG4B_OFF_OVERLAY; + sc->sc_pa_enable = ca->ca_paddr + CG4B_OFF_ENABLE; + sc->sc_pa_pixmap = ca->ca_paddr + CG4B_OFF_PIXMAP; + sc->sc_btcm = malloc(sizeof(union bt_cmap), M_DEVBUF, M_WAITOK); + cg4b_init(sc); + break; + } printf(" (%dx%d)\n", fbt->fb_width, fbt->fb_height); fb_attach(fb, 4); @@ -245,8 +289,8 @@ cg4ioctl(dev, cmd, data, flags, p) * offset, allowing for the given protection, or return -1 for error. * * X11 expects its mmap'd region to look like this: - * 128k overlay memory - * 128k overlay-enable bitmap + * 128k overlay data memory + * 128k overlay enable bitmap * 1024k color memory * * The hardware really looks like this (starting at ca_paddr) @@ -273,20 +317,18 @@ cg4mmap(dev, off, prot) if ((unsigned)off >= CG4_MMAP_SIZE) return (-1); - physbase = sc->sc_phys; if (off < 0x40000) { if (off < 0x20000) { - /* overlay plane */ - physbase += CG4REG_OVERLAY; + physbase = sc->sc_pa_overlay; } else { /* enable plane */ off -= 0x20000; - physbase += CG4REG_ENABLE; + physbase = sc->sc_pa_enable; } } else { /* pixel map */ off -= 0x40000; - physbase += CG4REG_PIXMAP; + physbase = sc->sc_pa_pixmap; } /* @@ -334,85 +376,241 @@ static int cg4svideo(fb, on) int *on; { struct cg4_softc *sc = fb->fb_private; - register volatile struct bt_regs *bt = sc->sc_bt; - - if ((*on == 0) && (sc->sc_blanked == 0)) { - /* Turn OFF video (blank it). */ - bt->bt_addr = 0x06; /* command reg */ - bt->bt_ctrl = 0x70; /* overlay plane */ - bt->bt_addr = 0x04; /* read mask */ - bt->bt_ctrl = 0x00; /* color planes */ - /* - * Set color 0 to black -- note that this overwrites - * R of color 1. - */ - bt->bt_addr = 0; - bt->bt_cmap = 0; + int state; - sc->sc_blanked = 1; - } + state = *on; + if (sc->sc_cg4type == CG4_TYPE_A) + cg4a_svideo(sc, state); + else + cg4b_svideo(sc, state); + return (0); +} - if ((*on != 0) && (sc->sc_blanked != 0)) { - /* Turn video back ON (unblank). */ - sc->sc_blanked = 0; +/* + * FBIOGETCMAP: + * Copy current colormap out to user space. + */ +static int cg4getcmap(fb, fbcm) + struct fbdevice *fb; + struct fbcmap *fbcm; +{ + struct cg4_softc *sc = fb->fb_private; + struct soft_cmap *cm = &sc->sc_cmap; + int error, start, count; - /* restore color 0 (and R of color 1) */ - bt->bt_addr = 0; - bt->bt_cmap = sc->sc_cmap.cm_chip[0]; + start = fbcm->index; + count = fbcm->count; + if ((start < 0) || (start >= CMAP_SIZE) || + (count < 0) || (start + count > CMAP_SIZE) ) + return (EINVAL); + + if ((error = copyout(&cm->r[start], fbcm->red, count)) != 0) + return (error); + + if ((error = copyout(&cm->g[start], fbcm->green, count)) != 0) + return (error); + + if ((error = copyout(&cm->b[start], fbcm->blue, count)) != 0) + return (error); - /* restore read mask */ - bt->bt_addr = 0x06; /* command reg */ - bt->bt_ctrl = 0x73; /* overlay plane */ - bt->bt_addr = 0x04; /* read mask */ - bt->bt_ctrl = 0xff; /* color planes */ - } return (0); } -/* FBIOGETCMAP: */ -static int cg4getcmap(fb, cmap) +/* + * FBIOPUTCMAP: + * Copy new colormap from user space and load. + */ +static int cg4putcmap(fb, fbcm) struct fbdevice *fb; - struct fbcmap *cmap; + struct fbcmap *fbcm; { struct cg4_softc *sc = fb->fb_private; + struct soft_cmap *cm = &sc->sc_cmap; + int error, start, count; + + start = fbcm->index; + count = fbcm->count; + if ((start < 0) || (start >= CMAP_SIZE) || + (count < 0) || (start + count > CMAP_SIZE) ) + return (EINVAL); + + if ((error = copyin(fbcm->red, &cm->r[start], count)) != 0) + return (error); + + if ((error = copyin(fbcm->green, &cm->g[start], count)) != 0) + return (error); - return (bt_getcmap(cmap, &sc->sc_cmap, 256)); + if ((error = copyin(fbcm->blue, &cm->b[start], count)) != 0) + return (error); + + if (sc->sc_cg4type == CG4_TYPE_A) + cg4a_ldcmap(sc); + else + cg4b_ldcmap(sc); + + return (0); } -/* FBIOPUTCMAP: */ -static int cg4putcmap(fb, cmap) - struct fbdevice *fb; - struct fbcmap *cmap; +/**************************************************************** + * Routines for the "Type A" hardware + ****************************************************************/ + +static void +cg4a_init(sc) + struct cg4_softc *sc; { - struct cg4_softc *sc = fb->fb_private; - int error; - - /* copy to software map */ - error = bt_putcmap(cmap, &sc->sc_cmap, 256); - if (error == 0) { - /* now blast them into the chip */ - /* XXX should use retrace interrupt */ - cg4loadcmap(sc, cmap->index, cmap->count); + volatile struct amd_regs *ar = sc->sc_va_cmap; + struct soft_cmap *cm = &sc->sc_cmap; + int i; + + /* grab initial (current) color map */ + for(i = 0; i < 256; i++) { + cm->r[i] = ar->r[i]; + cm->g[i] = ar->g[i]; + cm->b[i] = ar->b[i]; + } +} + +static void +cg4a_ldcmap(sc) + struct cg4_softc *sc; +{ + volatile struct amd_regs *ar = sc->sc_va_cmap; + struct soft_cmap *cm = &sc->sc_cmap; + int i; + + /* + * Now blast them into the chip! + * XXX Should use retrace interrupt! + * Just set a "need load" bit and let the + * retrace interrupt handler do the work. + */ + for(i = 0; i < 256; i++) { + ar->r[i] = cm->r[i]; + ar->g[i] = cm->g[i]; + ar->b[i] = cm->b[i]; } - return (error); } -/* - * Load a subset of the current (new) colormap into the Brooktree DAC. - */ static void -cg4loadcmap(sc, start, ncolors) +cg4a_svideo(sc, on) struct cg4_softc *sc; - int start, ncolors; + int on; { - volatile struct bt_regs *bt; - u_int *ip; - int count; - - ip = &sc->sc_cmap.cm_chip[BT_D4M3(start)]; /* start/4 * 3 */ - count = BT_D4M3(start + ncolors - 1) - BT_D4M3(start) + 3; - bt = sc->sc_bt; - bt->bt_addr = BT_D4M4(start); - while (--count >= 0) - bt->bt_cmap = *ip++; + volatile struct amd_regs *ar = sc->sc_va_cmap; + int i; + + if ((on == 0) && (sc->sc_blanked == 0)) { + /* Turn OFF video (make it blank). */ + sc->sc_blanked = 1; + /* Load fake "all zero" colormap. */ + for (i = 0; i < 256; i++) { + ar->r[i] = 0; + ar->g[i] = 0; + ar->b[i] = 0; + } + } + + if ((on != 0) && (sc->sc_blanked != 0)) { + /* Turn video back ON (unblank). */ + sc->sc_blanked = 0; + /* Restore normal colormap. */ + cg4a_ldcmap(sc); + } } + + +/**************************************************************** + * Routines for the "Type B" hardware + ****************************************************************/ + +static void +cg4b_init(sc) + struct cg4_softc *sc; +{ + volatile struct bt_regs *bt = sc->sc_va_cmap; + struct soft_cmap *cm = &sc->sc_cmap; + union bt_cmap *btcm = sc->sc_btcm; + int i; + + /* + * BT458 chip initialization as described in Brooktree's + * 1993 Graphics and Imaging Product Databook (DB004-1/93). + */ + bt->bt_addr = 0x04; /* select read mask register */ + bt->bt_ctrl = 0xff; /* all planes on */ + bt->bt_addr = 0x05; /* select blink mask register */ + bt->bt_ctrl = 0x00; /* all planes non-blinking */ + bt->bt_addr = 0x06; /* select command register */ + bt->bt_ctrl = 0x43; /* palette enabled, overlay planes enabled */ + bt->bt_addr = 0x07; /* select test register */ + bt->bt_ctrl = 0x00; /* set test mode */ + + /* grab initial (current) color map */ + bt->bt_addr = 0; + for (i = 0; i < (256 * 3 / 4); i++) { + btcm->cm_chip[i] = bt->bt_cmap; + } + + /* Transpose into S/W form. */ + for (i = 0; i < 256; i++) { + cm->r[i] = btcm->cm_map[i][0]; + cm->g[i] = btcm->cm_map[i][1]; + cm->b[i] = btcm->cm_map[i][2]; + } +} + +static void +cg4b_ldcmap(sc) + struct cg4_softc *sc; +{ + volatile struct bt_regs *bt = sc->sc_va_cmap; + struct soft_cmap *cm = &sc->sc_cmap; + union bt_cmap *btcm = sc->sc_btcm; + int i; + + /* + * Now blast them into the chip! + * XXX Should use retrace interrupt! + * Just set a "need load" bit and let the + * retrace interrupt handler do the work. + */ + + /* Transpose into H/W form. */ + for (i = 0; i < 256; i++) { + btcm->cm_map[i][0] = cm->r[i]; + btcm->cm_map[i][1] = cm->g[i]; + btcm->cm_map[i][2] = cm->b[i]; + } + + bt->bt_addr = 0; + for (i = 0; i < (256 * 3 / 4); i++) { + bt->bt_cmap = btcm->cm_chip[i]; + } +} + +static void +cg4b_svideo(sc, on) + struct cg4_softc *sc; + int on; +{ + volatile struct bt_regs *bt = sc->sc_va_cmap; + int i; + + if ((on == 0) && (sc->sc_blanked == 0)) { + /* Turn OFF video (make it blank). */ + sc->sc_blanked = 1; + /* Load fake "all zero" colormap. */ + bt->bt_addr = 0; + for (i = 0; i < (256 * 3 / 4); i++) + bt->bt_cmap = 0; + } + + if ((on != 0) && (sc->sc_blanked != 0)) { + /* Turn video back ON (unblank). */ + sc->sc_blanked = 0; + /* Restore normal colormap. */ + cg4b_ldcmap(sc); + } +} + diff --git a/sys/arch/sun3/dev/cg4reg.h b/sys/arch/sun3/dev/cg4reg.h index 26627597489..51ec9638bd3 100644 --- a/sys/arch/sun3/dev/cg4reg.h +++ b/sys/arch/sun3/dev/cg4reg.h @@ -1,4 +1,4 @@ -/* $NetBSD: cg4reg.h,v 1.2 1995/04/07 02:47:40 gwr Exp $ */ +/* $NetBSD: cg4reg.h,v 1.3 1996/10/29 19:54:21 gwr Exp $ */ /* * Copyright (c) 1992, 1993 @@ -44,20 +44,51 @@ * @(#)cgthreereg.h 8.2 (Berkeley) 10/30/93 */ -/* Size that can be mapped. */ +/* + * Size that can be mapped (user-level mmap). + */ #define CG4_OVERLAY_SIZE 0x20000 /* size of overlay plane */ #define CG4_ENABLE_SIZE 0x20000 /* size of enable plane */ #define CG4_PIXMAP_SIZE 0x100000 /* size of frame buffer */ -#define CG4_MMAP_SIZE 0x140000 /* total mapping size */ + +/* number of colormap entries */ +#define CG4_CMAP_ENTRIES 256 + +/* + * There are two kinds of cg4 hardware: + * "Type A" has a AMD DACs (Digital-to-Analog Converters) + * "Type B" has a Brooktree DACs. H/W addresses differ too. + */ +#define CG4_TYPE_A 0 +#define CG4_TYPE_B 1 + +/* + * Memory layout of the Type A hardware (OBMEM) + */ +#define CG4A_DEF_BASE 0xFE400000 /* Sun3/110 */ +#define CG4A_OFF_ENABLE 0 +#define CG4A_OFF_PIXMAP 0x400000 +#define CG4A_OFF_OVERLAY 0xC00000 +#define CG4A_OBIO_CMAP 0x0E0000 /* OBIO space! */ + +/* colormap/status register structure */ +struct amd_regs { + u_char r[CG4_CMAP_ENTRIES]; + u_char g[CG4_CMAP_ENTRIES]; + u_char b[CG4_CMAP_ENTRIES]; + u_char status; +#define CG4A_STATUS_FIRSTHALF 0x80 +#define CG4A_STATUS_TOOLATE 0x40 +}; /* - * cgthree display registers. Much like bwtwo registers, except that - * there is a Brooktree Video DAC in there (so we also use btreg.h). + * Memory layout of the Type B hardware (OBMEM) + * Appears on the Sun3/60 at base 0xFF200000 */ +#define CG4B_DEF_BASE 0xFF200000 /* Sun3/60 */ +#define CG4B_OFF_CMAP 0 +#define CG4B_OFF_OVERLAY 0x200000 +#define CG4B_OFF_ENABLE 0x400000 +#define CG4B_OFF_PIXMAP 0x600000 -/* offsets (i.e. from 0xFF200000) */ -#define CG4REG_CMAP 0 -#define CG4REG_OVERLAY 0x200000 -#define CG4REG_ENABLE 0x400000 -#define CG4REG_PIXMAP 0x600000 diff --git a/sys/arch/sun3/dev/fbvar.h b/sys/arch/sun3/dev/fbvar.h index 8e5b3598519..aae60c99151 100644 --- a/sys/arch/sun3/dev/fbvar.h +++ b/sys/arch/sun3/dev/fbvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: fbvar.h,v 1.2 1995/04/07 02:51:21 gwr Exp $ */ +/* $NetBSD: fbvar.h,v 1.3 1996/10/29 19:27:37 gwr Exp $ */ /* * Copyright (c) 1992, 1993 @@ -78,6 +78,6 @@ struct fbdriver { int (*fbd_putcmap) __P((struct fbdevice *, struct fbcmap *)); }; -void fbattach __P((struct fbdevice *, int)); +void fb_attach __P((struct fbdevice *, int)); int fbioctlfb __P((struct fbdevice *, u_long, caddr_t)); extern int enoioctl(); diff --git a/sys/arch/sun3/dev/idprom.c b/sys/arch/sun3/dev/idprom.c index 7dd09171120..70c9d2f2892 100644 --- a/sys/arch/sun3/dev/idprom.c +++ b/sys/arch/sun3/dev/idprom.c @@ -1,9 +1,12 @@ -/* $NetBSD: idprom.c,v 1.12 1996/03/26 15:16:09 gwr Exp $ */ +/* $NetBSD: idprom.c,v 1.13 1996/11/20 18:56:50 gwr Exp $ */ -/* - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -14,20 +17,23 @@ * 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 authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* diff --git a/sys/arch/sun3/dev/if_ie.c b/sys/arch/sun3/dev/if_ie.c index 2ab99bc4a20..32f52c05e8f 100644 --- a/sys/arch/sun3/dev/if_ie.c +++ b/sys/arch/sun3/dev/if_ie.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_ie.c,v 1.12 1996/05/09 21:15:47 thorpej Exp $ */ +/* $NetBSD: if_ie.c,v 1.15 1996/10/30 00:24:33 gwr Exp $ */ /*- * Copyright (c) 1993, 1994, 1995 Charles Hannum. @@ -269,7 +269,7 @@ ie_attach(sc) int off; /* MD code has done its part before calling this. */ - printf(" hwaddr %s\n", ether_sprintf(sc->sc_addr)); + printf(": hwaddr %s\n", ether_sprintf(sc->sc_addr)); /* Allocate from end of buffer space for ISCP, SCB */ off = sc->buf_area_sz; diff --git a/sys/arch/sun3/dev/if_ie_obio.c b/sys/arch/sun3/dev/if_ie_obio.c index a163ea497ab..76307fa0c92 100644 --- a/sys/arch/sun3/dev/if_ie_obio.c +++ b/sys/arch/sun3/dev/if_ie_obio.c @@ -1,9 +1,12 @@ -/* $NetBSD: if_ie_obio.c,v 1.2 1996/03/26 22:04:19 gwr Exp $ */ +/* $NetBSD: if_ie_obio.c,v 1.6 1996/11/20 18:56:51 gwr Exp $ */ -/* - * Copyright (c) 1994 Gordon W. Ross +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -14,20 +17,23 @@ * 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 Gordon Ross - * 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 product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -84,28 +90,16 @@ ie_obio_match(parent, vcf, args) { struct cfdata *cf = vcf; struct confargs *ca = args; - int pa, x; -#ifdef DIAGNOSTIC - if (ca->ca_bustype != BUS_OBIO) { - printf("ie_obio_match: bustype %d?\n", ca->ca_bustype); + /* Make sure there is something there... */ + if (bus_peek(ca->ca_bustype, ca->ca_paddr, 1) == -1) return (0); - } -#endif - /* - * OBIO match functions may be called for every possible - * physical address, so match only our physical address. - */ - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_INTEL_ETHER; - } - if (pa != ca->ca_paddr) - return (0); + /* Default interrupt priority. */ + if (ca->ca_intpri == -1) + ca->ca_intpri = 3; - x = bus_peek(ca->ca_bustype, ca->ca_paddr, 1); - return (x != -1); + return (1); } void @@ -117,12 +111,6 @@ ie_obio_attach(parent, self, args) struct ie_softc *sc = (void *) self; struct cfdata *cf = self->dv_cfdata; struct confargs *ca = args; - int intpri; - - /* Default interrupt level. */ - if ((intpri = cf->cf_intpri) == -1) - intpri = 3; - printf(" level %d", intpri); sc->hard_type = IE_OBIO; sc->reset_586 = ie_obreset; @@ -177,7 +165,7 @@ ie_obio_attach(parent, self, args) ie_attach(sc); /* Install interrupt handler. */ - isr_add_autovect(ie_intr, (void *)sc, intpri); + isr_add_autovect(ie_intr, (void *)sc, ca->ca_intpri); } diff --git a/sys/arch/sun3/dev/if_le.c b/sys/arch/sun3/dev/if_le.c index 63d008828e7..c4ae12b0394 100644 --- a/sys/arch/sun3/dev/if_le.c +++ b/sys/arch/sun3/dev/if_le.c @@ -1,12 +1,11 @@ -/* $NetBSD: if_le.c,v 1.29 1996/05/07 01:32:31 thorpej Exp $ */ +/* $NetBSD: if_le.c,v 1.33 1996/11/20 18:56:52 gwr Exp $ */ /*- - * Copyright (c) 1995 Charles M. Hannum. All rights reserved. - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. + * Copyright (c) 1996 The NetBSD Foundation, Inc. + * All rights reserved. * - * This code is derived from software contributed to Berkeley by - * Ralph Campbell and Rick Macklem. + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -18,25 +17,23 @@ * 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 product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE 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. - * - * @(#)if_le.c 8.2 (Berkeley) 11/16/93 + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ #include "bpfilter.h" @@ -65,8 +62,24 @@ #include <dev/ic/am7990reg.h> #include <dev/ic/am7990var.h> -#include <sun3/dev/if_lereg.h> -#include <sun3/dev/if_levar.h> +/* + * LANCE registers. + * The real stuff is in dev/ic/am7990reg.h + */ +struct lereg1 { + volatile u_int16_t ler1_rdp; /* data port */ + volatile u_int16_t ler1_rap; /* register select port */ +}; + +/* + * Ethernet software status per interface. + * The real stuff is in dev/ic/am7990var.h + */ +struct le_softc { + struct am7990_softc sc_am7990; /* glue to MI code */ + + struct lereg1 *sc_r1; /* LANCE registers */ +}; static int le_match __P((struct device *, void *, void *)); static void le_attach __P((struct device *, struct device *, void *)); @@ -109,22 +122,16 @@ le_match(parent, vcf, aux) { struct cfdata *cf = vcf; struct confargs *ca = aux; - int pa, x; - - /* - * OBIO match functions may be called for every possible - * physical address, so match only our physical address. - */ - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_AMD_ETHER; - } - if (pa != ca->ca_paddr) + + /* Make sure there is something there... */ + if (bus_peek(ca->ca_bustype, ca->ca_paddr, 1) == -1) return (0); - /* The peek returns -1 on bus error. */ - x = bus_peek(ca->ca_bustype, ca->ca_paddr, 1); - return (x != -1); + /* Default interrupt priority. */ + if (ca->ca_intpri == -1) + ca->ca_intpri = 3; + + return (1); } void @@ -136,12 +143,6 @@ le_attach(parent, self, aux) struct am7990_softc *sc = &lesc->sc_am7990; struct cfdata *cf = self->dv_cfdata; struct confargs *ca = aux; - int intpri; - - /* Default interrupt level. */ - if ((intpri = cf->cf_intpri) == -1) - intpri = 3; - printf(" level %d", intpri); lesc->sc_r1 = (struct lereg1 *) obio_alloc(ca->ca_paddr, OBIO_AMD_ETHER_SIZE); @@ -166,5 +167,5 @@ le_attach(parent, self, aux) am7990_config(sc); /* Install interrupt handler. */ - isr_add_autovect(am7990_intr, (void *)sc, intpri); + isr_add_autovect(am7990_intr, (void *)sc, ca->ca_intpri); } diff --git a/sys/arch/sun3/dev/kd.c b/sys/arch/sun3/dev/kd.c index 6f7c9664570..c3326cc689a 100644 --- a/sys/arch/sun3/dev/kd.c +++ b/sys/arch/sun3/dev/kd.c @@ -1,9 +1,12 @@ -/* $NetBSD: kd.c,v 1.17 1996/06/15 14:58:02 gwr Exp $ */ +/* $NetBSD: kd.c,v 1.21 1996/11/20 18:56:55 gwr Exp $ */ -/* - * Copyright (c) 1994, 1995 Gordon W. Ross +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -12,22 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -259,7 +265,7 @@ kdparam(tp, t) } -int +void kdstop(tp, flag) struct tty *tp; int flag; diff --git a/sys/arch/sun3/dev/memerr.c b/sys/arch/sun3/dev/memerr.c index e71b10f4c7a..676aef73f96 100644 --- a/sys/arch/sun3/dev/memerr.c +++ b/sys/arch/sun3/dev/memerr.c @@ -1,4 +1,4 @@ -/* $NetBSD: memerr.c,v 1.2 1996/04/07 05:47:28 gwr Exp $ */ +/* $NetBSD: memerr.c,v 1.6 1996/11/13 07:05:14 thorpej Exp $ */ /* * Copyright (c) 1992, 1993 @@ -92,22 +92,20 @@ memerr_match(parent, vcf, args) { struct cfdata *cf = vcf; struct confargs *ca = args; - int pa, x; /* This driver only supports one unit. */ if (cf->cf_unit != 0) return (0); - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_MEMERR; - } - if (pa != ca->ca_paddr) + /* The peek returns -1 on bus error. */ + if (bus_peek(ca->ca_bustype, ca->ca_paddr, 1) == -1) return (0); - /* The peek returns -1 on bus error. */ - x = bus_peek(ca->ca_bustype, ca->ca_paddr, 1); - return (x != -1); + /* Default interrupt priority. */ + if (ca->ca_intpri == -1) + ca->ca_intpri = ME_PRI; + + return (1); } static void @@ -120,12 +118,6 @@ memerr_attach(parent, self, args) struct confargs *ca = args; struct memerr *mer; - mer = (struct memerr *) - obio_alloc(ca->ca_paddr, sizeof(*mer)); - if (mer == NULL) - panic(": can not map register"); - sc->sc_reg = mer; - /* * Which type of memory subsystem do we have? */ @@ -143,11 +135,17 @@ memerr_attach(parent, self, args) sc->sc_csrbits = ME_PAR_STR; break; } + printf(": (%s memory)\n", sc->sc_typename); - printf(" (%s memory)\n", sc->sc_typename); + mer = (struct memerr *) + obio_alloc(ca->ca_paddr, sizeof(*mer)); + if (mer == NULL) + panic("memerr: can not map register"); + sc->sc_reg = mer; /* Install interrupt handler. */ - isr_add_autovect(memerr_interrupt, (void *)sc, ME_PRI); + isr_add_autovect(memerr_interrupt, + (void *)sc, ca->ca_intpri); /* Enable error interrupt (and checking). */ if (sc->sc_type == ME_PAR) @@ -175,6 +173,7 @@ memerr_interrupt(arg) u_char csr, ctx, err; u_int pa, va; int pte; + char bits[64]; csr = me->me_csr; if ((csr & ME_CSR_IPEND) == 0) @@ -190,7 +189,8 @@ memerr_interrupt(arg) (ctx & 8) ? "DVMA" : "CPU"); printf(" ctx=%d, vaddr=0x%x, paddr=0x%x\n", (ctx & 7), va, pa); - printf(" csr=%b\n", csr, sc->sc_csrbits); + printf(" csr=%s\n", bitmask_snprintf(csr, sc->sc_csrbits, + bits, sizeof(bits))); /* * If we have parity-checked memory, there is diff --git a/sys/arch/sun3/dev/obio.c b/sys/arch/sun3/dev/obio.c index 8573ec2ef7a..c015d61116c 100644 --- a/sys/arch/sun3/dev/obio.c +++ b/sys/arch/sun3/dev/obio.c @@ -1,10 +1,12 @@ -/* $NetBSD: obio.c,v 1.18 1996/03/26 15:16:14 gwr Exp $ */ +/* $NetBSD: obio.c,v 1.23 1996/11/20 18:56:56 gwr Exp $ */ -/* - * Copyright (c) 1994 Gordon W. Ross - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -15,20 +17,23 @@ * 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 and Gordon Ross. - * 4. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/param.h> @@ -43,7 +48,8 @@ static int obio_match __P((struct device *, void *, void *)); static void obio_attach __P((struct device *, struct device *, void *)); -static int obio_print __P((void *, char *parentname)); +static int obio_print __P((void *, const char *parentname)); +static int obio_submatch __P((struct device *, void *, void *)); struct cfattach obio_ca = { sizeof(struct device), obio_match, obio_attach @@ -87,7 +93,7 @@ obio_attach(parent, self, aux) ca->ca_intpri = -1; ca->ca_intvec = -1; - (void) config_found(self, ca, obio_print); + (void) config_found_sm(self, ca, obio_print, obio_submatch); } } @@ -98,7 +104,7 @@ obio_attach(parent, self, aux) static int obio_print(args, name) void *args; - char *name; + const char *name; { struct confargs *ca = args; @@ -106,11 +112,41 @@ obio_print(args, name) if (name) return(QUIET); - printf(" addr 0x%x", ca->ca_paddr); + if (ca->ca_paddr != -1) + printf(" addr 0x%x", ca->ca_paddr); + if (ca->ca_intpri != -1) + printf(" level %d", ca->ca_intpri); return(UNCONF); } +int +obio_submatch(parent, vcf, aux) + struct device *parent; + void *vcf, *aux; +{ + struct cfdata *cf = vcf; + struct confargs *ca = aux; + cfmatch_t submatch; + + /* + * Default addresses are mostly useless for OBIO. + * The address assignments are fixed for all time, + * so our config files might as well reflect that. + */ + if (cf->cf_paddr != ca->ca_paddr) + return 0; + + /* Now call the match function of the potential child. */ + submatch = cf->cf_attach->ca_match; + if (submatch == NULL) + panic("obio_submatch: no match function for: %s\n", + cf->cf_driver->cd_name); + + return ((*submatch)(parent, vcf, aux)); +} + + /*****************************************************************/ /* diff --git a/sys/arch/sun3/dev/si.c b/sys/arch/sun3/dev/si.c index 0bf52d046bc..3047596157e 100644 --- a/sys/arch/sun3/dev/si.c +++ b/sys/arch/sun3/dev/si.c @@ -1,10 +1,12 @@ -/* $NetBSD: si.c,v 1.25 1996/06/17 23:21:29 gwr Exp $ */ +/* $NetBSD: si.c,v 1.31 1996/11/20 18:56:59 gwr Exp $ */ -/* - * Copyright (c) 1995 David Jones, Gordon W. Ross - * Copyright (c) 1994 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass, David Jones, and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -13,23 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by - * Adam Glass, David Jones, and Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -99,6 +103,12 @@ #include "sireg.h" #include "sivar.h" +/* + * Transfers smaller than this are done using PIO + * (on assumption they're not worth DMA overhead) + */ +#define MIN_DMA_LEN 128 + int si_debug = 0; #ifdef DEBUG static int si_link_flags = 0 /* | SDEV_DB2 */ ; @@ -108,7 +118,6 @@ static int si_link_flags = 0 /* | SDEV_DB2 */ ; int si_dma_intr_timo = 500; /* ticks (sec. X 100) */ static void si_minphys __P((struct buf *)); -static int si_print __P((void *, char *)); static struct scsi_adapter si_ops = { ncr5380_scsi_cmd, /* scsi_cmd() */ @@ -145,8 +154,25 @@ si_attach(sc) int i; /* + * Support the "options" (config file flags). + */ + if ((sc->sc_options & SI_DO_RESELECT) != 0) + ncr_sc->sc_flags |= NCR5380_PERMIT_RESELECT; + if ((sc->sc_options & SI_DMA_INTR) == 0) + ncr_sc->sc_flags |= NCR5380_FORCE_POLLING; +#if 1 /* XXX - Temporary */ + /* XXX - In case we think DMA is completely broken... */ + if ((sc->sc_options & SI_ENABLE_DMA) == 0) { + /* Override this function pointer. */ + ncr_sc->sc_dma_alloc = NULL; + } +#endif + ncr_sc->sc_min_dma_len = MIN_DMA_LEN; + + /* * Fill in the prototype scsi_link. */ + ncr_sc->sc_link.channel = SCSI_CHANNEL_ONLY_ONE; ncr_sc->sc_link.adapter_softc = sc; ncr_sc->sc_link.adapter_target = 7; ncr_sc->sc_link.adapter = &si_ops; @@ -187,17 +213,7 @@ si_attach(sc) si_reset_adapter(ncr_sc); ncr5380_init(ncr_sc); ncr5380_reset_scsibus(ncr_sc); - config_found(&(ncr_sc->sc_dev), &(ncr_sc->sc_link), si_print); -} - -static int -si_print(aux, name) - void *aux; - char *name; -{ - if (name != NULL) - printf("%s: scsibus ", name); - return UNCONF; + config_found(&(ncr_sc->sc_dev), &(ncr_sc->sc_link), scsiprint); } static void diff --git a/sys/arch/sun3/dev/si_obio.c b/sys/arch/sun3/dev/si_obio.c index 61c073f81a6..793c0a3b26c 100644 --- a/sys/arch/sun3/dev/si_obio.c +++ b/sys/arch/sun3/dev/si_obio.c @@ -1,10 +1,12 @@ -/* $NetBSD: si_obio.c,v 1.2 1996/06/17 23:21:35 gwr Exp $ */ +/* $NetBSD: si_obio.c,v 1.7 1996/11/20 18:57:00 gwr Exp $ */ -/* - * Copyright (c) 1995 David Jones, Gordon W. Ross - * Copyright (c) 1994 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass, David Jones, and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -13,23 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by - * Adam Glass, David Jones, and Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -128,9 +132,6 @@ struct cfattach si_obio_ca = { /* Options. Interesting values are: 1,3,7 */ /* XXX: Using 1 for now to mask a (pmap?) bug not yet found... */ int si_obio_options = 1; /* XXX */ -#define SI_ENABLE_DMA 1 /* Use DMA (maybe polled) */ -#define SI_DMA_INTR 2 /* DMA completion interrupts */ -#define SI_DO_RESELECT 4 /* Allow disconnect/reselect */ static int @@ -140,38 +141,16 @@ si_obio_match(parent, vcf, args) { struct cfdata *cf = vcf; struct confargs *ca = args; - int pa, x; - -#ifdef DIAGNOSTIC - if (ca->ca_bustype != BUS_OBIO) { - printf("si_obio_match: bustype %d?\n", ca->ca_bustype); - return (0); - } -#endif - /* - * OBIO match functions may be called for every possible - * physical address, so match only our physical address. - */ - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_NCR_SCSI; - } - if (pa != ca->ca_paddr) + /* Make sure there is something there... */ + if (bus_peek(ca->ca_bustype, ca->ca_paddr + 1, 1) == -1) return (0); -#if 0 - if ((cpu_machine_id != SUN3_MACH_50) && - (cpu_machine_id != SUN3_MACH_60) ) - { - /* Only 3/50 and 3/60 have the obio si. */ - return (0); - } -#endif + /* Default interrupt priority. */ + if (ca->ca_intpri == -1) + ca->ca_intpri = 2; - /* Make sure there is something there... */ - x = bus_peek(ca->ca_bustype, ca->ca_paddr + 1, 1); - return (x != -1); + return (1); } static void @@ -183,21 +162,10 @@ si_obio_attach(parent, self, args) struct ncr5380_softc *ncr_sc = &sc->ncr_sc; struct cfdata *cf = self->dv_cfdata; struct confargs *ca = args; - int intpri; - - /* Default interrupt level. */ - if ((intpri = cf->cf_intpri) == -1) - intpri = 2; - printf(" level %d", intpri); - /* XXX: Get options from flags... */ - printf(" : options=%d\n", si_obio_options); - - ncr_sc->sc_flags = 0; - if (si_obio_options & SI_DO_RESELECT) - ncr_sc->sc_flags |= NCR5380_PERMIT_RESELECT; - if ((si_obio_options & SI_DMA_INTR) == 0) - ncr_sc->sc_flags |= NCR5380_FORCE_POLLING; + /* Get options from config flags... */ + sc->sc_options = cf->cf_flags | si_obio_options; + printf(": options=%d\n", sc->sc_options); sc->sc_adapter_type = ca->ca_bustype; sc->sc_regs = (struct si_regs *) @@ -218,21 +186,11 @@ si_obio_attach(parent, self, args) ncr_sc->sc_intr_on = NULL; ncr_sc->sc_intr_off = NULL; - ncr_sc->sc_min_dma_len = MIN_DMA_LEN; - -#if 1 /* XXX - Temporary */ - /* XXX - In case we think DMA is completely broken... */ - if ((si_obio_options & SI_ENABLE_DMA) == 0) { - /* Override this function pointer. */ - ncr_sc->sc_dma_alloc = NULL; - } -#endif - /* Need DVMA-capable memory for the UDC command block. */ sc->sc_dmacmd = dvma_malloc(sizeof (struct udc_table)); /* Attach interrupt handler. */ - isr_add_autovect(si_intr, (void *)sc, intpri); + isr_add_autovect(si_intr, (void *)sc, ca->ca_intpri); /* Do the common attach stuff. */ si_attach(sc); diff --git a/sys/arch/sun3/dev/si_vme.c b/sys/arch/sun3/dev/si_vme.c index d29bc905ee3..3b94011b255 100644 --- a/sys/arch/sun3/dev/si_vme.c +++ b/sys/arch/sun3/dev/si_vme.c @@ -1,10 +1,12 @@ -/* $NetBSD: si_vme.c,v 1.2 1996/06/17 23:21:39 gwr Exp $ */ +/* $NetBSD: si_vme.c,v 1.7 1996/11/20 18:57:01 gwr Exp $ */ -/* - * Copyright (c) 1995 David Jones, Gordon W. Ross - * Copyright (c) 1994 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass, David Jones, and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -13,23 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by - * Adam Glass, David Jones, and Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -103,12 +107,6 @@ #include "sireg.h" #include "sivar.h" -/* - * Transfers smaller than this are done using PIO - * (on assumption they're not worth DMA overhead) - */ -#define MIN_DMA_LEN 128 - void si_vme_dma_setup __P((struct ncr5380_softc *)); void si_vme_dma_start __P((struct ncr5380_softc *)); void si_vme_dma_eop __P((struct ncr5380_softc *)); @@ -130,9 +128,6 @@ struct cfattach si_vmes_ca = { /* Options. Interesting values are: 1,3,7 */ int si_vme_options = 3; -#define SI_ENABLE_DMA 1 /* Use DMA (maybe polled) */ -#define SI_DMA_INTR 2 /* DMA completion interrupts */ -#define SI_DO_RESELECT 4 /* Allow disconnect/reselect */ static int @@ -142,7 +137,7 @@ si_vmes_match(parent, vcf, args) { struct cfdata *cf = vcf; struct confargs *ca = args; - int x, probe_addr; + int probe_addr; #ifdef DIAGNOSTIC if (ca->ca_bustype != BUS_VME16) { @@ -151,13 +146,6 @@ si_vmes_match(parent, vcf, args) } #endif - if ((cpu_machine_id == SUN3_MACH_50) || - (cpu_machine_id == SUN3_MACH_60) ) - { - /* Sun3/50 or Sun3/60 do not have VME. */ - return(0); - } - /* * Other Sun3 models may have VME "si" or "sc". * This driver has no default address. @@ -165,13 +153,9 @@ si_vmes_match(parent, vcf, args) if (ca->ca_paddr == -1) return (0); - /* Default interrupt priority always splbio==2 */ - if (ca->ca_intpri == -1) - ca->ca_intpri = 2; - /* Make sure there is something there... */ - x = bus_peek(ca->ca_bustype, ca->ca_paddr + 1, 1); - if (x == -1) + probe_addr = ca->ca_paddr + 1; + if (bus_peek(ca->ca_bustype, probe_addr, 1) == -1) return (0); /* @@ -181,8 +165,8 @@ si_vmes_match(parent, vcf, args) * 4K bytes in VME space but the "si" board occupies 2K bytes. */ /* Note: the "si" board should NOT respond here. */ - x = bus_peek(ca->ca_bustype, ca->ca_paddr + 0x801, 1); - if (x != -1) { + probe_addr = ca->ca_paddr + 0x801; + if (bus_peek(ca->ca_bustype, probe_addr, 1) != -1) { /* Something responded at 2K+1. Maybe an "sc" board? */ #ifdef DEBUG printf("si_vmes_match: May be an `sc' board at pa=0x%x\n", @@ -191,9 +175,12 @@ si_vmes_match(parent, vcf, args) return(0); } - return (1); -} + /* Default interrupt priority (always splbio==2) */ + if (ca->ca_intpri == -1) + ca->ca_intpri = 2; + return (1); +} static void si_vmes_attach(parent, self, args) @@ -201,33 +188,26 @@ si_vmes_attach(parent, self, args) void *args; { struct si_softc *sc = (struct si_softc *) self; - struct ncr5380_softc *ncr_sc = (struct ncr5380_softc *)sc; + struct ncr5380_softc *ncr_sc = &sc->ncr_sc; + struct cfdata *cf = self->dv_cfdata; struct confargs *ca = args; - int s; - /* XXX: Get options from flags... */ - printf(" : options=%d\n", si_vme_options); - - ncr_sc->sc_flags = 0; - if (si_vme_options & SI_DO_RESELECT) - ncr_sc->sc_flags |= NCR5380_PERMIT_RESELECT; - if ((si_vme_options & SI_DMA_INTR) == 0) - ncr_sc->sc_flags |= NCR5380_FORCE_POLLING; + /* Get options from config flags... */ + sc->sc_options = cf->cf_flags | si_vme_options; + printf(": options=%d\n", sc->sc_options); sc->sc_adapter_type = ca->ca_bustype; - sc->sc_adapter_iv_am = - VME_SUPV_DATA_24 | (ca->ca_intvec & 0xFF); - sc->sc_regs = (struct si_regs *) bus_mapin(ca->ca_bustype, ca->ca_paddr, sizeof(struct si_regs)); + sc->sc_adapter_iv_am = + VME_SUPV_DATA_24 | (ca->ca_intvec & 0xFF); /* * MD function pointers used by the MI code. */ ncr_sc->sc_pio_out = ncr5380_pio_out; ncr_sc->sc_pio_in = ncr5380_pio_in; - ncr_sc->sc_dma_alloc = si_dma_alloc; ncr_sc->sc_dma_free = si_dma_free; ncr_sc->sc_dma_setup = si_vme_dma_setup; @@ -238,16 +218,6 @@ si_vmes_attach(parent, self, args) ncr_sc->sc_intr_on = si_vme_intr_on; ncr_sc->sc_intr_off = si_vme_intr_off; - ncr_sc->sc_min_dma_len = MIN_DMA_LEN; - -#if 1 /* XXX - Temporary */ - /* XXX - In case we think DMA is completely broken... */ - if ((si_vme_options & SI_ENABLE_DMA) == 0) { - /* Override this function pointer. */ - ncr_sc->sc_dma_alloc = NULL; - } -#endif - /* Attach interrupt handler. */ isr_add_vectored(si_intr, (void *)sc, ca->ca_intpri, ca->ca_intvec); diff --git a/sys/arch/sun3/dev/sivar.h b/sys/arch/sun3/dev/sivar.h index 1bbaee4b7b3..fea6c6343fc 100644 --- a/sys/arch/sun3/dev/sivar.h +++ b/sys/arch/sun3/dev/sivar.h @@ -1,9 +1,12 @@ -/* $NetBSD: sivar.h,v 1.1 1996/03/26 15:01:15 gwr Exp $ */ +/* $NetBSD: sivar.h,v 1.3 1996/11/20 18:57:01 gwr Exp $ */ -/* - * Copyright (c) 1995 David Jones, Gordon W. Ross +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass, David Jones, and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -12,23 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by - * David Jones and Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -71,12 +76,19 @@ struct si_softc { volatile struct si_regs *sc_regs; int sc_adapter_type; int sc_adapter_iv_am; /* int. vec + address modifier */ + int sc_options; /* options for this instance */ int sc_reqlen; /* requested transfer length */ struct si_dma_handle *sc_dma; /* DMA command block for the OBIO controller. */ void *sc_dmacmd; }; +/* Options. Interesting values are: 1,3,7 */ +#define SI_ENABLE_DMA 1 /* Use DMA (maybe polled) */ +#define SI_DMA_INTR 2 /* DMA completion interrupts */ +#define SI_DO_RESELECT 4 /* Allow disconnect/reselect */ +/* The options are taken from the config file (PR#1929) */ + extern int si_debug; void si_attach __P((struct si_softc *)); diff --git a/sys/arch/sun3/dev/xd.c b/sys/arch/sun3/dev/xd.c index d5b8508dd81..103e714239f 100644 --- a/sys/arch/sun3/dev/xd.c +++ b/sys/arch/sun3/dev/xd.c @@ -1,4 +1,4 @@ -/* $NetBSD: xd.c,v 1.7 1996/03/17 02:04:07 thorpej Exp $ */ +/* $NetBSD: xd.c,v 1.10 1996/10/13 03:47:39 christos Exp $ */ /* * @@ -36,7 +36,7 @@ * x d . c x y l o g i c s 7 5 3 / 7 0 5 3 v m e / s m d d r i v e r * * author: Chuck Cranor <chuck@ccrc.wustl.edu> - * id: $NetBSD: xd.c,v 1.7 1996/03/17 02:04:07 thorpej Exp $ + * id: $NetBSD: xd.c,v 1.10 1996/10/13 03:47:39 christos Exp $ * started: 27-Feb-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -101,7 +101,8 @@ * XDC_HWAIT: add iorq "N" to head of SC's wait queue */ #define XDC_HWAIT(SC, N) { \ - (SC)->waithead = ((SC)->waithead - 1) % XDC_MAXIOPB; \ + (SC)->waithead = ((SC)->waithead == 0) ? \ + (XDC_MAXIOPB - 1) : ((SC)->waithead - 1); \ (SC)->waitq[(SC)->waithead] = (N); \ (SC)->nwait++; \ } diff --git a/sys/arch/sun3/dev/zs.c b/sys/arch/sun3/dev/zs.c index c1f66193975..da46ddf06b2 100644 --- a/sys/arch/sun3/dev/zs.c +++ b/sys/arch/sun3/dev/zs.c @@ -1,9 +1,12 @@ -/* $NetBSD: zs.c,v 1.38 1996/06/17 15:17:06 gwr Exp $ */ +/* $NetBSD: zs.c,v 1.42 1996/11/20 18:57:03 gwr Exp $ */ -/* - * Copyright (c) 1995 Gordon W. Ross +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -12,22 +15,25 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * 4. All advertising materials mentioning features or use of this software + * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: - * This product includes software developed by Gordon Ross + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -166,7 +172,7 @@ static u_char zs_init_reg[16] = { /* Definition of the driver for autoconfig. */ static int zsc_match __P((struct device *, void *, void *)); static void zsc_attach __P((struct device *, struct device *, void *)); -static int zsc_print __P((void *, char *name)); +static int zsc_print __P((void *, const char *name)); struct cfattach zsc_ca = { sizeof(struct zsc_softc), zsc_match, zsc_attach @@ -328,7 +334,7 @@ zsc_attach(parent, self, aux) static int zsc_print(aux, name) void *aux; - char *name; + const char *name; { struct zsc_attach_args *args = aux; diff --git a/sys/arch/sun3/include/autoconf.h b/sys/arch/sun3/include/autoconf.h index 88b546db3c6..e1322fc8f12 100644 --- a/sys/arch/sun3/include/autoconf.h +++ b/sys/arch/sun3/include/autoconf.h @@ -1,10 +1,12 @@ -/* $NetBSD: autoconf.h,v 1.10 1996/03/26 15:16:28 gwr Exp $ */ +/* $NetBSD: autoconf.h,v 1.12 1996/11/20 18:57:05 gwr Exp $ */ -/* - * Copyright (c) 1994 Gordon W. Ross - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -15,21 +17,23 @@ * 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 product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY 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 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. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -58,7 +62,7 @@ struct confargs { #define cf_intvec cf_loc[2] int bus_scan __P((struct device *, void *, void *)); -int bus_print __P((void *, char *)); +int bus_print __P((void *, const char *)); int bus_peek __P((int, int, int)); char * bus_mapin __P((int, int, int)); diff --git a/sys/arch/sun3/include/conf.h b/sys/arch/sun3/include/conf.h index 0f2abafae87..62acb7fd7e9 100644 --- a/sys/arch/sun3/include/conf.h +++ b/sys/arch/sun3/include/conf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: conf.h,v 1.1 1996/11/11 23:51:40 kstailey Exp $ */ +/* $OpenBSD: conf.h,v 1.2 1996/11/23 07:55:02 kstailey Exp $ */ /*- * Copyright (c) 1996 Kenneth Stailey. All rights reserved. @@ -37,7 +37,6 @@ bdev_decl(rd); bdev_decl(sw); cdev_decl(sw); -#include "xd.h" bdev_decl(xd); cdev_decl(xd); @@ -45,7 +44,6 @@ cdev_decl(xd); bdev_decl(xt); cdev_decl(xt); -#include "xy.h" bdev_decl(xy); cdev_decl(xy); @@ -61,18 +59,10 @@ dev_decl(filedesc,open); #define mmwrite mmrw cdev_decl(mm); -#define NZS 2 /* XXX: temporary hack */ cdev_decl(zs); -cdev_decl(kd); cdev_decl(ms); cdev_decl(kbd); - -/* XXX - Should make keyboard/mouse real children of zs. */ -#if NZS > 1 -#define NKD 1 -#else -#define NKD 0 -#endif +cdev_decl(kd); /* frame-buffer devices */ cdev_decl(fb); diff --git a/sys/arch/sun3/include/float.h b/sys/arch/sun3/include/float.h index 2f63ec177d8..42445f4b723 100644 --- a/sys/arch/sun3/include/float.h +++ b/sys/arch/sun3/include/float.h @@ -1,8 +1,3 @@ -/* $NetBSD: float.h,v 1.6 1995/06/20 20:45:55 jtc Exp $ */ - -#ifndef _MACHINE_FLOAT_H_ -#define _MACHINE_FLOAT_H_ +/* $NetBSD: float.h,v 1.7 1996/11/20 18:57:09 gwr Exp $ */ #include <m68k/float.h> - -#endif diff --git a/sys/arch/sun3/include/ieeefp.h b/sys/arch/sun3/include/ieeefp.h index f0fadb000fd..6c1243b25ab 100644 --- a/sys/arch/sun3/include/ieeefp.h +++ b/sys/arch/sun3/include/ieeefp.h @@ -1,4 +1,3 @@ -/* $NetBSD: ieeefp.h,v 1.2 1995/04/16 01:50:45 gwr Exp $ */ +/* $NetBSD: ieeefp.h,v 1.3 1996/11/20 18:57:11 gwr Exp $ */ -/* Just use the common m68k definition */ #include <m68k/ieeefp.h> diff --git a/sys/arch/sun3/include/obio.h b/sys/arch/sun3/include/obio.h index b348e2e2f7a..e687a5a4206 100644 --- a/sys/arch/sun3/include/obio.h +++ b/sys/arch/sun3/include/obio.h @@ -1,9 +1,12 @@ -/* $NetBSD: obio.h,v 1.14 1996/03/26 15:16:32 gwr Exp $ */ +/* $NetBSD: obio.h,v 1.16 1996/11/20 18:57:14 gwr Exp $ */ -/* - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -14,21 +17,23 @@ * 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 product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY 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 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. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -39,22 +44,22 @@ * */ -#define OBIO_KEYBD_MS 0x00000000 -#define OBIO_ZS 0x00020000 -#define OBIO_EEPROM 0x00040000 -#define OBIO_CLOCK 0x00060000 -#define OBIO_MEMERR 0x00080000 -#define OBIO_INTERREG 0x000A0000 -#define OBIO_INTEL_ETHER 0x000C0000 -#define OBIO_COLOR_MAP 0x000E0000 -#define OBIO_EPROM 0x00100000 -#define OBIO_AMD_ETHER 0x00120000 -#define OBIO_NCR_SCSI 0x00140000 -#define OBIO_RESERVED1 0x00160000 -#define OBIO_RESERVED2 0x00180000 -#define OBIO_IOX_BUS 0x001A0000 -#define OBIO_DES 0x001C0000 -#define OBIO_ECCREG 0x001E0000 +#define OBIO_KEYBD_MS 0x000000 +#define OBIO_ZS 0x020000 +#define OBIO_EEPROM 0x040000 +#define OBIO_CLOCK 0x060000 +#define OBIO_MEMERR 0x080000 +#define OBIO_INTERREG 0x0A0000 +#define OBIO_INTEL_ETHER 0x0C0000 +#define OBIO_COLOR_MAP 0x0E0000 +#define OBIO_EPROM 0x100000 +#define OBIO_AMD_ETHER 0x120000 +#define OBIO_NCR_SCSI 0x140000 +#define OBIO_RESERVED1 0x160000 +#define OBIO_RESERVED2 0x180000 +#define OBIO_IOX_BUS 0x1A0000 +#define OBIO_DES 0x1C0000 +#define OBIO_ECCREG 0x1E0000 #define OBIO_KEYBD_MS_SIZE 0x00008 #define OBIO_ZS_SIZE 0x00008 diff --git a/sys/arch/sun3/include/types.h b/sys/arch/sun3/include/types.h index 60b9307473d..db77cff88b8 100644 --- a/sys/arch/sun3/include/types.h +++ b/sys/arch/sun3/include/types.h @@ -1,8 +1,3 @@ -/* $NetBSD: types.h,v 1.7 1995/06/27 14:38:22 gwr Exp $ */ - -#ifndef _MACHINE_TYPES_H_ -#define _MACHINE_TYPES_H_ +/* $NetBSD: types.h,v 1.8 1996/11/20 18:57:21 gwr Exp $ */ #include <m68k/types.h> - -#endif diff --git a/sys/arch/sun3/sun3/autoconf.c b/sys/arch/sun3/sun3/autoconf.c index ce19dabe640..144fa399c65 100644 --- a/sys/arch/sun3/sun3/autoconf.c +++ b/sys/arch/sun3/sun3/autoconf.c @@ -1,10 +1,12 @@ -/* $NetBSD: autoconf.c,v 1.33 1996/04/07 05:45:08 gwr Exp $ */ +/* $NetBSD: autoconf.c,v 1.37 1996/11/20 18:57:22 gwr Exp $ */ -/* - * Copyright (c) 1994 Gordon W. Ross - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -15,20 +17,23 @@ * 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 authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -170,7 +175,7 @@ int bus_scan(parent, child, aux) int bus_print(args, name) void *args; - char *name; + const char *name; { struct confargs *ca = args; diff --git a/sys/arch/sun3/sun3/clock.c b/sys/arch/sun3/sun3/clock.c index eb53ac66222..6517f3bf051 100644 --- a/sys/arch/sun3/sun3/clock.c +++ b/sys/arch/sun3/sun3/clock.c @@ -1,4 +1,4 @@ -/* $NetBSD: clock.c,v 1.28 1996/03/26 15:16:42 gwr Exp $ */ +/* $NetBSD: clock.c,v 1.31 1996/10/30 00:24:42 gwr Exp $ */ /* * Copyright (c) 1994 Gordon W. Ross @@ -102,17 +102,14 @@ clock_match(parent, vcf, args) if (cf->cf_unit != 0) return (0); - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_CLOCK; - } else { - /* Validate the given PA. */ - if (pa != OBIO_CLOCK) - panic("clock: wrong address"); - } - if (pa != ca->ca_paddr) + /* Validate the given address. */ + if (ca->ca_paddr != OBIO_CLOCK) return (0); + /* Default interrupt priority. */ + if (ca->ca_intpri == -1) + ca->ca_intpri = CLOCK_PRI; + return (1); } @@ -124,16 +121,8 @@ clock_attach(parent, self, args) { struct cfdata *cf = self->dv_cfdata; struct confargs *ca = args; - int pri; - - if ((pri = cf->cf_intpri) == -1) { - pri = CLOCK_PRI; - } else { - if (pri != CLOCK_PRI) - panic("clock: level != %d", CLOCK_PRI); - } - printf(" level %d\n", pri); + printf("\n"); /* * Can not hook up the ISR until cpu_initclock() diff --git a/sys/arch/sun3/sun3/conf.c b/sys/arch/sun3/sun3/conf.c index 759a1c5b037..5dce4bfc940 100644 --- a/sys/arch/sun3/sun3/conf.c +++ b/sys/arch/sun3/sun3/conf.c @@ -1,4 +1,4 @@ -/* $NetBSD: conf.c,v 1.48 1996/03/14 21:35:47 christos Exp $ */ +/* $NetBSD: conf.c,v 1.51 1996/11/04 16:16:09 gwr Exp $ */ /*- * Copyright (c) 1994 Adam Glass, Gordon W. Ross @@ -51,6 +51,7 @@ int ttselect __P((dev_t, int, struct proc *)); #include "bpfilter.h" #include "ccd.h" #include "cd.h" +#include "kbd.h" #include "pty.h" #include "rd.h" #include "sd.h" @@ -59,6 +60,9 @@ int ttselect __P((dev_t, int, struct proc *)); #include "tun.h" #include "uk.h" #include "vnd.h" +#include "xd.h" +#include "xy.h" +#include "zstty.h" struct bdevsw bdevsw[] = { @@ -92,7 +96,7 @@ int nblkdev = sizeof(bdevsw) / sizeof(bdevsw[0]); struct cdevsw cdevsw[] = { cdev_cn_init(1,cn), /* 0: virtual console */ - cdev_tty_init(NKD,kd), /* 1: Sun keyboard/display */ + cdev_tty_init(NKBD,kd), /* 1: Sun keyboard/display */ cdev_ctty_init(1,ctty), /* 2: controlling terminal */ cdev_mm_init(1,mm), /* 3: /dev/{null,mem,kmem,...} */ cdev_notdef(), /* 4: was PROM console */ @@ -103,8 +107,8 @@ struct cdevsw cdevsw[] = cdev_disk_init(NXY,xy), /* 9: SMD disk on Xylogics 450/451 */ cdev_notdef(), /* 10: systech multi-terminal board */ cdev_notdef(), /* 11: DES encryption chip */ - cdev_tty_init(NZS,zs), /* 12: Zilog 8350 serial port */ - cdev_mouse_init(NKD,ms), /* 13: Sun mouse */ + cdev_tty_init(NZSTTY,zs), /* 12: Zilog 8350 serial port */ + cdev_mouse_init(NMS,ms), /* 13: Sun mouse */ cdev_notdef(), /* 14: cgone */ cdev_notdef(), /* 15: /dev/winXXX */ cdev_log_init(1,log), /* 16: /dev/klog */ @@ -120,7 +124,7 @@ struct cdevsw cdevsw[] = cdev_notdef(), /* 26: bwone */ cdev_fb_init(NBWTWO,bw2), /* 27: bwtwo */ cdev_notdef(), /* 28: Systech VPC-2200 versatec/centronics */ - cdev_mouse_init(NKD,kbd), /* 29: Sun keyboard */ + cdev_mouse_init(NKBD,kbd), /* 29: Sun keyboard */ cdev_tape_init(NXT,xt), /* 30: Xylogics tape */ cdev_fb_init(NCGTWO,cg2), /* 31: cgtwo */ cdev_notdef(), /* 32: /dev/gpone */ diff --git a/sys/arch/sun3/sun3/disksubr.c b/sys/arch/sun3/sun3/disksubr.c index 42864e70294..6bd75f2917f 100644 --- a/sys/arch/sun3/sun3/disksubr.c +++ b/sys/arch/sun3/sun3/disksubr.c @@ -1,4 +1,4 @@ -/* $NetBSD: disksubr.c,v 1.13 1996/05/05 06:00:31 gwr Exp $ */ +/* $NetBSD: disksubr.c,v 1.14 1996/09/26 18:10:21 gwr Exp $ */ /* * Copyright (c) 1994, 1995 Gordon W. Ross @@ -235,14 +235,14 @@ int bounds_check_with_label(struct buf *bp, struct disklabel *lp, int wlabel) { struct partition *p = lp->d_partitions + dkpart(bp->b_dev); - int labelsect = lp->d_partitions[0].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) + /* XXX PR#2598: labelsect is always sector zero. */ + if (((bp->b_blkno + p->p_offset) <= LABELSECTOR) && + ((bp->b_flags & B_READ) == 0) && (wlabel == 0)) { bp->b_error = EROFS; goto bad; diff --git a/sys/arch/sun3/sun3/genassym.c b/sys/arch/sun3/sun3/genassym.c index a8f40b82db9..dcbee10994d 100644 --- a/sys/arch/sun3/sun3/genassym.c +++ b/sys/arch/sun3/sun3/genassym.c @@ -1,4 +1,4 @@ -/* $NetBSD: genassym.c,v 1.31 1996/02/16 23:36:52 gwr Exp $ */ +/* $NetBSD: genassym.c,v 1.32 1996/10/23 16:39:27 gwr Exp $ */ /* * Copyright (c) 1994, 1995 Gordon W. Ross @@ -60,6 +60,24 @@ #include "interreg.h" #include "buserr.h" +#if 1 /* XXX - Temporary hack... */ +/* + * Make this work correctly on a SPARC! + * Should be able to fix this by adding: + * __attribute__((packed)) where needed. + */ +struct mytrapframe { + int tf_regs[16]; + short tf_pad; + short tf_stackadj; + u_short tf_sr; + u_short tf_pc[2]; /* XXX was: u_int tf_pc; */ + u_short tf_format:4, + tf_vector:12; +}; +#define trapframe mytrapframe +#endif /* XXX */ + #ifdef __STDC__ #define def1(name) def(#name, name) #else @@ -82,7 +100,7 @@ main() struct proc *p = (struct proc *) 0; struct vmspace *vms = (struct vmspace *) 0; struct intersil7170 *intersil_addr = (struct intersil7170 *) 0; - struct frame *fp = (struct frame *) 0; + struct trapframe *tf = (struct trapframe *) 0; struct fpframe *fpf = (struct fpframe *) 0; /* intersil clock internals */ @@ -163,13 +181,13 @@ main() def("PCB_REGS", pcb->pcb_regs); def("PCB_ONFAULT", &pcb->pcb_onfault); def("PCB_FPCTX", &pcb->pcb_fpregs); - def("SIZEOF_PCB", sizeof(struct pcb)); + def("SIZEOF_PCB", sizeof(*pcb)); /* exception frame offset/sizes */ - def("FR_SP", &fp->f_regs[15]); - def("FR_HW", &fp->f_sr); - def("FR_ADJ", &fp->f_stackadj); - def("FR_SIZE", sizeof(struct trapframe)); + def("FR_SP", &tf->tf_regs[15]); + def("FR_ADJ", &tf->tf_stackadj); + def("FR_HW", &tf->tf_sr); + def("FR_SIZE", sizeof(*tf)); /* FP frame offsets */ def("FPF_REGS", &fpf->fpf_regs[0]); diff --git a/sys/arch/sun3/sun3/intreg.c b/sys/arch/sun3/sun3/intreg.c index 63e4eb1cbb6..fd10cd7ac43 100644 --- a/sys/arch/sun3/sun3/intreg.c +++ b/sys/arch/sun3/sun3/intreg.c @@ -1,10 +1,12 @@ -/* $NetBSD: intreg.c,v 1.1 1996/03/26 15:03:11 gwr Exp $ */ +/* $NetBSD: intreg.c,v 1.5 1996/11/20 18:57:32 gwr Exp $ */ -/* - * Copyright (c) 1994 Gordon W. Ross - * Copyright (c) 1993 Adam Glass +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. * All rights reserved. * + * This code is derived from software contributed to The NetBSD Foundation + * by Adam Glass and Gordon W. Ross. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -15,20 +17,23 @@ * 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 authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* @@ -93,15 +98,8 @@ intreg_match(parent, vcf, args) if (cf->cf_unit != 0) return (0); - if ((pa = cf->cf_paddr) == -1) { - /* Use our default PA. */ - pa = OBIO_INTERREG; - } else { - /* Validate the given PA. */ - if (pa != OBIO_INTERREG) - panic("clock: wrong address"); - } - if (pa != ca->ca_paddr) + /* Validate the given address. */ + if (ca->ca_paddr != OBIO_INTERREG) return (0); return (1); diff --git a/sys/arch/sun3/sun3/locore.s b/sys/arch/sun3/sun3/locore.s index c677314e0dd..15794d5362f 100644 --- a/sys/arch/sun3/sun3/locore.s +++ b/sys/arch/sun3/sun3/locore.s @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.39 1996/06/17 15:40:52 gwr Exp $ */ +/* $NetBSD: locore.s,v 1.40 1996/11/06 20:19:54 cgd Exp $ */ /* * Copyright (c) 1994, 1995 Gordon W. Ross @@ -871,11 +871,11 @@ Lset2: #endif /* - * remrq(p) + * remrunqueue(p) * * Call should be made at splclock(). */ -ENTRY(remrq) +ENTRY(remrunqueue) movl sp@(4),a0 | proc *p clrl d0 movb a0@(P_PRIORITY),d0 @@ -904,7 +904,7 @@ Lrem2: movl #Lrem3,sp@- jbsr _panic Lrem3: - .asciz "remrq" + .asciz "remrunqueue" | Message for Lbadsw panic diff --git a/sys/arch/sun3/sun3/machdep.c b/sys/arch/sun3/sun3/machdep.c index 695364e1b9e..a59f16fda38 100644 --- a/sys/arch/sun3/sun3/machdep.c +++ b/sys/arch/sun3/sun3/machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.71 1996/03/26 15:16:53 gwr Exp $ */ +/* $NetBSD: machdep.c,v 1.77 1996/10/13 03:47:51 christos Exp $ */ /* * Copyright (c) 1994, 1995 Gordon W. Ross @@ -63,6 +63,8 @@ #include <sys/mount.h> #include <sys/user.h> #include <sys/exec.h> +#include <sys/core.h> +#include <sys/kcore.h> #include <sys/vnode.h> #include <sys/sysctl.h> #include <sys/syscallargs.h> @@ -82,6 +84,7 @@ #include <machine/pte.h> #include <machine/mon.h> #include <machine/isr.h> +#include <machine/kcore.h> #include <dev/cons.h> @@ -102,6 +105,7 @@ extern int cold; int physmem; int fpu_type; +int msgbufmapped; /* * safepri is a safe priority for sleep to set for a spin-wait @@ -134,9 +138,16 @@ void identifycpu(); */ void consinit() { - extern void cninit(); - cninit(); + extern void cninit(); + cninit(); +#ifdef KGDB + /* XXX - Ask on console for kgdb_dev? */ + zs_kgdb_init(); /* XXX */ + /* Note: kgdb_connect() will just return if kgdb_dev<0 */ + if (boothowto & RB_KDB) + kgdb_connect(1); +#endif #ifdef DDB /* Now that we have a console, we can stop in DDB. */ db_machine_init(); @@ -228,12 +239,12 @@ cpu_startup() vm_size_t size; int base, residual; vm_offset_t minaddr, maxaddr; - + /* * The msgbuf was set up earlier (in sun3_startup.c) * just because it was more convenient to do there. */ - + /* * Good {morning,afternoon,evening,night}. */ @@ -348,13 +359,6 @@ cpu_startup() /* * Configure the system. */ - if (boothowto & RB_CONFIG) { -#ifdef BOOT_CONFIG - user_config(); -#else - printf("kernel does not support -c; continuing..\n"); -#endif - } configure(); } @@ -761,26 +765,21 @@ sys_sigreturn(p, v, retval) int waittime = -1; /* XXX - Who else looks at this? -gwr */ static void reboot_sync() { - extern struct proc proc0; struct buf *bp; int iter, nbusy; /* Check waittime here to localize its use to this function. */ if (waittime >= 0) return; - /* fix curproc */ - if (curproc == NULL) - curproc = &proc0; waittime = 0; vfs_shutdown(); } -struct pcb dumppcb; - /* * Common part of the BSD and SunOS reboot system calls. */ -int reboot2(howto, user_boot_string) +__dead void +boot(howto, user_boot_string) int howto; char *user_boot_string; { @@ -808,10 +807,8 @@ int reboot2(howto, user_boot_string) splhigh(); /* Write out a crash dump if asked. */ - if (howto & RB_DUMP) { - savectx(&dumppcb); + if (howto & RB_DUMP) dumpsys(); - } /* run any shutdown hooks */ doshutdownhooks(); @@ -850,31 +847,23 @@ int reboot2(howto, user_boot_string) } printf("Kernel rebooting...\n"); sun3_mon_reboot(bs); + for (;;) ; /*NOTREACHED*/ } /* - * BSD reboot system call - * XXX - Should be named: cpu_reboot maybe? -gwr - * XXX - It would be nice to allow a second argument - * that specifies a machine-dependent boot string that - * is passed to the boot program if RB_STRING is set. - */ -void boot(howto) - int howto; -{ - (void) reboot2(howto, NULL); - for(;;); - /* NOTREACHED */ -} - -/* * These variables are needed by /sbin/savecore */ u_long dumpmag = 0x8fca0101; /* magic number */ int dumpsize = 0; /* pages */ long dumplo = 0; /* blocks */ +/* Our private scratch page for dumping the MMU. */ +vm_offset_t dumppage_va; +vm_offset_t dumppage_pa; + +#define DUMP_EXTRA 3 /* CPU-dependent extra pages */ + /* * This is called by cpu_startup to set dumplo, dumpsize. * Dumps always skip the first CLBYTES of disk space @@ -903,37 +892,147 @@ dumpconf() return; /* Position dump image near end of space, page aligned. */ - dumpsize = physmem; /* pages */ + dumpsize = physmem + DUMP_EXTRA; /* pages */ dumplo = nblks - ctod(dumpsize); dumplo &= ~(ctod(1)-1); /* If it does not fit, truncate it by moving dumplo. */ - /* Note: Must force signed comparison (fixes PR#887) */ + /* Note: Must force signed comparison. */ if (dumplo < ((long)ctod(1))) { dumplo = ctod(1); dumpsize = dtoc(nblks - dumplo); } } +struct pcb dumppcb; +extern vm_offset_t avail_start; + /* - * Write a crash dump. + * Write a crash dump. The format while in swap is: + * kcore_seg_t cpu_hdr; + * cpu_kcore_hdr_t cpu_data; + * padding (NBPG-sizeof(kcore_seg_t)) + * pagemap (2*NBPG) + * physical memory... */ dumpsys() { -#if 1 - printf("dumping not supported yet :)\n"); -#else + struct bdevsw *dsw; + kcore_seg_t *kseg_p; + cpu_kcore_hdr_t *chdr_p; + char *vaddr; + vm_offset_t paddr; + int psize, todo, chunk; + daddr_t blkno; + int error = 0; + msgbufmapped = 0; if (dumpdev == NODEV) return; - if (dumpsize == 0) { + if (dumppage_va == 0) + return; + + /* + * For dumps during autoconfiguration, + * if dump device has already configured... + */ + if (dumpsize == 0) dumpconf(); - if (dumpsize == 0) - return; + if (dumplo <= 0) + return; + savectx(&dumppcb); + + dsw = &bdevsw[major(dumpdev)]; + psize = (*(dsw->d_psize))(dumpdev); + if (psize == -1) { + printf("dump area unavailable\n"); + return; } + printf("\ndumping to dev %x, offset %d\n", dumpdev, dumplo); - /* XXX - todo... */ -#endif + + /* + * Write the dump header, including MMU state. + */ + blkno = dumplo; + todo = dumpsize - DUMP_EXTRA; /* pages */ + vaddr = (char*)dumppage_va; + bzero(vaddr, NBPG); + + /* kcore header */ + kseg_p = (kcore_seg_t *)vaddr; + CORE_SETMAGIC(*kseg_p, KCORE_MAGIC, MID_MACHINE, CORE_CPU); + kseg_p->c_size = (ctob(DUMP_EXTRA) - sizeof(kcore_seg_t)); + + /* MMU state */ + chdr_p = (cpu_kcore_hdr_t *) (kseg_p + 1); + pmap_get_ksegmap(chdr_p->ksegmap); + error = (*dsw->d_dump)(dumpdev, blkno, vaddr, NBPG); + if (error) + goto fail; + blkno += btodb(NBPG); + + /* translation RAM (page zero) */ + pmap_get_pagemap(vaddr, 0); + error = (*dsw->d_dump)(dumpdev, blkno, vaddr, NBPG); + if (error) + goto fail; + blkno += btodb(NBPG); + + /* translation RAM (page one) */ + pmap_get_pagemap(vaddr, NBPG); + error = (*dsw->d_dump)(dumpdev, blkno, vaddr, NBPG); + if (error) + goto fail; + blkno += btodb(NBPG); + + /* + * Now dump physical memory. Have to do it in two chunks. + * The first chunk is "unmanaged" (by the VM code) and its + * range of physical addresses is not allow in pmap_enter. + * However, that segment is mapped linearly, so we can just + * use the virtual mappings already in place. The second + * chunk is done the normal way, using pmap_enter. + * + * Note that vaddr==(paddr+KERNBASE) for paddr=0 through etext. + */ + + /* Do the first chunk (0 <= PA < avail_start) */ + paddr = 0; + chunk = btoc(avail_start); + if (chunk > todo) + chunk = todo; + do { + if ((todo & 0xf) == 0) + printf("\r%4d", todo); + vaddr = (char*)(paddr + KERNBASE); + error = (*dsw->d_dump)(dumpdev, blkno, vaddr, NBPG); + if (error) + goto fail; + paddr += NBPG; + blkno += btodb(NBPG); + --todo; + } while (--chunk > 0); + + /* Do the second chunk (avail_start <= PA < dumpsize) */ + vaddr = (char*)vmmap; /* Borrow /dev/mem VA */ + do { + if ((todo & 0xf) == 0) + printf("\r%4d", todo); + pmap_enter(pmap_kernel(), vmmap, paddr | PMAP_NC, + VM_PROT_READ, FALSE); + error = (*dsw->d_dump)(dumpdev, blkno, vaddr, NBPG); + pmap_remove(pmap_kernel(), vmmap, vmmap + NBPG); + if (error) + goto fail; + paddr += NBPG; + blkno += btodb(NBPG); + } while (--todo > 0); + + printf("\rdump succeeded\n"); + return; +fail: + printf(" dump error=%d\n", error); } initcpu() |