merge trunk

This commit is contained in:
Szymon Janc 2011-08-20 09:49:15 +02:00
commit 540c000f0d
33 changed files with 587 additions and 114 deletions

130
ChangeLog
View file

@ -1,3 +1,133 @@
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/mips/loongson/init.c (grub_reboot): Reboot Fuloong.
* include/grub/cs5536.h (GRUB_CS5536_MSR_DIVIL_RESET): New definition.
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/Makefile.core.def (kernel): Add video/radeon_fuloong2e.c on
loongson.
* grub-core/kern/mips/loongson/init.c (grub_machine_init): Init
video_radeon_fuloong2e.
* grub-core/video/radeon_fuloong2e.c: New file.
* include/grub/video.h (grub_video_id_t): Add new ID
GRUB_VIDEO_DRIVER_RADEON_FULOONG2E.
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/mips/loongson.h (GRUB_CPU_LOONGSON_COP0_PRID): New
define.
* grub-core/kern/mips/loongson/init.c (grub_machine_init): Check
that PRID matches the detected subplatform and reset the subplatform
if it doesn't.
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vprintf): Fix a bug on malloc failure.
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
Fix PCI iterating on functions >= 4.
* grub-core/bus/pci.c (grub_pci_iterate): Remove useless ghost skipping.
* include/grub/mips/loongson/pci.h (GRUB_LOONGSON_OHCI_GHOST_FUNCTION):
Removed.
(GRUB_LOONGSON_EHCI_GHOST_FUNCTION): Likewise.
(grub_pci_read): Fix bitmask.
(grub_pci_read_word): Likewise.
(grub_pci_read_byte): Likewise.
(grub_pci_write): Likewise.
(grub_pci_write_word): Likewise.
(grub_pci_write_byte): Likewise.
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
* configure.ac: Don't impose march=loongson2f on loongson platform. (It
can still be specified in TARGET_CFLAGS)
2011-08-19 Vladimir Serbinenko <phcoder@gmail.com>
Rename Fuloong into Fuloong 2F. Add new ID for Fuloong2E.
* grub-core/Makefile.core.def (fwstart_fuloong): Rename fwstart_fuloong
into fwstart_fuloong2f. Use boot/mips/loongson/fuloong2f.S.
* grub-core/boot/mips/loongson/fuloong.S: Rename to ...
* grub-core/boot/mips/loongson/fuloong2f.S: ... this.
(FULOONG): Rename to ...
(FULOONG2F): ... this. All users updated.
* grub-core/boot/mips/startup_raw.S (machtype_fuloong_str): Rename to
(machtype_fuloong2f_str): ... this.
(machtype_fuloong2e_str): New string.
Check for machtype_fuloong2e_str.
* grub-core/loader/mips/linux.c (loongson_machtypes)
[GRUB_MACHINE_MIPS_LOONGSON]: Add GRUB_ARCH_MACHINE_FULOONG2E.
* grub-core/term/serial.c (loongson_defserial)
[GRUB_MACHINE_MIPS_LOONGSON]: New array.
(grub_serial_register) [GRUB_MACHINE_MIPS_LOONGSON]: Use
loongson_defserial.
* include/grub/mips/loongson/kernel.h (GRUB_ARCH_MACHINE_FULOONG):
Rename to ...
(GRUB_ARCH_MACHINE_FULOONG2F): ... this.
(GRUB_ARCH_MACHINE_FULOONG2E): New const.
* util/grub-mkimage.c (image_target_desc): Rename IMAGE_FULOONG_FLASH
to IMAGE_FULOONG2F_FLASH. All users updated.
(image_targets): Rename images.
* util/grub-mkstandalone.in: Accept fuloong2f and fuloong2e.
2011-08-19 Szymon Janc <szymon@janc.net.pl>
Make enable of disk cache statistics code configurable.
* configure.ac: --enable-cache-stats added.
* config.h.in (DISK_CACHE_STATS): New define.
* grub-core/Makefile.core.def (cacheinfo): New command.
* include/grub/disk.h(grub_disk_cache_get_performance): New function.
* grub-core/commands/cacheinfo.c: New file.
* grub-core/commands/minicmd.c (grub_rescue_cmd_info): Updated and
moved to cacheinfo.c.
* grub-core/kern/disk.c: Use DISK_CACHE_STATS to disable disk cache
debug code.
* include/grub/disk.h: Likewise.
2011-08-19 Szymon Janc <szymon@janc.net.pl>
* Makefile.am (AUTOMAKE_OPTIONS): = Added -Wno-portability flag.
* grub-core/Makefile.am: Likewise.
2011-08-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_iterate): Skip with
non-zero pull.
2011-08-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/fs/jfs.c (grub_jfs_read_file): New parameter ino.
All users updated.
(grub_jfs_lookup_symlink): Use correct starting inode.
2011-08-16 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-setup.c (main): Add missing gcry initialisation.
2011-08-16 Vladimir Serbinenko <phcoder@gmail.com>
Don't accept text modes on EFI when booting Linux.
* grub-core/loader/i386/linux.c (ACCEPTS_PURE_TEXT): New define.
(grub_linux_boot) [!ACCEPTS_PURE_TEXT]: Restrict to graphics modes.
2011-08-15 Mario Limonciello <mario_limonciello@dell.com>
2011-08-15 Colin Watson <cjwatson@ubuntu.com>
* util/grub-probe.c (probe): Canonicalise the path argument, fixing
use of "/path/.." as in grub-install for EFI as well as handling
symlinks correctly.
Fixes Debian bug #637768.
2011-08-15 Colin Watson <cjwatson@ubuntu.com>
* util/grub-probe.c: Remove duplicate #include.
2011-08-10 Robert Millan <rmh@gnu.org> 2011-08-10 Robert Millan <rmh@gnu.org>
Detect LSI MegaRAID SAS (`mfi') devices on GNU/kFreeBSD. Detect LSI MegaRAID SAS (`mfi') devices on GNU/kFreeBSD.

View file

@ -1,4 +1,4 @@
AUTOMAKE_OPTIONS = subdir-objects AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
DEPDIR = .deps-util DEPDIR = .deps-util
SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d

View file

@ -36,6 +36,8 @@
#define NEED_ENABLE_EXECUTE_STACK @NEED_ENABLE_EXECUTE_STACK@ #define NEED_ENABLE_EXECUTE_STACK @NEED_ENABLE_EXECUTE_STACK@
/* Define to 1 if GCC generates calls to __register_frame_info(). */ /* Define to 1 if GCC generates calls to __register_frame_info(). */
#define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@ #define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@
/* Define to 1 to enable disk cache statistics. */
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
#if defined(__i386__) #if defined(__i386__)
#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1))) #define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1)))

View file

@ -412,23 +412,6 @@ if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
fi fi
if test "${target_cpu}-${platform}" = mipsel-loongson; then
AC_CACHE_CHECK([whether -march=loongson2f works], [grub_cv_cc_march_loongson2f], [
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -march=loongson2f"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_march_loongson2f=yes],
[grub_cv_cc_march_loongson2f=no])
CFLAGS="$SAVE_CFLAGS"
])
if test "x$grub_cv_cc_march_loongson2f" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -march=loongson2f"
else
TARGET_CFLAGS="$TARGET_CFLAGS -march=mips3"
fi
fi
grub_apple_target_cc grub_apple_target_cc
if test x$grub_cv_apple_target_cc = xyes ; then if test x$grub_cv_apple_target_cc = xyes ; then
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1" TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1"
@ -717,6 +700,17 @@ AC_ARG_ENABLE([mm-debug],
[AC_DEFINE([MM_DEBUG], [1], [AC_DEFINE([MM_DEBUG], [1],
[Define to 1 if you enable memory manager debugging.])]) [Define to 1 if you enable memory manager debugging.])])
AC_ARG_ENABLE([cache-stats],
AS_HELP_STRING([--enable-cache-stats],
[enable disk cache statistics collection]))
if test x$enable_cache_stats = xyes; then
DISK_CACHE_STATS=1
else
DISK_CACHE_STATS=0
fi
AC_SUBST([DISK_CACHE_STATS])
AC_ARG_ENABLE([grub-emu-usb], AC_ARG_ENABLE([grub-emu-usb],
[AS_HELP_STRING([--enable-grub-emu-usb], [AS_HELP_STRING([--enable-grub-emu-usb],
[build and install the `grub-emu' debugging utility with USB support (default=guessed)])]) [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
@ -990,6 +984,7 @@ AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x])
AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC = x1]) AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC = x1])
AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1]) AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
AM_CONDITIONAL([COND_CYGWIN], [test x$host_os = xcygwin]) AM_CONDITIONAL([COND_CYGWIN], [test x$host_os = xcygwin])
@ -1056,6 +1051,11 @@ echo With memory debugging: Yes
else else
echo With memory debugging: No echo With memory debugging: No
fi fi
if [ x"$enable_cache_stats" = xyes ]; then
echo With disk cache statistics: Yes
else
echo With disk cache statistics: No
fi
if [ x"$efiemu_excuse" = x ]; then if [ x"$efiemu_excuse" = x ]; then
echo efiemu runtime: Yes echo efiemu runtime: Yes
else else

View file

@ -1,4 +1,4 @@
AUTOMAKE_OPTIONS = subdir-objects AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
DEPDIR=.deps-core DEPDIR=.deps-core

View file

@ -180,6 +180,7 @@ kernel = {
mips_loongson = term/serial.c; mips_loongson = term/serial.c;
mips_loongson = video/sm712.c; mips_loongson = video/sm712.c;
mips_loongson = video/sis315pro.c; mips_loongson = video/sis315pro.c;
mips_loongson = video/radeon_fuloong2e.c;
extra_dist = video/sm712_init.c; extra_dist = video/sm712_init.c;
mips_loongson = commands/keylayouts.c; mips_loongson = commands/keylayouts.c;
@ -363,8 +364,8 @@ image = {
}; };
image = { image = {
name = fwstart_fuloong; name = fwstart_fuloong2f;
mips_loongson = boot/mips/loongson/fuloong.S; mips_loongson = boot/mips/loongson/fuloong2f.S;
objcopyflags = '-O binary'; objcopyflags = '-O binary';
ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic'; ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
enable = mips_loongson; enable = mips_loongson;
@ -1680,3 +1681,9 @@ module = {
name = time; name = time;
common = commands/time.c; common = commands/time.c;
}; };
module = {
name = cacheinfo;
common = commands/cacheinfo.c;
condition = COND_ENABLE_CACHE_STATS;
};

View file

@ -1,2 +1,2 @@
#define FULOONG 1 #define FULOONG2F 1
#include "fwstart.S" #include "fwstart.S"

View file

@ -26,7 +26,7 @@
#include <grub/cs5536.h> #include <grub/cs5536.h>
#include <grub/smbus.h> #include <grub/smbus.h>
#ifdef FULOONG #ifdef FULOONG2F
#define GRUB_MACHINE_SERIAL_PORT GRUB_MACHINE_SERIAL_PORT2 #define GRUB_MACHINE_SERIAL_PORT GRUB_MACHINE_SERIAL_PORT2
#define GRUB_MACHINE_SERIAL_DIVISOR_115200 GRUB_MACHINE_SERIAL_PORT2_DIVISOR_115200 #define GRUB_MACHINE_SERIAL_DIVISOR_115200 GRUB_MACHINE_SERIAL_PORT2_DIVISOR_115200
#else #else
@ -43,10 +43,10 @@
start: start:
_start: _start:
__start: __start:
/* Put serial init as soon as possible. But on Fuloong serial is past /* Put serial init as soon as possible. But on Fuloong2f serial is past
Geode, so on Fuloong we need Geode first. Geode, so on Fuloong2f we need Geode first.
*/ */
#ifndef FULOONG #ifndef FULOONG2F
bal serial_hw_init bal serial_hw_init
nop nop
#endif #endif
@ -72,7 +72,7 @@ retry_cs5536:
bnel $t2, $t3, 1b bnel $t2, $t3, 1b
sll $t4, $t4, 1 sll $t4, $t4, 1
#ifndef FULOONG #ifndef FULOONG2F
bal message bal message
addiu $a0, $a0, %lo(cs5536_found) addiu $a0, $a0, %lo(cs5536_found)
bal printhex bal printhex
@ -95,7 +95,7 @@ retry_cs5536:
bal gpio_init bal gpio_init
nop nop
#ifdef FULOONG #ifdef FULOONG2F
bal serial_hw_init bal serial_hw_init
nop nop
#endif #endif
@ -130,7 +130,7 @@ retry_cs5536:
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0) sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0)
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
/* Yeeloong and Fuloong have only one memory slot. */ /* Yeeloong and Fuloong2f have only one memory slot. */
/* Output first byte on serial for debugging. */ /* Output first byte on serial for debugging. */
ori $a1, $zero, GRUB_SMB_RAM_START_ADDR ori $a1, $zero, GRUB_SMB_RAM_START_ADDR
bal read_spd bal read_spd
@ -252,7 +252,7 @@ gpio_init:
/* In: none. Out: none. Clobbered: $t0, $t1, $t2, $a0, $a1, $a2. */ /* In: none. Out: none. Clobbered: $t0, $t1, $t2, $a0, $a1, $a2. */
serial_hw_init: serial_hw_init:
move $t2, $ra move $t2, $ra
#ifdef FULOONG #ifdef FULOONG2F
lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_LEG_IO) lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_LEG_IO)
addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_LEG_IO) addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_LEG_IO)
lui $a1, %hi (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 \ lui $a1, %hi (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 \
@ -471,7 +471,7 @@ regdump:
.quad 0x0100020200010101 /* 4 */ .quad 0x0100020200010101 /* 4 */
.quad 0x0a04030603050203 /* 6 */ .quad 0x0a04030603050203 /* 6 */
.quad 0x0f0e040000010a0b /* 7 */ .quad 0x0f0e040000010a0b /* 7 */
#ifdef FULOONG #ifdef FULOONG2F
.quad 0x0000000100000001 /* 8 */ .quad 0x0000000100000001 /* 8 */
#else #else
.quad 0x0000010200000102 /* 8 */ .quad 0x0000010200000102 /* 8 */
@ -482,7 +482,7 @@ regdump:
.quad 0x002a3c0615000000 /* c */ .quad 0x002a3c0615000000 /* c */
.quad 0x002a002a002a002a /* d */ .quad 0x002a002a002a002a /* d */
.quad 0x002a002a002a002a /* e */ .quad 0x002a002a002a002a /* e */
#ifdef FULOONG #ifdef FULOONG2F
.quad 0x00b40020005b0004 /* f */ .quad 0x00b40020005b0004 /* f */
#else #else
.quad 0x00b40020006d0004 /* f */ .quad 0x00b40020006d0004 /* f */
@ -503,7 +503,7 @@ regdump:
/* Dump of GPIO connections. FIXME: Remove useless and macroify. */ /* Dump of GPIO connections. FIXME: Remove useless and macroify. */
gpio_dump: gpio_dump:
#ifdef FULOONG #ifdef FULOONG2F
.long 0xffff0000, 0x2eefd110, 0xffff0000, 0xffff0000 .long 0xffff0000, 0x2eefd110, 0xffff0000, 0xffff0000
.long 0x2eefd110, 0xffff0000, 0x1000efff, 0xefff1000 .long 0x2eefd110, 0xffff0000, 0x1000efff, 0xefff1000
.long 0x3df3c20c, 0xffff0000, 0xffff0000, 0xffff0000 .long 0x3df3c20c, 0xffff0000, 0xffff0000, 0xffff0000
@ -740,8 +740,8 @@ continue:
lui $t0, %hi(cached_continue - 0x20000000) lui $t0, %hi(cached_continue - 0x20000000)
addiu $t0, $t0, %lo(cached_continue - 0x20000000) addiu $t0, $t0, %lo(cached_continue - 0x20000000)
jr $t0 jr $t0
#ifdef FULOONG #ifdef FULOONG2F
addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_FULOONG) addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_FULOONG2F)
#else #else
addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_YEELOONG) addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_YEELOONG)
#endif #endif

View file

@ -109,7 +109,7 @@ argcont:
DO_PARSE (memsizestr, $s4) DO_PARSE (memsizestr, $s4)
DO_PARSE (highmemsizestr, $s5) DO_PARSE (highmemsizestr, $s5)
DO_CHECKT1 (pmon_yeeloong_verstr, GRUB_ARCH_MACHINE_YEELOONG) DO_CHECKT1 (pmon_yeeloong_verstr, GRUB_ARCH_MACHINE_YEELOONG)
DO_CHECKT1 (pmon_fuloong_verstr, GRUB_ARCH_MACHINE_FULOONG) DO_CHECKT1 (pmon_fuloong2f_verstr, GRUB_ARCH_MACHINE_FULOONG2F)
2: 2:
b argcont b argcont
addiu $t0, $t0, 4 addiu $t0, $t0, 4
@ -155,11 +155,12 @@ memsizestr: .asciiz "memsize="
highmemsizestr: .asciiz "highmemsize=" highmemsizestr: .asciiz "highmemsize="
machtype_yeeloong_str1: .asciiz "machtype=8.9" machtype_yeeloong_str1: .asciiz "machtype=8.9"
machtype_yeeloong_str2: .asciiz "machtype=lemote-yeeloong-" machtype_yeeloong_str2: .asciiz "machtype=lemote-yeeloong-"
machtype_fuloong_str: .asciiz "machtype=lemote-fuloong-" machtype_fuloong2f_str: .asciiz "machtype=lemote-fuloong-2f"
machtype_fuloong2e_str: .asciiz "machtype=lemote-fuloong-2e"
pmon_yeeloong_str: .asciiz "PMON_VER=LM8" pmon_yeeloong_str: .asciiz "PMON_VER=LM8"
pmon_fuloong_str: .asciiz "PMON_VER=LM6" pmon_fuloong2f_str: .asciiz "PMON_VER=LM6"
pmon_yeeloong_verstr: .asciiz "Version=LM8" pmon_yeeloong_verstr: .asciiz "Version=LM8"
pmon_fuloong_verstr: .asciiz "Version=LM6" pmon_fuloong2f_verstr: .asciiz "Version=LM6"
.p2align 2 .p2align 2
argdone: argdone:
@ -173,8 +174,9 @@ argdone:
DO_CHECKA1 (machtype_yeeloong_str1, GRUB_ARCH_MACHINE_YEELOONG) DO_CHECKA1 (machtype_yeeloong_str1, GRUB_ARCH_MACHINE_YEELOONG)
DO_CHECKA1 (machtype_yeeloong_str2, GRUB_ARCH_MACHINE_YEELOONG) DO_CHECKA1 (machtype_yeeloong_str2, GRUB_ARCH_MACHINE_YEELOONG)
DO_CHECKA1 (pmon_yeeloong_str, GRUB_ARCH_MACHINE_YEELOONG) DO_CHECKA1 (pmon_yeeloong_str, GRUB_ARCH_MACHINE_YEELOONG)
DO_CHECKA1 (machtype_fuloong_str, GRUB_ARCH_MACHINE_FULOONG) DO_CHECKA1 (machtype_fuloong2f_str, GRUB_ARCH_MACHINE_FULOONG2F)
DO_CHECKA1 (pmon_fuloong_str, GRUB_ARCH_MACHINE_FULOONG) DO_CHECKA1 (machtype_fuloong2e_str, GRUB_ARCH_MACHINE_FULOONG2E)
DO_CHECKA1 (pmon_fuloong2f_str, GRUB_ARCH_MACHINE_FULOONG2F)
addiu $a0, $a0, -1 addiu $a0, $a0, -1
b argdone b argdone
addiu $a1, $a1, 4 addiu $a1, $a1, 4

View file

@ -281,7 +281,7 @@ grub_cs5536_init_geode (grub_pci_device_t dev)
| GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0 | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0
| GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1); | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1);
break; break;
case GRUB_ARCH_MACHINE_FULOONG: case GRUB_ARCH_MACHINE_FULOONG2F:
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO, grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO,
GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3
| GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1 | GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1

View file

@ -115,16 +115,6 @@ grub_pci_iterate (grub_pci_iteratefunc_t hook)
continue; continue;
} }
#ifdef GRUB_MACHINE_MIPS_LOONGSON
/* Skip ghosts. */
if (id == GRUB_LOONGSON_OHCI_PCIID
&& dev.function == GRUB_LOONGSON_OHCI_GHOST_FUNCTION)
continue;
if (id == GRUB_LOONGSON_EHCI_PCIID
&& dev.function == GRUB_LOONGSON_EHCI_GHOST_FUNCTION)
continue;
#endif
if (hook (dev, id)) if (hook (dev, id))
return; return;

View file

@ -0,0 +1,58 @@
/* cacheinfo.c - disk cache statistics */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2008,2010 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GRUB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#include <grub/dl.h>
#include <grub/misc.h>
#include <grub/command.h>
#include <grub/i18n.h>
#include <grub/disk.h>
static grub_err_t
grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
int argc __attribute__ ((unused)),
char *argv[] __attribute__ ((unused)))
{
unsigned long hits, misses;
grub_disk_cache_get_performance (&hits, &misses);
grub_printf ("Disk cache: hits = %lu, misses = %lu ", hits, misses);
if (hits + misses)
{
unsigned long ratio = hits * 10000 / (hits + misses);
grub_printf ("(%lu.%lu%%)\n", ratio / 100, ratio % 100);
}
else
grub_printf ("(N/A)\n");
return 0;
}
static grub_command_t cmd_cacheinfo;
GRUB_MOD_INIT(cacheinfo)
{
cmd_cacheinfo =
grub_register_command ("cacheinfo", grub_rescue_cmd_info,
0, N_("Get disk cache info."));
}
GRUB_MOD_FINI(cacheinfo)
{
grub_unregister_command (cmd_cacheinfo);
}

View file

@ -90,26 +90,6 @@ grub_mini_cmd_help (struct grub_command *cmd __attribute__ ((unused)),
return 0; return 0;
} }
#if 0
static void
grub_rescue_cmd_info (void)
{
extern void grub_disk_cache_get_performance (unsigned long *,
unsigned long *);
unsigned long hits, misses;
grub_disk_cache_get_performance (&hits, &misses);
grub_printf ("Disk cache: hits = %u, misses = %u ", hits, misses);
if (hits + misses)
{
unsigned long ratio = hits * 10000 / (hits + misses);
grub_printf ("(%u.%u%%)\n", ratio / 100, ratio % 100);
}
else
grub_printf ("(N/A)\n");
}
#endif
/* dump ADDRESS [SIZE] */ /* dump ADDRESS [SIZE] */
static grub_err_t static grub_err_t
grub_mini_cmd_dump (struct grub_command *cmd __attribute__ ((unused)), grub_mini_cmd_dump (struct grub_command *cmd __attribute__ ((unused)),

View file

@ -614,7 +614,8 @@ grub_jfs_read_file (struct grub_jfs_data *data,
/* Find the file with the pathname PATH on the filesystem described by /* Find the file with the pathname PATH on the filesystem described by
DATA. */ DATA. */
static grub_err_t static grub_err_t
grub_jfs_find_file (struct grub_jfs_data *data, const char *path) grub_jfs_find_file (struct grub_jfs_data *data, const char *path,
grub_uint32_t start_ino)
{ {
char fpath[grub_strlen (path)]; char fpath[grub_strlen (path)];
char *name = fpath; char *name = fpath;
@ -623,7 +624,7 @@ grub_jfs_find_file (struct grub_jfs_data *data, const char *path)
grub_strncpy (fpath, path, grub_strlen (path) + 1); grub_strncpy (fpath, path, grub_strlen (path) + 1);
if (grub_jfs_read_inode (data, GRUB_JFS_AGGR_INODE, &data->currinode)) if (grub_jfs_read_inode (data, start_ino, &data->currinode))
return grub_errno; return grub_errno;
/* Skip the first slashes. */ /* Skip the first slashes. */
@ -724,11 +725,7 @@ grub_jfs_lookup_symlink (struct grub_jfs_data *data, grub_uint32_t ino)
if (symlink[0] == '/') if (symlink[0] == '/')
ino = 2; ino = 2;
/* Now load in the old inode. */ grub_jfs_find_file (data, symlink, ino);
if (grub_jfs_read_inode (data, ino, &data->currinode))
return grub_errno;
grub_jfs_find_file (data, symlink);
if (grub_errno) if (grub_errno)
grub_error (grub_errno, "cannot follow symlink `%s'", symlink); grub_error (grub_errno, "cannot follow symlink `%s'", symlink);
@ -750,7 +747,7 @@ grub_jfs_dir (grub_device_t device, const char *path,
if (!data) if (!data)
goto fail; goto fail;
if (grub_jfs_find_file (data, path)) if (grub_jfs_find_file (data, path, GRUB_JFS_AGGR_INODE))
goto fail; goto fail;
diro = grub_jfs_opendir (data, &data->currinode); diro = grub_jfs_opendir (data, &data->currinode);
@ -801,7 +798,7 @@ grub_jfs_open (struct grub_file *file, const char *name)
if (!data) if (!data)
goto fail; goto fail;
grub_jfs_find_file (data, name); grub_jfs_find_file (data, name, GRUB_JFS_AGGR_INODE);
if (grub_errno) if (grub_errno)
goto fail; goto fail;

View file

@ -46,7 +46,7 @@ static struct grub_disk_cache grub_disk_cache_table[GRUB_DISK_CACHE_NUM];
void (*grub_disk_firmware_fini) (void); void (*grub_disk_firmware_fini) (void);
int grub_disk_firmware_is_tainted; int grub_disk_firmware_is_tainted;
#if 0 #if DISK_CACHE_STATS
static unsigned long grub_disk_cache_hits; static unsigned long grub_disk_cache_hits;
static unsigned long grub_disk_cache_misses; static unsigned long grub_disk_cache_misses;
@ -119,13 +119,13 @@ grub_disk_cache_fetch (unsigned long dev_id, unsigned long disk_id,
&& cache->sector == sector) && cache->sector == sector)
{ {
cache->lock = 1; cache->lock = 1;
#if 0 #if DISK_CACHE_STATS
grub_disk_cache_hits++; grub_disk_cache_hits++;
#endif #endif
return cache->data; return cache->data;
} }
#if 0 #if DISK_CACHE_STATS
grub_disk_cache_misses++; grub_disk_cache_misses++;
#endif #endif

View file

@ -217,6 +217,9 @@ grub_util_biosdisk_iterate (int (*hook) (const char *name),
{ {
unsigned i; unsigned i;
if (pull != GRUB_DISK_PULL_NONE)
return 0;
for (i = 0; i < sizeof (map) / sizeof (map[0]); i++) for (i = 0; i < sizeof (map) / sizeof (map[0]); i++)
if (map[i].drive && hook (map[i].drive)) if (map[i].drive && hook (map[i].drive))
return 1; return 1;

View file

@ -35,6 +35,7 @@
extern void grub_video_sm712_init (void); extern void grub_video_sm712_init (void);
extern void grub_video_sis315pro_init (void); extern void grub_video_sis315pro_init (void);
extern void grub_video_radeon_fuloong2e_init (void);
extern void grub_video_init (void); extern void grub_video_init (void);
extern void grub_bitmap_init (void); extern void grub_bitmap_init (void);
extern void grub_font_init (void); extern void grub_font_init (void);
@ -123,6 +124,23 @@ void
grub_machine_init (void) grub_machine_init (void)
{ {
grub_addr_t modend; grub_addr_t modend;
grub_uint32_t prid;
asm volatile ("mfc0 %0, " GRUB_CPU_LOONGSON_COP0_PRID : "=r" (prid));
switch (prid)
{
/* Loongson 2E. */
case 0x6302:
grub_arch_machine = GRUB_ARCH_MACHINE_FULOONG2E;
break;
/* Loongson 2F. */
case 0x6303:
if (grub_arch_machine != GRUB_ARCH_MACHINE_FULOONG2F
&& grub_arch_machine != GRUB_ARCH_MACHINE_YEELOONG)
grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG;
break;
}
/* FIXME: measure this. */ /* FIXME: measure this. */
if (grub_arch_busclock == 0) if (grub_arch_busclock == 0)
@ -189,6 +207,7 @@ grub_machine_init (void)
grub_video_init (); grub_video_init ();
grub_video_sm712_init (); grub_video_sm712_init ();
grub_video_sis315pro_init (); grub_video_sis315pro_init ();
grub_video_radeon_fuloong2e_init ();
grub_bitmap_init (); grub_bitmap_init ();
grub_font_init (); grub_font_init ();
grub_gfxterm_init (); grub_gfxterm_init ();
@ -213,7 +232,9 @@ grub_halt (void)
{ {
switch (grub_arch_machine) switch (grub_arch_machine)
{ {
case GRUB_ARCH_MACHINE_FULOONG: case GRUB_ARCH_MACHINE_FULOONG2E:
break;
case GRUB_ARCH_MACHINE_FULOONG2F:
{ {
grub_pci_device_t dev; grub_pci_device_t dev;
grub_port_t p; grub_port_t p;
@ -248,8 +269,27 @@ grub_exit (void)
void void
grub_reboot (void) grub_reboot (void)
{ {
switch (grub_arch_machine)
{
case GRUB_ARCH_MACHINE_FULOONG2E:
grub_outb (grub_inb (0xbfe00104) & ~4, 0xbfe00104);
grub_outb (grub_inb (0xbfe00104) | 4, 0xbfe00104);
break;
case GRUB_ARCH_MACHINE_FULOONG2F:
{
grub_pci_device_t dev;
if (!grub_cs5536_find (&dev))
break;
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_RESET,
grub_cs5536_read_msr (dev,
GRUB_CS5536_MSR_DIVIL_RESET)
| 1);
break;
}
case GRUB_ARCH_MACHINE_YEELOONG:
grub_write_ec (GRUB_MACHINE_EC_COMMAND_REBOOT); grub_write_ec (GRUB_MACHINE_EC_COMMAND_REBOOT);
break;
}
grub_millisleep (1500); grub_millisleep (1500);
grub_printf ("Reboot failed\n"); grub_printf ("Reboot failed\n");

View file

@ -61,7 +61,7 @@ VARIABLE (grub_arch_highmemsize)
.long 0 .long 0
#ifdef GRUB_MACHINE_MIPS_LOONGSON #ifdef GRUB_MACHINE_MIPS_LOONGSON
VARIABLE (grub_arch_machine) VARIABLE (grub_arch_machine)
.long GRUB_ARCH_MACHINE_FULOONG .long GRUB_ARCH_MACHINE_FULOONG2F
#endif #endif
cont: cont:
/* Save our base. */ /* Save our base. */

View file

@ -210,6 +210,7 @@ grub_vprintf (const char *fmt, va_list args)
buf[PREALLOC_SIZE - 2] = '.'; buf[PREALLOC_SIZE - 2] = '.';
buf[PREALLOC_SIZE - 1] = '.'; buf[PREALLOC_SIZE - 1] = '.';
buf[PREALLOC_SIZE] = 0; buf[PREALLOC_SIZE] = 0;
curbuf = buf;
} }
else else
s = grub_vsnprintf_real (curbuf, s, fmt, ap2); s = grub_vsnprintf_real (curbuf, s, fmt, ap2);

View file

@ -45,15 +45,18 @@ GRUB_MOD_LICENSE ("GPLv3+");
#include <grub/efi/efi.h> #include <grub/efi/efi.h>
#define HAS_VGA_TEXT 0 #define HAS_VGA_TEXT 0
#define DEFAULT_VIDEO_MODE "auto" #define DEFAULT_VIDEO_MODE "auto"
#define ACCEPTS_PURE_TEXT 0
#elif defined (GRUB_MACHINE_IEEE1275) #elif defined (GRUB_MACHINE_IEEE1275)
#include <grub/ieee1275/ieee1275.h> #include <grub/ieee1275/ieee1275.h>
#define HAS_VGA_TEXT 0 #define HAS_VGA_TEXT 0
#define DEFAULT_VIDEO_MODE "text" #define DEFAULT_VIDEO_MODE "text"
#define ACCEPTS_PURE_TEXT 1
#else #else
#include <grub/i386/pc/vbe.h> #include <grub/i386/pc/vbe.h>
#include <grub/i386/pc/console.h> #include <grub/i386/pc/console.h>
#define HAS_VGA_TEXT 1 #define HAS_VGA_TEXT 1
#define DEFAULT_VIDEO_MODE "text" #define DEFAULT_VIDEO_MODE "text"
#define ACCEPTS_PURE_TEXT 1
#endif #endif
#define GRUB_LINUX_CL_OFFSET 0x1000 #define GRUB_LINUX_CL_OFFSET 0x1000
@ -483,12 +486,22 @@ grub_linux_boot (void)
tmp = grub_xasprintf ("%s;" DEFAULT_VIDEO_MODE, modevar); tmp = grub_xasprintf ("%s;" DEFAULT_VIDEO_MODE, modevar);
if (! tmp) if (! tmp)
return grub_errno; return grub_errno;
#if ACCEPTS_PURE_TEXT
err = grub_video_set_mode (tmp, 0, 0); err = grub_video_set_mode (tmp, 0, 0);
#else
err = grub_video_set_mode (tmp, GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
#endif
grub_free (tmp); grub_free (tmp);
} }
else else
{
#if ACCEPTS_PURE_TEXT
err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0, 0); err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0, 0);
#else
err = grub_video_set_mode (DEFAULT_VIDEO_MODE,
GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
#endif
}
if (err) if (err)
{ {
grub_print_error (); grub_print_error ();

View file

@ -41,7 +41,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
const char loongson_machtypes[][60] = const char loongson_machtypes[][60] =
{ {
[GRUB_ARCH_MACHINE_YEELOONG] = "machtype=lemote-yeeloong-2f-8.9inches", [GRUB_ARCH_MACHINE_YEELOONG] = "machtype=lemote-yeeloong-2f-8.9inches",
[GRUB_ARCH_MACHINE_FULOONG] = "machtype=lemote-fuloong-2f-unknown" [GRUB_ARCH_MACHINE_FULOONG2F] = "machtype=lemote-fuloong-2f-unknown",
[GRUB_ARCH_MACHINE_FULOONG2E] = "machtype=lemote-fuloong-2e-unknown"
}; };
#endif #endif

View file

@ -239,6 +239,15 @@ grub_cmd_serial (grub_extcmd_context_t ctxt, int argc, char **args)
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
#ifdef GRUB_MACHINE_MIPS_LOONGSON
const char loongson_defserial[][6] =
{
[GRUB_ARCH_MACHINE_YEELOONG] = "com0",
[GRUB_ARCH_MACHINE_FULOONG2F] = "com2",
[GRUB_ARCH_MACHINE_FULOONG2E] = "com1"
};
#endif
grub_err_t grub_err_t
grub_serial_register (struct grub_serial_port *port) grub_serial_register (struct grub_serial_port *port)
{ {
@ -301,9 +310,7 @@ grub_serial_register (struct grub_serial_port *port)
port->term_out = out; port->term_out = out;
grub_terminfo_output_register (out, "vt100"); grub_terminfo_output_register (out, "vt100");
#ifdef GRUB_MACHINE_MIPS_LOONGSON #ifdef GRUB_MACHINE_MIPS_LOONGSON
if (grub_strcmp (port->name, if (grub_strcmp (port->name, loongson_defserial[grub_arch_machine]) == 0)
(grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG)
? "com0" : "com2") == 0)
{ {
grub_term_register_input_active ("serial_*", in); grub_term_register_input_active ("serial_*", in);
grub_term_register_output_active ("serial_*", out); grub_term_register_output_active ("serial_*", out);

View file

@ -0,0 +1,231 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2005,2006,2007,2008,2009,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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GRUB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#define grub_video_render_target grub_video_fbrender_target
#include <grub/err.h>
#include <grub/types.h>
#include <grub/dl.h>
#include <grub/misc.h>
#include <grub/mm.h>
#include <grub/video.h>
#include <grub/video_fb.h>
#include <grub/pci.h>
#include <grub/vga.h>
#define GRUB_RADEON_FULOONG2E_TOTAL_MEMORY_SPACE 1048576
static struct
{
struct grub_video_mode_info mode_info;
struct grub_video_render_target *render_target;
grub_uint8_t *ptr;
int mapped;
grub_uint32_t base;
grub_pci_device_t dev;
} framebuffer;
static grub_err_t
grub_video_radeon_fuloong2e_video_init (void)
{
/* Reset frame buffer. */
grub_memset (&framebuffer, 0, sizeof(framebuffer));
return grub_video_fb_init ();
}
static grub_err_t
grub_video_radeon_fuloong2e_video_fini (void)
{
if (framebuffer.mapped)
grub_pci_device_unmap_range (framebuffer.dev, framebuffer.ptr,
GRUB_RADEON_FULOONG2E_TOTAL_MEMORY_SPACE);
return grub_video_fb_fini ();
}
static grub_err_t
grub_video_radeon_fuloong2e_setup (unsigned int width, unsigned int height,
unsigned int mode_type, unsigned int mode_mask __attribute__ ((unused)))
{
int depth;
grub_err_t err;
int found = 0;
#ifndef TEST
auto int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)));
int NESTED_FUNC_ATTR find_card (grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)))
{
grub_pci_address_t addr;
grub_uint32_t class;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
class = grub_pci_read (addr);
if (((class >> 16) & 0xffff) != GRUB_PCI_CLASS_SUBCLASS_VGA
|| pciid != 0x515a1002)
return 0;
found = 1;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
framebuffer.base = grub_pci_read (addr);
framebuffer.dev = dev;
return 1;
}
/* Decode depth from mode_type. If it is zero, then autodetect. */
depth = (mode_type & GRUB_VIDEO_MODE_TYPE_DEPTH_MASK)
>> GRUB_VIDEO_MODE_TYPE_DEPTH_POS;
if ((width != 640 && width != 0) || (height != 480 && height != 0)
|| (depth != 16 && depth != 0))
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
"Only 1024x600x16 is supported");
grub_pci_iterate (find_card);
if (!found)
return grub_error (GRUB_ERR_IO, "Couldn't find graphics card");
#endif
/* Fill mode info details. */
framebuffer.mode_info.width = 640;
framebuffer.mode_info.height = 480;
framebuffer.mode_info.mode_type = GRUB_VIDEO_MODE_TYPE_RGB;
framebuffer.mode_info.bpp = 16;
framebuffer.mode_info.bytes_per_pixel = 2;
framebuffer.mode_info.pitch = 640 * 2;
framebuffer.mode_info.number_of_colors = 256;
framebuffer.mode_info.red_mask_size = 5;
framebuffer.mode_info.red_field_pos = 11;
framebuffer.mode_info.green_mask_size = 6;
framebuffer.mode_info.green_field_pos = 5;
framebuffer.mode_info.blue_mask_size = 5;
framebuffer.mode_info.blue_field_pos = 0;
framebuffer.mode_info.reserved_mask_size = 0;
framebuffer.mode_info.reserved_field_pos = 0;
#ifndef TEST
framebuffer.mode_info.blit_format
= grub_video_get_blit_format (&framebuffer.mode_info);
#endif
/* We can safely discard volatile attribute. */
#ifndef TEST
framebuffer.ptr
= (void *) grub_pci_device_map_range (framebuffer.dev,
framebuffer.base,
GRUB_RADEON_FULOONG2E_TOTAL_MEMORY_SPACE);
#endif
framebuffer.mapped = 1;
/* Prevent garbage from appearing on the screen. */
grub_memset (framebuffer.ptr, 0x55,
framebuffer.mode_info.height * framebuffer.mode_info.pitch);
#ifndef TEST
err = grub_video_fb_create_render_target_from_pointer (&framebuffer
.render_target,
&framebuffer.mode_info,
framebuffer.ptr);
if (err)
return err;
err = grub_video_fb_set_active_render_target (framebuffer.render_target);
if (err)
return err;
/* Copy default palette to initialize emulated palette. */
err = grub_video_fb_set_palette (0, GRUB_VIDEO_FBSTD_NUMCOLORS,
grub_video_fbstd_colors);
#endif
return err;
}
static grub_err_t
grub_video_radeon_fuloong2e_swap_buffers (void)
{
/* TODO: Implement buffer swapping. */
return GRUB_ERR_NONE;
}
static grub_err_t
grub_video_radeon_fuloong2e_set_active_render_target (struct grub_video_render_target *target)
{
if (target == GRUB_VIDEO_RENDER_TARGET_DISPLAY)
target = framebuffer.render_target;
return grub_video_fb_set_active_render_target (target);
}
static grub_err_t
grub_video_radeon_fuloong2e_get_info_and_fini (struct grub_video_mode_info *mode_info,
void **framebuf)
{
grub_memcpy (mode_info, &(framebuffer.mode_info), sizeof (*mode_info));
*framebuf = (char *) framebuffer.ptr;
grub_video_fb_fini ();
return GRUB_ERR_NONE;
}
static struct grub_video_adapter grub_video_radeon_fuloong2e_adapter =
{
.name = "RADEON RV100 QZ (Fuloong2E) Video Driver",
.id = GRUB_VIDEO_DRIVER_RADEON_FULOONG2E,
.prio = GRUB_VIDEO_ADAPTER_PRIO_NATIVE,
.init = grub_video_radeon_fuloong2e_video_init,
.fini = grub_video_radeon_fuloong2e_video_fini,
.setup = grub_video_radeon_fuloong2e_setup,
.get_info = grub_video_fb_get_info,
.get_info_and_fini = grub_video_radeon_fuloong2e_get_info_and_fini,
.set_palette = grub_video_fb_set_palette,
.get_palette = grub_video_fb_get_palette,
.set_viewport = grub_video_fb_set_viewport,
.get_viewport = grub_video_fb_get_viewport,
.map_color = grub_video_fb_map_color,
.map_rgb = grub_video_fb_map_rgb,
.map_rgba = grub_video_fb_map_rgba,
.unmap_color = grub_video_fb_unmap_color,
.fill_rect = grub_video_fb_fill_rect,
.blit_bitmap = grub_video_fb_blit_bitmap,
.blit_render_target = grub_video_fb_blit_render_target,
.scroll = grub_video_fb_scroll,
.swap_buffers = grub_video_radeon_fuloong2e_swap_buffers,
.create_render_target = grub_video_fb_create_render_target,
.delete_render_target = grub_video_fb_delete_render_target,
.set_active_render_target = grub_video_radeon_fuloong2e_set_active_render_target,
.get_active_render_target = grub_video_fb_get_active_render_target,
.next = 0
};
GRUB_MOD_INIT(video_radeon_fuloong2e)
{
grub_video_register (&grub_video_radeon_fuloong2e_adapter);
}
GRUB_MOD_FINI(video_radeon_fuloong2e)
{
grub_video_unregister (&grub_video_radeon_fuloong2e_adapter);
}

View file

@ -77,6 +77,7 @@
#define GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP 0x04000000 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP 0x04000000
#define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1 0x00070000 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1 0x00070000
#define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 0x00500000 #define GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 0x00500000
#define GRUB_CS5536_MSR_DIVIL_RESET 0x80000017
#define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_PRIMARY_MASK 0x80000024 #define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_PRIMARY_MASK 0x80000024
#define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_LPC_MASK 0x80000025 #define GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_LPC_MASK 0x80000025
#define GRUB_CS5536_DIVIL_LPC_INTERRUPTS 0x1002 #define GRUB_CS5536_DIVIL_LPC_INTERRUPTS 0x1002

View file

@ -175,6 +175,11 @@ grub_err_t EXPORT_FUNC(grub_disk_write) (grub_disk_t disk,
grub_uint64_t EXPORT_FUNC(grub_disk_get_size) (grub_disk_t disk); grub_uint64_t EXPORT_FUNC(grub_disk_get_size) (grub_disk_t disk);
#if DISK_CACHE_STATS
void
EXPORT_FUNC(grub_disk_cache_get_performance) (unsigned long *hits, unsigned long *misses);
#endif
extern void (* EXPORT_VAR(grub_disk_firmware_fini)) (void); extern void (* EXPORT_VAR(grub_disk_firmware_fini)) (void);
extern int EXPORT_VAR(grub_disk_firmware_is_tainted); extern int EXPORT_VAR(grub_disk_firmware_is_tainted);

View file

@ -66,6 +66,7 @@
#define GRUB_CPU_LOONGSON_COP0_BADVADDR GRUB_CPU_REGISTER_WRAP($8) #define GRUB_CPU_LOONGSON_COP0_BADVADDR GRUB_CPU_REGISTER_WRAP($8)
#define GRUB_CPU_LOONGSON_COP0_CAUSE GRUB_CPU_REGISTER_WRAP($13) #define GRUB_CPU_LOONGSON_COP0_CAUSE GRUB_CPU_REGISTER_WRAP($13)
#define GRUB_CPU_LOONGSON_COP0_EPC GRUB_CPU_REGISTER_WRAP($14) #define GRUB_CPU_LOONGSON_COP0_EPC GRUB_CPU_REGISTER_WRAP($14)
#define GRUB_CPU_LOONGSON_COP0_PRID GRUB_CPU_REGISTER_WRAP($15)
#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO GRUB_CPU_REGISTER_WRAP($28) #define GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO GRUB_CPU_REGISTER_WRAP($28)
#define GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI GRUB_CPU_REGISTER_WRAP($29) #define GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI GRUB_CPU_REGISTER_WRAP($29)

View file

@ -23,7 +23,8 @@
#include <grub/cpu/kernel.h> #include <grub/cpu/kernel.h>
#define GRUB_ARCH_MACHINE_YEELOONG 0 #define GRUB_ARCH_MACHINE_YEELOONG 0
#define GRUB_ARCH_MACHINE_FULOONG 1 #define GRUB_ARCH_MACHINE_FULOONG2F 1
#define GRUB_ARCH_MACHINE_FULOONG2E 2
#ifndef ASM_FILE #ifndef ASM_FILE

View file

@ -26,8 +26,6 @@
#define GRUB_LOONGSON_OHCI_PCIID 0x00351033 #define GRUB_LOONGSON_OHCI_PCIID 0x00351033
#define GRUB_LOONGSON_EHCI_PCIID 0x00e01033 #define GRUB_LOONGSON_EHCI_PCIID 0x00e01033
#define GRUB_LOONGSON_OHCI_GHOST_FUNCTION 4
#define GRUB_LOONGSON_EHCI_GHOST_FUNCTION 5
#define GRUB_PCI_NUM_BUS 1 #define GRUB_PCI_NUM_BUS 1
#define GRUB_PCI_NUM_DEVICES 16 #define GRUB_PCI_NUM_DEVICES 16
@ -66,7 +64,7 @@ grub_pci_read (grub_pci_address_t addr)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
return *(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE return *(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)); | (addr & 0x07ff));
} }
static inline grub_uint16_t static inline grub_uint16_t
@ -74,7 +72,7 @@ grub_pci_read_word (grub_pci_address_t addr)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
return *(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE return *(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)); | (addr & 0x07ff));
} }
static inline grub_uint8_t static inline grub_uint8_t
@ -82,7 +80,7 @@ grub_pci_read_byte (grub_pci_address_t addr)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
return *(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE return *(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)); | (addr & 0x07ff));
} }
static inline void static inline void
@ -90,7 +88,7 @@ grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
*(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE *(volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)) = data; | (addr & 0x07ff)) = data;
} }
static inline void static inline void
@ -98,7 +96,7 @@ grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
*(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE *(volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)) = data; | (addr & 0x07ff)) = data;
} }
static inline void static inline void
@ -106,7 +104,7 @@ grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
{ {
GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf); GRUB_MACHINE_PCI_CONF_CTRL_REG = 1 << ((addr >> 11) & 0xf);
*(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE *(volatile grub_uint8_t *) (GRUB_MACHINE_PCI_CONFSPACE
| (addr & 0x03ff)) = data; | (addr & 0x07ff)) = data;
} }
volatile void * volatile void *

View file

@ -282,6 +282,7 @@ typedef enum grub_video_driver_id
GRUB_VIDEO_DRIVER_BOCHS, GRUB_VIDEO_DRIVER_BOCHS,
GRUB_VIDEO_DRIVER_SDL, GRUB_VIDEO_DRIVER_SDL,
GRUB_VIDEO_DRIVER_SIS315PRO, GRUB_VIDEO_DRIVER_SIS315PRO,
GRUB_VIDEO_DRIVER_RADEON_FULOONG2E,
} grub_video_driver_id_t; } grub_video_driver_id_t;
typedef enum grub_video_adapter_prio typedef enum grub_video_adapter_prio

View file

@ -67,7 +67,7 @@ struct image_target_desc
IMAGE_I386_PC, IMAGE_EFI, IMAGE_COREBOOT, IMAGE_I386_PC, IMAGE_EFI, IMAGE_COREBOOT,
IMAGE_SPARC64_AOUT, IMAGE_SPARC64_RAW, IMAGE_I386_IEEE1275, IMAGE_SPARC64_AOUT, IMAGE_SPARC64_RAW, IMAGE_I386_IEEE1275,
IMAGE_LOONGSON_ELF, IMAGE_QEMU, IMAGE_PPC, IMAGE_YEELOONG_FLASH, IMAGE_LOONGSON_ELF, IMAGE_QEMU, IMAGE_PPC, IMAGE_YEELOONG_FLASH,
IMAGE_FULOONG_FLASH, IMAGE_I386_PC_PXE, IMAGE_MIPS_ARC, IMAGE_FULOONG2F_FLASH, IMAGE_I386_PC_PXE, IMAGE_MIPS_ARC,
IMAGE_QEMU_MIPS_FLASH IMAGE_QEMU_MIPS_FLASH
} id; } id;
enum enum
@ -298,10 +298,10 @@ struct image_target_desc image_targets[] =
}, },
{ {
.dirname = "mipsel-loongson", .dirname = "mipsel-loongson",
.names = { "mipsel-fuloong-flash", NULL }, .names = { "mipsel-fuloong2f-flash", NULL },
.voidp_sizeof = 4, .voidp_sizeof = 4,
.bigendian = 0, .bigendian = 0,
.id = IMAGE_FULOONG_FLASH, .id = IMAGE_FULOONG2F_FLASH,
.flags = PLATFORM_FLAGS_DECOMPRESSORS, .flags = PLATFORM_FLAGS_DECOMPRESSORS,
.prefix = GRUB_KERNEL_MIPS_LOONGSON_PREFIX, .prefix = GRUB_KERNEL_MIPS_LOONGSON_PREFIX,
.prefix_end = GRUB_KERNEL_MIPS_LOONGSON_PREFIX_END, .prefix_end = GRUB_KERNEL_MIPS_LOONGSON_PREFIX_END,
@ -321,6 +321,7 @@ struct image_target_desc image_targets[] =
{ {
.dirname = "mipsel-loongson", .dirname = "mipsel-loongson",
.names = { "mipsel-loongson-elf", "mipsel-yeeloong-elf", .names = { "mipsel-loongson-elf", "mipsel-yeeloong-elf",
"mipsel-fuloong2f-elf", "mipsel-fuloong2e-elf",
"mipsel-fuloong-elf", NULL }, "mipsel-fuloong-elf", NULL },
.voidp_sizeof = 4, .voidp_sizeof = 4,
.bigendian = 0, .bigendian = 0,
@ -1362,7 +1363,7 @@ generate_image (const char *dir, char *prefix, FILE *out, char *mods[],
} }
break; break;
case IMAGE_YEELOONG_FLASH: case IMAGE_YEELOONG_FLASH:
case IMAGE_FULOONG_FLASH: case IMAGE_FULOONG2F_FLASH:
{ {
char *rom_img; char *rom_img;
size_t rom_size; size_t rom_size;
@ -1381,7 +1382,7 @@ generate_image (const char *dir, char *prefix, FILE *out, char *mods[],
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
/* None yet. */ /* None yet. */
const grub_uint8_t fuloong_fwstart_good_hash[512 / 8] = const grub_uint8_t fuloong2f_fwstart_good_hash[512 / 8] =
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -1393,10 +1394,10 @@ generate_image (const char *dir, char *prefix, FILE *out, char *mods[],
}; };
const grub_uint8_t *fwstart_good_hash; const grub_uint8_t *fwstart_good_hash;
if (image_target->id == IMAGE_FULOONG_FLASH) if (image_target->id == IMAGE_FULOONG2F_FLASH)
{ {
fwstart_good_hash = fuloong_fwstart_good_hash; fwstart_good_hash = fuloong2f_fwstart_good_hash;
boot_path = grub_util_get_path (dir, "fwstart_fuloong.img"); boot_path = grub_util_get_path (dir, "fwstart_fuloong2f.img");
} }
else else
{ {

View file

@ -136,7 +136,7 @@ if [ "x$source_directory" = x ] ; then
cpu="`echo $format | awk -F - '{ print $1; }'`" cpu="`echo $format | awk -F - '{ print $1; }'`"
platform="`echo $format | awk -F - '{ print $2; }'`" platform="`echo $format | awk -F - '{ print $2; }'`"
case "$platform" in case "$platform" in
yeeloong | fuloong) yeeloong | fuloong | fuloong2f | fuloong2e)
platform=loongson ;; platform=loongson ;;
esac esac
case "$cpu-$platform" in case "$cpu-$platform" in

View file

@ -21,7 +21,6 @@
#include <grub/types.h> #include <grub/types.h>
#include <grub/emu/misc.h> #include <grub/emu/misc.h>
#include <grub/util/misc.h> #include <grub/util/misc.h>
#include <grub/util/misc.h>
#include <grub/device.h> #include <grub/device.h>
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/file.h> #include <grub/file.h>
@ -181,7 +180,10 @@ probe (const char *path, char *device_name)
#endif #endif
} }
else else
device_name = grub_guess_root_device (path); {
grub_path = canonicalize_file_name (path);
device_name = grub_guess_root_device (grub_path);
}
if (! device_name) if (! device_name)
grub_util_error ("cannot find a device for %s (is /dev mounted?)", path); grub_util_error ("cannot find a device for %s (is /dev mounted?)", path);

View file

@ -893,6 +893,7 @@ main (int argc, char *argv[])
/* Initialize all modules. */ /* Initialize all modules. */
grub_init_all (); grub_init_all ();
grub_gcry_init_all ();
grub_lvm_fini (); grub_lvm_fini ();
grub_mdraid09_fini (); grub_mdraid09_fini ();