PERFORCE change 64284 for review

Marcel Moolenaar marcel at FreeBSD.org
Thu Nov 4 19:07:17 PST 2004


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

Change 64284 by marcel at 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));
 }
 


More information about the p4-projects mailing list