2007-11-05 Robert Millan <rmh@aybabtu.com>

* kern/disk.c (grub_disk_firmware_fini)
	(grub_disk_firmware_is_tainted): New variables.

	* include/grub/disk.h (grub_disk_firmware_fini)
	(grub_disk_firmware_is_tainted): Likewise.

	* disk/i386/pc/biosdisk.c (GRUB_MOD_FINI(biosdisk)): Moved from here ...
	(grub_disk_biosdisk_fini): ... to here.
	(GRUB_MOD_FINI(biosdisk)): Implement using grub_disk_biosdisk_fini().
	(GRUB_MOD_INIT(biosdisk)): Abort when `grub_disk_firmware_is_tainted'
	is set.  Register grub_disk_biosdisk_fini() in
	`grub_disk_firmware_fini'.

	* disk/ata.c: Remove `<grub/machine/biosdisk.h>'.
	(GRUB_MOD_INIT(ata)): Remove grub_biosdisk_fini() call.
	Use `grub_disk_firmware_is_tainted' and `grub_disk_firmware_fini'
	to finish existing firmware disk interface.

	* conf/i386-linuxbios.rmk (pkgdata_MODULES): Add `ata.mod'.
	(ata_mod_SOURCES): New variable.
	(ata_mod_CFLAGS): Likewise.
	(ata_mod_LDFLAGS): Likewise.
This commit is contained in:
robertmh 2007-11-05 16:15:27 +00:00
parent 0149ab7c63
commit 5ab33bba2f
7 changed files with 111 additions and 6 deletions

View file

@ -24,7 +24,6 @@
#include <grub/time.h>
/* XXX: For now this only works on i386. */
#include <grub/cpu/io.h>
#include <grub/machine/biosdisk.h>
typedef enum
{
@ -733,8 +732,13 @@ GRUB_MOD_INIT(ata)
{
(void) mod; /* To stop warning. */
/* XXX: To prevent two drivers operating on the same disks. */
grub_biosdisk_fini ();
/* To prevent two drivers operating on the same disks. */
grub_disk_firmware_is_tainted = 1;
if (grub_disk_firmware_fini)
{
grub_disk_firmware_fini ();
grub_disk_firmware_fini = NULL;
}
/* ATA initialization. */
grub_ata_initialize ();