aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-07-12 09:29:46 -0400
committerKevin O'Connor <kevin@koconnor.net>2009-07-12 09:29:46 -0400
commit9becbf1652cd001b812f9ae1d88fb2f921407768 (patch)
treec9ed5153c409235a365ed37df7a99e4a7c53bdbc
parent96f6fcd2bd60230cffb09edbea88df3b92517f3a (diff)
downloadseabios-9becbf1652cd001b812f9ae1d88fb2f921407768.tar.gz
Delay fdpt pointer setting in ebda to drive map stage.
Can't set the fdpt pointers during init as the ebda might get moved.
-rw-r--r--src/ata.c7
-rw-r--r--src/post.c3
2 files changed, 8 insertions, 2 deletions
diff --git a/src/ata.c b/src/ata.c
index 699eecd4..17f1c811 100644
--- a/src/ata.c
+++ b/src/ata.c
@@ -952,6 +952,13 @@ fill_fdpt(int driveid)
// Checksum structure.
fdpt->checksum -= checksum(fdpt, sizeof(*fdpt));
+
+ if (driveid == 0)
+ SET_IVT(0x41, get_ebda_seg()
+ , offsetof(struct extended_bios_data_area_s, fdpt[0]));
+ else
+ SET_IVT(0x46, get_ebda_seg()
+ , offsetof(struct extended_bios_data_area_s, fdpt[1]));
}
// Map a drive (that was registered via add_bcv_hd)
diff --git a/src/post.c b/src/post.c
index b0189356..aa7b83f9 100644
--- a/src/post.c
+++ b/src/post.c
@@ -81,11 +81,10 @@ init_bda()
u16 eseg = EBDA_SEGMENT_START;
SET_BDA(ebda_seg, eseg);
+ // Init ebda
struct extended_bios_data_area_s *ebda = get_ebda_ptr();
memset(ebda, 0, sizeof(*ebda));
ebda->size = esize;
- SET_IVT(0x41, eseg, offsetof(struct extended_bios_data_area_s, fdpt[0]));
- SET_IVT(0x46, eseg, offsetof(struct extended_bios_data_area_s, fdpt[1]));
}
static void