diff --git a/conf/mips.rmk b/conf/mips.rmk
index ad0219b06..b0a078197 100644
--- a/conf/mips.rmk
+++ b/conf/mips.rmk
@@ -84,7 +84,7 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
grub_emu_LDFLAGS = $(LIBCURSES)
-kernel_img_SOURCES = kern/mipsel/qemu-r4k/startup.S \
+kernel_img_SOURCES = kern/mips/qemu-r4k/startup.S \
kern/main.c kern/device.c kern/$(target_cpu)/$(target_machine)/init.c \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
diff --git a/configure.ac b/configure.ac
index 74dcc5dd4..fa85c29b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -90,12 +90,15 @@ case "$target_cpu"-"$platform" in
powerpc-ieee1275) ;;
sparc64-ieee1275) ;;
mipsel-qemu-r4k) ;;
+ mips-qemu-r4k) ;;
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
esac
case "$target_cpu" in
i386 | powerpc) target_m32=1 ;;
x86_64 | sparc64) target_m64=1 ;;
+ mipsel) TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1"; target_cpu=mips ;;
+ mips) TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1" ;;
esac
case "$host_os" in
diff --git a/include/grub/mips/cache.h b/include/grub/mips/cache.h
new file mode 100644
index 000000000..c3470571e
--- /dev/null
+++ b/include/grub/mips/cache.h
@@ -0,0 +1,27 @@
+/* cache.h - Flush the processor's cache. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004,2007 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 .
+ */
+
+#ifndef GRUB_CPU_CACHE_H
+#define GRUB_CPU_CACHE_H 1
+
+#include
+#include
+
+void EXPORT_FUNC(grub_cpu_flush_cache) (void *start, grub_size_t size, int type);
+#endif
diff --git a/include/grub/mipsel/kernel.h b/include/grub/mips/kernel.h
similarity index 100%
rename from include/grub/mipsel/kernel.h
rename to include/grub/mips/kernel.h
diff --git a/include/grub/mips/libgcc.h b/include/grub/mips/libgcc.h
new file mode 100644
index 000000000..a65842522
--- /dev/null
+++ b/include/grub/mips/libgcc.h
@@ -0,0 +1,26 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004,2007 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 .
+ */
+
+void *EXPORT_FUNC (memset) (void *s, int c, int n) __attribute__ ((weak));
+void EXPORT_FUNC (__ashldi3) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__ashrdi3) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__lshrdi3) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__trampoline_setup) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__ucmpdi2) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__bswapsi2) (void) __attribute__ ((weak));
+void EXPORT_FUNC (__bswapdi2) (void) __attribute__ ((weak));
diff --git a/include/grub/mipsel/qemu-r4k/kernel.h b/include/grub/mips/qemu-r4k/kernel.h
similarity index 100%
rename from include/grub/mipsel/qemu-r4k/kernel.h
rename to include/grub/mips/qemu-r4k/kernel.h
diff --git a/include/grub/mipsel/qemu-r4k/machine.h b/include/grub/mips/qemu-r4k/machine.h
similarity index 100%
rename from include/grub/mipsel/qemu-r4k/machine.h
rename to include/grub/mips/qemu-r4k/machine.h
diff --git a/include/grub/mipsel/qemu-r4k/memory.h b/include/grub/mips/qemu-r4k/memory.h
similarity index 100%
rename from include/grub/mipsel/qemu-r4k/memory.h
rename to include/grub/mips/qemu-r4k/memory.h
diff --git a/include/grub/mipsel/qemu-r4k/time.h b/include/grub/mips/qemu-r4k/time.h
similarity index 100%
rename from include/grub/mipsel/qemu-r4k/time.h
rename to include/grub/mips/qemu-r4k/time.h
diff --git a/include/grub/mipsel/time.h b/include/grub/mips/time.h
similarity index 100%
rename from include/grub/mipsel/time.h
rename to include/grub/mips/time.h
diff --git a/include/grub/mipsel/types.h b/include/grub/mips/types.h
similarity index 84%
rename from include/grub/mipsel/types.h
rename to include/grub/mips/types.h
index 94a35be6e..f5f4602e4 100644
--- a/include/grub/mipsel/types.h
+++ b/include/grub/mips/types.h
@@ -25,7 +25,14 @@
/* The size of long. */
#define GRUB_TARGET_SIZEOF_LONG 4
+#ifdef GRUB_CPU_MIPSEL
/* mipsEL is little-endian. */
#undef GRUB_TARGET_WORDS_BIGENDIAN
+#elif defined (GRUB_CPU_MIPS)
+/* mips is big-endian. */
+#define GRUB_TARGET_WORDS_BIGENDIAN
+#else
+#error Neither GRUB_CPU_MIPS nor GRUB_CPU_MIPSEL is defined
+#endif
#endif /* ! GRUB_TYPES_CPU_HEADER */
diff --git a/kern/mipsel/cache.S b/kern/mips/cache.S
similarity index 100%
rename from kern/mipsel/cache.S
rename to kern/mips/cache.S
diff --git a/kern/mipsel/dl.c b/kern/mips/dl.c
similarity index 95%
rename from kern/mipsel/dl.c
rename to kern/mips/dl.c
index 57854964b..ca93893d2 100644
--- a/kern/mipsel/dl.c
+++ b/kern/mips/dl.c
@@ -92,6 +92,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
switch (ELF_R_TYPE (rel->r_info))
{
+#if 0
case R_386_32:
*addr += sym->st_value;
break;
@@ -100,6 +101,11 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
*addr += (sym->st_value - (Elf_Word) seg->addr
- rel->r_offset);
break;
+#endif
+ default:
+ grub_printf ("Unknown relocation type %d\n",
+ ELF_R_TYPE (rel->r_info));
+ break
}
}
}
diff --git a/kern/mipsel/qemu-r4k/init.c b/kern/mips/qemu-r4k/init.c
similarity index 100%
rename from kern/mipsel/qemu-r4k/init.c
rename to kern/mips/qemu-r4k/init.c
diff --git a/kern/mipsel/qemu-r4k/startup.S b/kern/mips/qemu-r4k/startup.S
similarity index 100%
rename from kern/mipsel/qemu-r4k/startup.S
rename to kern/mips/qemu-r4k/startup.S
diff --git a/kern/term.c b/kern/term.c
index 22660c6a8..0a99ff318 100644
--- a/kern/term.c
+++ b/kern/term.c
@@ -135,21 +135,24 @@ grub_getcharwidth (grub_uint32_t code)
int
grub_getkey (void)
{
- return (grub_cur_term_input->getkey) ();
+ while (!(*((grub_uint8_t *)0x140003f8+5) & 0x01));
+ return *((grub_uint8_t *)0x140003f8);
+ // return (grub_cur_term_input->getkey) ();
}
int
grub_checkkey (void)
{
- return (grub_cur_term_input->checkkey) ();
+ return !!(*((grub_uint8_t *)0x140003f8+5) & 0x01);
+ //return (grub_cur_term_input->checkkey) ();
}
int
grub_getkeystatus (void)
{
- if (grub_cur_term_input->getkeystatus)
+ /* if (grub_cur_term_input->getkeystatus)
return (grub_cur_term_input->getkeystatus) ();
- else
+ else*/
return 0;
}
diff --git a/lib/mipsel/setjmp.S b/lib/mipsel/setjmp.S
deleted file mode 100644
index e69de29bb..000000000