Index | Thread | Search

From:
Mark Kettenis <mark.kettenis@xs4all.nl>
Subject:
exuart(4): Recognize a BREAK
To:
tech@openbsd.org
Date:
Thu, 03 Jul 2025 00:19:42 +0200

Download raw body.

Thread
Diff below makes the Apple variant of exuart(4) recognize a BREAK and
enter DDB if the ddb.console sysctl is set.

The Central Scrutinizer sends a BREAK to the machine when you type: ^_ ^@

ok?


Index: dev/fdt/exuart.c
===================================================================
RCS file: /cvs/src/sys/dev/fdt/exuart.c,v
diff -u -p -r1.12 exuart.c
--- dev/fdt/exuart.c	23 Jul 2023 11:16:36 -0000	1.12
+++ dev/fdt/exuart.c	2 Jul 2025 22:17:13 -0000
@@ -209,6 +209,7 @@ exuart_attach(struct device *parent, str
 		cn_tab->cn_dev = makedev(maj, sc->sc_dev.dv_unit);
 
 		printf(": console");
+		SET(sc->sc_hwflags, COM_HW_CONSOLE);
 	}
 
 	printf("\n");
@@ -385,12 +386,22 @@ exuart_s5l_intr(void *arg)
 	struct exuart_softc *sc = arg;
 	bus_space_tag_t iot = sc->sc_iot;
 	bus_space_handle_t ioh = sc->sc_ioh;
-	u_int32_t utrstat;
+	u_int32_t utrstat, uerstat;
 
 	utrstat = bus_space_read_4(iot, ioh, EXUART_UTRSTAT);
+	uerstat = bus_space_read_4(iot, ioh, EXUART_UERSTAT);
 
 	if (sc->sc_tty == NULL)
 		return (0);
+
+#ifdef DDB
+	if (uerstat & EXUART_UERSTAT_BREAK) {
+		if (ISSET(sc->sc_hwflags, COM_HW_CONSOLE)) {
+			if (db_console)
+				db_enter();
+		}
+	}
+#endif
 
 	if (utrstat & (EXUART_S5L_UTRSTAT_RXTHRESH |
 	    EXUART_S5L_UTRSTAT_RX_TIMEOUT))