Inline grub_stop_floppy

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-04-10 19:59:22 +02:00
parent d2e5601745
commit 8c5ed46e48
5 changed files with 21 additions and 20 deletions

View file

@ -21,8 +21,8 @@
#include <grub/symbol.h> #include <grub/symbol.h>
#include <grub/i386/pc/memory.h> #include <grub/i386/pc/memory.h>
#include <grub/i386/floppy.h>
void EXPORT_FUNC(grub_stop) (void) __attribute__ ((noreturn)); void EXPORT_FUNC(grub_stop) (void) __attribute__ ((noreturn));
void EXPORT_FUNC(grub_stop_floppy) (void);
#endif #endif

View file

@ -1,7 +1,6 @@
/* init.c -- Initialize GRUB on Open Firmware. */
/* /*
* GRUB -- GRand Unified Bootloader * 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 * GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -17,12 +16,21 @@
* along with GRUB. If not, see <http://www.gnu.org/licenses/>. * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <grub/types.h> #ifndef GRUB_FLOPPY_CPU_HEADER
#include <grub/cache.h> #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_stop_floppy (void)
{ {
grub_outb (0, GRUB_FLOPPY_REG_DIGITAL_OUTPUT);
} }
#endif
#endif

View file

@ -22,10 +22,9 @@
#include <grub/types.h> #include <grub/types.h>
#include <grub/symbol.h> #include <grub/symbol.h>
#include <grub/machine/memory.h> #include <grub/machine/memory.h>
#include <grub/cpu/floppy.h>
/* Turn on/off Gate A20. */ /* Turn on/off Gate A20. */
void grub_gate_a20 (int on); void grub_gate_a20 (int on);
void EXPORT_FUNC(grub_stop_floppy) (void);
#endif /* ! GRUB_INIT_MACHINE_HEADER */ #endif /* ! GRUB_INIT_MACHINE_HEADER */

View file

@ -36,8 +36,6 @@
#include <grub/cpu/kernel.h> #include <grub/cpu/kernel.h>
#include <grub/cpu/tsc.h> #include <grub/cpu/tsc.h>
#define GRUB_FLOPPY_REG_DIGITAL_OUTPUT 0x3f2
extern char _start[]; extern char _start[];
extern char _end[]; extern char _end[];
@ -50,14 +48,6 @@ grub_get_rtc (void)
grub_fatal ("grub_get_rtc() is not implemented.\n"); 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 void
grub_exit (void) grub_exit (void)
{ {

View file

@ -45,6 +45,8 @@
* This is the area for all of the special variables. * This is the area for all of the special variables.
*/ */
#include <grub/i386/floppy.h>
.p2align 2 /* force 4-byte alignment */ .p2align 2 /* force 4-byte alignment */
/* /*
@ -96,7 +98,9 @@ bzimage:
/* XXX new stack pointer in safe area for calling functions */ /* XXX new stack pointer in safe area for calling functions */
movl $0x4000, %esp 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 */ /* final setup for linux boot */
call prot_to_real call prot_to_real