#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ibus_pmax.c,v 1.24 2016/11/16 19:37:06 macallan Exp $");
#include "opt_dec_3100.h"
#include "opt_dec_5100.h"
#include <sys/param.h>
#include <sys/device.h>
#include <sys/systm.h>
#include <pmax/ibus/ibusvar.h>
#include <pmax/autoconf.h>
#include <pmax/sysconf.h>
#include <pmax/pmax/kn01.h>
#include <pmax/pmax/kn230.h>
#include <pmax/pmax/pmaxtype.h>
static int ibus_pmax_match(device_t, cfdata_t, void *);
static void ibus_pmax_attach(device_t, device_t, void *);
CFATTACH_DECL_NEW(ibus_pmax, 0,
ibus_pmax_match, ibus_pmax_attach, NULL, NULL);
#define KV(x) MIPS_PHYS_TO_KSEG1(x)
#ifdef DEC_3100
static struct ibus_attach_args ibus_pmax_devs[] = {
{ "pm", SYS_DEV_BOGUS, KV(KN01_PHYS_FBUF_START), 0 },
{ "dc", SYS_DEV_SCC0, KV(KN01_SYS_DZ), 0 },
{ "lance", SYS_DEV_LANCE, KV(KN01_SYS_LANCE), 0 },
{ "sii", SYS_DEV_SCSI, KV(KN01_SYS_SII), 0 },
{ "mc146818", SYS_DEV_BOGUS, KV(KN01_SYS_CLOCK), 0 },
};
#endif
#ifdef DEC_5100
static struct ibus_attach_args ibus_mipsmate_devs[] = {
{ "dc", SYS_DEV_SCC0, KV(KN230_SYS_DZ0), 0 },
{ "lance", SYS_DEV_LANCE, KV(KN230_SYS_LANCE), 0 },
{ "sii", SYS_DEV_SCSI, KV(KN230_SYS_SII), 0 },
{ "mc146818", SYS_DEV_BOGUS, KV(KN230_SYS_CLOCK), 0 },
#if 0
{ "dc", SYS_DEV_OPT0, KV(KN230_SYS_DZ1), 0 },
{ "dc", SYS_DEV_OPT1, KV(KN230_SYS_DZ2), 0 },
{ "nvram", SYS_DEV_BOGUS, KV(0x86400000), 0 },
#endif
};
#endif
static int ibus_attached;
static int
ibus_pmax_match(device_t parent, cfdata_t cf, void *aux)
{
struct mainbus_attach_args *ma = aux;
if (ibus_attached)
return (0);
if (systype != DS_PMAX && systype != DS_MIPSMATE)
return (0);
if (strcmp(ma->ma_name, "baseboard") != 0)
return (0);
return (1);
}
static void
ibus_pmax_attach(device_t parent, device_t self, void *aux)
{
struct ibus_dev_attach_args ida;
ibus_attached = 1;
ida.ida_busname = "ibus";
ida.ida_memt = normal_memt;
switch (systype) {
#ifdef DEC_3100
case DS_PMAX:
ida.ida_devs = ibus_pmax_devs;
ida.ida_ndevs = __arraycount(ibus_pmax_devs);
break;
#endif
#ifdef DEC_5100
case DS_MIPSMATE:
ida.ida_devs = ibus_mipsmate_devs;
ida.ida_ndevs = __arraycount(ibus_mipsmate_devs);
break;
#endif
default:
panic("ibus_pmax_attach: no ibus configured for systype = %d", systype);
}
ibusattach(parent, self, &ida);
}