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