diff options
author | Marius Strobl <marius@FreeBSD.org> | 2005-08-15 20:58:36 +0000 |
---|---|---|
committer | Marius Strobl <marius@FreeBSD.org> | 2005-08-15 20:58:36 +0000 |
commit | 1b279bfb52d187d483b2007e3ba1c3854f6ed2fb (patch) | |
tree | 52edde0321141847e46579c2e792b72042812d34 | |
parent | f3447eb493aa63da35292a42b515a2638d08aef9 (diff) |
Notes
-rw-r--r-- | sys/boot/sparc64/loader/metadata.c | 58 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_sparc64.c | 42 |
2 files changed, 62 insertions, 38 deletions
diff --git a/sys/boot/sparc64/loader/metadata.c b/sys/boot/sparc64/loader/metadata.c index 0694b0857d69..3fe767799d0e 100644 --- a/sys/boot/sparc64/loader/metadata.c +++ b/sys/boot/sparc64/loader/metadata.c @@ -45,6 +45,8 @@ extern struct tlb_entry *itlb_store; extern int dtlb_slot; extern int itlb_slot; +static int md_bootserial(void); + /* * Return a 'boothowto' value corresponding to the kernel arguments in * (kargs) and any relevant environment variables. @@ -68,8 +70,6 @@ static struct int md_getboothowto(char *kargs) { - char buf[32], buf2[32]; - phandle_t options; char *cp; int howto; int active; @@ -126,25 +126,49 @@ md_getboothowto(char *kargs) for (i = 0; howto_names[i].ev != NULL; i++) if (getenv(howto_names[i].ev) != NULL) howto |= howto_names[i].mask; - options = OF_finddevice("/options"); - OF_getprop(options, "input-device", buf, sizeof(buf)); - OF_getprop(options, "output-device", buf2, sizeof(buf2)); - if (strncmp(buf, "tty", sizeof("tty") - 1) == 0 && strncmp(buf2, "tty", - sizeof("tty") - 1) == 0) + if (md_bootserial() != -1) howto |= RB_SERIAL; - else if (strcmp(buf, "keyboard") == 0 && strcmp(buf2, "screen") == 0) { - phandle_t chosen; - ihandle_t stdin, stdout; - - chosen = OF_finddevice("/chosen"); - OF_getprop(chosen, "stdin", &stdin, sizeof(stdin)); - OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)); - if (OF_instance_to_package(stdin) == OF_instance_to_package(stdout)) - howto |= RB_SERIAL; - } return(howto); } +static int +md_bootserial(void) +{ + char buf[64]; + ihandle_t inst; + phandle_t input; + phandle_t node; + phandle_t output; + + if ((node = OF_finddevice("/options")) == -1) + return(-1); + if (OF_getprop(node, "input-device", buf, sizeof(buf)) == -1) + return(-1); + input = OF_finddevice(buf); + if (OF_getprop(node, "output-device", buf, sizeof(buf)) == -1) + return(-1); + output = OF_finddevice(buf); + if (input == -1 || output == -1 || OF_getproplen(input, "keyboard") >= 0) { + if ((node = OF_finddevice("/chosen")) == -1) + return(-1); + if (OF_getprop(node, "stdin", &inst, sizeof(inst)) == -1) + return(-1); + if ((input = OF_instance_to_package(inst)) == -1) + return(-1); + if (OF_getprop(node, "stdout", &inst, sizeof(inst)) == -1) + return(-1); + if ((output = OF_instance_to_package(inst)) == -1) + return(-1); + } + if (input != output) + return(-1); + if (OF_getprop(input, "device_type", buf, sizeof(buf)) == -1) + return(-1); + if (strcmp(buf, "serial") != 0) + return(-1); + return(0); +} + /* * Copy the environment into the load area starting at (addr). * Each variable is formatted as <name>=<value>, with a single nul diff --git a/sys/dev/uart/uart_cpu_sparc64.c b/sys/dev/uart/uart_cpu_sparc64.c index bd7a4293e910..61c9e01b7a0a 100644 --- a/sys/dev/uart/uart_cpu_sparc64.c +++ b/sys/dev/uart/uart_cpu_sparc64.c @@ -78,8 +78,8 @@ uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) /* * Get the package handle of the UART that is selected as the console, if - * the console is an UART of course. Note that we enforce that both stdin - * and stdout are selected. + * the console is an UART of course. Note that we enforce that both input + * and output are selected. * Note that the currently active console (i.e. /chosen/stdout and * /chosen/stdin) may not be the same as the device selected in the * environment (ie /options/output-device and /options/input-device) because @@ -91,32 +91,32 @@ uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) static phandle_t uart_cpu_getdev_console(phandle_t options, char *dev, size_t devsz) { - char buf[32]; - ihandle_t stdin, stdout; - phandle_t chosen, input; + char buf[sizeof("serial")]; + ihandle_t inst; + phandle_t chosen, input, output; if (OF_getprop(options, "input-device", dev, devsz) == -1) return (-1); - if (OF_getprop(options, "output-device", buf, sizeof(buf)) == -1) + input = OF_finddevice(dev); + if (OF_getprop(options, "output-device", dev, devsz) == -1) return (-1); - if (!strcmp(dev, "keyboard") && !strcmp(buf, "screen")) { + output = OF_finddevice(dev); + if (input == -1 || output == -1 || + OF_getproplen(input, "keyboard") >= 0) { if ((chosen = OF_finddevice("/chosen")) == -1) return (-1); - if (OF_getprop(chosen, "stdin", &stdin, sizeof(stdin)) == -1) + if (OF_getprop(chosen, "stdin", &inst, sizeof(inst)) == -1) return (-1); - if ((input = OF_instance_to_package(stdin)) == -1) + if ((input = OF_instance_to_package(inst)) == -1) return (-1); - if (OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)) == -1) + if (OF_getprop(chosen, "stdout", &inst, sizeof(inst)) == -1) return (-1); - if (OF_instance_to_package(stdout) != input) + if ((output = OF_instance_to_package(inst)) == -1) return (-1); snprintf(dev, devsz, "ttya"); - } else { - if ((input = OF_finddevice(dev)) == -1) - return (-1); - if (OF_finddevice(buf) != input) - return (-1); } + if (input != output) + return (-1); if (OF_getprop(input, "device_type", buf, sizeof(buf)) == -1) return (-1); if (strcmp(buf, "serial") != 0) @@ -132,9 +132,9 @@ uart_cpu_getdev_console(phandle_t options, char *dev, size_t devsz) * the OF. */ static phandle_t -uart_cpu_getdev_dbgport(phandle_t options, char *dev, size_t devsz) +uart_cpu_getdev_dbgport(char *dev, size_t devsz) { - char buf[32]; + char buf[sizeof("serial")]; phandle_t input; if (!getenv_string("hw.uart.dbgport", dev, devsz)) @@ -158,7 +158,7 @@ uart_cpu_getdev_dbgport(phandle_t options, char *dev, size_t devsz) static phandle_t uart_cpu_getdev_keyboard(char *dev, size_t devsz) { - char buf[32]; + char buf[sizeof("serial")]; phandle_t input; if ((input = OF_finddevice("keyboard")) == -1) @@ -181,7 +181,7 @@ uart_cpu_getdev_keyboard(char *dev, size_t devsz) int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { - char buf[32], dev[32], compat[32]; + char buf[32], compat[32], dev[64]; phandle_t input, options; bus_addr_t addr; int baud, bits, error, space, stop; @@ -194,7 +194,7 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) input = uart_cpu_getdev_console(options, dev, sizeof(dev)); break; case UART_DEV_DBGPORT: - input = uart_cpu_getdev_dbgport(options, dev, sizeof(dev)); + input = uart_cpu_getdev_dbgport(dev, sizeof(dev)); break; case UART_DEV_KEYBOARD: input = uart_cpu_getdev_keyboard(dev, sizeof(dev)); |