Module Name:    src
Committed By:   tsutsui
Date:           Sun Feb  2 15:35:06 UTC 2014

Modified Files:
        src/sys/arch/luna68k/dev: lunaws.c sio.c siotty.c siovar.h

Log Message:
Misc cleanup of sio drivers.

- register softc of child devices as an argument of the sio interrupt
  handler to avoid device_lookup_private() calls on every interrupt
- change type of sc_reg from (void *) to (struct sioreg *)
  to avoid weird address offset calculations with redundant casts
- rename struct sio_softc members for consistency
- use a channel number passed via sio_attach_args in lunaws_attach()

No functional chnages.  Tested on LUNA.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/luna68k/dev/lunaws.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/luna68k/dev/sio.c
cvs rdiff -u -r1.38 -r1.39 src/sys/arch/luna68k/dev/siotty.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/luna68k/dev/siovar.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/arch/luna68k/dev/lunaws.c
diff -u src/sys/arch/luna68k/dev/lunaws.c:1.27 src/sys/arch/luna68k/dev/lunaws.c:1.28
--- src/sys/arch/luna68k/dev/lunaws.c:1.27	Mon Sep 23 17:27:09 2013
+++ src/sys/arch/luna68k/dev/lunaws.c	Sun Feb  2 15:35:06 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: lunaws.c,v 1.27 2013/09/23 17:27:09 tsutsui Exp $ */
+/* $NetBSD: lunaws.c,v 1.28 2014/02/02 15:35:06 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: lunaws.c,v 1.27 2013/09/23 17:27:09 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lunaws.c,v 1.28 2014/02/02 15:35:06 tsutsui Exp $");
 
 #include "wsmouse.h"
 
@@ -118,7 +118,7 @@ static const struct wsmouse_accessops om
 };
 #endif
 
-static void wsintr(int);
+static void wsintr(void *);
 static void wssoftintr(void *);
 
 static int  wsmatch(device_t, cfdata_t, void *);
@@ -144,14 +144,16 @@ static void
 wsattach(device_t parent, device_t self, void *aux)
 {
 	struct ws_softc *sc = device_private(self);
-	struct sio_softc *scp = device_private(parent);
+	struct sio_softc *siosc = device_private(parent);
 	struct sio_attach_args *args = aux;
+	int channel = args->channel;
 	struct wskbddev_attach_args a;
 
 	sc->sc_dev = self;
-	sc->sc_ctl = (struct sioreg *)scp->scp_ctl + 1;
+	sc->sc_ctl = &siosc->sc_ctl[channel];
 	memcpy(sc->sc_wr, ch1_regs, sizeof(ch1_regs));
-	scp->scp_intr[1] = wsintr;
+	siosc->sc_intrhand[channel].ih_func = wsintr;
+	siosc->sc_intrhand[channel].ih_arg = sc;
 
 	setsioreg(sc->sc_ctl, WR0, sc->sc_wr[WR0]);
 	setsioreg(sc->sc_ctl, WR4, sc->sc_wr[WR4]);
@@ -189,9 +191,9 @@ wsattach(device_t parent, device_t self,
 
 /*ARGSUSED*/
 static void
-wsintr(int chan)
+wsintr(void *arg)
 {
-	struct ws_softc *sc = device_lookup_private(&ws_cd, 0);
+	struct ws_softc *sc = arg;
 	struct sioreg *sio = sc->sc_ctl;
 	uint8_t code;
 	int rr;

Index: src/sys/arch/luna68k/dev/sio.c
diff -u src/sys/arch/luna68k/dev/sio.c:1.12 src/sys/arch/luna68k/dev/sio.c:1.13
--- src/sys/arch/luna68k/dev/sio.c:1.12	Mon Sep 23 17:27:09 2013
+++ src/sys/arch/luna68k/dev/sio.c	Sun Feb  2 15:35:06 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: sio.c,v 1.12 2013/09/23 17:27:09 tsutsui Exp $ */
+/* $NetBSD: sio.c,v 1.13 2014/02/02 15:35:06 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: sio.c,v 1.12 2013/09/23 17:27:09 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sio.c,v 1.13 2014/02/02 15:35:06 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -52,7 +52,7 @@ static int  sio_print(void *, const char
 CFATTACH_DECL_NEW(sio, sizeof(struct sio_softc),
     sio_match, sio_attach, NULL, NULL);
 
-static void nullintr(int);
+static void nullintr(void *);
 static int xsiointr(void *);
 
 static int
@@ -78,10 +78,10 @@ sio_attach(device_t parent, device_t sel
 
 	aprint_normal(": uPD7201A\n");
 
-	sc->scp_dev = self;
-	sc->scp_ctl = (void *)ma->ma_addr;
-	sc->scp_intr[0] = sc->scp_intr[1] = nullintr;
+	sc->sc_dev = self;
+	sc->sc_ctl = (void *)ma->ma_addr;
 	for (channel = 0; channel < 2; channel++) {
+		sc->sc_intrhand[channel].ih_func = nullintr;
 		sio_args.channel = channel;
 		sio_args.hwflags = (channel == sysconsole);
 		config_found(self, (void *)&sio_args, sio_print);
@@ -109,12 +109,16 @@ xsiointr(void *arg)
 {
 	struct sio_softc *sc = arg;
 
-	(*sc->scp_intr[0])(0);	/* 0: ttya system serial port */
-	(*sc->scp_intr[1])(1);	/* 1: keyboard and mouse */
+	/* channel 0: ttya system serial port */
+	(*sc->sc_intrhand[0].ih_func)(sc->sc_intrhand[0].ih_arg);
+
+	/* channel 1: keyboard and mouse */
+	(*sc->sc_intrhand[1].ih_func)(sc->sc_intrhand[1].ih_arg);
+
 	return 1;
 }
 
 static void
-nullintr(int v)
+nullintr(void *arg)
 {
 }

Index: src/sys/arch/luna68k/dev/siotty.c
diff -u src/sys/arch/luna68k/dev/siotty.c:1.38 src/sys/arch/luna68k/dev/siotty.c:1.39
--- src/sys/arch/luna68k/dev/siotty.c:1.38	Thu Jan  2 03:32:35 2014
+++ src/sys/arch/luna68k/dev/siotty.c	Sun Feb  2 15:35:06 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: siotty.c,v 1.38 2014/01/02 03:32:35 tsutsui Exp $ */
+/* $NetBSD: siotty.c,v 1.39 2014/02/02 15:35:06 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: siotty.c,v 1.38 2014/01/02 03:32:35 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siotty.c,v 1.39 2014/02/02 15:35:06 tsutsui Exp $");
 
 #include "opt_ddb.h"
 
@@ -106,7 +106,7 @@ static struct cnm_state	siotty_cnm_state
 #include "siotty.h"
 static void siostart(struct tty *);
 static int  sioparam(struct tty *, struct termios *);
-static void siottyintr(int);
+static void siottyintr(void *);
 static void siottysoft(void *);
 static void siotty_rxsoft(struct siotty_softc *, struct tty *);
 static void siotty_txsoft(struct siotty_softc *, struct tty *);
@@ -145,15 +145,18 @@ siotty_match(device_t parent, cfdata_t c
 static void
 siotty_attach(device_t parent, device_t self, void *aux)
 {
-	struct sio_softc *scp = device_private(parent);
+	struct sio_softc *siosc = device_private(parent);
 	struct siotty_softc *sc = device_private(self);
 	struct sio_attach_args *args = aux;
+	int channel;
 	struct tty *tp;
 
 	sc->sc_dev = self;
-	sc->sc_ctl = (struct sioreg *)scp->scp_ctl + args->channel;
+	channel = args->channel;
+	sc->sc_ctl = &siosc->sc_ctl[channel];
 	memcpy(sc->sc_wr, ch0_regs, sizeof(ch0_regs));
-	scp->scp_intr[args->channel] = siottyintr;
+	siosc->sc_intrhand[channel].ih_func = siottyintr;
+	siosc->sc_intrhand[channel].ih_arg = sc;
 	if (args->hwflags == 1)
 		sc->sc_hwflags |= SIOTTY_HW_CONSOLE;
 
@@ -199,7 +202,7 @@ siotty_attach(device_t parent, device_t 
 /*--------------------  low level routine --------------------*/
 
 static void
-siottyintr(int chan)
+siottyintr(void *arg)
 {
 	struct siotty_softc *sc;
 	struct sioreg *sio;
@@ -208,10 +211,7 @@ siottyintr(int chan)
 	uint16_t rr;
 	int cc;
 
-	sc = device_lookup_private(&siotty_cd, chan);
-	if (sc == NULL)
-		return;
-
+	sc = arg;
 	end = sc->sc_rbufend;
 	put = sc->sc_rbput;
 	cc = sc->sc_rbavail;

Index: src/sys/arch/luna68k/dev/siovar.h
diff -u src/sys/arch/luna68k/dev/siovar.h:1.7 src/sys/arch/luna68k/dev/siovar.h:1.8
--- src/sys/arch/luna68k/dev/siovar.h:1.7	Tue Dec 31 14:24:09 2013
+++ src/sys/arch/luna68k/dev/siovar.h	Sun Feb  2 15:35:06 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: siovar.h,v 1.7 2013/12/31 14:24:09 tsutsui Exp $ */
+/* $NetBSD: siovar.h,v 1.8 2014/02/02 15:35:06 tsutsui Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -29,12 +29,6 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-struct sio_softc {
-	device_t scp_dev;
-	void *scp_ctl;
-	void (*scp_intr[2])(int);
-};
-
 struct sio_attach_args {
 	int channel;
 	int hwflags;
@@ -48,5 +42,14 @@ struct sioreg {
 #define sio_stat sio_cmd
 };
 
+struct sio_softc {
+	device_t sc_dev;
+	struct sioreg *sc_ctl;
+	struct {
+		void (*ih_func)(void *);
+		void *ih_arg;
+	} sc_intrhand[2];
+};
+
 uint16_t getsiocsr(struct sioreg *);
 void setsioreg(struct sioreg *, int, int);

Reply via email to