Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Nov 2004 03:07:15 GMT
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 64284 for review
Message-ID:  <200411050307.iA537FZU057187@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help

http://perforce.freebsd.org/chv.cgi?CH=64284

Change 64284 by marcel@marcel_nfs on 2004/11/05 03:07:01

	The scc(4) driver provides as many (subordinate) busses as
	there are channels and as many children on each of the busses
	as there are serial modes. Attach an ivar for the mode to
	each child so that drivers that can handle the mode can
	attach to the child.

Affected files ...

.. //depot/projects/uart/dev/scc/scc_bus.h#2 edit
.. //depot/projects/uart/dev/uart/uart_bus_scc.c#3 edit

Differences ...

==== //depot/projects/uart/dev/scc/scc_bus.h#2 (text+ko) ====

@@ -32,9 +32,16 @@
 #define	SCC_IVAR_CHANNEL	0
 #define	SCC_IVAR_CLASS		1
 #define	SCC_IVAR_CLOCK		2
-#define	SCC_IVAR_REGSHFT	3
+#define	SCC_IVAR_MODE		3
+#define	SCC_IVAR_REGSHFT	4
 
+/* Hardware class -- the SCC type. */
 #define	SCC_CLASS_SAB82532	0
 #define	SCC_CLASS_Z8530		1
 
+/* The possible modes supported by the SCC. */
+#define	SCC_MODE_ASYNC		0
+#define	SCC_MODE_BISYNC		1
+#define	SCC_MODE_HDLC		2
+
 #endif /* _DEV_SCC_BUS_H_ */

==== //depot/projects/uart/dev/uart/uart_bus_scc.c#3 (text+ko) ====

@@ -64,12 +64,15 @@
 {
 	device_t parent;
 	struct uart_softc *sc;
-	uintptr_t ch, cl, rs;
+	uintptr_t ch, cl, md, rs;
 
 	parent = device_get_parent(dev);
 	sc = device_get_softc(dev);
 
-	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CLASS, &cl))
+	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_MODE, &md) ||
+	    BUS_READ_IVAR(parent, dev, SCC_IVAR_CLASS, &cl))
+		return (ENXIO);
+	if (md != SCC_MODE_ASYNC)
 		return (ENXIO);
 	switch (cl) {
 	case SCC_CLASS_SAB82532:
@@ -81,12 +84,11 @@
 	default:
 		return (ENXIO);
 	}
-	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CHANNEL, &ch))
-		ch = 0;
-	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CLOCK, &cl))
-		cl = 0;
-	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs))
-		rs = 0;
+	if (BUS_READ_IVAR(parent, dev, SCC_IVAR_CHANNEL, &ch) ||
+	    BUS_READ_IVAR(parent, dev, SCC_IVAR_CLOCK, &cl) ||
+	    BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs))
+		return (ENXIO);
+
 	return (uart_bus_probe(dev, rs, cl, 0, ch));
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411050307.iA537FZU057187>