Attach the sunkbd line discipline to zstty.

This commit is contained in:
eeh 2000-11-09 00:02:54 +00:00
parent 954a7b9824
commit 17b69d1833
2 changed files with 48 additions and 15 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: kd.c,v 1.14 2000/11/02 00:21:03 eeh Exp $ */
/* $NetBSD: kd.c,v 1.15 2000/11/09 00:02:54 eeh Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@ -512,6 +512,7 @@ cons_attach_input(cc, cn)
cc->cc_upstream = kd_cons_input;
/* Attach lower level. */
cn_hw->cn_dev = cn->cn_dev;
cn_hw->cn_pollc = cn->cn_pollc;
cn_hw->cn_getc = cn->cn_getc;

View File

@ -1,4 +1,4 @@
/* $NetBSD: zs.c,v 1.25 2000/07/10 01:11:14 eeh Exp $ */
/* $NetBSD: zs.c,v 1.26 2000/11/09 00:02:54 eeh Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@ -69,11 +69,13 @@
#include <dev/cons.h>
#include <dev/ic/z8530reg.h>
#include <dev/sun/kbd_ms_ttyvar.h>
#include <ddb/db_output.h>
#include <sparc64/dev/cons.h>
#include "kbd.h" /* NKBD */
#include "ms.h" /* NMS */
#include "zs.h" /* NZS */
/* Make life easier for the initialized arrays here. */
@ -288,6 +290,8 @@ zs_attach(zsc, zsd, pri)
*/
for (channel = 0; channel < 2; channel++) {
struct zschan *zc;
struct device *child;
extern struct cfdriver zstty_cd; /* in ioconf.c */
zsc_args.channel = channel;
cs = &zsc->zsc_cs_store[channel];
@ -300,6 +304,7 @@ zs_attach(zsc, zsd, pri)
zc = (channel == 0) ? &zsd->zs_chan_a : &zsd->zs_chan_b;
zsc_args.consdev = NULL;
zsc_args.hwflags = zs_console_flags(zsc->zsc_promunit,
zsc->zsc_node,
channel);
@ -346,14 +351,53 @@ zs_attach(zsc, zsd, pri)
* Look for a child driver for this channel.
* The child attach will setup the hardware.
*/
if (!config_found(&zsc->zsc_dev, (void *)&zsc_args, zs_print)) {
if (!(child =
config_found(&zsc->zsc_dev, (void *)&zsc_args, zs_print))) {
/* No sub-driver. Just reset it. */
u_char reset = (channel == 0) ?
ZSWR9_A_RESET : ZSWR9_B_RESET;
s = splzs();
zs_write_reg(cs, 9, reset);
splx(s);
}
#if (NKBD > 0) || (NMS > 0)
/*
* If this was a zstty it has a keyboard
* property on it we need to attach the
* sunkbd and sunms line disciplines.
*/
if (child
&& (child->dv_cfdata->cf_driver == &zstty_cd)
&& (getproplen(zsc->zsc_node, "keyboard") == 0)) {
struct kbd_ms_tty_attach_args kma;
struct zstty_softc {
/* The following are the only fields we need here */
struct device zst_dev;
struct tty *zst_tty;
struct zs_chanstate *zst_cs;
} *zst = (struct zstty_softc *)child;
struct tty *tp;
int maj;
kma.kmta_tp = tp = zst->zst_tty;
kma.kmta_dev = tp->t_dev;
kma.kmta_consdev = zsc_args.consdev;
/* Attach 'em if we got 'em. */
#if (NKBD > 0)
if (channel == 0) {
kma.kmta_name = "keyboard";
config_found(child, (void *)&kma, NULL);
}
#endif
#if (NMS > 0)
if (channel == 1) {
kma.kmta_name = "mouse";
config_found(child, (void *)&kma, NULL);
}
#endif
}
#endif
}
/*
@ -381,18 +425,6 @@ zs_attach(zsc, zsd, pri)
zs_write_reg(cs, 9, zs_init_reg[9]);
splx(s);
#if 0
/*
* XXX: L1A hack - We would like to be able to break into
* the debugger during the rest of autoconfiguration, so
* lower interrupts just enough to let zs interrupts in.
* This is done after both zs devices are attached.
*/
if (zsc->zsc_promunit == 1) {
printf("zs1: enabling zs interrupts\n");
(void)splfd(); /* XXX: splzs - 1 */
}
#endif
}
static int