#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.8 2012/10/13 17:58:53 jdc Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <machine/bootinfo.h>
#include <sys/bus.h>
#include <machine/intr.h>
#include <dev/cons.h>
#include "gten.h"
#if (NGTEN > 0)
#include <machine/gtenvar.h>
#endif
#if (NGTEN > 0)
#include <dev/pci/pcivar.h>
#endif
#include "vga.h"
#if (NVGA > 0)
#include <dev/ic/mc6845reg.h>
#include <dev/ic/pcdisplayvar.h>
#include <dev/ic/vgareg.h>
#include <dev/ic/vgavar.h>
#endif
#include "pckbc.h"
#if (NPCKBC > 0)
#include <dev/isa/isareg.h>
#include <dev/ic/i8042reg.h>
#include <dev/ic/pckbcvar.h>
#endif
#include "com.h"
#if (NCOM > 0)
#include <sys/termios.h>
#include <dev/ic/comreg.h>
#include <dev/ic/comvar.h>
#endif
void
consinit(void)
{
struct btinfo_console *consinfo;
static int initted = 0;
#if (NGTEN > 0)
struct prep_pci_chipset pc;
#endif
if (initted)
return;
initted = 1;
consinfo = (struct btinfo_console *)lookup_bootinfo(BTINFO_CONSOLE);
if (!consinfo)
panic("not found console information in bootinfo");
#if (NPFB > 0)
if (!strcmp(consinfo->devname, "fb")) {
pfb_cnattach(consinfo->addr);
#if (NPCKBC > 0)
pckbc_cnattach(&genppc_isa_io_space_tag, IO_KBD, KBCMDP,
PCKBC_KBD_SLOT, 0);
#endif
return;
}
#endif
#if (NVGA > 0) || (NGTEN > 0)
if (!strcmp(consinfo->devname, "vga")) {
#if (NGTEN > 0)
prep_pci_get_chipset_tag(&pc);
#endif
#if (NGTEN > 0)
if (!gten_cnattach(&pc, &prep_mem_space_tag))
goto dokbd;
#endif
#if (NVGA > 0)
if (!vga_cnattach(&prep_io_space_tag, &prep_mem_space_tag,
-1, 1))
goto dokbd;
#endif
dokbd:
#if (NPCKBC > 0)
pckbc_cnattach(&genppc_isa_io_space_tag, IO_KBD, KBCMDP,
PCKBC_KBD_SLOT, 0);
#endif
return;
}
#endif
#if (NCOM > 0)
if (!strcmp(consinfo->devname, "com")) {
bus_space_tag_t tag = &genppc_isa_io_space_tag;
if(comcnattach(tag, consinfo->addr, consinfo->speed, COM_FREQ,
COM_TYPE_NORMAL,
((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8)))
panic("can't init serial console");
return;
}
#endif
panic("invalid console device %s", consinfo->devname);
}