+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.
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;
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;
#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>
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)
grub_keylayouts_init ();
grub_at_keyboard_init ();
+ grub_qemu_init_cirrus ();
+ grub_vga_text_init ();
+
grub_terminfo_init ();
grub_serial_init ();
/*
* 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
* 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>
{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)
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
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)))
{
}
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 ();
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);
}
#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>
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)
void EXPORT_FUNC (grub_reboot) (void);
void EXPORT_FUNC (grub_halt) (void);
+void grub_qemu_init_cirrus (void);
#endif
#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
{