diff options
Diffstat (limited to 'sys/alpha')
-rw-r--r-- | sys/alpha/alpha/autoconf.c | 6 | ||||
-rw-r--r-- | sys/alpha/alpha/clock.c | 23 | ||||
-rw-r--r-- | sys/alpha/alpha/cons.c | 4 | ||||
-rw-r--r-- | sys/alpha/alpha/dec_kn8ae.c | 3 | ||||
-rw-r--r-- | sys/alpha/alpha/genassym.c | 12 | ||||
-rw-r--r-- | sys/alpha/alpha/gensetdefs.c | 4 | ||||
-rw-r--r-- | sys/alpha/conf/Makefile.alpha | 21 | ||||
-rw-r--r-- | sys/alpha/conf/files.alpha | 34 | ||||
-rw-r--r-- | sys/alpha/include/alpha_cpu.h | 12 | ||||
-rw-r--r-- | sys/alpha/include/param.h | 4 | ||||
-rw-r--r-- | sys/alpha/include/vmparam.h | 12 | ||||
-rw-r--r-- | sys/alpha/tlsb/dwlpx.c | 28 | ||||
-rw-r--r-- | sys/alpha/tlsb/gbus.c | 98 | ||||
-rw-r--r-- | sys/alpha/tlsb/gbusvar.h | 4 | ||||
-rw-r--r-- | sys/alpha/tlsb/kftxx.c | 128 | ||||
-rw-r--r-- | sys/alpha/tlsb/kftxxvar.h | 4 | ||||
-rw-r--r-- | sys/alpha/tlsb/mcclock_tlsb.c | 62 | ||||
-rw-r--r-- | sys/alpha/tlsb/tlsb.c | 164 | ||||
-rw-r--r-- | sys/alpha/tlsb/tlsbvar.h | 4 | ||||
-rw-r--r-- | sys/alpha/tlsb/zs_tlsb.c | 102 |
20 files changed, 390 insertions, 339 deletions
diff --git a/sys/alpha/alpha/autoconf.c b/sys/alpha/alpha/autoconf.c index f70e85d..cf4f581 100644 --- a/sys/alpha/alpha/autoconf.c +++ b/sys/alpha/alpha/autoconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: autoconf.c,v 1.1 1998/06/10 10:52:10 dfr Exp $ */ #include <sys/param.h> @@ -69,6 +69,8 @@ configure_finish() #endif } +extern void pci_configure(void); + /* * Determine i/o configuration for a machine. */ @@ -77,7 +79,7 @@ configure(void *dummy) { configure_start(); - bus_add_device(root_bus, platform.iobus, 0, 0); + device_add_child(root_bus, platform.iobus, 0, 0); root_bus_configure(); pci_configure(); diff --git a/sys/alpha/alpha/clock.c b/sys/alpha/alpha/clock.c index 24eb3c8..2fdaa68 100644 --- a/sys/alpha/alpha/clock.c +++ b/sys/alpha/alpha/clock.c @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: clock.c,v 1.1 1998/06/10 10:52:13 dfr Exp $ */ /* $NetBSD: clock.c,v 1.20 1998/01/31 10:32:47 ross Exp $ */ /* @@ -52,8 +52,7 @@ #include <sys/bus.h> #include <machine/cpuconf.h> - -#include <dev/dec/clockvar.h> +#include <machine/clockvar.h> #define SECMIN ((unsigned)60) /* seconds per minute */ #define SECHOUR ((unsigned)(60*SECMIN)) /* seconds per hour */ @@ -63,13 +62,12 @@ #define LEAPYEAR(year) (((year) % 4) == 0) device_t clockdev; -const struct clockfns *clockfns; int clockinitted; int tickfix; int tickfixinterval; int wall_cmos_clock; /* wall CMOS clock assumed if != 0 */ -extern cycles_per_sec; +extern int cycles_per_sec; static timecounter_get_t alpha_get_timecount; static timecounter_pps_t alpha_poll_pps; @@ -103,18 +101,15 @@ static u_int32_t last_time; static void handleclock(void* arg); void -clockattach(dev, fns) - struct device *dev; - const struct clockfns *fns; +clockattach(device_t dev) { /* * Just bookkeeping. */ - if (clockfns != NULL) + if (clockdev) panic("clockattach: multiple clocks"); clockdev = dev; - clockfns = fns; #ifdef EVCNT_COUNTERS evcnt_attach(dev, "intr", &clock_intr_evcnt); #endif @@ -140,7 +135,7 @@ clockattach(dev, fns) void cpu_initclocks() { - if (clockfns == NULL) + if (clockdev == NULL) panic("cpu_initclocks: no clock attached"); tick = 1000000 / hz; /* number of microseconds between interrupts */ @@ -177,7 +172,7 @@ cpu_initclocks() /* * Get the clock started. */ - (*clockfns->cf_init)(clockdev); + CLOCK_INIT(clockdev); } static void @@ -241,7 +236,7 @@ inittodr(base) } else badbase = 0; - (*clockfns->cf_get)(clockdev, base, &ct); + CLOCK_GET(clockdev, base, &ct); clockinitted = 1; /* simple sanity checks */ @@ -344,7 +339,7 @@ resettodr() ct.min = t / SECMIN; ct.sec = t % SECMIN; - (*clockfns->cf_set)(clockdev, &ct); + CLOCK_SET(clockdev, &ct); } static unsigned diff --git a/sys/alpha/alpha/cons.c b/sys/alpha/alpha/cons.c index 511f370..78d1149 100644 --- a/sys/alpha/alpha/cons.c +++ b/sys/alpha/alpha/cons.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * from: @(#)cons.c 7.2 (Berkeley) 5/9/91 - * $Id: cons.c,v 1.57 1998/03/28 10:32:56 bde Exp $ + * $Id: cons.c,v 1.1 1998/06/10 10:52:15 dfr Exp $ */ #include "opt_devfs.h" @@ -424,7 +424,7 @@ cnputc(c) } } -static cn_devsw_installed = 0; +static int cn_devsw_installed = 0; static void cn_drvinit(void *unused) diff --git a/sys/alpha/alpha/dec_kn8ae.c b/sys/alpha/alpha/dec_kn8ae.c index aad572b..813d202 100644 --- a/sys/alpha/alpha/dec_kn8ae.c +++ b/sys/alpha/alpha/dec_kn8ae.c @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: dec_kn8ae.c,v 1.1 1998/06/10 10:52:30 dfr Exp $ */ /* $NetBSD: dec_kn8ae.c,v 1.15 1998/02/13 00:12:50 thorpej Exp $ */ /* @@ -44,6 +44,7 @@ #include <alpha/tlsb/tlsbreg.h> #include <alpha/tlsb/gbusreg.h> +#include <alpha/tlsb/zsvar.h> void dec_kn8ae_init(int); static void dec_kn8ae_cons_init(void); diff --git a/sys/alpha/alpha/genassym.c b/sys/alpha/alpha/genassym.c index 520bd41..50ebf1d 100644 --- a/sys/alpha/alpha/genassym.c +++ b/sys/alpha/alpha/genassym.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)genassym.c 5.11 (Berkeley) 5/10/91 - * $Id: genassym.c,v 1.54 1998/04/06 18:59:14 peter Exp $ + * $Id: genassym.c,v 1.1 1998/06/10 10:52:39 dfr Exp $ */ #include <sys/param.h> @@ -64,8 +64,10 @@ int main __P((void)); int printf __P((const char *, ...)); +#define BIG(val) ((val) > 999LL || (val) < -999LL) + #define P(name, val) \ - printf(val > 999 ? "#define\t%s 0x%lx\n" : "#define\t%s %ld\n", name, val) + printf(BIG(val) ? "#define\t%s 0x%qx\n" : "#define\t%s %qd\n", name, val) /* XXX Danger Will Robinson */ struct prochd { @@ -73,9 +75,9 @@ struct prochd { struct proc *ph_rlink; }; -#define OFF(name, type, elem) P(#name, (long)&((type*)0)->elem) -#define CONST2(name, val) P(#name, val) -#define CONST1(name) P(#name, name) +#define OFF(name, type, elem) P(#name, (long long) &((type*)0)->elem) +#define CONST2(name, val) P(#name, (long long) val) +#define CONST1(name) P(#name, (long long) name) int main() diff --git a/sys/alpha/alpha/gensetdefs.c b/sys/alpha/alpha/gensetdefs.c index 0e446345..d2aaa8d 100644 --- a/sys/alpha/alpha/gensetdefs.c +++ b/sys/alpha/alpha/gensetdefs.c @@ -23,11 +23,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: gensetdefs.c,v 1.1 1997/05/21 23:21:25 jdp Exp $ + * $Id: gensetdefs.c,v 1.1 1998/06/10 10:52:41 dfr Exp $ */ #include <sys/types.h> -#include <machine/elf.h> +#include "../../alpha/include/elf.h" #include <err.h> #include <stddef.h> diff --git a/sys/alpha/conf/Makefile.alpha b/sys/alpha/conf/Makefile.alpha index ecc9daa..51cb957 100644 --- a/sys/alpha/conf/Makefile.alpha +++ b/sys/alpha/conf/Makefile.alpha @@ -1,7 +1,7 @@ # Makefile.alpha -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.alpha 7.1 5/10/91 -# $Id: Makefile.alpha,v 1.109 1998/04/17 07:51:36 dima Exp $ +# $Id: Makefile.alpha,v 1.1 1998/06/10 10:53:59 dfr Exp $ # # Makefile for FreeBSD # @@ -30,6 +30,9 @@ S= ../.. .endif ALPHA= ${S}/alpha +HCC?=${CC} +SIZE?=size + COPTFLAGS?=-O INCLUDES= -nostdinc -I- -I. -I$S # This hack is to allow kernel compiles to succeed on machines w/out srcdist @@ -59,6 +62,9 @@ DRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $< DRIVER_S= ${CC} -c -x assembler-with-cpp -DLOCORE ${COPTS} $< PROFILE_C= ${CC} -c ${CFLAGS} ${PARAM} $< +NORMAL_M= sh $S/kern/makedevops.sh -c $<;\ + ${CC} -c ${CFLAGS} ${PROF} `basename $< .m`.c + # ${ALPHA}/alpha/setdef0.c and ${ALPHA}/alpha/setdef1.c are intentionally # omitted from SYSTEM_CFILES. They depend on setdefs.h, a header which # is generated from all of ${OBJS}. We don't want to have to compile @@ -71,11 +77,12 @@ SYMORDER_EXCLUDE=-x symbols.exclude .endif SYSTEM_LD_HEAD= @echo loading $@; rm -f $@ .if ${BINFORMAT} == elf -SYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \ +SYSTEM_OBJS= locore.o setdef0.o vnode_if.o \ + ${OBJS} ioconf.o param.o config.o \ setdef1.o SYSTEM_LD= @${LD} -Bstatic -N -Ttext ${LOAD_ADDRESS} -e locorestart -defsym _DYNAMIC=0 \ -o $@ -X ${SYSTEM_OBJS} vers.o -SYSTEM_LD_TAIL= @size $@; chmod 755 $@ +SYSTEM_LD_TAIL= @${SIZE} $@; chmod 755 $@ .endif %BEFORE_DEPEND @@ -123,10 +130,10 @@ setdefs.h: gensetdefs ${OBJS} @./gensetdefs ${OBJS} >setdefs.h gensetdefs: gensetdefs.o - ${CC} ${CFLAGS} gensetdefs.o -o $@ + ${HCC} gensetdefs.o -o $@ gensetdefs.o: ${ALPHA}/alpha/gensetdefs.c - ${CC} -c ${CFLAGS} ${ALPHA}/alpha/gensetdefs.c + ${HCC} ${CFLAGS} -c ${ALPHA}/alpha/gensetdefs.c # everything potentially depends on the Makefile since everything potentially # depends on the options. Some things are more dependent on the Makefile for @@ -151,10 +158,10 @@ assym.s: genassym # Some of the defines that genassym outputs may well depend on the # value of kernel options. genassym.o: ${ALPHA}/alpha/genassym.c Makefile opt_global.h - ${CC} -c ${CFLAGS} ${PARAM} -UKERNEL ${ALPHA}/alpha/genassym.c + ${HCC} -c ${COPTS} ${PARAM} -UKERNEL ${ALPHA}/alpha/genassym.c genassym: genassym.o - ${CC} ${CFLAGS} ${PARAM} genassym.o -o $@ + ${HCC} ${COPTS} ${PARAM} genassym.o -o $@ SYSTEM_OBJS+= __divqu.o __divq.o __divlu.o __divl.o SYSTEM_OBJS+= __remqu.o __remq.o __remlu.o __reml.o diff --git a/sys/alpha/conf/files.alpha b/sys/alpha/conf/files.alpha index 04e5410..57c00a6 100644 --- a/sys/alpha/conf/files.alpha +++ b/sys/alpha/conf/files.alpha @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $Id$ +# $Id: files.alpha,v 1.1 1998/06/10 10:54:08 dfr Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -48,6 +48,14 @@ alpha/alpha/interrupt.c standard alpha/alpha/userconfig.c optional userconfig alpha/alpha/vm_machdep.c standard alpha/alpha/clock.c standard +alpha/alpha/clock_if.m standard \ + dependency "$S/kern/makedevops.sh" \ + clean "clock_if.c" +clock_if.h standard \ + dependency "$S/kern/makedevops.sh $S/alpha/alpha/clock_if.m" \ + compile-with "sh $S/kern/makedevops.sh -h $S/alpha/alpha/clock_if.m" \ + no-obj no-implicit-rule before-depend \ + clean "clock_if.h" alpha/alpha/diskslice_machdep.c standard alpha/tlsb/tlsb.c optional tlsb alpha/tlsb/gbus.c optional gbus @@ -56,8 +64,32 @@ alpha/tlsb/mcclock_tlsb.c optional gbus alpha/tlsb/zs_tlsb.c optional gbus alpha/tlsb/dwlpx.c optional dwlpx dev/dec/mcclock.c optional gbus +dev/dec/mcclock_if.m optional gbus \ + dependency "$S/kern/makedevops.sh" \ + clean "mcclock_if.c" +mcclock_if.h standard \ + dependency "$S/kern/makedevops.sh $S/dev/dec/mcclock_if.m" \ + compile-with "sh $S/kern/makedevops.sh -h $S/dev/dec/mcclock_if.m" \ + no-obj no-implicit-rule before-depend \ + clean "mcclock_if.h" alpha/pci/pcibus.c optional pci kern/subr_bus.c standard +kern/device_if.m standard \ + dependency "$S/kern/makedevops.sh" \ + clean "device_if.c" +device_if.h standard \ + dependency "$S/kern/makedevops.sh $S/kern/device_if.m" \ + compile-with "sh $S/kern/makedevops.sh -h $S/kern/device_if.m" \ + no-obj no-implicit-rule before-depend \ + clean "device_if.h" +kern/bus_if.m standard \ + dependency "$S/kern/makedevops.sh" \ + clean "bus_if.c" +bus_if.h standard \ + dependency "$S/kern/makedevops.sh $S/kern/bus_if.m" \ + compile-with "sh $S/kern/makedevops.sh -h $S/kern/bus_if.m" \ + no-obj no-implicit-rule before-depend \ + clean "bus_if.h" libkern/bcd.c standard libkern/bcmp.c standard libkern/ffs.c standard diff --git a/sys/alpha/include/alpha_cpu.h b/sys/alpha/include/alpha_cpu.h index 9bd97f4..5107274 100644 --- a/sys/alpha/include/alpha_cpu.h +++ b/sys/alpha/include/alpha_cpu.h @@ -1,4 +1,4 @@ -/* $Id: alpha_cpu.h,v 1.1 1998/01/10 10:13:13 jb Exp $ */ +/* $Id: alpha_cpu.h,v 1.2 1998/06/10 10:54:21 dfr Exp $ */ /* From: NetBSD: alpha_cpu.h,v 1.15 1997/09/20 19:02:34 mjacob Exp */ /* @@ -191,12 +191,12 @@ struct alpha_logout_area { #define ALPHA_L1SHIFT (ALPHA_L2SHIFT+ALPHA_PTSHIFT) #define ALPHA_USEG_BASE 0 /* virtual */ -#define ALPHA_USEG_END 0x000003ffffffffff +#define ALPHA_USEG_END 0x000003ffffffffffLL -#define ALPHA_K0SEG_BASE 0xfffffc0000000000 /* direct-mapped */ -#define ALPHA_K0SEG_END 0xfffffdffffffffff -#define ALPHA_K1SEG_BASE 0xfffffe0000000000 /* virtual */ -#define ALPHA_K1SEG_END 0xffffffffffffffff +#define ALPHA_K0SEG_BASE 0xfffffc0000000000LL /* direct-mapped */ +#define ALPHA_K0SEG_END 0xfffffdffffffffffLL +#define ALPHA_K1SEG_BASE 0xfffffe0000000000LL /* virtual */ +#define ALPHA_K1SEG_END 0xffffffffffffffffLL #define ALPHA_K0SEG_TO_PHYS(x) ((x) & ~ALPHA_K0SEG_BASE) #define ALPHA_PHYS_TO_K0SEG(x) ((x) | ALPHA_K0SEG_BASE) diff --git a/sys/alpha/include/param.h b/sys/alpha/include/param.h index 70101f0..63e203c 100644 --- a/sys/alpha/include/param.h +++ b/sys/alpha/include/param.h @@ -1,4 +1,4 @@ -/* $Id: param.h,v 1.2 1998/03/09 05:53:10 jb Exp $ */ +/* $Id: param.h,v 1.3 1998/06/10 10:55:15 dfr Exp $ */ /* From: NetBSD: param.h,v 1.20 1997/09/19 13:52:53 leo Exp */ /* @@ -75,7 +75,7 @@ #define PAGE_MASK (PAGE_SIZE-1) #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) -#define KERNBASE 0xfffffc0000230000 /* start of kernel virtual */ +#define KERNBASE 0xfffffc0000230000LL /* start of kernel virtual */ #define BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT) #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ diff --git a/sys/alpha/include/vmparam.h b/sys/alpha/include/vmparam.h index 612fe8e..fead056 100644 --- a/sys/alpha/include/vmparam.h +++ b/sys/alpha/include/vmparam.h @@ -1,4 +1,4 @@ -/* $Id: vmparam.h,v 1.1.1.1 1998/03/09 05:43:16 jb Exp $ */ +/* $Id: vmparam.h,v 1.2 1998/06/10 10:55:30 dfr Exp $ */ /* From: NetBSD: vmparam.h,v 1.6 1997/09/23 23:23:23 mjacob Exp */ #ifndef _ALPHA_VMPARAM_H #define _ALPHA_VMPARAM_H @@ -133,11 +133,11 @@ */ /* user/kernel map constants */ -#define VM_MIN_ADDRESS ((vm_offset_t)ALPHA_USEG_BASE) /* 0 */ -#define VM_MAXUSER_ADDRESS ((vm_offset_t)(ALPHA_USEG_END + 1L)) +#define VM_MIN_ADDRESS (ALPHA_USEG_BASE) /* 0 */ +#define VM_MAXUSER_ADDRESS ((ALPHA_USEG_END + 1LL)) #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS -#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)ALPHA_K1SEG_BASE) -#define VM_MAX_KERNEL_ADDRESS ((vm_offset_t)ALPHA_K1SEG_END) +#define VM_MIN_KERNEL_ADDRESS (ALPHA_K1SEG_BASE) +#define VM_MAX_KERNEL_ADDRESS (ALPHA_K1SEG_END) /* virtual sizes (bytes) for various kernel submaps */ #ifndef VM_KMEM_SIZE @@ -159,5 +159,5 @@ #endif /* some Alpha-specific constants */ -#define VPTBASE ((vm_offset_t)0xfffffffe00000000) /* Virt. pg table */ +#define VPTBASE (0xfffffffe00000000LL) /* Virt. pg table */ #endif /* !_ALPHA_VMPARAM_H */ diff --git a/sys/alpha/tlsb/dwlpx.c b/sys/alpha/tlsb/dwlpx.c index e9f2aa5..14317b6 100644 --- a/sys/alpha/tlsb/dwlpx.c +++ b/sys/alpha/tlsb/dwlpx.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: dwlpx.c,v 1.1 1998/06/10 10:55:41 dfr Exp $ */ #include "opt_simos.h" @@ -231,33 +231,37 @@ dwlpx_cfgwritel(u_int b, u_int s, u_int f, u_int r, u_int32_t data) SPARSE_WRITE_LONG(sc->cfg_base, off, data); } -static driver_probe_t dwlpx_probe; -static driver_attach_t dwlpx_attach; +static int dwlpx_probe(device_t dev); +static int dwlpx_attach(device_t dev); static driver_intr_t dwlpx_intr; +static device_method_t dwlpx_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, dwlpx_probe), + DEVMETHOD(device_attach, dwlpx_attach), + + { 0, 0 } +}; + static driver_t dwlpx_driver = { "dwlpx", - dwlpx_probe, - dwlpx_attach, - NULL, - NULL, + dwlpx_methods, DRIVER_TYPE_MISC, sizeof(struct dwlpx_softc), - NULL, }; - static int -dwlpx_probe(bus_t bus, device_t dev) +dwlpx_probe(device_t dev) { if (dwlpx0) return ENXIO; + dwlpx0 = dev; device_set_desc(dev, "DWLPA or DWLPB PCI adapter"); return 0; } static int -dwlpx_attach(bus_t bus, device_t dev) +dwlpx_attach(device_t dev) { struct dwlpx_softc* sc = DWLPX_SOFTC(dev); vm_offset_t regs; @@ -273,7 +277,7 @@ dwlpx_attach(bus_t bus, device_t dev) *(u_int32_t*) (regs + PCIA_CTL(0)) = 1; /* Type1 config cycles */ - bus_map_intr(bus, dev, dwlpx_intr, 0); + BUS_MAP_INTR(device_get_parent(dev), dev, dwlpx_intr, 0); return 0; } diff --git a/sys/alpha/tlsb/gbus.c b/sys/alpha/tlsb/gbus.c index 5235284..c7a1191 100644 --- a/sys/alpha/tlsb/gbus.c +++ b/sys/alpha/tlsb/gbus.c @@ -75,54 +75,33 @@ struct gbus_device gbus_children[] = { static devclass_t gbus_devclass; /* - * Bus handlers. + * Device methods */ -static bus_print_device_t gbus_print_device; -static bus_read_ivar_t gbus_read_ivar; - -static bus_ops_t gbus_bus_ops = { - gbus_print_device, - gbus_read_ivar, - null_write_ivar, - null_map_intr, +static int gbus_probe(device_t dev); +static void gbus_print_child(device_t dev, device_t child); +static int gbus_read_ivar(device_t dev, device_t child, int which, u_long *result);; + +static device_method_t gbus_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, gbus_probe), + DEVMETHOD(device_attach, bus_generic_attach), + DEVMETHOD(device_detach, bus_generic_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + /* Bus interface */ + DEVMETHOD(bus_print_child, gbus_print_child), + DEVMETHOD(bus_read_ivar, gbus_read_ivar), + DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_map_intr, bus_generic_map_intr), + + { 0, 0 } }; -static void -gbus_print_device(bus_t bus, device_t dev) -{ - struct gbus_device* gdev = DEVTOGBUS(dev); - device_t gbusdev = bus_get_device(bus); - - printf(" at %s%d offset 0x%lx", - device_get_name(gbusdev), device_get_unit(gbusdev), - gdev->gd_offset); -} - -static int -gbus_read_ivar(bus_t bus, device_t dev, - int index, u_long* result) -{ - struct gbus_device* gdev = DEVTOGBUS(dev); - - switch (index) { - case GBUS_IVAR_OFFSET: - *result = gdev->gd_offset; - break; - } - return ENOENT; -} - -static driver_probe_t gbus_bus_probe; - -static driver_t gbus_bus_driver = { +static driver_t gbus_driver = { "gbus", - gbus_bus_probe, - bus_generic_attach, - bus_generic_detach, - bus_generic_shutdown, + gbus_methods, DRIVER_TYPE_MISC, - sizeof(struct bus), - NULL, + 1, /* no softc */ }; /* @@ -131,9 +110,8 @@ static driver_t gbus_bus_driver = { * are alive. */ static int -gbus_bus_probe(bus_t parent, device_t dev) +gbus_probe(device_t dev) { - bus_t bus = device_get_softc(dev); struct gbus_device *gdev; /* @@ -144,12 +122,34 @@ gbus_bus_probe(bus_t parent, device_t dev) if (!TLDEV_ISCPU(tlsb_get_dtype(dev))) return ENXIO; - bus_init(bus, dev, &gbus_bus_ops); - for (gdev = gbus_children; gdev->gd_name; gdev++) - bus_add_device(bus, gdev->gd_name, -1, gdev); + device_add_child(dev, gdev->gd_name, -1, gdev); return 0; } -DRIVER_MODULE(gbus, tlsb, gbus_bus_driver, gbus_devclass, 0, 0); +static void +gbus_print_child(device_t bus, device_t dev) +{ + struct gbus_device* gdev = DEVTOGBUS(dev); + + printf(" at %s%d offset 0x%lx", + device_get_name(bus), device_get_unit(bus), + gdev->gd_offset); +} + +static int +gbus_read_ivar(device_t bus, device_t dev, + int index, u_long* result) +{ + struct gbus_device* gdev = DEVTOGBUS(dev); + + switch (index) { + case GBUS_IVAR_OFFSET: + *result = gdev->gd_offset; + break; + } + return ENOENT; +} + +DRIVER_MODULE(gbus, tlsb, gbus_driver, gbus_devclass, 0, 0); diff --git a/sys/alpha/tlsb/gbusvar.h b/sys/alpha/tlsb/gbusvar.h index 1575817..5ece6e0 100644 --- a/sys/alpha/tlsb/gbusvar.h +++ b/sys/alpha/tlsb/gbusvar.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: gbusvar.h,v 1.2 1998/06/10 20:40:59 dfr Exp $ */ /* $NetBSD: gbusvar.h,v 1.1 1998/05/13 02:50:29 thorpej Exp $ */ @@ -81,7 +81,7 @@ enum gbus_device_ivars { static __inline T gbus_get_ ## A(device_t dev) \ { \ u_long v; \ - bus_read_ivar(device_get_parent(dev), dev, GBUS_IVAR_ ## B, &v); \ + BUS_READ_IVAR(device_get_parent(dev), dev, GBUS_IVAR_ ## B, &v); \ return (T) v; \ } diff --git a/sys/alpha/tlsb/kftxx.c b/sys/alpha/tlsb/kftxx.c index 9f41b62..d2b19d2 100644 --- a/sys/alpha/tlsb/kftxx.c +++ b/sys/alpha/tlsb/kftxx.c @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: kftxx.c,v 1.1 1998/06/10 10:55:49 dfr Exp $ */ /* $NetBSD: kftxx.c,v 1.9 1998/05/14 00:01:32 thorpej Exp $ */ /* @@ -53,7 +53,6 @@ #include <alpha/tlsb/kftxxvar.h> struct kft_softc { - struct bus sc_bus; /* bus common */ int sc_node; /* TLSB node */ u_int16_t sc_dtype; /* device type */ }; @@ -73,72 +72,37 @@ struct kft_device { static devclass_t kft_devclass; /* - * Bus handlers. + * Device methods */ -static bus_print_device_t kft_print_device; -static bus_read_ivar_t kft_read_ivar; - -static bus_ops_t kft_bus_ops = { - kft_print_device, - kft_read_ivar, - null_write_ivar, - null_map_intr, +static int kft_probe(device_t dev); +static void kft_print_child(device_t dev, device_t child); +static int kft_read_ivar(device_t dev, device_t child, int which, u_long *result);; + +static device_method_t kft_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, kft_probe), + DEVMETHOD(device_attach, bus_generic_attach), + DEVMETHOD(device_detach, bus_generic_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + /* Bus interface */ + DEVMETHOD(bus_print_child, kft_print_child), + DEVMETHOD(bus_read_ivar, kft_read_ivar), + DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_map_intr, bus_generic_map_intr), + + { 0, 0 } }; -static void -kft_print_device(bus_t bus, device_t dev) -{ - struct kft_device *kd = (struct kft_device*) device_get_ivars(dev); - device_t busdev = bus_get_device(bus); - - printf(" at %s%d hose %d", - device_get_name(busdev), device_get_unit(busdev), - kd->kd_hosenum); -} - -static int -kft_read_ivar(bus_t bus, device_t dev, - int index, u_long* result) -{ - struct kft_device *kd = (struct kft_device*) device_get_ivars(dev); - - switch (index) { - case KFT_IVAR_NAME: - *result = (u_long) kd->kd_name; - return 0; - - case KFT_IVAR_NODE: - *result = (u_long) kd->kd_node; - return 0; - - case KFT_IVAR_DTYPE: - *result = (u_long) kd->kd_dtype; - return 0; - - case KFT_IVAR_HOSENUM: - *result = (u_long) kd->kd_hosenum; - return 0; - - default: - return ENOENT; - } -} - -static driver_probe_t kft_bus_probe; - -static driver_t kft_bus_driver = { +static driver_t kft_driver = { "kft", - kft_bus_probe, - bus_generic_attach, - bus_generic_detach, - bus_generic_shutdown, + kft_methods, DRIVER_TYPE_MISC, - sizeof(struct kft_softc), - NULL, + 1, /* no softc */ }; static int -kft_bus_probe(bus_t parent, device_t dev) +kft_probe(device_t dev) { struct kft_softc *sc = (struct kft_softc *) device_get_softc(dev); struct kft_device* kd; @@ -147,8 +111,6 @@ kft_bus_probe(bus_t parent, device_t dev) if (!TLDEV_ISIOPORT(tlsb_get_dtype(dev))) return ENXIO; - bus_init(&sc->sc_bus, dev, &kft_bus_ops); - sc->sc_node = tlsb_get_node(dev); sc->sc_dtype = tlsb_get_dtype(dev); @@ -183,10 +145,48 @@ kft_bus_probe(bus_t parent, device_t dev) kd->kd_node = sc->sc_node; kd->kd_dtype = sc->sc_dtype; kd->kd_hosenum = hoseno; - bus_add_device(&sc->sc_bus, kd->kd_name, -1, kd); + device_add_child(dev, kd->kd_name, -1, kd); } return 0; } -DRIVER_MODULE(kft, tlsb, kft_bus_driver, kft_devclass, 0, 0); +static void +kft_print_child(device_t bus, device_t dev) +{ + struct kft_device *kd = (struct kft_device*) device_get_ivars(dev); + + printf(" at %s%d hose %d", + device_get_name(bus), device_get_unit(bus), + kd->kd_hosenum); +} + +static int +kft_read_ivar(device_t bus, device_t dev, + int index, u_long* result) +{ + struct kft_device *kd = (struct kft_device*) device_get_ivars(dev); + + switch (index) { + case KFT_IVAR_NAME: + *result = (u_long) kd->kd_name; + return 0; + + case KFT_IVAR_NODE: + *result = (u_long) kd->kd_node; + return 0; + + case KFT_IVAR_DTYPE: + *result = (u_long) kd->kd_dtype; + return 0; + + case KFT_IVAR_HOSENUM: + *result = (u_long) kd->kd_hosenum; + return 0; + + default: + return ENOENT; + } +} + +DRIVER_MODULE(kft, tlsb, kft_driver, kft_devclass, 0, 0); diff --git a/sys/alpha/tlsb/kftxxvar.h b/sys/alpha/tlsb/kftxxvar.h index 40c7424..56168e6 100644 --- a/sys/alpha/tlsb/kftxxvar.h +++ b/sys/alpha/tlsb/kftxxvar.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: kftxxvar.h,v 1.2 1998/06/10 20:48:03 dfr Exp $ */ /* @@ -45,7 +45,7 @@ enum kft_dev_ivars { static __inline T kft_get_ ## A(device_t dev) \ { \ u_long v; \ - bus_read_ivar(device_get_parent(dev), dev, KFT_IVAR_ ## B, &v); \ + BUS_READ_IVAR(device_get_parent(dev), dev, KFT_IVAR_ ## B, &v); \ return (T) v; \ } diff --git a/sys/alpha/tlsb/mcclock_tlsb.c b/sys/alpha/tlsb/mcclock_tlsb.c index 15974fc..593b00f 100644 --- a/sys/alpha/tlsb/mcclock_tlsb.c +++ b/sys/alpha/tlsb/mcclock_tlsb.c @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: mcclock_tlsb.c,v 1.1 1998/06/10 10:55:52 dfr Exp $ */ /* $NetBSD: mcclock_tlsb.c,v 1.8 1998/05/13 02:50:29 thorpej Exp $ */ /* @@ -37,7 +37,7 @@ #include <sys/module.h> #include <sys/bus.h> -#include <dev/dec/clockvar.h> +#include <machine/clockvar.h> #include <dev/dec/mcclockvar.h> #include <alpha/tlsb/gbusvar.h> @@ -53,71 +53,73 @@ #define REGSHIFT 6 struct mcclock_tlsb_softc { - struct mcclock_softc sc_mcclock; unsigned long regbase; }; -static int mcclock_tlsb_probe(bus_t, device_t); -static int mcclock_tlsb_attach(bus_t, device_t); +static int mcclock_tlsb_probe(device_t dev); +static int mcclock_tlsb_attach(device_t dev); +static void mcclock_tlsb_write(device_t, u_int, u_int); +static u_int mcclock_tlsb_read(device_t, u_int); -static devclass_t mcclock_devclass; +static device_method_t mcclock_tlsb_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mcclock_tlsb_probe), + DEVMETHOD(device_attach, mcclock_tlsb_attach), + + /* mcclock interface */ + DEVMETHOD(mcclock_write, mcclock_tlsb_write), + DEVMETHOD(mcclock_read, mcclock_tlsb_read), + + /* clock interface */ + DEVMETHOD(clock_init, mcclock_init), + DEVMETHOD(clock_get, mcclock_get), + DEVMETHOD(clock_set, mcclock_set), + + { 0, 0 } +}; -driver_t mcclock_tlsb_driver = { +static driver_t mcclock_tlsb_driver = { "mcclock", - mcclock_tlsb_probe, - mcclock_tlsb_attach, - NULL, - NULL, + mcclock_tlsb_methods, DRIVER_TYPE_MISC, sizeof(struct mcclock_tlsb_softc), - NULL, }; -static void mcclock_tlsb_write __P((struct mcclock_softc *, u_int, u_int)); -static u_int mcclock_tlsb_read __P((struct mcclock_softc *, u_int)); - -const struct mcclock_busfns mcclock_tlsb_busfns = { - mcclock_tlsb_write, mcclock_tlsb_read, -}; +static devclass_t mcclock_devclass; int -mcclock_tlsb_probe(bus_t bus, device_t dev) +mcclock_tlsb_probe(device_t dev) { device_set_desc(dev, "MC146818A real time clock"); return 0; } int -mcclock_tlsb_attach(bus_t bus, device_t dev) +mcclock_tlsb_attach(device_t dev) { struct mcclock_tlsb_softc *sc = device_get_softc(dev); /* XXX Should be bus.h'd, so we can accomodate the kn7aa. */ - sc->sc_mcclock.sc_dev = dev; sc->regbase = TLSB_GBUS_BASE + gbus_get_offset(dev); - mcclock_attach(&sc->sc_mcclock, &mcclock_tlsb_busfns); + mcclock_attach(dev); return 0; } static void -mcclock_tlsb_write(mcsc, reg, val) - struct mcclock_softc *mcsc; - u_int reg, val; +mcclock_tlsb_write(device_t dev, u_int reg, u_int val) { - struct mcclock_tlsb_softc *sc = (struct mcclock_tlsb_softc *)mcsc; + struct mcclock_tlsb_softc *sc = device_get_softc(dev); unsigned char *ptr = (unsigned char *) KV(sc->regbase + (reg << REGSHIFT)); *ptr = val; } static u_int -mcclock_tlsb_read(mcsc, reg) - struct mcclock_softc *mcsc; - u_int reg; +mcclock_tlsb_read(device_t dev, u_int reg) { - struct mcclock_tlsb_softc *sc = (struct mcclock_tlsb_softc *)mcsc; + struct mcclock_tlsb_softc *sc = device_get_softc(dev); unsigned char *ptr = (unsigned char *) KV(sc->regbase + (reg << REGSHIFT)); return *ptr; diff --git a/sys/alpha/tlsb/tlsb.c b/sys/alpha/tlsb/tlsb.c index 7b778ac..cb9639f 100644 --- a/sys/alpha/tlsb/tlsb.c +++ b/sys/alpha/tlsb/tlsb.c @@ -78,7 +78,6 @@ struct intr_mapping { }; struct tlsb_softc { - struct bus bus; STAILQ_HEAD(, intr_mapping) intr_handlers; }; @@ -86,88 +85,39 @@ static char *tlsb_node_type_str(u_int32_t); static void tlsb_intr(void* frame, u_long vector); /* There can be only one. */ -static int tlsb_found; -static struct tlsb_softc* tlsb0_softc; +static int tlsb_found; +static struct tlsb_softc* tlsb0_softc; +static devclass_t tlsb_devclass; /* - * Bus handlers. + * Device methods */ -static bus_print_device_t tlsb_print_device; -static bus_read_ivar_t tlsb_read_ivar; -static bus_map_intr_t tlsb_map_intr; - -static bus_ops_t tlsb_bus_ops = { - tlsb_print_device, - tlsb_read_ivar, - null_write_ivar, - tlsb_map_intr, +static int tlsb_probe(device_t dev); +static void tlsb_print_child(device_t dev, device_t child); +static int tlsb_read_ivar(device_t dev, device_t child, int which, u_long* result); +static int tlsb_map_intr(device_t dev, device_t child, driver_intr_t *intr, void *arg); + +static device_method_t tlsb_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, tlsb_probe), + DEVMETHOD(device_attach, bus_generic_attach), + DEVMETHOD(device_detach, bus_generic_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + /* Bus interface */ + DEVMETHOD(bus_print_child, tlsb_print_child), + DEVMETHOD(bus_read_ivar, tlsb_read_ivar), + DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_map_intr, tlsb_map_intr), + + { 0, 0 } }; -static void -tlsb_print_device(bus_t bus, device_t dev) -{ - device_t busdev = bus_get_device(bus); - struct tlsb_device* tdev = DEVTOTLSB(dev); - - printf(" at %s%d node %d", - device_get_name(busdev), - device_get_unit(busdev), - tdev->td_node); -} - -static int -tlsb_read_ivar(bus_t bus, device_t dev, - int index, u_long* result) -{ - struct tlsb_device* tdev = DEVTOTLSB(dev); - - switch (index) { - case TLSB_IVAR_NODE: - *result = tdev->td_node; - break; - - case TLSB_IVAR_DTYPE: - *result = tdev->td_dtype; - break; - - case TLSB_IVAR_SWREV: - *result = tdev->td_swrev; - break; - - case TLSB_IVAR_HWREV: - *result = tdev->td_hwrev; - break; - } - return ENOENT; -} - -static int -tlsb_map_intr(bus_t bus, device_t dev, driver_intr_t *intr, void *arg) -{ - struct tlsb_softc* sc = (struct tlsb_softc*) bus; - struct intr_mapping* i; - i = malloc(sizeof(struct intr_mapping), M_DEVBUF, M_NOWAIT); - if (!i) - return ENOMEM; - i->intr = intr; - i->arg = arg; - STAILQ_INSERT_TAIL(&sc->intr_handlers, i, queue); - - return 0; -} - -static driver_probe_t tlsb_bus_probe; -static devclass_t tlsb_devclass; - -static driver_t tlsb_bus_driver = { +static driver_t tlsb_driver = { "tlsb", - tlsb_bus_probe, - bus_generic_attach, - bus_generic_detach, - bus_generic_shutdown, + tlsb_methods, DRIVER_TYPE_MISC, sizeof(struct tlsb_softc), - NULL, }; /* @@ -176,17 +126,17 @@ static driver_t tlsb_bus_driver = { * are alive. */ static int -tlsb_bus_probe(bus_t parent, device_t dev) +tlsb_probe(device_t dev) { struct tlsb_softc* sc = device_get_softc(dev); struct tlsb_device *tdev; u_int32_t tldev; u_int8_t vid; int node; - device_t subdev; + device_t child; device_set_desc(dev, "TurboLaser bus"); - bus_init(&sc->bus, dev, &tlsb_bus_ops); + STAILQ_INIT(&sc->intr_handlers); tlsb0_softc = sc; @@ -252,8 +202,8 @@ tlsb_bus_probe(bus_t parent, device_t dev) tdev->td_swrev = TLDEV_SWREV(tldev); tdev->td_hwrev = TLDEV_HWREV(tldev); - subdev = bus_add_device(&sc->bus, NULL, -1, tdev); - device_set_desc(subdev, tlsb_node_type_str(tdev->td_dtype)); + child = device_add_child(dev, NULL, -1, tdev); + device_set_desc(child, tlsb_node_type_str(tdev->td_dtype)); /* * Deal with hooking CPU instances to TurboLaser nodes. @@ -277,6 +227,58 @@ tlsb_bus_probe(bus_t parent, device_t dev) } static void +tlsb_print_child(device_t dev, device_t child) +{ + struct tlsb_device* tdev = DEVTOTLSB(child); + + printf(" at %s%d node %d", + device_get_name(dev), + device_get_unit(dev), + tdev->td_node); +} + +static int +tlsb_read_ivar(device_t dev, device_t child, + int index, u_long* result) +{ + struct tlsb_device* tdev = DEVTOTLSB(child); + + switch (index) { + case TLSB_IVAR_NODE: + *result = tdev->td_node; + break; + + case TLSB_IVAR_DTYPE: + *result = tdev->td_dtype; + break; + + case TLSB_IVAR_SWREV: + *result = tdev->td_swrev; + break; + + case TLSB_IVAR_HWREV: + *result = tdev->td_hwrev; + break; + } + return ENOENT; +} + +static int +tlsb_map_intr(device_t dev, device_t child, driver_intr_t *intr, void *arg) +{ + struct tlsb_softc* sc = device_get_softc(dev); + struct intr_mapping* i; + i = malloc(sizeof(struct intr_mapping), M_DEVBUF, M_NOWAIT); + if (!i) + return ENOMEM; + i->intr = intr; + i->arg = arg; + STAILQ_INSERT_TAIL(&sc->intr_handlers, i, queue); + + return 0; +} + +static void tlsb_intr(void* frame, u_long vector) { struct tlsb_softc* sc = tlsb0_softc; @@ -291,7 +293,7 @@ tlsb_intr(void* frame, u_long vector) i->intr(i->arg); } -DRIVER_MODULE(tlsb, root, tlsb_bus_driver, tlsb_devclass, 0, 0); +DRIVER_MODULE(tlsb, root, tlsb_driver, tlsb_devclass, 0, 0); static char * tlsb_node_type_str(u_int32_t dtype) diff --git a/sys/alpha/tlsb/tlsbvar.h b/sys/alpha/tlsb/tlsbvar.h index bfb24ed..6b72785 100644 --- a/sys/alpha/tlsb/tlsbvar.h +++ b/sys/alpha/tlsb/tlsbvar.h @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: tlsbvar.h,v 1.1 1998/06/10 10:55:58 dfr Exp $ */ /* $NetBSD: tlsbvar.h,v 1.5 1998/05/13 23:23:23 thorpej Exp $ */ /* @@ -55,7 +55,7 @@ enum tlsb_device_instvars { static __inline T tlsb_get_ ## A(device_t dev) \ { \ u_long v; \ - bus_read_ivar(device_get_parent(dev), dev, TLSB_IVAR_ ## B, &v); \ + BUS_READ_IVAR(device_get_parent(dev), dev, TLSB_IVAR_ ## B, &v); \ return v; \ } diff --git a/sys/alpha/tlsb/zs_tlsb.c b/sys/alpha/tlsb/zs_tlsb.c index 8532ed3..bc20705 100644 --- a/sys/alpha/tlsb/zs_tlsb.c +++ b/sys/alpha/tlsb/zs_tlsb.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: zs_tlsb.c,v 1.1 1998/06/10 10:55:59 dfr Exp $ */ /* * This driver is a hopeless hack to get the SimOS console working. A real @@ -47,6 +47,7 @@ #include <alpha/tlsb/gbusvar.h> #include <alpha/tlsb/tlsbreg.h> /* XXX */ #include <alpha/tlsb/zsreg.h> +#include <alpha/tlsb/zsvar.h> #define KV(_addr) ((caddr_t)ALPHA_PHYS_TO_K0SEG((_addr))) @@ -96,31 +97,35 @@ struct consdev zs_cons = { static caddr_t zs_console_addr; static int zs_console; -static int zs_probe(bus_t, device_t); -static int zs_attach(bus_t, device_t); +static int zs_probe(device_t); +static int zs_attach(device_t); static devclass_t zs_devclass; static devclass_t zsc_devclass; -driver_t zs_driver = { +static device_method_t zs_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, zs_probe), + DEVMETHOD(device_attach, zs_attach), + + { 0, 0 } +}; + +static driver_t zs_driver = { "zs", - zs_probe, - zs_attach, - NULL, - NULL, + zs_methods, DRIVER_TYPE_MISC, sizeof(struct zs_softc), - NULL, }; static int -zs_probe(bus_t bus, device_t dev) +zs_probe(device_t dev) { return 0; } static int -zs_attach(bus_t bus, device_t dev) +zs_attach(device_t dev) { struct zs_softc *sc = device_get_softc(dev); @@ -355,34 +360,38 @@ CDEV_DRIVER_MODULE(zs, zsc, zs_driver, zs_devclass, */ struct zsc_softc { - struct bus bus; caddr_t base; struct zs_softc* sc_a; struct zs_softc* sc_b; }; -static driver_probe_t zsc_tlsb_probe; -static driver_attach_t zsc_tlsb_attach; -static driver_intr_t zsc_tlsb_intr; -static bus_print_device_t zsc_tlsb_print_device; +static int zsc_tlsb_probe(device_t dev); +static int zsc_tlsb_attach(device_t dev); +static void zsc_tlsb_print_child(device_t dev, device_t child); +static driver_intr_t zsc_tlsb_intr; + + +static device_method_t zsc_tlsb_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, zsc_tlsb_probe), + DEVMETHOD(device_attach, zsc_tlsb_attach), + DEVMETHOD(device_detach, bus_generic_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + /* Bus interface */ + DEVMETHOD(bus_print_child, zsc_tlsb_print_child), + DEVMETHOD(bus_read_ivar, bus_generic_read_ivar), + DEVMETHOD(bus_write_ivar, bus_generic_write_ivar), + DEVMETHOD(bus_map_intr, bus_generic_map_intr), -driver_t zsc_tlsb_driver = { + { 0, 0 } +}; + +static driver_t zsc_tlsb_driver = { "zsc", - zsc_tlsb_probe, - zsc_tlsb_attach, - NULL, - NULL, + zsc_tlsb_methods, DRIVER_TYPE_MISC, sizeof(struct zsc_softc), - NULL, -}; - - -static bus_ops_t zsc_tlsb_ops = { - zsc_tlsb_print_device, - null_read_ivar, - null_write_ivar, - null_map_intr, }; static int @@ -394,56 +403,51 @@ zsc_get_channel(device_t dev) static caddr_t zsc_get_base(device_t dev) { - device_t busdev = bus_get_device(device_get_parent(dev)); - struct zsc_softc* sc = device_get_softc(busdev); + device_t bus = device_get_parent(dev); + struct zsc_softc* sc = device_get_softc(bus); return sc->base; } -static void -zsc_tlsb_print_device(bus_t bus, device_t dev) -{ - device_t busdev = bus_get_device(bus); - - printf(" at %s%d channel %c", - device_get_name(busdev), device_get_unit(busdev), - 'A' + (device_get_unit(dev) & 1)); -} - static int -zsc_tlsb_probe(bus_t parent, device_t dev) +zsc_tlsb_probe(device_t dev) { struct zsc_softc* sc = device_get_softc(dev); device_set_desc(dev, "Z8530 uart"); - bus_init(&sc->bus, dev, &zsc_tlsb_ops); - sc->base = (caddr_t) ALPHA_PHYS_TO_K0SEG(TLSB_GBUS_BASE + gbus_get_offset(dev)); /* * Add channel A for now. */ - bus_add_device(&sc->bus, "zs", -1, (void*) 0); + device_add_child(dev, "zs", -1, (void*) 0); return 0; } static int -zsc_tlsb_attach(bus_t parent, device_t dev) +zsc_tlsb_attach(device_t dev) { struct zsc_softc* sc = device_get_softc(dev); - bus_generic_attach(parent, dev); + bus_generic_attach(dev); /* XXX */ sc->sc_a = ZS_SOFTC(0); - bus_map_intr(parent, dev, zsc_tlsb_intr, sc); + BUS_MAP_INTR(device_get_parent(dev), dev, zsc_tlsb_intr, sc); return 0; } +static void +zsc_tlsb_print_child(device_t bus, device_t dev) +{ + printf(" at %s%d channel %c", + device_get_name(bus), device_get_unit(bus), + 'A' + (device_get_unit(dev) & 1)); +} static void zsc_tlsb_intr(void* arg) |