Inline grub_stop_floppy
This commit is contained in:
parent
d2e5601745
commit
8c5ed46e48
5 changed files with 21 additions and 20 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue