aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-03-12 20:57:08 -0400
committerKevin O'Connor <kevin@koconnor.net>2008-03-12 20:57:08 -0400
commit63ccc13b70190d0079f40b369e6c8ab81737f62b (patch)
treefadcf9d98788d3a2d9017c2d7d34d42c6deed27b
parent74799df6e977ffb14a2569e40fd19d262e84b0bb (diff)
downloadseabios-63ccc13b70190d0079f40b369e6c8ab81737f62b.tar.gz
Move ata_detect call to 32bit code.
It's more natural to call the detect code from post. It does require some of the ATA support code be compiled in twice (once in 32bit mode and once in 16 bit), however that only leads to a small increase in total C code (~250 bytes).
-rw-r--r--Makefile2
-rw-r--r--src/boot.c11
-rw-r--r--src/post.c11
3 files changed, 9 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index 7415f6af..10c849ce 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ OUT=out/
# Source files
SRC16=floppy.c disk.c system.c clock.c serial.c kbd.c mouse.c output.c \
boot.c ata.c cdrom.c apm.c util.c
-SRC32=post.c output.c rombios32.c util.c
+SRC32=post.c output.c rombios32.c util.c ata.c
TABLESRC=font.c cbt.c floppy_dbt.c
cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \
diff --git a/src/boot.c b/src/boot.c
index c75bc1b2..c1968a5d 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -206,14 +206,3 @@ handle_19()
debug_enter(NULL);
do_boot(0);
}
-
-// Called from 32bit code - start boot process
-void VISIBLE16
-begin_boot()
-{
- if (CONFIG_ATA)
- ata_detect();
- struct bregs br;
- memset(&br, 0, sizeof(br));
- call16_int(0x19, &br);
-}
diff --git a/src/post.c b/src/post.c
index 321d20b1..3ff8f305 100644
--- a/src/post.c
+++ b/src/post.c
@@ -11,6 +11,7 @@
#include "cmos.h" // CMOS_*
#include "util.h" // memset
#include "biosvar.h" // struct bios_data_area_s
+#include "ata.h"
#define bda ((struct bios_data_area_s *)0)
#define ebda ((struct extended_bios_data_area_s *)(EBDA_SEG<<4))
@@ -532,19 +533,23 @@ post()
floppy_drive_post();
hard_drive_post();
- if (CONFIG_ATA)
+ if (CONFIG_ATA) {
ata_init();
+ ata_detect();
+ }
init_boot_vectors();
- // XXX - original bios calls ata_detect before rom scan.
rom_scan(0xc8000, 0xe0000);
// reset the memory (some boot loaders such as syslinux suppose
// that the memory is set to zero)
memset((void*)0x40000, 0, 0x40000); // XXX - shouldn't use globals
- callrom(SEG_BIOS, OFFSET_begin_boot);
+ // Invoke int 19 to start boot process.
+ struct bregs br;
+ memset(&br, 0, sizeof(br));
+ call16_int(0x19, &br);
}
static void