]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
VGA text support in qemu-mips
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 5 Jul 2011 21:46:15 +0000 (23:46 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 5 Jul 2011 21:46:15 +0000 (23:46 +0200)
* grub-core/Makefile.core.def (kernel): Add term/i386/pc/vga_text.c,
term/i386/vga_common.c and kern/vga_init.c on qemu-mips.
* grub-core/kern/mips/qemu_mips/init.c (grub_machine_init): Init vga
text.
* grub-core/kern/i386/qemu/init.c: Renamed to ...
* grub-core/kern/vga_init.c: ... this.
* grub-core/kern/vga_init.c (VGA_ADDR) [__mips__]: Adjust.
(grub_qemu_init_cirrus) [__mips__]: Skip PCI and adjust the I/O base.
* grub-core/term/i386/pc/vga_text.c (VGA_TEXT_SCREEN) [__mips__]:
Adjust.
* include/grub/vga.h [GRUB_MACHINE_MIPS_QEMU_MIPS]: Declare
GRUB_MACHINE_PCI_IO_BASE.

ChangeLog
grub-core/Makefile.core.def
grub-core/kern/mips/qemu_mips/init.c
grub-core/kern/vga_init.c [moved from grub-core/kern/i386/qemu/init.c with 90% similarity]
grub-core/term/i386/pc/vga_text.c
include/grub/mips/qemu_mips/kernel.h
include/grub/vga.h

index 3772dc028afd4ca3a32c088604bd8ec51bcd0f03..c2d38603238dda7eaf19831c8bd98b22e35e0abf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2011-07-05  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       VGA text support in qemu-mips
+
+       * grub-core/Makefile.core.def (kernel): Add term/i386/pc/vga_text.c,
+       term/i386/vga_common.c and kern/vga_init.c on qemu-mips.
+       * grub-core/kern/mips/qemu_mips/init.c (grub_machine_init): Init vga
+       text.
+       * grub-core/kern/i386/qemu/init.c: Renamed to ...
+       * grub-core/kern/vga_init.c: ... this.
+       * grub-core/kern/vga_init.c (VGA_ADDR) [__mips__]: Adjust.
+       (grub_qemu_init_cirrus) [__mips__]: Skip PCI and adjust the I/O base.
+       * grub-core/term/i386/pc/vga_text.c (VGA_TEXT_SCREEN) [__mips__]:
+       Adjust.
+       * include/grub/vga.h [GRUB_MACHINE_MIPS_QEMU_MIPS]: Declare
+       GRUB_MACHINE_PCI_IO_BASE.
+
 2011-07-05  Vladimir Serbinenko  <phcoder@gmail.com>
 
        MIPS qemu flash support.
index 328f7186fa36dc60ccb6cff3e044fc199f0e2560..807f5b357b1d60672d4a34b4b10507ed1188af50 100644 (file)
@@ -143,7 +143,7 @@ kernel = {
   i386_pc = term/i386/pc/console.c;
 
   i386_qemu = bus/pci.c;
-  i386_qemu = kern/i386/qemu/init.c;
+  i386_qemu = kern/vga_init.c;
   i386_qemu = kern/i386/qemu/mmap.c;
   i386_qemu = kern/i386/tsc.c;
 
@@ -164,6 +164,9 @@ kernel = {
   mips_qemu_mips = term/serial.c;
   mips_qemu_mips = term/at_keyboard.c;
   mips_qemu_mips = commands/keylayouts.c;
+  mips_qemu_mips = term/i386/pc/vga_text.c;
+  mips_qemu_mips = term/i386/vga_common.c;
+  mips_qemu_mips = kern/vga_init.c;
 
   mips_arc = kern/mips/arc/init.c;
   mips_arc = term/arc/console.c;
index 0c3113fe2057475a717b04b2fb3cdea5599feeb4..db9cc796ae63db232cd8f6f6663b0337c657d591 100644 (file)
@@ -7,6 +7,7 @@
 #include <grub/mm.h>
 #include <grub/time.h>
 #include <grub/machine/memory.h>
+#include <grub/machine/kernel.h>
 #include <grub/cpu/memory.h>
 #include <grub/memory.h>
 
@@ -22,6 +23,7 @@ extern void grub_serial_init (void);
 extern void grub_terminfo_init (void);
 extern void grub_keylayouts_init (void);
 extern void grub_boot_init (void);
+extern void grub_vga_text_init (void);
 
 static inline int
 probe_mem (grub_addr_t addr)
@@ -69,6 +71,9 @@ grub_machine_init (void)
   grub_keylayouts_init ();
   grub_at_keyboard_init ();
 
+  grub_qemu_init_cirrus ();
+  grub_vga_text_init ();
+
   grub_terminfo_init ();
   grub_serial_init ();
 
similarity index 90%
rename from grub-core/kern/i386/qemu/init.c
rename to grub-core/kern/vga_init.c
index 054dfa86b1f750a19b322c3ec8422c79d9d9a6d5..889d0128e0983926cc6dca63c6c1c758c64b5f9c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2010  Free Software Foundation, Inc.
+ *  Copyright (C) 2010,2011  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -16,7 +16,9 @@
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifndef __mips__
 #include <grub/pci.h>
+#endif
 #include <grub/machine/kernel.h>
 #include <grub/misc.h>
 #include <grub/vga.h>
@@ -43,7 +45,17 @@ static struct {grub_uint8_t r, g, b, a; } colors[] =
     {0xFE, 0xFE, 0xFE, 0xFF}  // 15 = white
   };
 
+#ifdef __mips__
+extern unsigned char ascii_bitmaps[];
+#else
 #include <ascii.h>
+#endif
+
+#ifdef __mips__
+#define VGA_ADDR 0xb00a0000
+#else
+#define VGA_ADDR 0xa0000
+#endif
 
 static void
 load_font (void)
@@ -61,7 +73,7 @@ load_font (void)
   grub_vga_gr_write (0xff, GRUB_VGA_GR_BITMASK);
 
   for (i = 0; i < 128; i++)
-    grub_memcpy ((void *) (0xa0000 + 32 * i), ascii_bitmaps + 16 * i, 16);
+    grub_memcpy ((void *) (VGA_ADDR + 32 * i), ascii_bitmaps + 16 * i, 16);
 }
 
 static void
@@ -78,6 +90,7 @@ load_palette (void)
 void
 grub_qemu_init_cirrus (void)
 {
+#ifndef __mips__
   auto int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid);
   int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)))
     {
@@ -106,8 +119,10 @@ grub_qemu_init_cirrus (void)
     }
 
   grub_pci_iterate (find_card);
+#endif
 
-  grub_outb (GRUB_VGA_IO_MISC_COLOR, GRUB_VGA_IO_MISC_WRITE);
+  grub_outb (GRUB_VGA_IO_MISC_COLOR,
+            GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_MISC_WRITE);
 
   load_font ();
 
@@ -143,5 +158,5 @@ grub_qemu_init_cirrus (void)
   grub_vga_cr_write (14, GRUB_VGA_CR_CURSOR_START);
   grub_vga_cr_write (15, GRUB_VGA_CR_CURSOR_END);
 
-  grub_outb (0x20, 0x3c0);
+  grub_outb (0x20, GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_ARX);
 }
index 1816bfae240b89939d456dcf3da14686d43d95c3..9abffcc0a6108561aa993969d0ad9b5237034089 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <grub/dl.h>
 #include <grub/i386/vga_common.h>
-#include <grub/i386/io.h>
+#include <grub/cpu/io.h>
 #include <grub/types.h>
 #include <grub/vga.h>
 
@@ -29,7 +29,11 @@ GRUB_MOD_LICENSE ("GPLv3+");
 
 static int grub_curr_x, grub_curr_y;
 
+#ifdef __mips__
+#define VGA_TEXT_SCREEN                ((grub_uint16_t *) 0xb00b8000)
+#else
 #define VGA_TEXT_SCREEN                ((grub_uint16_t *) 0xb8000)
+#endif
 
 static void
 screen_write_char (int x, int y, short c)
index c08405e835527ce05667bae46621ada5e64c86ce..66add4b2ea28e53549a0341eda564560a97f1028 100644 (file)
@@ -25,6 +25,7 @@
 
 void EXPORT_FUNC (grub_reboot) (void);
 void EXPORT_FUNC (grub_halt) (void);
+void grub_qemu_init_cirrus (void);
 
 #endif
 
index bf44395995b26e5d6ef147bc4144c53979e8bbb5..58ec3ba1514c2c66240aacd40c96b08f790fa4cc 100644 (file)
 #ifndef GRUB_VGA_HEADER
 #define GRUB_VGA_HEADER        1
 
+#ifndef GRUB_MACHINE_MIPS_QEMU_MIPS
 #include <grub/pci.h>
+#else
+#include <grub/cpu/io.h>
+#define GRUB_MACHINE_PCI_IO_BASE  0xb4000000
+#endif
 
 enum
   {