libpayload: Add video console framework
authorJordan Crouse <jordan.crouse@amd.com>
Thu, 10 Apr 2008 22:49:02 +0000 (22:49 +0000)
committerJordan Crouse <jordan.crouse@amd.com>
Thu, 10 Apr 2008 22:49:02 +0000 (22:49 +0000)
Add a framework for multiple video console drivers.  This is to prepare
for the Geode driver.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3230 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

payloads/libpayload/Config.in
payloads/libpayload/curses/local.h
payloads/libpayload/curses/tinycurses.c
payloads/libpayload/drivers/Makefile.inc
payloads/libpayload/drivers/vga.c [deleted file]
payloads/libpayload/drivers/video/vga.c [new file with mode: 0644]
payloads/libpayload/drivers/video/video.c [new file with mode: 0644]
payloads/libpayload/include/libpayload.h
payloads/libpayload/include/video_console.h [new file with mode: 0644]
payloads/libpayload/libc/console.c

index fbb477ed7f52a14b461565c98721b984644838d6..f02b366ed2cb16cea377fcb45c3813731bf336ba 100644 (file)
@@ -59,13 +59,17 @@ config SERIAL_BAUD_RATE
        depends SERIAL_SET_SPEED
        default 115200
 
-config VGA_CONSOLE
-       bool "See output on a VGA console"
+config VIDEO_CONSOLE
+       bool "See output on a video console"
+       default y
+
+config VGA_VIDEO_CONSOLE
+       bool "VGA video console driver"
+       depends on VIDEO_CONSOLE
        default y
 
 config PC_KEYBOARD
        bool "Allow input from a PC keyboard"
-       depends VGA_CONSOLE
        default y
 
 config NVRAM
index 577fcd400043592104898e9a28c4a4d5eca08927..7e1fb64b930b10d4197ad8a51d4793e58459cb22 100644 (file)
@@ -69,7 +69,7 @@
 
 /* Flags used to determine what output methods are available */
 
-#ifdef CONFIG_VGA_CONSOLE
+#ifdef CONFIG_VIDEO_CONSOLE
 #define F_ENABLE_CONSOLE 0x01
 #else
 #define F_ENABLE_CONSOLE 0x00
index 9b87ec0828fb3c753d7aba84e8b0abce8301f14a..8fc9bde2687c07674fe2e848b1f0f1f1ee9f13bb 100644 (file)
@@ -219,9 +219,10 @@ WINDOW *initscr(void)
        // def_prog_mode();
 
        if (curses_flags & F_ENABLE_CONSOLE) {
-               /* Clear the screen and kill the cursor. */
-               vga_clear();
-               vga_cursor_enable(0);
+               /* Clear the screen and kill the cursor */
+
+               video_console_clear();
+               video_console_cursor_enable(0);
        }
 
        // Speaker init?
@@ -586,7 +587,7 @@ int wnoutrefresh(WINDOW *win)
                                 * but this will break wide characters!
                                 */
                                c |= (chtype) (win->_line[y].text[x].chars[0] & 0xff);
-                               vga_putc(y, x, c);
+                               video_console_putc(y, x, c);
                        }
                }
        }
index 9f436da79ce891784a0b67804e66d32bb2bd26ab..746ba4525541972fd43f571586dec328aa520454 100644 (file)
@@ -29,6 +29,9 @@
 ##
 
 TARGETS-$(CONFIG_SERIAL_CONSOLE) += drivers/serial.o
-TARGETS-$(CONFIG_VGA_CONSOLE) += drivers/vga.o
 TARGETS-$(CONFIG_PC_KEYBOARD) += drivers/keyboard.o
 TARGETS-$(CONFIG_NVRAM) += drivers/nvram.o
+
+# Video console drivers
+TARGETS-$(CONFIG_VIDEO_CONSOLE) += drivers/video/video.o
+TARGETS-$(CONFIG_VGA_VIDEO_CONSOLE) += drivers/video/vga.o
diff --git a/payloads/libpayload/drivers/vga.c b/payloads/libpayload/drivers/vga.c
deleted file mode 100644 (file)
index db1cda1..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * This file is part of the libpayload project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <arch/types.h>
-#include <libpayload.h>
-
-#define WIDTH 80
-#define HEIGHT 25
-
-#define VGA_COLOR_WHITE 7
-
-#define CRTC_INDEX      0x3d4
-#define CRTC_DATA       0x3d5
-
-#define VIDEO(_r, _c) \
-       ((uint16_t *) (0xB8000 + ((_r) * (WIDTH * 2)) + ((_c) * 2)))
-
-static int cursor_enabled;
-static int cursorx;
-static int cursory;
-
-static void vga_scroll_up(void);
-
-static inline uint8_t crtc_read(uint8_t index)
-{
-       outb(index, CRTC_INDEX);
-       return inb(CRTC_DATA);
-}
-
-static inline void crtc_write(uint8_t data, uint8_t index)
-{
-       outb(index, CRTC_INDEX);
-       outb(data, CRTC_DATA);
-}
-
-static void vga_get_cursor_pos(void)
-{
-       unsigned int addr;
-
-       addr = ((unsigned int)crtc_read(0x0E)) << 8;
-       addr += crtc_read(0x0F);
-
-       cursorx = addr % WIDTH;
-       cursory = addr / WIDTH;
-}
-
-static void vga_fixup_cursor(void)
-{
-       unsigned int addr;
-
-       if (!cursor_enabled)
-               return;
-
-       if (cursorx < 0)
-               cursorx = 0;
-
-       if (cursory < 0)
-               cursory = 0;
-
-       if (cursorx >= WIDTH) {
-               cursorx = 0;
-               cursory++;
-       }
-
-       while (cursory >= HEIGHT)
-               vga_scroll_up();
-
-       addr = cursorx + (WIDTH * cursory);
-       crtc_write(addr >> 8, 0x0E);
-       crtc_write(addr, 0x0F);
-}
-
-void vga_cursor_enable(int state)
-{
-       unsigned char tmp = crtc_read(0x0a);
-
-       if (state == 0) {
-               tmp |= (1 << 5);
-               cursor_enabled = 0;
-       } else {
-               tmp &= ~(1 << 5);
-               cursor_enabled = 1;
-               vga_fixup_cursor();
-       }
-
-       crtc_write(tmp, 0x0a);
-}
-
-void vga_clear_line(uint8_t row, uint8_t ch, uint8_t attr)
-{
-       int col;
-       uint16_t *ptr = VIDEO(row, 0);
-
-       for (col = 0; col < WIDTH; col++)
-               ptr[col] = ((attr & 0xFF) << 8) | (ch & 0xFF);
-}
-
-static void vga_scroll_up(void)
-{
-       uint16_t *src = VIDEO(1, 0);
-       uint16_t *dst = VIDEO(0, 0);
-       int i;
-
-       for (i = 0; i < (HEIGHT - 1) * WIDTH; i++)
-               *dst++ = *src++;
-
-       vga_clear_line(HEIGHT - 1, ' ', VGA_COLOR_WHITE);
-       cursory--;
-}
-
-void vga_fill(uint8_t ch, uint8_t attr)
-{
-       uint8_t row;
-       for (row = 0; row < HEIGHT; row++)
-               vga_clear_line(row, ch, attr);
-}
-
-void vga_clear(void)
-{
-       vga_fill(' ', VGA_COLOR_WHITE);
-       vga_move_cursor(0, 0);
-}
-
-void vga_putc(uint8_t row, uint8_t col, unsigned int c)
-{
-       uint16_t *ptr = VIDEO(row, col);
-       *ptr = (uint16_t) (c & 0xFFFF);
-}
-
-void vga_putchar(unsigned int ch)
-{
-
-       uint16_t *ptr;
-
-       switch (ch & 0xFF) {
-       case '\r':
-               cursorx = 0;
-               break;
-       case '\n':
-               cursory++;
-               break;
-       case '\b':
-               cursorx--;
-               ptr = VIDEO(cursory, cursorx);
-               *ptr = (*ptr & 0xFF00) | ' ';
-               break;
-       case '\t':
-               cursorx = (cursorx + 8) & ~7;
-               break;
-
-       default:
-               ptr = VIDEO(cursory, cursorx);
-               *ptr = (uint16_t) (ch & 0xFFFF);
-               cursorx++;
-               break;
-       }
-
-       vga_fixup_cursor();
-}
-
-void vga_move_cursor(int x, int y)
-{
-       cursorx = x;
-       cursory = y;
-
-       vga_fixup_cursor();
-}
-
-void vga_init(void)
-{
-       /* Get the position of the cursor. */
-       vga_get_cursor_pos();
-
-       /* See if it currently enabled or not. */
-       cursor_enabled = !(crtc_read(0x0A) & (1 << 5));
-
-       /* If the cursor is enabled, get us to a sane point. */
-       if (cursor_enabled) {
-               /* Go to the next line. */
-               if (cursorx) {
-                       cursorx = 0;
-                       cursory++;
-               }
-               vga_fixup_cursor();
-       }
-}
diff --git a/payloads/libpayload/drivers/video/vga.c b/payloads/libpayload/drivers/video/vga.c
new file mode 100644 (file)
index 0000000..388c7b1
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload.h>
+#include <video_console.h>
+
+#define VGA_COLOR_WHITE 7
+
+#define CRTC_INDEX      0x3d4
+#define CRTC_DATA       0x3d5
+
+#define VIDEO(_r, _c)\
+  ((u16 *) (0xB8000 + ((_r) * (VIDEO_COLS * 2)) + ((_c) * 2)))
+
+static u8 crtc_read(u8 index)
+{
+        outb(index, CRTC_INDEX);
+        return inb(CRTC_DATA);
+}
+
+static void crtc_write(u8 data, u8 index)
+{
+        outb(index, CRTC_INDEX);
+        outb(data, CRTC_DATA);
+}
+
+static void vga_get_cursor(unsigned int *x, unsigned int *y, unsigned int *en)
+{
+       unsigned int addr;
+       addr = ((unsigned int) crtc_read(0x0E)) << 8;
+       addr += crtc_read(0x0E);
+
+       *x = addr % VIDEO_COLS;
+       *y = addr / VIDEO_COLS;
+
+       *en = !(crtc_read(0x0A) & (1 << 5));
+}
+
+static void vga_set_cursor(unsigned int x, unsigned int y)
+{
+       unsigned int addr;
+
+       addr = x + (VIDEO_COLS * y);
+       crtc_write(addr >> 8, 0x0E);
+       crtc_write(addr, 0x0E);
+}
+
+static void vga_enable_cursor(int state)
+{
+       unsigned char tmp = crtc_read(0x0a);
+
+       if (state == 0)
+               tmp |= (1 << 5);
+
+       else
+               tmp &= ~(1 << 5);
+
+       crtc_write(tmp, 0x0a);
+}
+
+static void vga_clear_line(u8 row, u8 ch, u8 attr)
+{
+       int col;
+       u16 *ptr = VIDEO(0, row);
+
+       for(col = 0; col < VIDEO_COLS; col++)
+               ptr[col] = ((attr & 0xFF) << 8) | (ch & 0xFF);
+}
+
+static void vga_scroll_up(void)
+{
+       u16 *src = VIDEO(0,1);
+       u16 *dst = VIDEO(0,0);
+       int i;
+
+       for(i = 0; i < (VIDEO_ROWS - 1) * VIDEO_COLS; i++)
+               *dst++ = *src++;
+
+       vga_clear_line(VIDEO_ROWS - 1, ' ', VGA_COLOR_WHITE);
+}
+
+static void vga_fill(u8 ch, u8 attr)
+{
+       u8 row;
+       for(row = 0; row < VIDEO_ROWS; row++)
+               vga_clear_line(row, ch, attr);
+}
+
+static void vga_clear(void)
+{
+       vga_fill(' ', VGA_COLOR_WHITE);
+}
+
+static void vga_putc(u8 row, u8 col, unsigned int c)
+{
+       u16 *ptr = VIDEO(row, col);
+       *ptr = (u16) (c & 0xFFFF);
+}
+
+static int vga_init(void)
+{
+       return 0;
+}
+
+struct video_console vga_video_console = {
+       .init = vga_init,
+       .putc = vga_putc,
+       .clear = vga_clear,
+       .scroll_up = vga_scroll_up,
+
+       .get_cursor = vga_get_cursor,
+       .set_cursor = vga_set_cursor,
+       .enable_cursor = vga_enable_cursor,
+};
diff --git a/payloads/libpayload/drivers/video/video.c b/payloads/libpayload/drivers/video/video.c
new file mode 100644 (file)
index 0000000..89c146d
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload.h>
+#include <video_console.h>
+
+#ifdef CONFIG_VGA_VIDEO_CONSOLE
+extern struct video_console vga_video_console;
+#endif
+
+static struct video_console *console_list[] =
+{
+#ifdef CONFIG_VGA_VIDEO_CONSOLE
+       &vga_video_console,
+#endif
+};
+
+static struct video_console *console;
+
+static unsigned int cursorx;
+static unsigned int cursory;
+static unsigned int cursor_enabled = 1;
+
+static void video_console_fixup_cursor(void)
+{
+       if (!cursor_enabled)
+               return;
+
+       if (cursorx < 0)
+               cursorx = 0;
+
+       if (cursory < 0)
+               cursory = 0;
+
+       if (cursorx > VIDEO_COLS) {
+               cursorx = 0;
+               cursory++;
+       }
+
+       while(cursory >= VIDEO_ROWS) {
+               console->scroll_up();
+               cursory--;
+       }
+
+       if (console && console->set_cursor)
+               console->set_cursor(cursorx, cursory);
+}
+
+void video_console_cursor_enable(int state)
+{
+       if (console && console->enable_cursor)
+               console->enable_cursor(state);
+
+       cursor_enabled = state;
+
+       if (cursor_enabled)
+               video_console_fixup_cursor();
+}
+
+void video_console_clear(void)
+{
+       if (console)
+               console->clear();
+
+       cursorx = 0;
+       cursory = 0;
+
+       if (console && console->set_cursor)
+               console->set_cursor(cursorx, cursory);
+}
+
+void video_console_putc(u8 row, u8 col, unsigned int ch)
+{
+       if (console)
+               console->putc(row, col, ch);
+}
+
+void video_console_putchar(unsigned int ch)
+{
+       switch(ch & 0xFF) {
+       case '\r':
+               cursorx = 0;
+               break;
+
+       case '\n':
+               cursory++;
+               break;
+
+       case '\b':
+               cursorx--;
+               break;
+
+       case '\t':
+               while(cursorx % 8 && cursorx < VIDEO_COLS) {
+                       if (console)
+                               console->putc(cursorx, cursory, (ch & 0xFF00) | ' ');
+
+                       cursorx++;
+               }
+               break;
+       default:
+               if (console)
+                       console->putc(cursorx++, cursory, ch);
+               break;
+       }
+
+       video_console_fixup_cursor();
+}
+
+int video_console_init(void)
+{
+               int i;
+
+               for(i = 0; i < ARRAY_SIZE(console_list); i++) {
+                       if (console_list[i]->init())
+                               continue;
+
+                       console = console_list[i];
+
+                       if (console->get_cursor)
+                               console->get_cursor(&cursorx, &cursory, &cursor_enabled);
+
+                       if (cursorx) {
+                               cursorx = 0;
+                               cursory++;
+                       }
+
+                       video_console_fixup_cursor();
+                       return 0;
+               }
+
+               return 0;
+}
+
index 10e5e8529c623b1da33369affdecfedb41edfbbb..23feedb43f7a4f3dfd75c6b89f84168ce1e63cf0 100644 (file)
@@ -78,15 +78,12 @@ void serial_putchar(unsigned char c);
 int serial_havechar(void);
 int serial_getchar(void);
 
-/* drivers/serial.c */
-void vga_cursor_enable(int state);
-void vga_clear_line(uint8_t row, uint8_t ch, uint8_t attr);
-void vga_fill(uint8_t ch, uint8_t attr);
-void vga_clear(void);
-void vga_putc(uint8_t row, uint8_t col, unsigned int c);
-void vga_putchar(unsigned int ch);
-void vga_move_cursor(int x, int y);
-void vga_init(void);
+/* video/video.c */
+int video_console_init(void);
+void video_console_putchar(unsigned int ch);
+void video_console_putc(u8 row, u8 col, unsigned int ch);
+void video_console_clear(void);
+void video_console_cursor_enable(int state);
 
 /* libc/console.c */
 void console_init(void);
diff --git a/payloads/libpayload/include/video_console.h b/payloads/libpayload/include/video_console.h
new file mode 100644 (file)
index 0000000..55deedf
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef VIDEO_CONSOLE_H_
+#define VIDEO_CONSOLE_H_
+
+#define VIDEO_ROWS 25
+#define VIDEO_COLS 80
+
+struct video_console {
+       int (*init)(void);
+       void (*putc)(u8, u8, unsigned int);
+       void (*clear)(void);
+       void (*scroll_up)(void);
+
+       void (*get_cursor)(unsigned int *, unsigned int *, unsigned int *);
+       void (*set_cursor)(unsigned int, unsigned int);
+       void (*enable_cursor)(int);
+};
+
+#endif
index 73e2644cd40cd428d3e153fcf8e8458b9e320c86..b0bfe241c058a6a8787364a28dc495853bf5ad09 100644 (file)
@@ -31,8 +31,8 @@
 
 void console_init(void)
 {
-#ifdef CONFIG_VGA_CONSOLE
-       vga_init();
+#ifdef CONFIG_VIDEO_CONSOLE
+       video_console_init();
 #endif
 #ifdef CONFIG_SERIAL_CONSOLE
        serial_init();
@@ -41,8 +41,8 @@ void console_init(void)
 
 static void device_putchar(unsigned char c)
 {
-#ifdef CONFIG_VGA_CONSOLE
-       vga_putchar(0x700 | c);
+#ifdef CONFIG_VIDEO_CONSOLE
+       video_console_putchar(0x700| c);
 #endif
 #ifdef CONFIG_SERIAL_CONSOLE
        serial_putchar(c);