Date: Fri, 25 Aug 2017 17:29:48 +0000 (UTC) From: Maxim Sobolev <sobomax@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r322896 - in head/sys/boot: efi/loader efi/loader/arch/amd64 efi/loader/arch/i386 i386/libi386 Message-ID: <201708251729.v7PHTmwd083819@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708251729.v7PHTmwd083819>