PERFORCE change 136654 for review

Rafal Jaworowski raj at FreeBSD.org
Sun Mar 2 12:32:54 UTC 2008


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

Change 136654 by raj at raj_mimi on 2008/03/02 12:32:18

	Consolidate uart_cpu_powerpc.c so that different platforms are
	supported per config option.
	
	This approach based on conditional compilation is temporary and
	will be turned into a more subtle dispatching technique in the future.

Affected files ...

.. //depot/projects/e500/sys/dev/uart/uart_cpu_powerpc.c#4 edit

Differences ...

==== //depot/projects/e500/sys/dev/uart/uart_cpu_powerpc.c#4 (text) ====

@@ -27,24 +27,36 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/sys/dev/uart/uart_cpu_powerpc.c,v 1.4 2007/12/19 18:00:49 marcel Exp $");
 
+#include "opt_platform.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 
 #include <machine/bus.h>
 
+#ifndef MPC85XX
+#include <dev/ofw/openfirm.h>
+#include <machine/ofw_machdep.h>
+#endif
+
 #include <dev/uart/uart.h>
 #include <dev/uart/uart_cpu.h>
 
+#ifdef MPC85XX
 bus_space_tag_t uart_bus_space_io = &bs_be_tag;
 bus_space_tag_t uart_bus_space_mem = &bs_be_tag;
+#else
+bus_space_tag_t uart_bus_space_io = &bs_le_tag;
+bus_space_tag_t uart_bus_space_mem = &bs_le_tag;
+#endif
 
 int
 uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2)
 {
-
 	return ((b1->bsh == b2->bsh) ? 1 : 0);
 }
 
+#ifdef MPC85XX
 int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {
@@ -59,3 +71,67 @@
 	/* Check the environment. */
 	return (uart_getenv(devtype, di, class));
 }
+#else
+int
+uart_cpu_getdev(int devtype, struct uart_devinfo *di)
+{
+	char buf[64];
+	struct uart_class *class;
+	phandle_t input, opts;
+	int error;
+
+	class = &uart_z8530_class;
+	if (class == NULL)
+		return (ENXIO);
+
+	if ((opts = OF_finddevice("/options")) == -1)
+		return (ENXIO);
+	switch (devtype) {
+	case UART_DEV_CONSOLE:
+		if (OF_getprop(opts, "input-device", buf, sizeof(buf)) == -1)
+			return (ENXIO);
+		input = OF_finddevice(buf);
+		if (input == -1)
+			return (ENXIO);
+		if (OF_getprop(opts, "output-device", buf, sizeof(buf)) == -1)
+			return (ENXIO);
+		if (OF_finddevice(buf) != input)
+			return (ENXIO);
+		break;
+	case UART_DEV_DBGPORT:
+		if (!getenv_string("hw.uart.dbgport", buf, sizeof(buf)))
+			return (ENXIO);
+		input = OF_finddevice(buf);
+		if (input == -1)
+			return (ENXIO);
+		break;
+	default:
+		return (EINVAL);
+	}
+
+	if (OF_getprop(input, "device_type", buf, sizeof(buf)) == -1)
+		return (ENXIO);
+	if (strcmp(buf, "serial") != 0)
+		return (ENXIO);
+	if (OF_getprop(input, "name", buf, sizeof(buf)) == -1)
+		return (ENXIO);
+	if (strcmp(buf, "ch-a"))
+		return (ENXIO);
+
+	error = OF_decode_addr(input, 0, &di->bas.bst, &di->bas.bsh);
+	if (error)
+		return (error);
+
+	di->ops = uart_getops(class);
+
+	di->bas.rclk = 230400;
+	di->bas.chan = 1;
+	di->bas.regshft = 4;
+
+	di->baudrate = 0;
+	di->databits = 8;
+	di->stopbits = 1;
+	di->parity = UART_PARITY_NONE;
+	return (0);
+}
+#endif


More information about the p4-projects mailing list