-Export variables needed for system console initialization.

-Enable line break interrupt for DDB on a serial console.
-Share initialization code between DDB and KGDB.
This commit is contained in:
drochner 1997-08-14 16:15:15 +00:00
parent 3bbb2f7b18
commit b426bd9be3
4 changed files with 78 additions and 62 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: com.c,v 1.103 1997/08/12 17:25:43 drochner Exp $ */
/* $NetBSD: com.c,v 1.104 1997/08/14 16:15:15 drochner Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1996, 1997
@ -103,6 +103,9 @@
int comprobeHAYESP __P((bus_space_handle_t hayespioh, struct com_softc *sc));
#endif
#if defined(DDB) || defined(KGDB)
static void com_enable_debugport __P((struct com_softc *));
#endif
void com_attach_subr __P((struct com_softc *sc));
void comdiag __P((void *));
int comspeed __P((long));
@ -180,8 +183,6 @@ int com_kgdb_addr;
bus_space_tag_t com_kgdb_iot;
bus_space_handle_t com_kgdb_ioh;
void com_kgdb_attach __P((struct com_softc *, bus_space_tag_t,
bus_space_handle_t));
int com_kgdb_getc __P((void *));
void com_kgdb_putc __P((void *, int));
#endif /* KGDB */
@ -326,27 +327,6 @@ comprobeHAYESP(hayespioh, sc)
#endif
#ifdef KGDB
void
com_kgdb_attach(sc, iot, ioh)
struct com_softc *sc;
bus_space_tag_t iot;
bus_space_handle_t ioh;
{
int s;
u_char stat;
SET(sc->sc_hwflags, COM_HW_KGDB);
/* Turn on interrupts. */
s = splserial();
sc->sc_ier = IER_ERXRDY;
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
bus_space_write_1(iot, ioh, com_mcr, MCR_DTR | MCR_RTS | MCR_IENABLE);
DELAY(100);
stat = bus_space_read_1(iot, ioh, com_iir);
splx(s);
}
/* ARGSUSED */
int
com_kgdb_getc(arg)
@ -367,6 +347,22 @@ com_kgdb_putc(arg, c)
}
#endif /* KGDB */
#if defined(DDB) || defined(KGDB)
static void
com_enable_debugport(sc)
struct com_softc *sc;
{
int s;
/* Turn on line break interrupt, set carrier. */
s = splserial();
sc->sc_ier = IER_ERXRDY;
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
SET(sc->sc_mcr, MCR_DTR | MCR_RTS);
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_mcr, sc->sc_mcr);
splx(s);
}
#endif
void
com_attach_subr(sc)
@ -454,7 +450,9 @@ com_attach_subr(sc)
SET(sc->sc_mcr, MCR_IENABLE);
if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
cominit(iot, ioh, comconsrate);
#ifdef DDB
com_enable_debugport(sc);
#endif
printf("%s: console\n", sc->sc_dev.dv_xname);
}
@ -463,9 +461,9 @@ com_attach_subr(sc)
* Allow kgdb to "take over" this port. If this is
* the kgdb device, it has exclusive use.
*/
if (iobase == com_kgdb_addr
&& !ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
com_kgdb_attach(sc, iot, ioh);
if (iobase == com_kgdb_addr) {
SET(sc->sc_hwflags, COM_HW_KGDB);
com_enable_debugport(sc);
printf("%s: kgdb\n", sc->sc_dev.dv_xname);
}
#endif
@ -649,7 +647,13 @@ comclose(dev, flag, mode, p)
s = splserial();
/* Turn off interrupts. */
sc->sc_ier = 0;
#ifdef DDB
if(ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
sc->sc_ier = IER_ERXRDY; /* interrupt on break */
else
#else
sc->sc_ier = 0;
#endif
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
splx(s);

View File

@ -1,4 +1,4 @@
/* $NetBSD: comvar.h,v 1.12 1997/08/12 17:25:45 drochner Exp $ */
/* $NetBSD: comvar.h,v 1.13 1997/08/14 16:15:16 drochner Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@ -31,10 +31,14 @@
*/
extern int comconsaddr;
extern int comconsattached;
extern bus_space_tag_t comconstag;
extern bus_space_handle_t comconsioh;
extern int comconsrate;
extern tcflag_t comconscflag;
int comcngetc __P((dev_t));
void comcnputc __P((dev_t, int));
void comcnpollc __P((dev_t, int));
extern int comconsattached;
#ifdef KGDB
extern int com_kgdb_addr;

View File

@ -1,4 +1,4 @@
/* $NetBSD: com.c,v 1.103 1997/08/12 17:25:43 drochner Exp $ */
/* $NetBSD: com.c,v 1.104 1997/08/14 16:15:15 drochner Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995, 1996, 1997
@ -103,6 +103,9 @@
int comprobeHAYESP __P((bus_space_handle_t hayespioh, struct com_softc *sc));
#endif
#if defined(DDB) || defined(KGDB)
static void com_enable_debugport __P((struct com_softc *));
#endif
void com_attach_subr __P((struct com_softc *sc));
void comdiag __P((void *));
int comspeed __P((long));
@ -180,8 +183,6 @@ int com_kgdb_addr;
bus_space_tag_t com_kgdb_iot;
bus_space_handle_t com_kgdb_ioh;
void com_kgdb_attach __P((struct com_softc *, bus_space_tag_t,
bus_space_handle_t));
int com_kgdb_getc __P((void *));
void com_kgdb_putc __P((void *, int));
#endif /* KGDB */
@ -326,27 +327,6 @@ comprobeHAYESP(hayespioh, sc)
#endif
#ifdef KGDB
void
com_kgdb_attach(sc, iot, ioh)
struct com_softc *sc;
bus_space_tag_t iot;
bus_space_handle_t ioh;
{
int s;
u_char stat;
SET(sc->sc_hwflags, COM_HW_KGDB);
/* Turn on interrupts. */
s = splserial();
sc->sc_ier = IER_ERXRDY;
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
bus_space_write_1(iot, ioh, com_mcr, MCR_DTR | MCR_RTS | MCR_IENABLE);
DELAY(100);
stat = bus_space_read_1(iot, ioh, com_iir);
splx(s);
}
/* ARGSUSED */
int
com_kgdb_getc(arg)
@ -367,6 +347,22 @@ com_kgdb_putc(arg, c)
}
#endif /* KGDB */
#if defined(DDB) || defined(KGDB)
static void
com_enable_debugport(sc)
struct com_softc *sc;
{
int s;
/* Turn on line break interrupt, set carrier. */
s = splserial();
sc->sc_ier = IER_ERXRDY;
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
SET(sc->sc_mcr, MCR_DTR | MCR_RTS);
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_mcr, sc->sc_mcr);
splx(s);
}
#endif
void
com_attach_subr(sc)
@ -454,7 +450,9 @@ com_attach_subr(sc)
SET(sc->sc_mcr, MCR_IENABLE);
if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
cominit(iot, ioh, comconsrate);
#ifdef DDB
com_enable_debugport(sc);
#endif
printf("%s: console\n", sc->sc_dev.dv_xname);
}
@ -463,9 +461,9 @@ com_attach_subr(sc)
* Allow kgdb to "take over" this port. If this is
* the kgdb device, it has exclusive use.
*/
if (iobase == com_kgdb_addr
&& !ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
com_kgdb_attach(sc, iot, ioh);
if (iobase == com_kgdb_addr) {
SET(sc->sc_hwflags, COM_HW_KGDB);
com_enable_debugport(sc);
printf("%s: kgdb\n", sc->sc_dev.dv_xname);
}
#endif
@ -649,7 +647,13 @@ comclose(dev, flag, mode, p)
s = splserial();
/* Turn off interrupts. */
sc->sc_ier = 0;
#ifdef DDB
if(ISSET(sc->sc_hwflags, COM_HW_CONSOLE))
sc->sc_ier = IER_ERXRDY; /* interrupt on break */
else
#else
sc->sc_ier = 0;
#endif
bus_space_write_1(sc->sc_iot, sc->sc_ioh, com_ier, sc->sc_ier);
splx(s);

View File

@ -1,4 +1,4 @@
/* $NetBSD: comvar.h,v 1.12 1997/08/12 17:25:45 drochner Exp $ */
/* $NetBSD: comvar.h,v 1.13 1997/08/14 16:15:16 drochner Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@ -31,10 +31,14 @@
*/
extern int comconsaddr;
extern int comconsattached;
extern bus_space_tag_t comconstag;
extern bus_space_handle_t comconsioh;
extern int comconsrate;
extern tcflag_t comconscflag;
int comcngetc __P((dev_t));
void comcnputc __P((dev_t, int));
void comcnpollc __P((dev_t, int));
extern int comconsattached;
#ifdef KGDB
extern int com_kgdb_addr;