Use functions provided by the drivers to initialize and attach console

and KGDB. Make port address, speed and (7/8bit,parity,stopbits) for serial
lines configurable.
This commit is contained in:
drochner 1997-08-23 14:22:03 +00:00
parent d09a42059f
commit 2f05375163
1 changed files with 45 additions and 51 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.244 1997/08/15 00:45:16 cgd Exp $ */
/* $NetBSD: machdep.c,v 1.245 1997/08/23 14:22:03 drochner Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@ -216,7 +216,7 @@ vm_map_t buffer_map;
char consdevname[] = CONSDEVNAME;
#ifdef KGDB
#ifndef KGDB_DEVNAME
#define KGDB_DEVNAME "com0"
#define KGDB_DEVNAME "com"
#endif
char kgdb_devname[] = KGDB_DEVNAME;
#endif
@ -249,12 +249,37 @@ void dumpsys __P((void));
void identifycpu __P((void));
void init386 __P((vm_offset_t));
#if (NCOM > 0)
static int initcomport __P((unsigned int, int, int *, bus_space_handle_t *));
#ifndef CONADDR
#define CONADDR 0x3f8
#endif
int comcnaddr;
#ifndef CONSPEED
#define CONSPEED TTYDEF_SPEED
#endif
int comcnrate;
#ifndef CONMODE
#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
#endif
int comcnmode;
#endif /* NCOM */
void consinit __P((void));
#ifdef KGDB
void kgdb_port_init __P((void));
#if (NCOM > 0)
#ifndef KGDBADDR
#define KGDBADDR 0x3f8
#endif
int comkgdbaddr;
#ifndef KGDBRATE
#define KGDBRATE TTYDEF_SPEED
#endif
int comkgdbrate;
#ifndef KGDBMODE
#define KGDBMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
#endif
int comkgdbmode;
#endif /* NCOM */
void kgdb_port_init __P((void));
#endif /* KGDB */
#ifdef COMPAT_NOMID
static int exec_nomid __P((struct proc *, struct exec_package *));
#endif
@ -1694,29 +1719,6 @@ pmap_page_index(pa)
return -1;
}
#if (NCOM > 0)
/* minimal initialization of a com port for use by console or KGDB */
static int initcomport(idx, rate, iobase, handle)
unsigned int idx;
int rate;
int *iobase;
bus_space_handle_t *handle;
{
bus_space_tag_t tag = I386_BUS_SPACE_IO;
static int combases[] = {0x3f8, 0x2f8, 0x3e8, 0x3e8};
if(idx >= sizeof(combases) / sizeof(int))
return(-1);
*iobase = combases[idx];
if (bus_space_map(tag, *iobase, COM_NPORTS, 0, handle))
return(-1);
cominit(tag, *handle, rate);
return(0);
}
#endif
/*
* consinit:
* initialize the system console.
@ -1734,29 +1736,21 @@ consinit()
#if (NPC > 0) || (NVT > 0)
if(!strcmp(consdevname, "pc")) {
static struct consdev pccons = { NULL, NULL,
pccngetc, pccnputc, pccnpollc, NODEV, 1};
pccninit(0);
pccons.cn_dev = makedev(12, 0); /* XXX */
cn_tab = &pccons;
pccnattach();
return;
}
#endif
#if (NCOM > 0)
if(!strncmp(consdevname, "com", 3)) {
static struct consdev comcons = { NULL, NULL,
comcngetc, comcnputc, comcnpollc, NODEV, 1};
if(!strcmp(consdevname, "com")) {
bus_space_tag_t tag = I386_BUS_SPACE_IO;
if(initcomport(consdevname[3] - '0', comconsrate,
&comconsaddr, &comconsioh)) {
panic("can't init console port %s", consdevname);
}
comcnaddr = CONADDR;
comcnrate = CONSPEED;
comcnmode = CONMODE;
if(comcnattach(tag, comcnaddr, comcnrate, comcnmode))
panic("can't init serial console @%x", comcnaddr);
comcons.cn_dev = makedev(8, consdevname[3] - '0'); /* XXX */
cn_tab = &comcons;
comconscflag = (TTYDEF_CFLAG & ~(CSIZE | PARENB)) | CS8;
return;
}
#endif
@ -1770,14 +1764,14 @@ kgdb_port_init()
if(!strcmp(kgdb_devname, consdevname)) /* must be != console */
return;
#if (NCOM > 0)
if(!strncmp(kgdb_devname, "com", 3)) {
if(initcomport(kgdb_devname[3] - '0', kgdb_rate,
&com_kgdb_addr, &com_kgdb_ioh)) {
panic("can't init KGDB device %s", kgdb_devname);
}
if(!strcmp(kgdb_devname, "com")) {
bus_space_tag_t tag = I386_BUS_SPACE_IO;
kgdb_dev = 123; /* unneeded, only to satisfy some tests */
kgdb_attach(com_kgdb_getc, com_kgdb_putc, NULL);
comkgdbaddr = KGDBADDR;
comkgdbrate = KGDBRATE;
comkgdbmode = KGDBMODE;
com_kgdb_attach(tag, comkgdbaddr, comkgdbrate, comkgdbmode);
}
#endif
}