Module Name: src Committed By: hans Date: Tue Mar 4 14:31:07 UTC 2025
Modified Files: src/sys/arch/vax/vsa: dz_vsbus.c Log Message: vax/dz(4): defer configuring children lkkbd and lkms At least lkkdb (dzkbd, really) wants to not only send data over dz(4), it also depends on receiving them asynchronously for the keyboard type detection to work. So defer configuring dz(4) children until all vsbus children have attached and vsbus interrupts have been unmasked. This fixes keyboard type detection when running with serial console, which on most (all?) VAXstations is on dz(4), too. To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.50 src/sys/arch/vax/vsa/dz_vsbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/vax/vsa/dz_vsbus.c diff -u src/sys/arch/vax/vsa/dz_vsbus.c:1.49 src/sys/arch/vax/vsa/dz_vsbus.c:1.50 --- src/sys/arch/vax/vsa/dz_vsbus.c:1.49 Sun Mar 2 13:43:39 2025 +++ src/sys/arch/vax/vsa/dz_vsbus.c Tue Mar 4 14:31:07 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: dz_vsbus.c,v 1.49 2025/03/02 13:43:39 hans Exp $ */ +/* $NetBSD: dz_vsbus.c,v 1.50 2025/03/04 14:31:07 hans Exp $ */ /* * Copyright (c) 1998 Ludd, University of Lule}, Sweden. * All rights reserved. @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dz_vsbus.c,v 1.49 2025/03/02 13:43:39 hans Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dz_vsbus.c,v 1.50 2025/03/04 14:31:07 hans Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -64,6 +64,9 @@ static struct dz_linestate dz_conslinest static int dz_vsbus_match(device_t, cfdata_t, void *); static void dz_vsbus_attach(device_t, device_t, void *); +#if NDZKBD > 0 || NDZMS > 0 +static void dz_vsbus_attach_deferred(device_t); +#endif static vaddr_t dz_regs; /* Used for console */ @@ -128,12 +131,7 @@ dz_vsbus_attach(device_t parent, device_ { struct dz_softc * const sc = device_private(self); struct vsbus_attach_args * const va = aux; -#if NDZKBD > 0 extern const struct cdevsw dz_cdevsw; -#endif -#if NDZKBD > 0 || NDZMS > 0 - struct dzkm_attach_args daa; -#endif int s, consline; sc->sc_dev = self; @@ -178,11 +176,28 @@ dz_vsbus_attach(device_t parent, device_ if (consline != -1) cn_set_magic("\033D"); /* set VAX DDB escape sequence */ + s = spltty(); + dzrint(sc); + dzxint(sc); + splx(s); + +#if NDZKBD > 0 || NDZMS > 0 + config_defer(self, dz_vsbus_attach_deferred); +#endif +} + +#if NDZKBD > 0 || NDZMS > 0 +static void +dz_vsbus_attach_deferred(device_t self) +{ + struct dzkm_attach_args daa; #if NDZKBD > 0 + extern const struct cdevsw dz_cdevsw; + /* Don't touch this port if this is the console */ if (cn_tab->cn_dev != makedev(cdevsw_lookup_major(&dz_cdevsw), 0)) { dz->rbuf = DZ_LPR_RX_ENABLE | (DZ_LPR_B4800 << 8) - | DZ_LPR_8_BIT_CHAR; + | DZ_LPR_8_BIT_CHAR | 0 /* line */; daa.daa_line = 0; daa.daa_flags = (cn_tab->cn_pri == CN_INTERNAL ? DZKBD_CONSOLE : 0); @@ -196,11 +211,8 @@ dz_vsbus_attach(device_t parent, device_ daa.daa_flags = 0; config_found(self, &daa, dz_print, CFARGS_NONE); #endif - s = spltty(); - dzrint(sc); - dzxint(sc); - splx(s); } +#endif int dzcngetc(dev_t dev)