Subject: Re: Changing ibm4xx device tree.
To: Shigeyuki Fukushima <shige@netbsd.org>
From: Jason Thorpe <thorpej@shagadelic.org>
List: port-powerpc
Date: 05/05/2006 12:51:00
On May 4, 2006, at 12:06 PM, Shigeyuki Fukushima wrote:
> I have a plan for changing ibm4xx device tree.
>
> Because we want to cancel ibm405gp-dependencies from
> powerpc/ibm4xx sources.
>
> Now there are many ibm4xx family cpu, such as
> 403xx/405EP/405GP/405GPr/405CR/440GP/440GR/440EP/440SP,
> and so on. But they don't always have same devices.
> For example, 405CR has no PCI bus on PLB, but other 405xx
> have PCI bus on PLB. Devices on OPB, too.
>
>
> device tree [before changes]:
> plb(root)
> |
> +-- cpu
> +-- ecc
> +-- opb (almost 405GP-specific code)
> +-- pchb (405GP-specific)
>
> device tree [after changes]:
> mainbus(root) evbppc/evbppc/mainbus.c
> +-- cpu cpu-depend-setup
> +-- plb config_attach with cpu_attach_args
> | (device infomation each 4xx have)
> +-- ecc
> +-- opb
> +-- pchb
There is no need to have the extra layer of indirection. You can
determine which plb devices are present by simply checking the cpu
type in the plb driver.
>
> I will plan 2-steps for changing.
> Step 1) Introduce all evbppc machine to mainbus as a root device.
> Step 2) Prepare & Set cpu_attach_args (each 405xx).
> (440xx will be future work.)
>
> I attached a patch for applying (Step 1) in this mail.
> Please review it.
> If there is no objection, I will commit these changes.
>
> How about above plan?
> And have you any good(preferred) idea?
>
> --
> Kind Regards,
> --- shige
> Shigeyuki Fukushima <shige@{FreeBSD,jp.FreeBSD,NetBSD}.org>
> ? evbppc/evbppc/mainbus.c
> ? evbppc/evbppc/mainbusvar.h
> Index: powerpc/conf/files.ibm4xx
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/powerpc/conf/files.ibm4xx,v
> retrieving revision 1.10
> diff -u -r1.10 files.ibm4xx
> --- powerpc/conf/files.ibm4xx 13 Mar 2006 15:31:11 -0000 1.10
> +++ powerpc/conf/files.ibm4xx 4 May 2006 19:02:41 -0000
> @@ -7,9 +7,14 @@
> # Board Properties
> file arch/powerpc/ibm4xx/board_prop.c
>
> +# CPU
> +device cpu { }
> +attach cpu at mainbus
> +file arch/powerpc/ibm4xx/cpu.c
> +
> # Processor Local Bus
> device plb { [irq = -1] }
> -attach plb at root
> +attach plb at cpu
> file arch/powerpc/ibm4xx/dev/plb.c plb
>
> # On-chip Peripheral Bus
> @@ -17,10 +22,6 @@
> attach opb at plb
> file arch/powerpc/ibm4xx/dev/opb.c opb
>
> -device cpu {}
> -attach cpu at plb
> -file arch/powerpc/ibm4xx/cpu.c
> -
> device ecc
> attach ecc at plb with ecc_plb
> file arch/powerpc/ibm4xx/dev/ecc_plb.c ecc_plb
> Index: powerpc/ibm4xx/cpu.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/cpu.c,v
> retrieving revision 1.22
> diff -u -r1.22 cpu.c
> --- powerpc/ibm4xx/cpu.c 24 Dec 2005 22:45:36 -0000 1.22
> +++ powerpc/ibm4xx/cpu.c 4 May 2006 19:02:41 -0000
> @@ -46,7 +46,6 @@
> #include <uvm/uvm_extern.h>
>
> #include <machine/cpu.h>
> -#include <powerpc/ibm4xx/dev/plbvar.h>
>
> struct cputab {
> int version;
> @@ -68,6 +67,9 @@
>
> static int cpumatch(struct device *, struct cfdata *, void *);
> static void cpuattach(struct device *, struct device *, void *);
> +#ifndef PPC_IBM403
> +static int cpu_core_print(void *, const char *);
> +#endif
>
> CFATTACH_DECL(cpu, sizeof(struct device),
> cpumatch, cpuattach, NULL, NULL);
> @@ -80,16 +82,12 @@
>
> int cpufound = 0;
>
> +
> static int
> cpumatch(struct device *parent, struct cfdata *cf, void *aux)
> {
> - struct plb_attach_args *paa = aux;
> -
> - /* make sure that we're looking for a CPU */
> - if (strcmp(paa->plb_name, cf->cf_name) != 0)
> - return (0);
>
> - return !cpufound;
> + return 1;
> }
>
> static void
> @@ -146,7 +144,21 @@
> printf("PVR: owner %x core family %x cache %x version %x asic %x\n",
> own, pcf, cas, pcl, aid);
> #endif
> +
> +#ifndef PPC_IBM403
> + (void) config_found_ia(self, "cpu", NULL, cpu_core_print);
> +#endif
> +}
> +
> +#ifndef PPC_IBM403
> +static int
> +cpu_core_print(void *aux, const char *pnp)
> +{
> +
> + return (UNCONF);
> }
> +#endif
> +
>
> /*
> * This routine must be explicitly called to initialize the
> Index: powerpc/ibm4xx/dev/plb.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/dev/plb.c,v
> retrieving revision 1.14
> diff -u -r1.14 plb.c
> --- powerpc/ibm4xx/dev/plb.c 11 Dec 2005 12:18:42 -0000 1.14
> +++ powerpc/ibm4xx/dev/plb.c 4 May 2006 19:02:41 -0000
> @@ -86,7 +86,6 @@
> * The devices that attach to the processor local bus on the 405GP
> CPU.
> */
> const struct plb_dev plb_devs [] = {
> - { "cpu", },
> { "ecc", },
> { "opb", },
> { "pchb", },
> Index: evbppc/conf/EXPLORA451
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/EXPLORA451,v
> retrieving revision 1.25
> diff -u -r1.25 EXPLORA451
> --- evbppc/conf/EXPLORA451 19 Apr 2006 10:31:44 -0000 1.25
> +++ evbppc/conf/EXPLORA451 4 May 2006 19:02:41 -0000
> @@ -151,7 +151,8 @@
>
> config netbsd root on ? type ?
>
> -elb0 at root
> +mainbus0 at root
> +elb0 at mainbus?
>
> cpu0 at elb?
> com0 at elb?
> Index: evbppc/conf/OPENBLOCKS200
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/OPENBLOCKS200,v
> retrieving revision 1.14
> diff -u -r1.14 OPENBLOCKS200
> --- evbppc/conf/OPENBLOCKS200 29 Mar 2006 17:10:41 -0000 1.14
> +++ evbppc/conf/OPENBLOCKS200 4 May 2006 19:02:42 -0000
> @@ -133,11 +133,13 @@
> # Device configuration
> #
>
> -plb0 at root # Processor Local Bus
> +mainbus0 at root # Mainbus
>
> -cpu0 at plb?
> +cpu0 at mainbus? # CPU
>
> -ecc0 at plb? irq 16 # On-chip ECC controller
> +plb* at cpu? # Processor Local Bus
> +
> +ecc* at plb? irq 16 # On-chip ECC controller
>
> opb* at plb? # On-chip Peripheral Bus
>
> @@ -154,7 +156,7 @@
> opbgpio0 at opb? addr ? irq ? # On-chip GPIO controller
> gpio* at opbgpio? # GPIO bus
>
> -pchb0 at plb? # PCI-Host bridges
> +pchb* at plb? # PCI-Host bridges
>
> pci* at pchb?
> ppb* at pci? dev ? function ? # PCI-PCI bridges
> Index: evbppc/conf/OPENBLOCKS266
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/OPENBLOCKS266,v
> retrieving revision 1.32
> diff -u -r1.32 OPENBLOCKS266
> --- evbppc/conf/OPENBLOCKS266 2 Apr 2006 17:04:24 -0000 1.32
> +++ evbppc/conf/OPENBLOCKS266 4 May 2006 19:02:42 -0000
> @@ -152,10 +152,11 @@
> # Device configuration
> #
>
> -plb0 at root # Processor Local Bus
> -cpu0 at plb? # CPU
> -ecc0 at plb? irq 16 # On-chip ECC controller
> -pchb0 at plb? # PCI-Host bridges
> +mainbus0 at root # Mainbus
> +cpu0 at mainbus? # CPU
> +plb* at cpu? # Processor Local Bus
> +ecc* at plb? irq 16 # On-chip ECC controller
> +pchb* at plb? # PCI-Host bridges
>
> # On-chip Peripheral Bus support
> opb* at plb? # On-chip Peripheral Bus
> Index: evbppc/conf/WALNUT
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/WALNUT,v
> retrieving revision 1.30
> diff -u -r1.30 WALNUT
> --- evbppc/conf/WALNUT 28 Mar 2006 20:58:39 -0000 1.30
> +++ evbppc/conf/WALNUT 4 May 2006 19:02:42 -0000
> @@ -135,9 +135,11 @@
> # Device configuration
> #
>
> -plb0 at root # Processor Local Bus
> +mainbus0 at root # MainBus
>
> -cpu0 at plb?
> +cpu0 at mainbus?
> +
> +plb0 at cpu? # Processor Local Bus
>
> ecc0 at plb? irq 16 # On-chip ECC controller
>
> @@ -241,7 +243,7 @@
> sd* at atapibus? drive ? flags 0x0000 # ATAPI disk drives
> uk* at atapibus? drive ? flags 0x0000 # ATAPI unknown
>
> -pbus* at plb? # off-chip Peripheral BUS
> +pbus* at mainbus? # off-chip Peripheral BUS
>
> ds1743rtc0 at pbus? addr ? # RTC
> todclock0 at ds1743rtc? # time-of-day device via rtc device
> Index: evbppc/conf/files.evbppc
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/files.evbppc,v
> retrieving revision 1.5
> diff -u -r1.5 files.evbppc
> --- evbppc/conf/files.evbppc 11 Dec 2005 12:17:11 -0000 1.5
> +++ evbppc/conf/files.evbppc 4 May 2006 19:02:42 -0000
> @@ -13,4 +13,9 @@
> file arch/powerpc/powerpc/procfs_machdep.c procfs
> file dev/cons.c
>
> +# System bus
> +device mainbus { }
> +attach mainbus at root
> +file arch/evbppc/evbppc/mainbus.c mainbus
> +
> include "arch/evbppc/conf/majors.evbppc"
> Index: evbppc/conf/files.explora
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/files.explora,v
> retrieving revision 1.5
> diff -u -r1.5 files.explora
> --- evbppc/conf/files.explora 11 Dec 2005 12:17:11 -0000 1.5
> +++ evbppc/conf/files.explora 4 May 2006 19:02:42 -0000
> @@ -22,7 +22,7 @@
>
> # Explora local bus
> device elb {}
> -attach elb at root
> +attach elb at mainbus
> file arch/evbppc/explora/dev/elb.c elb
>
> device cpu
> Index: evbppc/conf/files.obs200
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/files.obs200,v
> retrieving revision 1.3
> diff -u -r1.3 files.obs200
> --- evbppc/conf/files.obs200 29 Mar 2006 17:46:42 -0000 1.3
> +++ evbppc/conf/files.obs200 4 May 2006 19:02:42 -0000
> @@ -4,7 +4,6 @@
> # obs200-specific configuration info
>
> file arch/powerpc/ibm4xx/ibm4xx_autoconf.c
> -file arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c
> file arch/powerpc/ibm4xx/ibm40x_machdep.c
> file arch/powerpc/ibm4xx/ibm4xx_machdep.c
> file arch/powerpc/ibm4xx/intr.c
> Index: evbppc/conf/files.obs405
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/files.obs405,v
> retrieving revision 1.15
> diff -u -r1.15 files.obs405
> --- evbppc/conf/files.obs405 13 Mar 2006 16:20:58 -0000 1.15
> +++ evbppc/conf/files.obs405 4 May 2006 19:02:42 -0000
> @@ -3,7 +3,6 @@
> # obs405-specific configuration info
>
> file arch/powerpc/ibm4xx/ibm4xx_autoconf.c
> -file arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.c
> file arch/powerpc/ibm4xx/ibm40x_machdep.c
> file arch/powerpc/ibm4xx/ibm4xx_machdep.c
> file arch/powerpc/ibm4xx/intr.c
> Index: evbppc/conf/files.walnut
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/conf/files.walnut,v
> retrieving revision 1.9
> diff -u -r1.9 files.walnut
> --- evbppc/conf/files.walnut 27 Feb 2006 11:04:31 -0000 1.9
> +++ evbppc/conf/files.walnut 4 May 2006 19:02:42 -0000
> @@ -43,7 +43,7 @@
>
> # Off-chip peripheral bus
> device pbus {[addr=-1], [irq=-1]}
> -attach pbus at plb
> +attach pbus at mainbus
> file arch/evbppc/walnut/dev/pbus.c pbus
>
> define todservice {}
> Index: evbppc/explora/autoconf.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/explora/autoconf.c,v
> retrieving revision 1.6
> diff -u -r1.6 autoconf.c
> --- evbppc/explora/autoconf.c 24 Dec 2005 22:45:35 -0000 1.6
> +++ evbppc/explora/autoconf.c 4 May 2006 19:02:42 -0000
> @@ -44,13 +44,24 @@
> #include <sys/device.h>
> #include <sys/systm.h>
>
> +#include <evbppc/evbppc/mainbusvar.h>
> +
> +/*
> + * List of port-specific devices to attach to the mainbus.
> + */
> +static const struct mainbusdev machine_mainbus_devs[] = {
> + { "elb", },
> + { NULL }
> +};
> +
> +
> void
> cpu_configure(void)
> {
> intr_init();
> calc_delayconst();
>
> - if (config_rootfound("elb", NULL) == NULL)
> + if (config_rootfound("mainbus", &machine_mainbus_devs) == NULL)
> panic("configure: elb not configured");
>
> printf("biomask %x netmask %x ttymask %x\n", (u_short)imask
> [IPL_BIO],
> Index: evbppc/obs405/obs200_autoconf.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/obs405/obs200_autoconf.c,v
> retrieving revision 1.2
> diff -u -r1.2 obs200_autoconf.c
> --- evbppc/obs405/obs200_autoconf.c 11 Dec 2005 12:17:12 -0000 1.2
> +++ evbppc/obs405/obs200_autoconf.c 4 May 2006 19:02:42 -0000
> @@ -40,6 +40,44 @@
>
> #include <machine/obs200.h>
>
> +#include <powerpc/ibm4xx/dcr405gp.h>
> +#include <evbppc/evbppc/mainbusvar.h>
> +
> +/*
> + * List of port-specific devices to attach to the mainbus.
> + */
> +static const struct mainbusdev machine_mainbus_devs[] = {
> + { "cpu", },
> + { NULL }
> +};
> +
> +/*
> + * Determine device configuration for a machine.
> + */
> +void
> +cpu_configure(void)
> +{
> +
> + intr_init();
> + calc_delayconst();
> +
> + /* Make sure that timers run at CPU frequency */
> + mtdcr(DCR_CPC0_CR1, mfdcr(DCR_CPC0_CR1) & ~CPC0_CR1_CETE);
> +
> + if (config_rootfound("mainbus", &machine_mainbus_devs) == NULL)
> + panic("configure: mainbus not configured");
> +
> + printf("biomask %x netmask %x ttymask %x\n", (u_short)imask
> [IPL_BIO],
> + (u_short)imask[IPL_NET], (u_short)imask[IPL_TTY]);
> +
> + (void)spl0();
> +
> + /*
> + * Now allow hardware interrupts.
> + */
> + __asm volatile ("wrteei 1");
> +}
> +
> void device_register(struct device *dev, void *aux)
> {
>
> Index: evbppc/obs405/obs266_autoconf.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/obs405/obs266_autoconf.c,v
> retrieving revision 1.2
> diff -u -r1.2 obs266_autoconf.c
> --- evbppc/obs405/obs266_autoconf.c 11 Dec 2005 12:17:12 -0000 1.2
> +++ evbppc/obs405/obs266_autoconf.c 4 May 2006 19:02:42 -0000
> @@ -40,6 +40,44 @@
>
> #include <machine/obs266.h>
>
> +#include <powerpc/ibm4xx/dcr405gp.h>
> +#include <evbppc/evbppc/mainbusvar.h>
> +
> +/*
> + * List of port-specific devices to attach to the mainbus.
> + */
> +static const struct mainbusdev machine_mainbus_devs[] = {
> + { "cpu", },
> + { NULL }
> +};
> +
> +/*
> + * Determine device configuration for a machine.
> + */
> +void
> +cpu_configure(void)
> +{
> +
> + intr_init();
> + calc_delayconst();
> +
> + /* Make sure that timers run at CPU frequency */
> + mtdcr(DCR_CPC0_CR1, mfdcr(DCR_CPC0_CR1) & ~CPC0_CR1_CETE);
> +
> + if (config_rootfound("mainbus", &machine_mainbus_devs) == NULL)
> + panic("configure: mainbus not configured");
> +
> + printf("biomask %x netmask %x ttymask %x\n", (u_short)imask
> [IPL_BIO],
> + (u_short)imask[IPL_NET], (u_short)imask[IPL_TTY]);
> +
> + (void)spl0();
> +
> + /*
> + * Now allow hardware interrupts.
> + */
> + __asm volatile ("wrteei 1");
> +}
> +
> void device_register(struct device *dev, void *aux)
> {
>
> Index: evbppc/walnut/autoconf.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/evbppc/walnut/autoconf.c,v
> retrieving revision 1.13
> diff -u -r1.13 autoconf.c
> --- evbppc/walnut/autoconf.c 26 Feb 2006 05:51:52 -0000 1.13
> +++ evbppc/walnut/autoconf.c 4 May 2006 19:02:42 -0000
> @@ -41,13 +41,14 @@
>
> #include <dev/ic/comreg.h> /* For COM_FREQ */
>
> +#include <evbppc/evbppc/mainbusvar.h>
> #include <powerpc/ibm4xx/dcr405gp.h>
> -#include <powerpc/ibm4xx/dev/plbvar.h>
>
> /*
> * List of port-specific devices to attach to the processor local
> bus.
> */
> -static const struct plb_dev local_plb_devs [] = {
> +static const struct mainbusdev machine_mainbus_devs[] = {
> + { "cpu", },
> { "pbus", },
> { NULL }
> };
> @@ -65,7 +66,7 @@
> /* Make sure that timers run at CPU frequency */
> mtdcr(DCR_CPC0_CR1, mfdcr(DCR_CPC0_CR1) & ~CPC0_CR1_CETE);
>
> - if (config_rootfound("plb", &local_plb_devs) == NULL)
> + if (config_rootfound("mainbus", &machine_mainbus_devs) == NULL)
> panic("configure: plb not configured");
>
> printf("biomask %x netmask %x ttymask %x\n", (u_short)imask
> [IPL_BIO],
> /* $NetBSD$ */
>
> /*
> * Copyright (c) 2006 The NetBSD Foundation, Inc.
> * All rights reserved.
> *
> * This code is derived from software contributed
> * to The NetBSD Foundation, Inc.
> * by Shigeyuki Fukushima.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> * 2. Redistributions in binary form must reproduce the above
> copyright
> * notice, this list of conditions and the following disclaimer
> in the
> * documentation and/or other materials provided with the
> distribution.
> * 3. All advertising materials mentioning features or use of this
> software
> * must display the following acknowledgement:
> * This product includes software developed by the 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 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 FOUNDATION 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/cdefs.h>
> __KERNEL_RCSID(0, "$NetBSD$");
>
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/device.h>
>
> #include <evbppc/evbppc/mainbusvar.h>
>
> #include "locators.h"
>
> static int mainbus_match(struct device *, struct cfdata *, void *);
> static void mainbus_attach(struct device *, struct device *, void *);
> static int mainbus_print(void *, const char *);
>
> CFATTACH_DECL(mainbus, sizeof(struct device),
> mainbus_match, mainbus_attach, NULL, NULL);
>
> static int mainbus_found;
>
>
> static int
> mainbus_match(struct device *parent, struct cfdata *match, void *aux)
> {
>
> if (mainbus_found)
> return 0;
>
> return 1;
> }
>
> static void
> mainbus_attach(struct device *parent, struct device *self, void *aux)
> {
> struct mainbusdev *machine_devs = aux;
>
> mainbus_found = 1;
> printf("\n");
>
> while (machine_devs && machine_devs->dev_name != NULL) {
> (void) config_found_ia(self, "mainbus", NULL, mainbus_print);
> machine_devs++;
> }
> }
>
> static int
> mainbus_print(void *aux, const char *pnp)
> {
>
> return (UNCONF);
> }
> /* $NetBSD$ */
>
> /*-
> * Copyright (c) 2006 The NetBSD Foundation, Inc.
> * All rights reserved.
> *
> * This code is derived from software contributed
> * to The NetBSD Foundation, Inc.
> * by Shigeyuki Fukushima.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> * 2. Redistributions in binary form must reproduce the above
> copyright
> * notice, this list of conditions and the following disclaimer
> in the
> * documentation and/or other materials provided with the
> distribution.
> * 3. All advertising materials mentioning features or use of this
> software
> * must display the following acknowledgement:
> * This product includes software developed by the 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 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 FOUNDATION OR
> CONTRIBUTORS
> * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> EXEMPLARY, OR
> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> PROCUREMENT OF
> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
> BUSINESS
> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> WHETHER IN
> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> OTHERWISE)
> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> ADVISED OF THE
> * POSSIBILITY OF SUCH DAMAGE.
> */
>
> #ifndef _EVBPPC_EVBPPC_MAINBUS_H_
> #define _EVBPPC_EVBPPC_MAINBUS_H_
>
> struct mainbusdev {
> const char *dev_name; /* device name */
> };
>
> #endif /* _EVBPPC_EVBPPC_MAINBUS_H_ */
-- thorpej