-/* init.c -- Initialize GRUB on Open Firmware. */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc.
+ * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,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
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <grub/types.h>
-#include <grub/cache.h>
+#ifndef GRUB_FLOPPY_CPU_HEADER
+#define GRUB_FLOPPY_CPU_HEADER 1
-void grub_stop_floppy (void);
+#define GRUB_FLOPPY_REG_DIGITAL_OUTPUT 0x3f2
-void
+#ifndef ASM_FILE
+#include <grub/cpu/io.h>
+
+/* Stop the floppy drive from spinning, so that other software is
+ jumped to with a known state. */
+static inline void
grub_stop_floppy (void)
{
+ grub_outb (0, GRUB_FLOPPY_REG_DIGITAL_OUTPUT);
}
+#endif
+
+#endif
#include <grub/types.h>
#include <grub/symbol.h>
#include <grub/machine/memory.h>
+#include <grub/cpu/floppy.h>
/* Turn on/off Gate A20. */
void grub_gate_a20 (int on);
-void EXPORT_FUNC(grub_stop_floppy) (void);
-
#endif /* ! GRUB_INIT_MACHINE_HEADER */
#include <grub/cpu/kernel.h>
#include <grub/cpu/tsc.h>
-#define GRUB_FLOPPY_REG_DIGITAL_OUTPUT 0x3f2
-
extern char _start[];
extern char _end[];
grub_fatal ("grub_get_rtc() is not implemented.\n");
}
-/* Stop the floppy drive from spinning, so that other software is
- jumped to with a known state. */
-void
-grub_stop_floppy (void)
-{
- grub_outb (0, GRUB_FLOPPY_REG_DIGITAL_OUTPUT);
-}
-
void
grub_exit (void)
{
* This is the area for all of the special variables.
*/
+#include <grub/i386/floppy.h>
+
.p2align 2 /* force 4-byte alignment */
/*
/* XXX new stack pointer in safe area for calling functions */
movl $0x4000, %esp
- call EXT_C(grub_stop_floppy)
+ movw $GRUB_FLOPPY_REG_DIGITAL_OUTPUT, %dx
+ xorb %al, %al
+ outb %al, %dx
/* final setup for linux boot */
call prot_to_real