svn commit: r322896 - in head/sys/boot: efi/loader efi/loader/arch/amd64 efi/loader/arch/i386 i386/libi386
Maxim Sobolev
sobomax at FreeBSD.org
Fri Aug 25 17:29:50 UTC 2017
Author: sobomax
Date: Fri Aug 25 17:29:48 2017
New Revision: 322896
URL: https://svnweb.freebsd.org/changeset/base/322896
Log:
Make spinconsole platform independent and hook it up into EFI loader on
i386 and amd64. Not enabled on ARMs, those are lacking timer routines.
MFC after: 2 moths
Sponsored by: Sippy Software, Inc.
Modified:
head/sys/boot/efi/loader/arch/amd64/Makefile.inc
head/sys/boot/efi/loader/arch/i386/Makefile.inc
head/sys/boot/efi/loader/conf.c
head/sys/boot/i386/libi386/spinconsole.c
Modified: head/sys/boot/efi/loader/arch/amd64/Makefile.inc
==============================================================================
--- head/sys/boot/efi/loader/arch/amd64/Makefile.inc Fri Aug 25 16:38:21 2017 (r322895)
+++ head/sys/boot/efi/loader/arch/amd64/Makefile.inc Fri Aug 25 17:29:48 2017 (r322896)
@@ -9,7 +9,8 @@ SRCS+= amd64_tramp.S \
.PATH: ${.CURDIR}/../../i386/libi386
SRCS+= nullconsole.c \
- comconsole.c
+ comconsole.c \
+ spinconsole.c
-CFLAGS+= -fPIC
+CFLAGS+= -fPIC -DTERM_EMU
LDFLAGS+= -Wl,-znocombreloc
Modified: head/sys/boot/efi/loader/arch/i386/Makefile.inc
==============================================================================
--- head/sys/boot/efi/loader/arch/i386/Makefile.inc Fri Aug 25 16:38:21 2017 (r322895)
+++ head/sys/boot/efi/loader/arch/i386/Makefile.inc Fri Aug 25 17:29:48 2017 (r322896)
@@ -7,7 +7,8 @@ SRCS+= start.S \
.PATH: ${.CURDIR}/../../i386/libi386
SRCS+= nullconsole.c \
- comconsole.c
+ comconsole.c \
+ spinconsole.c
-CFLAGS+= -fPIC
+CFLAGS+= -fPIC -DTERM_EMU
LDFLAGS+= -Wl,-znocombreloc
Modified: head/sys/boot/efi/loader/conf.c
==============================================================================
--- head/sys/boot/efi/loader/conf.c Fri Aug 25 16:38:21 2017 (r322895)
+++ head/sys/boot/efi/loader/conf.c Fri Aug 25 17:29:48 2017 (r322896)
@@ -69,6 +69,7 @@ extern struct console efi_console;
#if defined(__amd64__) || defined(__i386__)
extern struct console comconsole;
extern struct console nullconsole;
+extern struct console spinconsole;
#endif
struct console *consoles[] = {
@@ -76,6 +77,7 @@ struct console *consoles[] = {
#if defined(__amd64__) || defined(__i386__)
&comconsole,
&nullconsole,
+ &spinconsole,
#endif
NULL
};
Modified: head/sys/boot/i386/libi386/spinconsole.c
==============================================================================
--- head/sys/boot/i386/libi386/spinconsole.c Fri Aug 25 16:38:21 2017 (r322895)
+++ head/sys/boot/i386/libi386/spinconsole.c Fri Aug 25 17:29:48 2017 (r322896)
@@ -41,16 +41,14 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <bootstrap.h>
-extern void get_pos(int *x, int *y);
-extern void curs_move(int *_x, int *_y, int x, int y);
-extern void vidc_biosputchar(int c);
-
static void spinc_probe(struct console *cp);
static int spinc_init(int arg);
static void spinc_putchar(int c);
static int spinc_getchar(void);
static int spinc_ischar(void);
+extern struct console *consoles[];
+
struct console spinconsole = {
"spinconsole",
"spin port",
@@ -62,47 +60,53 @@ struct console spinconsole = {
spinc_ischar
};
+static struct console *parent = NULL;
+
static void
spinc_probe(struct console *cp)
{
- cp->c_flags |= (C_PRESENTIN | C_PRESENTOUT);
+
+ if (parent == NULL)
+ parent = consoles[0];
+ parent->c_probe(cp);
}
static int
spinc_init(int arg)
{
- return(0);
+
+ return(parent->c_init(arg));
}
static void
spinc_putchar(int c)
{
- static int curx, cury;
static unsigned tw_chars = 0x5C2D2F7C; /* "\-/|" */
- static time_t lasttime;
+ static time_t lasttime = 0;
time_t now;
- now = time(NULL);
+ now = time(0);
if (now < (lasttime + 1))
return;
- lasttime = now;
#ifdef TERM_EMU
- get_pos(&curx, &cury);
- if (curx > 0)
- curs_move(&curx, &cury, curx - 1, cury);
+ if (lasttime > 0)
+ parent->c_out('\b');
#endif
- vidc_biosputchar((char)tw_chars);
+ lasttime = now;
+ parent->c_out((char)tw_chars);
tw_chars = (tw_chars >> 8) | ((tw_chars & (unsigned long)0xFF) << 24);
}
static int
spinc_getchar(void)
{
+
return(-1);
}
static int
spinc_ischar(void)
{
+
return(0);
}
More information about the svn-src-all
mailing list