mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-20 11:11:24 +00:00
On PowerPC send output to both "/chosen/stdout" and "screen" nodes, unless
they point to the very same device. This should make loader usable on some (all?) PowerMacs, where "/chosen/stdout" is disconneted from the "screen" by the OF init process by default, except when user actually has requested interaction with OF by holding ALT-CMD-O-F. Along with rev 183168 this should provide a way to build bootable FreeBSD/ppc installation or live CD that works OOB. Also, it should bring PowerMac experience closer to that on other arches. MFC after: 1 week (assiming re@ blessing)
This commit is contained in:
parent
873da6a7fa
commit
d873f46379
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183181
@ -14,7 +14,7 @@ CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../../.. -I.
|
|||||||
|
|
||||||
CFLAGS+= -ffreestanding
|
CFLAGS+= -ffreestanding
|
||||||
.if ${MACHINE_ARCH} == "powerpc"
|
.if ${MACHINE_ARCH} == "powerpc"
|
||||||
CFLAGS+= -msoft-float
|
CFLAGS+= -msoft-float -DPOWERMAC_SCREEN_HACK
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.ifdef(BOOT_DISK_DEBUG)
|
.ifdef(BOOT_DISK_DEBUG)
|
||||||
|
@ -42,6 +42,10 @@ int ofw_cons_poll(void);
|
|||||||
|
|
||||||
static ihandle_t stdin;
|
static ihandle_t stdin;
|
||||||
static ihandle_t stdout;
|
static ihandle_t stdout;
|
||||||
|
#ifdef POWERMAC_SCREEN_HACK
|
||||||
|
static ihandle_t stdout1;
|
||||||
|
static int do_stdout1 = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct console ofwconsole = {
|
struct console ofwconsole = {
|
||||||
"ofw",
|
"ofw",
|
||||||
@ -57,9 +61,26 @@ struct console ofwconsole = {
|
|||||||
static void
|
static void
|
||||||
ofw_cons_probe(struct console *cp)
|
ofw_cons_probe(struct console *cp)
|
||||||
{
|
{
|
||||||
|
#ifdef POWERMAC_SCREEN_HACK
|
||||||
|
char path1[128], path2[128];
|
||||||
|
#endif
|
||||||
|
|
||||||
OF_getprop(chosen, "stdin", &stdin, sizeof(stdin));
|
OF_getprop(chosen, "stdin", &stdin, sizeof(stdin));
|
||||||
OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
|
OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
|
||||||
|
#ifdef POWERMAC_SCREEN_HACK
|
||||||
|
stdout1 = OF_open("screen");
|
||||||
|
if (stdout1 != -1) {
|
||||||
|
if (OF_instance_to_path(stdout, path1, sizeof(path1)) == -1)
|
||||||
|
path1[0] = '\0';
|
||||||
|
if (OF_instance_to_path(stdout1, path2, sizeof(path2)) == -1)
|
||||||
|
path2[0] = '\0';
|
||||||
|
if (strcmp(path1, path2) == 0) {
|
||||||
|
OF_close(stdout1);
|
||||||
|
} else {
|
||||||
|
do_stdout1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
cp->c_flags |= C_PRESENTIN|C_PRESENTOUT;
|
cp->c_flags |= C_PRESENTIN|C_PRESENTOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,10 +98,18 @@ ofw_cons_putchar(int c)
|
|||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
cbuf = '\r';
|
cbuf = '\r';
|
||||||
OF_write(stdout, &cbuf, 1);
|
OF_write(stdout, &cbuf, 1);
|
||||||
|
#ifdef POWERMAC_SCREEN_HACK
|
||||||
|
if (do_stdout1 != 0)
|
||||||
|
OF_write(stdout1, &cbuf, 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
cbuf = c;
|
cbuf = c;
|
||||||
OF_write(stdout, &cbuf, 1);
|
OF_write(stdout, &cbuf, 1);
|
||||||
|
#ifdef POWERMAC_SCREEN_HACK
|
||||||
|
if (do_stdout1 != 0)
|
||||||
|
OF_write(stdout1, &cbuf, 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int saved_char = -1;
|
static int saved_char = -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user