From 2f053751637628c7d4c9035918e05fc5e1ebff94 Mon Sep 17 00:00:00 2001 From: drochner Date: Sat, 23 Aug 1997 14:22:03 +0000 Subject: [PATCH] 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. --- sys/arch/i386/i386/machdep.c | 96 +++++++++++++++++------------------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/sys/arch/i386/i386/machdep.c b/sys/arch/i386/i386/machdep.c index bb2114ab0651..3df7542136e2 100644 --- a/sys/arch/i386/i386/machdep.c +++ b/sys/arch/i386/i386/machdep.c @@ -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 }