Module Name:    src
Committed By:   jmcneill
Date:           Fri Nov 30 16:26:19 UTC 2018

Modified Files:
        src/sys/dev/ic: com.c comvar.h

Log Message:
Add support for com(4) without an interrupt by setting the COM_HW_POLL flag


To generate a diff of this commit:
cvs rdiff -u -r1.349 -r1.350 src/sys/dev/ic/com.c
cvs rdiff -u -r1.87 -r1.88 src/sys/dev/ic/comvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/com.c
diff -u src/sys/dev/ic/com.c:1.349 src/sys/dev/ic/com.c:1.350
--- src/sys/dev/ic/com.c:1.349	Wed Nov 28 22:28:46 2018
+++ src/sys/dev/ic/com.c	Fri Nov 30 16:26:19 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: com.c,v 1.349 2018/11/28 22:28:46 jmcneill Exp $ */
+/* $NetBSD: com.c,v 1.350 2018/11/30 16:26:19 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.349 2018/11/28 22:28:46 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.350 2018/11/30 16:26:19 jmcneill Exp $");
 
 #include "opt_com.h"
 #include "opt_ddb.h"
@@ -379,6 +379,16 @@ com_enable_debugport(struct com_softc *s
 	CSR_WRITE_1(&sc->sc_regs, COM_REG_MCR, sc->sc_mcr);
 }
 
+static void
+com_intr_poll(void *arg)
+{
+	struct com_softc * const sc = arg;
+
+	comintr(sc);
+
+	callout_schedule(&sc->sc_poll_callout, 1);
+}
+
 void
 com_attach_subr(struct com_softc *sc)
 {
@@ -396,6 +406,8 @@ com_attach_subr(struct com_softc *sc)
 	prop_dictionary_get_bool(dict, "is_console", &is_console);
 	prop_dictionary_get_bool(dict, "force_console", &force_console);
 	callout_init(&sc->sc_diag_callout, 0);
+	callout_init(&sc->sc_poll_callout, 0);
+	callout_setfunc(&sc->sc_poll_callout, com_intr_poll, sc);
 	mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_HIGH);
 
 #if defined(COM_16650)
@@ -676,6 +688,9 @@ fifodone:
 	com_config(sc);
 
 	SET(sc->sc_hwflags, COM_HW_DEV_OK);
+
+	if (ISSET(sc->sc_hwflags, COM_HW_POLL))
+		callout_schedule(&sc->sc_poll_callout, 1);
 }
 
 void

Index: src/sys/dev/ic/comvar.h
diff -u src/sys/dev/ic/comvar.h:1.87 src/sys/dev/ic/comvar.h:1.88
--- src/sys/dev/ic/comvar.h:1.87	Sun May 27 17:05:06 2018
+++ src/sys/dev/ic/comvar.h	Fri Nov 30 16:26:19 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: comvar.h,v 1.87 2018/05/27 17:05:06 jmcneill Exp $	*/
+/*	$NetBSD: comvar.h,v 1.88 2018/11/30 16:26:19 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
@@ -69,6 +69,7 @@ int com_is_console(bus_space_tag_t, bus_
 #define	COM_HW_TXFIFO_DISABLE	0x100
 #define	COM_HW_NO_TXPRELOAD	0x200
 #define	COM_HW_AFE	0x400
+#define	COM_HW_POLL	0x800
 
 /* Buffer size for character buffer */
 #ifndef COM_RING_SIZE
@@ -166,7 +167,8 @@ struct com_softc {
 	void *sc_si;
 	struct tty *sc_tty;
 
-	struct callout sc_diag_callout;
+	callout_t sc_diag_callout;
+	callout_t sc_poll_callout;
 
 	int sc_frequency;
 

Reply via email to