From 8c5ed46e488770805299fa41a1d1614229d037a1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 10 Apr 2010 19:59:22 +0200 Subject: [PATCH] Inline grub_stop_floppy --- include/grub/i386/coreboot/init.h | 2 +- .../init.c => include/grub/i386/floppy.h | 20 +++++++++++++------ include/grub/i386/pc/init.h | 3 +-- kern/i386/coreboot/init.c | 10 ---------- kern/i386/loader.S | 6 +++++- 5 files changed, 21 insertions(+), 20 deletions(-) rename kern/i386/ieee1275/init.c => include/grub/i386/floppy.h (62%) diff --git a/include/grub/i386/coreboot/init.h b/include/grub/i386/coreboot/init.h index e67007414..e944f9cc8 100644 --- a/include/grub/i386/coreboot/init.h +++ b/include/grub/i386/coreboot/init.h @@ -21,8 +21,8 @@ #include #include +#include void EXPORT_FUNC(grub_stop) (void) __attribute__ ((noreturn)); -void EXPORT_FUNC(grub_stop_floppy) (void); #endif diff --git a/kern/i386/ieee1275/init.c b/include/grub/i386/floppy.h similarity index 62% rename from kern/i386/ieee1275/init.c rename to include/grub/i386/floppy.h index 9fb98739b..0e3690549 100644 --- a/kern/i386/ieee1275/init.c +++ b/include/grub/i386/floppy.h @@ -1,7 +1,6 @@ -/* 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 @@ -17,12 +16,21 @@ * along with GRUB. If not, see . */ -#include -#include +#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 + +/* 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 diff --git a/include/grub/i386/pc/init.h b/include/grub/i386/pc/init.h index a6d2abf41..4005a1772 100644 --- a/include/grub/i386/pc/init.h +++ b/include/grub/i386/pc/init.h @@ -22,10 +22,9 @@ #include #include #include +#include /* Turn on/off Gate A20. */ void grub_gate_a20 (int on); -void EXPORT_FUNC(grub_stop_floppy) (void); - #endif /* ! GRUB_INIT_MACHINE_HEADER */ diff --git a/kern/i386/coreboot/init.c b/kern/i386/coreboot/init.c index 5f80f28c1..9013d8f91 100644 --- a/kern/i386/coreboot/init.c +++ b/kern/i386/coreboot/init.c @@ -36,8 +36,6 @@ #include #include -#define GRUB_FLOPPY_REG_DIGITAL_OUTPUT 0x3f2 - extern char _start[]; extern char _end[]; @@ -50,14 +48,6 @@ grub_get_rtc (void) 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) { diff --git a/kern/i386/loader.S b/kern/i386/loader.S index ed57c43ca..9eb5af1f7 100644 --- a/kern/i386/loader.S +++ b/kern/i386/loader.S @@ -45,6 +45,8 @@ * This is the area for all of the special variables. */ +#include + .p2align 2 /* force 4-byte alignment */ /* @@ -96,7 +98,9 @@ bzimage: /* 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