#include <sys/cdefs.h>
#include <stand.h>
#include "bootstrap.h"
#include "libuserboot.h"
int console;
static void userboot_cons_probe(struct console *cp);
static int userboot_cons_init(struct console *, int);
static void userboot_comcons_probe(struct console *cp);
static int userboot_comcons_init(struct console *, int);
static void userboot_cons_putchar(struct console *, int);
static int userboot_cons_getchar(struct console *);
static int userboot_cons_poll(struct console *);
struct console userboot_console = {
.c_name = "text",
.c_desc = "userboot",
.c_flags = 0,
.c_probe = userboot_cons_probe,
.c_init = userboot_cons_init,
.c_out = userboot_cons_putchar,
.c_in = userboot_cons_getchar,
.c_ready = userboot_cons_poll,
};
struct console userboot_comconsole = {
.c_name = "ttya",
.c_desc = "comconsole",
.c_flags = 0,
.c_probe = userboot_comcons_probe,
.c_init = userboot_comcons_init,
.c_out = userboot_cons_putchar,
.c_in = userboot_cons_getchar,
.c_ready = userboot_cons_poll,
};
static void
userboot_cons_probe(struct console *cp)
{
cp->c_flags |= (C_PRESENTIN | C_PRESENTOUT);
}
static int
userboot_cons_init(struct console *cp __unused, int arg __unused)
{
return (0);
}
static void
userboot_comcons_probe(struct console *cp __unused)
{
}
static int
userboot_comcons_init(struct console *cp, int arg __unused)
{
cp->c_flags |= (C_PRESENTIN | C_PRESENTOUT);
return (0);
}
static void
userboot_cons_putchar(struct console *cp, int c)
{
if (strcmp(cp->c_name, userboot_comconsole.c_name) == 0 &&
(userboot_console.c_flags & C_PRESENTOUT) != 0)
return;
CALLBACK(putc, c);
}
static int
userboot_cons_getchar(struct console *cp __unused)
{
if (strcmp(cp->c_name, userboot_comconsole.c_name) == 0 &&
(userboot_console.c_flags & C_PRESENTIN) != 0)
return (-1);
return (CALLBACK(getc));
}
static int
userboot_cons_poll(struct console *cp __unused)
{
if (strcmp(cp->c_name, userboot_comconsole.c_name) == 0 &&
(userboot_console.c_flags & C_PRESENTIN) != 0)
return (0);
return (CALLBACK(poll));
}