Date: Sun, 2 Mar 2008 12:32:53 GMT From: Rafal Jaworowski <raj@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 136654 for review Message-ID: <200803021232.m22CWrYR074199@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=136654 Change 136654 by raj@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803021232.m22CWrYR074199>