Module Name:    src
Committed By:   mrg
Date:           Fri May 22 03:51:30 UTC 2009

Modified Files:
        src/sys/arch/sparc/dev: zs.c
        src/sys/arch/sparc64/dev: zs.c
        src/sys/dev/ic: z8530sc.c z8530sc.h z8530tty.c

Log Message:
add two new functions for z8530tty: zs_chan_lock() and zs_chan_unlock(),
and use them instead of various spl's in the zs.c's.

reviewed by ad and martin.


To generate a diff of this commit:
cvs rdiff -u -r1.114 -r1.115 src/sys/arch/sparc/dev/zs.c
cvs rdiff -u -r1.67 -r1.68 src/sys/arch/sparc64/dev/zs.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/z8530sc.c
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/ic/z8530sc.h
cvs rdiff -u -r1.126 -r1.127 src/sys/dev/ic/z8530tty.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/sparc/dev/zs.c
diff -u src/sys/arch/sparc/dev/zs.c:1.114 src/sys/arch/sparc/dev/zs.c:1.115
--- src/sys/arch/sparc/dev/zs.c:1.114	Sat May 16 16:55:24 2009
+++ src/sys/arch/sparc/dev/zs.c	Fri May 22 03:51:30 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: zs.c,v 1.114 2009/05/16 16:55:24 cegger Exp $	*/
+/*	$NetBSD: zs.c,v 1.115 2009/05/22 03:51:30 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs.c,v 1.114 2009/05/16 16:55:24 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs.c,v 1.115 2009/05/22 03:51:30 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -395,7 +395,7 @@
 {
 	struct zsc_attach_args zsc_args;
 	struct zs_chanstate *cs;
-	int s, channel;
+	int channel;
 	static int didintr, prevpri;
 #if (NKBD > 0) || (NMS > 0)
 	int ch0_is_cons = 0;
@@ -507,9 +507,9 @@
 			/* No sub-driver.  Just reset it. */
 			uint8_t reset = (channel == 0) ?
 				ZSWR9_A_RESET : ZSWR9_B_RESET;
-			s = splzs();
+			zs_lock_chan(cs);
 			zs_write_reg(cs,  9, reset);
-			splx(s);
+			zs_unlock_chan(cs);
 		}
 #if (NKBD > 0) || (NMS > 0)
 		/*
@@ -569,12 +569,12 @@
 	 * (common to both channels, do it on A)
 	 */
 	cs = zsc->zsc_cs[0];
-	s = splhigh();
+	zs_lock_chan(cs);
 	/* interrupt vector */
 	zs_write_reg(cs, 2, zs_init_reg[2]);
 	/* master interrupt control (enable) */
 	zs_write_reg(cs, 9, zs_init_reg[9]);
-	splx(s);
+	zs_unlock_chan(cs);
 
 #if 0
 	/*
@@ -651,7 +651,7 @@
 zssoft(void *arg)
 {
 	struct zsc_softc *zsc;
-	int s, unit;
+	int unit;
 
 	/* This is not the only ISR on this IPL. */
 	if (zssoftpending == 0)
@@ -666,15 +666,19 @@
 	/* ienab_bic(IE_ZSSOFT); */
 	zssoftpending = 0;
 
-	/* Make sure we call the tty layer at spltty. */
-	s = spltty();
+#if 0 /* not yet */
+	/* Make sure we call the tty layer with tty_lock held. */
+	mutex_spin_enter(&tty_lock);
+#endif
 	for (unit = 0; unit < zs_cd.cd_ndevs; unit++) {
 		zsc = device_lookup_private(&zs_cd, unit);
 		if (zsc == NULL)
 			continue;
 		(void)zsc_intr_soft(zsc);
 	}
-	splx(s);
+#if 0 /* not yet */
+	mutex_spin_exit(&tty_lock);
+#endif
 }
 
 
@@ -729,7 +733,6 @@
 int
 zs_set_modes(struct zs_chanstate *cs, int cflag)
 {
-	int s;
 
 	/*
 	 * Output hardware flow control on the chip is horrendous:
@@ -738,7 +741,7 @@
 	 * Therefore, NEVER set the HFC bit, and instead use the
 	 * status interrupt to detect CTS changes.
 	 */
-	s = splzs();
+	zs_lock_chan(cs);
 	cs->cs_rr0_pps = 0;
 	if ((cflag & (CLOCAL | MDMBUF)) != 0) {
 		cs->cs_rr0_dcd = 0;
@@ -763,7 +766,7 @@
 		cs->cs_wr5_rts = 0;
 		cs->cs_rr0_cts = 0;
 	}
-	splx(s);
+	zs_unlock_chan(cs);
 
 	/* Caller will stuff the pending registers. */
 	return (0);

Index: src/sys/arch/sparc64/dev/zs.c
diff -u src/sys/arch/sparc64/dev/zs.c:1.67 src/sys/arch/sparc64/dev/zs.c:1.68
--- src/sys/arch/sparc64/dev/zs.c:1.67	Fri Jun 13 13:10:49 2008
+++ src/sys/arch/sparc64/dev/zs.c	Fri May 22 03:51:30 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: zs.c,v 1.67 2008/06/13 13:10:49 cegger Exp $	*/
+/*	$NetBSD: zs.c,v 1.68 2009/05/22 03:51:30 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zs.c,v 1.67 2008/06/13 13:10:49 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zs.c,v 1.68 2009/05/22 03:51:30 mrg Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -254,7 +254,7 @@
 {
 	struct zsc_attach_args zsc_args;
 	struct zs_chanstate *cs;
-	int s, channel;
+	int channel;
 
 	if (zsd == NULL) {
 		aprint_error(": configuration incomplete\n");
@@ -333,9 +333,9 @@
 			/* No sub-driver.  Just reset it. */
 			uint8_t reset = (channel == 0) ?
 				ZSWR9_A_RESET : ZSWR9_B_RESET;
-			s = splzs();
+			zs_lock_chan(cs);
 			zs_write_reg(cs,  9, reset);
-			splx(s);
+			zs_unlock_chan(cs);
 		} 
 #if (NKBD > 0) || (NMS > 0)
 		/* 
@@ -388,13 +388,12 @@
 	 * (common to both channels, do it on A)
 	 */
 	cs = zsc->zsc_cs[0];
-	s = splhigh();
+	zs_lock_chan(cs);
 	/* interrupt vector */
 	zs_write_reg(cs, 2, zs_init_reg[2]);
 	/* master interrupt control (enable) */
 	zs_write_reg(cs, 9, zs_init_reg[9]);
-	splx(s);
-
+	zs_unlock_chan(cs);
 }
 
 static int
@@ -460,10 +459,11 @@
 zssoft(void *arg)
 {
 	struct zsc_softc *zsc = arg;
-	int s;
 
-	/* Make sure we call the tty layer at spltty. */
-	s = spltty();
+#if 0 /* not yet */
+	/* Make sure we call the tty layer with tty_lock held. */
+	mutex_spin_enter(&tty_lock);
+#endif
 	zssoftpending = 0;
 	(void)zsc_intr_soft(zsc);
 #ifdef TTY_DEBUG
@@ -478,7 +478,9 @@
 		}
 	}
 #endif
-	splx(s);
+#if 0 /* not yet */
+	mutex_spin_exit(&tty_lock);
+#endif
 }
 
 
@@ -532,7 +534,6 @@
 int
 zs_set_modes(struct zs_chanstate *cs, int cflag)
 {
-	int s;
 
 	/*
 	 * Output hardware flow control on the chip is horrendous:
@@ -541,7 +542,7 @@
 	 * Therefore, NEVER set the HFC bit, and instead use the
 	 * status interrupt to detect CTS changes.
 	 */
-	s = splzs();
+	zs_lock_chan(cs);
 	cs->cs_rr0_pps = 0;
 	if ((cflag & (CLOCAL | MDMBUF)) != 0) {
 		cs->cs_rr0_dcd = 0;
@@ -566,7 +567,7 @@
 		cs->cs_wr5_rts = 0;
 		cs->cs_rr0_cts = 0;
 	}
-	splx(s);
+	zs_unlock_chan(cs);
 
 	/* Caller will stuff the pending registers. */
 	return (0);

Index: src/sys/dev/ic/z8530sc.c
diff -u src/sys/dev/ic/z8530sc.c:1.29 src/sys/dev/ic/z8530sc.c:1.30
--- src/sys/dev/ic/z8530sc.c:1.29	Fri Mar 20 16:28:57 2009
+++ src/sys/dev/ic/z8530sc.c	Fri May 22 03:51:30 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: z8530sc.c,v 1.29 2009/03/20 16:28:57 tsutsui Exp $	*/
+/*	$NetBSD: z8530sc.c,v 1.30 2009/05/22 03:51:30 mrg Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: z8530sc.c,v 1.29 2009/03/20 16:28:57 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: z8530sc.c,v 1.30 2009/05/22 03:51:30 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -274,6 +274,20 @@
 	mutex_init(&cs->cs_lock, MUTEX_NODEBUG, IPL_ZS);
 }
 
+void
+zs_lock_chan(struct zs_chanstate *cs)
+{
+
+	mutex_spin_enter(&cs->cs_lock);
+}
+
+void
+zs_unlock_chan(struct zs_chanstate *cs)
+{
+
+	mutex_spin_exit(&cs->cs_lock);
+}
+
 /*
  * ZS hardware interrupt.  Scan all ZS channels.  NB: we know here that
  * channels are kept in (A,B) pairs.

Index: src/sys/dev/ic/z8530sc.h
diff -u src/sys/dev/ic/z8530sc.h:1.25 src/sys/dev/ic/z8530sc.h:1.26
--- src/sys/dev/ic/z8530sc.h:1.25	Sun Apr 20 15:42:47 2008
+++ src/sys/dev/ic/z8530sc.h	Fri May 22 03:51:30 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: z8530sc.h,v 1.25 2008/04/20 15:42:47 tsutsui Exp $	*/
+/*	$NetBSD: z8530sc.h,v 1.26 2009/05/22 03:51:30 mrg Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -203,6 +203,8 @@
 int 	zs_set_speed(struct zs_chanstate *, int);
 int 	zs_set_modes(struct zs_chanstate *, int);
 void	zs_lock_init(struct zs_chanstate *);
+void	zs_lock_chan(struct zs_chanstate *);
+void	zs_unlock_chan(struct zs_chanstate *);
 
 int zs_check_kgdb(struct zs_chanstate *, int);
 

Index: src/sys/dev/ic/z8530tty.c
diff -u src/sys/dev/ic/z8530tty.c:1.126 src/sys/dev/ic/z8530tty.c:1.127
--- src/sys/dev/ic/z8530tty.c:1.126	Tue May 12 14:25:18 2009
+++ src/sys/dev/ic/z8530tty.c	Fri May 22 03:51:30 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: z8530tty.c,v 1.126 2009/05/12 14:25:18 cegger Exp $	*/
+/*	$NetBSD: z8530tty.c,v 1.127 2009/05/22 03:51:30 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999
@@ -137,7 +137,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.126 2009/05/12 14:25:18 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.127 2009/05/22 03:51:30 mrg Exp $");
 
 #include "opt_kgdb.h"
 #include "opt_ntp.h"
@@ -930,11 +930,10 @@
 zsstop(struct tty *tp, int flag)
 {
 	struct zstty_softc *zst;
-	int s;
 
 	zst = device_lookup_private(&zstty_cd, ZSUNIT(tp->t_dev));
 
-	s = splzs();
+	mutex_spin_enter(&zst->zst_cs->cs_lock);
 	if (ISSET(tp->t_state, TS_BUSY)) {
 		/* Stop transmitting at the next chunk. */
 		zst->zst_tbc = 0;
@@ -942,7 +941,7 @@
 		if (!ISSET(tp->t_state, TS_TTSTOP))
 			SET(tp->t_state, TS_FLUSH);
 	}
-	splx(s);
+	mutex_spin_exit(&zst->zst_cs->cs_lock);
 }
 
 /*
@@ -1508,15 +1507,14 @@
 {
 	struct zstty_softc *zst = arg;
 	int overflows, floods;
-	int s;
 
-	s = splzs();
+	mutex_spin_enter(&zst->zst_cs->cs_lock);
 	overflows = zst->zst_overflows;
 	zst->zst_overflows = 0;
 	floods = zst->zst_floods;
 	zst->zst_floods = 0;
 	zst->zst_errors = 0;
-	splx(s);
+	mutex_spin_exit(&zst->zst_cs->cs_lock);
 
 	log(LOG_WARNING, "%s: %d silo overflow%s, %d ibuf flood%s\n",
 	    device_xname(zst->zst_dev),

Reply via email to